diff --git a/_build/.doctrees/01_query.doctree b/_build/.doctrees/01_query.doctree new file mode 100644 index 0000000..c51a49b Binary files /dev/null and b/_build/.doctrees/01_query.doctree differ diff --git a/_build/.doctrees/02_coords.doctree b/_build/.doctrees/02_coords.doctree new file mode 100644 index 0000000..003238f Binary files /dev/null and b/_build/.doctrees/02_coords.doctree differ diff --git a/_build/.doctrees/03_motion.doctree b/_build/.doctrees/03_motion.doctree new file mode 100644 index 0000000..ba75fe3 Binary files /dev/null and b/_build/.doctrees/03_motion.doctree differ diff --git a/_build/.doctrees/04_select.doctree b/_build/.doctrees/04_select.doctree new file mode 100644 index 0000000..de0c943 Binary files /dev/null and b/_build/.doctrees/04_select.doctree differ diff --git a/_build/.doctrees/05_join.doctree b/_build/.doctrees/05_join.doctree new file mode 100644 index 0000000..4059fd2 Binary files /dev/null and b/_build/.doctrees/05_join.doctree differ diff --git a/_build/.doctrees/06_photo.doctree b/_build/.doctrees/06_photo.doctree new file mode 100644 index 0000000..37f0b78 Binary files /dev/null and b/_build/.doctrees/06_photo.doctree differ diff --git a/_build/.doctrees/07_plot.doctree b/_build/.doctrees/07_plot.doctree new file mode 100644 index 0000000..92605d4 Binary files /dev/null and b/_build/.doctrees/07_plot.doctree differ diff --git a/_build/.doctrees/AstronomicalData/01_query.doctree b/_build/.doctrees/AstronomicalData/01_query.doctree new file mode 100644 index 0000000..c2734aa Binary files /dev/null and b/_build/.doctrees/AstronomicalData/01_query.doctree differ diff --git a/_build/.doctrees/AstronomicalData/02_coords.doctree b/_build/.doctrees/AstronomicalData/02_coords.doctree new file mode 100644 index 0000000..afd38d6 Binary files /dev/null and b/_build/.doctrees/AstronomicalData/02_coords.doctree differ diff --git a/_build/.doctrees/AstronomicalData/README.doctree b/_build/.doctrees/AstronomicalData/README.doctree new file mode 100644 index 0000000..f2b136a Binary files /dev/null and b/_build/.doctrees/AstronomicalData/README.doctree differ diff --git a/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.doctree b/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.doctree new file mode 100644 index 0000000..74eaeb2 Binary files /dev/null and b/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.doctree differ diff --git a/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.doctree b/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.doctree new file mode 100644 index 0000000..476f9e0 Binary files /dev/null and b/_build/.doctrees/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.doctree differ diff --git a/_build/.doctrees/AstronomicalData/_build/jupyter_execute/01_query.doctree b/_build/.doctrees/AstronomicalData/_build/jupyter_execute/01_query.doctree new file mode 100644 index 0000000..81ea0d1 Binary files /dev/null and b/_build/.doctrees/AstronomicalData/_build/jupyter_execute/01_query.doctree differ diff --git a/_build/.doctrees/AstronomicalData/_build/jupyter_execute/02_coords.doctree b/_build/.doctrees/AstronomicalData/_build/jupyter_execute/02_coords.doctree new file mode 100644 index 0000000..f3747e5 Binary files /dev/null and b/_build/.doctrees/AstronomicalData/_build/jupyter_execute/02_coords.doctree differ diff --git a/_build/.doctrees/README.doctree b/_build/.doctrees/README.doctree new file mode 100644 index 0000000..5e9d90b Binary files /dev/null and b/_build/.doctrees/README.doctree differ diff --git a/_build/.doctrees/environment.pickle b/_build/.doctrees/environment.pickle new file mode 100644 index 0000000..46844e1 Binary files /dev/null and b/_build/.doctrees/environment.pickle differ diff --git a/_build/.doctrees/glue_cache.json b/_build/.doctrees/glue_cache.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/_build/.doctrees/glue_cache.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/_build/.doctrees/index.doctree b/_build/.doctrees/index.doctree new file mode 100644 index 0000000..d29a3a5 Binary files /dev/null and b/_build/.doctrees/index.doctree differ diff --git a/_build/.doctrees/last_resort.doctree b/_build/.doctrees/last_resort.doctree new file mode 100644 index 0000000..965d01a Binary files /dev/null and b/_build/.doctrees/last_resort.doctree differ diff --git a/_build/.doctrees/test_setup.doctree b/_build/.doctrees/test_setup.doctree new file mode 100644 index 0000000..d5d73dc Binary files /dev/null and b/_build/.doctrees/test_setup.doctree differ diff --git a/_build/html/.buildinfo b/_build/html/.buildinfo new file mode 100644 index 0000000..f6e3cda --- /dev/null +++ b/_build/html/.buildinfo @@ -0,0 +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: 7b7ae02bbec54b0f50ef711ddeec201f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_build/html/01_query.html b/_build/html/01_query.html new file mode 100644 index 0000000..352e22b --- /dev/null +++ b/_build/html/01_query.html @@ -0,0 +1,1247 @@ + + + + + + + + Chapter 1 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 1

+

Astronomical Data in Python is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

As the abstract explains, “Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.”

+

GD-1 is a stellar stream, which is “an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.”

+

This article in Science magazine explains some of the background, including the process that led to the paper and an discussion of the scientific implications:

+
    +
  • “The streams are particularly useful for … galactic archaeology — rewinding the cosmic clock to reconstruct the assembly of the Milky Way.”

  • +
  • “They also are being used as exquisitely sensitive scales to measure the galaxy’s mass.”

  • +
  • “… the streams are well-positioned to reveal the presence of dark matter … because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.”

  • +
+
+

Data

+

The datasets we will work with are:

+
    +
  • Gaia, which is “a space observatory of the European Space Agency (ESA), launched in 2013 … designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision”, and

  • +
  • Pan-STARRS, The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.

  • +
+

Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +One of the goals of this workshop is to provide tools for working with large datasets.

+
+
+

Prerequisites

+

These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started.

+

We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don’t assume you have any prior experience with databases.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+
+
+

Outline

+

The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:

+
    +
  1. First we’ll make a connection to the Gaia server,

  2. +
  3. We will explore information about the database and the tables it contains,

  4. +
  5. We will write a query and send it to the server, and finally

  6. +
  7. We will download the response from the server.

  8. +
+

After completing this lesson, you should be able to

+
    +
  • Compose a basic query in ADQL.

  • +
  • Use queries to explore a database and its tables.

  • +
  • Use queries to download data.

  • +
  • Develop, test, and debug a query incrementally.

  • +
+
+
+

Query Language

+

In order to select data from a database, you have to compose a query, which is like a program written in a “query language”. +The query language we’ll use is ADQL, which stands for “Astronomical Data Query Language”.

+

ADQL is a dialect of SQL (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.

+

The reference manual for ADQL is here. +But you might find it easier to learn from this ADQL Cookbook.

+
+
+

Installing libraries

+

The library we’ll use to get Gaia data is Astroquery.

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+

Connecting to Gaia

+

Astroquery provides Gaia, which is an object that represents a connection to the Gaia database.

+

We can connect to the Gaia database like this:

+
from astroquery.gaia import Gaia
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+

Running this import statement has the effect of creating a TAP+ connection; TAP stands for “Table Access Protocol”. It is a network protocol for sending queries to the database and getting back the results. We’re not sure why it seems to create two connections.

+
+
+

Databases and Tables

+

What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:

+
    +
  • A database is a collection of one or more named tables.

  • +
  • Each table is a 2-D array with one or more named columns of data.

  • +
+

We can use Gaia.load_tables to get the names of the tables in the Gaia database. With the option only_names=True, it loads information about the tables, called the “metadata”, not the data itself.

+
tables = Gaia.load_tables(only_names=True)
+
+
+
INFO: Retrieving tables... [astroquery.utils.tap.core]
+INFO: Parsing tables... [astroquery.utils.tap.core]
+INFO: Done. [astroquery.utils.tap.core]
+
+
+
for table in (tables):
+    print(table.get_qualified_name())
+
+
+
external.external.apassdr9
+external.external.gaiadr2_geometric_distance
+external.external.galex_ais
+external.external.ravedr5_com
+external.external.ravedr5_dr5
+external.external.ravedr5_gra
+external.external.ravedr5_on
+external.external.sdssdr13_photoprimary
+external.external.skymapperdr1_master
+external.external.tmass_xsc
+public.public.hipparcos
+public.public.hipparcos_newreduction
+public.public.hubble_sc
+public.public.igsl_source
+public.public.igsl_source_catalog_ids
+public.public.tycho2
+public.public.dual
+tap_config.tap_config.coord_sys
+tap_config.tap_config.properties
+tap_schema.tap_schema.columns
+tap_schema.tap_schema.key_columns
+tap_schema.tap_schema.keys
+tap_schema.tap_schema.schemas
+tap_schema.tap_schema.tables
+gaiadr1.gaiadr1.aux_qso_icrf2_match
+gaiadr1.gaiadr1.ext_phot_zero_point
+gaiadr1.gaiadr1.allwise_best_neighbour
+gaiadr1.gaiadr1.allwise_neighbourhood
+gaiadr1.gaiadr1.gsc23_best_neighbour
+gaiadr1.gaiadr1.gsc23_neighbourhood
+gaiadr1.gaiadr1.ppmxl_best_neighbour
+gaiadr1.gaiadr1.ppmxl_neighbourhood
+gaiadr1.gaiadr1.sdss_dr9_best_neighbour
+gaiadr1.gaiadr1.sdss_dr9_neighbourhood
+gaiadr1.gaiadr1.tmass_best_neighbour
+gaiadr1.gaiadr1.tmass_neighbourhood
+gaiadr1.gaiadr1.ucac4_best_neighbour
+gaiadr1.gaiadr1.ucac4_neighbourhood
+gaiadr1.gaiadr1.urat1_best_neighbour
+gaiadr1.gaiadr1.urat1_neighbourhood
+gaiadr1.gaiadr1.cepheid
+gaiadr1.gaiadr1.phot_variable_time_series_gfov
+gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters
+gaiadr1.gaiadr1.rrlyrae
+gaiadr1.gaiadr1.variable_summary
+gaiadr1.gaiadr1.allwise_original_valid
+gaiadr1.gaiadr1.gsc23_original_valid
+gaiadr1.gaiadr1.ppmxl_original_valid
+gaiadr1.gaiadr1.sdssdr9_original_valid
+gaiadr1.gaiadr1.tmass_original_valid
+gaiadr1.gaiadr1.ucac4_original_valid
+gaiadr1.gaiadr1.urat1_original_valid
+gaiadr1.gaiadr1.gaia_source
+gaiadr1.gaiadr1.tgas_source
+gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id
+gaiadr2.gaiadr2.aux_iers_gdr2_cross_id
+gaiadr2.gaiadr2.aux_sso_orbit_residuals
+gaiadr2.gaiadr2.aux_sso_orbits
+gaiadr2.gaiadr2.dr1_neighbourhood
+gaiadr2.gaiadr2.allwise_best_neighbour
+gaiadr2.gaiadr2.allwise_neighbourhood
+gaiadr2.gaiadr2.apassdr9_best_neighbour
+gaiadr2.gaiadr2.apassdr9_neighbourhood
+gaiadr2.gaiadr2.gsc23_best_neighbour
+gaiadr2.gaiadr2.gsc23_neighbourhood
+gaiadr2.gaiadr2.hipparcos2_best_neighbour
+gaiadr2.gaiadr2.hipparcos2_neighbourhood
+gaiadr2.gaiadr2.panstarrs1_best_neighbour
+gaiadr2.gaiadr2.panstarrs1_neighbourhood
+gaiadr2.gaiadr2.ppmxl_best_neighbour
+gaiadr2.gaiadr2.ppmxl_neighbourhood
+gaiadr2.gaiadr2.ravedr5_best_neighbour
+gaiadr2.gaiadr2.ravedr5_neighbourhood
+gaiadr2.gaiadr2.sdssdr9_best_neighbour
+gaiadr2.gaiadr2.sdssdr9_neighbourhood
+gaiadr2.gaiadr2.tmass_best_neighbour
+gaiadr2.gaiadr2.tmass_neighbourhood
+gaiadr2.gaiadr2.tycho2_best_neighbour
+gaiadr2.gaiadr2.tycho2_neighbourhood
+gaiadr2.gaiadr2.urat1_best_neighbour
+gaiadr2.gaiadr2.urat1_neighbourhood
+gaiadr2.gaiadr2.sso_observation
+gaiadr2.gaiadr2.sso_source
+gaiadr2.gaiadr2.vari_cepheid
+gaiadr2.gaiadr2.vari_classifier_class_definition
+gaiadr2.gaiadr2.vari_classifier_definition
+gaiadr2.gaiadr2.vari_classifier_result
+gaiadr2.gaiadr2.vari_long_period_variable
+gaiadr2.gaiadr2.vari_rotation_modulation
+gaiadr2.gaiadr2.vari_rrlyrae
+gaiadr2.gaiadr2.vari_short_timescale
+gaiadr2.gaiadr2.vari_time_series_statistics
+gaiadr2.gaiadr2.panstarrs1_original_valid
+gaiadr2.gaiadr2.gaia_source
+gaiadr2.gaiadr2.ruwe
+
+
+

So that’s a lot of tables. The ones we’ll use are:

+
    +
  • gaiadr2.gaia_source, which contains Gaia data from data release 2,

  • +
  • gaiadr2.panstarrs1_original_valid, which contains the photometry data we’ll use from PanSTARRS, and

  • +
  • gaiadr2.panstarrs1_best_neighbour, which we’ll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.

  • +
+

We can use load_table (not load_tables) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata.

+
meta = Gaia.load_table('gaiadr2.gaia_source')
+meta
+
+
+
Retrieving table 'gaiadr2.gaia_source'
+Parsing table 'gaiadr2.gaia_source'...
+Done.
+
+
+
+
+
+<astroquery.utils.tap.model.taptable.TapTableMeta at 0x7f922376e0a0>
+
+
+

Jupyter shows that the result is an object of type TapTableMeta, but it does not display the contents.

+

To see the metadata, we have to print the object.

+
print(meta)
+
+
+
TAP Table name: gaiadr2.gaiadr2.gaia_source
+Description: This table has an entry for every Gaia observed source as listed in the
+Main Database accumulating catalogue version from which the catalogue
+release has been generated. It contains the basic source parameters,
+that is only final data (no epoch data) and no spectra (neither final
+nor epoch).
+Num. columns: 96
+
+
+

Notice one gotcha: in the list of table names, this table appears as gaiadr2.gaiadr2.gaia_source, but when we load the metadata, we refer to it as gaiadr2.gaia_source.

+

Exercise: Go back and try

+
meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')
+
+
+

What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?

+
+
+

Columns

+

The following loop prints the names of the columns in the table.

+
for column in meta.columns:
+    print(column.name)
+
+
+
solution_id
+designation
+source_id
+random_index
+ref_epoch
+ra
+ra_error
+dec
+dec_error
+parallax
+parallax_error
+parallax_over_error
+pmra
+pmra_error
+pmdec
+pmdec_error
+ra_dec_corr
+ra_parallax_corr
+ra_pmra_corr
+ra_pmdec_corr
+dec_parallax_corr
+dec_pmra_corr
+dec_pmdec_corr
+parallax_pmra_corr
+parallax_pmdec_corr
+pmra_pmdec_corr
+astrometric_n_obs_al
+astrometric_n_obs_ac
+astrometric_n_good_obs_al
+astrometric_n_bad_obs_al
+astrometric_gof_al
+astrometric_chi2_al
+astrometric_excess_noise
+astrometric_excess_noise_sig
+astrometric_params_solved
+astrometric_primary_flag
+astrometric_weight_al
+astrometric_pseudo_colour
+astrometric_pseudo_colour_error
+mean_varpi_factor_al
+astrometric_matched_observations
+visibility_periods_used
+astrometric_sigma5d_max
+frame_rotator_object_type
+matched_observations
+duplicated_source
+phot_g_n_obs
+phot_g_mean_flux
+phot_g_mean_flux_error
+phot_g_mean_flux_over_error
+phot_g_mean_mag
+phot_bp_n_obs
+phot_bp_mean_flux
+phot_bp_mean_flux_error
+phot_bp_mean_flux_over_error
+phot_bp_mean_mag
+phot_rp_n_obs
+phot_rp_mean_flux
+phot_rp_mean_flux_error
+phot_rp_mean_flux_over_error
+phot_rp_mean_mag
+phot_bp_rp_excess_factor
+phot_proc_mode
+bp_rp
+bp_g
+g_rp
+radial_velocity
+radial_velocity_error
+rv_nb_transits
+rv_template_teff
+rv_template_logg
+rv_template_fe_h
+phot_variable_flag
+l
+b
+ecl_lon
+ecl_lat
+priam_flags
+teff_val
+teff_percentile_lower
+teff_percentile_upper
+a_g_val
+a_g_percentile_lower
+a_g_percentile_upper
+e_bp_min_rp_val
+e_bp_min_rp_percentile_lower
+e_bp_min_rp_percentile_upper
+flame_flags
+radius_val
+radius_percentile_lower
+radius_percentile_upper
+lum_val
+lum_percentile_lower
+lum_percentile_upper
+datalink_url
+epoch_photometry_url
+
+
+

You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +To find out what the columns mean, read the documentation.

+

If you want to know what can go wrong when you don’t read the documentation, you might like this article.

+

Exercise: One of the other tables we’ll use is gaiadr2.gaiadr2.panstarrs1_original_valid. Use load_table to get the metadata for this table. How many columns are there and what are their names?

+

Hint: Remember the gotcha we mentioned earlier.

+
# Solution
+
+meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')
+print(meta2)
+
+
+
Retrieving table 'gaiadr2.panstarrs1_original_valid'
+Parsing table 'gaiadr2.panstarrs1_original_valid'...
+Done.
+TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid
+Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is
+a system for wide-field astronomical imaging developed and operated by
+the Institute for Astronomy at the University of Hawaii. Pan-STARRS1
+(PS1) is the first part of Pan-STARRS to be completed and is the basis
+for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and
+its 1.4 Gigapixel camera to image the sky in five broadband filters (g,
+r, i, z, y).
+
+The current table contains a filtered subsample of the 10 723 304 629
+entries listed in the original ObjectThin table.
+We used only ObjectThin and MeanObject tables to extract
+panstarrs1OriginalValid table, this means that objects detected only in
+stack images are not included here. The main reason for us to avoid the
+use of objects detected in stack images is that their astrometry is not
+as good as the mean objects astrometry: “The stack positions (raStack,
+decStack) have considerably larger systematic astrometric errors than
+the mean epoch positions (raMean, decMean).” The astrometry for the
+MeanObject positions uses Gaia DR1 as a reference catalog, while the
+stack positions use 2MASS as a reference catalog.
+
+In details, we filtered out all objects where:
+
+-   nDetections = 1
+
+-   no good quality data in Pan-STARRS, objInfoFlag 33554432 not set
+
+-   mean astrometry could not be measured, objInfoFlag 524288 set
+
+-   stack position used for mean astrometry, objInfoFlag 1048576 set
+
+-   error on all magnitudes equal to 0 or to -999;
+
+-   all magnitudes set to -999;
+
+-   error on RA or DEC greater than 1 arcsec.
+
+The number of objects in panstarrs1OriginalValid is 2 264 263 282.
+
+The panstarrs1OriginalValid table contains only a subset of the columns
+available in the combined ObjectThin and MeanObject tables. A
+description of the original ObjectThin and MeanObjects tables can be
+found at:
+https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables
+
+Download:
+http://mastweb.stsci.edu/ps1casjobs/home.aspx
+Documentation:
+https://outerspace.stsci.edu/display/PANSTARRS
+http://pswww.ifa.hawaii.edu/pswww/
+References:
+The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560
+Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,
+arXiv:1612.05240
+Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.
+Z., et al. 2016, arXiv:1612.05245
+Pan-STARRS Pixel Analysis: Source Detection and Characterization,
+Magnier, E. A., et al. 2016, arXiv:1612.05244
+Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et
+al. 2016, arXiv:1612.05242
+The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.
+2016, arXiv:1612.05243
+
+Catalogue curator:
+SSDC - ASI Space Science Data Center
+https://www.ssdc.asi.it/
+Num. columns: 26
+
+
+
# Solution
+
+for column in meta2.columns:
+    print(column.name)
+
+
+
obj_name
+obj_id
+ra
+dec
+ra_error
+dec_error
+epoch_mean
+g_mean_psf_mag
+g_mean_psf_mag_error
+g_flags
+r_mean_psf_mag
+r_mean_psf_mag_error
+r_flags
+i_mean_psf_mag
+i_mean_psf_mag_error
+i_flags
+z_mean_psf_mag
+z_mean_psf_mag_error
+z_flags
+y_mean_psf_mag
+y_mean_psf_mag_error
+y_flags
+n_detections
+zone_id
+obj_info_flag
+quality_flag
+
+
+
+
+

Writing queries

+

By now you might be wondering how we actually download the data. With tables this big, you generally don’t. Instead, you use queries to select only the data you want.

+

A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.

+

Here’s an example of an ADQL query.

+
query1 = """SELECT 
+TOP 10
+source_id, ref_epoch, ra, dec, parallax 
+FROM gaiadr2.gaia_source"""
+
+
+

Python note: We use a triple-quoted string here so we can include line breaks in the query, which makes it easier to read.

+

The words in uppercase are ADQL keywords:

+
    +
  • SELECT indicates that we are selecting data (as opposed to adding or modifying data).

  • +
  • TOP indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.

  • +
  • FROM specifies which table we want data from.

  • +
+

The third line is a list of column names, indicating which columns we want.

+

In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive.

+

To run this query, we use the Gaia object, which represents our connection to the Gaia database, and invoke launch_job:

+
job1 = Gaia.launch_job(query1)
+job1
+
+
+
<astroquery.utils.tap.model.job.Job at 0x7f9222e9cb20>
+
+
+

The result is an object that represents the job running on a Gaia server.

+

If you print it, it displays metadata for the forthcoming table.

+
print(job1)
+
+
+
<Table length=10>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090721.xml.gz
+Results: None
+
+
+

Don’t worry about Results: None. That does not actually mean there are no results.

+

However, Phase: COMPLETED indicates that the job is complete, so we can get the results like this:

+
results1 = job1.get_results()
+type(results1)
+
+
+
astropy.table.table.Table
+
+
+

Optional detail: Why is table repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It’s like the Linnean name for gorilla, which is Gorilla Gorilla Gorilla.

+

The result is an Astropy Table, which is similar to a table in an SQL database except:

+
    +
  • SQL databases are stored on disk drives, so they are persistent; that is, they “survive” even if you turn off the computer. An Astropy Table is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).

  • +
  • SQL databases are designed to process queries. An Astropy Table can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.

  • +
+

Jupyter knows how to display the contents of a Table.

+
results1
+
+
+

Table length=10

+ + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
+

Each column has a name, units, and a data type.

+

For example, the units of ra and dec are degrees, and their data type is float64, which is a 64-bit floating-point number, used to store measurements with a fraction part.

+

This information comes from the Gaia database, and has been stored in the Astropy Table by Astroquery.

+

Exercise: Read the documentation of this table and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?

+
+
+

Asynchronous queries

+

launch_job asks the server to run the job “synchronously”, which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run “asynchronously”, which mean they might take longer to get started.

+

If you are not sure how many rows a query will return, you can use the SQL command COUNT to find out how many rows are in the result without actually returning them. We’ll see an example of this later.

+

The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.

+

For anonymous users, files are kept for three days.

+

As an example, let’s try a query that’s similar to query1, with two changes:

+
    +
  • It selects the first 3000 rows, so it is bigger than we should run synchronously.

  • +
  • It uses a new keyword, WHERE.

  • +
+
query2 = """SELECT TOP 3000
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+"""
+
+
+

A WHERE clause indicates which rows we want; in this case, the query selects only rows “where” parallax is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We’ll use this clause to exclude nearby stars that are unlikely to be part of GD-1.

+

WHERE is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.

+

We use launch_job_async to submit an asynchronous query.

+
job2 = Gaia.launch_job_async(query2)
+print(job2)
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=3000>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: 1601903242219O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201005090722.vot
+Results: None
+
+
+

And here are the results.

+
results2 = job2.get_results()
+results2
+
+
+

Table length=3000

+ + + + + + + + + + + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
+

You might notice that some values of parallax are negative. As this FAQ explains, “Negative parallaxes are caused by errors in the observations.” Negative parallaxes have “no physical meaning,” but they can be a “useful diagnostic on the quality of the astrometric solution.”

+

Later we will see an example where we use parallax and parallax_error to identify stars where the distance estimate is likely to be inaccurate.

+

Exercise: The clauses in a query have to be in the right order. Go back and change the order of the clauses in query2 and run it again.

+

The query should fail, but notice that you don’t get much useful debugging information.

+

For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:

+
    +
  • Whenever possible, start with a working query, either an example you find online or a query you have used in the past.

  • +
  • Make small changes and test each change before you continue.

  • +
  • While you are debugging, use TOP to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time.

  • +
  • Launching test queries synchronously might make them start faster, too.

  • +
+
+
+

Operators

+

In a WHERE clause, you can use any of the SQL comparison operators; here are the most common ones:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Symbol

Operation

>

greater than

<

less than

>=

greater than or equal

<=

less than or equal

=

equal

!= or <>

not equal

+

Most of these are the same as Python, but some are not. In particular, notice that the equality operator is =, not ==. +Be careful to keep your Python out of your ADQL!

+

You can combine comparisons using the logical operators:

+
    +
  • AND: true if both comparisons are true

  • +
  • OR: true if either or both comparisons are true

  • +
+

Finally, you can use NOT to invert the result of a comparison.

+

Exercise: Read about SQL operators here and then modify the previous query to select rows where bp_rp is between -0.75 and 2.

+

You can read about this variable here.

+
# Solution
+
+# This is what most people will probably do
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp > -0.75 AND bp_rp < 2
+"""
+
+
+
# Solution
+
+# But if someone notices the BETWEEN operator, 
+# they might do this
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+

This Hertzsprung-Russell diagram shows the BP-RP color and luminosity of stars in the Gaia catalog.

+

Selecting stars with bp-rp less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.

+
+
+

Cleaning up

+

Asynchronous jobs have a jobid.

+
job1.jobid, job2.jobid
+
+
+
(None, '1601903242219O')
+
+
+

Which you can use to remove the job from the server.

+
Gaia.remove_jobs([job2.jobid])
+
+
+
Removed jobs: '['1601903242219O']'.
+
+
+

If you don’t remove it job from the server, it will be removed eventually, so don’t feel too bad if you don’t clean up after yourself.

+
+
+

Formatting queries

+

So far the queries have been string “literals”, meaning that the entire string is part of the program. +But writing queries yourself can be slow, repetitive, and error-prone.

+

It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the string format method.

+

As an example, we’ll divide the previous query into two parts; a list of column names and a “base” for the query that contains everything except the column names.

+

Here’s the list of columns we’ll select.

+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+

And here’s the base; it’s a string that contains at least one format specifier in curly brackets (braces).

+
query3_base = """SELECT TOP 10 
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+

This base query contains one format specifier, {columns}, which is a placeholder for the list of column names we will provide.

+

To assemble the query, we invoke format on the base string and provide a keyword argument that assigns a value to columns.

+
query3 = query3_base.format(columns=columns)
+
+
+

The result is a string with line breaks. If you display it, the line breaks appear as \n.

+
query3
+
+
+
'SELECT TOP 10 \nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\nFROM gaiadr2.gaia_source\nWHERE parallax < 1\n  AND bp_rp BETWEEN -0.75 AND 2\n'
+
+
+

But if you print it, the line breaks appear as… line breaks.

+
print(query3)
+
+
+
SELECT TOP 10 
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+
+
+

Notice that the format specifier has been replaced with the value of columns.

+

Let’s run it and see if it works:

+
job3 = Gaia.launch_job(query3)
+print(job3)
+
+
+
<Table length=10>
+      name       dtype    unit                              description                             n_bad
+--------------- ------- -------- ------------------------------------------------------------------ -----
+      source_id   int64          Unique source identifier (unique within a particular Data Release)     0
+             ra float64      deg                                                    Right ascension     0
+            dec float64      deg                                                        Declination     0
+           pmra float64 mas / yr                         Proper motion in right ascension direction     0
+          pmdec float64 mas / yr                             Proper motion in declination direction     0
+       parallax float64      mas                                                           Parallax     0
+ parallax_error float64      mas                                         Standard error of parallax     0
+radial_velocity float64   km / s                                                    Radial velocity    10
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090726.xml.gz
+Results: None
+
+
+
results3 = job3.get_results()
+results3
+
+
+

Table length=10

+ + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
+

Good so far.

+

Exercise: This query always selects sources with parallax less than 1. But suppose you want to take that upper bound as an input.

+

Modify query3_base to replace 1 with a format specifier like {max_parallax}. Now, when you call format, add a keyword argument that assigns a value to max_parallax, and confirm that the format specifier gets replaced with the value you provide.

+
# Solution
+
+query4_base = """SELECT TOP 10
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < {max_parallax} AND 
+bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
# Solution
+
+query4 = query4_base.format(columns=columns,
+                          max_parallax=0.5)
+print(query)
+
+
+
SELECT TOP 10
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 0.5 AND 
+bp_rp BETWEEN -0.75 AND 2
+
+
+

Style note: You might notice that the variable names in this notebook are numbered, like query1, query2, etc.

+

The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it’s less likely that you will get unexpected interactions.

+

A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.

+

What do you think of this choice? Are there alternatives you prefer?

+
+
+

Summary

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+
+
+

Best practices

+
    +
  • If you can’t download an entire dataset (or it’s not practical) use queries to select the data you need.

  • +
  • Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Use ADQL features like TOP and COUNT to test before you run a query that might return a lot of data.

  • +
  • If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn’t seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.

  • +
  • ADQL and SQL are not case-sensitive, so you don’t have to capitalize the keywords, but you should.

  • +
  • ADQL and SQL don’t require you to break a query into multiple lines, but you should.

  • +
+

Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don’t have the values you expect.

+

There are a few things you can do to mitigate these problems:

+
    +
  • Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.

  • +
  • Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase.

  • +
+
+
+ + + + +
+ +
+
+ + + + +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/02_coords.html b/_build/html/02_coords.html new file mode 100644 index 0000000..9586dfb --- /dev/null +++ b/_build/html/02_coords.html @@ -0,0 +1,1874 @@ + + + + + + + + Chapter 2 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 2

+

This is the second in a series of notebooks related to astronomy data.

+

As a running example, we are replicating parts of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.

+

In this notebook, we’ll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be.

+
+

Outline

+

We’ll start with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we’ll:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

After completing this lesson, you should be able to

+
    +
  • Use Python string formatting to compose more complex ADQL queries.

  • +
  • Work with coordinates and other quantities that have units.

  • +
  • Download the results of a query and store them in a file.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+
+
+

Selecting a region

+

One of the most common ways to restrict a query is to select stars in a particular region of the sky.

+

For example, here’s a query from the Gaia archive documentation that selects “all the objects … in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).”

+
+
+
query = """
+SELECT 
+TOP 10 source_id
+FROM gaiadr2.gaia_source
+WHERE 1=CONTAINS(
+  POINT(ra, dec),
+  CIRCLE(266.41683, -29.00781, 0.08333333))
+"""
+
+
+
+
+

This query uses three keywords that are specific to ADQL (not SQL):

+
    +
  • POINT: a location in ICRS coordinates, specified in degrees of right ascension and declination.

  • +
  • CIRCLE: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.

  • +
  • CONTAINS: a function that returns 1 if a POINT is contained in a shape and 0 otherwise.

  • +
+

Here is the documentation of CONTAINS.

+

A query like this is called a cone search because it selects stars in a cone.

+

Here’s how we run it.

+
+
+
from astroquery.gaia import Gaia
+
+job = Gaia.launch_job(query)
+result = job.get_results()
+result
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
Table length=10 + + + + + + + + + + + + + +
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
+
+

Exercise: When you are debugging queries like this, you can use TOP to limit the size of the results, but then you still don’t know how big the results will be.

+

An alternative is to use COUNT, which asks for the number of rows that would be selected, but it does not return them.

+

In the previous query, replace TOP 10 source_id with COUNT(source_id) and run the query again. How many stars has Gaia identified in the cone we searched?

+
+
+

Getting GD-1 Data

+

From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:

+

Along the axis of right ascension (\(\phi_1\)) the figure extends from -100 to 20 degrees.

+

Along the axis of declination (\(\phi_2\)) the figure extends from about -8 to 4 degrees.

+

Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so

+
    +
  • That would be difficult to work with,

  • +
  • As anonymous users, we are limited to 3 million rows in a single query, and

  • +
  • While we are developing and testing code, it will be faster to work with a smaller dataset.

  • +
+

So we’ll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

But first we let’s see how to represent quantities with units like degrees.

+
+
+

Working with coordinates

+

Coordinates are physical quantities, which means that they have two parts, a value and a unit.

+

For example, the coordinate \(30^{\circ}\) has value 30 and its units are degrees.

+

Until recently, most scientific computation was done with values only; units were left out of the program altogether, often with disastrous results.

+

Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.

+

To use Astropy units, we import them like this:

+
+
+
import astropy.units as u
+
+u
+
+
+
+
+
<module 'astropy.units' from '/home/downey/anaconda3/envs/AstronomicalData/lib/python3.8/site-packages/astropy/units/__init__.py'>
+
+
+
+
+

u is an object that contains most common units and all SI units.

+

You can use dir to list them, but you should also read the documentation.

+
+
+
dir(u)
+
+
+
+
+
['A',
+ 'AA',
+ 'AB',
+ 'ABflux',
+ 'ABmag',
+ 'AU',
+ 'Angstrom',
+ 'B',
+ 'Ba',
+ 'Barye',
+ 'Bi',
+ 'Biot',
+ 'Bol',
+ 'Bq',
+ 'C',
+ 'Celsius',
+ 'Ci',
+ 'CompositeUnit',
+ 'D',
+ 'Da',
+ 'Dalton',
+ 'Debye',
+ 'Decibel',
+ 'DecibelUnit',
+ 'Dex',
+ 'DexUnit',
+ 'EA',
+ 'EAU',
+ 'EB',
+ 'EBa',
+ 'EC',
+ 'ED',
+ 'EF',
+ 'EG',
+ 'EGal',
+ 'EH',
+ 'EHz',
+ 'EJ',
+ 'EJy',
+ 'EK',
+ 'EL',
+ 'EN',
+ 'EOhm',
+ 'EP',
+ 'EPa',
+ 'ER',
+ 'ERy',
+ 'ES',
+ 'ESt',
+ 'ET',
+ 'EV',
+ 'EW',
+ 'EWb',
+ 'Ea',
+ 'Eadu',
+ 'Earcmin',
+ 'Earcsec',
+ 'Eau',
+ 'Eb',
+ 'Ebarn',
+ 'Ebeam',
+ 'Ebin',
+ 'Ebit',
+ 'Ebyte',
+ 'Ecd',
+ 'Echan',
+ 'Ecount',
+ 'Ect',
+ 'Ed',
+ 'Edeg',
+ 'Edyn',
+ 'EeV',
+ 'Eerg',
+ 'Eg',
+ 'Eh',
+ 'EiB',
+ 'Eib',
+ 'Eibit',
+ 'Eibyte',
+ 'Ek',
+ 'El',
+ 'Elm',
+ 'Elx',
+ 'Elyr',
+ 'Em',
+ 'Emag',
+ 'Emin',
+ 'Emol',
+ 'Eohm',
+ 'Epc',
+ 'Eph',
+ 'Ephoton',
+ 'Epix',
+ 'Epixel',
+ 'Erad',
+ 'Es',
+ 'Esr',
+ 'Eu',
+ 'Evox',
+ 'Evoxel',
+ 'Eyr',
+ 'F',
+ 'Farad',
+ 'Fr',
+ 'Franklin',
+ 'FunctionQuantity',
+ 'FunctionUnitBase',
+ 'G',
+ 'GA',
+ 'GAU',
+ 'GB',
+ 'GBa',
+ 'GC',
+ 'GD',
+ 'GF',
+ 'GG',
+ 'GGal',
+ 'GH',
+ 'GHz',
+ 'GJ',
+ 'GJy',
+ 'GK',
+ 'GL',
+ 'GN',
+ 'GOhm',
+ 'GP',
+ 'GPa',
+ 'GR',
+ 'GRy',
+ 'GS',
+ 'GSt',
+ 'GT',
+ 'GV',
+ 'GW',
+ 'GWb',
+ 'Ga',
+ 'Gadu',
+ 'Gal',
+ 'Garcmin',
+ 'Garcsec',
+ 'Gau',
+ 'Gauss',
+ 'Gb',
+ 'Gbarn',
+ 'Gbeam',
+ 'Gbin',
+ 'Gbit',
+ 'Gbyte',
+ 'Gcd',
+ 'Gchan',
+ 'Gcount',
+ 'Gct',
+ 'Gd',
+ 'Gdeg',
+ 'Gdyn',
+ 'GeV',
+ 'Gerg',
+ 'Gg',
+ 'Gh',
+ 'GiB',
+ 'Gib',
+ 'Gibit',
+ 'Gibyte',
+ 'Gk',
+ 'Gl',
+ 'Glm',
+ 'Glx',
+ 'Glyr',
+ 'Gm',
+ 'Gmag',
+ 'Gmin',
+ 'Gmol',
+ 'Gohm',
+ 'Gpc',
+ 'Gph',
+ 'Gphoton',
+ 'Gpix',
+ 'Gpixel',
+ 'Grad',
+ 'Gs',
+ 'Gsr',
+ 'Gu',
+ 'Gvox',
+ 'Gvoxel',
+ 'Gyr',
+ 'H',
+ 'Henry',
+ 'Hertz',
+ 'Hz',
+ 'IrreducibleUnit',
+ 'J',
+ 'Jansky',
+ 'Joule',
+ 'Jy',
+ 'K',
+ 'Kayser',
+ 'Kelvin',
+ 'KiB',
+ 'Kib',
+ 'Kibit',
+ 'Kibyte',
+ 'L',
+ 'L_bol',
+ 'L_sun',
+ 'LogQuantity',
+ 'LogUnit',
+ 'Lsun',
+ 'MA',
+ 'MAU',
+ 'MB',
+ 'MBa',
+ 'MC',
+ 'MD',
+ 'MF',
+ 'MG',
+ 'MGal',
+ 'MH',
+ 'MHz',
+ 'MJ',
+ 'MJy',
+ 'MK',
+ 'ML',
+ 'MN',
+ 'MOhm',
+ 'MP',
+ 'MPa',
+ 'MR',
+ 'MRy',
+ 'MS',
+ 'MSt',
+ 'MT',
+ 'MV',
+ 'MW',
+ 'MWb',
+ 'M_bol',
+ 'M_e',
+ 'M_earth',
+ 'M_jup',
+ 'M_jupiter',
+ 'M_p',
+ 'M_sun',
+ 'Ma',
+ 'Madu',
+ 'MagUnit',
+ 'Magnitude',
+ 'Marcmin',
+ 'Marcsec',
+ 'Mau',
+ 'Mb',
+ 'Mbarn',
+ 'Mbeam',
+ 'Mbin',
+ 'Mbit',
+ 'Mbyte',
+ 'Mcd',
+ 'Mchan',
+ 'Mcount',
+ 'Mct',
+ 'Md',
+ 'Mdeg',
+ 'Mdyn',
+ 'MeV',
+ 'Mearth',
+ 'Merg',
+ 'Mg',
+ 'Mh',
+ 'MiB',
+ 'Mib',
+ 'Mibit',
+ 'Mibyte',
+ 'Mjup',
+ 'Mjupiter',
+ 'Mk',
+ 'Ml',
+ 'Mlm',
+ 'Mlx',
+ 'Mlyr',
+ 'Mm',
+ 'Mmag',
+ 'Mmin',
+ 'Mmol',
+ 'Mohm',
+ 'Mpc',
+ 'Mph',
+ 'Mphoton',
+ 'Mpix',
+ 'Mpixel',
+ 'Mrad',
+ 'Ms',
+ 'Msr',
+ 'Msun',
+ 'Mu',
+ 'Mvox',
+ 'Mvoxel',
+ 'Myr',
+ 'N',
+ 'NamedUnit',
+ 'Newton',
+ 'Ohm',
+ 'P',
+ 'PA',
+ 'PAU',
+ 'PB',
+ 'PBa',
+ 'PC',
+ 'PD',
+ 'PF',
+ 'PG',
+ 'PGal',
+ 'PH',
+ 'PHz',
+ 'PJ',
+ 'PJy',
+ 'PK',
+ 'PL',
+ 'PN',
+ 'POhm',
+ 'PP',
+ 'PPa',
+ 'PR',
+ 'PRy',
+ 'PS',
+ 'PSt',
+ 'PT',
+ 'PV',
+ 'PW',
+ 'PWb',
+ 'Pa',
+ 'Padu',
+ 'Parcmin',
+ 'Parcsec',
+ 'Pascal',
+ 'Pau',
+ 'Pb',
+ 'Pbarn',
+ 'Pbeam',
+ 'Pbin',
+ 'Pbit',
+ 'Pbyte',
+ 'Pcd',
+ 'Pchan',
+ 'Pcount',
+ 'Pct',
+ 'Pd',
+ 'Pdeg',
+ 'Pdyn',
+ 'PeV',
+ 'Perg',
+ 'Pg',
+ 'Ph',
+ 'PiB',
+ 'Pib',
+ 'Pibit',
+ 'Pibyte',
+ 'Pk',
+ 'Pl',
+ 'Plm',
+ 'Plx',
+ 'Plyr',
+ 'Pm',
+ 'Pmag',
+ 'Pmin',
+ 'Pmol',
+ 'Pohm',
+ 'Ppc',
+ 'Pph',
+ 'Pphoton',
+ 'Ppix',
+ 'Ppixel',
+ 'Prad',
+ 'PrefixUnit',
+ 'Ps',
+ 'Psr',
+ 'Pu',
+ 'Pvox',
+ 'Pvoxel',
+ 'Pyr',
+ 'Quantity',
+ 'QuantityInfo',
+ 'QuantityInfoBase',
+ 'R',
+ 'R_earth',
+ 'R_jup',
+ 'R_jupiter',
+ 'R_sun',
+ 'Rayleigh',
+ 'Rearth',
+ 'Rjup',
+ 'Rjupiter',
+ 'Rsun',
+ 'Ry',
+ 'S',
+ 'ST',
+ 'STflux',
+ 'STmag',
+ 'Siemens',
+ 'SpecificTypeQuantity',
+ 'St',
+ 'Sun',
+ 'T',
+ 'TA',
+ 'TAU',
+ 'TB',
+ 'TBa',
+ 'TC',
+ 'TD',
+ 'TF',
+ 'TG',
+ 'TGal',
+ 'TH',
+ 'THz',
+ 'TJ',
+ 'TJy',
+ 'TK',
+ 'TL',
+ 'TN',
+ 'TOhm',
+ 'TP',
+ 'TPa',
+ 'TR',
+ 'TRy',
+ 'TS',
+ 'TSt',
+ 'TT',
+ 'TV',
+ 'TW',
+ 'TWb',
+ 'Ta',
+ 'Tadu',
+ 'Tarcmin',
+ 'Tarcsec',
+ 'Tau',
+ 'Tb',
+ 'Tbarn',
+ 'Tbeam',
+ 'Tbin',
+ 'Tbit',
+ 'Tbyte',
+ 'Tcd',
+ 'Tchan',
+ 'Tcount',
+ 'Tct',
+ 'Td',
+ 'Tdeg',
+ 'Tdyn',
+ 'TeV',
+ 'Terg',
+ 'Tesla',
+ 'Tg',
+ 'Th',
+ 'TiB',
+ 'Tib',
+ 'Tibit',
+ 'Tibyte',
+ 'Tk',
+ 'Tl',
+ 'Tlm',
+ 'Tlx',
+ 'Tlyr',
+ 'Tm',
+ 'Tmag',
+ 'Tmin',
+ 'Tmol',
+ 'Tohm',
+ 'Tpc',
+ 'Tph',
+ 'Tphoton',
+ 'Tpix',
+ 'Tpixel',
+ 'Trad',
+ 'Ts',
+ 'Tsr',
+ 'Tu',
+ 'Tvox',
+ 'Tvoxel',
+ 'Tyr',
+ 'Unit',
+ 'UnitBase',
+ 'UnitConversionError',
+ 'UnitTypeError',
+ 'UnitsError',
+ 'UnitsWarning',
+ 'UnrecognizedUnit',
+ 'V',
+ 'Volt',
+ 'W',
+ 'Watt',
+ 'Wb',
+ 'Weber',
+ 'YA',
+ 'YAU',
+ 'YB',
+ 'YBa',
+ 'YC',
+ 'YD',
+ 'YF',
+ 'YG',
+ 'YGal',
+ 'YH',
+ 'YHz',
+ 'YJ',
+ 'YJy',
+ 'YK',
+ 'YL',
+ 'YN',
+ 'YOhm',
+ 'YP',
+ 'YPa',
+ 'YR',
+ 'YRy',
+ 'YS',
+ 'YSt',
+ 'YT',
+ 'YV',
+ 'YW',
+ 'YWb',
+ 'Ya',
+ 'Yadu',
+ 'Yarcmin',
+ 'Yarcsec',
+ 'Yau',
+ 'Yb',
+ 'Ybarn',
+ 'Ybeam',
+ 'Ybin',
+ 'Ybit',
+ 'Ybyte',
+ 'Ycd',
+ 'Ychan',
+ 'Ycount',
+ 'Yct',
+ 'Yd',
+ 'Ydeg',
+ 'Ydyn',
+ 'YeV',
+ 'Yerg',
+ 'Yg',
+ 'Yh',
+ 'Yk',
+ 'Yl',
+ 'Ylm',
+ 'Ylx',
+ 'Ylyr',
+ 'Ym',
+ 'Ymag',
+ 'Ymin',
+ 'Ymol',
+ 'Yohm',
+ 'Ypc',
+ 'Yph',
+ 'Yphoton',
+ 'Ypix',
+ 'Ypixel',
+ 'Yrad',
+ 'Ys',
+ 'Ysr',
+ 'Yu',
+ 'Yvox',
+ 'Yvoxel',
+ 'Yyr',
+ 'ZA',
+ 'ZAU',
+ 'ZB',
+ 'ZBa',
+ 'ZC',
+ 'ZD',
+ 'ZF',
+ 'ZG',
+ 'ZGal',
+ 'ZH',
+ 'ZHz',
+ 'ZJ',
+ 'ZJy',
+ 'ZK',
+ 'ZL',
+ 'ZN',
+ 'ZOhm',
+ 'ZP',
+ 'ZPa',
+ 'ZR',
+ 'ZRy',
+ 'ZS',
+ 'ZSt',
+ 'ZT',
+ 'ZV',
+ 'ZW',
+ 'ZWb',
+ 'Za',
+ 'Zadu',
+ 'Zarcmin',
+ 'Zarcsec',
+ 'Zau',
+ 'Zb',
+ 'Zbarn',
+ 'Zbeam',
+ 'Zbin',
+ 'Zbit',
+ 'Zbyte',
+ 'Zcd',
+ 'Zchan',
+ 'Zcount',
+ 'Zct',
+ 'Zd',
+ 'Zdeg',
+ 'Zdyn',
+ 'ZeV',
+ 'Zerg',
+ 'Zg',
+ 'Zh',
+ 'Zk',
+ 'Zl',
+ 'Zlm',
+ 'Zlx',
+ 'Zlyr',
+ 'Zm',
+ 'Zmag',
+ 'Zmin',
+ 'Zmol',
+ 'Zohm',
+ 'Zpc',
+ 'Zph',
+ 'Zphoton',
+ 'Zpix',
+ 'Zpixel',
+ 'Zrad',
+ 'Zs',
+ 'Zsr',
+ 'Zu',
+ 'Zvox',
+ 'Zvoxel',
+ 'Zyr',
+ '__builtins__',
+ '__cached__',
+ '__doc__',
+ '__file__',
+ '__loader__',
+ '__name__',
+ '__package__',
+ '__path__',
+ '__spec__',
+ 'a',
+ 'aA',
+ 'aAU',
+ 'aB',
+ 'aBa',
+ 'aC',
+ 'aD',
+ 'aF',
+ 'aG',
+ 'aGal',
+ 'aH',
+ 'aHz',
+ 'aJ',
+ 'aJy',
+ 'aK',
+ 'aL',
+ 'aN',
+ 'aOhm',
+ 'aP',
+ 'aPa',
+ 'aR',
+ 'aRy',
+ 'aS',
+ 'aSt',
+ 'aT',
+ 'aV',
+ 'aW',
+ 'aWb',
+ 'aa',
+ 'aadu',
+ 'aarcmin',
+ 'aarcsec',
+ 'aau',
+ 'ab',
+ 'abA',
+ 'abC',
+ 'abampere',
+ 'abarn',
+ 'abcoulomb',
+ 'abeam',
+ 'abin',
+ 'abit',
+ 'abyte',
+ 'acd',
+ 'achan',
+ 'acount',
+ 'act',
+ 'ad',
+ 'add_enabled_equivalencies',
+ 'add_enabled_units',
+ 'adeg',
+ 'adu',
+ 'adyn',
+ 'aeV',
+ 'aerg',
+ 'ag',
+ 'ah',
+ 'ak',
+ 'al',
+ 'allclose',
+ 'alm',
+ 'alx',
+ 'alyr',
+ 'am',
+ 'amag',
+ 'amin',
+ 'amol',
+ 'amp',
+ 'ampere',
+ 'angstrom',
+ 'annum',
+ 'aohm',
+ 'apc',
+ 'aph',
+ 'aphoton',
+ 'apix',
+ 'apixel',
+ 'arad',
+ 'arcmin',
+ 'arcminute',
+ 'arcsec',
+ 'arcsecond',
+ 'asr',
+ 'astronomical_unit',
+ 'astrophys',
+ 'attoBarye',
+ 'attoDa',
+ 'attoDalton',
+ 'attoDebye',
+ 'attoFarad',
+ 'attoGauss',
+ 'attoHenry',
+ 'attoHertz',
+ 'attoJansky',
+ 'attoJoule',
+ 'attoKayser',
+ 'attoKelvin',
+ 'attoNewton',
+ 'attoOhm',
+ 'attoPascal',
+ 'attoRayleigh',
+ 'attoSiemens',
+ 'attoTesla',
+ 'attoVolt',
+ 'attoWatt',
+ 'attoWeber',
+ 'attoamp',
+ 'attoampere',
+ 'attoannum',
+ 'attoarcminute',
+ 'attoarcsecond',
+ 'attoastronomical_unit',
+ 'attobarn',
+ 'attobarye',
+ 'attobit',
+ 'attobyte',
+ 'attocandela',
+ 'attocoulomb',
+ 'attocount',
+ 'attoday',
+ 'attodebye',
+ 'attodegree',
+ 'attodyne',
+ 'attoelectronvolt',
+ 'attofarad',
+ 'attogal',
+ 'attogauss',
+ 'attogram',
+ 'attohenry',
+ 'attohertz',
+ 'attohour',
+ 'attohr',
+ 'attojansky',
+ 'attojoule',
+ 'attokayser',
+ 'attolightyear',
+ 'attoliter',
+ 'attolumen',
+ 'attolux',
+ 'attometer',
+ 'attominute',
+ 'attomole',
+ 'attonewton',
+ 'attoparsec',
+ 'attopascal',
+ 'attophoton',
+ 'attopixel',
+ 'attopoise',
+ 'attoradian',
+ 'attorayleigh',
+ 'attorydberg',
+ 'attosecond',
+ 'attosiemens',
+ 'attosteradian',
+ 'attostokes',
+ 'attotesla',
+ 'attovolt',
+ 'attovoxel',
+ 'attowatt',
+ 'attoweber',
+ 'attoyear',
+ 'au',
+ 'avox',
+ 'avoxel',
+ 'ayr',
+ 'b',
+ 'bar',
+ 'barn',
+ 'barye',
+ 'beam',
+ 'beam_angular_area',
+ 'becquerel',
+ 'bin',
+ 'binary_prefixes',
+ 'bit',
+ 'bol',
+ 'brightness_temperature',
+ 'byte',
+ 'cA',
+ 'cAU',
+ 'cB',
+ 'cBa',
+ 'cC',
+ 'cD',
+ 'cF',
+ 'cG',
+ 'cGal',
+ 'cH',
+ 'cHz',
+ 'cJ',
+ 'cJy',
+ 'cK',
+ 'cL',
+ 'cN',
+ 'cOhm',
+ 'cP',
+ 'cPa',
+ 'cR',
+ 'cRy',
+ 'cS',
+ 'cSt',
+ 'cT',
+ 'cV',
+ 'cW',
+ 'cWb',
+ 'ca',
+ 'cadu',
+ 'candela',
+ 'carcmin',
+ 'carcsec',
+ 'cau',
+ 'cb',
+ 'cbarn',
+ 'cbeam',
+ 'cbin',
+ 'cbit',
+ 'cbyte',
+ 'ccd',
+ 'cchan',
+ 'ccount',
+ 'cct',
+ 'cd',
+ 'cdeg',
+ 'cdyn',
+ 'ceV',
+ 'centiBarye',
+ 'centiDa',
+ 'centiDalton',
+ 'centiDebye',
+ 'centiFarad',
+ 'centiGauss',
+ 'centiHenry',
+ 'centiHertz',
+ 'centiJansky',
+ 'centiJoule',
+ 'centiKayser',
+ 'centiKelvin',
+ 'centiNewton',
+ 'centiOhm',
+ 'centiPascal',
+ 'centiRayleigh',
+ 'centiSiemens',
+ 'centiTesla',
+ 'centiVolt',
+ 'centiWatt',
+ 'centiWeber',
+ 'centiamp',
+ 'centiampere',
+ 'centiannum',
+ 'centiarcminute',
+ 'centiarcsecond',
+ 'centiastronomical_unit',
+ 'centibarn',
+ 'centibarye',
+ 'centibit',
+ 'centibyte',
+ 'centicandela',
+ 'centicoulomb',
+ 'centicount',
+ 'centiday',
+ 'centidebye',
+ 'centidegree',
+ 'centidyne',
+ 'centielectronvolt',
+ 'centifarad',
+ 'centigal',
+ 'centigauss',
+ 'centigram',
+ 'centihenry',
+ 'centihertz',
+ 'centihour',
+ 'centihr',
+ 'centijansky',
+ 'centijoule',
+ 'centikayser',
+ 'centilightyear',
+ 'centiliter',
+ 'centilumen',
+ 'centilux',
+ 'centimeter',
+ 'centiminute',
+ 'centimole',
+ 'centinewton',
+ 'centiparsec',
+ 'centipascal',
+ 'centiphoton',
+ 'centipixel',
+ 'centipoise',
+ 'centiradian',
+ 'centirayleigh',
+ 'centirydberg',
+ 'centisecond',
+ 'centisiemens',
+ 'centisteradian',
+ 'centistokes',
+ 'centitesla',
+ 'centivolt',
+ 'centivoxel',
+ 'centiwatt',
+ 'centiweber',
+ 'centiyear',
+ 'cerg',
+ 'cg',
+ 'cgs',
+ 'ch',
+ 'chan',
+ 'ck',
+ 'cl',
+ 'clm',
+ 'clx',
+ 'clyr',
+ 'cm',
+ 'cmag',
+ 'cmin',
+ 'cmol',
+ 'cohm',
+ 'core',
+ 'coulomb',
+ 'count',
+ 'cpc',
+ 'cph',
+ 'cphoton',
+ 'cpix',
+ 'cpixel',
+ 'crad',
+ 'cs',
+ 'csr',
+ 'ct',
+ 'cu',
+ 'curie',
+ 'cvox',
+ 'cvoxel',
+ 'cy',
+ 'cycle',
+ 'cyr',
+ 'd',
+ 'dA',
+ 'dAU',
+ 'dB',
+ 'dBa',
+ 'dC',
+ 'dD',
+ 'dF',
+ 'dG',
+ 'dGal',
+ 'dH',
+ 'dHz',
+ 'dJ',
+ 'dJy',
+ 'dK',
+ 'dL',
+ 'dN',
+ 'dOhm',
+ 'dP',
+ 'dPa',
+ 'dR',
+ 'dRy',
+ 'dS',
+ 'dSt',
+ 'dT',
+ ...]
+
+
+
+
+

To create a quantity, we multiply a value by a unit.

+
+
+
coord = 30 * u.deg
+type(coord)
+
+
+
+
+
astropy.units.quantity.Quantity
+
+
+
+
+

The result is a Quantity object.

+

Jupyter knows how to display Quantities like this:

+
+
+
coord
+
+
+
+
+
+\[30 \; \mathrm{{}^{\circ}}\]
+
+
+
+
+

Selecting a rectangle

+

Now we’ll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

We’ll define variables to contain these limits.

+
+
+
phi1_min = -55
+phi1_max = -45
+phi2_min = -8
+phi2_max = 4
+
+
+
+
+

To represent a rectangle, we’ll use two lists of coordinates and multiply by their units.

+
+
+
phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg
+phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg
+
+
+
+
+

phi1_rect and phi2_rect represent the coordinates of the corners of a rectangle.

+

But they are in “a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream

+

In order to use them in a Gaia query, we have to convert them to International Celestial Reference System (ICRS) coordinates. We can do that by storing the coordinates in a GD1Koposov10 object provided by Gala.

+
+
+
import gala.coordinates as gc
+
+corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)
+type(corners)
+
+
+
+
+
gala.coordinates.gd1.GD1Koposov10
+
+
+
+
+

We can display the result like this:

+
+
+
corners
+
+
+
+
+
<GD1Koposov10 Coordinate: (phi1, phi2) in deg
+    [(-55., -8.), (-55.,  4.), (-45.,  4.), (-45., -8.)]>
+
+
+
+
+

Now we can use transform_to to convert to ICRS coordinates.

+
+
+
import astropy.coordinates as coord
+
+corners_icrs = corners.transform_to(coord.ICRS)
+type(corners_icrs)
+
+
+
+
+
astropy.coordinates.builtin_frames.icrs.ICRS
+
+
+
+
+

The result is an ICRS object.

+
+
+
corners_icrs
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    [(146.27533314, 19.26190982), (135.42163944, 25.87738723),
+     (141.60264825, 34.3048303 ), (152.81671045, 27.13611254)]>
+
+
+
+
+

Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon.

+
+
+

Selecting a polygon

+

In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:

+
"""
+POLYGON(143.65, 20.98, 
+        134.46, 26.39, 
+        140.58, 34.85, 
+        150.16, 29.01)
+"""
+
+
+

corners_icrs behaves like a list, so we can use a for loop to iterate through the points.

+
+
+
for point in corners_icrs:
+    print(point)
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    (146.27533314, 19.26190982)>
+<ICRS Coordinate: (ra, dec) in deg
+    (135.42163944, 25.87738723)>
+<ICRS Coordinate: (ra, dec) in deg
+    (141.60264825, 34.3048303)>
+<ICRS Coordinate: (ra, dec) in deg
+    (152.81671045, 27.13611254)>
+
+
+
+
+

From that, we can select the coordinates ra and dec:

+
+
+
for point in corners_icrs:
+    print(point.ra, point.dec)
+
+
+
+
+
146d16m31.1993s 19d15m42.8754s
+135d25m17.902s 25d52m38.594s
+141d36m09.5337s 34d18m17.3891s
+152d49m00.1576s 27d08m10.0051s
+
+
+
+
+

The results are quantities with units, but if we select the value part, we get a dimensionless floating-point number.

+
+
+
for point in corners_icrs:
+    print(point.ra.value, point.dec.value)
+
+
+
+
+
146.27533313607782 19.261909820533692
+135.42163944306296 25.87738722767213
+141.60264825107333 34.304830296257144
+152.81671044675923 27.136112541397996
+
+
+
+
+

We can use string format to convert these numbers to strings.

+
+
+
point_base = "{point.ra.value}, {point.dec.value}"
+
+t = [point_base.format(point=point)
+     for point in corners_icrs]
+t
+
+
+
+
+
['146.27533313607782, 19.261909820533692',
+ '135.42163944306296, 25.87738722767213',
+ '141.60264825107333, 34.304830296257144',
+ '152.81671044675923, 27.136112541397996']
+
+
+
+
+

The result is a list of strings, which we can join into a single string using join.

+
+
+
point_list = ', '.join(t)
+point_list
+
+
+
+
+
'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'
+
+
+
+
+

Notice that we invoke join on a string and pass the list as an argument.

+

Before we can assemble the query, we need columns again (as we saw in the previous notebook).

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

Here’s the base for the query, with format specifiers for columns and point_list.

+
+
+
query_base = """SELECT {columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON({point_list}))
+"""
+
+
+
+
+

And here’s the result:

+
+
+
query = query_base.format(columns=columns, 
+                          point_list=point_list)
+print(query)
+
+
+
+
+
SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))
+
+
+
+
+

As always, we should take a minute to proof-read the query before we launch it.

+

The result will be bigger than our previous queries, so it will take a little longer.

+
+
+
job = Gaia.launch_job_async(query)
+print(job)
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=140340>
+      name       dtype    unit                              description                             n_bad 
+--------------- ------- -------- ------------------------------------------------------------------ ------
+      source_id   int64          Unique source identifier (unique within a particular Data Release)      0
+             ra float64      deg                                                    Right ascension      0
+            dec float64      deg                                                        Declination      0
+           pmra float64 mas / yr                         Proper motion in right ascension direction      0
+          pmdec float64 mas / yr                             Proper motion in declination direction      0
+       parallax float64      mas                                                           Parallax      0
+ parallax_error float64      mas                                         Standard error of parallax      0
+radial_velocity float64   km / s                                                    Radial velocity 139374
+Jobid: 1603114980658O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201019094300.vot
+Results: None
+
+
+
+
+

Here are the results.

+
+
+
results = job.get_results()
+len(results)
+
+
+
+
+
140340
+
+
+
+
+

There are more than 100,000 stars in this polygon, but that’s a manageable size to work with.

+
+
+

Saving results

+

This is the set of stars we’ll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.

+

Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.

+

Astropy Table objects provide write, which writes the table to disk.

+
+
+
filename = 'gd1_results.fits'
+results.write(filename, overwrite=True)
+
+
+
+
+

Because the filename ends with fits, the table is written in the FITS format, which preserves the metadata associated with the table.

+

If the file already exists, the overwrite argument causes it to be overwritten.

+

To see how big the file is, we can use ls with the -lh option, which prints information about the file including its size in human-readable form.

+
+
+
!ls -lh gd1_results.fits
+
+
+
+
+
-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits
+
+
+
+
+

The file is about 8.6 MB. If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_results.fits
+
+
+
+
+

Summary

+

In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.

+

In the next notebook, we’ll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1.

+
+
+

Best practices

+
    +
  • For measurements with units, use Quantity objects that represent units explicitly and check for errors.

  • +
  • Use the format function to compose queries; it is often faster and less error-prone.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don’t have to run the query again.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 1 + Chapter 3 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/03_motion.html b/_build/html/03_motion.html new file mode 100644 index 0000000..55c3da3 --- /dev/null +++ b/_build/html/03_motion.html @@ -0,0 +1,1364 @@ + + + + + + + + Chapter 3 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 3

+

This is the third in a series of notebooks related to astronomy data.

+

As a running example, we are replicating parts of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.

+

In the second lesson, we wrote a query to select stars from the region of the sky where we expect GD-1 to be, and saved the results in a FITS file.

+

Now we’ll read that data back and implement the next step in the analysis, identifying stars with the proper motion we expect for GD-1.

+
+

Outline

+

Here are the steps in this lesson:

+
    +
  1. We’ll read back the results from the previous lesson, which we saved in a FITS file.

  2. +
  3. Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.

  4. +
  5. We’ll put those results into a Pandas DataFrame, which we’ll use to select stars near the centerline of GD-1.

  6. +
  7. Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD-1.

  8. +
  9. Finally, we’ll select and plot the stars whose proper motion is in that region.

  10. +
+

After completing this lesson, you should be able to

+
    +
  • Select rows and columns from an Astropy Table.

  • +
  • Use Matplotlib to make a scatter plot.

  • +
  • Use Gala to transform coordinates.

  • +
  • Make a Pandas DataFrame and use a Boolean Series to select rows.

  • +
  • Save a DataFrame in an HDF5 file.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia python-wget
+
+
+
+
+
+
+

Reload the data

+

In the previous lesson, we ran a query on the Gaia server and downloaded data for roughly 100,000 stars. We saved the data in a FITS file so that now, picking up where we left off, we can read the data from a local file rather than running the query again.

+

If you ran the previous lesson successfully, you should already have a file called gd1_results.fits that contains the data we downloaded.

+

If not, you can run the following cell, which downloads the data from our repository.

+
+
+
import os
+from wget import download
+
+filename = 'gd1_results.fits'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+

Now here’s how we can read the data from the file back into an Astropy Table:

+
+
+
from astropy.table import Table
+
+results = Table.read(filename)
+
+
+
+
+

The result is an Astropy Table.

+

We can use info to refresh our memory of the contents.

+
+
+
results.info
+
+
+
+
+
<Table length=140340>
+      name       dtype    unit                              description                            
+--------------- ------- -------- ------------------------------------------------------------------
+      source_id   int64          Unique source identifier (unique within a particular Data Release)
+             ra float64      deg                                                    Right ascension
+            dec float64      deg                                                        Declination
+           pmra float64 mas / yr                         Proper motion in right ascension direction
+          pmdec float64 mas / yr                             Proper motion in declination direction
+       parallax float64      mas                                                           Parallax
+ parallax_error float64      mas                                         Standard error of parallax
+radial_velocity float64   km / s                                                    Radial velocity
+
+
+
+
+
+
+

Selecting rows and columns

+

In this section we’ll see operations for selecting columns and rows from an Astropy Table. You can find more information about these operations in the Astropy documentation.

+

We can get the names of the columns like this:

+
+
+
results.colnames
+
+
+
+
+
['source_id',
+ 'ra',
+ 'dec',
+ 'pmra',
+ 'pmdec',
+ 'parallax',
+ 'parallax_error',
+ 'radial_velocity']
+
+
+
+
+

And select an individual column like this:

+
+
+
results['ra']
+
+
+
+
+
<Column name='ra' dtype='float64' unit='deg' description='Right ascension' length=140340> + + + + + + + + + + + + + + + + + + + + + + + + + + +
142.48301935991023
142.25452941346344
142.64528557468074
142.57739430926034
142.58913564478618
141.81762228999614
143.18339801317677
142.9347319464589
142.26769745823267
142.89551292869012
142.2780935768316
142.06138786534987
...
143.05456487172972
144.0436496516182
144.06566578919313
144.13177563215973
143.77696341662764
142.945956347594
142.97282480557786
143.4166017695258
143.64484588686904
143.41554585481808
143.6908739159247
143.7702681295401
+
+

The result is a Column object that contains the data, and also the data type, units, and name of the column.

+
+
+
type(results['ra'])
+
+
+
+
+
astropy.table.column.Column
+
+
+
+
+

The rows in the Table are numbered from 0 to n-1, where n is the number of rows. We can select the first row like this:

+
+
+
results[0]
+
+
+
+
+
Row index=0 + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
637987125186749568142.4830193599102321.75771616932985-2.51683846838757662.941813096629439-0.25734489623333540.8237207945098111e+20
+
+

As you might have guessed, the result is a Row object.

+
+
+
type(results[0])
+
+
+
+
+
astropy.table.row.Row
+
+
+
+
+

Notice that the bracket operator selects both columns and rows. You might wonder how it knows which to select.

+

If the expression in brackets is a string, it selects a column; if the expression is an integer, it selects a row.

+

If you apply the bracket operator twice, you can select a column and then an element from the column.

+
+
+
results['ra'][0]
+
+
+
+
+
142.48301935991023
+
+
+
+
+

Or you can select a row and then an element from the row.

+
+
+
results[0]['ra']
+
+
+
+
+
142.48301935991023
+
+
+
+
+

You get the same result either way.

+
+
+

Scatter plot

+

To see what the results look like, we’ll use a scatter plot. The library we’ll use is Matplotlib, which is the most widely-used plotting library for Python.

+

The Matplotlib interface is based on MATLAB (hence the name), so if you know MATLAB, some of it will be familiar.

+

We’ll import like this.

+
+
+
import matplotlib.pyplot as plt
+
+
+
+
+

Pyplot part of the Matplotlib library. It is conventional to import it using the shortened name plt.

+

Pyplot provides two functions that can make scatterplots, plt.scatter and plt.plot.

+
    +
  • scatter is more versatile; for example, you can make every point in a scatter plot a different color.

  • +
  • plot is more limited, but for simple cases, it can be substantially faster.

  • +
+

Jake Vanderplas explains these differences in The Python Data Science Handbook

+

Since we are plotting more than 100,000 points and they are all the same size and color, we’ll use plot.

+

Here’s a scatter plot with right ascension on the x-axis and declination on the y-axis, both ICRS coordinates in degrees.

+
+
+
x = results['ra']
+y = results['dec']
+plt.plot(x, y, 'ko')
+
+plt.xlabel('ra (degree ICRS)')
+plt.ylabel('dec (degree ICRS)');
+
+
+
+
+_images/03_motion_28_0.png +
+
+

The arguments to plt.plot are x, y, and a string that specifies the style. In this case, the letters ko indicate that we want a black, round marker (k is for black because b is for blue).

+

The functions xlabel and ylabel put labels on the axes.

+

This scatter plot has a problem. It is “overplotted”, which means that there are so many overlapping points, we can’t distinguish between high and low density areas.

+

To fix this, we can provide optional arguments to control the size and transparency of the points.

+

Exercise: In the call to plt.plot, add the keyword argument markersize=0.1 to make the markers smaller.

+

Then add the argument alpha=0.1 to make the markers nearly transparent.

+

Adjust these arguments until you think the figure shows the data most clearly.

+

Note: Once you have made these changes, you might notice that the figure shows stripes with lower density of stars. These stripes are caused by the way Gaia scans the sky, which you can read about here. The dataset we are using, Gaia Data Release 2, covers 22 months of observations; during this time, some parts of the sky were scanned more than others.

+
+
+

Transform back

+

Remember that we selected data from a rectangle of coordinates in the GD1Koposov10 frame, then transformed them to ICRS when we constructed the query. +The coordinates in results are in ICRS.

+

To plot them, we will transform them back to the GD1Koposov10 frame; that way, the axes of the figure are aligned with the GD-1, which will make it easy to select stars near the centerline of the stream.

+

To do that, we’ll put the results into a GaiaData object, provided by the pyia library.

+
+
+
from pyia import GaiaData
+
+gaia_data = GaiaData(results)
+type(gaia_data)
+
+
+
+
+
pyia.data.GaiaData
+
+
+
+
+

Now we can extract sky coordinates from the GaiaData object, like this:

+
+
+
import astropy.units as u
+
+skycoord = gaia_data.get_skycoord(
+                distance=8*u.kpc, 
+                radial_velocity=0*u.km/u.s)
+
+
+
+
+

We provide distance and radial_velocity to prepare the data for reflex correction, which we explain below.

+
+
+
type(skycoord)
+
+
+
+
+
astropy.coordinates.sky_coordinate.SkyCoord
+
+
+
+
+

The result is an Astropy SkyCoord object (documentation here), which provides transform_to, so we can transform the coordinates to other frames.

+
+
+
import gala.coordinates as gc
+
+transformed = skycoord.transform_to(gc.GD1Koposov10)
+type(transformed)
+
+
+
+
+
astropy.coordinates.sky_coordinate.SkyCoord
+
+
+
+
+

The result is another SkyCoord object, now in the GD1Koposov10 frame.

+

The next step is to correct the proper motion measurements from Gaia for reflex due to the motion of our solar system around the Galactic center.

+

When we created skycoord, we provided distance and radial_velocity as arguments, which means we ignore the measurements provided by Gaia and replace them with these fixed values.

+

That might seem like a strange thing to do, but here’s the motivation:

+
    +
  • Because the stars in GD-1 are so far away, the distance estimates we get from Gaia, which are based on parallax, are not very precise. So we replace them with our current best estimate of the mean distance to GD-1, about 8 kpc. See Koposov, Rix, and Hogg, 2010.

  • +
  • For the other stars in the table, this distance estimate will be inaccurate, so reflex correction will not be correct. But that should have only a small effect on our ability to identify stars with the proper motion we expect for GD-1.

  • +
  • The measurement of radial velocity has no effect on the correction for proper motion; the value we provide is arbitrary, but we have to provide a value to avoid errors in the reflex correction calculation.

  • +
+

We are grateful to Adrian Price-Whelen for his help explaining this step in the analysis.

+

With this preparation, we can use reflex_correct from Gala (documentation here) to correct for solar reflex motion.

+
+
+
gd1_coord = gc.reflex_correct(transformed)
+
+type(gd1_coord)
+
+
+
+
+
astropy.coordinates.sky_coordinate.SkyCoord
+
+
+
+
+

The result is a SkyCoord object that contains

+
    +
  • The transformed coordinates as attributes named phi1 and phi2, which represent right ascension and declination in the GD1Koposov10 frame.

  • +
  • The transformed and corrected proper motions as pm_phi1_cosphi2 and pm_phi2.

  • +
+

We can select the coordinates like this:

+
+
+
phi1 = gd1_coord.phi1
+phi2 = gd1_coord.phi2
+
+
+
+
+

And plot them like this:

+
+
+
plt.plot(phi1, phi2, 'ko', markersize=0.1, alpha=0.2)
+
+plt.xlabel('ra (degree GD1)')
+plt.ylabel('dec (degree GD1)');
+
+
+
+
+_images/03_motion_45_0.png +
+
+

Remember that we started with a rectangle in GD-1 coordinates. When transformed to ICRS, it’s a non-rectangular polygon. Now that we have transformed back to GD-1 coordinates, it’s a rectangle again.

+
+
+

Pandas DataFrame

+

At this point we have three objects containing different subsets of the data.

+
+
+
type(results)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+
+
+
type(gaia_data)
+
+
+
+
+
pyia.data.GaiaData
+
+
+
+
+
+
+
type(gd1_coord)
+
+
+
+
+
astropy.coordinates.sky_coordinate.SkyCoord
+
+
+
+
+

On one hand, this makes sense, since each object provides different capabilities. But working with three different object types can be awkward.

+

It will be more convenient to choose one object and get all of the data into it. We’ll use a Pandas DataFrame, for two reasons:

+
    +
  1. It provides capabilities that are pretty much a superset of the other data structures, so it’s the all-in-one solution.

  2. +
  3. Pandas is a general-purpose tool that is useful in many domains, especially data science. If you are going to develop expertise in one tool, Pandas is a good choice.

  4. +
+

However, compared to an Astropy Table, Pandas has one big drawback: it does not keep the metadata associated with the table, including the units for the columns.

+

It’s easy to convert a Table to a Pandas DataFrame.

+
+
+
import pandas as pd
+
+df = results.to_pandas()
+df.shape
+
+
+
+
+
(140340, 8)
+
+
+
+
+

DataFrame provides shape, which shows the number of rows and columns.

+

It also provides head, which displays the first few rows. It is useful for spot-checking large results as you go along.

+
+
+
df.head()
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
0637987125186749568142.48301921.757716-2.5168382.941813-0.2573450.8237211.000000e+20
1638285195917112960142.25452922.4761682.662702-12.1659840.4227280.2974721.000000e+20
2638073505568978688142.64528622.16693218.306747-7.9506600.1036400.5445841.000000e+20
3638086386175786752142.57739422.2279200.987786-2.584105-0.8573271.0596071.000000e+20
4638049655615392384142.58913622.1107830.244439-4.9410790.0996250.4862241.000000e+20
+
+
+

Python detail: shape is an attribute, so we can display it’s value without calling it as a function; head is a function, so we need the parentheses.

+

Now we can extract the columns we want from gd1_coord and add them as columns in the DataFrame. phi1 and phi2 contain the transformed coordinates.

+
+
+
df['phi1'] = gd1_coord.phi1
+df['phi2'] = gd1_coord.phi2
+df.shape
+
+
+
+
+
(140340, 10)
+
+
+
+
+

pm_phi1_cosphi2 and pm_phi2 contain the components of proper motion in the transformed frame.

+
+
+
df['pm_phi1'] = gd1_coord.pm_phi1_cosphi2
+df['pm_phi2'] = gd1_coord.pm_phi2
+df.shape
+
+
+
+
+
(140340, 12)
+
+
+
+
+

Detail: If you notice that SkyCoord has an attribute called proper_motion, you might wonder why we are not using it.

+

We could have: proper_motion contains the same data as pm_phi1_cosphi2 and pm_phi2, but in a different format.

+
+
+

Plot proper motion

+

Now we are ready to replicate one of the panels in Figure 1 of the Price-Whelan and Bonaca paper, the one that shows the components of proper motion as a scatter plot:

+ +

In this figure, the shaded area is a high-density region of stars with the proper motion we expect for stars in GD-1.

+
    +
  • Due to the nature of tidal streams, we expect the proper motion for most stars to be along the axis of the stream; that is, we expect motion in the direction of phi2 to be near 0.

  • +
  • In the direction of phi1, we don’t have a prior expectation for proper motion, except that it should form a cluster at a non-zero value.

  • +
+

To locate this cluster, we’ll select stars near the centerline of GD-1 and plot their proper motion.

+
+
+

Selecting the centerline

+

As we can see in the following figure, many stars in GD-1 are less than 1 degree of declination from the line phi2=0.

+ +

If we select stars near this line, they are more likely to be in GD-1.

+

We’ll start by selecting the phi2 column from the DataFrame:

+
+
+
phi2 = df['phi2']
+type(phi2)
+
+
+
+
+
pandas.core.series.Series
+
+
+
+
+

The result is a Series, which is the structure Pandas uses to represent columns.

+

We can use a comparison operator, >, to compare the values in a Series to a constant.

+
+
+
phi2_min = -1.0 * u.deg
+phi2_max = 1.0 * u.deg
+
+mask = (df['phi2'] > phi2_min)
+type(mask)
+
+
+
+
+
pandas.core.series.Series
+
+
+
+
+
+
+
mask.dtype
+
+
+
+
+
dtype('bool')
+
+
+
+
+

The result is a Series of Boolean values, that is, True and False.

+
+
+
mask.head()
+
+
+
+
+
0    False
+1    False
+2    False
+3    False
+4    False
+Name: phi2, dtype: bool
+
+
+
+
+

A Boolean Series is sometimes called a “mask” because we can use it to mask out some of the rows in a DataFrame and select the rest, like this:

+
+
+
selected = df[mask]
+type(selected)
+
+
+
+
+
pandas.core.frame.DataFrame
+
+
+
+
+

selected is a DataFrame that contains only the rows from df that correspond to True values in mask.

+

The previous mask selects all stars where phi2 exceeds phi2_min; now we’ll select stars where phi2 falls between phi2_min and phi2_max.

+
+
+
phi_mask = ((df['phi2'] > phi2_min) & 
+            (df['phi2'] < phi2_max))
+
+
+
+
+

The & operator computes “logical AND”, which means the result is true where elements from both Boolean Series are true.

+

The sum of a Boolean Series is the number of True values, so we can use sum to see how many stars are in the selected region.

+
+
+
phi_mask.sum()
+
+
+
+
+
25084
+
+
+
+
+

And we can use phi1_mask to select stars near the centerline, which are more likely to be in GD-1.

+
+
+
centerline = df[phi_mask]
+len(centerline)
+
+
+
+
+
25084
+
+
+
+
+

Here’s a scatter plot of proper motion for the selected stars.

+
+
+
pm1 = centerline['pm_phi1']
+pm2 = centerline['pm_phi2']
+
+plt.plot(pm1, pm2, 'ko', markersize=0.1, alpha=0.1)
+    
+plt.xlabel('Proper motion phi1 (GD1 frame)')
+plt.ylabel('Proper motion phi2 (GD1 frame)');
+
+
+
+
+_images/03_motion_79_0.png +
+
+

Looking at these results, we see a large cluster around (0, 0), and a smaller cluster near (0, -10).

+

We can use xlim and ylim to set the limits on the axes and zoom in on the region near (0, 0).

+
+
+
pm1 = centerline['pm_phi1']
+pm2 = centerline['pm_phi2']
+
+plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+    
+plt.xlabel('Proper motion phi1 (GD1 frame)')
+plt.ylabel('Proper motion phi2 (GD1 frame)')
+
+plt.xlim(-12, 8)
+plt.ylim(-10, 10);
+
+
+
+
+_images/03_motion_81_0.png +
+
+

Now we can see the smaller cluster more clearly.

+

You might notice that our figure is less dense than the one in the paper. That’s because we started with a set of stars from a relatively small region. The figure in the paper is based on a region about 10 times bigger.

+

In the next lesson we’ll go back and select stars from a larger region. But first we’ll use the proper motion data to identify stars likely to be in GD-1.

+
+
+

Filtering based on proper motion

+

The next step is to select stars in the “overdense” region of proper motion, which are candidates to be in GD-1.

+

In the original paper, Price-Whelan and Bonaca used a polygon to cover this region, as shown in this figure.

+ +

We’ll use a simple rectangle for now, but in a later lesson we’ll see how to select a polygonal region as well.

+

Here are bounds on proper motion we chose by eye,

+
+
+
pm1_min = -8.9
+pm1_max = -6.9
+pm2_min = -2.2
+pm2_max =  1.0
+
+
+
+
+

To draw these bounds, we’ll make two lists containing the coordinates of the corners of the rectangle.

+
+
+
pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr
+pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr
+
+
+
+
+

Here’s what the plot looks like with the bounds we chose.

+
+
+
plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+plt.plot(pm1_rect, pm2_rect, '-')
+    
+plt.xlabel('Proper motion phi1 (GD1 frame)')
+plt.ylabel('Proper motion phi2 (GD1 frame)')
+
+plt.xlim(-12, 8)
+plt.ylim(-10, 10);
+
+
+
+
+_images/03_motion_88_0.png +
+
+

To select rows that fall within these bounds, we’ll use the following function, which uses Pandas operators to make a mask that selects rows where series falls between low and high.

+
+
+
def between(series, low, high):
+    """Make a Boolean Series.
+    
+    series: Pandas Series
+    low: lower bound
+    high: upper bound
+    
+    returns: Boolean Series
+    """
+    return (series > low) & (series < high)
+
+
+
+
+

The following mask select stars with proper motion in the region we chose.

+
+
+
pm_mask = (between(df['pm_phi1'], pm1_min, pm1_max) & 
+           between(df['pm_phi2'], pm2_min, pm2_max))
+
+
+
+
+

Again, the sum of a Boolean series is the number of True values.

+
+
+
pm_mask.sum()
+
+
+
+
+
1049
+
+
+
+
+

Now we can use this mask to select rows from df.

+
+
+
selected = df[pm_mask]
+len(selected)
+
+
+
+
+
1049
+
+
+
+
+

These are the stars we think are likely to be in GD-1. Let’s see what they look like, plotting their coordinates (not their proper motion).

+
+
+
phi1 = selected['phi1']
+phi2 = selected['phi2']
+
+plt.plot(phi1, phi2, 'ko', markersize=0.5, alpha=0.5)
+
+plt.xlabel('ra (degree GD1)')
+plt.ylabel('dec (degree GD1)');
+
+
+
+
+_images/03_motion_98_0.png +
+
+

Now that’s starting to look like a tidal stream!

+
+
+

Saving the DataFrame

+

At this point we have run a successful query and cleaned up the results; this is a good time to save the data.

+

To save a Pandas DataFrame, one option is to convert it to an Astropy Table, like this:

+
+
+
selected_table = Table.from_pandas(selected)
+type(selected_table)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+

Then we could write the Table to a FITS file, as we did in the previous lesson.

+

But Pandas provides functions to write DataFrames in other formats; to see what they are find the functions here that begin with to_.

+

One of the best options is HDF5, which is Version 5 of Hierarchical Data Format.

+

HDF5 is a binary format, so files are small and fast to read and write (like FITS, but unlike XML).

+

An HDF5 file is similar to an SQL database in the sense that it can contain more than one table, although in HDF5 vocabulary, a table is called a Dataset. (Multi-extension FITS files can also contain more than one table.)

+

And HDF5 stores the metadata associated with the table, including column names, row labels, and data types (like FITS).

+

Finally, HDF5 is a cross-language standard, so if you write an HDF5 file with Pandas, you can read it back with many other software tools (more than FITS).

+

Before we write the HDF5, let’s delete the old one, if it exists.

+
+
+
!rm -f gd1_dataframe.hdf5
+
+
+
+
+

We can write a Pandas DataFrame to an HDF5 file like this:

+
+
+
filename = 'gd1_dataframe.hdf5'
+
+df.to_hdf(filename, 'df')
+
+
+
+
+

Because an HDF5 file can contain more than one Dataset, we have to provide a name, or “key”, that identifies the Dataset in the file.

+

We could use any string as the key, but in this example I use the variable name df.

+

Exercise: We’re going to need centerline and selected later as well. Write a line or two of code to add it as a second Dataset in the HDF5 file.

+
+
+
# Solution
+
+centerline.to_hdf(filename, 'centerline')
+selected.to_hdf(filename, 'selected')
+
+
+
+
+

Detail: Reading and writing HDF5 tables requires a library called PyTables that is not always installed with Pandas. You can install it with pip like this:

+
pip install tables
+
+
+

If you install it using Conda, the name of the package is pytables.

+
conda install pytables
+
+
+

We can use ls to confirm that the file exists and check the size:

+
+
+
!ls -lh gd1_dataframe.hdf5
+
+
+
+
+
-rw-rw-r-- 1 downey downey 17M Oct 19 12:05 gd1_dataframe.hdf5
+
+
+
+
+

If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_dataframe.hdf5
+
+
+

We can read the file back like this:

+
+
+
read_back_df = pd.read_hdf(filename, 'df')
+read_back_df.shape
+
+
+
+
+
(140340, 12)
+
+
+
+
+

Pandas can write a variety of other formats, which you can read about here.

+
+
+

Summary

+

In this lesson, we re-loaded the Gaia data we saved from a previous query.

+

We transformed the coordinates and proper motion from ICRS to a frame aligned with GD-1, and stored the results in a Pandas DataFrame.

+

Then we replicated the selection process from the Price-Whelan and Bonaca paper:

+
    +
  • We selected stars near the centerline of GD-1 and made a scatter plot of their proper motion.

  • +
  • We identified a region of proper motion that contains stars likely to be in GD-1.

  • +
  • We used a Boolean Series as a mask to select stars whose proper motion is in that region.

  • +
+

So far, we have used data from a relatively small region of the sky. In the next lesson, we’ll write a query that selects stars based on proper motion, which will allow us to explore a larger region.

+
+
+

Best practices

+
    +
  • When you make a scatter plot, adjust the size of the markers and their transparency so the figure is not overplotted; otherwise it can misrepresent the data badly.

  • +
  • For simple scatter plots in Matplotlib, plot is faster than scatter.

  • +
  • An Astropy Table and a Pandas DataFrame are similar in many ways and they provide many of the same functions. They have pros and cons, but for many projects, either one would be a reasonable choice.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 2 + Chapter 4 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/04_select.html b/_build/html/04_select.html new file mode 100644 index 0000000..face37e --- /dev/null +++ b/_build/html/04_select.html @@ -0,0 +1,1260 @@ + + + + + + + + Chapter 4 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 4

+

This is the fourth in a series of notebooks related to astronomy data.

+

As a running example, we are replicating parts of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.

+

In the second lesson, we write a query to select stars from the region of the sky where we expect GD-1 to be, and save the results in a FITS file.

+

In the third lesson, we read that data back and identified stars with the proper motion we expect for GD-1.

+
+

Outline

+

Here are the steps in this lesson:

+
    +
  1. Using data from the previous lesson, we’ll identify the values of proper motion for stars likely to be in GD-1.

  2. +
  3. Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.

  4. +
  5. We’ll also see how to write the results to a CSV file.

  6. +
+

That will make it possible to search a bigger region of the sky in a single query.

+

After completing this lesson, you should be able to

+
    +
  • Convert proper motion between frames.

  • +
  • Write an ADQL query that selects based on proper motion.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia python-wget
+
+
+
+
+
+
+

Reload the data

+

The following cells download the data from the previous lesson, if necessary, and load it into a Pandas DataFrame.

+
+
+
import os
+from wget import download
+
+filename = 'gd1_dataframe.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+
+
+
import pandas as pd
+
+df = pd.read_hdf(filename, 'df')
+centerline = pd.read_hdf(filename, 'centerline')
+selected = pd.read_hdf(filename, 'selected')
+
+
+
+
+
+
+

Selection by proper motion

+

At this point we have downloaded data for a relatively large number of stars (more than 100,000) and selected a relatively small number (around 1000).

+

It would be more efficient to use ADQL to select only the stars we need. That would also make it possible to download data covering a larger region of the sky.

+

However, the selection we did was based on proper motion in the GD1Koposov10 frame. In order to do the same selection in ADQL, we have to work with proper motions in ICRS.

+

As a reminder, here’s the rectangle we selected based on proper motion in the GD1Koposov10 frame.

+
+
+
pm1_min = -8.9
+pm1_max = -6.9
+pm2_min = -2.2
+pm2_max =  1.0
+
+
+
+
+
+
+
import astropy.units as u
+
+pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr
+pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr
+
+
+
+
+

The following figure shows:

+
    +
  • Proper motion for the stars we selected along the center line of GD-1,

  • +
  • The rectangle we selected, and

  • +
  • The stars inside the rectangle highlighted in green.

  • +
+
+
+
import matplotlib.pyplot as plt
+
+pm1 = centerline['pm_phi1']
+pm2 = centerline['pm_phi2']
+plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+
+pm1 = selected['pm_phi1']
+pm2 = selected['pm_phi2']
+plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)
+
+plt.plot(pm1_rect, pm2_rect, '-')
+    
+plt.xlabel('Proper motion phi1 (GD1 frame)')
+plt.ylabel('Proper motion phi2 (GD1 frame)')
+
+plt.xlim(-12, 8)
+plt.ylim(-10, 10);
+
+
+
+
+_images/04_select_11_0.png +
+
+

Now we’ll make the same plot using proper motions in the ICRS frame, which are stored in columns pmra and pmdec.

+
+
+
pm1 = centerline['pmra']
+pm2 = centerline['pmdec']
+plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+
+pm1 = selected['pmra']
+pm2 = selected['pmdec']
+plt.plot(pm1, pm2, 'gx', markersize=1, alpha=0.3)
+    
+plt.xlabel('Proper motion phi1 (ICRS frame)')
+plt.ylabel('Proper motion phi2 (ICRS frame)')
+
+plt.xlim([-10, 5])
+plt.ylim([-20, 5]);
+
+
+
+
+_images/04_select_13_0.png +
+
+

The proper motions of the selected stars are more spread out in this frame, which is why it was preferable to do the selection in the GD-1 frame.

+

But now we can define a polygon that encloses the proper motions of these stars in ICRS, +and use the polygon as a selection criterion in an ADQL query.

+

SciPy provides a function that computes the convex hull of a set of points, which is the smallest convex polygon that contains all of the points.

+

To use it, I’ll select columns pmra and pmdec and convert them to a NumPy array.

+
+
+
import numpy as np
+
+points = selected[['pmra','pmdec']].to_numpy()
+points.shape
+
+
+
+
+
(1049, 2)
+
+
+
+
+

We’ll pass the points to ConvexHull, which returns an object that contains the results.

+
+
+
from scipy.spatial import ConvexHull
+
+hull = ConvexHull(points)
+hull
+
+
+
+
+
<scipy.spatial.qhull.ConvexHull at 0x7f446b1e8bb0>
+
+
+
+
+

hull.vertices contains the indices of the points that fall on the perimeter of the hull.

+
+
+
hull.vertices
+
+
+
+
+
array([ 692,  873,  141,  303,   42,  622,   45,   83,  127,  182, 1006,
+        971,  967, 1001,  969,  940], dtype=int32)
+
+
+
+
+

We can use them as an index into the original array to select the corresponding rows.

+
+
+
pm_vertices = points[hull.vertices]
+pm_vertices
+
+
+
+
+
array([[ -4.05037121, -14.75623261],
+       [ -3.41981085, -14.72365546],
+       [ -3.03521988, -14.44357135],
+       [ -2.26847919, -13.7140236 ],
+       [ -2.61172203, -13.24797471],
+       [ -2.73471401, -13.09054471],
+       [ -3.19923146, -12.5942653 ],
+       [ -3.34082546, -12.47611926],
+       [ -5.67489413, -11.16083338],
+       [ -5.95159272, -11.10547884],
+       [ -6.42394023, -11.05981295],
+       [ -7.09631023, -11.95187806],
+       [ -7.30641519, -12.24559977],
+       [ -7.04016696, -12.88580702],
+       [ -6.00347705, -13.75912098],
+       [ -4.42442296, -14.74641176]])
+
+
+
+
+

To plot the resulting polygon, we have to pull out the x and y coordinates.

+
+
+
pmra_poly, pmdec_poly = np.transpose(pm_vertices)
+
+
+
+
+

The following figure shows proper motion in ICRS again, along with the convex hull we just computed.

+
+
+
pm1 = centerline['pmra']
+pm2 = centerline['pmdec']
+plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+
+pm1 = selected['pmra']
+pm2 = selected['pmdec']
+plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)
+
+plt.plot(pmra_poly, pmdec_poly)
+    
+plt.xlabel('Proper motion phi1 (ICRS frame)')
+plt.ylabel('Proper motion phi2 (ICRS frame)')
+
+plt.xlim([-10, 5])
+plt.ylim([-20, 5]);
+
+
+
+
+_images/04_select_25_0.png +
+
+

To use pm_vertices as part of an ADQL query, we have to convert it to a string.

+

We’ll use flatten to convert from a 2-D array to a 1-D array, and str to convert each element to a string.

+
+
+
t = [str(x) for x in pm_vertices.flatten()]
+t
+
+
+
+
+
['-4.050371212154984',
+ '-14.75623260987968',
+ '-3.4198108491382455',
+ '-14.723655456335619',
+ '-3.035219883740934',
+ '-14.443571352854612',
+ '-2.268479190206636',
+ '-13.714023598831554',
+ '-2.611722027231764',
+ '-13.247974712069263',
+ '-2.7347140078529106',
+ '-13.090544709622938',
+ '-3.199231461993783',
+ '-12.594265302440828',
+ '-3.34082545787549',
+ '-12.476119260818695',
+ '-5.674894125178565',
+ '-11.160833381392624',
+ '-5.95159272432137',
+ '-11.105478836426514',
+ '-6.423940229776128',
+ '-11.05981294804957',
+ '-7.096310230579248',
+ '-11.951878058650085',
+ '-7.306415190921692',
+ '-12.245599765990594',
+ '-7.040166963232815',
+ '-12.885807024935527',
+ '-6.0034770546523735',
+ '-13.759120984106968',
+ '-4.42442296194263',
+ '-14.7464117578883']
+
+
+
+
+

Now t is a list of strings; we can use join to make a single string with commas between the elements.

+
+
+
pm_point_list = ', '.join(t)
+pm_point_list
+
+
+
+
+
'-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883'
+
+
+
+
+
+
+

Selecting the region

+

Let’s review how we got to this point.

+
    +
  1. We made an ADQL query to the Gaia server to get data for stars in the vicinity of GD-1.

  2. +
  3. We transformed to GD1 coordinates so we could select stars along the centerline of GD-1.

  4. +
  5. We plotted the proper motion of the centerline stars to identify the bounds of the overdense region.

  6. +
  7. We made a mask that selects stars whose proper motion is in the overdense region.

  8. +
+

The problem is that we downloaded data for more than 100,000 stars and selected only about 1000 of them.

+

It will be more efficient if we select on proper motion as part of the query. That will allow us to work with a larger region of the sky in a single query, and download less unneeded data.

+

This query will select on the following conditions:

+
    +
  • parallax < 1

  • +
  • bp_rp BETWEEN -0.75 AND 2

  • +
  • Coordinates within a rectangle in the GD-1 frame, transformed to ICRS.

  • +
  • Proper motion with the polygon we just computed.

  • +
+

The first three conditions are the same as in the previous query. Only the last one is new.

+

Here’s the rectangle in the GD-1 frame we’ll select.

+
+
+
phi1_min = -70
+phi1_max = -20
+phi2_min = -5
+phi2_max = 5
+
+
+
+
+
+
+
phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg
+phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg
+
+
+
+
+

Here’s how we transform it to ICRS, as we saw in the previous lesson.

+
+
+
import gala.coordinates as gc
+import astropy.coordinates as coord
+
+corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)
+corners_icrs = corners.transform_to(coord.ICRS)
+
+
+
+
+

To use corners_icrs as part of an ADQL query, we have to convert it to a string. Here’s how we do that, as we saw in the previous lesson.

+
+
+
point_base = "{point.ra.value}, {point.dec.value}"
+
+t = [point_base.format(point=point)
+     for point in corners_icrs]
+
+point_list = ', '.join(t)
+point_list
+
+
+
+
+
'135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258'
+
+
+
+
+

Now we have everything we need to assemble the query.

+
+
+

Assemble the query

+

Here’s the base string we used for the query in the previous lesson.

+
+
+
query_base = """SELECT 
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON({point_list}))
+"""
+
+
+
+
+

Exercise: Modify query_base by adding a new clause to select stars whose coordinates of proper motion, pmra and pmdec, fall within the polygon defined by pm_point_list.

+
+
+
# Solution
+
+query_base = """SELECT 
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON({point_list}))
+  AND 1 = CONTAINS(POINT(pmra, pmdec),
+                   POLYGON({pm_point_list}))
+"""
+
+
+
+
+

Here again are the columns we want to select.

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

Exercise: Use format to format query_base and define query, filling in the values of columns, point_list, and pm_point_list.

+
+
+
# Solution
+
+query = query_base.format(columns=columns, 
+                            point_list=point_list,
+                            pm_point_list=pm_point_list)
+print(query)
+
+
+
+
+
SELECT 
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON(135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258))
+  AND 1 = CONTAINS(POINT(pmra, pmdec),
+                   POLYGON(-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883))
+
+
+
+
+

Here’s how we run it.

+
+
+
from astroquery.gaia import Gaia
+
+job = Gaia.launch_job_async(query)
+print(job)
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=7346>
+      name       dtype    unit                              description                             n_bad
+--------------- ------- -------- ------------------------------------------------------------------ -----
+      source_id   int64          Unique source identifier (unique within a particular Data Release)     0
+             ra float64      deg                                                    Right ascension     0
+            dec float64      deg                                                        Declination     0
+           pmra float64 mas / yr                         Proper motion in right ascension direction     0
+          pmdec float64 mas / yr                             Proper motion in declination direction     0
+       parallax float64      mas                                                           Parallax     0
+ parallax_error float64      mas                                         Standard error of parallax     0
+radial_velocity float64   km / s                                                    Radial velocity  7295
+Jobid: 1603132746237O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201019143906.vot
+Results: None
+
+
+
+
+

And get the results.

+
+
+
candidate_table = job.get_results()
+len(candidate_table)
+
+
+
+
+
7346
+
+
+
+
+
+
+

Plotting one more time

+

Let’s see what the results look like.

+
+
+
x = candidate_table['ra']
+y = candidate_table['dec']
+plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
+
+plt.xlabel('ra (degree ICRS)')
+plt.ylabel('dec (degree ICRS)');
+
+
+
+
+_images/04_select_51_0.png +
+
+

Here we can see why it was useful to transform these coordinates. In ICRS, it is more difficult to identity the stars near the centerline of GD-1.

+

So, before we move on to the next step, let’s collect the code we used to transform the coordinates and make a Pandas DataFrame:

+
+
+
from pyia import GaiaData
+
+def make_dataframe(table):
+    """Transform coordinates from ICRS to GD-1 frame.
+    
+    table: Astropy Table
+    
+    returns: Pandas DataFrame
+    """
+    gaia_data = GaiaData(table)
+
+    c_sky = gaia_data.get_skycoord(distance=8*u.kpc, 
+                                   radial_velocity=0*u.km/u.s)
+    c_gd1 = gc.reflex_correct(
+                c_sky.transform_to(gc.GD1Koposov10))
+
+    df = table.to_pandas()
+    df['phi1'] = c_gd1.phi1
+    df['phi2'] = c_gd1.phi2
+    df['pm_phi1'] = c_gd1.pm_phi1_cosphi2
+    df['pm_phi2'] = c_gd1.pm_phi2
+    return df
+
+
+
+
+

Here’s how we can use this function:

+
+
+
candidate_df = make_dataframe(candidate_table)
+
+
+
+
+

And let’s see the results.

+
+
+
x = candidate_df['phi1']
+y = candidate_df['phi2']
+
+plt.plot(x, y, 'ko', markersize=0.5, alpha=0.5)
+
+plt.xlabel('ra (degree GD1)')
+plt.ylabel('dec (degree GD1)');
+
+
+
+
+_images/04_select_57_0.png +
+
+

We’re starting to see GD-1 more clearly.

+

We can compare this figure with one of these panels in Figure 1 from the original paper:

+ + +

The top panel shows stars selected based on proper motion only, so it is comparable to our figure (although notice that it covers a wider region).

+

In the next lesson, we will use photometry data from Pan-STARRS to do a second round of filtering, and see if we can replicate the bottom panel.

+

We’ll also learn how to add annotations like the ones in the figure from the paper, and customize the style of the figure to present the results clearly and compellingly.

+
+
+

Saving the DataFrame

+

Let’s save this DataFrame so we can pick up where we left off without running this query again.

+
+
+
!rm -f gd1_candidates.hdf5
+
+
+
+
+
+
+
filename = 'gd1_candidates.hdf5'
+
+candidate_df.to_hdf(filename, 'candidate_df')
+
+
+
+
+

We can use ls to confirm that the file exists and check the size:

+
+
+
!ls -lh gd1_candidates.hdf5
+
+
+
+
+
-rw-rw-r-- 1 downey downey 756K Oct 19 14:39 gd1_candidates.hdf5
+
+
+
+
+

If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_candidates.hdf5
+
+
+
+
+

CSV

+

Pandas can write a variety of other formats, which you can read about here.

+

We won’t cover all of them, but one other important one is CSV, which stands for “comma-separated values”.

+

CSV is a plain-text format with minimal formatting requirements, so it can be read and written by pretty much any tool that works with data. In that sense, it is the “least common denominator” of data formats.

+

However, it has an important limitation: some information about the data gets lost in translation, notably the data types. If you read a CSV file from someone else, you might need some additional information to make sure you are getting it right.

+

Also, CSV files tend to be big, and slow to read and write.

+

With those caveats, here’s how to write one:

+
+
+
candidate_df.to_csv('gd1_candidates.csv')
+
+
+
+
+

We can check the file size like this:

+
+
+
!ls -lh gd1_candidates.csv
+
+
+
+
+
-rw-rw-r-- 1 downey downey 1.6M Oct 19 14:39 gd1_candidates.csv
+
+
+
+
+

The CSV file about 2 times bigger than the HDF5 file (so that’s not that bad, really).

+

We can see the first few lines like this:

+
+
+
!head -3 gd1_candidates.csv
+
+
+
+
+
,source_id,ra,dec,pmra,pmdec,parallax,parallax_error,radial_velocity,phi1,phi2,pm_phi1,pm_phi2
+0,635559124339440000,137.58671691646745,19.1965441084838,-3.770521900009566,-12.490481778113859,0.7913934419894347,0.2717538145759051,,-59.63048941944396,-1.21648525150429,-7.361362712556612,-0.5926328820420083
+1,635860218726658176,138.5187065217173,19.09233926905897,-5.941679495793577,-11.346409129876392,0.30745551377348623,0.19946557779138105,,-59.247329893833296,-2.0160784008206476,-7.527126084599517,1.7487794924398758
+
+
+
+
+

The CSV file contains the names of the columns, but not the data types.

+

We can read the CSV file back like this:

+
+
+
read_back_csv = pd.read_csv('gd1_candidates.csv')
+
+
+
+
+

Let’s compare the first few rows of candidate_df and read_back_csv

+
+
+
candidate_df.head(3)
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
+
+
+
+
+
read_back_csv.head(3)
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unnamed: 0source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
00635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
11635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
22635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
+
+
+

Notice that the index in candidate_df has become an unnamed column in read_back_csv. The Pandas functions for writing and reading CSV files provide options to avoid that problem, but this is an example of the kind of thing that can go wrong with CSV files.

+
+
+

Summary

+

In the previous lesson we downloaded data for a large number of stars and then selected a small fraction of them based on proper motion.

+

In this lesson, we improved this process by writing a more complex query that uses the database to select stars based on proper motion. This process requires more computation on the Gaia server, but then we’re able to either:

+
    +
  1. Search the same region and download less data, or

  2. +
  3. Search a larger region while still downloading a manageable amount of data.

  4. +
+

In the next lesson, we’ll learn about the databased JOIN operation and use it to download photometry data from Pan-STARRS.

+
+
+

Best practices

+
    +
  • When possible, “move the computation to the data”; that is, do as much of the work as possible on the database server before downloading the data.

  • +
  • For most applications, saving data in FITS or HDF5 is better than CSV. FITS and HDF5 are binary formats, so the files are usually smaller, and they store metadata, so you don’t lose anything when you read the file back.

  • +
  • On the other hand, CSV is a “least common denominator” format; that is, it can be read by practically any application that works with data.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 3 + Chapter 5 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/05_join.html b/_build/html/05_join.html new file mode 100644 index 0000000..db265e9 --- /dev/null +++ b/_build/html/05_join.html @@ -0,0 +1,1070 @@ + + + + + + + + Chapter 5 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 5

+

This is the fifth in a series of notebooks related to astronomy data.

+

As a continuing example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

Picking up where we left off, the next step in the analysis is to select candidate stars based on photometry. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:

+ +

In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster.

+

By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars.

+
+

Outline

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the candidate stars we identified in the previous notebook.

  2. +
  3. Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a JOIN operation to select photometry data for the candidate stars.

  4. +
  5. We’ll write the results to a file for use in the next notebook.

  6. +
+

After completing this lesson, you should be able to

+
    +
  • Upload a table to the Gaia server.

  • +
  • Write ADQL queries involving JOIN operations.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia python-wget
+
+
+
+
+
+
+

Reloading the data

+

The following cell downloads the data from the previous notebook.

+
+
+
import os
+from wget import download
+
+filename = 'gd1_candidates.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+

And we can read it back.

+
+
+
import pandas as pd
+
+candidate_df = pd.read_hdf(filename, 'candidate_df')
+
+
+
+
+

candidate_df is the Pandas DataFrame that contains results from the query in the previous notebook, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame.

+
+
+
import matplotlib.pyplot as plt
+
+x = candidate_df['phi1']
+y = candidate_df['phi2']
+
+plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
+
+plt.xlabel('ra (degree GD1)')
+plt.ylabel('dec (degree GD1)');
+
+
+
+
+_images/05_join_9_0.png +
+
+

This is the same figure we saw at the end of the previous notebook. GD-1 is visible against the background stars, but we will be able to see it more clearly after selecting based on photometry data.

+
+
+

Getting photometry data

+

The Gaia dataset contains some photometry data, including the variable bp_rp, which we used in the original query to select stars with BP - RP color between -0.75 and 2.

+

Selecting stars with bp-rp less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.

+

Now, to select stars with the age and metal richness we expect in GD-1, we will use g - i color and apparent g-band magnitude, which are available from the Pan-STARRS survey.

+

Conveniently, the Gaia server provides data from Pan-STARRS as a table in the same database we have been using, so we can access it by making ADQL queries.

+

In general, looking up a star from the Gaia catalog and finding the corresponding star in the Pan-STARRS catalog is not easy. This kind of cross matching is not always possible, because a star might appear in one catalog and not the other. And even when both stars are present, there might not be a clear one-to-one relationship between stars in the two catalogs.

+

Fortunately, smart people have worked on this problem, and the Gaia database includes cross-matching tables that suggest a best neighbor in the Pan-STARRS catalog for many stars in the Gaia catalog.

+

This document describes the cross matching process. Briefly, it uses a cone search to find possible matches in approximately the right position, then uses attributes like color and magnitude to choose pairs of stars most likely to be identical.

+

So the hard part of cross-matching has been done for us. However, using the results is a little tricky.

+

But, it is also an opportunity to learn about one of the most important tools for working with databases: “joining” tables.

+

In general, a “join” is an operation where you match up records from one table with records from another table using as a “key” a piece of information that is common to both tables, usually some kind of ID code.

+

In this example:

+
    +
  • Stars in the Gaia dataset are identified by source_id.

  • +
  • Stars in the Pan-STARRS dataset are identified by obj_id.

  • +
+

For each candidate star we have selected so far, we have the source_id; the goal is to find the obj_id for the same star (we hope) in the Pan-STARRS catalog.

+

To do that we will:

+
    +
  1. Make a table that contains the source_id for each candidate star and upload the table to the Gaia server;

  2. +
  3. Use the JOIN operator to look up each source_id in the gaiadr2.panstarrs1_best_neighbour table, which contains the obj_id of the best match for each star in the Gaia catalog; then

  4. +
  5. Use the JOIN operator again to look up each obj_id in the panstarrs1_original_valid table, which contains the Pan-STARRS photometry data we want.

  6. +
+

Let’s start with the first step, uploading a table.

+
+
+

Preparing a table for uploading

+

For each candidate star, we want to find the corresponding row in the gaiadr2.panstarrs1_best_neighbour table.

+

In order to do that, we have to:

+
    +
  1. Write the table in a local file as an XML VOTable, which is a format suitable for transmitting a table over a network.

  2. +
  3. Write an ADQL query that refers to the uploaded table.

  4. +
  5. Change the way we submit the job so it uploads the table before running the query.

  6. +
+

The first step is not too difficult because Astropy provides a function called writeto that can write a Table in XML.

+

The documentation of this process is here.

+

First we have to convert our Pandas DataFrame to an Astropy Table.

+
+
+
from astropy.table import Table
+
+candidate_table = Table.from_pandas(candidate_df)
+type(candidate_table)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+

To write the file, we can use Table.write with format='votable', as described here.

+
+
+
table = candidate_table[['source_id']]
+table.write('candidate_df.xml', format='votable', overwrite=True)
+
+
+
+
+

Notice that we select a single column from the table, source_id. +We could write the entire table to a file, but that would take longer to transmit over the network, and we really only need one column.

+

This process, taking a structure like a Table and translating it into a form that can be transmitted over a network, is called serialization.

+

XML is one of the most common serialization formats. One nice feature is that XML data is plain text, as opposed to binary digits, so you can read the file we just wrote:

+
+
+
!head candidate_df.xml
+
+
+
+
+
<?xml version="1.0" encoding="utf-8"?>
+<!-- Produced with astropy.io.votable version 4.0.1.post1
+     http://www.astropy.org/ -->
+<VOTABLE version="1.4" xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ivoa.net/xml/VOTable/v1.4">
+ <RESOURCE type="results">
+  <TABLE>
+   <FIELD ID="source_id" datatype="long" name="source_id"/>
+   <DATA>
+    <TABLEDATA>
+     <TR>
+
+
+
+
+

XML is a general format, so different XML files contain different kinds of data. In order to read an XML file, it’s not enough to know that it’s XML; you also have to know the data format, which is called a schema.

+

In this example, the schema is VOTable; notice that one of the first tags in the file specifies the schema, and even includes the URL where you can get its definition.

+

So this is an example of a self-documenting format.

+

A drawback of XML is that it tends to be big, which is why we wrote just the source_id column rather than the whole table. +The size of the file is about 750 KB, so that’s not too bad.

+
+
+
!ls -lh candidate_df.xml
+
+
+
+
+
-rw-rw-r-- 1 downey downey 396K Oct 19 14:48 candidate_df.xml
+
+
+
+
+

If you are using Windows, ls might not work; in that case, try:

+
!dir candidate_df.xml
+
+
+

Exercise: There’s a gotcha here we want to warn you about. Why do you think we used double brackets to specify the column we wanted? What happens if you use single brackets?

+

Run these cells to find out.

+
+
+
table = candidate_table[['source_id']]
+type(table)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+
+
+
column = candidate_table['source_id']
+type(column)
+
+
+
+
+
astropy.table.column.Column
+
+
+
+
+
+
+
# writeto(column, 'candidate_df.xml')
+
+
+
+
+
+
+

Uploading a table

+

The next step is to upload this table to the Gaia server and use it as part of a query.

+

Here’s the documentation that explains how to run a query with an uploaded table.

+

In the spirit of incremental development and testing, let’s start with the simplest possible query.

+
+
+
query = """SELECT *
+FROM tap_upload.candidate_df
+"""
+
+
+
+
+

This query downloads all rows and all columns from the uploaded table. The name of the table has two parts: tap_upload specifies a table that was uploaded using TAP+ (remember that’s the name of the protocol we’re using to talk to the Gaia server).

+

And candidate_df is the name of the table, which we get to choose (unlike tap_upload, which we didn’t get to choose).

+

Here’s how we run the query:

+
+
+
from astroquery.gaia import Gaia
+
+job = Gaia.launch_job_async(query=query, 
+                            upload_resource='candidate_df.xml', 
+                            upload_table_name='candidate_df')
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+INFO: Query finished. [astroquery.utils.tap.core]
+
+
+
+
+

upload_resource specifies the name of the file we want to upload, which is the file we just wrote.

+

upload_table_name is the name we assign to this table, which is the name we used in the query.

+

And here are the results:

+
+
+
results = job.get_results()
+results
+
+
+
+
+
Table length=7346 + + + + + + + + + + + + + + + + + + + + + + + + +
source_id
int64
635559124339440000
635860218726658176
635674126383965568
635535454774983040
635497276810313600
635614168640132864
635821843194387840
635551706931167104
635518889086133376
635580294233854464
...
612282738058264960
612485911486166656
612386332668697600
612296172717818624
612250375480101760
612394926899159168
612288854091187712
612428870024913152
612256418500423168
612429144902815104
+
+

If things go according to plan, the result should contain the same rows and columns as the uploaded table.

+
+
+
len(candidate_table), len(results)
+
+
+
+
+
(7346, 7346)
+
+
+
+
+
+
+
set(candidate_table['source_id']) == set(results['source_id'])
+
+
+
+
+
True
+
+
+
+
+

In this example, we uploaded a table and then downloaded it again, so that’s not too useful.

+

But now that we can upload a table, we can join it with other tables on the Gaia server.

+
+
+

Joining with an uploaded table

+

Here’s the first example of a query that contains a JOIN clause.

+
+
+
query1 = """SELECT *
+FROM gaiadr2.panstarrs1_best_neighbour as best
+JOIN tap_upload.candidate_df as candidate_df
+ON best.source_id = candidate_df.source_id
+"""
+
+
+
+
+

Let’s break that down one clause at a time:

+
    +
  • SELECT * means we will download all columns from both tables.

  • +
  • FROM gaiadr2.panstarrs1_best_neighbour as best means that we’ll get the columns from the Pan-STARRS best neighbor table, which we’ll refer to using the short name best.

  • +
  • JOIN tap_upload.candidate_df as candidate_df means that we’ll also get columns from the uploaded table, which we’ll refer to using the short name candidate_df.

  • +
  • ON best.source_id = candidate_df.source_id specifies that we will use source_id to match up the rows from the two tables.

  • +
+

Here’s the documentation of the best neighbor table.

+

Let’s run the query:

+
+
+
job1 = Gaia.launch_job_async(query=query1, 
+                       upload_resource='candidate_df.xml', 
+                       upload_table_name='candidate_df')
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+
+
+
+
+

And get the results.

+
+
+
results1 = job1.get_results()
+results1
+
+
+
+
+
Table length=3724 + + + + + + + + + + + + + + + + + + + + + + + + +
source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2
arcsec
int64int64float64int32int16int16int16int64
6358602187266581761309113851876713490.0536670358954670841015635860218726658176
6356741263839655681308313884284887200.0388102681415775161015635674126383965568
6355354547749830401306313783776573690.0343230288289910761015635535454774983040
6354972768103136001308113804456319300.047202554132500061015635497276810313600
6356141686401328641305713959221401350.0203041897099641431015635614168640132864
6355986079743697921303413920912795130.0365246268534030541015635598607974369792
6357376618354965761310013993335021360.0366268278207166061015635737661835496576
6358509458927486721320113986549341470.0211787423933783961015635850945892748672
6356005321197136641304213922858936230.045188209150430151015635600532119713664
........................
6122417812491246081297513437559955610.042357158300018151015612241781249124608
6123321473614430721301413414585387770.022652498590129771015612332147361443072
6124267440168024321305213468524656560.032476530099618431015612426744016802432
6123317393403417601301113412177938390.0360642408180257351015612331739340341760
6122827380582649601297413404459335190.0252932373534968981015612282738058264960
6123863326686976001303513545702197740.020103160014030861015612386332668697600
6122961727178186241296913380061687800.0512642120258362051015612296172717818624
6122503754801017601297413464758974640.0317837403475309051015612250375480101760
6123949268991591681305813551997517950.040191748305466981015612394926899159168
6122564185004231681299313490752973100.0092427896695131561015612256418500423168
+
+

This table contains all of the columns from the best neighbor table, plus the single column from the uploaded table.

+
+
+
results1.colnames
+
+
+
+
+
['source_id',
+ 'original_ext_source_id',
+ 'angular_distance',
+ 'number_of_neighbours',
+ 'number_of_mates',
+ 'best_neighbour_multiplicity',
+ 'gaia_astrometric_params',
+ 'source_id_2']
+
+
+
+
+

Because one of the column names appears in both tables, the second instance of source_id has been appended with the suffix _2.

+

The length of the results table is about 2000, which means we were not able to find matches for all stars in the list of candidate_df.

+
+
+
len(results1)
+
+
+
+
+
3724
+
+
+
+
+

To get more information about the matching process, we can inspect best_neighbour_multiplicity, which indicates for each star in Gaia how many stars in Pan-STARRS are equally likely matches.

+

For this kind of data exploration, we’ll convert a column from the table to a Pandas Series so we can use value_counts, which counts the number of times each value appears in a Series, like a histogram.

+
+
+
import pandas as pd
+
+nn = pd.Series(results1['best_neighbour_multiplicity'])
+nn.value_counts()
+
+
+
+
+
1    3724
+dtype: int64
+
+
+
+
+

The result shows that 1 is the only value in the Series, appearing xxx times.

+

That means that in every case where a match was found, the matching algorithm identified a single neighbor as the most likely match.

+

Similarly, number_of_mates indicates the number of other stars in Gaia that match with the same star in Pan-STARRS.

+
+
+
nm = pd.Series(results1['number_of_mates'])
+nm.value_counts()
+
+
+
+
+
0    3724
+dtype: int64
+
+
+
+
+

For this set of candidate_df, almost all of the stars we’ve selected from Pan-STARRS are only matched with a single star in the Gaia catalog.

+

Detail The table also contains number_of_neighbors which is the number of stars in Pan-STARRS that match in terms of position, before using other critieria to choose the most likely match.

+
+
+

Getting the photometry data

+

The most important column in results1 is original_ext_source_id which is the obj_id we will use to look up the likely matches in Pan-STARRS to get photometry data.

+

The process is similar to what we just did to look up the matches. We will:

+
    +
  1. Make a table that contains source_id and original_ext_source_id.

  2. +
  3. Write the table to an XML VOTable file.

  4. +
  5. Write a query that joins the uploaded table with gaiadr2.panstarrs1_original_valid and selects the photometry data we want.

  6. +
  7. Run the query using the uploaded table.

  8. +
+

Since we’ve done everything here before, we’ll do these steps as an exercise.

+

Exercise: Select source_id and original_ext_source_id from results1 and write the resulting table as a file named external.xml.

+
+
+
# Solution
+
+table = results1[['source_id', 'original_ext_source_id']]
+table.write('external.xml', format='votable', overwrite=True)
+
+
+
+
+

Use !head to confirm that the file exists and contains an XML VOTable.

+
+
+
!head external.xml
+
+
+
+
+
<?xml version="1.0" encoding="utf-8"?>
+<!-- Produced with astropy.io.votable version 4.0.1.post1
+     http://www.astropy.org/ -->
+<VOTABLE version="1.4" xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ivoa.net/xml/VOTable/v1.4">
+ <RESOURCE type="results">
+  <TABLE>
+   <FIELD ID="source_id" datatype="long" name="source_id" ucd="meta.id;meta.main">
+    <DESCRIPTION>
+     Unique Gaia source identifier
+    </DESCRIPTION>
+
+
+
+
+

Exercise: Read the documentation of the Pan-STARRS table and make note of obj_id, which contains the object IDs we’ll use to find the rows we want.

+

Write a query that uses each value of original_ext_source_id from the uploaded table to find a row in gaiadr2.panstarrs1_original_valid with the same value in obj_id, and select all columns from both tables.

+

Suggestion: Develop and test your query incrementally. For example:

+
    +
  1. Write a query that downloads all columns from the uploaded table. Test to make sure we can read the uploaded table.

  2. +
  3. Write a query that downloads the first 10 rows from gaiadr2.panstarrs1_original_valid. Test to make sure we can access Pan-STARRS data.

  4. +
  5. Write a query that joins the two tables and selects all columns. Test that the join works as expected.

  6. +
+

As a bonus exercise, write a query that joins the two tables and selects just the columns we need:

+
    +
  • source_id from the uploaded table

  • +
  • g_mean_psf_mag from gaiadr2.panstarrs1_original_valid

  • +
  • i_mean_psf_mag from gaiadr2.panstarrs1_original_valid

  • +
+

Hint: When you select a column from a join, you have to specify which table the column is in.

+
+
+
# Solution
+
+query2 = """SELECT *
+FROM tap_upload.external as external
+"""
+
+
+
+
+
+
+
# Solution
+
+query2 = """SELECT TOP 10 *
+FROM gaiadr2.panstarrs1_original_valid
+"""
+
+
+
+
+
+
+
# Solution
+
+query2 = """SELECT *
+FROM gaiadr2.panstarrs1_original_valid as ps
+JOIN tap_upload.external as external
+ON ps.obj_id = external.original_ext_source_id
+"""
+
+
+
+
+
+
+
# Solution
+
+query2 = """SELECT
+external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag
+FROM gaiadr2.panstarrs1_original_valid as ps
+JOIN tap_upload.external as external
+ON ps.obj_id = external.original_ext_source_id
+"""
+
+
+
+
+
+
+
print(query2)
+
+
+
+
+
SELECT
+external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag
+FROM gaiadr2.panstarrs1_original_valid as ps
+JOIN tap_upload.external as external
+ON ps.obj_id = external.original_ext_source_id
+
+
+
+
+
+
+
job2 = Gaia.launch_job_async(query=query2, 
+                       upload_resource='external.xml', 
+                       upload_table_name='external')
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+
+
+
+
+
+
+
results2 = job2.get_results()
+results2
+
+
+
+
+
Table length=3724 + + + + + + + + + + + + + + + + + + + + + + + + +
source_idg_mean_psf_magi_mean_psf_mag
mag
int64float64float64
63586021872665817617.897800445556617.5174007415771
63567412638396556819.287300109863317.6781005859375
63553545477498304016.923799514770516.478099822998
63549727681031360019.924200057983418.3339996337891
63561416864013286416.151599884033214.6662998199463
63559860797436979216.522399902343816.1375007629395
63573766183549657614.503299713134813.9849004745483
63585094589274867216.517499923706116.0450000762939
63560053211971366420.450599670410219.5177001953125
.........
61224178124912460820.234399795532218.6518001556396
61233214736144307221.384899139404320.3076000213623
61242674401680243217.828100204467817.4281005859375
61233173934034176021.865699768066419.5223007202148
61228273805826496022.515199661254919.9743995666504
61238633266869760019.379299163818417.9923000335693
61229617271781862417.494400024414116.926700592041
61225037548010176015.333000183105514.6280002593994
61239492689915916816.441400527954115.8212003707886
61225641850042316820.871599197387719.9612007141113
+
+

Challenge exercise

+

Do both joins in one query.

+

There’s an example here you could start with.

+
+
+

Write the data

+

Since we have the data in an Astropy Table, let’s store it in a FITS file.

+
+
+
filename = 'gd1_photo.fits'
+results2.write(filename, overwrite=True)
+
+
+
+
+

We can check that the file exists, and see how big it is.

+
+
+
!ls -lh gd1_photo.fits
+
+
+
+
+
-rw-rw-r-- 1 downey downey 96K Oct 19 14:49 gd1_photo.fits
+
+
+
+
+

At around 175 KB, it is smaller than some of the other files we’ve been working with.

+

If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_photo.fits
+
+
+
+
+

Summary

+

In this notebook, we used database JOIN operations to select photometry data for the stars we’ve identified as candidates to be in GD-1.

+

In the next notebook, we’ll use this data for a second round of selection, identifying stars that have photometry data consistent with GD-1.

+
+
+

Best practice

+
    +
  • Use JOIN operations to combine data from multiple tables in a databased, using some kind of identifier to match up records from one table with records from another.

  • +
  • This is another example of a practice we saw in the previous notebook, moving the computation to the data.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 4 + Chapter 6 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/06_photo.html b/_build/html/06_photo.html new file mode 100644 index 0000000..4d305be --- /dev/null +++ b/_build/html/06_photo.html @@ -0,0 +1,1184 @@ + + + + + + + + Chapter 6 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + +
+
+ +
+ +
+

Chapter 6

+

This is the sixth in a series of notebooks related to astronomy data.

+

As a continuing example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the previous lesson we downloaded photometry data from Pan-STARRS, which is available from the same server we’ve been using to get Gaia data.

+

The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:

+ +

In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster.

+

By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars.

+
+

Outline

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the data from the previous notebook and make a color-magnitude diagram.

  2. +
  3. Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect.

  4. +
  5. Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas DataFrame.

  6. +
+

After completing this lesson, you should be able to

+
    +
  • Use Matplotlib to specify a Polygon and determine which points fall inside it.

  • +
  • Use Pandas to merge data from multiple DataFrames, much like a database JOIN operation.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia python-wget
+
+
+
+
+
+
+

Reload the data

+

The following cell downloads the photometry data we created in the previous notebook.

+
+
+
import os
+from wget import download
+
+filename = 'gd1_photo.fits'
+filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(filepath+filename))
+
+
+
+
+

Now we can read the data back into an Astropy Table.

+
+
+
from astropy.table import Table
+
+photo_table = Table.read(filename)
+
+
+
+
+
+
+

Plotting photometry data

+

Now that we have photometry data from Pan-STARRS, we can replicate the color-magnitude diagram from the original paper:

+ +

The y-axis shows the apparent magnitude of each source with the g filter.

+

The x-axis shows the difference in apparent magnitude between the g and i filters, which indicates color.

+

Stars with lower values of (g-i) are brighter in g-band than in i-band, compared to other stars, which means they are bluer.

+

Stars in the lower-left quadrant of this diagram are less bright and less metallic than the others, which means they are likely to be older.

+

Since we expect the stars in GD-1 to be older than the background stars, the stars in the lower-left are more likely to be in GD-1.

+
+
+
import matplotlib.pyplot as plt
+
+def plot_cmd(table):
+    """Plot a color magnitude diagram.
+    
+    table: Table or DataFrame with photometry data
+    """
+    y = table['g_mean_psf_mag']
+    x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']
+
+    plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
+
+    plt.xlim([0, 1.5])
+    plt.ylim([14, 22])
+    plt.gca().invert_yaxis()
+
+    plt.ylabel('$g_0$')
+    plt.xlabel('$(g-i)_0$')
+
+
+
+
+

plot_cmd uses a new function, invert_yaxis, to invert the y axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness.

+

invert_yaxis is a little different from the other functions we’ve used. You can’t call it like this:

+
plt.invert_yaxis()          # doesn't work
+
+
+

You have to call it like this:

+
plt.gca().invert_yaxis()          # works
+
+
+

gca stands for “get current axis”. It returns an object that represents the axes of the current figure, and that object provides invert_yaxis.

+

In case anyone asks: The most likely reason for this inconsistency in the interface is that invert_yaxis is a lesser-used function, so it’s not made available at the top level of the interface.

+

Here’s what the results look like.

+
+
+
plot_cmd(photo_table)
+
+
+
+
+_images/06_photo_12_0.png +
+
+

Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don’t have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD-1.

+

The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD-1 or not.

+

As a simplification, we’ll choose a boundary by eye that seems to contain the overdense region.

+
+
+

Drawing a polygon

+

Matplotlib provides a function called ginput that lets us click on the figure and make a list of coordinates.

+

It’s a little tricky to use ginput in a Jupyter notebook.
+Before calling plt.ginput we have to tell Matplotlib to use TkAgg to draw the figure in a new window.

+

When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click.

+
+
+
import matplotlib as mpl
+
+if IN_COLAB:
+    coords = None
+else:
+    mpl.use('TkAgg')
+    plot_cmd(photo_table)
+    coords = plt.ginput(10)
+    mpl.use('agg')
+
+
+
+
+

The argument to ginput is the number of times the user has to click on the figure.

+

The result from ginput is a list of coordinate pairs.

+
+
+
coords
+
+
+
+
+
[(0.2150537634408602, 17.548197203826344),
+ (0.3897849462365591, 18.94628403237675),
+ (0.5376344086021505, 19.902869757174393),
+ (0.7034050179211468, 20.601913171449596),
+ (0.8288530465949819, 21.300956585724798),
+ (0.6630824372759856, 21.52170713760118),
+ (0.4301075268817204, 20.785871964679913),
+ (0.27329749103942647, 19.71891096394408),
+ (0.17473118279569888, 18.688741721854306),
+ (0.17473118279569888, 17.95290654893304)]
+
+
+
+
+

If ginput doesn’t work for you, you could use the following coordinates.

+
+
+
if coords is None:
+    coords = [(0.2, 17.5), 
+              (0.2, 19.5), 
+              (0.65, 22),
+              (0.75, 21),
+              (0.4, 19),
+              (0.4, 17.5)]
+
+
+
+
+

The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of x coordinates and a sequence of y coordinates. The NumPy function transpose does what we want.

+
+
+
import numpy as np
+
+xs, ys = np.transpose(coords)
+xs, ys
+
+
+
+
+
(array([0.21505376, 0.38978495, 0.53763441, 0.70340502, 0.82885305,
+        0.66308244, 0.43010753, 0.27329749, 0.17473118, 0.17473118]),
+ array([17.5481972 , 18.94628403, 19.90286976, 20.60191317, 21.30095659,
+        21.52170714, 20.78587196, 19.71891096, 18.68874172, 17.95290655]))
+
+
+
+
+

To display the polygon, we’ll draw the figure again and use plt.plot to draw the polygon.

+
+
+
plot_cmd(photo_table)
+plt.plot(xs, ys);
+
+
+
+
+_images/06_photo_23_0.png +
+
+

If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again.

+

If you want a polygon with more points (or fewer), you can change the argument to ginput.

+

The polygon does not have to be “closed”. When we use this polygon in the next section, the last and first points will be connected by a straight line.

+
+
+

Which points are in the polygon?

+

Matplotlib provides a Path object that we can use to check which points fall in the polygon we selected.

+

Here’s how we make a Path using a list of coordinates.

+
+
+
from matplotlib.path import Path
+
+path = Path(coords)
+path
+
+
+
+
+
Path(array([[ 0.21505376, 17.5481972 ],
+       [ 0.38978495, 18.94628403],
+       [ 0.53763441, 19.90286976],
+       [ 0.70340502, 20.60191317],
+       [ 0.82885305, 21.30095659],
+       [ 0.66308244, 21.52170714],
+       [ 0.43010753, 20.78587196],
+       [ 0.27329749, 19.71891096],
+       [ 0.17473118, 18.68874172],
+       [ 0.17473118, 17.95290655]]), None)
+
+
+
+
+

Path provides contains_points, which figures out which points are inside the polygon.

+

To test it, we’ll create a list with two points, one inside the polygon and one outside.

+
+
+
points = [(0.4, 20), 
+          (0.4, 30)]
+
+
+
+
+

Now we can make sure contains_points does what we expect.

+
+
+
inside = path.contains_points(points)
+inside
+
+
+
+
+
array([ True, False])
+
+
+
+
+

The result is an array of Boolean values.

+

We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning.

+
+
+

Reloading the data

+

Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it:

+
+
+
import os
+from wget import download
+
+filename = 'gd1_candidates.hdf5'
+filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(filepath+filename))
+
+
+
+
+
+
+
import pandas as pd
+
+candidate_df = pd.read_hdf(filename, 'candidate_df')
+
+
+
+
+

candidate_df is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame.

+
+
+

Merging photometry data

+

Before we select stars based on photometry data, we have to solve two problems:

+
    +
  1. We only have Pan-STARRS data for some stars in candidate_df.

  2. +
  3. Even for the stars where we have Pan-STARRS data in photo_table, some photometry data is missing.

  4. +
+

We will solve these problems in two step:

+
    +
  1. We’ll merge the data from candidate_df and photo_table into a single Pandas DataFrame.

  2. +
  3. We’ll use Pandas functions to deal with missing data.

  4. +
+

candidate_df is already a DataFrame, but results is an Astropy Table. Let’s convert it to Pandas:

+
+
+
photo_df = photo_table.to_pandas()
+
+for colname in photo_df.columns:
+    print(colname)
+
+
+
+
+
source_id
+g_mean_psf_mag
+i_mean_psf_mag
+
+
+
+
+

Now we want to combine candidate_df and photo_df into a single table, using source_id to match up the rows.

+

You might recognize this task; it’s the same as the JOIN operation in ADQL/SQL.

+

Pandas provides a function called merge that does what we want. Here’s how we use it.

+
+
+
merged = pd.merge(candidate_df, 
+                  photo_df, 
+                  on='source_id', 
+                  how='left')
+merged.head()
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2g_mean_psf_magi_mean_psf_mag
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633NaNNaN
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.74877917.897817.517401
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.74180019.287317.678101
3635535454774983040137.83775218.864007-4.335041-14.4923090.3145140.102775NaN-59.785300-1.594569-9.357536-1.21849216.923816.478100
4635497276810313600138.04451619.009471-7.172931-12.2914990.4254040.337689NaN-59.557744-1.682147-9.0008312.33440719.924218.334000
+
+
+

The first argument is the “left” table, the second argument is the “right” table, and the keyword argument on='source_id' specifies a column to use to match up the rows.

+

The argument how='left' means that the result should have all rows from the left table, even if some of them don’t match up with a row in the right table.

+

If you are interested in the other options for how, you can read the documentation of merge.

+

You can also do different types of join in ADQL/SQL; you can read about that here.

+

The result is a DataFrame that contains the same number of rows as candidate_df.

+
+
+
len(candidate_df), len(photo_df), len(merged)
+
+
+
+
+
(7346, 3724, 7346)
+
+
+
+
+

And all columns from both tables.

+
+
+
for colname in merged.columns:
+    print(colname)
+
+
+
+
+
source_id
+ra
+dec
+pmra
+pmdec
+parallax
+parallax_error
+radial_velocity
+phi1
+phi2
+pm_phi1
+pm_phi2
+g_mean_psf_mag
+i_mean_psf_mag
+
+
+
+
+

Detail You might notice that Pandas also provides a function called join; it does almost the same thing, but the interface is slightly different. We think merge is a little easier to use, so that’s what we chose. It’s also more consistent with JOIN in SQL, so if you learn how to use pd.merge, you are also learning how to use SQL JOIN.

+

Also, someone might ask why we have to use Pandas to do this join; why didn’t we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server.

+
+
+

Missing data

+

Let’s add columns to the merged table for magnitude and color.

+
+
+
merged['mag'] = merged['g_mean_psf_mag']
+merged['color'] = merged['g_mean_psf_mag'] - merged['i_mean_psf_mag']
+
+
+
+
+

These columns contain the special value NaN where we are missing data.

+

We can use notnull to see which rows contain value data, that is, not null values.

+
+
+
merged['color'].notnull()
+
+
+
+
+
0       False
+1        True
+2        True
+3        True
+4        True
+        ...  
+7341     True
+7342    False
+7343    False
+7344     True
+7345    False
+Name: color, Length: 7346, dtype: bool
+
+
+
+
+

And sum to count the number of valid values.

+
+
+
merged['color'].notnull().sum()
+
+
+
+
+
3724
+
+
+
+
+

For scientific purposes, it’s not obvious what we should do with candidate stars if we don’t have photometry data. Should we give them the benefit of the doubt or leave them out?

+

In part the answer depends on the goal: are we trying to identify more stars that might be in GD-1, or a smaller set of stars that have higher probability?

+

In the next section, we’ll leave them out, but you can experiment with the alternative.

+
+
+

Selecting based on photometry

+

Now let’s see how many of these points are inside the polygon we chose.

+

We can use a list of column names to select color and mag.

+
+
+
points = merged[['color', 'mag']]
+points.head()
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
colormag
0NaNNaN
10.380417.8978
21.609219.2873
30.445716.9238
41.590219.9242
+
+
+

The result is a DataFrame that can be treated as a sequence of coordinates, so we can pass it to contains_points:

+
+
+
inside = path.contains_points(points)
+inside
+
+
+
+
+
array([False, False, False, ..., False, False, False])
+
+
+
+
+

The result is a Boolean array. We can use sum to see how many stars fall in the polygon.

+
+
+
inside.sum()
+
+
+
+
+
496
+
+
+
+
+

Now we can use inside as a mask to select stars that fall inside the polygon.

+
+
+
selected = merged[inside]
+
+
+
+
+

Let’s make a color-magnitude plot one more time, highlighting the selected stars with green x marks.

+
+
+
plot_cmd(photo_table)
+plt.plot(xs, ys)
+
+plt.plot(selected['color'], selected['mag'], 'gx');
+
+
+
+
+_images/06_photo_61_0.png +
+
+

It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD-1.

+

Finally, we can plot the coordinates of the selected stars:

+
+
+
plt.figure(figsize=(10,2.5))
+
+x = selected['phi1']
+y = selected['phi2']
+
+plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)
+
+plt.xlabel('ra (degree GD1)')
+plt.ylabel('dec (degree GD1)')
+
+plt.axis('equal');
+
+
+
+
+_images/06_photo_63_0.png +
+
+

This example includes two new Matplotlib commands:

+
    +
  • figure creates the figure. In previous examples, we didn’t have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like figsize, which sets the size of the figure.

  • +
  • axis with the parameter equal sets up the axes so a unit is the same size along the x and y axes.

  • +
+

In an example like this, where x and y represent coordinates in space, equal axes ensures that the distance between points is represented accurately.

+
+
+

Write the data

+

Let’s write the merged DataFrame to a file.

+
+
+
filename = 'gd1_merged.hdf5'
+
+merged.to_hdf(filename, 'merged')
+selected.to_hdf(filename, 'selected')
+
+
+
+
+
+
+
!ls -lh gd1_merged.hdf5
+
+
+
+
+
-rw-rw-r-- 1 downey downey 2.0M Oct 19 17:21 gd1_merged.hdf5
+
+
+
+
+

If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_merged.hdf5
+
+
+
+
+

Save the polygon

+

Reproducibile research is “the idea that … the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research.”

+

This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis.

+

However, when we used ginput to define a polygon by hand, we introduced a non-reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline.

+

Since coords is a NumPy array, we can’t use to_hdf to save it in a file. But we can convert it to a Pandas DataFrame and save that.

+

As an alternative, we could use PyTables, which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let’s take advantage of Pandas.

+
+
+
coords_df = pd.DataFrame(coords)
+
+
+
+
+
+
+
filename = 'gd1_polygon.hdf5'
+coords_df.to_hdf(filename, 'coords_df')
+
+
+
+
+

We can read it back like this.

+
+
+
coords2_df = pd.read_hdf(filename, 'coords_df')
+coords2 = coords2_df.to_numpy()
+
+
+
+
+

And verify that the data we read back is the same.

+
+
+
np.all(coords2 == coords)
+
+
+
+
+
True
+
+
+
+
+
+
+

Summary

+

In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan-STARRS.

+

We drew a color-magnitude diagram and used it to identify stars we think are likely to be in GD-1.

+

Then we used a Pandas merge operation to combine the data into a single DataFrame.

+
+
+

Best practices

+
    +
  • If you want to perform something like a database JOIN operation with data that is in a Pandas DataFrame, you can use the join or merge function. In many cases, merge is easier to use because the arguments are more like SQL.

  • +
  • Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes.

  • +
  • Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it’s not just for making figures.

  • +
  • Be sure to record every element of the data analysis pipeline that would be needed to replicate the results.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 5 + Chapter 7 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/07_plot.html b/_build/html/07_plot.html new file mode 100644 index 0000000..85019e6 --- /dev/null +++ b/_build/html/07_plot.html @@ -0,0 +1,1070 @@ + + + + + + + + Chapter 7 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Chapter 7

+

This is the seventh in a series of notebooks related to astronomy data.

+

As a continuing example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the previous notebook we selected photometry data from Pan-STARRS and used it to identify stars we think are likely to be in GD-1

+

In this notebook, we’ll take the results from previous lessons and use them to make a figure that tells a compelling scientific story.

+
+

Outline

+

Here are the steps in this notebook:

+
    +
  1. Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly.

  2. +
  3. The we’ll see several ways to customize figures to make them more appealing and effective.

  4. +
  5. Finally, we’ll see how to make a figure with multiple panels or subplots.

  6. +
+

After completing this lesson, you should be able to

+
    +
  • Design a figure that tells a compelling story.

  • +
  • Use Matplotlib features to customize the appearance of figures.

  • +
  • Generate a figure with multiple subplots.

  • +
+
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia python-wget
+
+
+
+
+
+
+

Making Figures That Tell a Story

+

So far the figure we’ve made have been “quick and dirty”. Mostly we have used Matplotlib’s default style, although we have adjusted a few parameters, like markersize and alpha, to improve legibility.

+

Now that the analysis is done, it’s time to think more about:

+
    +
  1. Making professional-looking figures that are ready for publication, and

  2. +
  3. Making figures that communicate a scientific result clearly and compellingly.

  4. +
+

Not necessarily in that order.

+

Let’s start by reviewing Figure 1 from the original paper. We’ve seen the individual panels, but now let’s look at the whole thing, along with the caption:

+

Exercise: Think about the following questions:

+
    +
  1. What is the primary scientific result of this work?

  2. +
  3. What story is this figure telling?

  4. +
  5. In the design of this figure, can you identify 1-2 choices the authors made that you think are effective? Think about big-picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface.

  6. +
  7. Can you identify 1-2 elements that could be improved, or that you might have done differently?

  8. +
+

Some topics that might come up in this discussion:

+
    +
  1. The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD-1 in “unprecedented detail”.

  2. +
  3. The figure documents the selection process as a sequence of steps. Reading right-to-left, top-to-bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result.

  4. +
  5. It’s mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned.

  6. +
  7. Since the panels represent a sequence, it might be better to arrange them left-to-right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left).

  8. +
+
+
+

Plotting GD-1

+

Let’s start with the panel in the lower left. The following cell reloads the data.

+
+
+
import os
+from wget import download
+
+filename = 'gd1_merged.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+
+
+
import pandas as pd
+
+selected = pd.read_hdf(filename, 'selected')
+
+
+
+
+
+
+
import matplotlib.pyplot as plt
+
+def plot_second_selection(df):
+    x = df['phi1']
+    y = df['phi2']
+
+    plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)
+
+    plt.xlabel('$\phi_1$ [deg]')
+    plt.ylabel('$\phi_2$ [deg]')
+    plt.title('Proper motion + photometry selection', fontsize='medium')
+
+    plt.axis('equal')
+
+
+
+
+

And here’s what it looks like.

+
+
+
plt.figure(figsize=(10,2.5))
+plot_second_selection(selected)
+
+
+
+
+_images/07_plot_13_0.png +
+
+
+
+

Annotations

+

The figure in the paper uses three other features to present the results more clearly and compellingly:

+
    +
  • A vertical dashed line to distinguish the previously undetected region of GD-1,

  • +
  • A label that identifies the new region, and

  • +
  • Several annotations that combine text and arrows to identify features of GD-1.

  • +
+

As an exercise, choose any or all of these features and add them to the figure:

+
    +
  • To draw vertical lines, see plt.vlines and plt.axvline.

  • +
  • To add text, see plt.text.

  • +
  • To add an annotation with text and an arrow, see plt.annotate.

  • +
+

And here is some additional information about text and arrows.

+
+
+
# Solution
+
+# plt.axvline(-55, ls='--', color='gray', 
+#             alpha=0.4, dashes=(6,4), lw=2)
+# plt.text(-60, 5.5, 'Previously\nundetected', 
+#          fontsize='small', ha='right', va='top');
+
+# arrowprops=dict(color='gray', shrink=0.05, width=1.5, 
+#                 headwidth=6, headlength=8, alpha=0.4)
+
+# plt.annotate('Spur', xy=(-33, 2), xytext=(-35, 5.5),
+#              arrowprops=arrowprops,
+#              fontsize='small')
+
+# plt.annotate('Gap', xy=(-22, -1), xytext=(-25, -5.5),
+#              arrowprops=arrowprops,
+#              fontsize='small')
+
+
+
+
+
+
+

Customization

+

Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties.

+

There are several ways to override these defaults and customize your figures:

+
    +
  • To customize only the current figure, you can call functions like tick_params, which we’ll demonstrate below.

  • +
  • To customize all figures in a notebook, you use rcParams.

  • +
  • To override more than a few defaults at the same time, you can use a style sheet.

  • +
+

As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes.

+

To change this behavior, you can use gca() to get the current axes and tick_params to change the settings.

+

Here’s how you can put the ticks on the inside of the figure:

+
plt.gca().tick_params(direction='in')
+
+
+

Exercise: Read the documentation of tick_params and use it to put ticks on the top and right sides of the axes.

+
+
+
# Solution
+
+# plt.gca().tick_params(top=True, right=True)
+
+
+
+
+
+
+

rcParams

+

If you want to make a customization that applies to all figures in a notebook, you can use rcParams.

+

Here’s an example that reads the current font size from rcParams:

+
+
+
plt.rcParams['font.size']
+
+
+
+
+
10.0
+
+
+
+
+

And sets it to a new value:

+
+
+
plt.rcParams['font.size'] = 14
+
+
+
+
+

Exercise: Plot the previous figure again, and see what font sizes have changed. Look up any other element of rcParams, change its value, and check the effect on the figure.

+

If you find yourself making the same customizations in several notebooks, you can put changes to rcParams in a matplotlibrc file, which you can read about here.

+
+
+

Style sheets

+

The matplotlibrc file is read when you import Matplotlib, so it is not easy to switch from one set of options to another.

+

The solution to this problem is style sheets, which you can read about here.

+

Matplotlib provides a set of predefined style sheets, or you can make your own.

+

The following cell displays a list of style sheets installed on your system.

+
+
+
plt.style.available
+
+
+
+
+
['Solarize_Light2',
+ '_classic_test_patch',
+ 'bmh',
+ 'classic',
+ 'dark_background',
+ 'fast',
+ 'fivethirtyeight',
+ 'ggplot',
+ 'grayscale',
+ 'seaborn',
+ 'seaborn-bright',
+ 'seaborn-colorblind',
+ 'seaborn-dark',
+ 'seaborn-dark-palette',
+ 'seaborn-darkgrid',
+ 'seaborn-deep',
+ 'seaborn-muted',
+ 'seaborn-notebook',
+ 'seaborn-paper',
+ 'seaborn-pastel',
+ 'seaborn-poster',
+ 'seaborn-talk',
+ 'seaborn-ticks',
+ 'seaborn-white',
+ 'seaborn-whitegrid',
+ 'tableau-colorblind10']
+
+
+
+
+

Note that seaborn-paper, seaborn-talk and seaborn-poster are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters.

+

To use any of these style sheets, run plt.style.use like this:

+
plt.style.use('fivethirtyeight')
+
+
+

The style sheet you choose will affect the appearance of all figures you plot after calling use, unless you override any of the options or call use again.

+

Exercise: Choose one of the styles on the list and select it by calling use. Then go back and plot one of the figures above and see what effect it has.

+

If you can’t find a style sheet that’s exactly what you want, you can make your own. This repository includes a style sheet called az-paper-twocol.mplstyle, with customizations chosen by Azalee Bostroem for publication in astronomy journals.

+

The following cell downloads the style sheet.

+
+
+
import os
+
+filename = 'az-paper-twocol.mplstyle'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+

You can use it like this:

+
plt.style.use('./az-paper-twocol.mplstyle')
+
+
+

The prefix ./ tells Matplotlib to look for the file in the current directory.

+

As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command:

+
import matplotlib as mpl
+
+mpl.get_configdir()
+
+
+
+
+

LaTeX fonts

+

When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses mathtext to typeset them. mathtext uses the same syntax as LaTeX, but it provides only a subset of its features.

+

If you need features that are not provided by mathtext, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX.

+

In matplotlibrc or in a style sheet, you can add the following line:

+
text.usetex        : true
+
+
+

Or in a notebook you can run the following code.

+
plt.rcParams['text.usetex'] = True
+
+
+
+
+
plt.rcParams['text.usetex'] = True
+
+
+
+
+

If you go back and draw the figure again, you should see the difference.

+

If you get an error message like

+
LaTeX Error: File `type1cm.sty' not found.
+
+
+

You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages texlive-latex-extra or cm-super might be what you need. See here for more help with this.

+

In case you are curious, cm stands for Computer Modern, the font LaTeX uses to typeset math.

+
+
+

Multiple panels

+

So far we’ve been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as “subplots”.

+

Confusingly, Matplotlib provides three functions for making figures like this: subplot, subplots, and subplot2grid.

+
    +
  • subplot is simple and similar to MATLAB, so if you are familiar with that interface, you might like subplot

  • +
  • subplots is more object-oriented, which some people prefer.

  • +
  • subplot2grid is most convenient if you want to control the relative sizes of the subplots.

  • +
+

So we’ll use subplot2grid.

+

All of these functions are easier to use if we put the code that generates each panel in a function.

+
+
+

Upper right

+

To make the panel in the upper right, we have to reload centerline.

+
+
+
import os
+
+filename = 'gd1_dataframe.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+
+
+
import pandas as pd
+
+centerline = pd.read_hdf(filename, 'centerline')
+
+
+
+
+

And define the coordinates of the rectangle we selected.

+
+
+
pm1_min = -8.9
+pm1_max = -6.9
+pm2_min = -2.2
+pm2_max =  1.0
+
+pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max]
+pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min]
+
+
+
+
+

To plot this rectangle, we’ll use a feature we have not seen before: Polygon, which is provided by Matplotlib.

+

To create a Polygon, we have to put the coordinates in an array with x values in the first column and y values in the second column.

+
+
+
import numpy as np
+
+vertices = np.transpose([pm1_rect, pm2_rect])
+vertices
+
+
+
+
+
array([[-8.9, -2.2],
+       [-8.9,  1. ],
+       [-6.9,  1. ],
+       [-6.9, -2.2]])
+
+
+
+
+

The following function takes a DataFrame as a parameter, plots the proper motion for each star, and adds a shaded Polygon to show the region we selected.

+
+
+
from matplotlib.patches import Polygon
+
+def plot_proper_motion(df):
+    pm1 = df['pm_phi1']
+    pm2 = df['pm_phi2']
+
+    plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
+    
+    poly = Polygon(vertices, closed=True, 
+                   facecolor='C1', alpha=0.4)
+    plt.gca().add_patch(poly)
+    
+    plt.xlabel('$\mu_{\phi_1} [\mathrm{mas~yr}^{-1}]$')
+    plt.ylabel('$\mu_{\phi_2} [\mathrm{mas~yr}^{-1}]$')
+
+    plt.xlim(-12, 8)
+    plt.ylim(-10, 10)
+
+
+
+
+

Notice that add_patch is like invert_yaxis; in order to call it, we have to use gca to get the current axes.

+

Here’s what the new version of the figure looks like. We’ve changed the labels on the axes to be consistent with the paper.

+
+
+
plt.rcParams['text.usetex'] = False
+plt.style.use('default')
+
+plot_proper_motion(centerline)
+
+
+
+
+_images/07_plot_50_0.png +
+
+
+
+

Upper left

+

Now let’s work on the panel in the upper left. We have to reload candidates.

+
+
+
import os
+
+filename = 'gd1_candidates.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+
+
+
import pandas as pd
+
+filename = 'gd1_candidates.hdf5'
+
+candidate_df = pd.read_hdf(filename, 'candidate_df')
+
+
+
+
+

Here’s a function that takes a DataFrame of candidate stars and plots their positions in GD-1 coordindates.

+
+
+
def plot_first_selection(df):
+    x = df['phi1']
+    y = df['phi2']
+
+    plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
+
+    plt.xlabel('$\phi_1$ [deg]')
+    plt.ylabel('$\phi_2$ [deg]')
+    plt.title('Proper motion selection', fontsize='medium')
+
+    plt.axis('equal')
+
+
+
+
+

And here’s what it looks like.

+
+
+
plot_first_selection(candidate_df)
+
+
+
+
+_images/07_plot_57_0.png +
+
+
+
+

Lower right

+

For the figure in the lower right, we need to reload the merged DataFrame, which contains data from Gaia and photometry data from Pan-STARRS.

+
+
+
import pandas as pd
+
+filename = 'gd1_merged.hdf5'
+
+merged = pd.read_hdf(filename, 'merged')
+
+
+
+
+

From the previous notebook, here’s the function that plots the color-magnitude diagram.

+
+
+
import matplotlib.pyplot as plt
+
+def plot_cmd(table):
+    """Plot a color magnitude diagram.
+    
+    table: Table or DataFrame with photometry data
+    """
+    y = table['g_mean_psf_mag']
+    x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']
+
+    plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
+
+    plt.xlim([0, 1.5])
+    plt.ylim([14, 22])
+    plt.gca().invert_yaxis()
+
+    plt.ylabel('$g_0$')
+    plt.xlabel('$(g-i)_0$')
+
+
+
+
+

And here’s what it looks like.

+
+
+
plot_cmd(merged)
+
+
+
+
+_images/07_plot_63_0.png +
+
+

Exercise: Add a few lines to plot_cmd to show the Polygon we selected as a shaded area.

+

Run these cells to get the polygon coordinates we saved in the previous notebook.

+
+
+
import os
+
+filename = 'gd1_polygon.hdf5'
+path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
+
+if not os.path.exists(filename):
+    print(download(path+filename))
+
+
+
+
+
+
+
coords_df = pd.read_hdf(filename, 'coords_df')
+coords = coords_df.to_numpy()
+coords
+
+
+
+
+
array([[ 0.21505376, 17.5481972 ],
+       [ 0.38978495, 18.94628403],
+       [ 0.53763441, 19.90286976],
+       [ 0.70340502, 20.60191317],
+       [ 0.82885305, 21.30095659],
+       [ 0.66308244, 21.52170714],
+       [ 0.43010753, 20.78587196],
+       [ 0.27329749, 19.71891096],
+       [ 0.17473118, 18.68874172],
+       [ 0.17473118, 17.95290655]])
+
+
+
+
+
+
+
# Solution
+
+#poly = Polygon(coords, closed=True, 
+#               facecolor='C1', alpha=0.4)
+#plt.gca().add_patch(poly)
+
+
+
+
+
+
+

Subplots

+

Now we’re ready to put it all together. To make a figure with four subplots, we’ll use subplot2grid, which requires two arguments:

+
    +
  • shape, which is a tuple with the number of rows and columns in the grid, and

  • +
  • loc, which is a tuple identifying the location in the grid we’re about to fill.

  • +
+

In this example, shape is (2, 2) to create two rows and two columns.

+

For the first panel, loc is (0, 0), which indicates row 0 and column 0, which is the upper-left panel.

+

Here’s how we use it to draw the four panels.

+
+
+
shape = (2, 2)
+plt.subplot2grid(shape, (0, 0))
+plot_first_selection(candidate_df)
+
+plt.subplot2grid(shape, (0, 1))
+plot_proper_motion(centerline)
+
+plt.subplot2grid(shape, (1, 0))
+plot_second_selection(selected)
+
+plt.subplot2grid(shape, (1, 1))
+plot_cmd(merged)
+poly = Polygon(coords, closed=True, 
+               facecolor='C1', alpha=0.4)
+plt.gca().add_patch(poly)
+
+plt.tight_layout()
+
+
+
+
+_images/07_plot_69_0.png +
+
+

We use plt.tight_layout at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don’t overlap.

+

Exercise: See what happens if you leave out tight_layout.

+
+
+

Adjusting proportions

+

In the previous figure, the panels are all the same size. To get a better view of GD-1, we’d like to stretch the panels on the left and compress the ones on the right.

+

To do that, we’ll use the colspan argument to make a panel that spans multiple columns in the grid.

+

In the following example, shape is (2, 4), which means 2 rows and 4 columns.

+

The panels on the left span three columns, so they are three times wider than the panels on the right.

+

At the same time, we use figsize to adjust the aspect ratio of the whole figure.

+
+
+
plt.figure(figsize=(9, 4.5))
+
+shape = (2, 4)
+plt.subplot2grid(shape, (0, 0), colspan=3)
+plot_first_selection(candidate_df)
+
+plt.subplot2grid(shape, (0, 3))
+plot_proper_motion(centerline)
+
+plt.subplot2grid(shape, (1, 0), colspan=3)
+plot_second_selection(selected)
+
+plt.subplot2grid(shape, (1, 3))
+plot_cmd(merged)
+poly = Polygon(coords, closed=True, 
+               facecolor='C1', alpha=0.4)
+plt.gca().add_patch(poly)
+
+plt.tight_layout()
+
+
+
+
+_images/07_plot_72_0.png +
+
+

This is looking more and more like the figure in the paper.

+

Exercise: In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2?

+
+
+

Summary

+

In this notebook, we reverse-engineered the figure we’ve been replicating, identifying elements that seem effective and others that could be improved.

+

We explored features Matplotlib provides for adding annotations to figures – including text, lines, arrows, and polygons – and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels.

+
+
+

Best practices

+
    +
  • The most effective figures focus on telling a single story clearly and compellingly.

  • +
  • Consider using annotations to guide the readers attention to the most important elements of a figure.

  • +
  • The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults.

  • +
  • If you find yourself making the same customizations on several projects, you might want to create your own style sheet.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 6 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/01_query.html b/_build/html/AstronomicalData/01_query.html new file mode 100644 index 0000000..eadda39 --- /dev/null +++ b/_build/html/AstronomicalData/01_query.html @@ -0,0 +1,1403 @@ + + + + + + + + Lesson 1 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Lesson 1

+
+

Introduction

+

This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

As the abstract explains, “Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.”

+

GD-1 is a stellar stream, which is “an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.”

+

This article in Science magazine explains some of the background, including the process that led to the paper and an discussion of the scientific implications:

+
    +
  • “The streams are particularly useful for … galactic archaeology — rewinding the cosmic clock to reconstruct the assembly of the Milky Way.”

  • +
  • “They also are being used as exquisitely sensitive scales to measure the galaxy’s mass.”

  • +
  • “… the streams are well-positioned to reveal the presence of dark matter … because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.”

  • +
+
+
+

Prerequisites

+

This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.

+

We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don’t assume you have any prior experience with databases.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+
+
+

Data

+

The datasets we will work with are:

+
    +
  • Gaia, which is “a space observatory of the European Space Agency (ESA), launched in 2013 … designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision”, and

  • +
  • Pan-STARRS, The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.

  • +
+

Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +One of the goals of this workshop is to provide tools for working with large datasets.

+
+
+

Lesson 1

+

The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:

+
    +
  1. First we’ll make a connection to the Gaia server,

  2. +
  3. We will explore information about the database and the tables it contains,

  4. +
  5. We will write a query and send it to the server, and finally

  6. +
  7. We will download the response from the server.

  8. +
+

After completing this lesson, you should be able to

+
    +
  • Compose a basic query in ADQL.

  • +
  • Use queries to explore a database and its tables.

  • +
  • Use queries to download data.

  • +
  • Develop, test, and debug a query incrementally.

  • +
+
+
+

Query Language

+

In order to select data from a database, you have to compose a query, which is like a program written in a “query language”. +The query language we’ll use is ADQL, which stands for “Astronomical Data Query Language”.

+

ADQL is a dialect of SQL (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.

+

The reference manual for ADQL is here. +But you might find it easier to learn from this ADQL Cookbook.

+
+
+

Installing libraries

+

The library we’ll use to get Gaia data is Astroquery.

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+
+
+

Connecting to Gaia

+

Astroquery provides Gaia, which is an object that represents a connection to the Gaia database.

+

We can connect to the Gaia database like this:

+
+
+
from astroquery.gaia import Gaia
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
+
+
+

Optional detail

+
+

Running this import statement has the effect of creating a TAP+ connection; TAP stands for “Table Access Protocol”. It is a network protocol for sending queries to the database and getting back the results. We’re not sure why it seems to create two connections.

+
+
+
+
+

Databases and Tables

+

What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:

+
    +
  • A database is a collection of one or more named tables.

  • +
  • Each table is a 2-D array with one or more named columns of data.

  • +
+

We can use Gaia.load_tables to get the names of the tables in the Gaia database. With the option only_names=True, it loads information about the tables, called the “metadata”, not the data itself.

+
+
+
tables = Gaia.load_tables(only_names=True)
+
+
+
+
+
INFO: Retrieving tables... [astroquery.utils.tap.core]
+INFO: Parsing tables... [astroquery.utils.tap.core]
+INFO: Done. [astroquery.utils.tap.core]
+
+
+
+
+
+
+
for table in (tables):
+    print(table.get_qualified_name())
+
+
+
+
+
external.external.apassdr9
+external.external.gaiadr2_geometric_distance
+external.external.galex_ais
+external.external.ravedr5_com
+external.external.ravedr5_dr5
+external.external.ravedr5_gra
+external.external.ravedr5_on
+external.external.sdssdr13_photoprimary
+external.external.skymapperdr1_master
+external.external.tmass_xsc
+public.public.hipparcos
+public.public.hipparcos_newreduction
+public.public.hubble_sc
+public.public.igsl_source
+public.public.igsl_source_catalog_ids
+public.public.tycho2
+public.public.dual
+tap_config.tap_config.coord_sys
+tap_config.tap_config.properties
+tap_schema.tap_schema.columns
+tap_schema.tap_schema.key_columns
+tap_schema.tap_schema.keys
+tap_schema.tap_schema.schemas
+tap_schema.tap_schema.tables
+gaiadr1.gaiadr1.aux_qso_icrf2_match
+gaiadr1.gaiadr1.ext_phot_zero_point
+gaiadr1.gaiadr1.allwise_best_neighbour
+gaiadr1.gaiadr1.allwise_neighbourhood
+gaiadr1.gaiadr1.gsc23_best_neighbour
+gaiadr1.gaiadr1.gsc23_neighbourhood
+gaiadr1.gaiadr1.ppmxl_best_neighbour
+gaiadr1.gaiadr1.ppmxl_neighbourhood
+gaiadr1.gaiadr1.sdss_dr9_best_neighbour
+gaiadr1.gaiadr1.sdss_dr9_neighbourhood
+gaiadr1.gaiadr1.tmass_best_neighbour
+gaiadr1.gaiadr1.tmass_neighbourhood
+gaiadr1.gaiadr1.ucac4_best_neighbour
+gaiadr1.gaiadr1.ucac4_neighbourhood
+gaiadr1.gaiadr1.urat1_best_neighbour
+gaiadr1.gaiadr1.urat1_neighbourhood
+gaiadr1.gaiadr1.cepheid
+gaiadr1.gaiadr1.phot_variable_time_series_gfov
+gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters
+gaiadr1.gaiadr1.rrlyrae
+gaiadr1.gaiadr1.variable_summary
+gaiadr1.gaiadr1.allwise_original_valid
+gaiadr1.gaiadr1.gsc23_original_valid
+gaiadr1.gaiadr1.ppmxl_original_valid
+gaiadr1.gaiadr1.sdssdr9_original_valid
+gaiadr1.gaiadr1.tmass_original_valid
+gaiadr1.gaiadr1.ucac4_original_valid
+gaiadr1.gaiadr1.urat1_original_valid
+gaiadr1.gaiadr1.gaia_source
+gaiadr1.gaiadr1.tgas_source
+gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id
+gaiadr2.gaiadr2.aux_iers_gdr2_cross_id
+gaiadr2.gaiadr2.aux_sso_orbit_residuals
+gaiadr2.gaiadr2.aux_sso_orbits
+gaiadr2.gaiadr2.dr1_neighbourhood
+gaiadr2.gaiadr2.allwise_best_neighbour
+gaiadr2.gaiadr2.allwise_neighbourhood
+gaiadr2.gaiadr2.apassdr9_best_neighbour
+gaiadr2.gaiadr2.apassdr9_neighbourhood
+gaiadr2.gaiadr2.gsc23_best_neighbour
+gaiadr2.gaiadr2.gsc23_neighbourhood
+gaiadr2.gaiadr2.hipparcos2_best_neighbour
+gaiadr2.gaiadr2.hipparcos2_neighbourhood
+gaiadr2.gaiadr2.panstarrs1_best_neighbour
+gaiadr2.gaiadr2.panstarrs1_neighbourhood
+gaiadr2.gaiadr2.ppmxl_best_neighbour
+gaiadr2.gaiadr2.ppmxl_neighbourhood
+gaiadr2.gaiadr2.ravedr5_best_neighbour
+gaiadr2.gaiadr2.ravedr5_neighbourhood
+gaiadr2.gaiadr2.sdssdr9_best_neighbour
+gaiadr2.gaiadr2.sdssdr9_neighbourhood
+gaiadr2.gaiadr2.tmass_best_neighbour
+gaiadr2.gaiadr2.tmass_neighbourhood
+gaiadr2.gaiadr2.tycho2_best_neighbour
+gaiadr2.gaiadr2.tycho2_neighbourhood
+gaiadr2.gaiadr2.urat1_best_neighbour
+gaiadr2.gaiadr2.urat1_neighbourhood
+gaiadr2.gaiadr2.sso_observation
+gaiadr2.gaiadr2.sso_source
+gaiadr2.gaiadr2.vari_cepheid
+gaiadr2.gaiadr2.vari_classifier_class_definition
+gaiadr2.gaiadr2.vari_classifier_definition
+gaiadr2.gaiadr2.vari_classifier_result
+gaiadr2.gaiadr2.vari_long_period_variable
+gaiadr2.gaiadr2.vari_rotation_modulation
+gaiadr2.gaiadr2.vari_rrlyrae
+gaiadr2.gaiadr2.vari_short_timescale
+gaiadr2.gaiadr2.vari_time_series_statistics
+gaiadr2.gaiadr2.panstarrs1_original_valid
+gaiadr2.gaiadr2.gaia_source
+gaiadr2.gaiadr2.ruwe
+
+
+
+
+

So that’s a lot of tables. The ones we’ll use are:

+
    +
  • gaiadr2.gaia_source, which contains Gaia data from data release 2,

  • +
  • gaiadr2.panstarrs1_original_valid, which contains the photometry data we’ll use from PanSTARRS, and

  • +
  • gaiadr2.panstarrs1_best_neighbour, which we’ll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.

  • +
+

We can use load_table (not load_tables) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata.

+
+
+
meta = Gaia.load_table('gaiadr2.gaia_source')
+meta
+
+
+
+
+
Retrieving table 'gaiadr2.gaia_source'
+Parsing table 'gaiadr2.gaia_source'...
+Done.
+
+
+
<astroquery.utils.tap.model.taptable.TapTableMeta at 0x7f922376e0a0>
+
+
+
+
+

Jupyter shows that the result is an object of type TapTableMeta, but it does not display the contents.

+

To see the metadata, we have to print the object.

+
+
+
print(meta)
+
+
+
+
+
TAP Table name: gaiadr2.gaiadr2.gaia_source
+Description: This table has an entry for every Gaia observed source as listed in the
+Main Database accumulating catalogue version from which the catalogue
+release has been generated. It contains the basic source parameters,
+that is only final data (no epoch data) and no spectra (neither final
+nor epoch).
+Num. columns: 96
+
+
+
+
+

Notice one gotcha: in the list of table names, this table appears as gaiadr2.gaiadr2.gaia_source, but when we load the metadata, we refer to it as gaiadr2.gaia_source.

+

Exercise: Go back and try

+
meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')
+
+
+

What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?

+
+
+

Columns

+

The following loop prints the names of the columns in the table.

+
+
+
for column in meta.columns:
+    print(column.name)
+
+
+
+
+
solution_id
+designation
+source_id
+random_index
+ref_epoch
+ra
+ra_error
+dec
+dec_error
+parallax
+parallax_error
+parallax_over_error
+pmra
+pmra_error
+pmdec
+pmdec_error
+ra_dec_corr
+ra_parallax_corr
+ra_pmra_corr
+ra_pmdec_corr
+dec_parallax_corr
+dec_pmra_corr
+dec_pmdec_corr
+parallax_pmra_corr
+parallax_pmdec_corr
+pmra_pmdec_corr
+astrometric_n_obs_al
+astrometric_n_obs_ac
+astrometric_n_good_obs_al
+astrometric_n_bad_obs_al
+astrometric_gof_al
+astrometric_chi2_al
+astrometric_excess_noise
+astrometric_excess_noise_sig
+astrometric_params_solved
+astrometric_primary_flag
+astrometric_weight_al
+astrometric_pseudo_colour
+astrometric_pseudo_colour_error
+mean_varpi_factor_al
+astrometric_matched_observations
+visibility_periods_used
+astrometric_sigma5d_max
+frame_rotator_object_type
+matched_observations
+duplicated_source
+phot_g_n_obs
+phot_g_mean_flux
+phot_g_mean_flux_error
+phot_g_mean_flux_over_error
+phot_g_mean_mag
+phot_bp_n_obs
+phot_bp_mean_flux
+phot_bp_mean_flux_error
+phot_bp_mean_flux_over_error
+phot_bp_mean_mag
+phot_rp_n_obs
+phot_rp_mean_flux
+phot_rp_mean_flux_error
+phot_rp_mean_flux_over_error
+phot_rp_mean_mag
+phot_bp_rp_excess_factor
+phot_proc_mode
+bp_rp
+bp_g
+g_rp
+radial_velocity
+radial_velocity_error
+rv_nb_transits
+rv_template_teff
+rv_template_logg
+rv_template_fe_h
+phot_variable_flag
+l
+b
+ecl_lon
+ecl_lat
+priam_flags
+teff_val
+teff_percentile_lower
+teff_percentile_upper
+a_g_val
+a_g_percentile_lower
+a_g_percentile_upper
+e_bp_min_rp_val
+e_bp_min_rp_percentile_lower
+e_bp_min_rp_percentile_upper
+flame_flags
+radius_val
+radius_percentile_lower
+radius_percentile_upper
+lum_val
+lum_percentile_lower
+lum_percentile_upper
+datalink_url
+epoch_photometry_url
+
+
+
+
+

You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +To find out what the columns mean, read the documentation.

+

If you want to know what can go wrong when you don’t read the documentation, you might like this article.

+

Exercise: One of the other tables we’ll use is gaiadr2.gaiadr2.panstarrs1_original_valid. Use load_table to get the metadata for this table. How many columns are there and what are their names?

+

Hint: Remember the gotcha we mentioned earlier.

+
+
+
# Solution
+
+meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')
+print(meta2)
+
+
+
+
+
Retrieving table 'gaiadr2.panstarrs1_original_valid'
+Parsing table 'gaiadr2.panstarrs1_original_valid'...
+Done.
+TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid
+Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is
+a system for wide-field astronomical imaging developed and operated by
+the Institute for Astronomy at the University of Hawaii. Pan-STARRS1
+(PS1) is the first part of Pan-STARRS to be completed and is the basis
+for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and
+its 1.4 Gigapixel camera to image the sky in five broadband filters (g,
+r, i, z, y).
+
+The current table contains a filtered subsample of the 10 723 304 629
+entries listed in the original ObjectThin table.
+We used only ObjectThin and MeanObject tables to extract
+panstarrs1OriginalValid table, this means that objects detected only in
+stack images are not included here. The main reason for us to avoid the
+use of objects detected in stack images is that their astrometry is not
+as good as the mean objects astrometry: “The stack positions (raStack,
+decStack) have considerably larger systematic astrometric errors than
+the mean epoch positions (raMean, decMean).” The astrometry for the
+MeanObject positions uses Gaia DR1 as a reference catalog, while the
+stack positions use 2MASS as a reference catalog.
+
+In details, we filtered out all objects where:
+
+-   nDetections = 1
+
+-   no good quality data in Pan-STARRS, objInfoFlag 33554432 not set
+
+-   mean astrometry could not be measured, objInfoFlag 524288 set
+
+-   stack position used for mean astrometry, objInfoFlag 1048576 set
+
+-   error on all magnitudes equal to 0 or to -999;
+
+-   all magnitudes set to -999;
+
+-   error on RA or DEC greater than 1 arcsec.
+
+The number of objects in panstarrs1OriginalValid is 2 264 263 282.
+
+The panstarrs1OriginalValid table contains only a subset of the columns
+available in the combined ObjectThin and MeanObject tables. A
+description of the original ObjectThin and MeanObjects tables can be
+found at:
+https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables
+
+Download:
+http://mastweb.stsci.edu/ps1casjobs/home.aspx
+Documentation:
+https://outerspace.stsci.edu/display/PANSTARRS
+http://pswww.ifa.hawaii.edu/pswww/
+References:
+The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560
+Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,
+arXiv:1612.05240
+Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.
+Z., et al. 2016, arXiv:1612.05245
+Pan-STARRS Pixel Analysis: Source Detection and Characterization,
+Magnier, E. A., et al. 2016, arXiv:1612.05244
+Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et
+al. 2016, arXiv:1612.05242
+The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.
+2016, arXiv:1612.05243
+
+Catalogue curator:
+SSDC - ASI Space Science Data Center
+https://www.ssdc.asi.it/
+Num. columns: 26
+
+
+
+
+
+
+
# Solution
+
+for column in meta2.columns:
+    print(column.name)
+
+
+
+
+
obj_name
+obj_id
+ra
+dec
+ra_error
+dec_error
+epoch_mean
+g_mean_psf_mag
+g_mean_psf_mag_error
+g_flags
+r_mean_psf_mag
+r_mean_psf_mag_error
+r_flags
+i_mean_psf_mag
+i_mean_psf_mag_error
+i_flags
+z_mean_psf_mag
+z_mean_psf_mag_error
+z_flags
+y_mean_psf_mag
+y_mean_psf_mag_error
+y_flags
+n_detections
+zone_id
+obj_info_flag
+quality_flag
+
+
+
+
+
+
+

Writing queries

+

By now you might be wondering how we actually download the data. With tables this big, you generally don’t. Instead, you use queries to select only the data you want.

+

A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.

+

Here’s an example of an ADQL query.

+
+
+
query1 = """SELECT 
+TOP 10
+source_id, ref_epoch, ra, dec, parallax 
+FROM gaiadr2.gaia_source"""
+
+
+
+
+

Python note: We use a triple-quoted string here so we can include line breaks in the query, which makes it easier to read.

+

The words in uppercase are ADQL keywords:

+
    +
  • SELECT indicates that we are selecting data (as opposed to adding or modifying data).

  • +
  • TOP indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.

  • +
  • FROM specifies which table we want data from.

  • +
+

The third line is a list of column names, indicating which columns we want.

+

In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive.

+

To run this query, we use the Gaia object, which represents our connection to the Gaia database, and invoke launch_job:

+
+
+
job1 = Gaia.launch_job(query1)
+job1
+
+
+
+
+
<astroquery.utils.tap.model.job.Job at 0x7f9222e9cb20>
+
+
+
+
+

The result is an object that represents the job running on a Gaia server.

+

If you print it, it displays metadata for the forthcoming table.

+
+
+
print(job1)
+
+
+
+
+
<Table length=10>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090721.xml.gz
+Results: None
+
+
+
+
+

Don’t worry about Results: None. That does not actually mean there are no results.

+

However, Phase: COMPLETED indicates that the job is complete, so we can get the results like this:

+
+
+
results1 = job1.get_results()
+type(results1)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+

Optional detail: Why is table repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It’s like the Linnean name for gorilla, which is Gorilla Gorilla Gorilla.

+

The result is an Astropy Table, which is similar to a table in an SQL database except:

+
    +
  • SQL databases are stored on disk drives, so they are persistent; that is, they “survive” even if you turn off the computer. An Astropy Table is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).

  • +
  • SQL databases are designed to process queries. An Astropy Table can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.

  • +
+

Jupyter knows how to display the contents of a Table.

+
+
+
results1
+
+
+
+
+
Table length=10 + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
+
+

Each column has a name, units, and a data type.

+

For example, the units of ra and dec are degrees, and their data type is float64, which is a 64-bit floating-point number, used to store measurements with a fraction part.

+

This information comes from the Gaia database, and has been stored in the Astropy Table by Astroquery.

+

Exercise: Read the documentation of this table and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?

+
+
+

Asynchronous queries

+

launch_job asks the server to run the job “synchronously”, which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run “asynchronously”, which mean they might take longer to get started.

+

If you are not sure how many rows a query will return, you can use the SQL command COUNT to find out how many rows are in the result without actually returning them. We’ll see an example of this later.

+

The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.

+

For anonymous users, files are kept for three days.

+

As an example, let’s try a query that’s similar to query1, with two changes:

+
    +
  • It selects the first 3000 rows, so it is bigger than we should run synchronously.

  • +
  • It uses a new keyword, WHERE.

  • +
+
+
+
query2 = """SELECT TOP 3000
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+"""
+
+
+
+
+

A WHERE clause indicates which rows we want; in this case, the query selects only rows “where” parallax is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We’ll use this clause to exclude nearby stars that are unlikely to be part of GD-1.

+

WHERE is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.

+

We use launch_job_async to submit an asynchronous query.

+
+
+
job2 = Gaia.launch_job_async(query2)
+print(job2)
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=3000>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: 1601903242219O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201005090722.vot
+Results: None
+
+
+
+
+

And here are the results.

+
+
+
results2 = job2.get_results()
+results2
+
+
+
+
+
Table length=3000 + + + + + + + + + + + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
+
+

You might notice that some values of parallax are negative. As this FAQ explains, “Negative parallaxes are caused by errors in the observations.” Negative parallaxes have “no physical meaning,” but they can be a “useful diagnostic on the quality of the astrometric solution.”

+

Later we will see an example where we use parallax and parallax_error to identify stars where the distance estimate is likely to be inaccurate.

+

Exercise: The clauses in a query have to be in the right order. Go back and change the order of the clauses in query2 and run it again.

+

The query should fail, but notice that you don’t get much useful debugging information.

+

For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:

+
    +
  • Whenever possible, start with a working query, either an example you find online or a query you have used in the past.

  • +
  • Make small changes and test each change before you continue.

  • +
  • While you are debugging, use TOP to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time.

  • +
  • Launching test queries synchronously might make them start faster, too.

  • +
+
+
+

Operators

+

In a WHERE clause, you can use any of the SQL comparison operators; here are the most common ones:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Symbol

Operation

>

greater than

<

less than

>=

greater than or equal

<=

less than or equal

=

equal

!= or <>

not equal

+

Most of these are the same as Python, but some are not. In particular, notice that the equality operator is =, not ==. +Be careful to keep your Python out of your ADQL!

+

You can combine comparisons using the logical operators:

+
    +
  • AND: true if both comparisons are true

  • +
  • OR: true if either or both comparisons are true

  • +
+

Finally, you can use NOT to invert the result of a comparison.

+

Exercise: Read about SQL operators here and then modify the previous query to select rows where bp_rp is between -0.75 and 2.

+

You can read about this variable here.

+
+
+
# Solution
+
+# This is what most people will probably do
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp > -0.75 AND bp_rp < 2
+"""
+
+
+
+
+
+
+
# Solution
+
+# But if someone notices the BETWEEN operator, 
+# they might do this
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+

This Hertzsprung-Russell diagram shows the BP-RP color and luminosity of stars in the Gaia catalog.

+

Selecting stars with bp-rp less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.

+
+
+

Cleaning up

+

Asynchronous jobs have a jobid.

+
+
+
job1.jobid, job2.jobid
+
+
+
+
+
(None, '1601903242219O')
+
+
+
+
+

Which you can use to remove the job from the server.

+
+
+
Gaia.remove_jobs([job2.jobid])
+
+
+
+
+
Removed jobs: '['1601903242219O']'.
+
+
+
+
+

If you don’t remove it job from the server, it will be removed eventually, so don’t feel too bad if you don’t clean up after yourself.

+
+
+

Formatting queries

+

So far the queries have been string “literals”, meaning that the entire string is part of the program. +But writing queries yourself can be slow, repetitive, and error-prone.

+

It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the string format method.

+

As an example, we’ll divide the previous query into two parts; a list of column names and a “base” for the query that contains everything except the column names.

+

Here’s the list of columns we’ll select.

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

And here’s the base; it’s a string that contains at least one format specifier in curly brackets (braces).

+
+
+
query3_base = """SELECT TOP 10 
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+

This base query contains one format specifier, {columns}, which is a placeholder for the list of column names we will provide.

+

To assemble the query, we invoke format on the base string and provide a keyword argument that assigns a value to columns.

+
+
+
query3 = query3_base.format(columns=columns)
+
+
+
+
+

The result is a string with line breaks. If you display it, the line breaks appear as \n.

+
+
+
query3
+
+
+
+
+
'SELECT TOP 10 \nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\nFROM gaiadr2.gaia_source\nWHERE parallax < 1\n  AND bp_rp BETWEEN -0.75 AND 2\n'
+
+
+
+
+

But if you print it, the line breaks appear as… line breaks.

+
+
+
print(query3)
+
+
+
+
+
SELECT TOP 10 
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+
+
+
+
+

Notice that the format specifier has been replaced with the value of columns.

+

Let’s run it and see if it works:

+
+
+
job3 = Gaia.launch_job(query3)
+print(job3)
+
+
+
+
+
<Table length=10>
+      name       dtype    unit                              description                             n_bad
+--------------- ------- -------- ------------------------------------------------------------------ -----
+      source_id   int64          Unique source identifier (unique within a particular Data Release)     0
+             ra float64      deg                                                    Right ascension     0
+            dec float64      deg                                                        Declination     0
+           pmra float64 mas / yr                         Proper motion in right ascension direction     0
+          pmdec float64 mas / yr                             Proper motion in declination direction     0
+       parallax float64      mas                                                           Parallax     0
+ parallax_error float64      mas                                         Standard error of parallax     0
+radial_velocity float64   km / s                                                    Radial velocity    10
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090726.xml.gz
+Results: None
+
+
+
+
+
+
+
results3 = job3.get_results()
+results3
+
+
+
+
+
Table length=10 + + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
+
+

Good so far.

+

Exercise: This query always selects sources with parallax less than 1. But suppose you want to take that upper bound as an input.

+

Modify query3_base to replace 1 with a format specifier like {max_parallax}. Now, when you call format, add a keyword argument that assigns a value to max_parallax, and confirm that the format specifier gets replaced with the value you provide.

+
+
+
# Solution
+
+query4_base = """SELECT TOP 10
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < {max_parallax} AND 
+bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+
+
+
# Solution
+
+query4 = query4_base.format(columns=columns,
+                          max_parallax=0.5)
+print(query)
+
+
+
+
+
SELECT TOP 10
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 0.5 AND 
+bp_rp BETWEEN -0.75 AND 2
+
+
+
+
+

Style note: You might notice that the variable names in this notebook are numbered, like query1, query2, etc.

+

The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it’s less likely that you will get unexpected interactions.

+

A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.

+

What do you think of this choice? Are there alternatives you prefer?

+
+
+

Summary

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+
+
+

Best practices

+
    +
  • If you can’t download an entire dataset (or it’s not practical) use queries to select the data you need.

  • +
  • Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Use ADQL features like TOP and COUNT to test before you run a query that might return a lot of data.

  • +
  • If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn’t seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.

  • +
  • ADQL and SQL are not case-sensitive, so you don’t have to capitalize the keywords, but you should.

  • +
  • ADQL and SQL don’t require you to break a query into multiple lines, but you should.

  • +
+

Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don’t have the values you expect.

+

There are a few things you can do to mitigate these problems:

+
    +
  • Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.

  • +
  • Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/02_coords.html b/_build/html/AstronomicalData/02_coords.html new file mode 100644 index 0000000..81a0755 --- /dev/null +++ b/_build/html/AstronomicalData/02_coords.html @@ -0,0 +1,1824 @@ + + + + + + + + Lesson 2 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Lesson 2

+

This is the second in a series of lessons related to astronomy data.

+

As a running example, we are replicating parts of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.

+

In this notebook, we’ll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be.

+

We’ll start with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we’ll:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

After completing this lesson, you should be able to

+
    +
  • Use Python string formatting to compose more complex ADQL queries.

  • +
  • Work with coordinates and other quantities that have units.

  • +
  • Download the results of a query and store them in a file.

  • +
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+
+
+

Selecting a region

+

One of the most common ways to restrict a query is to select stars in a particular region of the sky.

+

For example, here’s a query from the Gaia archive documentation that selects “all the objects … in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).”

+
+
+
query = """
+SELECT 
+TOP 10 source_id
+FROM gaiadr2.gaia_source
+WHERE 1=CONTAINS(
+  POINT(ra, dec),
+  CIRCLE(266.41683, -29.00781, 0.08333333))
+"""
+
+
+
+
+

This query uses three keywords that are specific to ADQL (not SQL):

+
    +
  • POINT: a location in ICRS coordinates, specified in degrees of right ascension and declination.

  • +
  • CIRCLE: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.

  • +
  • CONTAINS: a function that returns 1 if a POINT is contained in a shape and 0 otherwise.

  • +
+

Here is the documentation of CONTAINS.

+

A query like this is called a cone search because it selects stars in a cone.

+

Here’s how we run it.

+
+
+
from astroquery.gaia import Gaia
+
+job = Gaia.launch_job(query)
+result = job.get_results()
+result
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
Table length=10 + + + + + + + + + + + + + +
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
+
+

Exercise: When you are debugging queries like this, you can use TOP to limit the size of the results, but then you still don’t know how big the results will be.

+

An alternative is to use COUNT, which asks for the number of rows that would be selected, but it does not return them.

+

In the previous query, replace TOP 10 source_id with COUNT(source_id) and run the query again. How many stars has Gaia identified in the cone we searched?

+
+
+

Getting GD-1 Data

+

From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:

+

Along the axis of right ascension (\(\phi_1\)) the figure extends from -100 to 20 degrees.

+

Along the axis of declination (\(\phi_2\)) the figure extends from about -8 to 4 degrees.

+

Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so

+
    +
  • That would be difficult to work with,

  • +
  • As anonymous users, we are limited to 3 million rows in a single query, and

  • +
  • While we are developing and testing code, it will be faster to work with a smaller dataset.

  • +
+

So we’ll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

But first we let’s see how to represent quantities with units like degrees.

+
+
+

Working with coordinates

+

Coordinates are physical quantities, which means that they have two parts, a value and a unit.

+

For example, the coordinate \(30^{\circ}\) has value 30 and its units are degrees.

+

Until recently, most scientific computation was done with values only; units were left out of the program altogether, often with disastrous results.

+

Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.

+

To use Astropy units, we import them like this:

+
+
+
import astropy.units as u
+
+u
+
+
+
+
+
<module 'astropy.units' from '/home/downey/anaconda3/envs/AstronomicalData/lib/python3.8/site-packages/astropy/units/__init__.py'>
+
+
+
+
+

u is an object that contains most common units and all SI units.

+

You can use dir to list them, but you should also read the documentation.

+
+
+
dir(u)
+
+
+
+
+
['A',
+ 'AA',
+ 'AB',
+ 'ABflux',
+ 'ABmag',
+ 'AU',
+ 'Angstrom',
+ 'B',
+ 'Ba',
+ 'Barye',
+ 'Bi',
+ 'Biot',
+ 'Bol',
+ 'Bq',
+ 'C',
+ 'Celsius',
+ 'Ci',
+ 'CompositeUnit',
+ 'D',
+ 'Da',
+ 'Dalton',
+ 'Debye',
+ 'Decibel',
+ 'DecibelUnit',
+ 'Dex',
+ 'DexUnit',
+ 'EA',
+ 'EAU',
+ 'EB',
+ 'EBa',
+ 'EC',
+ 'ED',
+ 'EF',
+ 'EG',
+ 'EGal',
+ 'EH',
+ 'EHz',
+ 'EJ',
+ 'EJy',
+ 'EK',
+ 'EL',
+ 'EN',
+ 'EOhm',
+ 'EP',
+ 'EPa',
+ 'ER',
+ 'ERy',
+ 'ES',
+ 'ESt',
+ 'ET',
+ 'EV',
+ 'EW',
+ 'EWb',
+ 'Ea',
+ 'Eadu',
+ 'Earcmin',
+ 'Earcsec',
+ 'Eau',
+ 'Eb',
+ 'Ebarn',
+ 'Ebeam',
+ 'Ebin',
+ 'Ebit',
+ 'Ebyte',
+ 'Ecd',
+ 'Echan',
+ 'Ecount',
+ 'Ect',
+ 'Ed',
+ 'Edeg',
+ 'Edyn',
+ 'EeV',
+ 'Eerg',
+ 'Eg',
+ 'Eh',
+ 'EiB',
+ 'Eib',
+ 'Eibit',
+ 'Eibyte',
+ 'Ek',
+ 'El',
+ 'Elm',
+ 'Elx',
+ 'Elyr',
+ 'Em',
+ 'Emag',
+ 'Emin',
+ 'Emol',
+ 'Eohm',
+ 'Epc',
+ 'Eph',
+ 'Ephoton',
+ 'Epix',
+ 'Epixel',
+ 'Erad',
+ 'Es',
+ 'Esr',
+ 'Eu',
+ 'Evox',
+ 'Evoxel',
+ 'Eyr',
+ 'F',
+ 'Farad',
+ 'Fr',
+ 'Franklin',
+ 'FunctionQuantity',
+ 'FunctionUnitBase',
+ 'G',
+ 'GA',
+ 'GAU',
+ 'GB',
+ 'GBa',
+ 'GC',
+ 'GD',
+ 'GF',
+ 'GG',
+ 'GGal',
+ 'GH',
+ 'GHz',
+ 'GJ',
+ 'GJy',
+ 'GK',
+ 'GL',
+ 'GN',
+ 'GOhm',
+ 'GP',
+ 'GPa',
+ 'GR',
+ 'GRy',
+ 'GS',
+ 'GSt',
+ 'GT',
+ 'GV',
+ 'GW',
+ 'GWb',
+ 'Ga',
+ 'Gadu',
+ 'Gal',
+ 'Garcmin',
+ 'Garcsec',
+ 'Gau',
+ 'Gauss',
+ 'Gb',
+ 'Gbarn',
+ 'Gbeam',
+ 'Gbin',
+ 'Gbit',
+ 'Gbyte',
+ 'Gcd',
+ 'Gchan',
+ 'Gcount',
+ 'Gct',
+ 'Gd',
+ 'Gdeg',
+ 'Gdyn',
+ 'GeV',
+ 'Gerg',
+ 'Gg',
+ 'Gh',
+ 'GiB',
+ 'Gib',
+ 'Gibit',
+ 'Gibyte',
+ 'Gk',
+ 'Gl',
+ 'Glm',
+ 'Glx',
+ 'Glyr',
+ 'Gm',
+ 'Gmag',
+ 'Gmin',
+ 'Gmol',
+ 'Gohm',
+ 'Gpc',
+ 'Gph',
+ 'Gphoton',
+ 'Gpix',
+ 'Gpixel',
+ 'Grad',
+ 'Gs',
+ 'Gsr',
+ 'Gu',
+ 'Gvox',
+ 'Gvoxel',
+ 'Gyr',
+ 'H',
+ 'Henry',
+ 'Hertz',
+ 'Hz',
+ 'IrreducibleUnit',
+ 'J',
+ 'Jansky',
+ 'Joule',
+ 'Jy',
+ 'K',
+ 'Kayser',
+ 'Kelvin',
+ 'KiB',
+ 'Kib',
+ 'Kibit',
+ 'Kibyte',
+ 'L',
+ 'L_bol',
+ 'L_sun',
+ 'LogQuantity',
+ 'LogUnit',
+ 'Lsun',
+ 'MA',
+ 'MAU',
+ 'MB',
+ 'MBa',
+ 'MC',
+ 'MD',
+ 'MF',
+ 'MG',
+ 'MGal',
+ 'MH',
+ 'MHz',
+ 'MJ',
+ 'MJy',
+ 'MK',
+ 'ML',
+ 'MN',
+ 'MOhm',
+ 'MP',
+ 'MPa',
+ 'MR',
+ 'MRy',
+ 'MS',
+ 'MSt',
+ 'MT',
+ 'MV',
+ 'MW',
+ 'MWb',
+ 'M_bol',
+ 'M_e',
+ 'M_earth',
+ 'M_jup',
+ 'M_jupiter',
+ 'M_p',
+ 'M_sun',
+ 'Ma',
+ 'Madu',
+ 'MagUnit',
+ 'Magnitude',
+ 'Marcmin',
+ 'Marcsec',
+ 'Mau',
+ 'Mb',
+ 'Mbarn',
+ 'Mbeam',
+ 'Mbin',
+ 'Mbit',
+ 'Mbyte',
+ 'Mcd',
+ 'Mchan',
+ 'Mcount',
+ 'Mct',
+ 'Md',
+ 'Mdeg',
+ 'Mdyn',
+ 'MeV',
+ 'Mearth',
+ 'Merg',
+ 'Mg',
+ 'Mh',
+ 'MiB',
+ 'Mib',
+ 'Mibit',
+ 'Mibyte',
+ 'Mjup',
+ 'Mjupiter',
+ 'Mk',
+ 'Ml',
+ 'Mlm',
+ 'Mlx',
+ 'Mlyr',
+ 'Mm',
+ 'Mmag',
+ 'Mmin',
+ 'Mmol',
+ 'Mohm',
+ 'Mpc',
+ 'Mph',
+ 'Mphoton',
+ 'Mpix',
+ 'Mpixel',
+ 'Mrad',
+ 'Ms',
+ 'Msr',
+ 'Msun',
+ 'Mu',
+ 'Mvox',
+ 'Mvoxel',
+ 'Myr',
+ 'N',
+ 'NamedUnit',
+ 'Newton',
+ 'Ohm',
+ 'P',
+ 'PA',
+ 'PAU',
+ 'PB',
+ 'PBa',
+ 'PC',
+ 'PD',
+ 'PF',
+ 'PG',
+ 'PGal',
+ 'PH',
+ 'PHz',
+ 'PJ',
+ 'PJy',
+ 'PK',
+ 'PL',
+ 'PN',
+ 'POhm',
+ 'PP',
+ 'PPa',
+ 'PR',
+ 'PRy',
+ 'PS',
+ 'PSt',
+ 'PT',
+ 'PV',
+ 'PW',
+ 'PWb',
+ 'Pa',
+ 'Padu',
+ 'Parcmin',
+ 'Parcsec',
+ 'Pascal',
+ 'Pau',
+ 'Pb',
+ 'Pbarn',
+ 'Pbeam',
+ 'Pbin',
+ 'Pbit',
+ 'Pbyte',
+ 'Pcd',
+ 'Pchan',
+ 'Pcount',
+ 'Pct',
+ 'Pd',
+ 'Pdeg',
+ 'Pdyn',
+ 'PeV',
+ 'Perg',
+ 'Pg',
+ 'Ph',
+ 'PiB',
+ 'Pib',
+ 'Pibit',
+ 'Pibyte',
+ 'Pk',
+ 'Pl',
+ 'Plm',
+ 'Plx',
+ 'Plyr',
+ 'Pm',
+ 'Pmag',
+ 'Pmin',
+ 'Pmol',
+ 'Pohm',
+ 'Ppc',
+ 'Pph',
+ 'Pphoton',
+ 'Ppix',
+ 'Ppixel',
+ 'Prad',
+ 'PrefixUnit',
+ 'Ps',
+ 'Psr',
+ 'Pu',
+ 'Pvox',
+ 'Pvoxel',
+ 'Pyr',
+ 'Quantity',
+ 'QuantityInfo',
+ 'QuantityInfoBase',
+ 'R',
+ 'R_earth',
+ 'R_jup',
+ 'R_jupiter',
+ 'R_sun',
+ 'Rayleigh',
+ 'Rearth',
+ 'Rjup',
+ 'Rjupiter',
+ 'Rsun',
+ 'Ry',
+ 'S',
+ 'ST',
+ 'STflux',
+ 'STmag',
+ 'Siemens',
+ 'SpecificTypeQuantity',
+ 'St',
+ 'Sun',
+ 'T',
+ 'TA',
+ 'TAU',
+ 'TB',
+ 'TBa',
+ 'TC',
+ 'TD',
+ 'TF',
+ 'TG',
+ 'TGal',
+ 'TH',
+ 'THz',
+ 'TJ',
+ 'TJy',
+ 'TK',
+ 'TL',
+ 'TN',
+ 'TOhm',
+ 'TP',
+ 'TPa',
+ 'TR',
+ 'TRy',
+ 'TS',
+ 'TSt',
+ 'TT',
+ 'TV',
+ 'TW',
+ 'TWb',
+ 'Ta',
+ 'Tadu',
+ 'Tarcmin',
+ 'Tarcsec',
+ 'Tau',
+ 'Tb',
+ 'Tbarn',
+ 'Tbeam',
+ 'Tbin',
+ 'Tbit',
+ 'Tbyte',
+ 'Tcd',
+ 'Tchan',
+ 'Tcount',
+ 'Tct',
+ 'Td',
+ 'Tdeg',
+ 'Tdyn',
+ 'TeV',
+ 'Terg',
+ 'Tesla',
+ 'Tg',
+ 'Th',
+ 'TiB',
+ 'Tib',
+ 'Tibit',
+ 'Tibyte',
+ 'Tk',
+ 'Tl',
+ 'Tlm',
+ 'Tlx',
+ 'Tlyr',
+ 'Tm',
+ 'Tmag',
+ 'Tmin',
+ 'Tmol',
+ 'Tohm',
+ 'Tpc',
+ 'Tph',
+ 'Tphoton',
+ 'Tpix',
+ 'Tpixel',
+ 'Trad',
+ 'Ts',
+ 'Tsr',
+ 'Tu',
+ 'Tvox',
+ 'Tvoxel',
+ 'Tyr',
+ 'Unit',
+ 'UnitBase',
+ 'UnitConversionError',
+ 'UnitTypeError',
+ 'UnitsError',
+ 'UnitsWarning',
+ 'UnrecognizedUnit',
+ 'V',
+ 'Volt',
+ 'W',
+ 'Watt',
+ 'Wb',
+ 'Weber',
+ 'YA',
+ 'YAU',
+ 'YB',
+ 'YBa',
+ 'YC',
+ 'YD',
+ 'YF',
+ 'YG',
+ 'YGal',
+ 'YH',
+ 'YHz',
+ 'YJ',
+ 'YJy',
+ 'YK',
+ 'YL',
+ 'YN',
+ 'YOhm',
+ 'YP',
+ 'YPa',
+ 'YR',
+ 'YRy',
+ 'YS',
+ 'YSt',
+ 'YT',
+ 'YV',
+ 'YW',
+ 'YWb',
+ 'Ya',
+ 'Yadu',
+ 'Yarcmin',
+ 'Yarcsec',
+ 'Yau',
+ 'Yb',
+ 'Ybarn',
+ 'Ybeam',
+ 'Ybin',
+ 'Ybit',
+ 'Ybyte',
+ 'Ycd',
+ 'Ychan',
+ 'Ycount',
+ 'Yct',
+ 'Yd',
+ 'Ydeg',
+ 'Ydyn',
+ 'YeV',
+ 'Yerg',
+ 'Yg',
+ 'Yh',
+ 'Yk',
+ 'Yl',
+ 'Ylm',
+ 'Ylx',
+ 'Ylyr',
+ 'Ym',
+ 'Ymag',
+ 'Ymin',
+ 'Ymol',
+ 'Yohm',
+ 'Ypc',
+ 'Yph',
+ 'Yphoton',
+ 'Ypix',
+ 'Ypixel',
+ 'Yrad',
+ 'Ys',
+ 'Ysr',
+ 'Yu',
+ 'Yvox',
+ 'Yvoxel',
+ 'Yyr',
+ 'ZA',
+ 'ZAU',
+ 'ZB',
+ 'ZBa',
+ 'ZC',
+ 'ZD',
+ 'ZF',
+ 'ZG',
+ 'ZGal',
+ 'ZH',
+ 'ZHz',
+ 'ZJ',
+ 'ZJy',
+ 'ZK',
+ 'ZL',
+ 'ZN',
+ 'ZOhm',
+ 'ZP',
+ 'ZPa',
+ 'ZR',
+ 'ZRy',
+ 'ZS',
+ 'ZSt',
+ 'ZT',
+ 'ZV',
+ 'ZW',
+ 'ZWb',
+ 'Za',
+ 'Zadu',
+ 'Zarcmin',
+ 'Zarcsec',
+ 'Zau',
+ 'Zb',
+ 'Zbarn',
+ 'Zbeam',
+ 'Zbin',
+ 'Zbit',
+ 'Zbyte',
+ 'Zcd',
+ 'Zchan',
+ 'Zcount',
+ 'Zct',
+ 'Zd',
+ 'Zdeg',
+ 'Zdyn',
+ 'ZeV',
+ 'Zerg',
+ 'Zg',
+ 'Zh',
+ 'Zk',
+ 'Zl',
+ 'Zlm',
+ 'Zlx',
+ 'Zlyr',
+ 'Zm',
+ 'Zmag',
+ 'Zmin',
+ 'Zmol',
+ 'Zohm',
+ 'Zpc',
+ 'Zph',
+ 'Zphoton',
+ 'Zpix',
+ 'Zpixel',
+ 'Zrad',
+ 'Zs',
+ 'Zsr',
+ 'Zu',
+ 'Zvox',
+ 'Zvoxel',
+ 'Zyr',
+ '__builtins__',
+ '__cached__',
+ '__doc__',
+ '__file__',
+ '__loader__',
+ '__name__',
+ '__package__',
+ '__path__',
+ '__spec__',
+ 'a',
+ 'aA',
+ 'aAU',
+ 'aB',
+ 'aBa',
+ 'aC',
+ 'aD',
+ 'aF',
+ 'aG',
+ 'aGal',
+ 'aH',
+ 'aHz',
+ 'aJ',
+ 'aJy',
+ 'aK',
+ 'aL',
+ 'aN',
+ 'aOhm',
+ 'aP',
+ 'aPa',
+ 'aR',
+ 'aRy',
+ 'aS',
+ 'aSt',
+ 'aT',
+ 'aV',
+ 'aW',
+ 'aWb',
+ 'aa',
+ 'aadu',
+ 'aarcmin',
+ 'aarcsec',
+ 'aau',
+ 'ab',
+ 'abA',
+ 'abC',
+ 'abampere',
+ 'abarn',
+ 'abcoulomb',
+ 'abeam',
+ 'abin',
+ 'abit',
+ 'abyte',
+ 'acd',
+ 'achan',
+ 'acount',
+ 'act',
+ 'ad',
+ 'add_enabled_equivalencies',
+ 'add_enabled_units',
+ 'adeg',
+ 'adu',
+ 'adyn',
+ 'aeV',
+ 'aerg',
+ 'ag',
+ 'ah',
+ 'ak',
+ 'al',
+ 'allclose',
+ 'alm',
+ 'alx',
+ 'alyr',
+ 'am',
+ 'amag',
+ 'amin',
+ 'amol',
+ 'amp',
+ 'ampere',
+ 'angstrom',
+ 'annum',
+ 'aohm',
+ 'apc',
+ 'aph',
+ 'aphoton',
+ 'apix',
+ 'apixel',
+ 'arad',
+ 'arcmin',
+ 'arcminute',
+ 'arcsec',
+ 'arcsecond',
+ 'asr',
+ 'astronomical_unit',
+ 'astrophys',
+ 'attoBarye',
+ 'attoDa',
+ 'attoDalton',
+ 'attoDebye',
+ 'attoFarad',
+ 'attoGauss',
+ 'attoHenry',
+ 'attoHertz',
+ 'attoJansky',
+ 'attoJoule',
+ 'attoKayser',
+ 'attoKelvin',
+ 'attoNewton',
+ 'attoOhm',
+ 'attoPascal',
+ 'attoRayleigh',
+ 'attoSiemens',
+ 'attoTesla',
+ 'attoVolt',
+ 'attoWatt',
+ 'attoWeber',
+ 'attoamp',
+ 'attoampere',
+ 'attoannum',
+ 'attoarcminute',
+ 'attoarcsecond',
+ 'attoastronomical_unit',
+ 'attobarn',
+ 'attobarye',
+ 'attobit',
+ 'attobyte',
+ 'attocandela',
+ 'attocoulomb',
+ 'attocount',
+ 'attoday',
+ 'attodebye',
+ 'attodegree',
+ 'attodyne',
+ 'attoelectronvolt',
+ 'attofarad',
+ 'attogal',
+ 'attogauss',
+ 'attogram',
+ 'attohenry',
+ 'attohertz',
+ 'attohour',
+ 'attohr',
+ 'attojansky',
+ 'attojoule',
+ 'attokayser',
+ 'attolightyear',
+ 'attoliter',
+ 'attolumen',
+ 'attolux',
+ 'attometer',
+ 'attominute',
+ 'attomole',
+ 'attonewton',
+ 'attoparsec',
+ 'attopascal',
+ 'attophoton',
+ 'attopixel',
+ 'attopoise',
+ 'attoradian',
+ 'attorayleigh',
+ 'attorydberg',
+ 'attosecond',
+ 'attosiemens',
+ 'attosteradian',
+ 'attostokes',
+ 'attotesla',
+ 'attovolt',
+ 'attovoxel',
+ 'attowatt',
+ 'attoweber',
+ 'attoyear',
+ 'au',
+ 'avox',
+ 'avoxel',
+ 'ayr',
+ 'b',
+ 'bar',
+ 'barn',
+ 'barye',
+ 'beam',
+ 'beam_angular_area',
+ 'becquerel',
+ 'bin',
+ 'binary_prefixes',
+ 'bit',
+ 'bol',
+ 'brightness_temperature',
+ 'byte',
+ 'cA',
+ 'cAU',
+ 'cB',
+ 'cBa',
+ 'cC',
+ 'cD',
+ 'cF',
+ 'cG',
+ 'cGal',
+ 'cH',
+ 'cHz',
+ 'cJ',
+ 'cJy',
+ 'cK',
+ 'cL',
+ 'cN',
+ 'cOhm',
+ 'cP',
+ 'cPa',
+ 'cR',
+ 'cRy',
+ 'cS',
+ 'cSt',
+ 'cT',
+ 'cV',
+ 'cW',
+ 'cWb',
+ 'ca',
+ 'cadu',
+ 'candela',
+ 'carcmin',
+ 'carcsec',
+ 'cau',
+ 'cb',
+ 'cbarn',
+ 'cbeam',
+ 'cbin',
+ 'cbit',
+ 'cbyte',
+ 'ccd',
+ 'cchan',
+ 'ccount',
+ 'cct',
+ 'cd',
+ 'cdeg',
+ 'cdyn',
+ 'ceV',
+ 'centiBarye',
+ 'centiDa',
+ 'centiDalton',
+ 'centiDebye',
+ 'centiFarad',
+ 'centiGauss',
+ 'centiHenry',
+ 'centiHertz',
+ 'centiJansky',
+ 'centiJoule',
+ 'centiKayser',
+ 'centiKelvin',
+ 'centiNewton',
+ 'centiOhm',
+ 'centiPascal',
+ 'centiRayleigh',
+ 'centiSiemens',
+ 'centiTesla',
+ 'centiVolt',
+ 'centiWatt',
+ 'centiWeber',
+ 'centiamp',
+ 'centiampere',
+ 'centiannum',
+ 'centiarcminute',
+ 'centiarcsecond',
+ 'centiastronomical_unit',
+ 'centibarn',
+ 'centibarye',
+ 'centibit',
+ 'centibyte',
+ 'centicandela',
+ 'centicoulomb',
+ 'centicount',
+ 'centiday',
+ 'centidebye',
+ 'centidegree',
+ 'centidyne',
+ 'centielectronvolt',
+ 'centifarad',
+ 'centigal',
+ 'centigauss',
+ 'centigram',
+ 'centihenry',
+ 'centihertz',
+ 'centihour',
+ 'centihr',
+ 'centijansky',
+ 'centijoule',
+ 'centikayser',
+ 'centilightyear',
+ 'centiliter',
+ 'centilumen',
+ 'centilux',
+ 'centimeter',
+ 'centiminute',
+ 'centimole',
+ 'centinewton',
+ 'centiparsec',
+ 'centipascal',
+ 'centiphoton',
+ 'centipixel',
+ 'centipoise',
+ 'centiradian',
+ 'centirayleigh',
+ 'centirydberg',
+ 'centisecond',
+ 'centisiemens',
+ 'centisteradian',
+ 'centistokes',
+ 'centitesla',
+ 'centivolt',
+ 'centivoxel',
+ 'centiwatt',
+ 'centiweber',
+ 'centiyear',
+ 'cerg',
+ 'cg',
+ 'cgs',
+ 'ch',
+ 'chan',
+ 'ck',
+ 'cl',
+ 'clm',
+ 'clx',
+ 'clyr',
+ 'cm',
+ 'cmag',
+ 'cmin',
+ 'cmol',
+ 'cohm',
+ 'core',
+ 'coulomb',
+ 'count',
+ 'cpc',
+ 'cph',
+ 'cphoton',
+ 'cpix',
+ 'cpixel',
+ 'crad',
+ 'cs',
+ 'csr',
+ 'ct',
+ 'cu',
+ 'curie',
+ 'cvox',
+ 'cvoxel',
+ 'cy',
+ 'cycle',
+ 'cyr',
+ 'd',
+ 'dA',
+ 'dAU',
+ 'dB',
+ 'dBa',
+ 'dC',
+ 'dD',
+ 'dF',
+ 'dG',
+ 'dGal',
+ 'dH',
+ 'dHz',
+ 'dJ',
+ 'dJy',
+ 'dK',
+ 'dL',
+ 'dN',
+ 'dOhm',
+ 'dP',
+ 'dPa',
+ 'dR',
+ 'dRy',
+ 'dS',
+ 'dSt',
+ 'dT',
+ ...]
+
+
+
+
+

To create a quantity, we multiply a value by a unit.

+
+
+
coord = 30 * u.deg
+type(coord)
+
+
+
+
+
astropy.units.quantity.Quantity
+
+
+
+
+

The result is a Quantity object.

+

Jupyter knows how to display Quantities like this:

+
+
+
coord
+
+
+
+
+
+\[30 \; \mathrm{{}^{\circ}}\]
+
+
+
+
+

Selecting a rectangle

+

Now we’ll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

We’ll define variables to contain these limits.

+
+
+
phi1_min = -55
+phi1_max = -45
+phi2_min = -8
+phi2_max = 4
+
+
+
+
+

To represent a rectangle, we’ll use two lists of coordinates and multiply by their units.

+
+
+
phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg
+phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg
+
+
+
+
+

phi1_rect and phi2_rect represent the coordinates of the corners of a rectangle.

+

But they are in “a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream

+

In order to use them in a Gaia query, we have to convert them to International Celestial Reference System (ICRS) coordinates. We can do that by storing the coordinates in a GD1Koposov10 object provided by Gala.

+
+
+
import gala.coordinates as gc
+
+corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)
+type(corners)
+
+
+
+
+
gala.coordinates.gd1.GD1Koposov10
+
+
+
+
+

We can display the result like this:

+
+
+
corners
+
+
+
+
+
<GD1Koposov10 Coordinate: (phi1, phi2) in deg
+    [(-55., -8.), (-55.,  4.), (-45.,  4.), (-45., -8.)]>
+
+
+
+
+

Now we can use transform_to to convert to ICRS coordinates.

+
+
+
import astropy.coordinates as coord
+
+corners_icrs = corners.transform_to(coord.ICRS)
+type(corners_icrs)
+
+
+
+
+
astropy.coordinates.builtin_frames.icrs.ICRS
+
+
+
+
+

The result is an ICRS object.

+
+
+
corners_icrs
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    [(146.27533314, 19.26190982), (135.42163944, 25.87738723),
+     (141.60264825, 34.3048303 ), (152.81671045, 27.13611254)]>
+
+
+
+
+

Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon.

+
+
+

Selecting a polygon

+

In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:

+
"""
+POLYGON(143.65, 20.98, 
+        134.46, 26.39, 
+        140.58, 34.85, 
+        150.16, 29.01)
+"""
+
+
+

corners_icrs behaves like a list, so we can use a for loop to iterate through the points.

+
+
+
for point in corners_icrs:
+    print(point)
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    (146.27533314, 19.26190982)>
+<ICRS Coordinate: (ra, dec) in deg
+    (135.42163944, 25.87738723)>
+<ICRS Coordinate: (ra, dec) in deg
+    (141.60264825, 34.3048303)>
+<ICRS Coordinate: (ra, dec) in deg
+    (152.81671045, 27.13611254)>
+
+
+
+
+

From that, we can select the coordinates ra and dec:

+
+
+
for point in corners_icrs:
+    print(point.ra, point.dec)
+
+
+
+
+
146d16m31.1993s 19d15m42.8754s
+135d25m17.902s 25d52m38.594s
+141d36m09.5337s 34d18m17.3891s
+152d49m00.1576s 27d08m10.0051s
+
+
+
+
+

The results are quantities with units, but if we select the value part, we get a dimensionless floating-point number.

+
+
+
for point in corners_icrs:
+    print(point.ra.value, point.dec.value)
+
+
+
+
+
146.27533313607782 19.261909820533692
+135.42163944306296 25.87738722767213
+141.60264825107333 34.304830296257144
+152.81671044675923 27.136112541397996
+
+
+
+
+

We can use string format to convert these numbers to strings.

+
+
+
point_base = "{point.ra.value}, {point.dec.value}"
+
+t = [point_base.format(point=point)
+     for point in corners_icrs]
+t
+
+
+
+
+
['146.27533313607782, 19.261909820533692',
+ '135.42163944306296, 25.87738722767213',
+ '141.60264825107333, 34.304830296257144',
+ '152.81671044675923, 27.136112541397996']
+
+
+
+
+

The result is a list of strings, which we can join into a single string using join.

+
+
+
point_list = ', '.join(t)
+point_list
+
+
+
+
+
'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'
+
+
+
+
+

Notice that we invoke join on a string and pass the list as an argument.

+

Before we can assemble the query, we need columns again (as we saw in the previous notebook).

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

Here’s the base for the query, with format specifiers for columns and point_list.

+
+
+
query_base = """SELECT {columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON({point_list}))
+"""
+
+
+
+
+

And here’s the result:

+
+
+
query = query_base.format(columns=columns, 
+                          point_list=point_list)
+print(query)
+
+
+
+
+
SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))
+
+
+
+
+

As always, we should take a minute to proof-read the query before we launch it.

+

The result will be bigger than our previous queries, so it will take a little longer.

+
+
+
job = Gaia.launch_job_async(query)
+print(job)
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=140340>
+      name       dtype    unit                              description                             n_bad 
+--------------- ------- -------- ------------------------------------------------------------------ ------
+      source_id   int64          Unique source identifier (unique within a particular Data Release)      0
+             ra float64      deg                                                    Right ascension      0
+            dec float64      deg                                                        Declination      0
+           pmra float64 mas / yr                         Proper motion in right ascension direction      0
+          pmdec float64 mas / yr                             Proper motion in declination direction      0
+       parallax float64      mas                                                           Parallax      0
+ parallax_error float64      mas                                         Standard error of parallax      0
+radial_velocity float64   km / s                                                    Radial velocity 139374
+Jobid: 1603114980658O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201019094300.vot
+Results: None
+
+
+
+
+

Here are the results.

+
+
+
results = job.get_results()
+len(results)
+
+
+
+
+
140340
+
+
+
+
+

There are more than 100,000 stars in this polygon, but that’s a manageable size to work with.

+
+
+

Saving results

+

This is the set of stars we’ll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.

+

Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.

+

Astropy Table objects provide write, which writes the table to disk.

+
+
+
filename = 'gd1_results.fits'
+results.write(filename, overwrite=True)
+
+
+
+
+

Because the filename ends with fits, the table is written in the FITS format, which preserves the metadata associated with the table.

+

If the file already exists, the overwrite argument causes it to be overwritten.

+

To see how big the file is, we can use ls with the -lh option, which prints information about the file including its size in human-readable form.

+
+
+
!ls -lh gd1_results.fits
+
+
+
+
+
-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits
+
+
+
+
+

The file is about 8.6 MB. If you are using Windows, ls might not work; in that case, try:

+
!dir gd1_results.fits
+
+
+
+
+

Summary

+

In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.

+

In the next notebook, we’ll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1.

+
+
+

Best practices

+
    +
  • For measurements with units, use Quantity objects that represent units explicitly and check for errors.

  • +
  • Use the format function to compose queries; it is often faster and less error-prone.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don’t have to run the query again.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/README.html b/_build/html/AstronomicalData/README.html new file mode 100644 index 0000000..3e73f5d --- /dev/null +++ b/_build/html/AstronomicalData/README.html @@ -0,0 +1,337 @@ + + + + + + + + Astronomical Data in Python — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ +
+

Astronomical Data in Python

+

Astronomical Data in Python is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

This material was developed in collaboration with The Carpentries and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society.

+

I am grateful for contributions from the members of the committee – Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield – and from Erin Becker, Brett Morris and Adrian Price-Whelan.

+

The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment.

+

This material is also available in the form of Carpentries lessons, but you should be +aware that these versions might diverge in the future.

+

Prerequisites

+

This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+

Notebook 1

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 2

+

This notebook starts with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 3

+

Here are the steps in this notebook:

+
    +
  1. We’ll read back the results from the previous notebook, which we saved in a FITS file.

  2. +
  3. Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.

  4. +
  5. We’ll put those results into a Pandas DataFrame, which we’ll use to select stars near the centerline of GD-1.

  6. +
  7. Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD-1.

  8. +
  9. Finally, we’ll select and plot the stars whose proper motion is in that region.

  10. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 4

+

Here are the steps in this notebook:

+
    +
  1. Using data from the previous notebook, we’ll identify the values of proper motion for stars likely to be in GD-1.

  2. +
  3. Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.

  4. +
  5. We’ll also see how to write the results to a CSV file.

  6. +
+

That will make it possible to search a bigger region of the sky in a single query.

+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 5

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the candidate stars we identified in the previous notebook.

  2. +
  3. Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a JOIN operation to select photometry data for the candidate stars.

  4. +
  5. We’ll write the results to a file for use in the next notebook.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 6

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the data from the previous notebook and make a color-magnitude diagram.

  2. +
  3. Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect.

  4. +
  5. Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas DataFrame.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 7

+

Here are the steps in this notebook:

+
    +
  1. Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly.

  2. +
  3. The we’ll see several ways to customize figures to make them more appealing and effective.

  4. +
  5. Finally, we’ll see how to make a figure with multiple panels or subplots.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Installation instructions

+

Coming soon.

+
+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html b/_build/html/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html new file mode 100644 index 0000000..b59ee64 --- /dev/null +++ b/_build/html/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html @@ -0,0 +1,260 @@ + + + + + + + + <no title> — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + +
+ + +
+ +
+ Contents +
+ + +
+
+
+
+ +
+ +

Copyright (c) 2019 Jan Bednar

+

Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +“Software”), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions:

+

The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html b/_build/html/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html new file mode 100644 index 0000000..2b73475 --- /dev/null +++ b/_build/html/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html @@ -0,0 +1,260 @@ + + + + + + + + <no title> — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + +
+ + +
+ +
+ Contents +
+ + +
+
+
+
+ +
+ +

Copyright (c) 2019 Jan Bednar

+

Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +“Software”), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions:

+

The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/_build/jupyter_execute/01_query.html b/_build/html/AstronomicalData/_build/jupyter_execute/01_query.html new file mode 100644 index 0000000..752cca2 --- /dev/null +++ b/_build/html/AstronomicalData/_build/jupyter_execute/01_query.html @@ -0,0 +1,1384 @@ + + + + + + + + Lesson 1 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Lesson 1

+
+

Introduction

+

This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

As the abstract explains, “Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.”

+

GD-1 is a stellar stream, which is “an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.”

+

This article in Science magazine explains some of the background, including the process that led to the paper and an discussion of the scientific implications:

+
    +
  • “The streams are particularly useful for … galactic archaeology — rewinding the cosmic clock to reconstruct the assembly of the Milky Way.”

  • +
  • “They also are being used as exquisitely sensitive scales to measure the galaxy’s mass.”

  • +
  • “… the streams are well-positioned to reveal the presence of dark matter … because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.”

  • +
+
+
+

Prerequisites

+

This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.

+

We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don’t assume you have any prior experience with databases.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+
+
+

Data

+

The datasets we will work with are:

+
    +
  • Gaia, which is “a space observatory of the European Space Agency (ESA), launched in 2013 … designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision”, and

  • +
  • Pan-STARRS, The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.

  • +
+

Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +One of the goals of this workshop is to provide tools for working with large datasets.

+
+
+

Lesson 1

+

The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:

+
    +
  1. First we’ll make a connection to the Gaia server,

  2. +
  3. We will explore information about the database and the tables it contains,

  4. +
  5. We will write a query and send it to the server, and finally

  6. +
  7. We will download the response from the server.

  8. +
+

After completing this lesson, you should be able to

+
    +
  • Compose a basic query in ADQL.

  • +
  • Use queries to explore a database and its tables.

  • +
  • Use queries to download data.

  • +
  • Develop, test, and debug a query incrementally.

  • +
+
+
+

Query Language

+

In order to select data from a database, you have to compose a query, which is like a program written in a “query language”. +The query language we’ll use is ADQL, which stands for “Astronomical Data Query Language”.

+

ADQL is a dialect of SQL (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.

+

The reference manual for ADQL is here. +But you might find it easier to learn from this ADQL Cookbook.

+
+
+

Installing libraries

+

The library we’ll use to get Gaia data is Astroquery.

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+
+
+

Connecting to Gaia

+

Astroquery provides Gaia, which is an object that represents a connection to the Gaia database.

+

We can connect to the Gaia database like this:

+
+
+
from astroquery.gaia import Gaia
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
+
+
+

Optional detail

+
+

Running this import statement has the effect of creating a TAP+ connection; TAP stands for “Table Access Protocol”. It is a network protocol for sending queries to the database and getting back the results. We’re not sure why it seems to create two connections.

+
+
+
+
+

Databases and Tables

+

What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:

+
    +
  • A database is a collection of one or more named tables.

  • +
  • Each table is a 2-D array with one or more named columns of data.

  • +
+

We can use Gaia.load_tables to get the names of the tables in the Gaia database. With the option only_names=True, it loads information about the tables, called the “metadata”, not the data itself.

+
+
+
tables = Gaia.load_tables(only_names=True)
+
+
+
+
+
INFO: Retrieving tables... [astroquery.utils.tap.core]
+INFO: Parsing tables... [astroquery.utils.tap.core]
+INFO: Done. [astroquery.utils.tap.core]
+
+
+
+
+
+
+
for table in (tables):
+    print(table.get_qualified_name())
+
+
+
+
+
external.external.apassdr9
+external.external.gaiadr2_geometric_distance
+external.external.galex_ais
+external.external.ravedr5_com
+external.external.ravedr5_dr5
+external.external.ravedr5_gra
+external.external.ravedr5_on
+external.external.sdssdr13_photoprimary
+external.external.skymapperdr1_master
+external.external.tmass_xsc
+public.public.hipparcos
+public.public.hipparcos_newreduction
+public.public.hubble_sc
+public.public.igsl_source
+public.public.igsl_source_catalog_ids
+public.public.tycho2
+public.public.dual
+tap_config.tap_config.coord_sys
+tap_config.tap_config.properties
+tap_schema.tap_schema.columns
+tap_schema.tap_schema.key_columns
+tap_schema.tap_schema.keys
+tap_schema.tap_schema.schemas
+tap_schema.tap_schema.tables
+gaiadr1.gaiadr1.aux_qso_icrf2_match
+gaiadr1.gaiadr1.ext_phot_zero_point
+gaiadr1.gaiadr1.allwise_best_neighbour
+gaiadr1.gaiadr1.allwise_neighbourhood
+gaiadr1.gaiadr1.gsc23_best_neighbour
+gaiadr1.gaiadr1.gsc23_neighbourhood
+gaiadr1.gaiadr1.ppmxl_best_neighbour
+gaiadr1.gaiadr1.ppmxl_neighbourhood
+gaiadr1.gaiadr1.sdss_dr9_best_neighbour
+gaiadr1.gaiadr1.sdss_dr9_neighbourhood
+gaiadr1.gaiadr1.tmass_best_neighbour
+gaiadr1.gaiadr1.tmass_neighbourhood
+gaiadr1.gaiadr1.ucac4_best_neighbour
+gaiadr1.gaiadr1.ucac4_neighbourhood
+gaiadr1.gaiadr1.urat1_best_neighbour
+gaiadr1.gaiadr1.urat1_neighbourhood
+gaiadr1.gaiadr1.cepheid
+gaiadr1.gaiadr1.phot_variable_time_series_gfov
+gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters
+gaiadr1.gaiadr1.rrlyrae
+gaiadr1.gaiadr1.variable_summary
+gaiadr1.gaiadr1.allwise_original_valid
+gaiadr1.gaiadr1.gsc23_original_valid
+gaiadr1.gaiadr1.ppmxl_original_valid
+gaiadr1.gaiadr1.sdssdr9_original_valid
+gaiadr1.gaiadr1.tmass_original_valid
+gaiadr1.gaiadr1.ucac4_original_valid
+gaiadr1.gaiadr1.urat1_original_valid
+gaiadr1.gaiadr1.gaia_source
+gaiadr1.gaiadr1.tgas_source
+gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id
+gaiadr2.gaiadr2.aux_iers_gdr2_cross_id
+gaiadr2.gaiadr2.aux_sso_orbit_residuals
+gaiadr2.gaiadr2.aux_sso_orbits
+gaiadr2.gaiadr2.dr1_neighbourhood
+gaiadr2.gaiadr2.allwise_best_neighbour
+gaiadr2.gaiadr2.allwise_neighbourhood
+gaiadr2.gaiadr2.apassdr9_best_neighbour
+gaiadr2.gaiadr2.apassdr9_neighbourhood
+gaiadr2.gaiadr2.gsc23_best_neighbour
+gaiadr2.gaiadr2.gsc23_neighbourhood
+gaiadr2.gaiadr2.hipparcos2_best_neighbour
+gaiadr2.gaiadr2.hipparcos2_neighbourhood
+gaiadr2.gaiadr2.panstarrs1_best_neighbour
+gaiadr2.gaiadr2.panstarrs1_neighbourhood
+gaiadr2.gaiadr2.ppmxl_best_neighbour
+gaiadr2.gaiadr2.ppmxl_neighbourhood
+gaiadr2.gaiadr2.ravedr5_best_neighbour
+gaiadr2.gaiadr2.ravedr5_neighbourhood
+gaiadr2.gaiadr2.sdssdr9_best_neighbour
+gaiadr2.gaiadr2.sdssdr9_neighbourhood
+gaiadr2.gaiadr2.tmass_best_neighbour
+gaiadr2.gaiadr2.tmass_neighbourhood
+gaiadr2.gaiadr2.tycho2_best_neighbour
+gaiadr2.gaiadr2.tycho2_neighbourhood
+gaiadr2.gaiadr2.urat1_best_neighbour
+gaiadr2.gaiadr2.urat1_neighbourhood
+gaiadr2.gaiadr2.sso_observation
+gaiadr2.gaiadr2.sso_source
+gaiadr2.gaiadr2.vari_cepheid
+gaiadr2.gaiadr2.vari_classifier_class_definition
+gaiadr2.gaiadr2.vari_classifier_definition
+gaiadr2.gaiadr2.vari_classifier_result
+gaiadr2.gaiadr2.vari_long_period_variable
+gaiadr2.gaiadr2.vari_rotation_modulation
+gaiadr2.gaiadr2.vari_rrlyrae
+gaiadr2.gaiadr2.vari_short_timescale
+gaiadr2.gaiadr2.vari_time_series_statistics
+gaiadr2.gaiadr2.panstarrs1_original_valid
+gaiadr2.gaiadr2.gaia_source
+gaiadr2.gaiadr2.ruwe
+
+
+
+
+

So that’s a lot of tables. The ones we’ll use are:

+
    +
  • gaiadr2.gaia_source, which contains Gaia data from data release 2,

  • +
  • gaiadr2.panstarrs1_original_valid, which contains the photometry data we’ll use from PanSTARRS, and

  • +
  • gaiadr2.panstarrs1_best_neighbour, which we’ll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.

  • +
+

We can use load_table (not load_tables) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata.

+
+
+
meta = Gaia.load_table('gaiadr2.gaia_source')
+meta
+
+
+
+
+
Retrieving table 'gaiadr2.gaia_source'
+Parsing table 'gaiadr2.gaia_source'...
+Done.
+
+
+
<astroquery.utils.tap.model.taptable.TapTableMeta at 0x7f922376e0a0>
+
+
+
+
+

Jupyter shows that the result is an object of type TapTableMeta, but it does not display the contents.

+

To see the metadata, we have to print the object.

+
+
+
print(meta)
+
+
+
+
+
TAP Table name: gaiadr2.gaiadr2.gaia_source
+Description: This table has an entry for every Gaia observed source as listed in the
+Main Database accumulating catalogue version from which the catalogue
+release has been generated. It contains the basic source parameters,
+that is only final data (no epoch data) and no spectra (neither final
+nor epoch).
+Num. columns: 96
+
+
+
+
+

Notice one gotcha: in the list of table names, this table appears as gaiadr2.gaiadr2.gaia_source, but when we load the metadata, we refer to it as gaiadr2.gaia_source.

+

Exercise: Go back and try

+
meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')
+
+
+

What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?

+
+
+

Columns

+

The following loop prints the names of the columns in the table.

+
+
+
for column in meta.columns:
+    print(column.name)
+
+
+
+
+
solution_id
+designation
+source_id
+random_index
+ref_epoch
+ra
+ra_error
+dec
+dec_error
+parallax
+parallax_error
+parallax_over_error
+pmra
+pmra_error
+pmdec
+pmdec_error
+ra_dec_corr
+ra_parallax_corr
+ra_pmra_corr
+ra_pmdec_corr
+dec_parallax_corr
+dec_pmra_corr
+dec_pmdec_corr
+parallax_pmra_corr
+parallax_pmdec_corr
+pmra_pmdec_corr
+astrometric_n_obs_al
+astrometric_n_obs_ac
+astrometric_n_good_obs_al
+astrometric_n_bad_obs_al
+astrometric_gof_al
+astrometric_chi2_al
+astrometric_excess_noise
+astrometric_excess_noise_sig
+astrometric_params_solved
+astrometric_primary_flag
+astrometric_weight_al
+astrometric_pseudo_colour
+astrometric_pseudo_colour_error
+mean_varpi_factor_al
+astrometric_matched_observations
+visibility_periods_used
+astrometric_sigma5d_max
+frame_rotator_object_type
+matched_observations
+duplicated_source
+phot_g_n_obs
+phot_g_mean_flux
+phot_g_mean_flux_error
+phot_g_mean_flux_over_error
+phot_g_mean_mag
+phot_bp_n_obs
+phot_bp_mean_flux
+phot_bp_mean_flux_error
+phot_bp_mean_flux_over_error
+phot_bp_mean_mag
+phot_rp_n_obs
+phot_rp_mean_flux
+phot_rp_mean_flux_error
+phot_rp_mean_flux_over_error
+phot_rp_mean_mag
+phot_bp_rp_excess_factor
+phot_proc_mode
+bp_rp
+bp_g
+g_rp
+radial_velocity
+radial_velocity_error
+rv_nb_transits
+rv_template_teff
+rv_template_logg
+rv_template_fe_h
+phot_variable_flag
+l
+b
+ecl_lon
+ecl_lat
+priam_flags
+teff_val
+teff_percentile_lower
+teff_percentile_upper
+a_g_val
+a_g_percentile_lower
+a_g_percentile_upper
+e_bp_min_rp_val
+e_bp_min_rp_percentile_lower
+e_bp_min_rp_percentile_upper
+flame_flags
+radius_val
+radius_percentile_lower
+radius_percentile_upper
+lum_val
+lum_percentile_lower
+lum_percentile_upper
+datalink_url
+epoch_photometry_url
+
+
+
+
+

You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +To find out what the columns mean, read the documentation.

+

If you want to know what can go wrong when you don’t read the documentation, you might like this article.

+

Exercise: One of the other tables we’ll use is gaiadr2.gaiadr2.panstarrs1_original_valid. Use load_table to get the metadata for this table. How many columns are there and what are their names?

+

Hint: Remember the gotcha we mentioned earlier.

+
+
+
# Solution
+
+meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')
+print(meta2)
+
+
+
+
+
Retrieving table 'gaiadr2.panstarrs1_original_valid'
+Parsing table 'gaiadr2.panstarrs1_original_valid'...
+Done.
+TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid
+Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is
+a system for wide-field astronomical imaging developed and operated by
+the Institute for Astronomy at the University of Hawaii. Pan-STARRS1
+(PS1) is the first part of Pan-STARRS to be completed and is the basis
+for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and
+its 1.4 Gigapixel camera to image the sky in five broadband filters (g,
+r, i, z, y).
+
+The current table contains a filtered subsample of the 10 723 304 629
+entries listed in the original ObjectThin table.
+We used only ObjectThin and MeanObject tables to extract
+panstarrs1OriginalValid table, this means that objects detected only in
+stack images are not included here. The main reason for us to avoid the
+use of objects detected in stack images is that their astrometry is not
+as good as the mean objects astrometry: “The stack positions (raStack,
+decStack) have considerably larger systematic astrometric errors than
+the mean epoch positions (raMean, decMean).” The astrometry for the
+MeanObject positions uses Gaia DR1 as a reference catalog, while the
+stack positions use 2MASS as a reference catalog.
+
+In details, we filtered out all objects where:
+
+-   nDetections = 1
+
+-   no good quality data in Pan-STARRS, objInfoFlag 33554432 not set
+
+-   mean astrometry could not be measured, objInfoFlag 524288 set
+
+-   stack position used for mean astrometry, objInfoFlag 1048576 set
+
+-   error on all magnitudes equal to 0 or to -999;
+
+-   all magnitudes set to -999;
+
+-   error on RA or DEC greater than 1 arcsec.
+
+The number of objects in panstarrs1OriginalValid is 2 264 263 282.
+
+The panstarrs1OriginalValid table contains only a subset of the columns
+available in the combined ObjectThin and MeanObject tables. A
+description of the original ObjectThin and MeanObjects tables can be
+found at:
+https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables
+
+Download:
+http://mastweb.stsci.edu/ps1casjobs/home.aspx
+Documentation:
+https://outerspace.stsci.edu/display/PANSTARRS
+http://pswww.ifa.hawaii.edu/pswww/
+References:
+The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560
+Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,
+arXiv:1612.05240
+Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.
+Z., et al. 2016, arXiv:1612.05245
+Pan-STARRS Pixel Analysis: Source Detection and Characterization,
+Magnier, E. A., et al. 2016, arXiv:1612.05244
+Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et
+al. 2016, arXiv:1612.05242
+The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.
+2016, arXiv:1612.05243
+
+Catalogue curator:
+SSDC - ASI Space Science Data Center
+https://www.ssdc.asi.it/
+Num. columns: 26
+
+
+
+
+
+
+
# Solution
+
+for column in meta2.columns:
+    print(column.name)
+
+
+
+
+
obj_name
+obj_id
+ra
+dec
+ra_error
+dec_error
+epoch_mean
+g_mean_psf_mag
+g_mean_psf_mag_error
+g_flags
+r_mean_psf_mag
+r_mean_psf_mag_error
+r_flags
+i_mean_psf_mag
+i_mean_psf_mag_error
+i_flags
+z_mean_psf_mag
+z_mean_psf_mag_error
+z_flags
+y_mean_psf_mag
+y_mean_psf_mag_error
+y_flags
+n_detections
+zone_id
+obj_info_flag
+quality_flag
+
+
+
+
+
+
+

Writing queries

+

By now you might be wondering how we actually download the data. With tables this big, you generally don’t. Instead, you use queries to select only the data you want.

+

A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.

+

Here’s an example of an ADQL query.

+
+
+
query1 = """SELECT 
+TOP 10
+source_id, ref_epoch, ra, dec, parallax 
+FROM gaiadr2.gaia_source"""
+
+
+
+
+

Python note: We use a triple-quoted string here so we can include line breaks in the query, which makes it easier to read.

+

The words in uppercase are ADQL keywords:

+
    +
  • SELECT indicates that we are selecting data (as opposed to adding or modifying data).

  • +
  • TOP indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.

  • +
  • FROM specifies which table we want data from.

  • +
+

The third line is a list of column names, indicating which columns we want.

+

In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive.

+

To run this query, we use the Gaia object, which represents our connection to the Gaia database, and invoke launch_job:

+
+
+
job1 = Gaia.launch_job(query1)
+job1
+
+
+
+
+
<astroquery.utils.tap.model.job.Job at 0x7f9222e9cb20>
+
+
+
+
+

The result is an object that represents the job running on a Gaia server.

+

If you print it, it displays metadata for the forthcoming table.

+
+
+
print(job1)
+
+
+
+
+
<Table length=10>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090721.xml.gz
+Results: None
+
+
+
+
+

Don’t worry about Results: None. That does not actually mean there are no results.

+

However, Phase: COMPLETED indicates that the job is complete, so we can get the results like this:

+
+
+
results1 = job1.get_results()
+type(results1)
+
+
+
+
+
astropy.table.table.Table
+
+
+
+
+

Optional detail: Why is table repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It’s like the Linnean name for gorilla, which is Gorilla Gorilla Gorilla.

+

The result is an Astropy Table, which is similar to a table in an SQL database except:

+
    +
  • SQL databases are stored on disk drives, so they are persistent; that is, they “survive” even if you turn off the computer. An Astropy Table is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).

  • +
  • SQL databases are designed to process queries. An Astropy Table can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.

  • +
+

Jupyter knows how to display the contents of a Table.

+
+
+
results1
+
+
+
+
+
Table length=10 + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
+
+

Each column has a name, units, and a data type.

+

For example, the units of ra and dec are degrees, and their data type is float64, which is a 64-bit floating-point number, used to store measurements with a fraction part.

+

This information comes from the Gaia database, and has been stored in the Astropy Table by Astroquery.

+

Exercise: Read the documentation of this table and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?

+
+
+

Asynchronous queries

+

launch_job asks the server to run the job “synchronously”, which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run “asynchronously”, which mean they might take longer to get started.

+

If you are not sure how many rows a query will return, you can use the SQL command COUNT to find out how many rows are in the result without actually returning them. We’ll see an example of this later.

+

The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.

+

For anonymous users, files are kept for three days.

+

As an example, let’s try a query that’s similar to query1, with two changes:

+
    +
  • It selects the first 3000 rows, so it is bigger than we should run synchronously.

  • +
  • It uses a new keyword, WHERE.

  • +
+
+
+
query2 = """SELECT TOP 3000
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+"""
+
+
+
+
+

A WHERE clause indicates which rows we want; in this case, the query selects only rows “where” parallax is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We’ll use this clause to exclude nearby stars that are unlikely to be part of GD-1.

+

WHERE is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.

+

We use launch_job_async to submit an asynchronous query.

+
+
+
job2 = Gaia.launch_job_async(query2)
+print(job2)
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=3000>
+   name    dtype  unit                            description                            
+--------- ------- ---- ------------------------------------------------------------------
+source_id   int64      Unique source identifier (unique within a particular Data Release)
+ref_epoch float64   yr                                                    Reference epoch
+       ra float64  deg                                                    Right ascension
+      dec float64  deg                                                        Declination
+ parallax float64  mas                                                           Parallax
+Jobid: 1601903242219O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201005090722.vot
+Results: None
+
+
+
+
+

And here are the results.

+
+
+
results2 = job2.get_results()
+results2
+
+
+
+
+
Table length=3000 + + + + + + + + + + + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
+
+

You might notice that some values of parallax are negative. As this FAQ explains, “Negative parallaxes are caused by errors in the observations.” Negative parallaxes have “no physical meaning,” but they can be a “useful diagnostic on the quality of the astrometric solution.”

+

Later we will see an example where we use parallax and parallax_error to identify stars where the distance estimate is likely to be inaccurate.

+

Exercise: The clauses in a query have to be in the right order. Go back and change the order of the clauses in query2 and run it again.

+

The query should fail, but notice that you don’t get much useful debugging information.

+

For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:

+
    +
  • Whenever possible, start with a working query, either an example you find online or a query you have used in the past.

  • +
  • Make small changes and test each change before you continue.

  • +
  • While you are debugging, use TOP to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time.

  • +
  • Launching test queries synchronously might make them start faster, too.

  • +
+
+
+

Operators

+

In a WHERE clause, you can use any of the SQL comparison operators:

+
    +
  • >: greater than

  • +
  • <: less than

  • +
  • >=: greater than or equal

  • +
  • <=: less than or equal

  • +
  • =: equal

  • +
  • != or <>: not equal

  • +
+

Most of these are the same as Python, but some are not. In particular, notice that the equality operator is =, not ==. +Be careful to keep your Python out of your ADQL!

+

You can combine comparisons using the logical operators:

+
    +
  • AND: true if both comparisons are true

  • +
  • OR: true if either or both comparisons are true

  • +
+

Finally, you can use NOT to invert the result of a comparison.

+

Exercise: Read about SQL operators here and then modify the previous query to select rows where bp_rp is between -0.75 and 2.

+

You can read about this variable here.

+
+
+
# Solution
+
+# This is what most people will probably do
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp > -0.75 AND bp_rp < 2
+"""
+
+
+
+
+
+
+
# Solution
+
+# But if someone notices the BETWEEN operator, 
+# they might do this
+
+query = """SELECT TOP 10
+source_id, ref_epoch, ra, dec, parallax
+FROM gaiadr2.gaia_source
+WHERE parallax < 1 
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+

This Hertzsprung-Russell diagram shows the BP-RP color and luminosity of stars in the Gaia catalog.

+

Selecting stars with bp-rp less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.

+
+
+

Cleaning up

+

Asynchronous jobs have a jobid.

+
+
+
job1.jobid, job2.jobid
+
+
+
+
+
(None, '1601903242219O')
+
+
+
+
+

Which you can use to remove the job from the server.

+
+
+
Gaia.remove_jobs([job2.jobid])
+
+
+
+
+
Removed jobs: '['1601903242219O']'.
+
+
+
+
+

If you don’t remove it job from the server, it will be removed eventually, so don’t feel too bad if you don’t clean up after yourself.

+
+
+

Formatting queries

+

So far the queries have been string “literals”, meaning that the entire string is part of the program. +But writing queries yourself can be slow, repetitive, and error-prone.

+

It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the string format method.

+

As an example, we’ll divide the previous query into two parts; a list of column names and a “base” for the query that contains everything except the column names.

+

Here’s the list of columns we’ll select.

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

And here’s the base; it’s a string that contains at least one format specifier in curly brackets (braces).

+
+
+
query3_base = """SELECT TOP 10 
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+

This base query contains one format specifier, {columns}, which is a placeholder for the list of column names we will provide.

+

To assemble the query, we invoke format on the base string and provide a keyword argument that assigns a value to columns.

+
+
+
query3 = query3_base.format(columns=columns)
+
+
+
+
+

The result is a string with line breaks. If you display it, the line breaks appear as \n.

+
+
+
query3
+
+
+
+
+
'SELECT TOP 10 \nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\nFROM gaiadr2.gaia_source\nWHERE parallax < 1\n  AND bp_rp BETWEEN -0.75 AND 2\n'
+
+
+
+
+

But if you print it, the line breaks appear as… line breaks.

+
+
+
print(query3)
+
+
+
+
+
SELECT TOP 10 
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2
+
+
+
+
+

Notice that the format specifier has been replaced with the value of columns.

+

Let’s run it and see if it works:

+
+
+
job3 = Gaia.launch_job(query3)
+print(job3)
+
+
+
+
+
<Table length=10>
+      name       dtype    unit                              description                             n_bad
+--------------- ------- -------- ------------------------------------------------------------------ -----
+      source_id   int64          Unique source identifier (unique within a particular Data Release)     0
+             ra float64      deg                                                    Right ascension     0
+            dec float64      deg                                                        Declination     0
+           pmra float64 mas / yr                         Proper motion in right ascension direction     0
+          pmdec float64 mas / yr                             Proper motion in declination direction     0
+       parallax float64      mas                                                           Parallax     0
+ parallax_error float64      mas                                         Standard error of parallax     0
+radial_velocity float64   km / s                                                    Radial velocity    10
+Jobid: None
+Phase: COMPLETED
+Owner: None
+Output file: sync_20201005090726.xml.gz
+Results: None
+
+
+
+
+
+
+
results3 = job3.get_results()
+results3
+
+
+
+
+
Table length=10 + + + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
+
+

Good so far.

+

Exercise: This query always selects sources with parallax less than 1. But suppose you want to take that upper bound as an input.

+

Modify query3_base to replace 1 with a format specifier like {max_parallax}. Now, when you call format, add a keyword argument that assigns a value to max_parallax, and confirm that the format specifier gets replaced with the value you provide.

+
+
+
# Solution
+
+query4_base = """SELECT TOP 10
+{columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < {max_parallax} AND 
+bp_rp BETWEEN -0.75 AND 2
+"""
+
+
+
+
+
+
+
# Solution
+
+query4 = query4_base.format(columns=columns,
+                          max_parallax=0.5)
+print(query)
+
+
+
+
+
SELECT TOP 10
+source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 0.5 AND 
+bp_rp BETWEEN -0.75 AND 2
+
+
+
+
+

Style note: You might notice that the variable names in this notebook are numbered, like query1, query2, etc.

+

The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it’s less likely that you will get unexpected interactions.

+

A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.

+

What do you think of this choice? Are there alternatives you prefer?

+
+
+

Summary

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+
+
+

Best practices

+
    +
  • If you can’t download an entire dataset (or it’s not practical) use queries to select the data you need.

  • +
  • Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Use ADQL features like TOP and COUNT to test before you run a query that might return a lot of data.

  • +
  • If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn’t seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.

  • +
  • ADQL and SQL are not case-sensitive, so you don’t have to capitalize the keywords, but you should.

  • +
  • ADQL and SQL don’t require you to break a query into multiple lines, but you should.

  • +
+

Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don’t have the values you expect.

+

There are a few things you can do to mitigate these problems:

+
    +
  • Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.

  • +
  • Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/AstronomicalData/_build/jupyter_execute/02_coords.html b/_build/html/AstronomicalData/_build/jupyter_execute/02_coords.html new file mode 100644 index 0000000..50db850 --- /dev/null +++ b/_build/html/AstronomicalData/_build/jupyter_execute/02_coords.html @@ -0,0 +1,1821 @@ + + + + + + + + Lesson 2 — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Lesson 2

+

This is the second in a series of lessons related to astronomy data.

+

As a running example, we are replicating parts of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.

+

In this notebook, we’ll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be.

+

We’ll start with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we’ll:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

After completing this lesson, you should be able to

+
    +
  • Use Python string formatting to compose more complex ADQL queries.

  • +
  • Work with coordinates and other quantities that have units.

  • +
  • Download the results of a query and store them in a file.

  • +
+
+

Installing libraries

+

If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.

+

If you are running this notebook on your own computer, you might have to install these libraries yourself.

+

If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.

+

TODO: Add a link to the instructions.

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+
+
+

Selecting a region

+

One of the most common ways to restrict a query is to select stars in a particular region of the sky.

+

For example, here’s a query from the Gaia archive documentation that selects “all the objects … in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).”

+
+
+
query = """
+SELECT 
+TOP 10 source_id
+FROM gaiadr2.gaia_source
+WHERE 1=CONTAINS(
+  POINT(ra, dec),
+  CIRCLE(266.41683, -29.00781, 0.08333333))
+"""
+
+
+
+
+

This query uses three keywords that are specific to ADQL (not SQL):

+
    +
  • POINT: a location in ICRS coordinates, specified in degrees of right ascension and declination.

  • +
  • CIRCLE: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.

  • +
  • CONTAINS: a function that returns 1 if a POINT is contained in a shape and 0 otherwise.

  • +
+

Here is the documentation of CONTAINS.

+

A query like this is called a cone search because it selects stars in a cone.

+

Here’s how we run it.

+
+
+
from astroquery.gaia import Gaia
+
+job = Gaia.launch_job(query)
+result = job.get_results()
+result
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
Table length=10 + + + + + + + + + + + + + +
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
+
+

Exercise: When you are debugging queries like this, you can use TOP to limit the size of the results, but then you still don’t know how big the results will be.

+

An alternative is to use COUNT, which asks for the number of rows that would be selected, but it does not return them.

+

In the previous query, replace TOP 10 source_id with COUNT(source_id) and run the query again. How many stars has Gaia identified in the cone we searched?

+
+
+

Getting GD-1 Data

+

From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:

+

Along the axis of right ascension (\(\phi_1\)) the figure extends from -100 to 20 degrees.

+

Along the axis of declination (\(\phi_2\)) the figure extends from about -8 to 4 degrees.

+

Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so

+
    +
  • That would be difficult to work with,

  • +
  • As anonymous users, we are limited to 3 million rows in a single query, and

  • +
  • While we are developing and testing code, it will be faster to work with a smaller dataset.

  • +
+

So we’ll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

But first we let’s see how to represent quantities with units like degrees.

+
+
+

Working with coordinates

+

Coordinates are physical quantities, which means that they have two parts, a value and a unit.

+

For example, the coordinate \(30^{\circ}\) has value 30 and its units are degrees.

+

Until recently, most scientific computation was done with values only; units were left out of the program altogether, often with disastrous results.

+

Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.

+

To use Astropy units, we import them like this:

+
+
+
import astropy.units as u
+
+u
+
+
+
+
+
<module 'astropy.units' from '/home/downey/anaconda3/envs/AstronomicalData/lib/python3.8/site-packages/astropy/units/__init__.py'>
+
+
+
+
+

u is an object that contains most common units and all SI units.

+

You can use dir to list them, but you should also read the documentation.

+
+
+
dir(u)
+
+
+
+
+
['A',
+ 'AA',
+ 'AB',
+ 'ABflux',
+ 'ABmag',
+ 'AU',
+ 'Angstrom',
+ 'B',
+ 'Ba',
+ 'Barye',
+ 'Bi',
+ 'Biot',
+ 'Bol',
+ 'Bq',
+ 'C',
+ 'Celsius',
+ 'Ci',
+ 'CompositeUnit',
+ 'D',
+ 'Da',
+ 'Dalton',
+ 'Debye',
+ 'Decibel',
+ 'DecibelUnit',
+ 'Dex',
+ 'DexUnit',
+ 'EA',
+ 'EAU',
+ 'EB',
+ 'EBa',
+ 'EC',
+ 'ED',
+ 'EF',
+ 'EG',
+ 'EGal',
+ 'EH',
+ 'EHz',
+ 'EJ',
+ 'EJy',
+ 'EK',
+ 'EL',
+ 'EN',
+ 'EOhm',
+ 'EP',
+ 'EPa',
+ 'ER',
+ 'ERy',
+ 'ES',
+ 'ESt',
+ 'ET',
+ 'EV',
+ 'EW',
+ 'EWb',
+ 'Ea',
+ 'Eadu',
+ 'Earcmin',
+ 'Earcsec',
+ 'Eau',
+ 'Eb',
+ 'Ebarn',
+ 'Ebeam',
+ 'Ebin',
+ 'Ebit',
+ 'Ebyte',
+ 'Ecd',
+ 'Echan',
+ 'Ecount',
+ 'Ect',
+ 'Ed',
+ 'Edeg',
+ 'Edyn',
+ 'EeV',
+ 'Eerg',
+ 'Eg',
+ 'Eh',
+ 'EiB',
+ 'Eib',
+ 'Eibit',
+ 'Eibyte',
+ 'Ek',
+ 'El',
+ 'Elm',
+ 'Elx',
+ 'Elyr',
+ 'Em',
+ 'Emag',
+ 'Emin',
+ 'Emol',
+ 'Eohm',
+ 'Epc',
+ 'Eph',
+ 'Ephoton',
+ 'Epix',
+ 'Epixel',
+ 'Erad',
+ 'Es',
+ 'Esr',
+ 'Eu',
+ 'Evox',
+ 'Evoxel',
+ 'Eyr',
+ 'F',
+ 'Farad',
+ 'Fr',
+ 'Franklin',
+ 'FunctionQuantity',
+ 'FunctionUnitBase',
+ 'G',
+ 'GA',
+ 'GAU',
+ 'GB',
+ 'GBa',
+ 'GC',
+ 'GD',
+ 'GF',
+ 'GG',
+ 'GGal',
+ 'GH',
+ 'GHz',
+ 'GJ',
+ 'GJy',
+ 'GK',
+ 'GL',
+ 'GN',
+ 'GOhm',
+ 'GP',
+ 'GPa',
+ 'GR',
+ 'GRy',
+ 'GS',
+ 'GSt',
+ 'GT',
+ 'GV',
+ 'GW',
+ 'GWb',
+ 'Ga',
+ 'Gadu',
+ 'Gal',
+ 'Garcmin',
+ 'Garcsec',
+ 'Gau',
+ 'Gauss',
+ 'Gb',
+ 'Gbarn',
+ 'Gbeam',
+ 'Gbin',
+ 'Gbit',
+ 'Gbyte',
+ 'Gcd',
+ 'Gchan',
+ 'Gcount',
+ 'Gct',
+ 'Gd',
+ 'Gdeg',
+ 'Gdyn',
+ 'GeV',
+ 'Gerg',
+ 'Gg',
+ 'Gh',
+ 'GiB',
+ 'Gib',
+ 'Gibit',
+ 'Gibyte',
+ 'Gk',
+ 'Gl',
+ 'Glm',
+ 'Glx',
+ 'Glyr',
+ 'Gm',
+ 'Gmag',
+ 'Gmin',
+ 'Gmol',
+ 'Gohm',
+ 'Gpc',
+ 'Gph',
+ 'Gphoton',
+ 'Gpix',
+ 'Gpixel',
+ 'Grad',
+ 'Gs',
+ 'Gsr',
+ 'Gu',
+ 'Gvox',
+ 'Gvoxel',
+ 'Gyr',
+ 'H',
+ 'Henry',
+ 'Hertz',
+ 'Hz',
+ 'IrreducibleUnit',
+ 'J',
+ 'Jansky',
+ 'Joule',
+ 'Jy',
+ 'K',
+ 'Kayser',
+ 'Kelvin',
+ 'KiB',
+ 'Kib',
+ 'Kibit',
+ 'Kibyte',
+ 'L',
+ 'L_bol',
+ 'L_sun',
+ 'LogQuantity',
+ 'LogUnit',
+ 'Lsun',
+ 'MA',
+ 'MAU',
+ 'MB',
+ 'MBa',
+ 'MC',
+ 'MD',
+ 'MF',
+ 'MG',
+ 'MGal',
+ 'MH',
+ 'MHz',
+ 'MJ',
+ 'MJy',
+ 'MK',
+ 'ML',
+ 'MN',
+ 'MOhm',
+ 'MP',
+ 'MPa',
+ 'MR',
+ 'MRy',
+ 'MS',
+ 'MSt',
+ 'MT',
+ 'MV',
+ 'MW',
+ 'MWb',
+ 'M_bol',
+ 'M_e',
+ 'M_earth',
+ 'M_jup',
+ 'M_jupiter',
+ 'M_p',
+ 'M_sun',
+ 'Ma',
+ 'Madu',
+ 'MagUnit',
+ 'Magnitude',
+ 'Marcmin',
+ 'Marcsec',
+ 'Mau',
+ 'Mb',
+ 'Mbarn',
+ 'Mbeam',
+ 'Mbin',
+ 'Mbit',
+ 'Mbyte',
+ 'Mcd',
+ 'Mchan',
+ 'Mcount',
+ 'Mct',
+ 'Md',
+ 'Mdeg',
+ 'Mdyn',
+ 'MeV',
+ 'Mearth',
+ 'Merg',
+ 'Mg',
+ 'Mh',
+ 'MiB',
+ 'Mib',
+ 'Mibit',
+ 'Mibyte',
+ 'Mjup',
+ 'Mjupiter',
+ 'Mk',
+ 'Ml',
+ 'Mlm',
+ 'Mlx',
+ 'Mlyr',
+ 'Mm',
+ 'Mmag',
+ 'Mmin',
+ 'Mmol',
+ 'Mohm',
+ 'Mpc',
+ 'Mph',
+ 'Mphoton',
+ 'Mpix',
+ 'Mpixel',
+ 'Mrad',
+ 'Ms',
+ 'Msr',
+ 'Msun',
+ 'Mu',
+ 'Mvox',
+ 'Mvoxel',
+ 'Myr',
+ 'N',
+ 'NamedUnit',
+ 'Newton',
+ 'Ohm',
+ 'P',
+ 'PA',
+ 'PAU',
+ 'PB',
+ 'PBa',
+ 'PC',
+ 'PD',
+ 'PF',
+ 'PG',
+ 'PGal',
+ 'PH',
+ 'PHz',
+ 'PJ',
+ 'PJy',
+ 'PK',
+ 'PL',
+ 'PN',
+ 'POhm',
+ 'PP',
+ 'PPa',
+ 'PR',
+ 'PRy',
+ 'PS',
+ 'PSt',
+ 'PT',
+ 'PV',
+ 'PW',
+ 'PWb',
+ 'Pa',
+ 'Padu',
+ 'Parcmin',
+ 'Parcsec',
+ 'Pascal',
+ 'Pau',
+ 'Pb',
+ 'Pbarn',
+ 'Pbeam',
+ 'Pbin',
+ 'Pbit',
+ 'Pbyte',
+ 'Pcd',
+ 'Pchan',
+ 'Pcount',
+ 'Pct',
+ 'Pd',
+ 'Pdeg',
+ 'Pdyn',
+ 'PeV',
+ 'Perg',
+ 'Pg',
+ 'Ph',
+ 'PiB',
+ 'Pib',
+ 'Pibit',
+ 'Pibyte',
+ 'Pk',
+ 'Pl',
+ 'Plm',
+ 'Plx',
+ 'Plyr',
+ 'Pm',
+ 'Pmag',
+ 'Pmin',
+ 'Pmol',
+ 'Pohm',
+ 'Ppc',
+ 'Pph',
+ 'Pphoton',
+ 'Ppix',
+ 'Ppixel',
+ 'Prad',
+ 'PrefixUnit',
+ 'Ps',
+ 'Psr',
+ 'Pu',
+ 'Pvox',
+ 'Pvoxel',
+ 'Pyr',
+ 'Quantity',
+ 'QuantityInfo',
+ 'QuantityInfoBase',
+ 'R',
+ 'R_earth',
+ 'R_jup',
+ 'R_jupiter',
+ 'R_sun',
+ 'Rayleigh',
+ 'Rearth',
+ 'Rjup',
+ 'Rjupiter',
+ 'Rsun',
+ 'Ry',
+ 'S',
+ 'ST',
+ 'STflux',
+ 'STmag',
+ 'Siemens',
+ 'SpecificTypeQuantity',
+ 'St',
+ 'Sun',
+ 'T',
+ 'TA',
+ 'TAU',
+ 'TB',
+ 'TBa',
+ 'TC',
+ 'TD',
+ 'TF',
+ 'TG',
+ 'TGal',
+ 'TH',
+ 'THz',
+ 'TJ',
+ 'TJy',
+ 'TK',
+ 'TL',
+ 'TN',
+ 'TOhm',
+ 'TP',
+ 'TPa',
+ 'TR',
+ 'TRy',
+ 'TS',
+ 'TSt',
+ 'TT',
+ 'TV',
+ 'TW',
+ 'TWb',
+ 'Ta',
+ 'Tadu',
+ 'Tarcmin',
+ 'Tarcsec',
+ 'Tau',
+ 'Tb',
+ 'Tbarn',
+ 'Tbeam',
+ 'Tbin',
+ 'Tbit',
+ 'Tbyte',
+ 'Tcd',
+ 'Tchan',
+ 'Tcount',
+ 'Tct',
+ 'Td',
+ 'Tdeg',
+ 'Tdyn',
+ 'TeV',
+ 'Terg',
+ 'Tesla',
+ 'Tg',
+ 'Th',
+ 'TiB',
+ 'Tib',
+ 'Tibit',
+ 'Tibyte',
+ 'Tk',
+ 'Tl',
+ 'Tlm',
+ 'Tlx',
+ 'Tlyr',
+ 'Tm',
+ 'Tmag',
+ 'Tmin',
+ 'Tmol',
+ 'Tohm',
+ 'Tpc',
+ 'Tph',
+ 'Tphoton',
+ 'Tpix',
+ 'Tpixel',
+ 'Trad',
+ 'Ts',
+ 'Tsr',
+ 'Tu',
+ 'Tvox',
+ 'Tvoxel',
+ 'Tyr',
+ 'Unit',
+ 'UnitBase',
+ 'UnitConversionError',
+ 'UnitTypeError',
+ 'UnitsError',
+ 'UnitsWarning',
+ 'UnrecognizedUnit',
+ 'V',
+ 'Volt',
+ 'W',
+ 'Watt',
+ 'Wb',
+ 'Weber',
+ 'YA',
+ 'YAU',
+ 'YB',
+ 'YBa',
+ 'YC',
+ 'YD',
+ 'YF',
+ 'YG',
+ 'YGal',
+ 'YH',
+ 'YHz',
+ 'YJ',
+ 'YJy',
+ 'YK',
+ 'YL',
+ 'YN',
+ 'YOhm',
+ 'YP',
+ 'YPa',
+ 'YR',
+ 'YRy',
+ 'YS',
+ 'YSt',
+ 'YT',
+ 'YV',
+ 'YW',
+ 'YWb',
+ 'Ya',
+ 'Yadu',
+ 'Yarcmin',
+ 'Yarcsec',
+ 'Yau',
+ 'Yb',
+ 'Ybarn',
+ 'Ybeam',
+ 'Ybin',
+ 'Ybit',
+ 'Ybyte',
+ 'Ycd',
+ 'Ychan',
+ 'Ycount',
+ 'Yct',
+ 'Yd',
+ 'Ydeg',
+ 'Ydyn',
+ 'YeV',
+ 'Yerg',
+ 'Yg',
+ 'Yh',
+ 'Yk',
+ 'Yl',
+ 'Ylm',
+ 'Ylx',
+ 'Ylyr',
+ 'Ym',
+ 'Ymag',
+ 'Ymin',
+ 'Ymol',
+ 'Yohm',
+ 'Ypc',
+ 'Yph',
+ 'Yphoton',
+ 'Ypix',
+ 'Ypixel',
+ 'Yrad',
+ 'Ys',
+ 'Ysr',
+ 'Yu',
+ 'Yvox',
+ 'Yvoxel',
+ 'Yyr',
+ 'ZA',
+ 'ZAU',
+ 'ZB',
+ 'ZBa',
+ 'ZC',
+ 'ZD',
+ 'ZF',
+ 'ZG',
+ 'ZGal',
+ 'ZH',
+ 'ZHz',
+ 'ZJ',
+ 'ZJy',
+ 'ZK',
+ 'ZL',
+ 'ZN',
+ 'ZOhm',
+ 'ZP',
+ 'ZPa',
+ 'ZR',
+ 'ZRy',
+ 'ZS',
+ 'ZSt',
+ 'ZT',
+ 'ZV',
+ 'ZW',
+ 'ZWb',
+ 'Za',
+ 'Zadu',
+ 'Zarcmin',
+ 'Zarcsec',
+ 'Zau',
+ 'Zb',
+ 'Zbarn',
+ 'Zbeam',
+ 'Zbin',
+ 'Zbit',
+ 'Zbyte',
+ 'Zcd',
+ 'Zchan',
+ 'Zcount',
+ 'Zct',
+ 'Zd',
+ 'Zdeg',
+ 'Zdyn',
+ 'ZeV',
+ 'Zerg',
+ 'Zg',
+ 'Zh',
+ 'Zk',
+ 'Zl',
+ 'Zlm',
+ 'Zlx',
+ 'Zlyr',
+ 'Zm',
+ 'Zmag',
+ 'Zmin',
+ 'Zmol',
+ 'Zohm',
+ 'Zpc',
+ 'Zph',
+ 'Zphoton',
+ 'Zpix',
+ 'Zpixel',
+ 'Zrad',
+ 'Zs',
+ 'Zsr',
+ 'Zu',
+ 'Zvox',
+ 'Zvoxel',
+ 'Zyr',
+ '__builtins__',
+ '__cached__',
+ '__doc__',
+ '__file__',
+ '__loader__',
+ '__name__',
+ '__package__',
+ '__path__',
+ '__spec__',
+ 'a',
+ 'aA',
+ 'aAU',
+ 'aB',
+ 'aBa',
+ 'aC',
+ 'aD',
+ 'aF',
+ 'aG',
+ 'aGal',
+ 'aH',
+ 'aHz',
+ 'aJ',
+ 'aJy',
+ 'aK',
+ 'aL',
+ 'aN',
+ 'aOhm',
+ 'aP',
+ 'aPa',
+ 'aR',
+ 'aRy',
+ 'aS',
+ 'aSt',
+ 'aT',
+ 'aV',
+ 'aW',
+ 'aWb',
+ 'aa',
+ 'aadu',
+ 'aarcmin',
+ 'aarcsec',
+ 'aau',
+ 'ab',
+ 'abA',
+ 'abC',
+ 'abampere',
+ 'abarn',
+ 'abcoulomb',
+ 'abeam',
+ 'abin',
+ 'abit',
+ 'abyte',
+ 'acd',
+ 'achan',
+ 'acount',
+ 'act',
+ 'ad',
+ 'add_enabled_equivalencies',
+ 'add_enabled_units',
+ 'adeg',
+ 'adu',
+ 'adyn',
+ 'aeV',
+ 'aerg',
+ 'ag',
+ 'ah',
+ 'ak',
+ 'al',
+ 'allclose',
+ 'alm',
+ 'alx',
+ 'alyr',
+ 'am',
+ 'amag',
+ 'amin',
+ 'amol',
+ 'amp',
+ 'ampere',
+ 'angstrom',
+ 'annum',
+ 'aohm',
+ 'apc',
+ 'aph',
+ 'aphoton',
+ 'apix',
+ 'apixel',
+ 'arad',
+ 'arcmin',
+ 'arcminute',
+ 'arcsec',
+ 'arcsecond',
+ 'asr',
+ 'astronomical_unit',
+ 'astrophys',
+ 'attoBarye',
+ 'attoDa',
+ 'attoDalton',
+ 'attoDebye',
+ 'attoFarad',
+ 'attoGauss',
+ 'attoHenry',
+ 'attoHertz',
+ 'attoJansky',
+ 'attoJoule',
+ 'attoKayser',
+ 'attoKelvin',
+ 'attoNewton',
+ 'attoOhm',
+ 'attoPascal',
+ 'attoRayleigh',
+ 'attoSiemens',
+ 'attoTesla',
+ 'attoVolt',
+ 'attoWatt',
+ 'attoWeber',
+ 'attoamp',
+ 'attoampere',
+ 'attoannum',
+ 'attoarcminute',
+ 'attoarcsecond',
+ 'attoastronomical_unit',
+ 'attobarn',
+ 'attobarye',
+ 'attobit',
+ 'attobyte',
+ 'attocandela',
+ 'attocoulomb',
+ 'attocount',
+ 'attoday',
+ 'attodebye',
+ 'attodegree',
+ 'attodyne',
+ 'attoelectronvolt',
+ 'attofarad',
+ 'attogal',
+ 'attogauss',
+ 'attogram',
+ 'attohenry',
+ 'attohertz',
+ 'attohour',
+ 'attohr',
+ 'attojansky',
+ 'attojoule',
+ 'attokayser',
+ 'attolightyear',
+ 'attoliter',
+ 'attolumen',
+ 'attolux',
+ 'attometer',
+ 'attominute',
+ 'attomole',
+ 'attonewton',
+ 'attoparsec',
+ 'attopascal',
+ 'attophoton',
+ 'attopixel',
+ 'attopoise',
+ 'attoradian',
+ 'attorayleigh',
+ 'attorydberg',
+ 'attosecond',
+ 'attosiemens',
+ 'attosteradian',
+ 'attostokes',
+ 'attotesla',
+ 'attovolt',
+ 'attovoxel',
+ 'attowatt',
+ 'attoweber',
+ 'attoyear',
+ 'au',
+ 'avox',
+ 'avoxel',
+ 'ayr',
+ 'b',
+ 'bar',
+ 'barn',
+ 'barye',
+ 'beam',
+ 'beam_angular_area',
+ 'becquerel',
+ 'bin',
+ 'binary_prefixes',
+ 'bit',
+ 'bol',
+ 'brightness_temperature',
+ 'byte',
+ 'cA',
+ 'cAU',
+ 'cB',
+ 'cBa',
+ 'cC',
+ 'cD',
+ 'cF',
+ 'cG',
+ 'cGal',
+ 'cH',
+ 'cHz',
+ 'cJ',
+ 'cJy',
+ 'cK',
+ 'cL',
+ 'cN',
+ 'cOhm',
+ 'cP',
+ 'cPa',
+ 'cR',
+ 'cRy',
+ 'cS',
+ 'cSt',
+ 'cT',
+ 'cV',
+ 'cW',
+ 'cWb',
+ 'ca',
+ 'cadu',
+ 'candela',
+ 'carcmin',
+ 'carcsec',
+ 'cau',
+ 'cb',
+ 'cbarn',
+ 'cbeam',
+ 'cbin',
+ 'cbit',
+ 'cbyte',
+ 'ccd',
+ 'cchan',
+ 'ccount',
+ 'cct',
+ 'cd',
+ 'cdeg',
+ 'cdyn',
+ 'ceV',
+ 'centiBarye',
+ 'centiDa',
+ 'centiDalton',
+ 'centiDebye',
+ 'centiFarad',
+ 'centiGauss',
+ 'centiHenry',
+ 'centiHertz',
+ 'centiJansky',
+ 'centiJoule',
+ 'centiKayser',
+ 'centiKelvin',
+ 'centiNewton',
+ 'centiOhm',
+ 'centiPascal',
+ 'centiRayleigh',
+ 'centiSiemens',
+ 'centiTesla',
+ 'centiVolt',
+ 'centiWatt',
+ 'centiWeber',
+ 'centiamp',
+ 'centiampere',
+ 'centiannum',
+ 'centiarcminute',
+ 'centiarcsecond',
+ 'centiastronomical_unit',
+ 'centibarn',
+ 'centibarye',
+ 'centibit',
+ 'centibyte',
+ 'centicandela',
+ 'centicoulomb',
+ 'centicount',
+ 'centiday',
+ 'centidebye',
+ 'centidegree',
+ 'centidyne',
+ 'centielectronvolt',
+ 'centifarad',
+ 'centigal',
+ 'centigauss',
+ 'centigram',
+ 'centihenry',
+ 'centihertz',
+ 'centihour',
+ 'centihr',
+ 'centijansky',
+ 'centijoule',
+ 'centikayser',
+ 'centilightyear',
+ 'centiliter',
+ 'centilumen',
+ 'centilux',
+ 'centimeter',
+ 'centiminute',
+ 'centimole',
+ 'centinewton',
+ 'centiparsec',
+ 'centipascal',
+ 'centiphoton',
+ 'centipixel',
+ 'centipoise',
+ 'centiradian',
+ 'centirayleigh',
+ 'centirydberg',
+ 'centisecond',
+ 'centisiemens',
+ 'centisteradian',
+ 'centistokes',
+ 'centitesla',
+ 'centivolt',
+ 'centivoxel',
+ 'centiwatt',
+ 'centiweber',
+ 'centiyear',
+ 'cerg',
+ 'cg',
+ 'cgs',
+ 'ch',
+ 'chan',
+ 'ck',
+ 'cl',
+ 'clm',
+ 'clx',
+ 'clyr',
+ 'cm',
+ 'cmag',
+ 'cmin',
+ 'cmol',
+ 'cohm',
+ 'core',
+ 'coulomb',
+ 'count',
+ 'cpc',
+ 'cph',
+ 'cphoton',
+ 'cpix',
+ 'cpixel',
+ 'crad',
+ 'cs',
+ 'csr',
+ 'ct',
+ 'cu',
+ 'curie',
+ 'cvox',
+ 'cvoxel',
+ 'cy',
+ 'cycle',
+ 'cyr',
+ 'd',
+ 'dA',
+ 'dAU',
+ 'dB',
+ 'dBa',
+ 'dC',
+ 'dD',
+ 'dF',
+ 'dG',
+ 'dGal',
+ 'dH',
+ 'dHz',
+ 'dJ',
+ 'dJy',
+ 'dK',
+ 'dL',
+ 'dN',
+ 'dOhm',
+ 'dP',
+ 'dPa',
+ 'dR',
+ 'dRy',
+ 'dS',
+ 'dSt',
+ 'dT',
+ ...]
+
+
+
+
+

To create a quantity, we multiply a value by a unit.

+
+
+
coord = 30 * u.deg
+type(coord)
+
+
+
+
+
astropy.units.quantity.Quantity
+
+
+
+
+

The result is a Quantity object.

+

Jupyter knows how to display Quantities like this:

+
+
+
coord
+
+
+
+
+
+\[30 \; \mathrm{{}^{\circ}}\]
+
+
+
+
+

Selecting a rectangle

+

Now we’ll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.

+

We’ll define variables to contain these limits.

+
+
+
phi1_min = -55
+phi1_max = -45
+phi2_min = -8
+phi2_max = 4
+
+
+
+
+

To represent a rectangle, we’ll use two lists of coordinates and multiply by their units.

+
+
+
phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg
+phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg
+
+
+
+
+

phi1_rect and phi2_rect represent the coordinates of the corners of a rectangle.

+

But they are in “a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream

+

In order to use them in a Gaia query, we have to convert them to International Celestial Reference System (ICRS) coordinates. We can do that by storing the coordinates in a GD1Koposov10 object provided by Gala.

+
+
+
import gala.coordinates as gc
+
+corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)
+type(corners)
+
+
+
+
+
gala.coordinates.gd1.GD1Koposov10
+
+
+
+
+

We can display the result like this:

+
+
+
corners
+
+
+
+
+
<GD1Koposov10 Coordinate: (phi1, phi2) in deg
+    [(-55., -8.), (-55.,  4.), (-45.,  4.), (-45., -8.)]>
+
+
+
+
+

Now we can use transform_to to convert to ICRS coordinates.

+
+
+
import astropy.coordinates as coord
+
+corners_icrs = corners.transform_to(coord.ICRS)
+type(corners_icrs)
+
+
+
+
+
astropy.coordinates.builtin_frames.icrs.ICRS
+
+
+
+
+

The result is an ICRS object.

+
+
+
corners_icrs
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    [(146.27533314, 19.26190982), (135.42163944, 25.87738723),
+     (141.60264825, 34.3048303 ), (152.81671045, 27.13611254)]>
+
+
+
+
+

Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon.

+
+
+

Selecting a polygon

+

In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:

+
"""
+POLYGON(143.65, 20.98, 
+        134.46, 26.39, 
+        140.58, 34.85, 
+        150.16, 29.01)
+"""
+
+
+

corners_icrs behaves like a list, so we can use a for loop to iterate through the points.

+
+
+
for point in corners_icrs:
+    print(point)
+
+
+
+
+
<ICRS Coordinate: (ra, dec) in deg
+    (146.27533314, 19.26190982)>
+<ICRS Coordinate: (ra, dec) in deg
+    (135.42163944, 25.87738723)>
+<ICRS Coordinate: (ra, dec) in deg
+    (141.60264825, 34.3048303)>
+<ICRS Coordinate: (ra, dec) in deg
+    (152.81671045, 27.13611254)>
+
+
+
+
+

From that, we can select the coordinates ra and dec:

+
+
+
for point in corners_icrs:
+    print(point.ra, point.dec)
+
+
+
+
+
146d16m31.1993s 19d15m42.8754s
+135d25m17.902s 25d52m38.594s
+141d36m09.5337s 34d18m17.3891s
+152d49m00.1576s 27d08m10.0051s
+
+
+
+
+

The results are quantities with units, but if we select the value part, we get a dimensionless floating-point number.

+
+
+
for point in corners_icrs:
+    print(point.ra.value, point.dec.value)
+
+
+
+
+
146.27533313607782 19.261909820533692
+135.42163944306296 25.87738722767213
+141.60264825107333 34.304830296257144
+152.81671044675923 27.136112541397996
+
+
+
+
+

We can use string format to convert these numbers to strings.

+
+
+
point_base = "{point.ra.value}, {point.dec.value}"
+
+t = [point_base.format(point=point)
+     for point in corners_icrs]
+t
+
+
+
+
+
['146.27533313607782, 19.261909820533692',
+ '135.42163944306296, 25.87738722767213',
+ '141.60264825107333, 34.304830296257144',
+ '152.81671044675923, 27.136112541397996']
+
+
+
+
+

The result is a list of strings, which we can join into a single string using join.

+
+
+
point_list = ', '.join(t)
+point_list
+
+
+
+
+
'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'
+
+
+
+
+

Notice that we invoke join on a string and pass the list as an argument.

+

Before we can assemble the query, we need columns again (as we saw in the previous notebook).

+
+
+
columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'
+
+
+
+
+

Here’s the base for the query, with format specifiers for columns and point_list.

+
+
+
query_base = """SELECT {columns}
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON({point_list}))
+"""
+
+
+
+
+

And here’s the result:

+
+
+
query = query_base.format(columns=columns, 
+                          point_list=point_list)
+print(query)
+
+
+
+
+
SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
+FROM gaiadr2.gaia_source
+WHERE parallax < 1
+  AND bp_rp BETWEEN -0.75 AND 2 
+  AND 1 = CONTAINS(POINT(ra, dec), 
+                   POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))
+
+
+
+
+

As always, we should take a minute to proof-read the query before we launch it.

+

The result will be bigger than our previous queries, so it will take a little longer.

+
+
+
job = Gaia.launch_job_async(query)
+print(job)
+
+
+
+
+
INFO: Query finished. [astroquery.utils.tap.core]
+<Table length=140340>
+      name       dtype    unit                              description                             n_bad 
+--------------- ------- -------- ------------------------------------------------------------------ ------
+      source_id   int64          Unique source identifier (unique within a particular Data Release)      0
+             ra float64      deg                                                    Right ascension      0
+            dec float64      deg                                                        Declination      0
+           pmra float64 mas / yr                         Proper motion in right ascension direction      0
+          pmdec float64 mas / yr                             Proper motion in declination direction      0
+       parallax float64      mas                                                           Parallax      0
+ parallax_error float64      mas                                         Standard error of parallax      0
+radial_velocity float64   km / s                                                    Radial velocity 139374
+Jobid: 1601903357321O
+Phase: COMPLETED
+Owner: None
+Output file: async_20201005090917.vot
+Results: None
+
+
+
+
+

Here are the results.

+
+
+
results = job.get_results()
+len(results)
+
+
+
+
+
140340
+
+
+
+
+

There are more than 100,000 stars in this polygon, but that’s a manageable size to work with.

+
+
+

Saving results

+

This is the set of stars we’ll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.

+

Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.

+

Astropy Table objects provide write, which writes the table to disk.

+
+
+
filename = 'gd1_results.fits'
+results.write(filename, overwrite=True)
+
+
+
+
+

Because the filename ends with fits, the table is written in the FITS format, which preserves the metadata associated with the table.

+

If the file already exists, the overwrite argument causes it to be overwritten.

+

To see how big the file is, we can use ls with the -lh option, which prints information about the file including its size in human-readable form.

+
+
+
!ls -lh gd1_results.fits
+
+
+
+
+
-rw-rw-r-- 1 downey downey 8.6M Oct  5 09:09 gd1_results.fits
+
+
+
+
+

The file is about 8.6 MB.

+
+
+

Summary

+

In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.

+

In the next notebook, we’ll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1.

+
+
+

Best practices

+
    +
  • For measurements with units, use Quantity objects that represent units explicitly and check for errors.

  • +
  • Use the format function to compose queries; it is often faster and less error-prone.

  • +
  • Develop queries incrementally: start with something simple, test it, and add a little bit at a time.

  • +
  • Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don’t have to run the query again.

  • +
+
+
+ + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/README.html b/_build/html/README.html new file mode 100644 index 0000000..aede958 --- /dev/null +++ b/_build/html/README.html @@ -0,0 +1,379 @@ + + + + + + + + Astronomical Data in Python — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ +
+

Astronomical Data in Python

+

Astronomical Data in Python is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

This material was developed in collaboration with The Carpentries and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society.

+

I am grateful for contributions from the members of the committee – Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield – and from Erin Becker, Brett Morris and Adrian Price-Whelan.

+

The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment.

+

This material is also available in the form of Carpentries lessons, but you should be +aware that these versions might diverge in the future.

+

Prerequisites

+

This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+

Notebook 1

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 2

+

This notebook starts with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 3

+

Here are the steps in this notebook:

+
    +
  1. We’ll read back the results from the previous notebook, which we saved in a FITS file.

  2. +
  3. Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.

  4. +
  5. We’ll put those results into a Pandas DataFrame, which we’ll use to select stars near the centerline of GD-1.

  6. +
  7. Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD-1.

  8. +
  9. Finally, we’ll select and plot the stars whose proper motion is in that region.

  10. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 4

+

Here are the steps in this notebook:

+
    +
  1. Using data from the previous notebook, we’ll identify the values of proper motion for stars likely to be in GD-1.

  2. +
  3. Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.

  4. +
  5. We’ll also see how to write the results to a CSV file.

  6. +
+

That will make it possible to search a bigger region of the sky in a single query.

+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 5

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the candidate stars we identified in the previous notebook.

  2. +
  3. Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a JOIN operation to select photometry data for the candidate stars.

  4. +
  5. We’ll write the results to a file for use in the next notebook.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 6

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the data from the previous notebook and make a color-magnitude diagram.

  2. +
  3. Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect.

  4. +
  5. Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas DataFrame.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Notebook 7

+

Here are the steps in this notebook:

+
    +
  1. Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly.

  2. +
  3. The we’ll see several ways to customize figures to make them more appealing and effective.

  4. +
  5. Finally, we’ll see how to make a figure with multiple panels or subplots.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+

Installation instructions

+

Coming soon.

+
+
+
+ + + + +
+ +
+
+ + +
+ + Chapter 1 + +
+ +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/_images/03_motion_28_0.png b/_build/html/_images/03_motion_28_0.png new file mode 100644 index 0000000..87f7d6a Binary files /dev/null and b/_build/html/_images/03_motion_28_0.png differ diff --git a/_build/html/_images/03_motion_45_0.png b/_build/html/_images/03_motion_45_0.png new file mode 100644 index 0000000..f3e40e9 Binary files /dev/null and b/_build/html/_images/03_motion_45_0.png differ diff --git a/_build/html/_images/03_motion_79_0.png b/_build/html/_images/03_motion_79_0.png new file mode 100644 index 0000000..f228c2e Binary files /dev/null and b/_build/html/_images/03_motion_79_0.png differ diff --git a/_build/html/_images/03_motion_81_0.png b/_build/html/_images/03_motion_81_0.png new file mode 100644 index 0000000..291881d Binary files /dev/null and b/_build/html/_images/03_motion_81_0.png differ diff --git a/_build/html/_images/03_motion_88_0.png b/_build/html/_images/03_motion_88_0.png new file mode 100644 index 0000000..5c20d6b Binary files /dev/null and b/_build/html/_images/03_motion_88_0.png differ diff --git a/_build/html/_images/03_motion_98_0.png b/_build/html/_images/03_motion_98_0.png new file mode 100644 index 0000000..0691cd2 Binary files /dev/null and b/_build/html/_images/03_motion_98_0.png differ diff --git a/_build/html/_images/04_select_11_0.png b/_build/html/_images/04_select_11_0.png new file mode 100644 index 0000000..82d2aab Binary files /dev/null and b/_build/html/_images/04_select_11_0.png differ diff --git a/_build/html/_images/04_select_13_0.png b/_build/html/_images/04_select_13_0.png new file mode 100644 index 0000000..6b70416 Binary files /dev/null and b/_build/html/_images/04_select_13_0.png differ diff --git a/_build/html/_images/04_select_25_0.png b/_build/html/_images/04_select_25_0.png new file mode 100644 index 0000000..da56759 Binary files /dev/null and b/_build/html/_images/04_select_25_0.png differ diff --git a/_build/html/_images/04_select_51_0.png b/_build/html/_images/04_select_51_0.png new file mode 100644 index 0000000..4bd920c Binary files /dev/null and b/_build/html/_images/04_select_51_0.png differ diff --git a/_build/html/_images/04_select_57_0.png b/_build/html/_images/04_select_57_0.png new file mode 100644 index 0000000..351b276 Binary files /dev/null and b/_build/html/_images/04_select_57_0.png differ diff --git a/_build/html/_images/05_join_9_0.png b/_build/html/_images/05_join_9_0.png new file mode 100644 index 0000000..eb6cc8c Binary files /dev/null and b/_build/html/_images/05_join_9_0.png differ diff --git a/_build/html/_images/06_photo_12_0.png b/_build/html/_images/06_photo_12_0.png new file mode 100644 index 0000000..f5b87d1 Binary files /dev/null and b/_build/html/_images/06_photo_12_0.png differ diff --git a/_build/html/_images/06_photo_23_0.png b/_build/html/_images/06_photo_23_0.png new file mode 100644 index 0000000..7a3e394 Binary files /dev/null and b/_build/html/_images/06_photo_23_0.png differ diff --git a/_build/html/_images/06_photo_61_0.png b/_build/html/_images/06_photo_61_0.png new file mode 100644 index 0000000..af7b03d Binary files /dev/null and b/_build/html/_images/06_photo_61_0.png differ diff --git a/_build/html/_images/06_photo_63_0.png b/_build/html/_images/06_photo_63_0.png new file mode 100644 index 0000000..a2d1875 Binary files /dev/null and b/_build/html/_images/06_photo_63_0.png differ diff --git a/_build/html/_images/07_plot_13_0.png b/_build/html/_images/07_plot_13_0.png new file mode 100644 index 0000000..bdd9b77 Binary files /dev/null and b/_build/html/_images/07_plot_13_0.png differ diff --git a/_build/html/_images/07_plot_50_0.png b/_build/html/_images/07_plot_50_0.png new file mode 100644 index 0000000..280dca5 Binary files /dev/null and b/_build/html/_images/07_plot_50_0.png differ diff --git a/_build/html/_images/07_plot_57_0.png b/_build/html/_images/07_plot_57_0.png new file mode 100644 index 0000000..02032fc Binary files /dev/null and b/_build/html/_images/07_plot_57_0.png differ diff --git a/_build/html/_images/07_plot_63_0.png b/_build/html/_images/07_plot_63_0.png new file mode 100644 index 0000000..aafb115 Binary files /dev/null and b/_build/html/_images/07_plot_63_0.png differ diff --git a/_build/html/_images/07_plot_69_0.png b/_build/html/_images/07_plot_69_0.png new file mode 100644 index 0000000..6f91966 Binary files /dev/null and b/_build/html/_images/07_plot_69_0.png differ diff --git a/_build/html/_images/07_plot_72_0.png b/_build/html/_images/07_plot_72_0.png new file mode 100644 index 0000000..830a165 Binary files /dev/null and b/_build/html/_images/07_plot_72_0.png differ diff --git a/_build/html/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css b/_build/html/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css new file mode 100644 index 0000000..fc14abc --- /dev/null +++ b/_build/html/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css @@ -0,0 +1 @@ +details.dropdown .summary-title{padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.dropdown:hover{cursor:pointer}details.dropdown .summary-content{cursor:default}details.dropdown summary{list-style:none;padding:1em}details.dropdown summary .octicon.no-title{vertical-align:middle}details.dropdown[open] summary .octicon.no-title{visibility:hidden}details.dropdown summary::-webkit-details-marker{display:none}details.dropdown summary:focus{outline:none}details.dropdown summary:hover .summary-up svg,details.dropdown summary:hover .summary-down svg{opacity:1}details.dropdown .summary-up svg,details.dropdown .summary-down svg{display:block;opacity:.6}details.dropdown .summary-up,details.dropdown .summary-down{pointer-events:none;position:absolute;right:1em;top:.75em}details.dropdown[open] .summary-down{visibility:hidden}details.dropdown:not([open]) .summary-up{visibility:hidden}details.dropdown.fade-in[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out;animation:panels-fade-in .5s ease-in-out}details.dropdown.fade-in-slide-down[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out}@keyframes panels-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes panels-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.octicon{display:inline-block;fill:currentColor;vertical-align:text-top}.tabbed-content{box-shadow:0 -.0625rem var(--tabs-color-overline),0 .0625rem var(--tabs-color-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.tabbed-content>:first-child{margin-top:0 !important}.tabbed-content>:last-child{margin-bottom:0 !important}.tabbed-content>.tabbed-set{margin:0}.tabbed-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.tabbed-set>input{opacity:0;position:absolute}.tabbed-set>input:checked+label{border-color:var(--tabs-color-label-active);color:var(--tabs-color-label-active)}.tabbed-set>input:checked+label+.tabbed-content{display:block}.tabbed-set>input:focus+label{outline-style:auto}.tabbed-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.tabbed-set>label{border-bottom:.125rem solid transparent;color:var(--tabs-color-label-inactive);cursor:pointer;font-size:var(--tabs-size-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .tabbed-set>label:hover{color:var(--tabs-color-label-active)} diff --git a/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css b/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css new file mode 100644 index 0000000..adc6166 --- /dev/null +++ b/_build/html/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css @@ -0,0 +1,7 @@ +:root { +--tabs-color-label-active: hsla(231, 99%, 66%, 1); +--tabs-color-label-inactive: rgba(178, 206, 245, 0.62); +--tabs-color-overline: rgb(207, 236, 238); +--tabs-color-underline: rgb(207, 236, 238); +--tabs-size-label: 1rem; +} \ No newline at end of file diff --git a/_build/html/_sources/01_query.ipynb b/_build/html/_sources/01_query.ipynb new file mode 100644 index 0000000..cccc8e4 --- /dev/null +++ b/_build/html/_sources/01_query.ipynb @@ -0,0 +1,1675 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "hide-output" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "hide-output" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones:\n", + "\n", + "| Symbol | Operation\n", + "|--------| :---\n", + "| `>` | greater than\n", + "| `<` | less than\n", + "| `>=` | greater than or equal\n", + "| `<=` | less than or equal\n", + "| `=` | equal\n", + "| `!=` or `<>` | not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "celltoolbar": "Tags", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/01_query.md b/_build/html/_sources/01_query.md new file mode 100644 index 0000000..a6b736b --- /dev/null +++ b/_build/html/_sources/01_query.md @@ -0,0 +1,1073 @@ +# Chapter 1 + +*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include: + +* Writing queries that select and download data from a database. + +* Using data stored in an Astropy `Table` or Pandas `DataFrame`. + +* Working with coordinates and other quantities with units. + +* Storing data in various formats. + +* Performing database join operations that combine data from multiple tables. + +* Visualizing data and preparing publication-quality figures. + +As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. + +As the abstract explains, "Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1." + +GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is "an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces." + +[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications: + +* "The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way." + +* "They also are being used as exquisitely sensitive scales to measure the galaxy's mass." + +* "... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature." + +## Data + +The datasets we will work with are: + +* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is "a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision", and + +* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources. + +Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +One of the goals of this workshop is to provide tools for working with large datasets. + +## Prerequisites + +These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started. + +We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +## Outline + +The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database: + +1. First we'll make a connection to the Gaia server, + +2. We will explore information about the database and the tables it contains, + +3. We will write a query and send it to the server, and finally + +4. We will download the response from the server. + +After completing this lesson, you should be able to + +* Compose a basic query in ADQL. + +* Use queries to explore a database and its tables. + +* Use queries to download data. + +* Develop, test, and debug a query incrementally. + +## Query Language + +In order to select data from a database, you have to compose a query, which is like a program written in a "query language". +The query language we'll use is ADQL, which stands for "Astronomical Data Query Language". + +ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL. + +[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html). +But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook). + +## Installing libraries + +The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/). + +If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + + + +```python +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + !pip install astroquery astro-gala pyia +``` + +## Connecting to Gaia + +Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html). + +We can connect to the Gaia database like this: + + +```python +from astroquery.gaia import Gaia +``` + + Created TAP+ (v1.2.1) - Connection: + Host: gea.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 + Created TAP+ (v1.2.1) - Connection: + Host: geadata.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 + + +Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for "Table Access Protocol". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections. + +## Databases and Tables + +What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL: + +* A database is a collection of one or more named tables. + +* Each table is a 2-D array with one or more named columns of data. + +We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the "metadata", not the data itself. + + +```python +tables = Gaia.load_tables(only_names=True) +``` + + INFO: Retrieving tables... [astroquery.utils.tap.core] + INFO: Parsing tables... [astroquery.utils.tap.core] + INFO: Done. [astroquery.utils.tap.core] + + + +```python +for table in (tables): + print(table.get_qualified_name()) +``` + + external.external.apassdr9 + external.external.gaiadr2_geometric_distance + external.external.galex_ais + external.external.ravedr5_com + external.external.ravedr5_dr5 + external.external.ravedr5_gra + external.external.ravedr5_on + external.external.sdssdr13_photoprimary + external.external.skymapperdr1_master + external.external.tmass_xsc + public.public.hipparcos + public.public.hipparcos_newreduction + public.public.hubble_sc + public.public.igsl_source + public.public.igsl_source_catalog_ids + public.public.tycho2 + public.public.dual + tap_config.tap_config.coord_sys + tap_config.tap_config.properties + tap_schema.tap_schema.columns + tap_schema.tap_schema.key_columns + tap_schema.tap_schema.keys + tap_schema.tap_schema.schemas + tap_schema.tap_schema.tables + gaiadr1.gaiadr1.aux_qso_icrf2_match + gaiadr1.gaiadr1.ext_phot_zero_point + gaiadr1.gaiadr1.allwise_best_neighbour + gaiadr1.gaiadr1.allwise_neighbourhood + gaiadr1.gaiadr1.gsc23_best_neighbour + gaiadr1.gaiadr1.gsc23_neighbourhood + gaiadr1.gaiadr1.ppmxl_best_neighbour + gaiadr1.gaiadr1.ppmxl_neighbourhood + gaiadr1.gaiadr1.sdss_dr9_best_neighbour + gaiadr1.gaiadr1.sdss_dr9_neighbourhood + gaiadr1.gaiadr1.tmass_best_neighbour + gaiadr1.gaiadr1.tmass_neighbourhood + gaiadr1.gaiadr1.ucac4_best_neighbour + gaiadr1.gaiadr1.ucac4_neighbourhood + gaiadr1.gaiadr1.urat1_best_neighbour + gaiadr1.gaiadr1.urat1_neighbourhood + gaiadr1.gaiadr1.cepheid + gaiadr1.gaiadr1.phot_variable_time_series_gfov + gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters + gaiadr1.gaiadr1.rrlyrae + gaiadr1.gaiadr1.variable_summary + gaiadr1.gaiadr1.allwise_original_valid + gaiadr1.gaiadr1.gsc23_original_valid + gaiadr1.gaiadr1.ppmxl_original_valid + gaiadr1.gaiadr1.sdssdr9_original_valid + gaiadr1.gaiadr1.tmass_original_valid + gaiadr1.gaiadr1.ucac4_original_valid + gaiadr1.gaiadr1.urat1_original_valid + gaiadr1.gaiadr1.gaia_source + gaiadr1.gaiadr1.tgas_source + gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id + gaiadr2.gaiadr2.aux_iers_gdr2_cross_id + gaiadr2.gaiadr2.aux_sso_orbit_residuals + gaiadr2.gaiadr2.aux_sso_orbits + gaiadr2.gaiadr2.dr1_neighbourhood + gaiadr2.gaiadr2.allwise_best_neighbour + gaiadr2.gaiadr2.allwise_neighbourhood + gaiadr2.gaiadr2.apassdr9_best_neighbour + gaiadr2.gaiadr2.apassdr9_neighbourhood + gaiadr2.gaiadr2.gsc23_best_neighbour + gaiadr2.gaiadr2.gsc23_neighbourhood + gaiadr2.gaiadr2.hipparcos2_best_neighbour + gaiadr2.gaiadr2.hipparcos2_neighbourhood + gaiadr2.gaiadr2.panstarrs1_best_neighbour + gaiadr2.gaiadr2.panstarrs1_neighbourhood + gaiadr2.gaiadr2.ppmxl_best_neighbour + gaiadr2.gaiadr2.ppmxl_neighbourhood + gaiadr2.gaiadr2.ravedr5_best_neighbour + gaiadr2.gaiadr2.ravedr5_neighbourhood + gaiadr2.gaiadr2.sdssdr9_best_neighbour + gaiadr2.gaiadr2.sdssdr9_neighbourhood + gaiadr2.gaiadr2.tmass_best_neighbour + gaiadr2.gaiadr2.tmass_neighbourhood + gaiadr2.gaiadr2.tycho2_best_neighbour + gaiadr2.gaiadr2.tycho2_neighbourhood + gaiadr2.gaiadr2.urat1_best_neighbour + gaiadr2.gaiadr2.urat1_neighbourhood + gaiadr2.gaiadr2.sso_observation + gaiadr2.gaiadr2.sso_source + gaiadr2.gaiadr2.vari_cepheid + gaiadr2.gaiadr2.vari_classifier_class_definition + gaiadr2.gaiadr2.vari_classifier_definition + gaiadr2.gaiadr2.vari_classifier_result + gaiadr2.gaiadr2.vari_long_period_variable + gaiadr2.gaiadr2.vari_rotation_modulation + gaiadr2.gaiadr2.vari_rrlyrae + gaiadr2.gaiadr2.vari_short_timescale + gaiadr2.gaiadr2.vari_time_series_statistics + gaiadr2.gaiadr2.panstarrs1_original_valid + gaiadr2.gaiadr2.gaia_source + gaiadr2.gaiadr2.ruwe + + +So that's a lot of tables. The ones we'll use are: + +* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2), + +* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and + +* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS. + +We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. + + +```python +meta = Gaia.load_table('gaiadr2.gaia_source') +meta +``` + + Retrieving table 'gaiadr2.gaia_source' + Parsing table 'gaiadr2.gaia_source'... + Done. + + + + + + + + + +Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents. + +To see the metadata, we have to print the object. + + +```python +print(meta) +``` + + TAP Table name: gaiadr2.gaiadr2.gaia_source + Description: This table has an entry for every Gaia observed source as listed in the + Main Database accumulating catalogue version from which the catalogue + release has been generated. It contains the basic source parameters, + that is only final data (no epoch data) and no spectra (neither final + nor epoch). + Num. columns: 96 + + +Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`. + +**Exercise:** Go back and try + +``` +meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source') +``` + +What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out? + +## Columns + +The following loop prints the names of the columns in the table. + + +```python +for column in meta.columns: + print(column.name) +``` + + solution_id + designation + source_id + random_index + ref_epoch + ra + ra_error + dec + dec_error + parallax + parallax_error + parallax_over_error + pmra + pmra_error + pmdec + pmdec_error + ra_dec_corr + ra_parallax_corr + ra_pmra_corr + ra_pmdec_corr + dec_parallax_corr + dec_pmra_corr + dec_pmdec_corr + parallax_pmra_corr + parallax_pmdec_corr + pmra_pmdec_corr + astrometric_n_obs_al + astrometric_n_obs_ac + astrometric_n_good_obs_al + astrometric_n_bad_obs_al + astrometric_gof_al + astrometric_chi2_al + astrometric_excess_noise + astrometric_excess_noise_sig + astrometric_params_solved + astrometric_primary_flag + astrometric_weight_al + astrometric_pseudo_colour + astrometric_pseudo_colour_error + mean_varpi_factor_al + astrometric_matched_observations + visibility_periods_used + astrometric_sigma5d_max + frame_rotator_object_type + matched_observations + duplicated_source + phot_g_n_obs + phot_g_mean_flux + phot_g_mean_flux_error + phot_g_mean_flux_over_error + phot_g_mean_mag + phot_bp_n_obs + phot_bp_mean_flux + phot_bp_mean_flux_error + phot_bp_mean_flux_over_error + phot_bp_mean_mag + phot_rp_n_obs + phot_rp_mean_flux + phot_rp_mean_flux_error + phot_rp_mean_flux_over_error + phot_rp_mean_mag + phot_bp_rp_excess_factor + phot_proc_mode + bp_rp + bp_g + g_rp + radial_velocity + radial_velocity_error + rv_nb_transits + rv_template_teff + rv_template_logg + rv_template_fe_h + phot_variable_flag + l + b + ecl_lon + ecl_lat + priam_flags + teff_val + teff_percentile_lower + teff_percentile_upper + a_g_val + a_g_percentile_lower + a_g_percentile_upper + e_bp_min_rp_val + e_bp_min_rp_percentile_lower + e_bp_min_rp_percentile_upper + flame_flags + radius_val + radius_percentile_lower + radius_percentile_upper + lum_val + lum_percentile_lower + lum_percentile_upper + datalink_url + epoch_photometry_url + + +You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). + +If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness). + +**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names? + +Hint: Remember the gotcha we mentioned earlier. + + +```python +# Solution + +meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid') +print(meta2) +``` + + Retrieving table 'gaiadr2.panstarrs1_original_valid' + Parsing table 'gaiadr2.panstarrs1_original_valid'... + Done. + TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid + Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is + a system for wide-field astronomical imaging developed and operated by + the Institute for Astronomy at the University of Hawaii. Pan-STARRS1 + (PS1) is the first part of Pan-STARRS to be completed and is the basis + for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and + its 1.4 Gigapixel camera to image the sky in five broadband filters (g, + r, i, z, y). + + The current table contains a filtered subsample of the 10 723 304 629 + entries listed in the original ObjectThin table. + We used only ObjectThin and MeanObject tables to extract + panstarrs1OriginalValid table, this means that objects detected only in + stack images are not included here. The main reason for us to avoid the + use of objects detected in stack images is that their astrometry is not + as good as the mean objects astrometry: “The stack positions (raStack, + decStack) have considerably larger systematic astrometric errors than + the mean epoch positions (raMean, decMean).” The astrometry for the + MeanObject positions uses Gaia DR1 as a reference catalog, while the + stack positions use 2MASS as a reference catalog. + + In details, we filtered out all objects where: + + - nDetections = 1 + + - no good quality data in Pan-STARRS, objInfoFlag 33554432 not set + + - mean astrometry could not be measured, objInfoFlag 524288 set + + - stack position used for mean astrometry, objInfoFlag 1048576 set + + - error on all magnitudes equal to 0 or to -999; + + - all magnitudes set to -999; + + - error on RA or DEC greater than 1 arcsec. + + The number of objects in panstarrs1OriginalValid is 2 264 263 282. + + The panstarrs1OriginalValid table contains only a subset of the columns + available in the combined ObjectThin and MeanObject tables. A + description of the original ObjectThin and MeanObjects tables can be + found at: + https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables + + Download: + http://mastweb.stsci.edu/ps1casjobs/home.aspx + Documentation: + https://outerspace.stsci.edu/display/PANSTARRS + http://pswww.ifa.hawaii.edu/pswww/ + References: + The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560 + Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016, + arXiv:1612.05240 + Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C. + Z., et al. 2016, arXiv:1612.05245 + Pan-STARRS Pixel Analysis: Source Detection and Characterization, + Magnier, E. A., et al. 2016, arXiv:1612.05244 + Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et + al. 2016, arXiv:1612.05242 + The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al. + 2016, arXiv:1612.05243 + + Catalogue curator: + SSDC - ASI Space Science Data Center + https://www.ssdc.asi.it/ + Num. columns: 26 + + + +```python +# Solution + +for column in meta2.columns: + print(column.name) +``` + + obj_name + obj_id + ra + dec + ra_error + dec_error + epoch_mean + g_mean_psf_mag + g_mean_psf_mag_error + g_flags + r_mean_psf_mag + r_mean_psf_mag_error + r_flags + i_mean_psf_mag + i_mean_psf_mag_error + i_flags + z_mean_psf_mag + z_mean_psf_mag_error + z_flags + y_mean_psf_mag + y_mean_psf_mag_error + y_flags + n_detections + zone_id + obj_info_flag + quality_flag + + +## Writing queries + +By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want. + +A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL. + +Here's an example of an ADQL query. + + +```python +query1 = """SELECT +TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source""" +``` + +**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read. + +The words in uppercase are ADQL keywords: + +* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data). + +* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data. + +* `FROM` specifies which table we want data from. + +The third line is a list of column names, indicating which columns we want. + +In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive. + +To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`: + + +```python +job1 = Gaia.launch_job(query1) +job1 +``` + + + + + + + + +The result is an object that represents the job running on a Gaia server. + +If you print it, it displays metadata for the forthcoming table. + + +```python +print(job1) +``` + +
+ name dtype unit description + --------- ------- ---- ------------------------------------------------------------------ + source_id int64 Unique source identifier (unique within a particular Data Release) + ref_epoch float64 yr Reference epoch + ra float64 deg Right ascension + dec float64 deg Declination + parallax float64 mas Parallax + Jobid: None + Phase: COMPLETED + Owner: None + Output file: sync_20201005090721.xml.gz + Results: None + + +Don't worry about `Results: None`. That does not actually mean there are no results. + +However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this: + + +```python +results1 = job1.get_results() +type(results1) +``` + + + + + astropy.table.table.Table + + + +**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*. + +The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except: + +* SQL databases are stored on disk drives, so they are persistent; that is, they "survive" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook). + +* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL. + +Jupyter knows how to display the contents of a `Table`. + + +```python +results1 +``` + + + + +Table length=10 +
+ + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
+ + + +Each column has a name, units, and a data type. + +For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part. + +This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery. + +**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type? + +## Asynchronous queries + +`launch_job` asks the server to run the job "synchronously", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run "asynchronously", which mean they might take longer to get started. + +If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later. + +The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results. + +For anonymous users, files are kept for three days. + +As an example, let's try a query that's similar to `query1`, with two changes: + +* It selects the first 3000 rows, so it is bigger than we should run synchronously. + +* It uses a new keyword, `WHERE`. + + +```python +query2 = """SELECT TOP 3000 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 +""" +``` + +A `WHERE` clause indicates which rows we want; in this case, the query selects only rows "where" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1. + +`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database. + +We use `launch_job_async` to submit an asynchronous query. + + +```python +job2 = Gaia.launch_job_async(query2) +print(job2) +``` + + INFO: Query finished. [astroquery.utils.tap.core] + + name dtype unit description + --------- ------- ---- ------------------------------------------------------------------ + source_id int64 Unique source identifier (unique within a particular Data Release) + ref_epoch float64 yr Reference epoch + ra float64 deg Right ascension + dec float64 deg Declination + parallax float64 mas Parallax + Jobid: 1601903242219O + Phase: COMPLETED + Owner: None + Output file: async_20201005090722.vot + Results: None + + +And here are the results. + + +```python +results2 = job2.get_results() +results2 +``` + + + + +Table length=3000 +
+ + + + + + + + + + + + + + + + + + + + + + + +
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
+ + + +You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), "Negative parallaxes are caused by errors in the observations." Negative parallaxes have "no physical meaning," but they can be a "useful diagnostic on the quality of the astrometric solution." + +Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate. + +**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. + +The query should fail, but notice that you don't get much useful debugging information. + +For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help: + +* Whenever possible, start with a working query, either an example you find online or a query you have used in the past. + +* Make small changes and test each change before you continue. + +* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. + +* Launching test queries synchronously might make them start faster, too. + +## Operators + +In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones: + +| Symbol | Operation +|--------| :--- +| `>` | greater than +| `<` | less than +| `>=` | greater than or equal +| `<=` | less than or equal +| `=` | equal +| `!=` or `<>` | not equal + +Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`. +Be careful to keep your Python out of your ADQL! + +You can combine comparisons using the logical operators: + +* AND: true if both comparisons are true +* OR: true if either or both comparisons are true + +Finally, you can use `NOT` to invert the result of a comparison. + +**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`. + +You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). + + +```python +# Solution + +# This is what most people will probably do + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp > -0.75 AND bp_rp < 2 +""" +``` + + +```python +# Solution + +# But if someone notices the BETWEEN operator, +# they might do this + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" +``` + +This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog. + +Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + +## Cleaning up + +Asynchronous jobs have a `jobid`. + + +```python +job1.jobid, job2.jobid +``` + + + + + (None, '1601903242219O') + + + +Which you can use to remove the job from the server. + + +```python +Gaia.remove_jobs([job2.jobid]) +``` + + Removed jobs: '['1601903242219O']'. + + +If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself. + +## Formatting queries + +So far the queries have been string "literals", meaning that the entire string is part of the program. +But writing queries yourself can be slow, repetitive, and error-prone. + +It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp). + +As an example, we'll divide the previous query into two parts; a list of column names and a "base" for the query that contains everything except the column names. + +Here's the list of columns we'll select. + + +```python +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' +``` + +And here's the base; it's a string that contains at least one format specifier in curly brackets (braces). + + +```python +query3_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" +``` + +This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide. + +To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`. + + +```python +query3 = query3_base.format(columns=columns) +``` + +The result is a string with line breaks. If you display it, the line breaks appear as `\n`. + + +```python +query3 +``` + + + + + 'SELECT TOP 10 \nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\nFROM gaiadr2.gaia_source\nWHERE parallax < 1\n AND bp_rp BETWEEN -0.75 AND 2\n' + + + +But if you print it, the line breaks appear as... line breaks. + + +```python +print(query3) +``` + + SELECT TOP 10 + source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity + FROM gaiadr2.gaia_source + WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + + + +Notice that the format specifier has been replaced with the value of `columns`. + +Let's run it and see if it works: + + +```python +job3 = Gaia.launch_job(query3) +print(job3) +``` + + + name dtype unit description n_bad + --------------- ------- -------- ------------------------------------------------------------------ ----- + source_id int64 Unique source identifier (unique within a particular Data Release) 0 + ra float64 deg Right ascension 0 + dec float64 deg Declination 0 + pmra float64 mas / yr Proper motion in right ascension direction 0 + pmdec float64 mas / yr Proper motion in declination direction 0 + parallax float64 mas Parallax 0 + parallax_error float64 mas Standard error of parallax 0 + radial_velocity float64 km / s Radial velocity 10 + Jobid: None + Phase: COMPLETED + Owner: None + Output file: sync_20201005090726.xml.gz + Results: None + + + +```python +results3 = job3.get_results() +results3 +``` + + + + +Table length=10 +
+ + + + + + + + + + + + + +
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
+ + + +Good so far. + +**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input. + +Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide. + + +```python +# Solution + +query4_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < {max_parallax} AND +bp_rp BETWEEN -0.75 AND 2 +""" +``` + + +```python +# Solution + +query4 = query4_base.format(columns=columns, + max_parallax=0.5) +print(query) +``` + + SELECT TOP 10 + source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity + FROM gaiadr2.gaia_source + WHERE parallax < 0.5 AND + bp_rp BETWEEN -0.75 AND 2 + + + +**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. + +The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions. + +A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section. + +What do you think of this choice? Are there alternatives you prefer? + +## Summary + +This notebook demonstrates the following steps: + +1. Making a connection to the Gaia server, + +2. Exploring information about the database and the tables it contains, + +3. Writing a query and sending it to the server, and finally + +4. Downloading the response from the server as an Astropy `Table`. + +## Best practices + +* If you can't download an entire dataset (or it's not practical) use queries to select the data you need. + +* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean. + +* Develop queries incrementally: start with something simple, test it, and add a little bit at a time. + +* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data. + +* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously. + +* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should. + +* ADQL and SQL don't require you to break a query into multiple lines, but you should. + + +Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect. + +There are a few things you can do to mitigate these problems: + +* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section. + +* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase. diff --git a/_build/html/_sources/02_coords.ipynb b/_build/html/_sources/02_coords.ipynb new file mode 100644 index 0000000..4e4966e --- /dev/null +++ b/_build/html/_sources/02_coords.ipynb @@ -0,0 +1,1972 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 2\n", + "\n", + "This is the second in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1603114980658O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019094300.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_results.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/03_motion.ipynb b/_build/html/_sources/03_motion.ipynb new file mode 100644 index 0000000..baf52c9 --- /dev/null +++ b/_build/html/_sources/03_motion.ipynb @@ -0,0 +1,1896 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 3\n", + "\n", + "This is the third in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In the second lesson, we wrote a query to select stars from the region of the sky where we expect GD-1 to be, and saved the results in a FITS file.\n", + "\n", + "Now we'll read that data back and implement the next step in the analysis, identifying stars with the proper motion we expect for GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this lesson:\n", + "\n", + "1. We'll read back the results from the previous lesson, which we saved in a FITS file.\n", + "\n", + "2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.\n", + "\n", + "3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1.\n", + "\n", + "4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1.\n", + "\n", + "5. Finally, we'll select and plot the stars whose proper motion is in that region.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Select rows and columns from an Astropy `Table`.\n", + "\n", + "* Use Matplotlib to make a scatter plot.\n", + "\n", + "* Use Gala to transform coordinates.\n", + "\n", + "* Make a Pandas `DataFrame` and use a Boolean `Series` to select rows.\n", + "\n", + "* Save a `DataFrame` in an HDF5 file.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "In the previous lesson, we ran a query on the Gaia server and downloaded data for roughly 100,000 stars. We saved the data in a FITS file so that now, picking up where we left off, we can read the data from a local file rather than running the query again.\n", + "\n", + "If you ran the previous lesson successfully, you should already have a file called `gd1_results.fits` that contains the data we downloaded.\n", + "\n", + "If not, you can run the following cell, which downloads the data from our repository." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_results.fits'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now here's how we can read the data from the file back into an Astropy `Table`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from astropy.table import Table\n", + "\n", + "results = Table.read(filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an Astropy `Table`.\n", + "\n", + "We can use `info` to refresh our memory of the contents." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
\n", + " name dtype unit description \n", + "--------------- ------- -------- ------------------------------------------------------------------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release)\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " pmra float64 mas / yr Proper motion in right ascension direction\n", + " pmdec float64 mas / yr Proper motion in declination direction\n", + " parallax float64 mas Parallax\n", + " parallax_error float64 mas Standard error of parallax\n", + "radial_velocity float64 km / s Radial velocity" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.info" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting rows and columns\n", + "\n", + "In this section we'll see operations for selecting columns and rows from an Astropy `Table`. You can find more information about these operations in the [Astropy documentation](https://docs.astropy.org/en/stable/table/access_table.html).\n", + "\n", + "We can get the names of the columns like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['source_id',\n", + " 'ra',\n", + " 'dec',\n", + " 'pmra',\n", + " 'pmdec',\n", + " 'parallax',\n", + " 'parallax_error',\n", + " 'radial_velocity']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.colnames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And select an individual column like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<Column name='ra' dtype='float64' unit='deg' description='Right ascension' length=140340>\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
142.48301935991023
142.25452941346344
142.64528557468074
142.57739430926034
142.58913564478618
141.81762228999614
143.18339801317677
142.9347319464589
142.26769745823267
142.89551292869012
142.2780935768316
142.06138786534987
...
143.05456487172972
144.0436496516182
144.06566578919313
144.13177563215973
143.77696341662764
142.945956347594
142.97282480557786
143.4166017695258
143.64484588686904
143.41554585481808
143.6908739159247
143.7702681295401
" + ], + "text/plain": [ + "\n", + "142.48301935991023\n", + "142.25452941346344\n", + "142.64528557468074\n", + "142.57739430926034\n", + "142.58913564478618\n", + "141.81762228999614\n", + "143.18339801317677\n", + " 142.9347319464589\n", + "142.26769745823267\n", + "142.89551292869012\n", + " 142.2780935768316\n", + "142.06138786534987\n", + " ...\n", + "143.05456487172972\n", + " 144.0436496516182\n", + "144.06566578919313\n", + "144.13177563215973\n", + "143.77696341662764\n", + " 142.945956347594\n", + "142.97282480557786\n", + " 143.4166017695258\n", + "143.64484588686904\n", + "143.41554585481808\n", + " 143.6908739159247\n", + " 143.7702681295401" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results['ra']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Column` object that contains the data, and also the data type, units, and name of the column." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.column.Column" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results['ra'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rows in the `Table` are numbered from 0 to `n-1`, where `n` is the number of rows. We can select the first row like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Row index=0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
637987125186749568142.4830193599102321.75771616932985-2.51683846838757662.941813096629439-0.25734489623333540.8237207945098111e+20
" + ], + "text/plain": [ + "\n", + " source_id ra dec pmra pmdec parallax parallax_error radial_velocity\n", + " deg deg mas / yr mas / yr mas mas km / s \n", + " int64 float64 float64 float64 float64 float64 float64 float64 \n", + "------------------ ------------------ ----------------- ------------------- ----------------- ------------------- ----------------- ---------------\n", + "637987125186749568 142.48301935991023 21.75771616932985 -2.5168384683875766 2.941813096629439 -0.2573448962333354 0.823720794509811 1e+20" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you might have guessed, the result is a `Row` object." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.row.Row" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the bracket operator selects both columns and rows. You might wonder how it knows which to select.\n", + "\n", + "If the expression in brackets is a string, it selects a column; if the expression is an integer, it selects a row.\n", + "\n", + "If you apply the bracket operator twice, you can select a column and then an element from the column." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "142.48301935991023" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results['ra'][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or you can select a row and then an element from the row." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "142.48301935991023" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[0]['ra']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You get the same result either way." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scatter plot\n", + "\n", + "To see what the results look like, we'll use a scatter plot. The library we'll use is [Matplotlib](https://matplotlib.org/), which is the most widely-used plotting library for Python.\n", + "\n", + "The Matplotlib interface is based on MATLAB (hence the name), so if you know MATLAB, some of it will be familiar.\n", + "\n", + "We'll import like this." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pyplot part of the Matplotlib library. It is conventional to import it using the shortened name `plt`.\n", + "\n", + "Pyplot provides two functions that can make scatterplots, [plt.scatter](https://matplotlib.org/3.3.0/api/_as_gen/matplotlib.pyplot.scatter.html) and [plt.plot](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html).\n", + "\n", + "* `scatter` is more versatile; for example, you can make every point in a scatter plot a different color.\n", + "\n", + "* `plot` is more limited, but for simple cases, it can be substantially faster. \n", + "\n", + "Jake Vanderplas explains these differences in [The Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html)\n", + "\n", + "Since we are plotting more than 100,000 points and they are all the same size and color, we'll use `plot`.\n", + "\n", + "Here's a scatter plot with right ascension on the x-axis and declination on the y-axis, both ICRS coordinates in degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = results['ra']\n", + "y = results['dec']\n", + "plt.plot(x, y, 'ko')\n", + "\n", + "plt.xlabel('ra (degree ICRS)')\n", + "plt.ylabel('dec (degree ICRS)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The arguments to `plt.plot` are `x`, `y`, and a string that specifies the style. In this case, the letters `ko` indicate that we want a black, round marker (`k` is for black because `b` is for blue).\n", + "\n", + "The functions `xlabel` and `ylabel` put labels on the axes.\n", + "\n", + "This scatter plot has a problem. It is \"[overplotted](https://python-graph-gallery.com/134-how-to-avoid-overplotting-with-python/)\", which means that there are so many overlapping points, we can't distinguish between high and low density areas.\n", + "\n", + "To fix this, we can provide optional arguments to control the size and transparency of the points.\n", + "\n", + "**Exercise:** In the call to `plt.plot`, add the keyword argument `markersize=0.1` to make the markers smaller.\n", + "\n", + "Then add the argument `alpha=0.1` to make the markers nearly transparent.\n", + "\n", + "Adjust these arguments until you think the figure shows the data most clearly.\n", + "\n", + "Note: Once you have made these changes, you might notice that the figure shows stripes with lower density of stars. These stripes are caused by the way Gaia scans the sky, which [you can read about here](https://www.cosmos.esa.int/web/gaia/scanning-law). The dataset we are using, [Gaia Data Release 2](https://www.cosmos.esa.int/web/gaia/dr2), covers 22 months of observations; during this time, some parts of the sky were scanned more than others." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transform back\n", + "\n", + "Remember that we selected data from a rectangle of coordinates in the `GD1Koposov10` frame, then transformed them to ICRS when we constructed the query.\n", + "The coordinates in `results` are in ICRS.\n", + "\n", + "To plot them, we will transform them back to the `GD1Koposov10` frame; that way, the axes of the figure are aligned with the GD-1, which will make it easy to select stars near the centerline of the stream.\n", + "\n", + "To do that, we'll put the results into a `GaiaData` object, provided by the [pyia library](https://pyia.readthedocs.io/en/latest/api/pyia.GaiaData.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pyia.data.GaiaData" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pyia import GaiaData\n", + "\n", + "gaia_data = GaiaData(results)\n", + "type(gaia_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can extract sky coordinates from the `GaiaData` object, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.units as u\n", + "\n", + "skycoord = gaia_data.get_skycoord(\n", + " distance=8*u.kpc, \n", + " radial_velocity=0*u.km/u.s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We provide `distance` and `radial_velocity` to prepare the data for reflex correction, which we explain below." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(skycoord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an Astropy `SkyCoord` object ([documentation here](https://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html#astropy.coordinates.SkyCoord)), which provides `transform_to`, so we can transform the coordinates to other frames." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "transformed = skycoord.transform_to(gc.GD1Koposov10)\n", + "type(transformed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is another `SkyCoord` object, now in the `GD1Koposov10` frame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to correct the proper motion measurements from Gaia for reflex due to the motion of our solar system around the Galactic center.\n", + "\n", + "When we created `skycoord`, we provided `distance` and `radial_velocity` as arguments, which means we ignore the measurements provided by Gaia and replace them with these fixed values.\n", + "\n", + "That might seem like a strange thing to do, but here's the motivation:\n", + "\n", + "* Because the stars in GD-1 are so far away, the distance estimates we get from Gaia, which are based on parallax, are not very precise. So we replace them with our current best estimate of the mean distance to GD-1, about 8 kpc. See [Koposov, Rix, and Hogg, 2010](https://ui.adsabs.harvard.edu/abs/2010ApJ...712..260K/abstract).\n", + "\n", + "* For the other stars in the table, this distance estimate will be inaccurate, so reflex correction will not be correct. But that should have only a small effect on our ability to identify stars with the proper motion we expect for GD-1.\n", + "\n", + "* The measurement of radial velocity has no effect on the correction for proper motion; the value we provide is arbitrary, but we have to provide a value to avoid errors in the reflex correction calculation.\n", + "\n", + "We are grateful to Adrian Price-Whelen for his help explaining this step in the analysis." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With this preparation, we can use `reflex_correct` from Gala ([documentation here](https://gala-astro.readthedocs.io/en/latest/api/gala.coordinates.reflex_correct.html)) to correct for solar reflex motion." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gd1_coord = gc.reflex_correct(transformed)\n", + "\n", + "type(gd1_coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `SkyCoord` object that contains \n", + "\n", + "* The transformed coordinates as attributes named `phi1` and `phi2`, which represent right ascension and declination in the `GD1Koposov10` frame.\n", + "\n", + "* The transformed and corrected proper motions as `pm_phi1_cosphi2` and `pm_phi2`.\n", + "\n", + "We can select the coordinates like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "phi1 = gd1_coord.phi1\n", + "phi2 = gd1_coord.phi2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And plot them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(phi1, phi2, 'ko', markersize=0.1, alpha=0.2)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember that we started with a rectangle in GD-1 coordinates. When transformed to ICRS, it's a non-rectangular polygon. Now that we have transformed back to GD-1 coordinates, it's a rectangle again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pandas DataFrame\n", + "\n", + "At this point we have three objects containing different subsets of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pyia.data.GaiaData" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(gaia_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(gd1_coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On one hand, this makes sense, since each object provides different capabilities. But working with three different object types can be awkward.\n", + "\n", + "It will be more convenient to choose one object and get all of the data into it. We'll use a Pandas DataFrame, for two reasons:\n", + "\n", + "1. It provides capabilities that are pretty much a superset of the other data structures, so it's the all-in-one solution.\n", + "\n", + "2. Pandas is a general-purpose tool that is useful in many domains, especially data science. If you are going to develop expertise in one tool, Pandas is a good choice.\n", + "\n", + "However, compared to an Astropy `Table`, Pandas has one big drawback: it does not keep the metadata associated with the table, including the units for the columns." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's easy to convert a `Table` to a Pandas `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 8)" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = results.to_pandas()\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`DataFrame` provides `shape`, which shows the number of rows and columns.\n", + "\n", + "It also provides `head`, which displays the first few rows. It is useful for spot-checking large results as you go along." + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
0637987125186749568142.48301921.757716-2.5168382.941813-0.2573450.8237211.000000e+20
1638285195917112960142.25452922.4761682.662702-12.1659840.4227280.2974721.000000e+20
2638073505568978688142.64528622.16693218.306747-7.9506600.1036400.5445841.000000e+20
3638086386175786752142.57739422.2279200.987786-2.584105-0.8573271.0596071.000000e+20
4638049655615392384142.58913622.1107830.244439-4.9410790.0996250.4862241.000000e+20
\n", + "
" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 637987125186749568 142.483019 21.757716 -2.516838 2.941813 -0.257345 \n", + "1 638285195917112960 142.254529 22.476168 2.662702 -12.165984 0.422728 \n", + "2 638073505568978688 142.645286 22.166932 18.306747 -7.950660 0.103640 \n", + "3 638086386175786752 142.577394 22.227920 0.987786 -2.584105 -0.857327 \n", + "4 638049655615392384 142.589136 22.110783 0.244439 -4.941079 0.099625 \n", + "\n", + " parallax_error radial_velocity \n", + "0 0.823721 1.000000e+20 \n", + "1 0.297472 1.000000e+20 \n", + "2 0.544584 1.000000e+20 \n", + "3 1.059607 1.000000e+20 \n", + "4 0.486224 1.000000e+20 " + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python detail: `shape` is an attribute, so we can display it's value without calling it as a function; `head` is a function, so we need the parentheses." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can extract the columns we want from `gd1_coord` and add them as columns in the `DataFrame`. `phi1` and `phi2` contain the transformed coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 10)" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['phi1'] = gd1_coord.phi1\n", + "df['phi2'] = gd1_coord.phi2\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pm_phi1_cosphi2` and `pm_phi2` contain the components of proper motion in the transformed frame." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 12)" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['pm_phi1'] = gd1_coord.pm_phi1_cosphi2\n", + "df['pm_phi2'] = gd1_coord.pm_phi2\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail:** If you notice that `SkyCoord` has an attribute called `proper_motion`, you might wonder why we are not using it.\n", + "\n", + "We could have: `proper_motion` contains the same data as `pm_phi1_cosphi2` and `pm_phi2`, but in a different format." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot proper motion\n", + "\n", + "Now we are ready to replicate one of the panels in Figure 1 of the Price-Whelan and Bonaca paper, the one that shows the components of proper motion as a scatter plot:\n", + "\n", + "\n", + "\n", + "In this figure, the shaded area is a high-density region of stars with the proper motion we expect for stars in GD-1. \n", + "\n", + "* Due to the nature of tidal streams, we expect the proper motion for most stars to be along the axis of the stream; that is, we expect motion in the direction of `phi2` to be near 0.\n", + "\n", + "* In the direction of `phi1`, we don't have a prior expectation for proper motion, except that it should form a cluster at a non-zero value. \n", + "\n", + "To locate this cluster, we'll select stars near the centerline of GD-1 and plot their proper motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting the centerline\n", + "\n", + "As we can see in the following figure, many stars in GD-1 are less than 1 degree of declination from the line `phi2=0`.\n", + "\n", + "\n", + "\n", + "If we select stars near this line, they are more likely to be in GD-1.\n", + "\n", + "We'll start by selecting the `phi2` column from the `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi2 = df['phi2']\n", + "type(phi2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Series`, which is the structure Pandas uses to represent columns.\n", + "\n", + "We can use a comparison operator, `>`, to compare the values in a `Series` to a constant." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi2_min = -1.0 * u.deg\n", + "phi2_max = 1.0 * u.deg\n", + "\n", + "mask = (df['phi2'] > phi2_min)\n", + "type(mask)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('bool')" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask.dtype" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Series` of Boolean values, that is, `True` and `False`. " + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "Name: phi2, dtype: bool" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Boolean `Series` is sometimes called a \"mask\" because we can use it to mask out some of the rows in a `DataFrame` and select the rest, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected = df[mask]\n", + "type(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`selected` is a `DataFrame` that contains only the rows from `df` that correspond to `True` values in `mask`.\n", + "\n", + "The previous mask selects all stars where `phi2` exceeds `phi2_min`; now we'll select stars where `phi2` falls between `phi2_min` and `phi2_max`." + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [], + "source": [ + "phi_mask = ((df['phi2'] > phi2_min) & \n", + " (df['phi2'] < phi2_max))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `&` operator computes \"logical AND\", which means the result is true where elements from both Boolean `Series` are true.\n", + "\n", + "The sum of a Boolean `Series` is the number of `True` values, so we can use `sum` to see how many stars are in the selected region." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25084" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi_mask.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can use `phi1_mask` to select stars near the centerline, which are more likely to be in GD-1." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25084" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "centerline = df[phi_mask]\n", + "len(centerline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a scatter plot of proper motion for the selected stars." + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.1, alpha=0.1)\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Looking at these results, we see a large cluster around (0, 0), and a smaller cluster near (0, -10).\n", + "\n", + "We can use `xlim` and `ylim` to set the limits on the axes and zoom in on the region near (0, 0)." + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can see the smaller cluster more clearly.\n", + "\n", + "You might notice that our figure is less dense than the one in the paper. That's because we started with a set of stars from a relatively small region. The figure in the paper is based on a region about 10 times bigger.\n", + "\n", + "In the next lesson we'll go back and select stars from a larger region. But first we'll use the proper motion data to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filtering based on proper motion\n", + "\n", + "The next step is to select stars in the \"overdense\" region of proper motion, which are candidates to be in GD-1.\n", + "\n", + "In the original paper, Price-Whelan and Bonaca used a polygon to cover this region, as shown in this figure.\n", + "\n", + "\n", + "\n", + "We'll use a simple rectangle for now, but in a later lesson we'll see how to select a polygonal region as well.\n", + "\n", + "Here are bounds on proper motion we chose by eye," + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To draw these bounds, we'll make two lists containing the coordinates of the corners of the rectangle." + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the plot looks like with the bounds we chose." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "plt.plot(pm1_rect, pm2_rect, '-')\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To select rows that fall within these bounds, we'll use the following function, which uses Pandas operators to make a mask that selects rows where `series` falls between `low` and `high`." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "def between(series, low, high):\n", + " \"\"\"Make a Boolean Series.\n", + " \n", + " series: Pandas Series\n", + " low: lower bound\n", + " high: upper bound\n", + " \n", + " returns: Boolean Series\n", + " \"\"\"\n", + " return (series > low) & (series < high)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following mask select stars with proper motion in the region we chose." + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [], + "source": [ + "pm_mask = (between(df['pm_phi1'], pm1_min, pm1_max) & \n", + " between(df['pm_phi2'], pm2_min, pm2_max))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, the sum of a Boolean series is the number of `True` values." + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1049" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_mask.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use this mask to select rows from `df`." + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1049" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected = df[pm_mask]\n", + "len(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the stars we think are likely to be in GD-1. Let's see what they look like, plotting their coordinates (not their proper motion)." + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "phi1 = selected['phi1']\n", + "phi2 = selected['phi2']\n", + "\n", + "plt.plot(phi1, phi2, 'ko', markersize=0.5, alpha=0.5)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that's starting to look like a tidal stream!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving the DataFrame\n", + "\n", + "At this point we have run a successful query and cleaned up the results; this is a good time to save the data.\n", + "\n", + "To save a Pandas `DataFrame`, one option is to convert it to an Astropy `Table`, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_table = Table.from_pandas(selected)\n", + "type(selected_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we could write the `Table` to a FITS file, as we did in the previous lesson. \n", + "\n", + "But Pandas provides functions to write DataFrames in other formats; to see what they are [find the functions here that begin with `to_`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html).\n", + "\n", + "One of the best options is HDF5, which is Version 5 of [Hierarchical Data Format](https://en.wikipedia.org/wiki/Hierarchical_Data_Format).\n", + "\n", + "HDF5 is a binary format, so files are small and fast to read and write (like FITS, but unlike XML).\n", + "\n", + "An HDF5 file is similar to an SQL database in the sense that it can contain more than one table, although in HDF5 vocabulary, a table is called a Dataset. ([Multi-extension FITS files](https://www.stsci.edu/itt/review/dhb_2011/Intro/intro_ch23.html) can also contain more than one table.)\n", + "\n", + "And HDF5 stores the metadata associated with the table, including column names, row labels, and data types (like FITS).\n", + "\n", + "Finally, HDF5 is a cross-language standard, so if you write an HDF5 file with Pandas, you can read it back with many other software tools (more than FITS)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we write the HDF5, let's delete the old one, if it exists." + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [], + "source": [ + "!rm -f gd1_dataframe.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can write a Pandas `DataFrame` to an HDF5 file like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_dataframe.hdf5'\n", + "\n", + "df.to_hdf(filename, 'df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because an HDF5 file can contain more than one Dataset, we have to provide a name, or \"key\", that identifies the Dataset in the file.\n", + "\n", + "We could use any string as the key, but in this example I use the variable name `df`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** We're going to need `centerline` and `selected` later as well. Write a line or two of code to add it as a second Dataset in the HDF5 file." + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "centerline.to_hdf(filename, 'centerline')\n", + "selected.to_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail:** Reading and writing HDF5 tables requires a library called `PyTables` that is not always installed with Pandas. You can install it with pip like this:\n", + "\n", + "```\n", + "pip install tables\n", + "```\n", + "\n", + "If you install it using Conda, the name of the package is `pytables`.\n", + "\n", + "```\n", + "conda install pytables\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `ls` to confirm that the file exists and check the size:" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 17M Oct 19 12:05 gd1_dataframe.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_dataframe.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_dataframe.hdf5\n", + "```\n", + "\n", + "We can read the file back like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 12)" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_back_df = pd.read_hdf(filename, 'df')\n", + "read_back_df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this lesson, we re-loaded the Gaia data we saved from a previous query.\n", + "\n", + "We transformed the coordinates and proper motion from ICRS to a frame aligned with GD-1, and stored the results in a Pandas `DataFrame`.\n", + "\n", + "Then we replicated the selection process from the Price-Whelan and Bonaca paper:\n", + "\n", + "* We selected stars near the centerline of GD-1 and made a scatter plot of their proper motion.\n", + "\n", + "* We identified a region of proper motion that contains stars likely to be in GD-1.\n", + "\n", + "* We used a Boolean `Series` as a mask to select stars whose proper motion is in that region.\n", + "\n", + "So far, we have used data from a relatively small region of the sky. In the next lesson, we'll write a query that selects stars based on proper motion, which will allow us to explore a larger region." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* When you make a scatter plot, adjust the size of the markers and their transparency so the figure is not overplotted; otherwise it can misrepresent the data badly.\n", + "\n", + "* For simple scatter plots in Matplotlib, `plot` is faster than `scatter`.\n", + "\n", + "* An Astropy `Table` and a Pandas `DataFrame` are similar in many ways and they provide many of the same functions. They have pros and cons, but for many projects, either one would be a reasonable choice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/_build/html/_sources/04_select.ipynb b/_build/html/_sources/04_select.ipynb new file mode 100644 index 0000000..56cda75 --- /dev/null +++ b/_build/html/_sources/04_select.ipynb @@ -0,0 +1,1445 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 4\n", + "\n", + "This is the fourth in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In the second lesson, we write a query to select stars from the region of the sky where we expect GD-1 to be, and save the results in a FITS file.\n", + "\n", + "In the third lesson, we read that data back and identified stars with the proper motion we expect for GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this lesson:\n", + "\n", + "1. Using data from the previous lesson, we'll identify the values of proper motion for stars likely to be in GD-1.\n", + "\n", + "2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.\n", + "\n", + "3. We'll also see how to write the results to a CSV file.\n", + "\n", + "That will make it possible to search a bigger region of the sky in a single query.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Convert proper motion between frames.\n", + "\n", + "* Write an ADQL query that selects based on proper motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "The following cells download the data from the previous lesson, if necessary, and load it into a Pandas `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_dataframe.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_hdf(filename, 'df')\n", + "centerline = pd.read_hdf(filename, 'centerline')\n", + "selected = pd.read_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selection by proper motion\n", + "\n", + "At this point we have downloaded data for a relatively large number of stars (more than 100,000) and selected a relatively small number (around 1000).\n", + "\n", + "It would be more efficient to use ADQL to select only the stars we need. That would also make it possible to download data covering a larger region of the sky.\n", + "\n", + "However, the selection we did was based on proper motion in the `GD1Koposov10` frame. In order to do the same selection in ADQL, we have to work with proper motions in ICRS.\n", + "\n", + "As a reminder, here's the rectangle we selected based on proper motion in the `GD1Koposov10` frame." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.units as u\n", + "\n", + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figure shows:\n", + "\n", + "* Proper motion for the stars we selected along the center line of GD-1,\n", + "\n", + "* The rectangle we selected, and\n", + "\n", + "* The stars inside the rectangle highlighted in green." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEKCAYAAAA8QgPpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9e1zU950vjj8/zcwnXCaKIyoqDnKR+0UBFVCRENdSyhprrYeYrGu6bpLjftOTc3KattvTbrM9e3qabnbTetYkjb8ka621lLLUEkIMIiIRFAblIhe5jyCjwAg6gn5mks/vj8nrnfe8+cwwmLSb7vp6PHgAn8/7/nm/X6/36y6pqor7cB/uw324D/dhrvCFf+8B3If7cB/uw33404T7BOQ+3If7cB/uwz3BfQJyH+7DfbgP9+Ge4D4BuQ/34T7ch/twT3CfgNyH+3Af7sN9uCe4T0Duw324D/fhPtwT/LsSEEmS3pQk6bokSW3cM6MkSe9LktT98e8FHurmSZLUJUlSjyRJ3/7jjfo+3If7cB/uA/Dvz4G8DSBPePZtACdVVV0F4OTH/7uBJEkPAPgXAF8CEA/gMUmS4v+wQ70P9+E+3If7wMO/KwFRVbUGgE14/CiAf/34738FsF2j6joAPaqq9qmqqgA49nG9+3Af7sN9uA9/JND9ew9AA5aoqjoCAKqqjkiStFijzHIAV7j/hwCs12pMkqSnADwFAIGBgWkxMTGYmppCQEAAJEmCqqqYmpqCv78/vvCFT+gpPadyf2xQVdWtX/F/sazWnO517N768mWcALzWF8to9edtDh999BG+8IUvzPh2qqri9u3bAIDAwEDNNm/fvo2PPvoIDz300JzmONt6imUcDgd0Op3Hb+htncRykiTho48+wu3bt2EwGDzWEcfodDoxOTmJBQsWQJIktje8jYnKAJixp8Sx09/T09Pw9/dn77XG99FHH2F6epq1R99QnIOqqrhx4wYWLFgw4zxqfU+xv9n2LvVBZW7fvg1VVdm68mtAZT766CNMTU2xcuLaeOrH01p4Kq/1fXyt82nOvy99ms3mMVVVF2lW/vf8AbASQBv3/4Tw/oZGna8BOMT9/xcADszWV2pqqqqqqnr37l2Vh1u3bqnnzp2b8Vz83xPw5XytM1t7/HjE/33p15cxfRZj1WpTHLu3Mp7m5qnurVu31Lfeeku9deuWZhlq0xPcunXL63rMZa3msl983SNa63H37l311KlT6quvvqreunWLzd3b2Kmd8fFx9renfe6tX/E7arVFf/Pj8jYWvg0tEL+tp/K+nAuttvk6t27dUj/44IMZYxf35/j4uFs5eudpj3pa588KtL631m9f25oNADSqWvhb6+Ef80eDgHQBWPrx30sBdGnUyQTwHvf/dwB8Z7a+YmNjP3NkqrXZPB2MubY72/+zIWqtcrM9/yyAP5ye+vCGbLR+a9X1lejQc29rdvfuXfWDDz5Qa2trfVqT2dZPRL60L3xZd60LDiFqIqDj4+Me5yX2z7c510sIjfuDDz6Y0Qb/DfkyWuMhBEzrOz4+Puv6iYhe69vNZV97Op98257mplVOa798ljjAE9y9e1etra11+yZ833MlHr7U+VMiID8B8O2P//42gJc06ugA9AEIByADaAaQMFtfxIF81sAv/h/j9iH26wsy04I/9Cb3dJA8ITz+NngvN2a+vqeD5Y24aSHduSB6vo6IXHiE6a1dETGOj4+rb7zxhts6UltaiM/T3Dz15QsxGx8fnxVRElLzRJx5AqpVV2tNxOe0R+51v2u94/cDPy5PHDI/Jk/f8Q95KRPH8Fn07UudzyUBAfArACMAHHDpMf4KwEK4rK+6P/5t/LjsMgDlXN18AJcB9AL4ri/9fdYE5F428Fzb9rWt2ZCdVvk/BpvtyztCuCdOnFCrq6s1b4KeEBMBEY/y8nL1xIkTmmIJ/m9vt0SRCPhKaEVCJRIrfi6eRDIiAaV1IUQuzsfTDdzb3MR5egPieEZGRjTfiYTB1zPBj7+2tlatrq7WJFL8TfvWrVuMmH4WiNITwRDLehvTHxK0LoieOLE/NHwuCcgf+8ebCGuuIN64PkvQ2tj0fLY6cyUif4iy9wKeZNG+cCT0fHx8XK2urlbLy8tniEg8ITARRCKgJd/3BloIurq6WlNsIt7YaU/xCJKej4yMqN/73vfcRFf8ey2EpzUWbzdrT+BtLWke/HearU1fOA1qW3x+6tQpr8jd2/y96UvmcpsXv89nBd7Gy38z8SLyxyAi9wmI+uk4EK1DKiK8ubTlaxnxpubrrf6zAK0b0GfVptZzrcNNc/b1xs2LfMTx3wsRoDZ9FQnxcyGiJoqgqAwvbtNSSIvjJy6An88HH3ygnjp1asaN2JMYRixDvz3tLXFOs4n+eGLgqRxxmVrfg78M8MYS4nj4slriJ29chS8cjDeC82kMQDy987Res7U7F1zyaeA+AVFVpKWl3dPiESLzdkjn0tZclaj07I/BNhP4cpucy62N3vlyKH1tz1MZb4hprkSAvr0ncRjfPpXzppD1huTFtrQU197GSXW1CKYWkueJkCg61BpfbW2t+v7772vOR4tYa7VFBHVkZMTNGEAsw89FC3gCLV4yRN2KqIx/4403GCfjCWGL68rDbHtBa5/zxg+eCMUf4mz7gm98gfsE5FMQEFX1LC++lw9zL0j2Xvu6F/Dlxu7pxuRLPU/P57rZvZXTQp6zEScRqdbW1jLrIRFBivMmOb63feLrLZMvP9s8eeBv7d7mxnM79E7khHgEzbfPc1O8Mp/nxkVizXMF9HP3rkssJ1pujYyMuI2Pfy+uBT339n34eRKIynxPf3vitjyJUcX1FkGLA/msELw3+Czavk9A1D+cFdanhXu5dc+1zbmCL+IerXF/Gis0T8jXU1+e+hGVrdXV1Qy5e6pPfYtI1ZOyW2s8np7xfXkTY3iaty8XCkKkPMLXKsOPiwiEp/FpibaofSJWIyMj6q1bt2YowUWEToSDuA8iuKdOnWLfSRRJkXjOFx2Y1pxp/OK358uJa6K1VrOtO3EXvhgu3Mv7zwN4IiD/3rGw/qgwNTUFRVF8Lj+XsvcKiqLg4sWLsNvt7Jksy59qHNQmX2+u825vb5+1Dj9O6lOWZaxevXrGHHwds7d3NB5FUbz2I8syVq1axd6pqgqHwzGjDNVXFAWNjY2oq6tDc3Mza99gMGD16tXM+1hRFDaGhoYGt/WRZZn1Z7fbWZsNDQ2w2+1YvXo1AKC9vR02m23G9/EEsiwjPj6ejZPAbrfPaENVP/GUFteN5kTlZVlGVFQUjh8/rjm+hoYGAC5vdr69np4e2Gw2dHZ2Ii8vD319fTCbzUhLS8PatWvdxi2uMwCEhYWhr68PKSkpyMzMRHp6OsxmMxoaGtiYDAYDFEVBeno6srKy3L6D+M1pr4rnR1EUmM1mxMXFuW7KAtD34ddJXHf+N5Wz2+3sGb/n8/Ly3J7TOmt9JxFmOyti3T8EXrrXNv9TEZCAgACfEZsWEvYVfKnDH+T4+HiPCFtRFIastN7zB4dAPLRznYs35OypDb6OiOw8gSeCINYV3xHB9fQtZVlGZmYmG0t6ejr0er1mOeo7OTkZmZmZWLt2rdu68X83NDSgsbERdrsdkiQxQsGD3W5HcXEx7HY70tPTERcXh5KSEtZWfHw8enp6EBUVNQM5eVojQpA0b0VR0NzczAgLQUpKyow1iYqKAgA2bpqDoigwGo3Ytm0benp62HrEx8ejpaXFjXDw6xUfH4/W1lZWPzY2FjqdjvXraZ+dPXsWLS0tSEpKQnp6OgwGA/s+er0eKSkpsNvtKCkpgcViYWvI983/5r8PjVm8MHV3d8+ow78nwkL7yxsoioK6ujocO3aMjYvqKYqCsrIy1NXVMeJL693S0oL4eO9xXr2dFa3L073iJV/7mAv8pyIgc4kL9Wlv0p4QvlgGAAwGwwxkII5b6ybDIyut8X+auXg6dN42Gn8Dn21D8oSAyvIEQouI0G+R4NJa82suzl9VVbfy4hja29tnnevatWuRnJyMnp4eREREoKSkBHV1dW79GgwGN6RsMBjciAV969bWVkYMPK0XT1ipHs1bkqQZxM1sNrvdfE+ePImSkhLY7XaoqgpZltkcqK7RaJyxNyRJQlpaGmRZhk7nHi6PyiUnJwMAenp6EBcX5/ZttECWZURERKCsrGwG55aeng4A6OjowPLly3HlyhXk5uaio6ODIWIRiIOgtee5DEVRYDAYUFhYCKPRiPT0dLeLCRFlkeDOtrczMzNRWFjIOCR6Tn2lpaWhp6cHKSkpM/r01PZs+EK8PN0rXvIGn6pNLbnWf9SfT6NEnwv4ogvQUsJ6KuvNF+FezIg9wVz1Hp7kw3NxZNN6NpuMm3/Gy8qrq6tnKF2pLL27deuWmy+BKAPnLa7onZYfBK941tJTeLLUoXqvvvqq+v777zPdgZbvh5YVnKffvL6C9D6vvvqqOjIyMkPW72mvkdL6xIkTM3ww+PHzZsO8wQH/tyf9mJYfh6hkJ0U6/a/1TWgepIvh/WO8Wfp50kF50r9p6Uk8raGWHkVrP3rqYzZ88WmV7Z+mLu4r0T8bAjIXG/K5+B3MZqL7WSraPCEP0axytjZ8Ve76Uod/z68brxD31A5/sEXizbdJ7/j2PBEaHjG/8cYbM2JPefNP8YSs+HHzCFocp5b/wmzmz6QM599pmfRq7TV+zUZGRmYQNhG0iJ34P9+2SCT4dngnRCJ8tN78My1HRd7cV1wXsX8q58m8WcucmtZKJI6iZZ6nb0Tz1hqTFmjtJU/zmut7X86et+f3CchnQEBEG3JvMFeE/1kSiNn68YSMxHhN4nutZzxoHWQtZOjtoGj5n7z//vuz9i3W9+QDQWW0EIcYR4ue8+a5otmqp/XifRo8ERMesWm900I6fB0a6/j4uPq9733PLdwIT1A8cVD8/AgxktUSte/JG5oQvDdfISK0fPtiO9QP/5yekWUT/014U2GesGsB379IRLS+P38xoPrifvAmDRC/F08c+QuHp/NHv++F0/Clnjci4cnpk57fJyD3SEC0EMNnjez/WMSDYLYbmBZimC3+jydTRh45i4jDVw5mrhFyvc2PLyciUlG05elWKv7Wap9fRxGB85FpR0ZG3EyOebGNpzDjIyMj6oEDB9RXX32VIVBe7DM+Pq5+61vfYk5/nm7+1dXVLPyLaL7Lz0NcD/IHEet5Wi8R8Ypr74nzIiKlhXzv3r2r/u53v9P0vREvC1pEgX/P/83vU097XlwXT8DPcTanUG+E2Fe4F+Kh9V7rW94nIBoExJdF/Sw+rKe2tfr4rMHbZtXaKN6Q8Gxj9Cbu8OQj4Gmcs83B221qNiLAl+MRm4iMtOp464t+8zoC8T0R2pGREUZI3n//fXV8fFx9//331QMHDqinTp1yu+HzxIXqvPPOO25Od+JcqE3qkx8vEbUTJ06oxcXFzNeCyooe9eL87969y3QrWuuh5eXN1+fFU1oES+SGeA6CX8dXX32V6Wu0wsJojZuIgpb/i8gpetpnWkTPE8x2dnzFLb6cP2915xq3TyzriYD8p7LC4sEX0zUt89F7NZ8TTQx5y6PP2qpCqx8C3q8AgJvpLb0XfR/IRn4281zeBwH4xEpMURSPPgJkfSL6wvAgmm7ypqhalkv0TjQtpvcE5PfBrweZYYpmwqK1DI2jpqZmhrmv0+lEbGzsjLnSGm3btg29vb3o7OxEcnIyUlNT0dHRAQCIiIhgll6yLCMkJAQtLS04ffo0jhw5gtbWVsTGxiIwMJBZUNGc6dsqioKMjAz09PQwU1Ky9AI++ebT09P43e9+h9DQUGYq3NjYiOnpac19Sd/r7NmzbtZUvEWSoiisX/6b8tZhRUVFeO2113D69GmcPHnSzfcGcPmetLa2Ii4uDmlpacwijL4JWVk98cQT2Lx5M2RZxtTUFJqbm9n8+O/Gf4OUlBSEhoYy02paPzK3JQsr8oMRz6WWZZyns0vt1NXVeXzP4wFPIO55fj19BV8sUEU84Qv8pyUgviJuTw5RvgCPbHhELrZ1L6bCvpTRGjOZrPIIRQRPJsC+mCjz4zMYDNi5c6dHHwGeOGnZ8nsaG5miAnAjJIQIPB0E8TuQ/wFPLEtLSzE+Ps6QmrgONA8AiIuLw8DAAGw2G6tfX1+Pixcvoqmpye3A82MwGo1ucyDTz4yMDEbs4uPjYbfbcejQIYSGhmLz5s3YtWsXMjMzYTAY3MxrW1pacPv2bdjtdtTX1+Pll1+G3W5nyM11gYTbXmhvb8fGjRvx0ksvwWQyMVNjSZKYzwxPFPm9m5WVxcxZRRNkg8GAHTt2wGg0MrNj3v8EALZv3w6DwYCYmBgMDw8jLi7O7SykpaXB4XCgqakJ9fX1aG5uhs1mw7FjxxiBJyJC9fz9/d3MckUTcQCMQJaXl2PBggWsLO0Z0ZSZ/2ZUn/qm80Bm1Z5MySMjI2eYQot7yhcctHbtWjfT4Lk4CpOp9GxEytslziNosSX/UX9m04H4yuL5Kv/kZahzZT+9sby+sM33Ysro67i8jUFL7KclJuPLq+pMM1QCT8pKmgcvbuFTporlZ/ub/qcwG1q5N7TGxAcFvHXrllpeXq4eOHCAiaj4+rwo4e7dmflGSCzz/vvvM5EMPx5PCZtI/EY6iZGRETdrMl62z9fhxV2kkBbXT9zHolJZSxEu6jjoOS/yoTpaoVfu3nUZTpSXl7uJ80jUphUFW2vc4m8aK+mdRKW+2J5Yj0zFtZT+tP6Ui4aez6boF7+lryDO9bMQg3sSyd2961mJ/p+WAxFhLrdrrduNCOKtwZf+6bd4wxA9cn25tWiFfBDFU/cqNvM0BpHr0eKCtLgx3rEL+IRT8eQoyc9j7dq1zFnv+PHjM26S4ncSuSsRLBYL4uLi0NPTo/ktFMXlBU5jCgkJwbZt29DS0gKz2Qx/f3/s3LkTXV1dKCkpYWFLqDzdbOlWSOMHwMQy2dnZiI2NRXt7OwwGA5xO5wzvcH7sBoMBSUlJ7LnRaISqqoiNjWUcjaqqbjdkXvyi1+uxdetWN490/nvSPlYUBUeOHEFdXR0TJxFXRh7aNpuNiYXEdaNQJPT/sWPHmFc74BIfEtem1+uh1+uRnJyMpqYmNDc3s7OUnJzsdvPX2lciEFdnMBgQEhKCHTt2sG+sJd7k15fGLMsyYmJi3Dh4nutNSkpCYGAgFi9ezNZ91apVbo6HIsw2bmBmtAlxj39WYnBPoWI+5ri1ZWBaVOU/6o8vHIivN3z+92wwW5taSjlR6ap1E9cCT8rPP+QNRasPXzgRes7/Fv/2dd5aZUWOy5e2Z7Pbv3v3rmbgQF6JSz+8EtuTMl8cL5UnroNvz9Na0JhIec3fiPmx8EppnnujTJBaFl+8OTD1w1t80fNTp06p3d3d6te//nW1u7vbzfqMd/bjORp+fnRbLy8vd7NEI25hcHBwxh4ibkTLVFrLfFY00+bLe8sxznO4PPfDc1JUt7u7W927d69b7pbZOH9v+4LWhd9b3jj62fbWvZbHfQ7EN/CFms9VdzFbm/x7UelLegRRQa0FdJMXFXsiVwB8EvCPr3svbfN98GEsvHEiovJc7Fu8XXsajzhuuunRj8hx8bdGu93OZOriHLVuePzfFDiQnxvFdwI+4aDohsvf7LTWjl8Lu92O5uZm3Lx5E01NTUyZ60neTqCqKuMSmpubkZSUBJ1OB0VxKdg7OjqQkpLCngPu3JDD4ZjBeZhMJhQVFaGmpoatU1paGiwWC6KiotzWKj09HTabDd/5zndgs9nYbZ/Wnw/vQhwNr7CWZRk7duyAv78/WlpamMK7t7cXW7duRVVVFRRFcTtHzc3NmJqaQkdHh8fYYtPT027PzGYzC4/Ch8PhuSwx1hU/D5FjOXbsGACwcCzDw8NMx0Nl6Wzw+iBxz2vpy2gMq1atAuCKJwZ8whHxkhBvugtRuuJrmCEtrl2EzyUBkSQpRpKki9zPTUmSnhPK5EiSNMmV+f6n6ZNftLkqyn0BX9r0pNQWkag3Np1HmCLQHEkhycdx8tUizdNYCHHxB0FU+ImEA3A/DFr9axE5T2JEQpZ1dXVuyk4AzBqJEI0sy1i+fDmamprc+pjNqoYQOf0v9iMiHZ5oawGJuGgtDAYDUlJS4O/vz5T8tLYmkwkAZswRcBEDmv/09DQT7xFyp3Y6OzuZ4QAh8bS0NOj1eoY8aW37+vpgMpkwNTWFoqIitl9Wr149I4YWzTsqKoqtYWNjI5sff8GgOnV1dTCbzZienobdbofRaERWVhaL1SXLMpxOJ0JCQtyMMQhSUlKQnZ2NlJQUFjfLZrMx8RpFDab/s7KykJaWxuYt7j0S0R05coRdsPhLgkg8FEVx20+AyzBj06ZNaGlpcfs+/H7QUtCr6syIwQSZmZkA4DYXfp8RceIvQ3z74uXNlwuyL3sXACRvA/88gCRJDwAYBrBeVdVB7nkOgP+pqmqBr22lp6erZAkigi/UVqvOxYsXPzMzXK2N+ln0ydcBwA4Xb8Ui9ukLIRXHorWG4gYUx+GtP3HcYl+efhOIxOP27dsIDAxkt8Wamhr09PTgiSeeAACYzWbo9foZeitqkx8LQWNjo1t5LSTT3NwMSZJmtEs6nm3btsFoNM6YO9/H5OQkhoeHsWPHDjerMbrp1tXVQVVVpifJzs5mY46Pj4fZbEZraysiIyPxyCOPuK0ZWSdJkgSdTscIDD/+yMhIyLKM48ePz+CIxe/U2NiI5ORk1NXVYXBwEAUFBejt7YXT6YROp2Mm3Y2NjYiNjUVTUxMGBgZQWFgIWZZZW0QQs7KyoCif6BrS09PR0tICVVXdLK9sNhtKS0sBAPn5+Th+/Dju3LmDtWvXIikpCbIso729nbXNc6b0nEfQFy9eRFRUFHp6ehiSJuJYV1eH7u5uZnEm7mNv+IQvw89Vi8Ph39fX18Pf398tYjSBzWab8W284Yq5nu8HH3zQrKpq+oxCWnKtz9MPgK0APtB4ngOgbC5t8ToQUYZ4rzqCT6tX0Grv04Qk8KWOrzoZLUsWT+1q/fam2/F1/L7Ibkm+7U03w8uQ+Xe8o6NoYaNV31ubonxajPOktT68BZO3Nb1712Uhxjvpid7NpOvgkzTx8v7333+fhYURv42n9VFV91AoJNsXxyw6ItJYKOEUr8uhcvzfYhlaP3KIPHfunDo4OOi2nqR74PUyZP1GVlPj4+Pq+Pi4+uqrr7Jyovc/v36iVZwn3QXNT3w2m15Ca435b6EVY01rD3r6Bp7GIz6bS3QHVVX/pHUghQB+5eFdpiRJzZIkvStJUoKvDSqKyxlKy+FsrvBZcB5ie77qYHiYTQzlSScy2xg8iYv4smIZ0WmNt/iZTQeg1b63eROoH3PSouMaz+rzNzt6R8/Xrl3LfCz4+ZDohW6/tF+0ZNqiqICX9dNNnyyYeMcw3tJMXEP+ptja2orOzk42DpozvzYdHR1wOp2or69HTU0Nm68sy8jIyIC/vz+rI+opaNyiKIvyl9BYrVYriouL3fxfWlpaYLPZmDWd3W7H0aNHcezYMRw5csRtzUn/RGIiWse6ujq3MxkXFwedTofOzk6YTCZUVVUxp0fAJRZKTk7G7du3UVZWBpPJhL6+PrS0tKClpYWtPVnpxcTEoLS0FMXFxVi+fDkAzFjj6elpFhafvrMnq0USm9H34BOIiXuZL0OiQGqT3zckihTHJe5hLQtF4pq0zpP4zNfUFrPht8+1CEuSJBnAVQAJqqpeE97NA/CRqqp2SZLyAfxUVdVVGm08BeApADCZTGmDg4PsQyYnJ/uknP404Aur+Hnvy5ssmMBms8FoNHqUF2uJn/h3sxEYAk/90wEpLi5GXl4eLBaL2+EHPhFlqaqKuLi4GWIjHqgsibtOnz4NWZaZCIYQYUtLCxwOB0tgJY6XX7+6ujp0dHTgiSeecNMd8Gt38eJFmEwmNjYSbdhsNrS2tiIpKQkGg4GtGS+uoDEpioJz585hcHAQu3btYkppUhKTfkIVRED0rqGhAZIksfNhtVphsVhgMpnwyiuv4IUXXgDgcoAksVVdXR0TfwEuBff09DRSU1PdREJUvqamhjn/KYqCkpIShIWFsZwaJDqitaB1InESrYnBYGCiMHEtiDjFx8ejubmZjY0XX4lQU1MDnU6H9PR05t1Pe0Brz/HP+f9FURYvimpubtYUQ4ljJ/Ak9rXb7TNyk/Bng0RzdNnh2/B0hjzhD0mS/vREWAAeBXDCx7IDAIK9lSER1myilM8K7lU09mnG5mtdLdbW13paTmmzmRp7ExeKwQbFenxE19nEYbzpqJYZMTmveQpdz4uVvJmA8nMXxQ2Un4Sc4UhcIjrc8fOjdgYHB9U33nhDfeedd9zyjtMzLXEKmZfyprrvv/8+i1dFohtx7UjcRQ5wBw4ccBMP0W9+ragdcQzUHm8e7G2P0VrwjoWiyIx30hTboAjEfFwt+u6846WWOIrfR/Q/b/ZL7ZFI05uI1BuIIk2tdfC1ridcQmPzJJKaTaRGMFtcL3gQYX3eOZBjAN5TVfUtjXchAK6pqqpKkrQOQDGAMNXLhNLT09WzZ8+ioaHB4w3g08BsVP1eFNNz7d+XulocgagM9laX1g/45DYjKiW9cXa+cCBiGfrN37jEW7jYvrje/LjoVh0VFcVu+6RM7uzsRGxsrJtprnjbJPEWfzvk14XWVJIkxjXQe7oZU72TJ08iICAAk5OTuH79OnJyclBZWYknnngCiuIKfUIcCM8B0TiOHTuGZcuWITAwkCmL6fZMSmqaU0ZGBltDUs5v2rQJiqKgqKiIcUfEUdB4qb+zZ8+ip6eHhTKhMQAuZ8KVK1dCr9fP4Mi0btVaXCdxdcT9ENehtaeJA+Fv9y0tLZiamoJer4fD4WDz5b8h7XX6nqKoiTcvpu+phTPE/aV11ud60/dUTtx/YjlP73wB/gx6Orf3xIEACAXwPwH8DkADgBoABwF8GcAXvNX9tD8AAgCMA5jPPXsGwDMf//3/AbgEoBlAPYCs2dpMS0vTDOvgCeZy45iN2/Dl/Vz69XTb8FbXUx9zUarx/YiKP1Wdu+Oj2J7W31RGXD9Ryak1N/6Z2P7g4CAbK88JiMpRsT4/R/6GKCq1Re6EzyHC3/BfffVVxnmQw9ypU6fcou3SfLWcIuk5ORPybfORd4kTIRgZGVFfffVVt1s6f+MWHQXpPc8REJfEr5u4t2i+FHmYFN3i3OjWL+bbEbkTLS6O7+/WrVvM4KC8vHzGPvK0P4hr1GpXS0HtzVF2No7am1Oot73nS/m5gi9tYK5KdEmS3gLwJgAFwI8BPAZgP4BKAHkAaiVJyp4DoZsTqKo6parqQlVVJ7lnr6mq+trHf/8/VVUTVFVNUVU1Q1XVsz60ifb2drec0J7Ak1LXm5La081/NkW92Nds3IPW2OiZr/MRldNz4ci0FH8Ec3F89NQe/Q24Kzn59aObIq/M5tfGU/gTuhVGRUXBarVi27ZtbKw0D3J4E4H8GMQgkWQazge7a2xsZAEZafy8/wFxLwCYPqagoABWqxWKoiA2NhYVFRUwmUxu+haz2czmyiucyZ9DkiSmBOYV5Js3b0ZMTAwOHjwIm80GRXH5hERFRbnNkZwr6YyQQr2trQ0nT56E2WxGZ2cna6Onpwfbtm0DAKbg52/1tO4GgwGxsbFoa2vDSy+9hKamJsaB2O125ntB4UvoG/OKZ6vVipdeegmHDh2C1WqdoWimb15XV4eysjKEhoaitrbWLZyMtzPidDrZHGjs1G5zc/MM5bdovs7vT+KIeKD/p6enZwTrpPeifw/fF98G/U2Ke1orX8Ab3vC1DQKPIixJkhJVVW3zWNGl4Dapqqp92j6HQCIsXxGlFov6aXwwZiMMcxFvAdpKPU9iA0/s9FzH8WlYcm91PIm9PM2DX1M64ORrwYuIxHGRyGfVqlVIS0ub4c9A7YniNArJraoqsrKyAHwihiEFLYmbqB8AqK+vh06nQ1ZWlkclrKK4PKR1Oh3i4uLQ2dkJVVURGRnJjAHa29sRFRXFFOLJycmsX1KUUnTcuro6BAYGMiLAi4tsNhtCQkLYnJKSktDR0cFEVWfOnMHg4CDCwsIAADqdDrIsY3JyEhaLBTt37gQAVFRUuBHfxsZGTE1Nwd/fH3FxcaxN+mYENpsNTU1NSExMREhICHtWVFSE/Px8GAwGdHZ24vbt25Bll9d/VVUVAgICkJ2dDZvNhra2NqboJnGTzWZDRUUF8vLy0NfXx5Tq5KAoipS09qzdbkdVVRXy8vLcvn1DQwMiIyPR19fHRGt8O6K4j75VSUkJ823R2i9aCvCGhoYZBh686E1VVbfLnpay3dtZ18JHvDLeE67yJMLyyIHwxEOSJH9JkmKE98qfEvEgmAuiE8t64iK8UW2tm4oIviJg8Zbuabz8LVzMI+ANPHE29NsTV3avuhpqR8skUetgeTK7Jq9r4gB4L2O+LSpbWFjITHapf74v0aNeURTodDrExMSwPvkxpKSk4MyZM3j55ZfZzZzCZLS1tcHpdLKbvAh0+yOvc6PRyDzHQ0JC2O199cfe31lZWUx+T4EYeS6MxhYREcHMXePj45lZb29v7wzTTzIdbW9vx/r167F9+3bodDr09vZCkiSkpaVh48aNjIPo6+tDXl4ey2FCBC07O5sRD5ozzw0SgU1MTERFRQXsdjszE96yZQtef/111NbWIiIiApIkweFwwG6348yZM3A4HFAUBSEhIcjIyIDT6YQsy7BaraipqUFZWRk2btwIi8XCiMfFixdnBDLk9zF9K3put9tx9uxZWK1WVt5ut8PpdKKvr4+ZEPPcj6IobhEDeGfDqKgoTZP2uLg4Nz0Un3+GAnnyJtJUn4JvaukJATBuVTxfWtwM3wYfkkZ8NxvM6gciSdI2ABcBVHz8/2pJko7P2vLnEDxxW3MBLeKhhVTFOp4+qi/1tfrXQvJ8GdqshFgB95AN3uqJty/+EHgL9aHVpqd++HZEsZe4JiRi45X8IkHWIqq82EIkIvzti4gXlaFcHTxBiYuLY8iJb4tiVc2bNw/PPvusmwhDlmX4+fkhMTERjY2NzPeB5qgoCiN0oliVP9Q8oqD/jx07xtogImI2m2E2mzE1NYXe3l632GQklouLi2NtE3dB6xoVFYXOzk709vYiLS0Ne/fuZR7tPT09SE1NRUBAAJKTk2E0GpnIj5AQEYOUlBTG3VHMLN6vxGKxsFt+c3MzoqKiEBUVhSeffBIWiwVtbW1wOBzQ6/UwGAx4+OGHsX79ejexT09PD6xWK1555RVMTU0hJycH169fZ1wafQMADElTCB9FcYkwDx8+jLq6OhYFuKurC6tXr8aJEycYcTt+/DiSkpIQGxuLqqoqGAwGVFRUML8YXiROnIcsy2hpaUFsbCzKysrcwp1QQi0iGHRZoFAkZLp8/PjxGRGPRa6YiGBDQwNOnjyJAwcOwGazzbi0ivuf32feLsVCvXuLxgvADGA+gAvcs5bZ6n0ef+4lJ7ov4M1cUetvXrGoVd+X/mZT2ImKQNEccDazParD5zO5F0MBLQX9bEpB/rf4zpPS0tN4ZjMnVdVPlMd8fg6+bT6/w6lTp1iOB1JcUzmKnMqnYBUjt1LZ6upq9Y033mCK7PLycqa41vJ616ovjvPEiRNu5que6mqNjY+QyxuaeNur4tw++OADZjpMprSkxOfL888pOjD9/bvf/U4dGRlhUXl5hT6tK3nV37rlyr9SXl7O8qjwXub8nuHX7e5dl0f9t771LXVwcNDNvJvPBXP37l03gwEyuhgcHGTz5c2IeaMF+gZimmQymtDyIufXWTRd1jovokGGVm4Vrf3uCbQMAwgAmNV7MeOVJOmcqqrrJUm6oKrqmo+ftaiqmuy14ucQvMXCulfwpicB3OWSfHneUe1edCO8zsDTGPj4PbxOwJscmOoDMx2ifNGjaI1FNJvkx8+X9yaDJVmz+rEOgudALn4cs0j0GBbjA9GNXdSP8OsFYIaMWxy3orgU0A6HY8Z4qJ7WmvExl/i1OnnyJPz9/VnuC4oLxYvYFMXlbLdy5UpkZGSwcdI6kiKazHBFTlWrf/67UD9k7ks6DE/fXtxjJpMJra2tGBwcxI4dO9DU1MT0IZS6l27odMtua2tDamoqzp07h4CAAIyOjmJgYADh4eFoaGjAc88956a/aGhoQEpKCnNSzM7OZrd0WgcaC+l5RPNUfg+EhITAZDK5mWTTPlIUxc3plERi5O0+NTUFVVUxPT0Ni8WCmJgYbN68mbXNt0Nti4pwLcdHnmvQwhuezpv4bcR9rlXf12fAPehAOGiTJGk3gAckSVolSdIBALNaPP1nAE/soWhNxH9YCiUty5+kGp1L+/ScD0XtSVfDW+Hw4xB/U5v0W9Q38OOYK7Ej+TjgnihKDAOiJYPVAgoWyCNqUljW1NS4tdfR0YG8vDy3gINiDnQCeiaKjvgLB607iR7S0tJYoD+bzYa6ujo3QkMim8bGRlitVkbMaV0IgcybN48phAMCAlBQUOC2Z5qbm9HZ2YmCggLo9XqYzWbU19ezSwiNl1LDaonyqH8SvQAu6QN9A7vdjtbWVkxMTKCzsxORkZEzvq0oAqVvFRUVhYqKCqSlpTHCFxAQMCMoY3x8PAu93tbWhsrKSthsNgwPDyM8PJzpHvR6Pfbs2YMLFy7g9OnTTCRFOh/yKKdwKTU1NSyIYnx8PCwWC9tnJpOJrRVBY2MjoqKi0NfXx8KvUN3Ozk6cPXsWZrMZycnJiIuLY4nK4uPjERISguTkZPj7+yMpKQlXr15lugf6rhT6hvYbrRW/hrzYlD9bfPgcUdSkJR4WzyedX7PZzNrQwiOecIvYD/+9tcAXDiQAwHfhCmooAXgPwA9VVb3jteLnELQ4kNmQ4mwwl/qK4orBRQgI8KyA9nQD5t97qz8XEG88Wm37Qjy0uAf+FkjP+f8ppIwnqykeCBmnp6fPKC8qhgG4WccALic43jmQxseH7hDnL9ahEOE0ZpPJhNLSUtjtdvj5+WH37t1MiUxOffX19RgYGGCRdLVul6TLsNvtblGBeaCx2e12lJSUsCi3FI6EJ6r8/Kj81q1b0dfXh56eHuzYsQOKoqCrqwtTU1MICAhgv2NiYlBWVoZVq1YxKy0+5AlZA5HCl5CjeMun8hUVFbh+/Tq2bt2K/v5+pKWlsbW0Wq3MmZP0DseOHcP09DRGR0eRk5OD3NxcN2W43W7H4cOHsWPHDsZhdnV1MedFIugvv/wyFi5ciOvXryM/P59xbocOHUJhYSGKi4uRmJjoZs1F7fNWZPSc9Bo8V0TOjAQUVoU4OdK3idwQb+nHc5EUnZkP2eLpfFEIHHrPnwUxXMpcOBCeW6KzsWHDhiZVVdMgwOfaE/2zhrS0NNVsNrP/vYlM/lDgC+IXP6I3xDxXk+LZCJavoFXekykuLzrhDwzfzmze61SWCI6WmKixsZGFbOeV0tS+J5Ehz/JHRUWhqKgIALBr1y60trYCcOVkoFs6ia0I0URGRjKiQmNpaWmBJElufg3evNqLi4uZiSwp7fmYV3x5QlwUM4oIlsPhYPGlCIjrOXPmDObPn4/k5GQoioLW1lZ0dHQgLCwMer0eqamp6OjoYCakpIytq6tjFlGPPPKI2zflY3Px60we+Hq9HhERESgrK0NOTg6qq6uxfPly6PV6qKrKvpNoKVVTU4OpqSmsXr0aV65cYWvR0NAAp9OJiYkJnD59Gjk5OQCA3NzcGWK7xsZGTExMIDU1la09EfyXX34Zzz777AyzXF7cS2tOe6KjowPj4+O4evUqdu3axYgIH8GBuFwyxxaJK39RoIsLKdDFs6Hlgc+fOZvNhldeecVNzMfvkU9zMRbFYQA8hnP3hQNJB/C3AFYC0NHz/yg6kE/LgfgC99KH+BFn+3u2fsQb0L2AKNLSEs950unwhIIPUkjPfOFAeEQvEld6T7dE/vDxcwe8Zzkk5EwiJuI4CBGSDkKWZYbQKOEP3fTJx4TmJ3IaPOfF30KpTd6PgjiSrq4umEwmBAQEuIUjobrAJzfklpYWtLW1sdAlxEmR9RRxJTQu3o+Fz31BxHTLli1466238OSTT7Jsg5RfJCYmBtPT05g3bx6Sk5PR0dGBmzdvsvAoRJR4IlFXVwen04lNmzbN4GpozkVFRdi1axcAMC6DwGw2Izw8HBcvXmT6Bz50Cv89m5ub4XQ6kZaWxtbrzJkzTOfU2dnJ/FdEkRsRHPIraWpqwuTkJEJCQhhHxoen4QkA/12OHTuGHTt2QJZldlEg4pyWlqbJNYr+IDzxIeCDcGr5iGjtbS3wpk8l+DQ6kF8CeBvAVwH8OffzHwLuhXiIMsLZys7FTFdrXDwCEs1b+X68+XuQXJXXncwFRFmtFrL3dhnhb+Z0GEhH0NLSMmsmQD6zHW/WyBMSwGUrT9nyxLkDmGGyy8t4aYw9PT1uf0dERMBisWDHjh3Izs5mCIJCwNO4e3p6UFBQwJAC75tBPgZ8GPP6+npmRkptSJIEWZaZHwVxMitWrMDly5dx8eJF5mlO7VI/NPf09HRmbkzzkCQJra2tzNGQTEnJL4H0LCaTyU13FhUVBZPJhCeffBK1tbVMOZyWlobdu3cjJiYGZ8+exfj4ODo6OrBixQr09vYy4jE9PQ1Zltm3k2WX30lXV5ebnig5OZkhZVmWsWzZMnR2dsJgMDCTX5Ie6HQ6GAwGWCwWbNu2jRGFuro61NXVsdSvBoOB6XKqqqpw9OhRNDY2Yv369WydY2NjWRRh/pwRAe3r62Pr6HA4MDo6isjISDYWIrzHjh3DyZMnUVRUxPYU6T9WrlyJjo4OyLI8w1yd9Dv8XlcUBU6nEx0dHez/mpoa5q1PQMRFlmVNHxG+PS1vdbpIUGj+2XCIFvhCQEZVVT2uqmq/qqqD9ONzD//BgEekPBL0BJ6Q7b0A35bWR1ZV1evHJ3+BexmLOA9xDIRQvbVNGz0rK8tNsa+qqlficfbsWZSUlLjlvea/AU8ceaBvQ0iWDjAhNBK3iIeLN4KIiopyCw3PH1D+Fk9j6OvrY4iD7PlJgZ2eno7CwkKG5PV6PUZHR5kiWFEUxsFRilmn04nU1FQ88sgjSEhIQEJCApKSkgCAhUsJCQlhIUoA13dOTEzE1atXYbPZYDabkZSUBL1eDwBISkpCWFgYysrKYLVa0dPTg7i4OERERKCiooIRNEVRWF71a9euYd26dezGSzk3+vv7sX//foSEhGDBggXo7+9nTn4pKSns2/J7JzExETqdjnFVlC6XwrQ0NjbCYrEgNDQUiqKwMZHjIononE4njEYjkpKSMDg4iOXLlyMpKQmSJDF/k7KyMixatAhXr17F0qVL3Thks9mMc+fOueXgoL1Cehnar7IsY968edi1axcMBgO6u7uZAl6WZRQWFmLTpk3MkAH45DKQnZ3NzgbPQZAIj4AMGlpaWpCWlsZ0MIDLsICyQno6W+JFk/eBEvOM0DtZlpnORVGUWQ17RPBFhPUIXHGwTgK4S89VVS2ZU0+fA/iszHh5Ns9X8ctnCVoiJF/G4qmeWMYXFphuNZ9FVOPZRHy04cXwDnTzI8sfsR1COnxuC7FP/qZGZpv8weVFX7zorKamBqdOncLzzz/vJmbg2yazz97eXs3wFCSqCQoKwrx58xiyoXZITJSUlIS0tDSYzWam48nMzGT9yLLLI5vMYmXZ5cgWERGB8+fP4+rVqyxtL0XpTU5OhtVqhc1mg8lkQmdnJ2TZ5cFOIhviIFJTU1FbW4t/+7d/w4svvshMX2nNsrKyYLVa8eKLL+I73/kOhoeHmQiPTItJSUz9h4aGIiQkhIno0tLS0NTUxOb/3nvvYXR0lI1bll3mzps2bWIc2KVLl7Bnzx4AwKlTp1BfX49NmzZBr9fj0qVLuHr1KtavX48bN25gy5YtqK6uxo4dO5iYjtc90TeicfK5Tqh/3vSc9F9a35XfW2KEap7b5c2HRd2LGFqEb19rH2udGX7M/GWH39e0f/gx878JPo0I60kAq+EKoEjiK5/zkP9HBH5hRRPZTwPeuAfxtq/VJ4kcvI3FGwfjiaPyJIbzNauZCGL7vqwd3ZD4OrIsY+XKlZpckaK4fDVSUlI0E4eJfZJHMREPEonR4eVDVMiyK7vfs88+y27kxP4TEVcUl9mn0WjE9PQ0E93R2BobG2EwGJCdnY2JiQk4nU4WwqK4uBgAmDc4icnS0tIQGBgIh8MBm82G+vp61h4AlJeX4/Dhw6ivr8fU1BQAl+VZfn6+25otXrwYiqLg8OHDMBgMLF85WQ0pisLyp+v1enR0dGDdunV48cUXYbVaYbfbUV9fz27vdrsdISEh+Lu/+zuYTCakpaWxNaBgjYriivfldDoREBCAqqoqWCwWFBUVsTYGBgYYYRoZGYGfn5/brXp4eJhxRUlJSYiOjsa5c+dw9OhR6PV6ZGRkQK/XY82aNUhISMDmzZuxefNmREVFISQkhHF/9E3b2trYXnQ6nWhtbUVNTQ06OjoYIqcsiTabjWVdpLho09PT6OjocAuJQlZkJ0+eZN+cCJXVasXZs2eZ2JI38SXpAADmcS+KaxXFPXulNwkIEQ8Sb5rNZhY1gccfvLk+34+vYndfCEiKqqrpqqr+paqqT37883Uf6v1JgK/yPm/lRMR1r+Pw9NG03mkhXQq9oLWhqA1vfZEYhkd29FwkWCSOmusctUKHzAZa/VNdStHKixTpncPhAAA3vQ8vqiIuCnBPGcofXKrPO4YRMqS4Urw4jSLcNjc3u60jiRCoX1VVYbFY8Mtf/hL5+fnIy8vDrl27EBISwqyKSDxC85JlGeHh4VBVFceOHUN5eTkLZXHhwgXk5OSgsLCQpa6VZRmPPPIIDAYDC+GxePFi/MM//AMURcG+fftQU1ODFStWAAATS5FYpbOzE2lpaYiMjERpaSmMRiPi4+OhKK4YX729vQgPD0dRURFqampw+fJlxmFQWBSHw8EQ4sTEBCYnJ/GTn/wEq1evRmVlJZYtW4bExERUVVUhJycHLS0taG1tRVBQEIqKitDc3Izi4mIoisIIQFxcHLq6uiDLrgyRJpMJer0eAQEB6OrqQltbG7Py6urqgqqqbroG+n6Tk5O4evUq2trakJaWhrS0NDd9CBGr2NhY5iPT1NSE1tZWNDU1QafTITIyEiUlJYwokB6MLN5IbJWbm4uuri5MT09jamoKTU1NGB8fd7vxNzc3MyLLA+0vg8HgFsCSF92KZ0lR3ONyUbwunlAA2npLcf97A18ISL0kSfGzF/vTA18p7WzltGSOcwVv+o3ZdB8EYkwpT23MppfxtKm0wNf58kiQ10N4Ipje+ifEryiKJsdAZSnWE2+lxefdBj7horQuAcRRxMfHo6enx03pC4BZ7RDxoUCHRqORxe6y210hymNiYthtsL29HZGRkaiursaaNWsYYWpqaoLFYsHrr7/OrJ14RGC323Ho0CHExMRgz549jLOIi4vD4OAg0yuQ/qGnp4fFpFq1ypXteWhoCAUFBTAYDDAajXA6nbh8+TKmpqaY8l2WZSQlJTFE1tXVhTt37jCR1ZkzZ5CYmIidO3cyhJ6amspMlkm8ExERgXnz5jFF8/nz5xEXF4c1a9bAaDQiLCwM8+fPh9FoxLZt23D9+nUWvHHXrl148cUX0dzcjNzcXBbLi7gjVVWRkZGBmJgYzJ8/HwCwZs0arFmzBomJiQgKCkJiYiIyMzOxefNmJCcnMx0LJZ2aP38+8vLy3JJO0ZxJF0Hf2OFwQJZlpKamYu/evUhNTWXfeseOHSwVL3Gdou/QiRMnmPc6AExNTaG6uhr19fWMiJBRBu/PIu5fkRMX9Zr8O/5SJPo/0Z73JoL25Wz7QkA2ArgoSVKXJEktkiS1SpLUMmutPwGYDZHy5bwpn6mdexFniTd9b9yByLJq3Tq8meiKHITWWNrb291uKt7Al/XjZb5Ulja1FlH0xpbz7TmdTiYCEIkjPeNDcdCa6nQ6N/NZUqryxIHKTk1NoaTEperjxQwUbl1LZsz/bbfbceDAAYyMjLDghnxk3ZycHAQGBuLo0aOoqKjAe++9h0uXLmH9+vVoa2tDY2Mjs1CjNdu3bx+uXLnCFOUHDx4E4PJZyc7OZlFraayEeEknQf4ZxBXs3LkTiYmJOHv2LAurfujQIZw7d47VTUpKQmJiItORnD9/HitXrkRXVxfq6+sZkSKFe1FREcbHx9HX18f0CkajEU8//TRu3LiB6OholJeXY2pqikU4NhgMCA0NZW0Rl7Bo0SKEhIQwrs5ut7NQ7oqi4NChQ5g/fz4GBwfR1taG5cuXo6+vjxkE8LJ/UsITYUtNTUV2djZkWWYiQZpzSkoKI6YAWIbDjo4OZq5NEY47OzvZHgE+ucwAYPqUgoICbNq0CYGBgQgICMC6devcnBtpz9IPvx956YFILOjM8hw4KePFsyqeIfG5WN4XXOaLEj1M6/mfoiXWXJTovFyQPsy96Dp4BKr1TqtdsW/+Hd1gteJbzdaW1v+e5i3+9lbW0zOtMWmNR/QfEY0B+LHwyj9+XT2Nk6+jFXuLfvM5NUQxF68kpfERiN+CEB/dIi0WC06cOIEdO3a4OXzV1NSgsrISa9euRUBAAAICAhAeHs76Ip8O3qdAK2UsWV6RU2FRURHCwsLcnP4AMK6LIsRu3boV5eXluHPnDvbs2YPa2lrk5eW5+ekQIaLUt+Q7YbfbMTQ0hJGREYyMjGDv3r1u36mmpgZ6vR5JSUluznS8gyRF0o2IiMDOnTtx/vx5/OY3v8Hu3bvZ2CsqKhAQEMCcHKenpykoKrsoWa1WnDhxAjk5Oeju7sbp06exdu1aPPzww0ykSPlbampqkJqayrz4+/r6mP6JIi0nJibCYDDAbDYzJTkRX7Jmo7WWZVc0YcrbQnG+eHEnH/+Lj45MHutGo1HzjJABRldXF/R6vVuIelpPfs/xynrSbXhymuX7473ZxXL8N/WkRPfZE12SpMUA/Oh/VVUtPlX8HIGvBMRXxDcbMaGQAryzmTeEKz6bjShojYmA3vMbiUfMWmMR5887lImbTGtsWlZgvPUJv+n5dSWPXDGIobgGVF6rj9msz/h14ft1Op3Mc5hPBnXs2DEsXrwY8+fPd0NYtKY0PjH8SVVVFbN6Eg814O74aLFYcO3aNWb6SfoDEn3xnvP0/XjCSbfTkpISRqB6enpQUVGB3bt3u4XDIIdIIgyEPMiKraysjFmzidZBAFiY+MHBQcTGxiI2NhalpaVYtmwZcnNz3RJi8TJ6+u4UAJEc9mTZZVW1atUqXLt2DePj4yzWFM2tqKgIJpMJQUFBCA0NhSy7HPFiY2OZjoMc/BRFQWJiIhTFZfYLuDiNy5cvM90JOe6dOXOGOTq++eabcDqdWLVqFR5++GGWsIvnPojw8Ym3eAJmsVhgMpkYEeEzMxKRoO9JIWCOHj0KnU7HzILFSyIvqiMHTd46kBxRAbgREl/PN+ASrR08eJB5s/PvicDRBcCTJ7pP+UAkSeoG0A/gNIABAO/OVu9PCbTERaJ4RUTUophJS5zU3t6OuLg4xtp7Ek2J9YgN9cRGirdvvv/GxkacPXvW7QbNj4cQgjf5Ji+Si4qK0lTMUxlqW2yf75PMN/lAhnzfFM6BZ9v5OfKiAXFN+H55hCWuCzmZ8fMgmTPpC3jFfkFBASwWC27fvj3Dgio5ORnp6ensAJMPw5kzZ3D27FnmbMjvHdLZkFWS3W5HdXU1VqxYweTaRJAURcG5c+dw8eJF1NfX4/Tp0zP2oc1mw5EjR9DU1MQs0ex2OyoqKpgfBuXiIOIRGxvrNh5ZlplTHnlK03oCYBcIWXZZgD3yyCPYtWsXsrKyEBISgu3btyM4OJiNbcmSJSzwIP8NzGYz4uLiWMIpsmbS6/WorKyELLs85Zubm1FfX4+Kigp0dHRgy5Yt2LJlC0JDQ3Hw4EGcP38eJpMJ0dHRjHj09PRg5cqVqKysxMsvv4zu7m7s3r2b6SkAoLS0FO3t7cxPanBw0M0pEQBGRkbYN4iIiHD7JmRFR/4nLS0tzL+ooqICRqMRfX197KKVnJyMrKwsN+JmMBiYs5/RaMTevXuxfft2JlajvWe329l3Jb2UwWCYoaujuVDQRGCmpSB/NkVobGxEb28v9u/f75ED6ezsnNVvzBcRVjOAXACVqqqukSTpYQCPqar6lNeKnxIkSRoAcAvAhwCcIvWTXCv6UwD5AKYA7FVVtclbm55CmXgST4m3X29iJl84BT5kgCfwdFOfrQ7P2vKhQsSQ3bOJfLTmx3MRWuInLd8JngDz9URRlBjWRCsGkDgmMfQCDzU1NSyFLI2FQm9QfV60ws+xsbER09PTGB4edgv8RwfSarWyW/e8efPYoVZVlXEKVqsVVVVV2LZtG4uPBbiQqMPhQFtbG2JiYuDv74+bN28iODiYIUL+tn/hwgWEh4dj/fr1KC0txfbt21nKVrIscjqdiI6OhtFoZNZTJGYhcQfdiKempphRQXJyMitfX1+P1NRU5vEuhtbgOYiUlBTmswGAhfqggIzDw8MoKHBZ+JeVlbGAjUeOHEFCQgLWr1+Pzs5OjI2Noa+vD4WFhaisrERHRwe+9rWvob6+HgsWLMCFCxdQWFiIkpIS7N+/H52dnRgfHwcA9Pf3Q6fTufn+kAf8pUuX4O/vj4iICBiNRjQ2NiIiIgJ2ux0vvPAC/uIv/gJf/vKX2Zwo5hdxaENDQyzqgMlkYml7zWYzJEli+gqK9UWK8/r6eixduhSLFi1ioWRiY2Nx/vx5nDlzBt/5znfYvueDKzY0NGB6ehqJiYks8VR6ejrq6+vZM0qJy58h+q4tLS3o7Oxk3K7W+eQDiopcDuA9rA+dScCzH4gvBKRRVdX0jwnJGlVVP5Ik6byqquu8VvyU8DEBSVdVdczD+3wAz8JFQNYD+Kmqquu9telJhOUNmYrsvLjgnsRJWn3MpkcRCYEvMau0+heRNuCeM8MX0ZvICnsjklRGHBPwSU4OMj/kxwjAzRmRJyw8EuOBz/HBfxc+Mm5UVBRTjvJEB3DlKKc8FSLbTvlGQkNDUVtbi23btrn5eRw5cgRBQUGYmJhgogeemPHEiEQ0gCtcO4XUIBEMH7xQDG0RGxvLcmSEh4czQkZiDcClFLfb7XjllVewb98+XLt2bUZUXq3vIX43s9kMVVVx8+ZN6HQ6OJ1OZkZMc6E+w8PDUV5ejrCwMOaL0dvby5wNqV0isg6HA/39/RgYGMDKlSsZEamvr0dlZSX27duHX/7yl3j88cdhMpnY/AMDA6GqKkwmExM9TUxMoL+/n4V0iY6OxsjICCIiIuB0OrFu3TpGCL7//e/jz//8z9Hd3Y2goCA88cQTLBpAQEAAFMUVGiQrK4tFCaZ5BQQEMJGlxWKBwWDAuXPnmEn4vHnzmLOl1WpFWVkZCgoKsHTpUsTExKC1tRWXLl1i6xwREYF169ahuLgYg4OD+OIXv8isvnjHShKZETdGwTpl2eUU6nA43CJL899R5HYJSGxGYjTx3JFofTZ8oCjKpwqmWAlgO4AfAQgGcB3AWlVVs7xW/JTgAwF5HUC1qqq/+vj/LgA5qqqOeGrTGwEBPIuTRE9kkfMQwy57k8P78rEA7Qi8WmW1ypEMPyoqioVhoM1Ogf60iBPfN5mQikEJZ5Oraon66JaqdRPSQnae5i+GmeDr8+9EIknjoKiqfKRUfsz8bTsyMnJGUiLK95GUlMTk2nz4bX68NpsNhw8fhk6nQ15eHqqrq1l4dBqf1WpFX18fHA6Hm6d5amoqLly4gISEBBw8eBD79++H1WplHuMk1rBarfjFL34Bf39/7Ny5k8ngi4qKEBcXh6SkJLS2tkJRFJbsSJZlFqlWlmWG+IuKimAwGFBWVobdu3fD398fTqcTvb29iImJQVJSEptrV1cXLl26xMKqXLhwAQBYHvWwsDCsWrUKr7/+OjZu3Ij169dDUVy6mj179kCWZbz33nvw9/dHYmIiurq60Nvbi127duHUqVMoLi7GD3/4Q5hMJvZdiIOLjo5m0ZKXL18OWZZRUVGBhx56CH/2Z3+GNWvWsDrHjx9HXl4eU2K//vrr2LRpE3Jzc9k+s9lsuH79OsbGxrBu3To3rvFHP/oRlixZAgAsDta6detgt9sZ0QkKCsLWrVsBwC2MP621LLsU7eRrYzQa3Qw26GJD34V8TtLS0tDc3OyWZoC/rIhcPp8mgr+M0dxpr9OFzW63s70023m8ePEi1q9frxnOXSc+0IBHAUwD+O8AHocrve3f+1Dv04IK4IQkSSqA11VV/bnwfjmAK9z/Qx8/cyMgkiQ9BeApAGxD8kCspCRJMxZTlmU3CxsRoYnvAe0MhPxzT7dBUa/hTYTD/63FERgMBsb60maiYICyLGuKx3hiROOkA0hteAIyFuDXkDY778gk5v3m5ys+01pDEqPw7DqV8WZCLcsyO0i87wZ9F/4CIMsyQ5xEpKjdzZs3z2iXosSK4rDOzk4kJCRg+fLluH79OssFwq8Z3V4p+KCiKLh8+TJaWlowPj6OVatWITg4GAaDgXFXixYtcqv/la98BUNDQ0xfZTAYsGjRIiQlJaGlpQXT09MYHBxEUlISKioqsHPnTkRERDBnTrLo2r59O9ra2vC1r30N69atQ1tbGxRFgclkQmZmJqxWK4aGhqAoCjIzM+F0OuF0OnH+/Hm0t7fDz88PhYWFTATW2NiI3Nxcpqxua2tDd3c3mpqakJiYiCtXrsBisSA1NRVOp5NxaDqdDvPnz8fly5cxPDzMLh1k7tva2oro6GgAQF9fH0JCQvDQQw9h37596Onpwcsvv4ynn34aZWVlWLFiBSorK6EoCn75y18yR0HaO2+//TYGBwfx9NNP4/z58wBchIKMEr74xS8yESGtOZkIh4SEID8/H/39/UzxnpKSwrgGyh6ZmpqK6elpRqB37drFxE+UN0RVVaSkpMDhcDBRIoAZAR4pHlxWVpYmLhJTGFAZntCQQ2tPT8+M86h1IaX6cOHjGeBViS5J0gMAfqeq6keqqjpVVf1XVVV/pqrquLd6nxFsUFU1FcCXAPyNJEnZ4vA06syYpKqqP//Ykz6dDh8P9OE9hSHnP4DWex4ZcYsN4JMPArjbiPPImMqICJpH2oRcqBz/tyx/YsrJP+dv4TQuo9HoEdGKSJu8XilrGwUd1ApzQr4jPPE4duyYW7Y3rUROIojzEp/RwfK2ZlpAB0Y05eUvAKTAB8AC2YlrTu2Top8U4xRhl1+P5ORkJCUl4Ze//CUmJyfZujQ0NKCurg6KomDlypUwGo1ISUlBR0cH0tLSsGPHDmRmZuLJJ5/EwMAAADDv56CgINTX1+PMmTNQFAXLli3D9evXERsbi/r6ehQVFcFiseDf/u3fYLfbIUkS1qxZgyeeeAIhISHYtm0bALAotkFBQYiJiQEA5stA3txjY2Po7u5m3//w4cPYtm0b3nrrLbbfhoeH0dfXB6fTiRUrVqCrq4t5fFO4dgAMmS5atAjR0dFobW1FYWEhcnJyIMsyhoeHsXz5crS2tkKWZTz66KPIzs5GWloaUlJSWHKo2tpaKIoCvV6PdevWITExESEhIdi3bx+ioqIQEBCA+fPno7m5GRaLBXFxcVi6dClqamrw9NNPIysrC5cvX2aRiHfu3MnEdU6nE5cuXcKVK1dQUFAAo9GI6OhonDhxgl2GQkJCEBsby9bkxIkTCA8PR2xsLLOcO3DgABRFQUFBARwOB1pbW1nwyPz8fLS2tqK1tRW3b99Ga2srYmNjWabFpKQkZGVlISkpCWazmfm9kJirsLCQSRTE/c2H6xGlAfxvOodkJCOeHx5/zXaugFkIiKqqHwKYkiRpvrdyfwhQVfXqx7+vA/g3AKLOZQjACu7/UABX59oPHXhP7wipzNYGj9B4JMgTHy2OwdNHozZ5xzZeN0DtUGIZiqBKz3lE70lMJP5N9cgDm5AtWfDExcXNCJtAfYoEi27DWlYciqIdNtrb+hgMBpYFEHC/8fOEVmsdxVsYrSvgHj+MOC+yXGppaWEObPx4qS2KtkrIT7ScMxgMeP7557Fp0ybU19fj6NGj7Kbd0tLCouMqioLp6WmcO3eOISU+qVJ0dDRkWUZISAieffZZAEBrayuzRCIleVhYGEMSNpsNY2NjKCsrg6IoTB7e0tLCcoZv374dFouFEZvExERMTU2xXBuhoaGIiYlBSEgI9u/fDwBYv349ampqcObMGfz85z9nIqP58+cjPDwc09PTjAMjWLlyJRobG1FbW4uqqiqcPHmSccUAkJOTg8OHDzNfk/Xr10OWXZkcKaDk/Pnz4XA4EBMTg8HBQXR1dSEjIwOLFy/GoUOHYLPZkJqaCj8/PzgcDmzYsAE1NTWQZRlhYWEszE9ERATy8/NRVlaGCxcuQFEUlJeXY9WqVUhISEBMTAzTpZSXl8NgMLA4VjQv2geLFy9GSUkJXn75ZVgsFvT19bGxt7W14dKlS5iamoIsy/Dz82Me7UlJScjMzGSOiYqiMN0ev3aRkZFMBMlfCklkRfWOHDnCjET4iw39aIG3y5Y3C00RfPFEvwOgVZKk/58kST+jH59av0eQJClQkqSH6G+40um2CcWOA9gjuSADwKQ3/YcWiAhBBC2EptWGaD4nsoBim1ogfjQecZK1EnkP8wTBaDS6meIREeBj/PNtU7A+rXck/5+ammI3yaysLGaH7smsT+t/soLib/f8/DyFntcidDxXpGWmePHiRZYvhD80IqEi71w+3hf5GxBX0N7ejpCQEJSVlWFqagoGg4GFJaHvRGMijsvf35/FfCLCVFdXh2PHjrFxUnBDWZaRmZmJrKwspggvKipi2QRJ1BUZGYmAgAAWJyomJoYpQ0kkRfoU8vqenJxEeXk5NmzYgG9/+9uoqKhATk4OOjs7WWbB0NBQlJWV4eTJk+jt7YXJZGL6hcrKSrz66qtQFAX79+/HvHnzALhENxSeIyoqCkeOHMEDDzyA/fv3Y2xsDJ2dnQgODkZJSQnef/99nDt3Dna7nRFh4hT27t2L5cuXY//+/ez2W1tbi/7+fqxduxbr1q1Deno6CyrZ09OD8PBwhIeHw8/PD6dPn8aFCxeQn5/P1u5nP/sZBgcHcf78eSiKK/y92WzG2rVrsWvXLqxZswaTk5N48cUXMTY2Br1eD6PRiK1bt0Kn0yEoKAjbt2/Hpk2bGJFqbGxEa2srs7abmJhAcXExqqqqkJyczKzYALAw7tXV1QgNDUVwcDDbv2QibDAY8MQTT7DLGBGFgIAAREZGoqWlBR0dHcjNzWXrHBMTg76+Pty+fRuxsbFu3ubUjs1mQ1NTEwtgCbguJpRLhud2+bPiiTjQ+Z9LygdflOh/qfVcVdV/9amHewBJkiLg4joAl57mqKqq/yBJ0jMf9/3ax2a8/w+uKMFTAJ5UVdWrlyCvRCfk4i2Ll6+gpdfw9txTG8Dszj+E5MQbtYhYeXNYapfKUpY1rbzsvA8G/87T+GiOs62BKJaiEA+eLM5ERzqqx8toiUvivfMBuHlSU25owN2kmZwXZdnlOc1bxpAZpdFo1By7SOT4OfJOXbReNTU16OnpQXZ2Nm7cuMH8CcgXQVEUtxAexcXFyMvLY9/Ibrfj3LlzqKqqwvPPP8+UrMePH0dubi4OHjyIxMREjI2NYcWKFfjiF7+Inp4eVFZW4plnnnHjIsnkldK51tbW4urVq9iyZQtKS0uZeElRFPT398NutyMoKIgRLEq2NTIygvXr16OlpQWLFy/G1atXMTU1xQwcXnrpJSxbtgzR0dHw9/dnCn0+gvPKlStRVlaGpUuXsui727dvBwD09vbiypUrGBoawtWrV7Fv3z50dHTgypUruHPnDtMZVFZWorCwEGNjY5g/fz6mpqYQHByMsbEx6HQ6mM1mPPDAA7h79y6Sk5NZSJK+vj4kJiZi5cqVuHbtGqanp5k/SX5+PmRZRldXF2JiYlBaWoqMjAz85je/wbPPPouuri5MTk7izJkzeP7559m+ofJ0mSP/m6ysLCbqXLx4MTZu3OiWjjguLg6K4nKAzM3NBQDmXV9ZWYmoqCikpqYy02wy6JAkCW1tbUhMTGRWhzxn7ekMebqkEU7UEufP2YxXkqSTqqo+IknSj1VV/ZZmoT8xEK2wZkPavoA3xOnJ9JcHEQl643g8EQvR4502g4iY+ZuHmMuDF7/xohxvFlj8eGYbOxEmRfkk7wYhUsrJoOXtLcp8aRzEZVE9nsugFKa8tQu/1vQ3vedNHW02G370ox8hNzcXjzzyiBuHqWXCTZcQmguvJ+EtXxYsWICzZ89i+fLl0Ol0LCYV6SAsFgsrz681zbW+vh5tbW3Ys2cPs56hNSVT25s3b+LKlSuszd7eXuzcuZPl91AUlzKbIDo6GgcPHsS+ffswNDSE8fFx9Pf3Y9euXThx4gSysrJQU1OD/Px85msSGhqKhoYGXLlyBYWFhejq6sLo6Ch6enpw+/ZtOBwOvPDCC7BarRgYGIAkSejt7WWiu/Xr1+PUqVO4cuUKIiIi0N7ezjyyAZe+RKfTYf369Th37hyCg4NZUMiAgAAsX74cBw4cwCOPPAK9Xo/JyckZROZXv/oVFixYgKeeegpFRUV48sknmQiwvr6ecZH5+fl466238PTTTzPv9eDgYFitVgCuxFepqamw2+2wWq0wGo0wmUw4e/Ys8/MAXHGy9Ho9W9sVK1bg4YcfRlOTyy2NLidWqxVNTU3Mn8RgMKCmpgaAS/cUFBSEt956C3fv3kVWVhaCg4MRHR2N/v5+KIq7JR2db7pM0Bkg35Ls7E9Uxt7Or2hA5Amf3QsBaQfwXwG8BmA3BKX1bE57n0f4rBJKEXij2MDsITYICebl5bllvdPqxxOi54mI6EA4m4Of1s2eL8ubGmr5hXj7zY9dUVw+FKTo5IMZ0tg9xanytqlFgiDGsaL64pyobypH8nHyLTl58iQCAgLc4h6ReacWEaF90NbWxuJC8f3bbDYWf8lgMKC+vh46nQ6hoaGorKyE0+lkhFCMrUXfMiIiAsAnaUytVisuXrzILLxaW1vhcDiYw2BgYCCWL1+OgYEB5sPw/vvvY8OGDcxEd/78+ZicnMTGjRvR2trK6mZmZsJud2X0CwkJQX9/P5KSklBbW4uWlha2VzIyMhAdHY2XX34ZCxYswI0bN1iOlJdffpmZ8AJg4e/z8/Nx4MABpKWlYd68eSwacEJCAvR6PRobG7Fo0SJUVVXhS1/6EhYuXMhu9mQOTDnGGxoaEBAQwOY9NjaGBQsWMGfFmJgYLF26FFeuXMHFixfxf/7P/4HBYGC5zQGgsrKShbcHwPQigYGBiI6OxvHjxwEA27ZtY3uEHCcdDgdOnjyJpUuX4qmnngLgyt9eWVmJ7du3Y2hoCDExMcyf59KlS3jnnXcQGhoKg8GA3bt3M5FTamoqiyrQ3d0NALh06RLTgVE8NTIVJpEnWRXSPlaUT0Lb8KFrPFleap0TLZAkSdOM1xsB2Qngr+CKxitiXVVV1VyvPX4OIT09XSV7aR7mImoS63nLyidyOFpIlthcLeREdbR8IjzdKEQEDLjfhn0VQfHPecTLcxwiwRPHSv9HRUWxzHq8IlD8rcWxzcbJEQInboRERp2dnYiMjGR5MeggUcwmsrISAwdSmyRi473DKVeE1jgoku2uXbuYuIgXIVIcJkX5xHO6qqoKubm5uHz5MhwOB8shQUDEu66uDl1dXQBckXHDw8Pxt3/7twgKCsJf/uVfsrnYbDa0tbUxzqa4uBhOpxMxMTFYs2YNjh07xvwRRkdHsWXLFvT39zNlfGtrK2JiYliCqZiYGLS1tbFc6cQ5rlq1iulWkpOTcfjwYRQUFKC9vR15eXkAXATOYDC4rQFxTGfOnGGipISEBFy+fBmA68b/9ttvMydCPz8/bNiwgYnTFEVBV1cXFi5cCFl2xcX68pe/jCVLluDmzZtwOBw4c+YMMjMzsWXLFraGVqsVzc3NLOxKeHg4SktLcefOHVy5cgXf/OY3UVFRweJZmUwmbNy4kZlB6/V6REdH48CBA9i0aRNWr16NEydOYOvWrbh48SLa29uxd+9eAMArr7yCr371q4iLi0NVVRXi4+Nx+fJl1NTUICUlBZcvX8bq1asRGBiI7Oxs2Gw2dHV1Yfny5Xj99deRkZHBAkEWFxdj6dKlWLhwIcMPtIYUn4s3MaYzQOe8oaGB+TyJ8ey8RXzQgjlnJFRVtVhV1S8BeElV1YeFnz854gG4FLe+mtH6ArLsOZ4+tSv+zyt7AdcGF3OC87doLUW+J4In3nzpx5MZMq/c9qQYp/qENHnFPq/YE8dKbVJIcbrN0/jPnj3rZjFCZbXa9JY0h0wceVEW5Y8OCAhAenq6W0BCRVHcYhrdvn3bbb7UBxkM0O2NTErFcfCiQj6kBCWWon6TkpLQ2NiIkpISLFmyBFarFXl5eTCZTEhMTGRBCgHg7bffxnvvvQer1YqWlhYkJSVh79692L17NzIzM2EymfCDH/wA6enp+OlPfwqLxQJFcXmAT05OIi0tjYlbNmzYAFVVYTQaUVBQgP7+foyMjCA7OxvV1dWQJIl5Qauqiq6uLkRGRmJqagptbW1wOBzYuXMn9Ho9y9cREBAAWf7ECi0mJgbd3d0sB3tNTQ2OHz+O1tZWtgZWqxUdHR0s7Wxqaip6e3tx/PhxREdHsxzwOp0Oer0eH330EX7xi1/g7bffxuHDhzF//nwkJSUhODgY165dg16vx5e//GXY7XYsX74cDQ0NmJiYgMPhQENDA2w2G0pLS1FWVoZ//ud/ZlxAV1cXysrKAABRUVFYtWoVM/TQ6/UsLwkA3Lx5E5s2bWJipMcffxwWiwWXL19GTk4Orly5gvj4eFy5cgVHjhxBW1sb1qxZg+bmZmbm+8orryA1NRX79u1DYGAg7HY71q9fj9TUVMZNXblyBZWVlUhISEB9fT1qa2tx/vx5bNu2Df39/cyy7ezZsygpKWF7mOJ10fmhM0CXtMjISEY8+FhvxHHz2UvvBf8BPlhhqar6w3tq+XMIkiR5NBOdKwcym/5EbJdHpmI4clEXUVdXxxCr2Ic3gudpE3gicJRrwhv3RPVFgsj7v4hj5XUYvM05T1xo8/NKVSojzlHLd4XekTUXtdve3o6kpCQ88sgjyMzMnOG8Nzg4yMaZnJzMDjVvMk0HTVFczpQmk4kdSlFs2NjYiJqaGualLssys1wjk0+SVaenpyMnJwfV1dXMkIGUr2T2TO3++te/xttvv43R0VGUlZUxjghw3R6Hh4cxMTGBqKgodoNftGgR6uvrYbPZYLfb8d577+Fb3/oW3nnnHRaJQKfTYdu2bZiYmMCOHTuQmJiIjo4OmM1mFsixra0NXV1duH37NgYHB2EwGJCQkIBvfOMbSEpKQl9fH5qamtws6RwOB7Zs2cJMUE0mE7s0WCwWfP/738eCBQuYnsBoNGL37t2IjY3FpUuXMDY2hqNHjyI+Ph6bN2+GXq9neT8qKyvxjW98Az/72c9w/vx5Zuk0b948bNmyBRMTE/jqV7+K06dPIzMzE2vXrkVNTQ2CgoLQ29uLkZERrFq1Cn19fdi5cyf27duHr3/961ixYgV27doFvV6PBx54AA6HA0ajEYWFhexGb7FYcPDgQZw5cwaVlZVYunQpJicnUVlZyTibRYsWISEhAdHR0ViyZAmLjBwSEoIvfOELsNlsqK6uRkBAAJ599lm2r2w2G1vL7OxsrFq1Ck8//TSmpqaYr8rVq1cxPj6O119/HbGxsSgoKHDLP0KXMdp//F4nrooySZI5OhEbPpqDllm9L+CLJ/p/GBBv+gT3Qjy0xEre2uWRqafbPgGfVlOrTT7yrKjH8BZHSgRP66E1P+qX75PGoJUbXQuxE8EhT3mDwaCpPyKPc3HevJ6DxkfRXUnfIyr0eWV5Z2cnCgoK2Jh43xISkZFSnW7XFBSR9BM0BwrjTRFXxbEqisLk7IqioLu7GzExMaiursbixYvdFP86nY55cNvtdjz11FOMSFBYDBKt2Gw2FqgwJiYG586dg16vh81mw7x585Ceno7jx49j7969+OEPf8j8g4xGI/z8/LBlyxaEhITgyhVXEAfKDdLf3w9Zlpk4S6/XM5Gb3W7Ht771LcTExCA4OBgxMTHIyMiA3W5HU1MTmpubMTQ0xHQZCQkJKCoqQm5uLtuPf/7nf87ESRRyhZz1SkpKMD4+js7OTmRnZ+N73/seUlNTGefzk5/8BJcuXcLExAQ2bNiADz74AP39/RgbG8Ply5excuVKOJ1OJCQkYOHChbh69Sry8/PR1dUFp9OJBx54ALIso7OzE06nkymYIyMjWWDKBQsW4PLly5g/fz6WL1+O4eFhPProo4iKisJzzz2HCxcuoLm5GQ6HAxMTE8jOzkZ5eTn6+/vx0UcfISwsDCUlJSyfCOBySF21ahWqq6vZvjt16hQaGhqwb98+mEwmfOMb3wDguhRERkaira0NVqsVX/nKV2AymZCTkwN/f39s2bKF6c9UVUV9fT0yMjKYmM3f39/tbJIjcE9PD3MgJn2oFn7gVRmzXY558MUP5D8MTE1NzVCy3gvMlWvhb9Sz1SGOxJu8n1hu8eZPyI9/7mk8nsRv9E501CP9wZEjR5gnMvWrFQKGD9HO+8kQeLNMo7SiPBdCN0LeWQ8AC8lAcxHFaGII+a6uLhbaXeSQaFzJyclIS0tjISrocFG7lEchJCQEBoOBmalSH2Q1dfr0aUb0CgsLERISgh07djBZPBEp0qvYbDa89NJLOHfuHK5du4akpCQ0NTWhq6uLhTIpLi5mMaDa2tpw5coVLFq0CAcPHsT09DQeeughtl4GgwHDw8MsdlR2djZqa2tht9tZn4sXL0Z/fz8j+JSmlfwKOjs73cRUP/nJT3Dt2jUWSuX27duIj4/Hxo0bkZCQwL4biWtJnDMyMoK2tjZs27YN//f//l+cPHkSFosF5eXlWLBgAQIDA5GQkIDY2FgUFhbC4XAgKysLDocDH3zwAcbGxrBw4UKcO3cOS5YsQXp6Op599lkkJCSgp6eHhflYvXo1tm/fDqPRiPHxcTQ1NWH58uXo7+/Hli1boNfrYbFY8Pbbb+PIkSOYnJyExWJBUVERbt++jUWLFuHv//7vMTY2huDgYNjtdoSEhGD9+vXQ6XQYGxtDfn4+rl69itWrV2Pv3r2IjIxER0cHhoeH3ULrDw4OQpZlrFq1CgaDAadOncIHH3yApKQkDA8Pw2q14tChQygtLUVISAgzhIiJiWF6ELrkGQwG1NXVsWjOAwMDUBRXgjDSnZEzIZ0Zo9HodhbobIrA4wLiqmfDIQT3xIFIkmRQVVU75+jnGAICAgBoB+rzBbnzMFeuZS4EZzaugJAnIVoCutGLnInI2oo3dJ6bEZXgwCfWS3Qj9SUIG89tedrEnjg5CjtOiJ/GyJv6UnsioeP9O/g1ItESjYHS4YrrTQQ6Pj6eHV4ihrTu5LxJVkr0nsLG63Q6ZGRkIDU1dYaDp9FoZP4YlH6Wz9S3ZcsWpKamsjERwiAdC9+WXq+HyWRCT08PMjMzsXHjRkaIKioqsHHjRoSHh+PVV1+FxWJh1kskWouNjcXVq1exceNGAMCbb77J/Ebq6+vZt1AUBRs3bsSuXbvQ1NSE/Px8dHR0YOvWrbh06RIURcHY2BiysrKYNzZFxyWz6qVLl6K2tpY58a1ZswalpaXQ6XRobm5GcnIyJiYmYLfbER4ejry8PHZzplzi3d3dmD9/PoaHhxEYGIju7m5s2rQJq1atYvL8H//4x1i1ahXCw8Nx9uxZpKWlYXx8HPPnz0dHRweCgoLw7rvvYvXq1RgaGoLNZsOZM2fw3e9+F4qiICQkhIU4UZRPLJqIO6WkVQMDA8jKysIvf/lLpKamIiAgAE8++SQqKythNBrR0dGBZcuWoby8HNu3b4fNZkNDQwPS0tKwZMkSTE1NwWg0Ys+ePThx4gTOnj0Lq9WKmJgYKIorH0xXVxcsFgteeOEFN07fYDC4WWQRsScul0zC6UJFIiotnzc6t7ykQLSS9Ab3yoG032O9f1egG5+IsLQ8pUW4V85F1B3cK/AIlcZOnq4iiDmS+Vs8RawlJHTkyBFUVFTg2LFjbghZDKFCiYU2b97sFoSNkDbv8UrPeVEXH0+LJyRaOimyKqKQIseOHWNhKahtT+tKudL52FT19fWsT5oHLyIT9T0kziJCpCV65G93vD5Ir9ez2z0vYybPdIvFgp6eHkRGRrJQJjdv3mTKUcrNwSexAsAQOvCJxVdMTAwcDgdThlNYDKPRiISEBPzd3/0dFEVBRkYGixlFJsGSJDFFP7VJinuz2YyLFy/C4XAgNjYWxcXFuH37Ns6ePYv8/HwYDAZmftvV1QVJkrB06VJ0dXXh5s2b6OjogCy7rK1+97vfYfny5ZiensaJEydgtVphtVphs9ng5+fHCO+VK1eYNzt57VdWVuLUqVOwWCxYs2YNbDYb3nnnHUxOTmJqagrvv/8+LBYLXnnlFQQGBiI+Ph4BAQEoKChAQkICli1bhgULFiAmJga5ubnYsmUL5s+fj+eeew4FBQUIDQ3FxMQEvvSlL2Fqago3b97EuXPnmOUeAISFhTGv7/b2drz22mv49re/zfSZTz/9NB5++GH09vaip6eHXVji4uKQm5uLRYsWoa2tDSdOnEBhYSFWrlyJ6OhoDA4OoqenBzU1NQgODkZdXR1WrFiBhIQExhEWFBTgz/7sz5jOJDExEREREWx9U1JS2GVLlmXs2LGDuQOIZ4qSWYnEg9f50XnkwxLNBh45EEmS/oenVwBmT1TxOQZPN05Pi0ZIUitir6fyPPK8FyW92A6vR6ANw+fR0OqPJwikNKfbL9WNioqCTqdjt1e+L8poR1wPf0vhx0HpPvlx86bDdCOmW6W4ubW4P14vUVBQwMxYqW0SV4htEZdEehRJktDT04OMjAw30RflBeG5CyKcvC8Gn2FR5MqoLRJbkfmuyP3Jsit8SXh4OE6cOMEi8JJ/BoUwkWWZJSsihfaaNWtYHo6xsTEMDAzAz49llsbIyAhycnKQm5vLfIEmJyfx/vvvs9wXxHUkJydj5cqVMBgMLMWyzWZjMbo2bNgAo9EIo9HI0qkCLqK8fv16ZuFjt9uRmZkJm83G/CFGRkaYeGj16tVoamrCmjVrEBYWBoPBgPDwcPzsZz/D2bNnMTk5iW9961t44IEHUFBQgKGhIbS0tODDDz8EAExOTuLYsWPo6uqCLMtYs2YNFEVBb28vDAYDHnjgAUxMTGDevHloampCZ2cndu/ejeHhYTz55JNob29nnMDU1BRCQkJgs9nw+uuvQ1EUJCQkQFEUnD9/HsnJyfD394fZbMbo6CiWLl3KYomRrkmWXXG5bt26hY6ODty6dYtxdc888wzWrl0Lk8mE+fPnM5+a7u5u5OTkoKmpCc8++yzT9ezYsQOXL1/GokWLcOjQIda/wWDA9PQ0Ll26hDt37sDpdKKiogJLly5lXIwsy7h+/TpWr17N9ixdhHjpBO1jXkws7kn6TWJv0WfMV/DmB3IHwE8AODVe/3dVVYPm3Nu/M/iaUErrfwJfiIcvCvbZQKsdLUTrqT/xOS/eqa+vd0u4pDUvcaNpvQPcPbq1vN7r6urYYbLZbJrcHx+mXat/0SudTyol1iGRicPhYMpSUTynKArefvttN0sUOnSUcY8Pa9LZ2cm8pQkRk/4EAAtVYjKZEBgYCADMAomPAEwBEvPy8ti80tPTWXZAIiBkzkuhSoaGhhAUFIRDhw5BURS88MILjBDX1NQwkdexY8dYJFmr1YqamhpUVFQgMTGR6SlaW1vd/GDIM5syHsbGxjL/BDLj7erqQkREBCNSJB6rqKjA9PQ0JEliJszvvPMO5s2bh3feeQfLly/H4OAgHnroITz55JMYHh7G9PQ0pqenUVZWhpUrV2L16tXo7u6GwWDAwoULcfr0aaxcuRK7d+/GpUuXEBwcjH/6p3/CV7/6VcTHx6OjowMXLlxgARB37drFvN79/Pwwf74r7uvk5CQeeOABjI6O4m/+5m8wOjqK5cuXo729HX19fdi6dSuOHz+OgYEBhISEICgoCDk5OZicnGS6J/5b1dTUoL29HVlZWXj3XVdGb1VVmenz6tWrUVBQgAMHDuD555+H0WhEV1cXi3dVW1uLw4cPs7ArW7ZsQXFxMUZGRjBv3jxUVlYiODgYX/3qV2G325GXl4f+/n44nU7o9XqmMA8NDYXVap2Ro4jfj1arlYXu9+RTJUaZIBAdo+nseHIk9KYDaQJQqqqqWXwhSdI+L/U+t+CJWM6GeD0hci3kyouaPg14Eu94K+eN8yGOxW63Y2BggN3ItQgl/9wb8eC5N5574etnZma6IVOxLbIi4Yma2K8Ys8toNDKnQXFMNEfiiPix8DoVwKVf8Pf3Z3Xq6+tZ2Ayq6+/vj927d7P1JaTb2dmJpKQkpKWlQa/Xs1AcRATIcZK4Pll2Kb11Oh27HdLY+BSzpAzV6/UsHtbY2BgUxRXgsLu7myW6stls0Ol0rK/ly5ejr68Psiyjr68PCxcuxN/+7d+iqakJfX19CAgIYGE0AJcfzOjoKHQ6HQYGBljYE3JuI7n7hg0b8Nvf/pYlVdqyZQuqq6sRGRmJhIQElJSUMAurd999Fy+88AIjDv7+/tiwYQOqqqpw584dREdHQ1VV3L17F2FhYdDr9bhx4wYqKiqwd+9ehISEuO2RsbExREVFsdD2gYGBWL16NUJDQxkBu3z5MrKzs1FTU4P4+HisXbsWZWVlCAkJwejoKMrLywG4TI3j4+Px3nvvMW7l+PHj0Ol02Lp1K86fP88cIUm0Q7lRSP9w9uxZXLt2DRERESySQExMDFOw79mzB1VVVTCZTGhoaMCZM2fw8MMPIyYmBmlpaSzWVVNTE/bu3Qu73c5CpYSEhDDiUVtbi40bN+LatWtYsWIFFEVhGR75wIkUooYIAnFOFPVAPLeiXpI/V4qizLDG4jjtOecDeRKAxcO7GR6JfwpAyVS8gdbiisSD9xkQ26OPyYdTF9/7Cr4SIZ7QidySqLvp6elhm0vUWYj+J1pj5/vgZaZa76kMry+gtaN36enpSE1NdXOKovrEUfBrwbdNbVH4eeqbEkfx60cybPKn2L17N7Kzs90CLRIh4Inx2rVrWVrb48ePIzY2FhkZGUhMTGSmt6SLorAXFLRPlmVMTU0x/UZiYiK2bduGlpYW2O12t5seRYEFXBcdSlpEObqnp6cxMDAAvV4Pu92OQ4cO4eWXX0ZoaChUVUVTUxP0ej3LyX3z5k00Nzejvb0d77zzDvOdII5RURQEBQWhubkZOTk50Ol0MBqNCA0NRWlpKaampjA9PQ2z2Yzf/va3KCwsxMKFC7Fs2TKYTCamCKfxW61W1NbWMu7o5s2b+Nu//Vs8+OCDMJvNCA4ORkJCAnQ6HYKDg/Hcc8+hvb0dU1NTsNlsWLlyJfz8/ODn54fp6Wm8+eabaGtrw9TUFAIDAxEUFITq6mpcu3YNQ0NDSEtLQ2hoKCIiIjA6Oop/+Id/AODKUULK5JycHPzN3/wNy4eiqioGBgbw8MMPMy4hPj4e0dHR6OnpYfnmKdRJVVUVqqurUVtbi4SEBHz9619Hfn4+kpOTkZeXhwceeAADAwNYtWoV4uPjMTExgX/5l3/BxMQEbt68CQBYtmwZ6zchIQGy7HKq/P3vf48PPvgA//iP/4jXX3+djXXv3r0wmUzIy8tDZWUllixZgldeeQWHDx9GeHg4s5ZraWnBxMQEWltbmaWhoigoKyvD8uXLZxAP4uI9XQzpGa8nEXCfVv4lr57oXaqqjnp4d81Tvc8z8J7o3hC5N8StRcX59ogD8eQ57avX+1wIjTguvo2Ghga3zRMfH89yQGiNxZP/CYGWRZU4d0+bk18bXnFnMLhycvDjJSLDE316L5oGk7UUETP6TboJ8rwlh8DVq1czERCNVZIkJrrik2fR/Do7O5GXl4fe3l7IsszEaTyR2bZtG2RZRk9PD2JjY2EwGJCYmMiyQwIurqexsRFHjx5lDn/t7e2IiYlhClgS8ZCjWUREBNavXw+9Xs9uiETABgYGEBERAb1ej6mpKdjtdibCGx8fx7p167B9+3bMmzcPk5OTKC4uhslkwnvvvYe33noLcXFxqK+vZ97OtE5hYWEYGRmBwWDAnj17MDU1hdDQUFgsFqa4fvHFF/H2228zk96NGzfi6tWrKC0tRUpKCp566imsXLkS2dnZsFqtWLVqFWRZhsPhwNmzZ7F48WIkJycjMjISf/7nf46AgACEhoayKLMLFizA9PQ0nE4nLly4gImJCZw7dw7Dw8P413/9VxZ80M/PD3v27IHT6URoaCiLjXXkyBH8/d//Pd577z0cPnyY9U2phF9++WW0t7djcnISRUVFsFqtLKXw6tWrkZycjKVLl+Ldd9/FG2+8gdraWhw6dAgbN25k+UtycnKwYMECzJ8/n9UpKChgASf9/PzcQry/9957+MEPfoCpqSmYTCZ89NFHuH37NkZGRtDV1cXM82VZxp07dwC4iNCKFSuYVzrp2oKCgljyMzpHFF5eNMLwlD6BzhV/Tvln3Pn216o7W0bCv5QkqUmSpNsf/zRKkrTHW53PM5AnOjAz/4Yn8IT0yQKIkBpvheTNYVBL7jhXQuOprlZ/lMuC3vEIVkT2nqy6xDFp/W23291u+Z6A+iWvWL5sS0sL4uLi3BJH0d/UF29JR2Ig0bqE1vfs2bM4duwYAFcwPAr5Ia6T3W5nRIi4osjISLd+HQ4HDAaDm9MkrQHlViEuikJHWK1WHDx4kOl5ANcejI6OxtKlS1FaWgqz2YyoqCh0dXUx89p58+YxxzPSjRgMBpbWtaOjg4Vvb2xsxPHjx7Fo0SJUV1fjhz/8IUvM9Oyzz8JgMGBkZATt7e3o7u5m3+n06dPMUmnLli3MxN3pdCI6OhrHjh3Dtm3bsGfPHly/fh0jIyMoKyvDnTt3MDAwgHXr1rHc52TJRetFBIvmXVRUhJ6eHpSWlgIA1qxZA51Oh1WrVqG8vBx+fn5Yu3Yt88peuXIlCgoKUF9fz+JB/c3f/A0LS9Pd3Q1/f39ERUXhww8/hMlkwqJFi9gN/fLly7hy5Qp27dqFr33ta3j44YeRnJyMn//85xgfH4dOp8Pf//3fIz4+nllubdy4EW+99RYqKytht9uZtRYA/L//9/+wZMkSmEwmfPjhh5BlGbdu3UJxcTHz+6Cw7yMjI+jt7UVmZiaioqKwcOFCHD16FHfu3IHD4YBer8eXvvQlbNiwgUUbjoiIwPbt27Fo0SIUFxdjenqaneuysjKEh4dj4cKFiImJYT4fRqPRzRqS9zMT8Yssuyy2KJ+Qp3Pt6dnHfdzROs8eCcjHhOI5AM8DWAZXvvEXAPy3P2UiQgvsq5Lbky6CN6klczqxnqf2PCFjrT69fXBfzI89jUNRFGbuShuPvLq12pNlmVllAZ9wIrQWZrMZJSUlMJlMmtwX3y/g0lXwxAFwIS9yXBNNZEk06MlGXVxT4hLI453EFfya0hqWlJS4+dQoiis3AyFGslIh4kL9R0VFwWaz4bvf/S5sNhtbh46ODhZC4rnnnmO+IhkZGfD392epV3ft2sXCraSlpTGv85SUFHR1dbFUuZRgqaKiAjExMczRdPfu3YzYjY6O4rHHHoPdbsf09DT6+vpw+fJl1NbWYsWKFUzMotPpUFJSwgIJXrt2DZWVlRgbGwPwiQ8OJSmTZRnT09Ms/PrXv/51ZGRkYOHChQz5TkxMYOvWrWhvb2dm0pmZmSgoKEB4eDisViv+8i//Eunp6cxTe82aNVi7di38/PxY6I+tW7diz549aGlpYdGKDQYDSktL0dLSgpycHAQGBkKWXbk6BgYG8OGHHzInvPz8fAwODiI8PJz5U/T19aGmpgaSJOG5555j3uuFhYV45JFHALjMhS9evIjs7Gzs27cPFy5cQFtbG5qbm3HhwgVERkbCZDKhsrISCxYsQE9PD771rW/hH//xH7F48WLGOQAu44krV65Ar9cjLi6OhWR5+OGH0d/fz7Is1tXVITIyElarFcPDw/j5z3+O//W//hcmJiawcuVK9PX1sWgD8+bNY5knaf+TGIs4ZTojnhyWZVl22+O8GFkLv4liewB+0ABvVlj1AApVVR0Qnq8EcExV1Qytep9n+KzCudOH0lIe82UAz2aq/DOt93w/WqIpQqiUntTbWPmIwfzYKaERhU6heDp8ThFR9zNbVFwxLDsPZOXU3d3NEDuJiShyqJYNure+Sb7L38bE+fLzNplM6O3tdTPf5ZXa/Fi1bnPAJxZbxcXF2LZtGxTF5YBmsVhw5coVrFixAuXl5YiLi0NmZib7VnwoGLPZzExpyTqOPNxfeOEF5hBIHsibN29mxgGRkZHMLJrGSH4iwcHBGB0dZcTowIEDCAwMRHBwMHbu3Ml0OZRnw2az4bHHHkNpaSmefvppNDQ0sICHV69eRVhYGACXjiYgIIBZttXV1WFqagqbNm2CoihoamrC73//eyxatAipqalwOp04efIkAgMD0dHRgQ0bNiA/Px81NTWIi4tjkX4pEdS5c+dw9uxZZGVlQafTQafTIT4+HuPj4ygtLcW8efMwPT0Ng8GA0dFRpKam4qtf/SpefPFFLFu2DHv37sWCBQvw/e9/H/n5+XjooYdw4sQJTE9PIygoCPv27UN8fDzzQaG0uKGhocx/Y8+ePSgqKkJ/fz8yMzNZXpAnnniChTK5ffs2bty4gZUrV0Kn0yEkJIRZgF2/fh1tbW3MMmzJkiUYHBzE0qVLcePGDdy6dQuXL1/GM888gzfffBM9PT2YP38+cnNzUV1djQULFuCRRx7BnTt3sGjRImZRBoBZe+3evZsFSKTzU1RUhO3bt7MkYfy54s8v7TNFcTlI0hn0Be7FCmueSDw+nsiAJEnzfOr1PyDwugTKdid+KADMb4Ru2d7Mcb1xK1oWVjzxIHM9fgy8DTiJfXigNgmBUbne3l6mRBY91mnOWpYdNFaB5XUrB4BFteUT4PD27OR7IiJzWgettQPA0smSQpzXm/CEx2QyMfNRapNET6KFGF+X+uOTRxkMBuTm5rKQ2FarFS+++CKef/55XLlyBVFRUQyJ07dqbGxkRgwUfZZu+GazGVNTUwgKCmJrWVZWxvKcA2AOfL29vdi4cSOKi4uh0+mQn58Ph8OBS5cuQafTMdm5JEksWVJeXh7j7mi/BAcHY2pqChMTE3j66adx5coVzJ8/HxkZGdi4cSNsNhsGBgaYYx95pcuyjPDwcBw/fpz5h2RkZLjlsgBcwR11Oh2++c1vYmRkBOXl5QgPD0dSUhJOnTrFIviuW7cOfn5++MEPfgCHw4Hly5ejoqIC8fHxaGxsxIsvvoh3330Xjz76KM6fP4+BgQFERUUhJCQETz75JKampvCLX/wCy5Ytw3//7/8dZrMZqampaG1tRVxcHNauXYv+/n5YLBaUlJRgeHiYWaMFBgZi586dLEIvACxduhTz5s2Dn58fc7icmprCqlWr0N3djdWrV7PQ793d3UwU9tprr2FiYgKJiYkYGBjAuXPnMD09jbi4ONy6dQv/5b/8FxgMBly6dAnh4eHsm7a3t+PDDz/EsmXLYLfbkZubi6qqKvYt+HNM+5gIAHEWfLZH8gdSFFdoGjpPJMZyOp3sDHg6UxqgyWl440DMWhRntnefZ/i0HAjPEQDaNtP8e+CT26poqTQXPxEemQMzkz3JsruPA58bgy87202eclaI9bTGLf7P38hJ9MQjcXFN+H7pGUWMJcWrWK6uro75MGhxZHw0W567IAJhNptn5CQhv4vOzk4WWoTaprzU5GRFIi8KBnj8+HFs27aNWWlZrVY3M0uz2QxVVREbG8tuhzabDUNDQ4iIiEBXVxfS0tIYB2U2m2E2m7F79243/xQt7raxsZHpK8rLy7Fs2TLo9XqsWrWKpWWlrIKDg4PM6z01NdUtBIbdbkdpaSlzVAOAw4cPY8WKFSxg35UrV+B0OrF9+3YMDw9DURTm8JaWlgZJkjA2Nsa4Cf7m3NLSgqGhIYSGhjKDgIKCAvzoRz/CV77yFQBgEXujo6ORlZWFyclJTE5O4tKlSygvL8df//Vfo6OjA08//TRefPFFhISEMCJA4V0OHTqEoaEhPProo8wb3mazYfPmzUhJSUFpaSn8/PxgMpkQFRWFqKgoWK1WFnCxra0NERERCAgIYIm1Ojo64Ofnh61bt+Ktt95iaxEcHIw333wTaWlpmJ6exsMPPwyHw4Gf//znSEpKwvPPP4/y8nJkZGTgrbfewrPPPsuSce3btw9VVVUICgrCxMQESkpKkJqaCn9/fwQGBiIvLw+3b9/G+Pg40/PV1tYiICAAOp2O7VWn08kyHVLATHJCJWs8iq3FnyUt0bJ4rrUugA8++ODc8oEAiJMkqUXjpxVArJd6nxokSVohSdIpSZI6JEm6JEnSf9MokyNJ0qQkSRc//vn+bO3Olv99NuA5Al4e7uk9fRBRJ8AjUy0QFVp8+BHqgxC0GGbcYDAwByK+LI1Py0KMNg2lgaUxip6sWubN/Ptt27ahtbUVx44dYxnzqC1evMTrIAAwZbrFYkFBQQH8/T8x+CDiAHwSJkRrg/MKb9KbEPEwmUxQFIWF+uDr3759m8UQI2RInAMh/bVr18Jms8FsNqOsrIxFkiVHRCKmBoOB3cBpLGQ143A4YLfbceLECYyNjaGtrQ0dHR3MaoqU5ENDQ/jxj3+MQ4cOsXbMZjNOnz49wzqNQpRERUWxtKpDQ0PYtWsXjEYj0tPT8dJLL83gICipFAB0dXUhODgYxcXFOHr0KFtr8hnZsGEDCgsLcefOHZSVlWFsbAxJSUlYsWIF0tPTkZSUhMnJSZSUlEBVVfz2t79FQ0MD+vr6sHr1akRFReHBBx/EF7/4RTz44IMYGhpCRUUFgoODERsbyyyUli1bBpvNhmeffRa//vWv0dLSgo8++ghbtmzB6OgoFixYAMCVhtdisSAnJwfR0dFoa2tDU1MTQkNDERsbi4SEBFy5cgUtLS0oLCxEd3c3Dh48iDt37iA3Nxc6nQ6HDx9GT08Pjh8/DqfTidu3bzOCuWrVKubARybHLS0tyM3Nxdq1a7Fnzx5kZ2dj+fLlmJycREZGBgICAqDX67F7926MjIzg/Pnz2L59O0JCQrBixQo0NjaivLwcExMTOH78OCMKzc3N+MpXvoKgoCBmhXfs2DEsWLAAfX19eOmll3DgwAH86le/wtTUFCIiIlBaWorp6Wmkpqay/UD7OisrC5mZmSw9c1JSEgu6yAPtf/F8aulj6Rk8mPF6E2HFeXn3hwYngOdVVW2SJOkhAGZJkt5XVbVdKHdGVdUCXxvVCjs+V5hN9KSlvBI/ELHmWVlZM+qIN3tP4jKtcgRaIQyobT5uk9iflmWWKKYSobGxEaGhoRgaGkJ6erqm4yBfjxR5vO6CQnrQXEh5S9kaSWwkcnsE5FAFuGTzlJK1pKQEW7duZVxNUFAQiouLsXv3bkaABwcH2bqQyCY6OhqyLDN5ss1mw8svv4znn3+ecTCivoeISkFBATNrXbx4MQuxTuMsKChghCkxMZFZXyUmJmJoaAh/9md/BqfTiYCAANjtdhbyRJZlhIaGoqioiHEbtA9SU1OZaSflinj77beh0+nwwgsvwGQyQZZlWCwWvPzyy/jwww+xbt062Gw2OBwOLFq0CBs3bmS5OmJiYpiDIKVctlqtyMjIwOnTp5k8fd++fWhra4OqqoiJicHIyAicTicefPBBrFixApcvX8bY2BjWrl2LqakpbNmyhYn/rFYrSkpKsGfPHnb7J58MACguLoZer8f27dvR09ODgYEBvP7660hKSgIAXL58GQsXLsT09DQ6Ojpw6dIlfPe730VISAir09fXBwDYs2cP3n33XVRVVWHbtm24efMmjh8/Dj8/P4SFheGf//mfsXnzZmzatAmyLOPq1asst0dtbS36+vrwgx/8AC+//DKys7Oh1+vh7++PJUuWwM/Pj0UM3r9/P5vb+fPn0dfXh/DwcAQEBOAf//EfAQBFRUUYGhrCokWLMDw8jMnJScZRrF+/HmFhYZiYmEBBQQFKS0uxatUqPP744wgJCYHZbMayZcuYxVxPTw8iIiIwPT3NwqQAYFEajEYjCwQpnjktS1Hxkkh7e7UXR0KPBERV1UFP7/7QoKrqCICRj/++JUlSB1xWYCIB+VzAbDJE8dZOcvfk5OQZaSXFj0jPSK7PP/fGdmqNkRdz8SIxXr/APwdmiulEGB0dxfHjx92IIU+kRHEdL/snjlBVVbd87iQSO378OPLy8picmPckN5vNcDgcyMjIgMPhQEdHB+Li4tDd3Y2kpCR0dHRg+fLlCAkJQWFhIRRFYeaUZrMZkiQhOzvbTZlfUVGBnJwcnDhxAsuWLXOb84cffghFcYWDp3zUkZGRTJxFxIrPod3X18dk0MSRyLLMPNMtFgsLiEjineTkZNTV1cHpdDJRJHE59fX1WLZsGVpaWhAUFISEhASUl5cjKiqKycqJkCYlJWH+/Pm4fv06JiYmEBERgdraWjz77LOw2Wx47bXXUF1djfz8fOTm5kKWXT4SR44cYd+J8rC3t7ezvN1jY2OQJAmLFy9mc3U6nfjwww8xOjqKjIwM7NixA6Ojo0hLS8PKlStZOBXyjQBc3FBhYSFMJhNbg9LSUjgcDoSHh2Pp0qVISUnBAw88AIvFgtu3b2PDhg3MEk+v16Orq4vFryLRHYVQDwkJwenTp/HAAw+go6ODRS6+fPkyM7Hev38/mpqaWI6NLVu2oKGhATk5OYiPj0dFRQX+6q/+CoAr5hjlVierLPLg37VrF/r6+li04KysLEaMAWBwcBDr169nDpM9PT1YsWIFHnzwQaSlpeH999/HQw89hLCwMFRVVWHp0qW4ffs2yxPf39+PkJAQOBwOljvGYDBg69atLFc6iSYlScK2bdvYnmttbZ2h66SzpqUD0RLHe8Mt3sx4/0qSpG9y/w9LknRTkqRbkiT9V48tfsbwsdXXGgDnNF5nSpLULEnSu5IkJXio/9TH/iuNo6OafpGfCjyxfZ6AEGxhYaGbhzZfV4uLoXAXhIh4PxQ+m5invnmREx8kkERKPDsLfGJXLjogiX8vWrQI+/fvZ6IIvi2R+yLk2dLSAgDMHDUrK0tTHLht2zbmuEdcGOWYGBsbYxn6KAsdZZOjSLrz5s1jbRmNRuzduxfPPPMM0tLSmM8Gr6vZtm0boqKiUFBQgKCgIPbcYDBgw4YN6O/vZylwIyMjmTjLYDCwnBORkZGIiYlxc1QksdPNmzdx9OhRlm2OFLGpqamIjY1FaWkpk2cnJCTgzp07jKNQFIWl2SVFa39/P+NGFEXBkSNHcPjwYZYC9sc//jFu3ryJ2NhYWCwWFsyyurraTSzIE3fyz6A0s3q9nnlVX716FQUFBbBarUxMSlZaN2/eRGRkJHbs2IGzZ89iYmKC6bTGx8fx1ltv4c6dO9ixYwd27NiBpUuX4uzZs7DZbAgICIDD4cCdO3cwNTWFO3fuwGg0oqqqCu+88w5kWcZ/+2//DbGxsUhOTmahZEZHR5GZmYk9e/bgoYcegt1uR3d3NxwOB5KSkhAWFobNmzdjeHgYISEhWLduHRITE5loanBwEGNjY9i5cyeefvpp9Pf349e//jWuX7+OiooKXLt2DT/60Y/wi1/8AlNTU8jPz2dpeKOiopCXlwc/Pz/GeZJuiBwBd+zYwbio2tpa7N+/H83Nzbhz5w4aGhrQ1dWFN954AxkZGXj66afR09ODO3fuoLu7G06nE2vWrMHKlSsxODjI9hD5MimKgqGhIZYbxmg0MtN4Pgo0+f7QmRTPmt1unxFJWzy73sCbDuQZAG9y/19XVXUegEUAHvPa6mcEkiQZAPwWwHOqqt4UXjcBCFNVNQXAAQClWm2oqvpzVVXTVVVNX7Rokc99eyMC/Hstts8XJ0VeL8G36akuf2MX+6TnVN+TI5+oQwHcQ9zz46EyfB5wfnzErcTGxsJkMrn5Z4gcFdWz2Wzo6OhgMnmesPDrQBueOC8Cp9PJzFhv3LiB7du3u8WUoraoLlll0ZpQNFmDwcC4AFLOv/3222hqamK6mNjYWLd537hxAzExMQgMDIRer4fBYGCRbRVFwfz585GWlsZS6ZKOTFEUphO6fv06du7cie3bt6OpqQllZWUwmUwsbheJ3UiBrNPpWOBGs9nMdCXPPfccRkdHcfv2bZYr3Gg0YteuXSgocEl0BwcHsXDhQpaXIyoqihEjCm/+P//n/8QjjzzCjAOII5NlGUVFRejq6sL4+Djq6uoQGhqK6OhoDAwMwGKxsJS0gYGBSEtLwwsvvIC9e/fixo0b2Lp1Kzo6OvDjH/8Y4+PjzOcDcHniFxUVYWRkBOnp6Whra8OiRYswMjKCiYkJtLS0oLS0FGNjY8jOzmZmuCQSHBsbg8PhwAMPPIDMzEyWQ+TDDz+En58foqOj4e/vzxw/o6KiGDd76NAhnDvnuofqdDokJCSgsLAQTz/9NMxmMxISEpCfn4+WlhZs3LgRa9euRWpqKv7iL/4CY2NjGBwcxODgIOLj43Hnzh0cPnyYmW8fOHAAHR0dmJ6exunTpzE1NYUPPvgAv/rVr2C327Fx40bs2bMHCQkJLEc6JdBasGABKioqUF1djc2bN0On08HhcODtt9/G66+/jvT0dPT29iI1NRX5+flu+Vz0ej27WNGZpPPv6aJKlxoKA0Q6FC184c0pGPBOQL6gquo49/9vAEBV1Tvw4Nb+WYIkSXq4iMcvVVUtEd+rqnqTklqpqloOQC9JUrBY7l5gNiIgvvcmR5wLeKtLCFGLO+F1I57CqPBj5zcSfxshREvxpwD33Of8+Kivnp4et/hKWhZDfNm4uDimJBfXkSdMZAGWnJwM4BMT4LVr1zKxFAUVBD7JTw64OzlqrYksu4ciSUtLY4eRyouHjvrLzMxkIgEKjEiElB8HjUWWZcadkMNcb28v9Ho9k087nU7IssvMMiYmhrVNfzc3N0OSJKxYsQKlpaXsMhEYGIiYmBi0trbCZrOhqakJFRUVWLFiBTZt2oQvf/nLkGUZdXV1qK2tRWdnJ+x2OxwOB37/+9+jrKwMVqsVr732Gv73//7f6OnpYSle/fz8UFBQgLGxMYSEhCAuLg79/f1ITExkawcA1dXVmJqawuXLl9Ha2spCogAu8eaNGzdgMpkwNDSE0dFRREdHw8/PD7m5uXjjjTdQXFyMn/3sZ4xLIge92NhYjI+PIz4+HvPnz0dKSgquXr2K8PBwFuuJwqAfPHgQfX19jMsIDw9nYsAf/ehHAIBvfvObbK1DQ0MxOjqKw4cPM5FdVFQU1q1bB6PRiI8++giVlZVwOBzw8/OD2WxGbm4uwsLCEB8fj507d+LChQuYN28exsbGcOjQIRa596tf/Sry8vIQHx+Pa9euISwsDGVlZTh37hysViuqq6tZuPnQ0FAsXrwYu3fvRnJyMkvXC4CF3aHo2VarFefOnUN5eTkmJydhNptZ/LPIyEgUFRXBbDa7OfISh037kL/IHTt2jImnKZKyiCdsNhvLAuoJvJnx9qiqGqXx/AsAelRVjfDY6qcEyXXt/FcANlVVn/NQJgTANVVVVUmS1gEohosj8WhqNRczXh4RaomVfNE7+NqHp9/e6nmTT3qq70s9YHbzZE9jBmaaGPM6FVFkRDccnoCRjobKkVMglefHyRMbMmEk+bCvayLOnW77ZM6sKJ+YRfPKyIaGBkxPT0Ov1yMpKQmtra1obW0FABZwkdaAHDZJtAV84qtTV1cHVVUZtwK4FK35+fm4fPky40LsdjsuX74MAG55t81mM1pbWxETE4Pp6WkAQF9fHwoLC3HhwgUm3mpvb8euXbtw5coVxMXF4dy5c0hISEBXVxeam5sxOTmJ69ev4+GHH0ZWVhbj7N577z1mZQS4fG7effdd5OXlISMjA2+++SZCQ0MBuCy3bt68iRMnTuD73/8++741NTWw2+0IDQ3F1q1b0dTUhOjoaLzyyit49NFH8dOf/hSLFy/GnTt3kJ6ejr1798JqteLb3/42Vq5ciYceeggPPPAAYmNj4XQ6cf78eeTn5+ODDz7A6Ogo5s+fj/7+fkxNTSE9PZ35xFitVhgMrlzglB63vb0dOp0OWVlZqKmpwcDAAB599FHo9XoWaiQ4OJh55icmJsJut+PYsWOoqqrChg0b8Nd//dcoKSmBn58fiouL8Y1vfAMNDQ2wWq2YmJjAI488AqfTiYceeggNDQ3YunUr1q1bBwAs5D75ncTExGD9+vXo7OxEREQELly4gKmpKTQ1NeHxxx/HjRs3sGTJElRWViIqKgqJiYlMJ0bGI7SPyHiFxKpkUKJ1oePPnRZuIz82suj62HVjhhmvNwJyEC4E/r+E5/8bQLCqqs9oH8VPD5IkbQRwBkArgI8+fvy3AEwAoKrqa5Ik/X8A/itcFlvTAP6HqqpnvbV7L34g3pCuN6QkJnTx1C6fuIj/LYqUtOprEThfEOVsREpr7CKBEPMJ8DJVPr0rWS3xPhx8O1rJbGi9KUmTKLNtaWlhCkXyXid/DtEogR8/fyPztDZnz57FxYsXWQgJStgj1qNbGVnH8dwXL1K7+HHyK0VxeYVv3LgR69evZwYCfX19CA0NRX9/P7q7u1FQUMAQPwBmoVZVVYXc3FysWrUKBw4cQF5eHrMaIhFUWVkZcnJyUFZWhpiYGPT29iIiIgIrV67E4cOHsW/fPgwPDzMrNSJ4MTEx+OCDD3D48GEsXLgQ/v7+2LRpE/R6PRoaGvDcc88xgkLmr+np6cjIyEBpaSnq6upw/fp1REZGIjg4GAsXLsSjjz6Kc+fOYXBwENnZ2bh9+zbMZjPCwsIwOTmJ+fPns/WanJxEcnIyBgcHkZCQwBJAHThwgKW7vXHjBkJCQhAYGAidTofjx4/D398fjz32GJxOJ2pqarB8+XJERkYywrJlyxZmFUVhVN5++23cuXOHKamtViueeuopJmoMDg5GR0cHHn/8cYyOjmJiYgIdHR24c+cOi201b948LFiwACdOnEBjYyOmp6dhNBoREhKC5cuXo6qqClu3bsXExAQcDge+9rWvoba2lpm5k/8N7VESy7a2tkKWZTcz8tDQUBbdwGg0zriQibiCzh8ZdnjzNif9qZaRjHhe7oWABAI4BGAtAEognQKgEcC+P8Wc6PfqSOiJAxFv5fScv7WK8n2tdr3d5kVkKCJ3cRyzcQpadcTxe3M25IFHkmKfpNSNi4tDWloay3chciBaYkB+DcmihJ6LIUHEAyS2R//TbZM/UFrflfw96CDzBIknEuL6USIr4lyoXZvNxtqwWCy4du0ayz9Ct04+LAkph8k3gHJ9XLhwAevXr8epU6fwy1/+Eo8//jiCg4NZqJT6+nqsXLkS165dw82bN7Fp0ybY7Xa0tbWhp6eH5csgiy3i2Cjfut1ux+nTp6HT6XDx4kVMTk5i2bJl2LlzJ0wmE06fPo1Fixbhn/7pn7By5Urs27cPsizjlVdewbZt26DX6/HKK6/g4YcfRldXF9LT0zEyMgI/Pz9cvHgRPT09+N73voeRkRHmPLdt2zZUVVVhYmICBoMBS5YswfDwMPP1uHr1Ktrb2/GVr3wFDz74IAYGBhAWFoampiZERkZieHgYjz32GF577TXcvHkTOTk5GBsbQ3h4OBwOBwtRotPpsH//ftjtdhw9ehQrV65Eeno6ysrK4HQ68cQTT+CDDz5gOdOTkpLQ39+P3NxcvPnmmxgeHkZAQAC+853vsLUi50tC2EuXLsW5c+ewdOlSmM1mLF68mFmxUSwr0pf09/ejtbUVsbGx0Ol0cDqdmJqagsViwc6dO9Hb28sISm9vLxYtWoQbN26gsLCQ7TetbJniJdLTJZY/xxQ+xht++1gXqRnKxFs499uqqj4GYCuAtz/++aKqqoV/isRjLqCFKLXeEQIhKyhadFl2hYsAvEf9FVlI/reWPoS8vXmZpKiX4AkJKaPFoIsk5wfgFu6df8dH7uTnRr/F/vm5yrLL0uyJJ55gwQJJac1bhIhrywPvENnY2IizZ8+ipaWFjZtMSEXkzo9DUVwKcrvdztLG0oGy2Wya1nM9PT3IzMxkojDedLimpoYFOBT1LHFxcVBVFWazmVm2UXvEgVBgQ55DMRqNjBOhdRodHUVMTAy6urpw6dIltLa2MlHUlStXkJyczAJ42mw2nDlzBsXFxSgrK0NkZCRLZdvb24vExERERUWxEO2JiYmQZVf4i5iYGBw7dgyHDh3CoUOHcOXKFaSkpGDJkiV45plnmJkqJYo6dOgQHnvsMQwNDaGoqAhNTU2IjY3Fa6+9hpGREXzzm99EfHw8nnzySYyOjuKhhx7C6dOnsfrjMOdvv/02enp6sGPHDqxatQpVVVXIy8tDUFAQixtFiaPy8vKwePFibN++HSMjI7hz5w6zhnvyySexaNEiNDc3M3N4VVUxODgInU6HDRs2MA98Mtm1Wq145ZVXcPnyZZw8eRKyLCM6Ohrh4eGorq7Gr3/9awDA+vXrcfjwYaxbt45dWNavX8+Ih9lsxvnz55nyvqKiAjabDb/97W9ZsiiHw4GCggLk5uZi3rx5LNSIxWLBwYMHsXz5ciQmJiIjIwPJyclITU1FX18f03vcvHkTpaWlSEpKwq5duxAQEICcnBzIsivmWWNjI0wmE5qbm3HmzBkcOXLEzZKK9pYn4lFXV8fK8+FP+DL8uf4Y5pZQ6mPzWaiq2qeq6u8//unl3kuSJIV6qv+nCqJiV+udiAS1rKPodnyv2Qm1bsc8UuWBL8cTElKAi05DdDAAzAj3TsA7/PEmvmTZIt72tQgeH1qkpKQENTU1jAiIHA+1xSN2EpskJycz80OyouK97UlGXVdXB+CTzIOK4rKDr6+vR0pKipv+oaSkhM2DXzuaA3l/t7S0wGq1MlFbQUEBMwHmvxXlAMnMzGTe8kSMe3p6IMsycnNzceLECWaKTL49bW1trD2y7ydP4jVr1iAtLQ06nQ5dXV0ICgqCwWBAWVkZVqxYgbKyMkxOTkKWXb4PNJ+WlhaMj4/j/PnzzAPdbDYzU2EKpAiApRu+c+cO2tvbERkZCaPRyKyBurq6sGfPHty6dQu/+c1v0NfXh+DgYEiShNDQUPyP//E/AAC1tbVYvHgxrl69iqVLl2J6ehqbN2+G1WpFR0cHiykVGxsLf39/Zjywc+dOBAUFISUlBRs2bAAADAwMYMmSJdDpdOjr68N7772H9evX4+jRozh06BBGR0dht9sRHByM2tpajI6OQpZlbN26Fb29vbh06RIURYG/vz8yMjJYQMesrCyMjo4yjrG/vx9DQ0PIz89HWloaLBYLnn32WVy9epVFZCal9JkzZ5h+YmhoCKWlpbh27RouXLiAxMREXL16FaOjo3j66adx7do1yLLLWCMxMRGXLl3ChQsXEBQUxEK7AK6LEH17+k7+/v5YtGgRent7GZF6/fXX0dPTg56eHty8eRNdXV2Ii4vDvHnzWFRnfj9qWWPylyzCWXQJoYupeB5nsyj1ZoX1E0mSfitJ0h5JkhIkSVosSZJJkqRcSZJ+COAD/Pt6q/9BQAsRiu94hCzLM7N4iWV9Bf7G782c19d50G+RGImETuSwKHcFleVD1xPy1brBe2KDZVlGYWEhMjIyGBGg9/xYyNySwqhTGSJ2/DN+XclckQ4Rb8pIGf34wyPLMjPB9bRu9HdERATKysoQGhqKwMBAFha+vb2dIWBZdnmiV1RUMJEGb0pJN7m+vj5mt5+SksLET3SLBoCTJ0/i4MGD+P3vf4+mpiamQ8rKykJ4eDiqqqqwdu1alkFwx44dWLFiBZ555hmWoS4tLQ0RERFob29HdXU1S3va2dnJ4iItWrQIb731FiYmJjA2Nob9+/cjKSkJfX19UBQF58+fR0REBFO0d3Z24vbt28jOzsZPfvIThgDHx8eZZdHY2Bh+85vf4OLFi9DpdNi4cSNT/K9ZswYbNmzAwMAA/uEf/gE2mw2hoaE4cOAAzp8/j66uLoSFhWF8fByXL1/G0NAQamtr0dDQgEceeQTf+973YLFYcPnyZaSmpmJiYgK7d+9GX18f+vv7sWjRIqxevRo1NTVYsmQJ5s+fz9Lp+vn54de//jUcDgfGxsZYkEeKHRYcHIyJiQnMnz8fr776KlNw5+XlITc3l6W1ff/99xEWFobbt29j//792L59O3McDA0NRUZGBnbt2oWQkBC3gJ7kVCjLMsuk+KMf/Qh2u505ilKul6amJpZlMTIyEleuXMEjjzyCJ598khkPkP6IDAToYsRLAETLQ0VxKcZbWlqQlJTExFZxcXGwWCxMVKwl0fCGczzqQABAkqR4AI8D2ABgKYApAB0AygEUf2zS+ycDn1U4dxFmU1z72gYvc5xN7zJbf7wcVMxbDnhX8vOIVozKSywwL+unmwttQK1x0AamUBZiu/y4AMzoEwBTSHtSlPNtkIyfQl+Qly55u2tZd4nzJzh9+jQ7/LRmFosFVVVVbhwhOQESURCDUdbV1bGAjUFBQUhOTkZzczOmp6eRnZ3NMhAGBQWxUORr165ledsBMNHRhg0b8MUvfpGFWqGYX9Tfa6+9BrvdjqSkJDz88MMAwILydXZ2IjIyEmFhYSgvL2cezwAwOTkJp9OJc+fOYdmyZUhISICiKAgMDMTo6CgTEyUkJDBfhw0bNkCv1zNi4efnB7vdDj8/P5ZhsL+/HzabDW1tbcjNzYWfnx8yMjIwMjKCsLAwlJSU4IEHHsDXvvY1NDY24vz584iPj0dWVhZzGC0rK0NPTw/+7u/+Dr/73e+YQj0iIgKTk5P4xS9+gezsbIyMjKCjowPR0dGIjY3F448/zvRpPT09mJqaYjlUpqen8cYbbyAlJQUPPfQQ87hfvXo1Tpw4ga1bt7IwIUVFRfj617+O2tpaTE1NYWhoCICLM09NTYXBYGDWeampqcxKisLM0PlQFMXNL4ks9SjCcUREBGRZRnZ2NlN0T09PY82aNczAgIxL+P0rKr5FHELvm5ubkZKSwrhqnmPWOruAZyW614yEqqq2q6r6XVVVc1RVjVFVdY2qqrtVVT3yp0Y8gLkFUxRFFJ7AkyfnXIG/6XsiSL7cCGi8xMKSRQZ/G9HSpYicBI1DFMPJsku5TFyK3W7H22+/jR/96Ec4ffo0IybieACXWIzygYtKQL4OHzxSXB9CzLOtgSRJcDgcaG1tZTc1/sDFxcW5cXr8D4nsaB0yMzNZwjA6/CdOnEBubq7bYa2trcWRI0fQ2toKk8nE9gV9z7S0NCQmJsJisSA0NJRxrxkZGbDb7Th48CBCQ0MxMTGBFStW4KGHHkJqairjcO12O0JCQrB48WIAQH19PVPGU54Ts9nMnCEpn8XRo0dx9OhRbNy4EampqYiMjITD4cDVq1dht9uRkJCAgIAAlshoZGQEzz33HL7+9a8jICAAgYGByMjIYESMvKT9/f2Rk5ODlJQU5Obm4utf/zpWr16Nt956Czdu3EBERATWrVuHgIAAbN++HQ8++CCMRiMsFgvi4uLw05/+FOPj4/iXf/kXdHZ24ty5c8wcNiUlBSdPnkRRURFOnDjB9Ao//vGP0dHRgcceewxWq5VZ3925cwdPPPEEYmJi4O/vjx//+McoKChAR0cHLl68iNu3b+Nf/uVf0NLSgoqKCuzfvx+nT5+GXq9He3s7+vv7cf36dTzxxBMICAhAf38/C+A4PDzMcrMQFBcXMwV8RkYGI3JLlixheqPGxkYUFxdjfHwcbW1tOHPmDGw2G/M9KS4uhsVigdlsxsTEBC5dugSTycTWm/ZgREQEqqqq0NbWxr43+R3xoir+XPNWXjzIssych9PT09ne0vLH0hKDieAtmOJ/OJiamvKJW+Bv+oC2NRSVa2xs/P+39+VxVV3X/t8d4Sp4o4Q4ICoKIoMKKOCMExo1xlprrbFpak3qi3325de0Zuz83utr2vTZJLWZGlMbYxJLrTUWiaIiojIoIJMMMgmiEhUCcgW5kJzfH+eu7b6bc849F9CYPtbncz5wz9nz2WeveS2UlpZyilyrLTPciXhYU7IhEZnQX7OcDo2XqGBx/KRDoN9a3ABtJkmRxqN/ko7EalUz4wHgSj5PT08unhHNdEU5Lfl7iOa8ZIZLXAYhClp/URzkah0ppDqFfyHrLzpw9uzZg7Fjx/IPlXJ9TJ06tUsf5NAl5lgYM2YM6urqeMgSm82G9PR0HlAvJycHR44cQWhoKFdOUy4Gf39/7Nu3DxEREYiJieHvm7IAWq1WKIqCBQsW8EOLwoIsXryY5z/x8PBAdHQ0WltbUVVVhXHjxqG0tBS+vr54+umnkZeXh/j4eG6NZbfbeYDBS5cuITw8nFtmLVq0CHv37sVnn32GSZMmcX1KREQEsrKyYLPZsG3bNk41Ayqi9/Pzw3/913/h61//Otra2rB7924MGTIEFosaDPODDz7ApUuX0NzcjIaGBsyfPx9xcXE8tMfw4cNRX1+Pmzdv4vr16/Dx8YG3tzemTJmCBQsWcCOPtrY2eHt749q1a2hqakJVVRX8/f1x6dIlJCUloaKiAp6enrhy5Qo6OjqQkZGBCRMm4Fe/+hUsFgtSU1MxYsQILFmyhL/zP/3pT7h58yZefvllAMDs2bPh6+uLuro6eHt7870cFRWFXbt2YcOGDfD19UVcXByKi4uxfv167sxKIWZ27NiBVatWYceOHbBarVi5ciUOHz6MtrY25Ofno7W1lUcUWLp0KRITEzF06FBUV1cDUKMNR0REwGKxcD1Na2sroqOjnXKDEAcifztLly6F3W7nARVFq0f6jkhcKp4lIrdP5SSXAs1ItIYcyL8aeHl5dTkgtcCsHJCUZHqenK4U8lp9AkB5eTmndLWsqIyADkn6nzgPURREvykctMxlkLiJrLOoHLVH8ntRXEMbtaKigotpKPCd6OMB3JLViv3a7WpWO0J4tHkBdOE4ZGqJgKgu8d2RLkBUHlqtVqxatYrvB4vFwi2bxD5kazcxXMu8efN4fDKKfTRr1iz4+vpyguKpp55CVVUVR7ZTp05FTEwM4uLiEBYWxpFceXk5KioqUFlZyQ0NSKyQnp6OtLQ07N27F8OGDUN1dTUmTpyIAQMGcK6IxDhlZWVgjKG+vh5VVVWora1FY2Mjj+i7a9cujBo1CgsXLkR4eDgSExPh7++P3NxcWCwWLFq0CDNnzsSUKVP4/s3KysKhQ4cAAJs2bcJTTz2FdevUjNbV1dXw8vLCj370I8yZMwdNTU1YuXIlfvGLX6Bfv374+OOP0dnZiWnTpvGwKqTcnjZtGj788EPs2bMHy5Ytw6pVq1BRUYERI0agvLwcW7du5QTI8ePH8fe//x3Nzc3o6OjAjRs3kJ6ejuXLl2POnDkYOXIkGhsbMXfuXB4L6rPPPsOhQ4dQXl6O9PR0DB061MkM2cvLC7/85S8xdepUHDt2DCkpKXyPNTQ04JVXXsGkSZPg6emJQYMGYfLkyTh//jzfEwMGDOD7LyMjAzk5ObBardi0aRMmT56MDRs2YMiQIfD19cWyZctw8+ZNbNy4Effffz8nuHx9fTF//nw8+OCDWLVqFdatW8czONJ+iYiIQFlZGQ+zU1xcjNjYWI4EaAyFhYUIDg5GVVUVSkpKeBBS+paBW0SbaCko7m86F4j7lwhP9xJK/SsC6UDc0SV0B2QOxl1dBh2EJPMnz1NZnqnH8ci6BtocJPukg1vM4ieLzsTNlZ6ezlleOlhIcUdlCSFQ6HAaM4GYoVEUkVF/jY2NXNYsyneBW57x8jjFdbTbb/neACrn0draivPnz/MQIuK6ySJK4g4oGY/FcsvHhOYmv09RPGW3q34vK1euRFFREby9vfmhTtGBo6KiuFc6JfoBVH3Kiy++iBdeeAHnz59Hc3Mzpk6digsXLqCtrc2J8iwoKOD+G4DKHR0/fpyb7o4cORLbt2/Hxo0bUVxcjNraWjzyyCOw2Wx45ZVXEBAQgPnz52PTpk342c9+xpEFoCZlWrt2LdLS0tDZ2YnVq1ejqKgIeXl58PPzQ1NTE48yfP36dSQlJWHo0KFcqWy1WrFt2zZcuXKF+5BYLBZODWdlZeHChQs4duwYYmJicP36dUyYMAGnTp1CSEgI/va3v/FDtLOzE/fffz/Onj3LuR5fX1+0tbVh3759CAwMxIABA+Dn54e6ujokJyfjN7/5DQ4dOoTCwkI8+eSTSExMxNe+9jW88soruPfee3HPPSq9/LOf/Yx7rpeVlcFqtaKpqQmPPvooV2Rfu3aNm+ASEdDZ2cn3YWZmJnx8fPDII4+goKAAbW1tmDhxIurq6jg3QGNrbW1FSEgI/Pz8ePqD5ORk3HfffUhMTMQzzzyDXbt24amnnuLfhqwXJPElvSs6x0jPV1JSwr9lcb/SnhF1f+SvJIpfAZVo0sty6rYjIS/AmKeiKB3SvSGKolwzrHgXgqhEd0e01B0kQy9Fr66ZdsnrWjaz1VNAy88JSXR2dvLNRoeWFsIQc4nL7VH5tLQ0pKWl4dlnn3U6lCmUQkFBASoqKnhQPvGAB7oqx8X+SbEo5zQnhKg1Z7KE8vX15dQhIRxqX/5QbLZbWQrJq51EkGQJRpkVacyEyGmMNC5RMU/KdkVREBQUhKSkJAQEBGDu3LnckZLWqbS0FJGRkRxZNjY2wtfXFwkJCdi7dy+GDx+O5557joeEF8eRlZUFDw8P5OfnIzAwEFevXsWyZctw9uxZ5Ofn48KFC4iPj4enpyeqqqqwbt06VFRUwNfXFxcvXsTgwYORkJCAmpoaPPjgg2hqakJbWxvmz58PRVHg5+eHoqIi+Pj4ICwsDI2NjfjZz36G0NBQDBkyhIcyv379Ourq6tDc3IxPP/0UGzZswPvvv4+JEydi+PDhmD59OnJzc1FaWor4+Hi8+eab/GDdsGEDXn31VTz44INIS0vD9evXMXz4cFy6dAmDBg2Cj48P5s6di46ODqSmpsLPzw/Tp0/HtWvX8O6772Lz5s346KOPwBjD448/jldffRWTJk3isa6ampowbdo0FBcXcyu29HQ1UMWQIUN4LpZr167h6NGjmDFjBg9f4ufnx9P9dnR0YPbs2dyc9pFHHoHdrnqtBwUFYenSpWhsbMR7772HK1euYM6cOfD29uY5WoKCgnjq4ZUrV8Jut/OoArSPyMHQz8+viyENgezcS8QLEYWAc7QEESnI9ej7p9/iNyqmlZYcCd32RF8A4D0A/QGcAfAE5Uh3eCVGa1a8i8HdWFiAvv7DTH0zdY0QCR3MYjwbQg5nb/rgQIka6/Kzzz5Dv379AKgiGsYY//vZZ5856rVAUYDBgwdrJtZSFAXXrzdj0CA1HSm18fnnn6O1tRXe3t64ceMGPvvsM3z++ecceaycMgpLx1udcjSTzoHGKyISQNuDnSgqvSRbegjngw8+QF1dHZ599lkeMqWwsJDnuSbugw58yhBIaWNtNpsTJwaoSImCChKFJ3qNi7Jlca6iWE2U25Pup7a2FgcOHODZ5zw8PLhynaypXnrpJYwbNw7Nzc149NFHncZBIq9du3YhKioK7733Hk8R+8knn6ChoQG1tbWIi4tDamoqQkJCwBjD9OnTAahcmcViwa9//WuuG0hLS0NMTAx27tyJfv364amnnsKFCxfQ0NCAuLg4nmflxIkTPA95YWEhmpubuZ/Hrl27kJaWhmnTpmHp0qU4ceIERowYwcO0BwQE4MSJE4iIiMBrr72GuXPnIiwsDNnZ2Rg/fjzsdjtHjLRnRIup5ORk9OvXD8899xzKy8tx8eJFFBcXY+DAgfzQTkhIwNe//nVcvXoVo0ePxvHjx9GvXz+eM33UqFHYsmULhg4dyqP2Unyql156CfPnzwegZqikOFQHDhxATk4O1q5di8uXL2PcuHGYPn06Tpw4AeBW1sb8/Hxcv34dU6ZMAQC+74groL26d+9edHZ2YsWKFTx0DXmXi+mgCTIyMvj+AKBJQNH+JUJG3I/ityOCkTRDRDDi/91BIKcBrFcU5SxjbDWAFwF8W1GUTMbYGUVRpmhWvIvBDAKREQegfZjp/ZbbkevLZWQkY8QVUPkJEybgu+8XovjydYQOU80rhwwZgn79+uHyp5cx4r4RHHm0trbCarWi7nodRg1SbfdlBEJ7oO5aHfx9/dHa2govLy980vwJ7vW8FwMHDkRLRwvu9bwXgPqRDRw4EIUXP0XAkHvwP7OHcgpdnh9lQKM56a0dcVsU7kQLRMsSMdgbACcnQQqGePz4cQwaNMhp/UjRuWHDhi4HvxggUVEUREZGcr+KjIwMDBw4EEFBQfDz8+vy/mhuxAVlZmYiOjqac0D19fXYvHkzVq1ahdmzZ6O0tJSLogoLCzFv3jwAapa5q1evorm5mR9QJLeeN28eLBY1HtW2bdswdepUTJ06FfX19QgODkZhYSECAwO5B/vatWtRVFTEM/6dO3cOtbW1iIyMxPjx49HU1ITOzk58+umnmD9/Ple62+12vPLKK9iwYQMXqdntdiQmJmLLli2w29XkXIcPH8bmzZvx9NNP47HHHuO6GDJxbW5uxieffMIdBimEyLvvvss9uz/44AOcP38ekyZNQnR0NP7whz8gPDwcoaGhOH78OIYOHQq73Y5r165h+fLlKC4uRnh4OBhj3NiCTKrXrFkDLy8v+Pj4YOTIkdi9ezcGDBiAtWvXIisriyPDq1ev4syZMwgMDMTjjz/O99eJEyd47LGrV6+C0j+Eh4fzpFAnTpzAhx9+iK9+9asYMmQIfz/EUZIY18/Pz8lUnvaemOCJ9h0RDxQOvqKiAv7+/jyjoY+PT5cQOfI5QZesPNcTn4vfq4go5ACotL+7kxPdoijKWQBQFGU3gJUA3mWMfQ06CpUvO9DiAs4hweXnIqWpFQ5DvG+k/JYV9FrlZSdFskYCgBE+ndi9KQ7/eHIeFgYVYufjsTiy+Sv4bnwL1s1pRHxgARK+Nws7H4/F1+Mu4LvxLZg/Jg/R4WmIDk/DXzfOxLo5jZg/Jg+PzLwCz/6vIXpCGhK+NwsLgwrxwkovfPSDBdi9KQ4/evAejLz/b/i3RTfwt3+fjZmTszBm6D3w9VbDnsvIQ1wPsl7SczwkqknOwSG2QSGoyTRW9KCX9RvEsVEwRHH9LBYLV4CK47BYVNNeDw8P7mgFgPtHDBw4kIccJyRBCkdART5konn8+HEUFRXxvNe1tbXclDgqKoqntI2JiUFubi6OHDmCxsZGpKWlYceOHQgMDISXlxcPlV9YWIiysjK+LleuXMHcuXOxYMECVFdXcyMDRVFQXV3NQ79brVaeIrajowMrV66Ev78/rFYrhg4dimPHjgEAli9fDqvVivT0dOzYsQOAmngoMTERdXV12L17N27cuMEdEpOSkrB06VJMnz4dHh4eePLJJzFx4kTMnz+fmw9brVYeSdZisWDdunW4cuUK8vLysHDhQqSkpOD06dO4efMmRo0ahfj4eJw6dQrLly/HpEmTuGEGrbO/vz9GjBiBuro6tLS0oLGxEdu3b8eVK1fwl7/8BYsXL8aQIUMwcOBAREREwM/PD4GBgXxfnDhxAuPHj8fEiRNx5MgRACqxQWHWKRT+yZMnERUVhTVr1vCEZL/4xS94aB9PT0+sXr0aQ4YMQUdHB3JycpCTk8MJnwkTJnDjBXIoJSMYi8XCHQZpT/7lL3+BzWaDr68vwsPDMXfuXB6+hDhI6ofmIhrViDqR0tJSp2yEYogica8HBARg37593DAmOzsbp0+fdjL7pzG6Mpk3QiAdjpDpAAAHMlkI4BcAxhvUu2tB5La0DnVxwbQWTT7wAXSxXhIRkGw+q9Wv+EzsX2xLq7yiKGiwqUlkfH19sWHhBgDA0fNH8c/sf+JA3gGsm7MOJy+dxLYj27AxciPy6vOwYeEGTPabjHtvqBncnk9+HuvmrEPljUrs//f9eHrW07BYLBgzZgw8PDywNXsrAPUgXTZlGfLq8/DCvhfwZOyTYOweNN1s0pwfHeZiBjTRPJY2L3m0i3oJ0cuduLDS0lKsWrUKMTEx3DrLbrc7hWAgyzFaJy19DgCuLBXBbrdzCrCkpIQr9ckBLDY2Fr6+vtynxmaz8TKNjY08lHp4eDimTJnCPeDvu+8+/OIXv0BjYyPWrl2Lw4cP49q1a9zSxmKxYMOGDfDz88OMGTOwcOFC+Pr6YubMmVwhHxERwZ3LACA2NpbrsijjHEWtJV+T06dP4+DBg9i3bx+GDx+OkydPIj8/H+3t7fj73/+OPXv2wNfXF9XV1cjNzUVZWRnmzZuHESNGoLS0FMHBwejs7ERTUxPmzZuHgoICeHp6Ij09HTabDR999BHKy8u5wjs/Px/vv/8+li5disWLF+P48eOYPXs2VqxYwRHPpk2bMHHiRNx7770ICAhAYWEhLl68yNPOUvBDADw3CUXOra6uxhtvvIGGhgYcOHAASUlJiImJweLFi7Fy5UqsWbMGM2bMgIeHB0fKx48f51Fs58yZgyFDhvB4WidPnkRxcTGOHz+Op556Cv7+/vjKV76C1atX4/DhwwBUooGCgY4fPx5nzpxBTU0NoqKieOKqwMBAVFZW8j1NSITM0QsKCpCfnw8/Pz9kZmbilVde4cmf7HY1qyAhBQprYrFY4OnpiejoaFy5cgUhISE8zAnFhBMJF9JvitkI6YyQv0m7XY2RJgYpJX8QcexU1ii3EGCMQJ4HMFy8oShKHYD5AH5jUO+uBfID0TOLNbNgIrLIzs52CjoIdOVctDgYomCN+tdCVmIdxhjGDRnn9PyZfzyDBWMX4CuxX8GW1VtgtVqxJGQJ1s1Zh6XvLsWFOjUfNSWhsVqtyNmUg5OXTmLzrM2wWCzYvHsz/rj/jzh37hwSs9VopVvStyBuZBwWjF2AyX63FOI+A3ycxiTOj9ZXFDnRc+Imjhw5wmNSEbK12+14/fXXERAQwNcvKiqKU3jiulgsFqeYWOHh4U7WW4CzyS85WonckDj2qKgoDB48GOHh4aisrOwS7sRut3OP7/z8fBQWFmLo0KE4c+YMSktLeeTcsrIyvsa+vr5YsmQJD5Y4btw43geJPhITE7l4LiYmBvn5+Txo3+HDh9HY2Mg5H6IqMzMzUVBQgMWLF6OsrAz19fXIyclBZmYmrFYrNmzYAC8vL4SFhXFRF/lXfP3rX0dkZCTWrVuHkJAQTrVPmTIF2dnZqK+vx7Zt2xASEoLly5fDZrNh0aJFWLFiBfLy8jB16lQMHjwY8fHx2L17N5YuXYonnniC+0dcvHgRK1aswNSpU/H6669j8eLFiI2N5RZJp0+fxuDBg3H16lX4+/vjG9/4Bux2NatjYmIiKPX00qVLUVFRgYyMDK5/oyRSP/7xj7F48WJUVVU5iXdiY2Nx48YNdHZ2oqOjA97e3jxtbmBgIHbu3ImGhgYsWrQI999/P6KiojB37lyec/y1117DJ598ArvdjqCgILz//vsYNWoUBg0aBG9vb8ydOxdvvfUWXnnlFR52Zdy4cXxvkcMh7dHIyEiEh4cjJSUFISEhWLhwIdcJWiwWrruzWNQUzsSxK4rCQ9WQYyXNMSgoiHOnhHCJUxbPKTkjJ+15xhgXm4kEF4AuRK8rHe7/KTPemJgY5dixY11Ce8jyRLMKc1nhJFtQyIpfwNlCSjSvk60u9PQq1Mcj206hpaMFB3/wIAAgpToF04aq6Uu3pG/B5lmbneodPX8UbW1tGDRoEOID45FSnYL4wHgcPHcQSWeSsGzKMiwJWcLHcKjiEB4IfoCP60e7f4TQQaEYPXo0Xk5+GW2D2xCovApFUfB0tEcXb3V5TWVTXPrQSHwljpUoOdL3kCUZoFJVJF4S15s+4BUrVnB5tCgHpr9k7UTIg5ywSHYsr7ssFyZPYLLDz8nJ4foS+sDT09P5AVZZWYmbN29i8uTJnGsgnUZHRwfGjh3LFfNVVVU8tAS1HRgYiAsXLqC+vh6zZ89Gbm4uoqOjsXv3bgQEBMDT0xM3btxAVlYWoqKicO3aNQQFBaGqqoo7GpLX9KJFi7h+59y5cwgNDUVNTQ1PXgWo+q0pU6Zwk+q8vDykpqbiqaee4jGqKN9FXV0dampq8JWvfAVz587FwYMHeWiT8vJyrF+/HidPnoSfnx/GjRuHU6dO8YRNr776KoYPH46hQ4dizJgx+Otf/8pFiPX19SgrK8OaNWvw9ttv4xvf+AYuX76MmTNnYtKkSSgpKcHQoUO5vqK1tZXHvho3bhy2bNmCmJgY1NXVYdGiRTzPR0hICD7++GMoioL58+fD29sb06ZNQ25uLg8b0tjYiMTERHh4eGD9+vWoqKjAiRMn8Mgjj8BisXAdh91ux7lz5+Dp6YnAwEBUVVVxESftE9FZlYgPUcIgngOE9C5evMijRmudSaQrCQ8P56ltZ82axdszIjrF/Qyoxhj+/v5YtGiRrq7ElRWWric6YyxBUZQ1jLFCOOs8mPodK5E6Ve9qEM3UgK4LZRZ5AF3FT7I3p5x4SSwHqIchHWKkgNOqI/dht9vV6KODbj0/fUEV82xYuAFTRqj2Dd9L/B6+FvI1JJ1JwgvzXsAPPv4B3vnuO05tenp64ndf+x22Zm9FzqUcxPjHoLOzEzU1NTjqcRSenp44c/kMfr/693g582UcuHAAzz70rBouYl8TAGDChDlOliDi2tDmlzMcyvGsaJOLRgP0nJJG0eFNMmMReZB3PaAeKCJyFmW7oo8JfbgiJ6NFCIhhVwoLC6EoCh83edxbLBY+dpqr3W7HxIkTuc5DRJxNTU24cOECFEVBQEAAysrKeMZCmpOHhwf3CN+7dy/Ky8tx4cIFdHZ2YvTo0fD09OT1Nm7ciL1793K5/6RJk+Dv74/f/OY3WLx4MQ+iWFZWhqFDh3LrLAqWSHJ8xhjy8vIwfPhwHkp+9uzZsFhU5f3QoUPxq1/9ClarFbm5uRg/fjwYY7DZbKiursa0adMQFRWFv/71rwgODsbQoUMxfPhw7N69G6WlpRg1ahQiIyMxf/58FBQU8FhZn3/+OQYOHMitkugd5DkCM86ZM4cjr3vvvRdz587FhQsXYLVaUVhYiIULF3KjhRkzZsDT0xOjRo1CZmYm1q1b5+RDQVS4oig4c+YMzp07h87OTly5coU79BUWFnKDC39/fy4qpm+XEqQNHTqUpxYgz3AAKC0txfLly1FYWMiNOugZzU3kUsjrnSIxa50zxLGSJ7vIbWtFaRCJJy2fJvK50gI9CYgMRiKsHzj+LgfwFeGi3186YIw5yfgAZ71DT0FGEjI7KOo1RBk9HUh6ehO5D1KC+nr7Ykv6FgDAc3Ofw4aFapIf4jDeXP6muikjFuPFYy/i1YdfxamrpwAAZy6fAQDEB8bDYrHgsbDH8GH6h6oy0aE/WTB2Aafyjp4/iqmjp+IPi//Ac5r7DPBBS3uLU6wpPZGdPB/RykNmr8V3Q7Jh0pGMGjWK/6bnlKMDuMURkHUW5ScneXRraysfAzkM5ufn8w/Nbrd3iUkmGi5Qillx7AUFBWhsbOT+NiTWzMzMRHJyMoKCgnhY+C1btqC+vh5Xr17F6tWrERMTg8GDB6O5uZmLssiSbNw4VUTp5+eHzZs3Y/Xq1Rg/fjw6OjowcOBATJkyBaGhoXz/XLp0CR0dHaiqquJ5QFasWAE/Pz+cO3cOu3btQnV1NX75y18iJycHJ06cwL59+3Dx4kXu/Hfu3Dn84x//QGZmJmpqanDmzBm0tLSgqKgIc+fO5V7rBQUFmDRpEgYNGoTKykqcPHkSFy5cwPnz5/mhOHDgQAQGBiIxMZHrRiZMmIC2tjY0NTVh1qxZaGpqgre3N6ZOnYrg4GAkJibyvO/V1dVYtGgRxo8fz3Ud7e3tePTRR7FgwQL4+fkhKSkJgwYNgqenJ7KyspCWlobq6moUFBSgtLQUQ4cORVpaGlJSUrB79254enqis7MTx44d4xEfgoKC4OXlheXLl6O0tJSLEklctHLlSh5pWdzHw4YNw/vvv+/kXU76MYp4YLFY0NraiszMTO6xLiqpaZ97eHhwk2W9+FN2uxpGh8x6qb4ojpX/14o7R+eLr68v/wb0dMLUrx4YJZS67Phbo3XptniXg9ah7krvQeBOGS0diMh90G8RkWjV0YN77lEV2JtnbYbdbkdKdQpOXDyBlOoUpFSn8LHEjYzDQxMewv889D/Yc2YP4kbGAQA2z9qMg+cOIqU6BfuL92PnyZ0Y7TMaHh4eWDp5KdeH/DP7n7jRegNJZ5LQ1taGH+3+ETo6OhAfGI9P2xrR77N+/KAVD2GahxxWWtaP0OFMIkXixCgQIHEWpMCur693UgBaLLcsoQoKCtDU1ATGGFdS0wfiYMN5YiZSzMfExHBZcUZGBrZt28YDEmrpyaKiopCbm8sRTWFhIa5evYpdu3ZxZEtm0nQonTt3jlN6s2fPhp+fH1atWsWp+oiICAwePBjz589HSUkJjh8/jjNnzmDv3r0coRQWFuLw4cNYvnw5Ll++zANFAsC5c+dw9uxZLpbp7Ozksa98fHwQHR2N6GjVbevatWsIDQ3FmDFj4OnpicGDB+PkyZOIjIzEiRMn4OfnB29vbzz66KM4d+4c9884efIkLl26hI0bN8JqVZN8lZWVISYmBqtXr+Z1BgwYgPT0dL5ueXl5OHnyJETzeYr7tHjxYqxevRrx8fGIiorCoEGDeBa/1tZWtLW14cyZM0hJSUFycjICAgLwzDPPICsrC1lZWbh27RqGDBmCqVOnYuLEiaipqUFbWxtGjRqF9vZ2FBUVYdy4cVi5ciWuXbuGgIAATJw4EU1NTZg7dy4effRR+Pj4wMvLC21tbbBYLOjo6EB2djZSUlK4v1BAQECXPDwdHR1IT0/Ht771LTQ3NwNQ0xsHBASgoqKCR4KIiYnh/jBtbW1obW1FSUkJf6+0h2NjYzFkyBCsWrWKfycEJNYlgxEiisRvCHDOUigTpAC4tRUBEWdaqRnEvh1Eb/diYTHGVjHGyhljzYyx64yxFsbYdVf1egqMsaWMsTLGWAVj7HmN54wx9gfH8wLGmGnHRj3RkxGI2F3vudmYVVrmrEZ1tJTtNpsNg/sPxsFzB/HmwTfR0dGBM5fPID4wHvGB8YgbGYc3D76Jt5Lf4nqGDQs38AP+vw7/F95IewNtbW2oqalBk1cTEtYlAADXfWxZvQX+/v64cuUKFkcshoeHB0IHqSE0UqpTcJ+XLz7r95kTMpYzHIoIm5C1GB1YvE+iqICAALz++uvcy5zEVyRDFll8i0W19CIz4KtXr/IIthTmnPQhYqZBWTEPABERERgwYADPwUEsf15eHo+u2tjYiMOHD/NIuDQG0jeQaEEkDLy8vLBs2TJUVVVxrqmwsNDJgKC5uRmpqakYPnw4PD09sW7dOqxZswYWixqzrLOzk/sXjBgxAtOnT+dcyOjRo+Ht7Y24uDgMGjQIEydO5ImCKioqUFBQAKvVytvs378/srKy0NDQgMrKSh5JNiAgAPfffz/Gjx+PgQMH4oEHHsCsWbPg5+eHq1evor6+HtXV1aioqMAnn3yCwMBAFBYW4tSpU0hMTMS7776LIUOG4OjRozh69CjGjBmD+Ph4rF69GnV1dSgoKAAATJw4ESEhIbDZ1Dzu9fX1qK2tBWMM06ZNw6hRo3D8+HHU1tbi8OHDYIwhMTERGRkZOHHiBFpaWnDx4kX84Q9/wNChQzFhwgTU1dVh7ty5qK6uRmVlJfr374/Ro0fj/fffh91ux8qVK+Ht7Y0LFy5g2bJl3Jx55syZCA0NRWpqKs+/MmrUKGRlZfGIyZSoTHzfc+fOxdq1axEcHIzw8HBYLGqWx8rKSk4M0XcXEREBT09P1NbWAgDGjRuH7Oxs7Ny5k+9xAFwktXPnTm7eS/vPYrE45ewgkahIvNF3RrHrRBDj0tF+F4kzvTNQQFDdi4XFGKsA8BVFUUoMC/YiMMb6ATgH4AEAdQBOA/imoijFQpllAJ4EsAzAdACvKooy3ajdnuYD0VOwk5KYFKB6jnBieUA7nICWMksr8f2aN9PVMA4LruPcuXPYuHhjF5bTbrfj5KWTvM5s/9l47O3HEO0fjey6bMSOisWTDz0Jm82GF4+9iF888AtsfHcj3vrOW9heul1Nezo4FMkFyRgzZgyem/scbDYbTl09hYSzCaiq+ApudLTi5DPfcOqX5qa1XnRPdLICuoZnEZXdgHZIBlnPQu2QhcmWLVuwceNGbtFFeRQoD0dnZyePfCpTbwSnT5/G6NGjkZycjJEjR2Lw4MGcSiaPY/GDFN+nr68vUlNTMWvWLNhsNgQEBKCoqIg73JF4qrGxEQkJCTxvuc1m417o5BDp4eEBxhhCQkLw05/+FC+99BKsVisyMzNx+PBhHkdJjACwZ88eLF++nMvvqZ2srCy0trZi0KBBCA8PR0tLC+rr6zFx4kTMmTMH9fX1ePHFF7F582b4+vri1KlTaG1txalTpxAdHY39+/fjoYcewsqVK3H8+HEAwCeffIL6+nqsXr0an376Kf70pz9h1apVmDNnDnJycnjIkLi4OMyfPx87d+6Eh4cHfHx8YLPZMGLECB7cMjMzE1VVVQgJCYHVauXpd1999VWsXr0aI0eOxJgxY/DTn/4UTz/9NIqLi3mmv+bmZvTv35+LOhcvXoympiZMnDgRALhOihTeEyZMQHZ2NvLy8rB27VqUlZWhvLwc8+fP5+l1KX+KnoJb3MN0mIsED+0tu10NGOrl5YXw8HDk5ubC09MTERERPHxOSUkJxo0bx9+9uBfJKZf2mta5Yber0StIrCnq47ojpqd63coH4oBP7iTycMA0ABWOdLp2ALsAfFUq81UAOxQVMgH4MMZGuGrYjBhKr5yRXkK0pdbiGGQQzXllLkguL9tzA7dCjXh6eiIkJARbs7cipToFB88dxObdm/Fa0mt49h/PorOzE+fOnUNZWRksFgsenvswqgZU4e3H3oZHPw9MfXMqHn7vYbww7wXkNefhW/Hfwoa9GzBu4DjU1NTg3eR3MdoyGpP9JmNv/l78ZP9PEDcyDn9Y/Adcar6MkfeOdJK50nz0ODaR4xCfiRQ/AI48ZL8aPVmvyPHQpo+Li0N1dTW3rtmzZw+ampoAqP4azc3NSEhIQE5ODgICArh/CbH6drsdnZ2duHDhAlatWoWFCxdyroXMfGUdCs3Rz88P27ZtAwBs374dfn5+PCpuQ0MDtm7dyinQkpISjBkzBlevXuWWWmfOnOGK3JqaGgQGBvIshGvXruWH2IwZM/DUU08BALZs2cL3lNVqxfjx42Gz2fD0008jMTERx44dQ2BgIPr374/r169z5fSiRYvg4eHBQ6v4+vriu9/9LtLS0vCXv/wFVVVVmD9/PhYtWoRFixYhKiqKK6UrKyvR3NzMU+hu2bIF27dv5yIyu92OwMBALFiwAKNGjeKOoAMGDIDVauXcEaD6XYSEhPBQI2PHjkVnZyeGDBmCs2fPYsqUKbDZbGhubsaVK1fwwgsvoLi4GIsXL4bFYuGOhGSau2rVKgwbNgyVlZU8cOKePXuQmZnJo9cSx7h27Vr4+fkhJiYGa9euha+vLyoqKhAdHY3169dj4cKFXOks5ryn/48dO4aEhAQcP34caWlpTimTae9arVZ4e3vz9Mrkt0KcgNVqBWOMpzOm/OfiOZKTk8Mdc0Xxlbj3Zs6c6eR/Rff1QO+8ciV1AYytsFY5/s1mjP0VwF4A7fRcUZQ9uq32HEYCuCD8roPKZbgqMxLAZbEQY+wJAE8AwOjRo3UpfRGMOAJ6Lt/X4ya0fou6Adn6Sy5PohDResJiURXvldcqETfyYQC37MAXjFWzz832n40/H/0z8q/kIyooCg8EP4CkkiT8Ne2v+Fb8t7jYZd2odRg/fjw+zPwQ/7bo33AKp/DdGd/F/pz9WBy5GOVe5QCAtrY2vHLoFex5fA9nzScMn4DyxnLk5Xk4WZXQPIwSZGmtLVHN4gEpt0ncmGj4IK6t3X7Ljn769OkoKSmB3a5afS1fvhxFRUXchPbSpUtYuXIlrFarEwcixhQSc5gA4NZmZGpLogvqlxwPL1y4wCPqDh8+nIvNMjMzMXjwYDz22GNIS0sDoEYbIMV5Soqqv6IsgVarFWPGjMHu3bsxfvx4jjRoDuTrAABxcXFobGzkVn0RERE4fvw4dzKLjY2Fn58fHn74YScdUmFhIUJDQzFz5kwej+vy5ct47rnncPjwYc4J+Pj4cPHJjBkzYLFYEBYWpu6jdevw3//93xg/fjymTp2K2bNno7GxEe+88w7y8vLw4osvYv369di9ezd8fX2xdOlSvPXWWwgICMDp06fRv39/bNq0CefOncPkyZMxduxYnD9/nmczvHHjBoYPH45JkyYhKSmJh4Px9/eHxWLBkSNHuIn3+PHjkZSUhM7OTkyfPp0beZD4hvw1SkpKMHr0aJw9exY1NTVYs2YNcnNzMWPGDM51EFdHe1iMSG2327m+a+DAgVi5ciUqKysRFRXFxZn0LRPIllNypAl6XlhYiIqKCqxZs8bpmRZCEIN6irpIM5yHzPnL54+rs9IoFtZ23VqqGe/jBs97BIyxbwBYoijKBsfvbwOYpijKk0KZ/QBeVBTlhOP3EQDPKoqSo9dubGysQqHJXS2skbhK3BRmEIz4MmXfBS1xl1Z9UYRjt9vx7e2qtdF341tQWVmJa57XEOMfg+TCZPzPQ//D9QZL3l2C1SNXo82nDdYWK2603sAF+wX069cPP5j2A7zwzxew9Ztb8W9//jd8ft/neOdr78BqteKxtx/D+iXrMS9gHv589M94fMHjOFx5GIvGLcLyN5erzlNXVO/39x5zZrXJMmr8+PHcc1ycsxxGnuZIKV/J5FRrXeTIvCLlRaaVotOVKDKzWCy8Pt0Tw6DY7XYnXxL6IOX4QAT0Tghx5Obm8o9e7L+xsREXLlxAeHg4CgoKeNj4wMBAHv6bbPsBICsrC97e3vxArK+vx49+9COMHDkSmzdvRl1dHS5dugSLxcKj7VqtVp7udeLEiU7KU39/fyQnJ6O6uhqDBg3CzZs3sXnzZlRWVuL69evo6OiAl5cXZs6cycONnzt3DpMmTcKePXuwePFiBAcHw2az8TlSDhwK02K32/GnP/0Jn3zyCRYsWACLxYK//vWvePDBB+Hh4YFBgwbxsPSAmmK4uroa+/btw7JlyzBt2jTU1NSgrKwMy5cvx+HDhzF06FCUl5ejs7MTly9fxpo1a/Diiy9i5syZ2LhxI+x2O0/WlZKSguDgYCQlJWHAgAFYvXo17HbVKXXt2rW4du0aF/XZ7XZs3boVjz32GHbs2IEhQ4Zg4sSJmDhxIl5//XXu3EdEGyV5KykpwZo1a5CZmYni4mJ4eHhg1apVCAgIcIpYbbfbefh+2gekj5IJRz0RrSid0HMJEL8LKiu3pxf9Wu9c0Tsb3fYDURTlMb1ndwDqAIwWfo8CcKkbZbqA1kGuV07vvmiCqtWG3m8Ro4ubU0YismxfrpeXlwdFUdDc3gxPz/5YO30tNr67Effa7sWCsAV4ft/z+P3q3+Otgrdw8DsH8fy+5/GbRWrwgNdyX8MYjEHhxUJ89x/fxffmfA8AkNOWg3n3zkP069H4t9n/hvVL1nOv38cXPI4X9r2AQK9AHPM8hvjJ8fj5op9jyasfc290efwUmVceuxjTR05k5enpyeW+elye6CNit9t5etA1a9bA09PTKRijyIrThyQGVpR9UaxWNUucxWLBjRs3dMcpig/sdju3HJs0aRKam5tRWFgIu93OuZekpCT4+/tz/YvFoio6z507x+McdXZ28kPH29vbaR38/PzwzW9+E1FRUaivr+fy/cmTJ3OxU319PZKSkuDj44Pg4GA0NTVh0qRJPL1uaGgo7r//fpw5c4Zn3rNYLPjggw9gs9k4ZZ2Xl4e2tjaEhIRg3759uHr1Kv77v/8bq1ev5smV1qxZA7vdjtraWrzwwgsICwvDvffey5XjjDHExanWfh4eHujs7MT+/ftRXFyMsWPH4tq1a1i5ciWGDx+Ouro61NXV4dq1a2hra4OXlxfKy8vh7+/PRbdr167lVm6PPvooNyeura3FokWLYLOpKXxv3LiBmzdvco6psbERPj4+aG5uRkhICDo6Ovg7GD58OAICAvDss8/ydS4sLHSKBi1+65R/BQDPD3Lz5k3ugErBMVtbW1FTU4MxY8ZwQklMESAbldAZQoYltM/ENA40BlFcJe9F+l/2MZFDI4n7XetcMTgTu22FFcQY+ydj7Cpj7Apj7CPGWKCrej2E0wDGM8YCGWMWAGsB7JPK7AOwzmGNNQNAM5keG4H48etRua5APhjdAfHlEYUghjbRkz/KL50xxg/v7aXbsX7Jenx/2ffh5eWFi60XcajiEA9P8psVv8Gfj/4Z21O347PPP8OkIZPQXt+OBcMWoL6+Hv956D+R9p00+Pj44AH/B5B/Qc13HjcyjotyXlzxIlKvpmJ/zn5YW1RqRVE+h6IoTvoI4hJEsZy4wSlYIZnuUkY/QGXvReWg/C5E3w9q/9FHH8XKlSvh6+vrFPWXxkEyZPFd0XqLH2SeI8RKYmIi0tLSUFlZ6bRXZP0LWcjs3r0bALhJ7+nTpzFy5Ein/OTBwcEYPHgw5zREUQUdsN7e3hg9ejQsllt+QXa7mneisbERly9fxvnz5zFhwgT4+flh06ZNGD16NM9P8frrr6OzsxMLFy7EqFGjeGjwmpoa2Gw2eHt7Y8SIEdiwYQOWLFnCjRTi4+O5BRmg5js/e/Ysdu3aBR8fHwwdOhSLFi1CR0cHDh48yA0IXnrpJeTl5eHBBx9EVFQUQkND4e3tjfPnz+Ovf/0rGhsbER8fzzMSBgYGYtSoUairq+OBHLdu3YoVK1bAx8cHw4cPx3333cetpby9vdHW1oYrV64AAJqbm+Hv749r167h7NmzKCgogI+PD9566y289957GDJkCE6ePImaGtXD4ODBg/j1r38NDw8PBAYGIiUlBRMnTuROjxRQk0SlpaWl3Bw3ISGBx6sCVPPuvXv3ckfP9evXY/369ZgxYwZPI0yRlQcPHow1a9Zg4cKFnMsWdRyiL4mIHChEDukGZb0nfQ+ifk7WBYpnksg5U5+uCGYX55mmqMqMEv0DAAkARgDwB/A3qErt2waKonQC+A8ABwGUAEhwhJX/HmPse45iSQCqAFQAeBvAJhPtOvkgyCAeDmZAZgfdBTpE6SWLm8Pohcr3Ns/ajIcmPARA1YFsmLUBv0n9DWw2G7Yd2YaTl07i8QWP41uzvoXMc5mYFzAPW7+5Fdc8r+GbM76JIK8gvHLqFSycsBCThkzCm8vfxP6c/Xh136tYs2MNDp47iFNXT2H48OF46WsvobqtGv+b/r9oa7sJwDm/uSgXFoEo+XHjxnFHTvL7kP1gqE0RGVD8rPr6ei7Dpv4SExPR2NiI/Px8rqQlbkWUC9tsNmRkZGDnzp3cV0FU0pOCetGiRVxEI7L1ZM4ZHBzMFed0MFitVsybNw/PPvssgoOD8eijjyI0NBSJiYmYNGkSZs6cyZWk9A69vb0REREBb29vjBw5Etu2bUNjYyN3prRY1KCWgEoBiz4sdXV1XBnr6+uLZ599Fk888QRGjBiBsLAwJCcn81hZtbW1iIiIQHNzM3bs2IH9+/fj2WefRXFxMbZv385TtZaWlmLixIlYtGgRioqKePiU/Px8lJaW4pNPPuEmpbNmzYKnpydPwjRnzhwsXLgQq1ev5vOura3lvguk0xkyZAg8PT1x+PBhXLhwAXa7HStWrMCNGzewdOlSXLx4EaGhoZg0aRKampowf/58Hmjy/Pnz8PDwwJgxY7gj4saNGzFlyhQsXrwYcXFxGDduHCZPnozq6mpcu3YNixYtQkBAAM/BcePGDZ7oS4wFFRYWhkuXLsHT0xP+/v5cgW232xEREcHTxRLhUFtby4Nfzpo1CzExMaitrUVYWBjn7gA4nTe090SCkcpRFF9S7ItxrOx2O/8e5O9F/vbEb4bCrogm8/I3qUWkunOWmTHjzZLNYxljmYqizNCrc7cC6UAAfRGVrFQC9PUhBKJyV0YqZjgU8ZCisbmq+/Bb6mEWHZ6GH874IQDgreS30NnZqcpsL+VgxpgZiBsZh6Pnj+LcuXOw3bDhVO0ptA9sx/xh87EhfgOe3/c86lrr8ObyN/H33L/j76V/x9LRS9GvXz9kXM/AxriNAMAR1G/TfovJfpOxJGQJNyV+51sRTuI4vc0qi+202Gb5Hq2t3a5aRJEcXbR2S0tLw9y5c53iVMncj+yRSx+g1pqTbooOazJi2LVrF7fE6ejocMoLL/YlUq5NTU3w8fHh4izSu9BBVFhYyMOpjB07FgEBAfj444+5GEjUqwDgZp6EtOQ1TktL47GX7HbVSor8FHbt2sVDZVBWvPr6ehQXF2PQoEEICwtDWVkZj9FltVqxe/duNDU1YdWqVbDb7WhtbeWpekNDQ5Gbm4uCggL8x3/8B3d2KyoqwtixYxEZGYlPP/0U/fv3R2dnJ44cOQKbzcaV8z4+PkhLS+MhaDo6OniolsmTJ2PSpEn8Pf3lL39BWFgYxo4dy7mnc+fOobi4GCEhIYiLi8Of//xneHh4YMOGDWhsbERKSgo6Ozu5qfXx48cxZ84c2O1qrveUlBTMmDEDCxYs4CIvQFVgV1ZWYuXKlaiqqoLdbufGEZmZmV3SJMv7W+/saGxsdMoHIurQSIRIYi+xDulOyPRcTDAn6jFkIkzc83quBXp6EZl47YkZ71HG2POMsbGMsTGMsWcB7GeM+TLGtJNA3OVgZJqmF37EFVaWEbHMXuqB+Ew81FxxQoqiqKKORgt+tPtHOHr+KB6b/xj69euH2f6z4dPmg7iRcbBYLJjtPxufDvgU/S398a34b2HW4Fk4WXkSjY2N+OSTT3BP0z1Yu3MtRo8ejY1xG3Gm/gyONx7HxriNmBcwDzsO7eAH3r037sWCsQvw69Rfo7m9GYqidNmk4qEK3PI+F8VBVE7eqFr3YmNjERsbi+joaBQXF3dBDl5eXvxDo7Ah6enpHPHIegzZjp9yIZAYa+fOndwTXuQYyLwzNjbWCXmcPn0aGRkZXOxB745CjlDMs/T0dCQkJKC2tha7du3C8ePHuYdyXl4ed6o7dOgQduzYgaysLERHR3Nz0MLCQly4cAF79+5FTk6Ok9iQroqKCqSlpSE3Nxd79+5FQ0MDD7pHCl+LRXVuJB8SAGhoaEBVVRVGjhyJiooKnD9/HlarFUOGDIGiKHjttdfw/vvvY9iwYdi9ezeam5tRVlaGsWPHcm6FQpYsW7YM69evB2MMFy5cwK5du1BeXo7Q0FA899xzaGpqwmRHLKaf//znmDZtGjw9PXH69GksXryYh/VITU3lOpqIiAiEhITg8OHDCAgIQHV1NU6dOoWysjIUFxfzGGOLFy8GAOzbtw8FBQWYP38+SktLkZKSgmPHjvEDc86cOZgzZw6qq6uxY8cOHDlyBLt27cLevXsRExODRx99FH5+foiMjERnZyePCuDt7Y3ly5c7BeSkvQN0tS4UCZiKigqnyMFUls4Oi8XixL3T+6T3HxUVBQ8PZ7W12I58TtFZJiIP+SySCT1RrGYGzHAg1QaPFUVRgkz39gUDORKa5QwIRA5Br54e1Q3oK9vp8BFN8Ai0zOvEQ2/lH1Lh7e0NPx81ouaP5/+YPztxUc2s5unpiWlDp+Gxtx/D1NFTcb7tPH7+wM8R/3Y8ApQA2Cw2zB86H6tjVuMniT/B1NFTcfTKUbzztXewr3AfnnjgCRyrPYaZfjOdPpjfZ/4eZ8+exWeeT6Jfv37cCktcJ5qzzHVorZWo05DXh6grMp8Vo94SUMTU+Ph4btVE8mY565psdXL69GlO1dFYduzYgQEDBmDNmjW8HOWe1qLkGhsbkZubi/Pnz2Pt2rWw29Wgdzdu3ODtWiwWToEOHDgQw4YNw+HDh7Fo0SIcPnwY9913Hy5fvox169bh+PHj6OzsxJIlSwCo8b1CQ0N5WI8nn3ySZ0UksZqHhwf3vi8rK0NERATncEJDQ5GUlITg4GDuZyJyKpmZmUhLS8OGDRuQmprKw6QHBQVh69atnOsjq6J9+/bxlLWenp5obW3FtGnTUFRUhIaGBnz66adYs2YNsrKyMGXKFJw8eZJT1aK+oKysDBkZGbBarXjkkUf4+zp+/DhaW1vx4YcfYtKkSZg/fz7PqFhaWorVq1fj1KlT2Lt3L/z8/DBo0CBYrVbExcVh165deOqpp3hwx3nz5sFms3HOzWKx8EjDgGrxRrk3RDNs2ck1MzMTABAdHe2U66Ozs5M7BpIlnRwMUeQE9Pa5zLHQfqW9pxWoVAatc0rmsMVgpXqgxYW4bYVFoCjK7VaY33FwB3lQeT1xCz3XEl3RPSNdhmzOSqBnrUHtkjy9fWA7Zoy5JU08cfEE4gPj+Ri2pG/B+iXr8UDwA2hsbMSHmR9iMBuM4UOH44+L/ogp707BntI9YIyh8UIj3lv7Hn6f8XvkNubiswOfIbMmE/uHqT4hR84eQednnZhw3wS88e038M33suDTz0dzjETFaCEP8RAXTX5lnwuRuhIzC4r1GxsbsWPHDqxbtw51dXW4ceOGZv5y6ls2bRTXnyi+devW8f8JebW1tSE/P59HBhb3QEVFBWbMmMEP2tLSUoSFhfH4V5QzmzyZ7XY7ysrK4O/vj4sXL2LlypUoKyvjFlU+Pj486GN+fj5aW1uRmJiIxYsX8zwRNF4PDw8+Juq7s7MTubm56OjoQFlZGTo7OzFixAh0dHRwrpac5Hx9fbFo0SKuRB8/fjzfW1VVVYiPj8f48eORmJiIwsJCXL9+HevWrUNqaipCQ0Ph4aH6AB04cAATJ07Ejh078PzzauShY8eOYcyYMbh8+TISEhJ4iBQ6hEeOHImGhgaMHTsWNpuNW5ENHjwYs2fPRnV1NUJCQhAWFobExESMHDmSh7232+1obm7GuHHjsHr1ah7CxMfHBydPnkRmZiYee+wxPlfy2zl+/DiGDRuGgoICMMbg4eHBfVpiY2ORnZ2NiooKJ49zq9WKSZMmITExETNmzOBmvWSOTXuzoaGBIyc5ZQARPloHuPw/iSI9PT0xc+ZMLkJ1dW7J3yHg7CMCdE1nrdeOWQOh/1P5QHojlAlw60VR+BJxQ2jpUNztQ6uefJ90IBsXt/HouySyOnjuIM6dO4fWQa2YOnoq4gPjYbPZ8N13vovffe13eD/9fSTVJOFv3/kbHt/zOPw8/RA3Pg4N1xrQ3t6OzOuZmDZ+Gvpb+uP70d8HAOw4vgPr5qzDsdpjPFbWklc/hs1uw8F/f9BQ9yHfk9dItEwhDpEx5iQmEj8K8aMkJEJ6BSpPMbfovmjHLyMA8X/Sf8hIjp5TjgfRV0WkFslLWDYnzs/Px/Dhw+Hn54ddu3Zh5MiRTv4XNpsNL730EjcrTUhIcMqcWF9fzxMyeXh4YNasWbBYVPNdCs1htVqRlpaGkJAQVFdXc0dDQA1OWF5eDqtVTWplt9v5YQ4Aubm5OHz4MNcfkDK3sbERu3fvhtWqhm8fNmwYp7Y3bVLtVihMe3JyMhd7RUdHIzk5GXV1dZg3bx6OHDmCAQMGYOLEiVyMU1BQgGHDhuHAgQO4efMmBg8ejJSUFERGRuLJJ9UQO1VVVYiNjUV9fT3Onj2LOXPm8DUpLi7GpUuX4OPjg1GjRmHLli2YO3cuvL29kZWVhZs3b2LTpk2cozhy5AgOHTqEBx54AHPmzAGALqkUaD+Wlpby0EQkHvLz8+O5QER/Iqqzc+dOLFu2DPX19RzJ0PunnPfE+Wnpr8QzZOfOnQgICMCiRYsAAOnp6V0yDuqBEQdC4O7Z1BMdyP9Z0NJdiNYOFL5EfFmyz4DZdum+nt7E1QuPGxmH15Jeg91u52HYJ/tN5mHbrVYr3vj2G0g8m4gnlz+JzUs3I+F0Anau3Ynx947Hu6ffxdcmfw3bS7ZjmMcweDV54fvR38fJSydhtaqBGI/VHuPpOwE1nLu3hze3tNHjsuQ5ytyVeKCTvoNkvbTWYi4Fuk+Htej0Rb8p6CId3qGhoTwfCK2tzWZzMonMyMjgMnfRdJfSkgLAqlWreDh7GgfpNyinRmRkJA85T7qf4cOHY/v27bDZbFi7di2mTJmC2tpadHZ28oMGAIqKigDciiJMfVBY+OjoaG6l1djYiL1796K2thYffPAB6uvrUVpaiqSkJERERGDu3LmYM2eOk3J6xYoV8PT05Hk/Xn/9dezYsQOTJk3CpEmTcOXKFQQEBPC0vkVFRWhqakJTUxP+3//7f1i1ahVKSkq4vqi0tBRNTU08e97ixYtRWlqKrKwsVFRUID09HW+88QZ3uouJiUFCQgJfN4p0C6jJrJ577jnui0GIkRD3xx9/jJSUFNjtqhXU+++/j87OTo48iaOcM2cOFixYgA0bNiApKQkJCQlcfzFv3jxMmTKFH+AkOhajRlN4k/DwcG6lFRwcjJSUFL7PReRB+zw8PBx+fn6c0CGT9YEDB/L3WFpayvVX4h4S9RdWqxVr1qyBj48Pf15UVMTn4QpkjkYkwuS+qH0R9M4nLfg/j0C0Dmu6Lx/mMmsni67ouZ7Fg9yuDKLox5UCnjhHElcllSRhe+l2Xqe6rRqz/Wdj86zNSKlWN35ecx7WzVG9lj09PXH48mFYLBYMGDAAC6csROXnlRjvNx6//sqv8VHFR3j4vYeRmJ2Ig+cOAgAO5B3AZ599hqPnj/KQ8b7evjyTn6uNSHMXOQVxnoQcyIxRLE9xqmh9KdYPrVVjY6OTSbToX0NRUmfMmMGpTTL7vX79Ol/7iIgIAKpcXHwnsbGxGDduHPbt2+ck9iJKNCcnh+dEJ5EHic4oiF5qaipPdwsAlZWVCAsLw/Tp09HR0QGr1Yqf/vSnPIxGbGwsR3AAMHbsWJSVlXEnRYrnNHToUNTX13OZ/+rVq524LLvdjkuXLmHatGl8PSiGGnnCU3Kr5ORkHjuqoaEBu3fvRn19PQYMGIDRo0ejvLwc27ZtQ3t7OyZNmoTz589z3URmZiZfN5rXjBkz8MILL8DHxwcrV65EfX29U94UEqdQ3C4/Pz8ebt5iUUOr5+bmorGxEUFBQZg1axZqa2tx8OBBvPXWW/xgpjS+Tz75JC5cUKMbzZw5EwEBAVizZg3n5IjzkU2MyaQ7ICCAG2CQ/qioqIhzpWLSMfJfEj3GReuogoICjmREvV1ERIRTkEQikGSJBRlr0H565JFHnEzLzRzyMsdB346RkZDB+dQ9R0IAYIyNZIzNYozNpctMvbsdiOokKlQEvcPcjBzS1XMxuYtefdm+Wx63zWbDp22q1c/m3ZtRW1uL1CdSYbFY8JP9P8F/Lv1P/GT/T3Dw3EG0tbXhu+98F8H9grHjuGpRdSDvABYMWwCbzYZ+/fphesB0jLtnHO7tuFfd6CMjsGneJiyPXY7Z/rNx4uIJLI9djjafNs7hKIqCT9sauWxXDOMujp0suCwWi1Mod5qnuC506IncnLjp6Tn9b7GogQu3bt3KdRyifw0ALkemj5GSio0bN447DALqR7tixQpcvHixy5rX1tZyT2IR2U2dOhUxMTHw8vLiCIienT59GgUFBbBYLFi+fDnXQxASEnUmpEwGVHNWoropT8WMGTN46PGZM2fCy8sLoaGhGDFiBNauXcufUa6MI0eO8LhYPj4+2L9/P9atW4fq6mouu586dSrGjh2L+vp6vPPOO1i2bBl8fX15tkM/Pz/k5+cjMDAQ999/P6ZMmYLo6Gjcf//9iI6ORmtrKywWNaaav78/jh07xmN5Edy4cQOzZ8+G1WqFr68vtm3bhiFDhnDOhkTB5eXl3HKO8tZHRESgqKgIW7ZsQXFxMby8vLB69WqMGDECGzduRFxcHNra2nD48GHU19fjwoULuH79OgoKCrjPD3FS5H9BOVoorwygcn1/+tOfsHfvXh4l2WKxYOTIkTxEjWjRR0QFhdTR4grI8m7Xrl1OuTvIHwhw5oCNuHe7XdWziaJzrTNLPiNkS06R8BXvyUSxjMwc/dxiuwUwY4X1WwAPAygG8Nmt9VFWGFa8C0HWgYiyTFdcAx1oPdVt0AYQ/Qjkcnl5eQgODuZKXK2xieHcF4xdgP9N/188Petp3seJiye4TiSlOgUTvCbgB3/9AV59+FUUtxUjbmQc6uvr8cw/nsE3538TnZ2d+Pe//TsyNmSg8nNVTOXp6YkdOTtwpvIMfv2VX+OB4Afwo90/whjLGFS3VSO/dgGu2q8i95l1mpuT1m3Xrl08N7Qo4iM9A+kraL6UOZCUvFrrI5oanj59GtevX8ecOXM0Ldfk9ye2tXPnTifKLiMjAxEREU7WWzJ3dfr0aW5tQ/fT0tLg5eXFuRN5zGThU1JSwrkrUs7b7ao+IiYmBpmZmVzHIR4seXl5CAgIwCuvvIINGzbA19fXyefFbrfj+PHjePvttxEVFYWrV6/ioYceQkdHB/fx8PX1RUZGBpqbm3lYktGjR8Nms+G1117DD3/4Q06dDxs2DOvXr4fdroZSoThYBw8exGOPPQZfX19s3boVTz75JHJzc+Hj4wMfHx+kpKRgxIgRGDJkCAAgMDAQe/bsQXV1NUaMGIGxY8fi/vvvR0NDA/Ly8njcKfGgO3HiBA8pU19fj5MnT6KjowPXrl3D+vXrAaj6Dz8/Py4qJARaVlbGOSu7Xc02mJSUhGvXrvFUt6LFXWlpKfdHWblyJY8y3NjYiOeffx4//elPUV1djYiICOzduxfh4eF8f9C+Igs9rXQERhaGrs4B+VvS02vo1e2uPlarTcZYrqIoMXJZMxzISgChiqIsUxTlK47rS4c8RBBfAIVgd1XejG5Dbl/8LepOIiMj4eHhoSvGIgpZNDeVgcK5V1ZWwmaz4fKly/jj/j/yPihVLaCKufz8/PDGt9/AnjN7OIX7zD+ewe++9jusjFqJw5cP4w8r/4DKzyvx1om3MNt/Njo6OjBt4DT859L/xEMTHoLFYsGDk9XgeA/FPISBA70ROTyS6we0NjjZ5lOuB2KjRUpHnm9QUBAqKip4OHPAObgccXBkwjp16lQsXLjQKYAglbXbb+knKHOhKCoTFdV2ux3l5eVOSEek9ESHRsoqR88pTDe1JXJjZEklir/y8/Mxbtw4eHl5Ye7cuVyRfv78eZ6OV9QN0VpZrVa89dZb3IeEPPItFgumTJmCUaNG4Rvf+AbGjh2L8ePH49KlSwgKCuJ7PCIiArW1tfD09OR5TioqKtC/f3++fqR4PnXqFE+xWlFRgUmTJmHOnDlIT0+H1Wrl+UIsFtVyrKKiAiNGjMDVq1cRGhqKiIgI1NfXY9WqVZg7dy4GDBiAIUOGIDAwEDabDZs2beIHMaXKpfdls6kZ+4qKinDhwgXU1dVx7oC4SMo/8h//8R+IiYlBVVUVrl27huTkZISFhSEyMhIXLlzAokWLuGJfjDG2Z88eXLt2Denp6TwqM+0DX19fPPzww/D19UVlZSXXcYSGhnbJ4scYc9rPFPuqsbGRIw/REIP2puhPpHdeiHtZPie0uAxCTHa7vcv3YAYMRFjdDmVSBcDTrVHcpaAoCldsii+SQOuglkUprkDv5YvIx2q1copFS54pOgAZvFAwxjBmzBjsytqF/1z6n/D09MTR80cBoEtqW2p33Zx1mO0/G28VvIVvxH0DWzK24Ldpv8XXQr6GTz/9FADw+rLX8ZP9PwGgZk9bFr6Mt+Xh4YF+/foh/0o+bnS04rq9GZ2dnbwfWl/x4E9JSeHe0DKIDlg039raWqxZswYRERE8vS3lPSdqnmz7tTgE8fCmdero6OBpbmUOhcZrtVq5fwBldSM5vd1u5zGqSCRGbdNhIO6P1tZWnhs9KioKiqJwpb/dbkdbW5uTl7jdbsfevXsxf/58lJWV8UNUfP8lJSWIiYnBk08+yfONb9u2jTsHkgjOarXCw8MD58+fh7+/P/bs2YM333wTFIk6IiIC0dHRqKurw6pVq7B06VI8++yzPJ6Yn58fT1NLJqnBwcGora3FtGnTuGc3Hf6ZmZn4+c9/jh07dgAAli1bhqKiIpSUlHCnv/vvvx/r1q3jzoDkEW+z2XD8+HH885//xPHjx1FaWsqV6Pn5+fD09MTatWsxefJk7sNCe3nChAncqMNqvZWRcvny5bBarSgpKUFbWxsuXrzIIySLmS/Xrl2L+Ph4Xn737t1cN2K32zFnzhxYrVZukRYTE8PXhvovKSnp4ptktVqxYsUKFBQU8CyWcvgdV+JwPa5BJkbllNFAV6dmvfNDC7REWEZgBoG0AshjjL3lSCH7B8bYH0y1fheCyEmIi6p3UItUsxnQkyHqJVACuh54rtoTwcvLCxsWqiKNjYs3wtPTkx/28YHxOHjuILYd2QabzYYf7f4Rnkp4Cg++9iAeC3sMV65cwf3334/n5j4HQEUWs/1n48kPn8QvHvgFloQswYKxC7DtyDbEjYzDb9N+iyUhSzBu3Dj4tPlg5L0j4TPgPs5Nkcxf1HPQxyQmiBK5CSqrtd7ksFVVVcWTNwHgBzlZKlEIDVFJDNxyUJw5cybmzp3bxeeDkJeofC8pKUFOTg7PXU0Z4IqLi504DLpHVkLyfvL09MS4ceM4dzZw4EAEBQUhJycH2dnZ8PT05OHdMzIyYLPZ0NnZifLycp4PnBAOrQdF6qW1sVqteOqpp7jYxW63c/PZoKAgzJgxA3FxcQgKCkJnZyefC6X1FYM2VlVV4ciRI9ixYwfefPNNnDp1ivux2GxqCl4/Pz8kJiYiNzeXxxwDAB8fH/zmN7/B73//e9x///3Iy8tDaWkpRo8ejbKyMiiKwrmqffv2oaWlBadPn8bOnTtx/PhxKIrCU/ESd15aWorw8HA+VrLKE/VqFosFbW1t3KqJ9gR9q5SXg+oWFxfD19fXKcBgTk4OEhMTYberMbnq6+u5+IzKeXl5wWZT0xBQPdo7nZ2duvoLGo+vry9PHUtGFfQdyAps4iDot1a74nkgK8UtFmefKb3zwwihuCPuMoNA9gH4bwDpAHKE60sHjDFdyt7ooDa7oFpcjVHb4oEotyOPzdUL35K+xan9+MB4AMCSkCXYsHADTl09hd+s+A0m+k7E4EGDAQBNXk0Y0jEENpsNZWVlaGtrw2u5r2FWoJpjnBDRhoVq3o97b9wLu92O0qZSbFi4AYwxMMa4GDAqKgqxsbE8xzLNhYInyhQTPZNFg/TxTXYEOBQTGIliR/KFsFic80WTjkE0LxZ1CTQWGiNRk2T9JSIcOozEfUOWUcHBwSgsLOQRc8V3pigKioqKuMURxZlSFAWRkZFOwRVv3LiBqqoqnsPC09MTXl5eCAoK6oJcydmQosDSGmdkZGDXrl2wWFSF/eDBg7mMH1BDlZDTJh1Q48aN4ybKYWFhUBQFo0eP5gduUFAQcnNzceDAAWRkZKCoqAirVq1CdHQ0VxIDqtVVQEAAAgICeKrYgIAAnD17Fjdu3MCoUaOQmJiIEydOIDQ0FA8//DCuXr2KGTNmYPDgwRg7diw3oT5x4gT3gi8sLEROTg4yMzM5lzthwgQ+j8bGRnR0dODGjRtobGxEcXExgoKCkJmZycWWhYWFGDduHHJycuDn54cdO3bA19eX52efOXMmVq1ahcLCwi5cDYlWye+lra2NE3skRhVF0eJfIi4qKiqcYqsVFBQgJyeni3GI+M3T2uqZ22qJisUyMrGqp3+Rx90dMOVI6AipHuL4WaYoSke3e/wCQUuJ7g62NQJ64d1Rssvj0NooctsPv6XmPU743ixsSd+CzbM2d2lX5ETo/9MXTiN0cCg+TP0Q6x5YhweCH8DR80exJ30PGj9t5F7rtKmf+ccz8B/hjxN1JxA3Kg4/nPFDrqBf/vohAEDyUw91GSMdtLK9vDzf+vp6HpZDa+5E+cnhXkSqnxJJyR6+9OG6WletZD3UPsXYEmXJ2dnZ/HAgvQqJY0QLGwpBkpiYiLFjxwK4FQqD2mtsbERVVRUiIyNhs9nwyiuvcB2E6CxJnJY8P8ozIVKc2dnZuHr1Kq5evcrFTcQN0hhttls502nMb775JiZPnoyQkBCcPXsW06dPx9GjR5GWlob29nYEBwfj8ccf54cphaL38PDgwQCzsrKgKApPRkX9LV68GOnp6by/gwcPIjc3F08++aRKrKSkYPLkyaiqqsL169cRHx+PjIwMDB06FNeuXUNHRwc8PDxw/fp1eHt7cwfJc+fOAQAGDBiAFStWICkpCTdv3uT5aCjV7unTp7FhwwZYrVYeTkXUh5AxBa0frTvtA+Juc3LURG7kxR4eHt4l97mot6QDXVSukyGF1sEuilbF/aT1femdN67ONfqmxIi/rs6tbjsSMsbmAygH8BqA1wGc+1cx4+0p8pCxvJHc0uw4xMBsYn25bdLn2O12jjy2pG9xqhcfGM8/tLiRcYgPjMfU0VOxMmol3vnuO1wxviRkCVZMW4Ht/7YdXl5esNvt2F+8HxaLBcumLMPU0VPxz0f+icl+k7F592ZMGzoNT/31Kdy40YrW1jb+cclj7Ozs5JSe1nwbGxvx+uuv8yioRBmJzn0kOpKRh0idiVkI6TkdmOKHrLWuxP1o2cbX19fz3NYAOOUeGRmJkpISzoGUlJTwqLaieI5S0q5atQozZszghgREvaalpWHv3r1cFFdZWYlJkyahurqai7pOnDiBI0eOOOmBaBwkHiSxG0FkZCR8fHx4OA7iYjIyMrgfCfmQlJWVIScnh2dNHDt2LM6ePYuUlBQ0Njbi6tWr2Lx5M3784x/zdxAVFYUZM2YgLCwMXl5eCAsLQ3Z2Nv785z/j0KFDuH79Os6dO4fAwEC0trbi5s2buHLlCpYvX46qqirk5OTg/vvv59ZcBQUFmDZtGurr63lY9fr6emRlZeGZZ55BfX09Wltbcf36dbz//vt8rrW1tZg4cSIPne/r64uVK1ciJCSE55QPCwvDp59+irVr13IdDWMMERERyM7O5pS4qKMLCwtzEnPZ7WoiNBKHzpo1i+vBiNsmXQnpvQBw4wbRw13MVCjvRZEIoL0vmsDLe1T8rWWuK7dPf0VxrLs6DxnMiLC2AFisKMo8RVHmAlgC4OVu9fYvBFospt6LM1JiySyqbO1F8n2Z3WSMccqUuAtCJHa7HVvSt+DguYNIOpOE/cX7uR6ERFtE2aRUq56972S+g5OXTmLa0Gn4zlvfwfN7n8f+4v1YErIE8YHx2JK+BQvGLkCglxoaTYECb29veHl5OSWFEtdi5syZXQ5+EXx9fTlVSM9F735RHyKLuES/EFHURBwJKaFlhaOIvHbu3ImMjAxuzSW2P2HChC66F5GDIeW5h4cHxo0bhwMHDnTJvRAZGYmCggJuYRQeHs5FMjabDR4eHjzSKomlSkpKEBgYiJgY1WKyuLgYhw4dwpkzZzBy5EgnEUd2djasVivCw8PR0dHBRTeAilRp3SjZFWVZBNQETT4+PggMVN9nUVERFEXhOpvY2FicP38eY8aMgdVq5Yc7jT8zMxN79+7lvjRhYWGIjY3Fhg0bcO3aNdy4cQPjx49HdnY2xowZw5XzlKs9LCwMqampsNlsaGpqQlVVFVdW+/v748CBAwgPD8e3vvUteHh4IC0tDQEBARgxYgQiIyMRFxeH9evXY+HChdwS7Pjx41xsSP495CE/efJkPPXUU9yJVtRRkHECoBIJJSUl8PPzczJ6KC8v7yIOFf+SuJBEbaKIlBABhWOXRdLiGSHuMYrDJgeAlc8EWQcog9i+FsLoCSFtBoF4KopSRj8URTmHfxGrrJ6AWcytV05UmMl6GFHsInvAiuXlwGgp1Sk4eO4gnvnHM3gy9kk1Oc4Ifzw04SE0eTXhJ/t/oonITlw8gV2P7sKSkCWwWq349qJv4zcrf4PSplLeLiEnT0/11U+4bwIYA+655x5ERkZyikZEdPSx0Vzlj8RmsyE5ORnp6encUkWL/Razw4nrKoOof5BNK0XZMCmFx40bh5iYmC4hsmndY2Njue+KSI0Ct7InUlKnFStW8DAWJKoQTZKpz+bmZhQVFXHqeMaMGVwJ7Ovri40bN6Kurg6Aap78xBNP4Kc//SmP3US+CBaLhSOSwsJCrkejeVMqVRpvR0cHF9s0NjYiPT0dI0eOREpKCkJDQ7Fo0SI8/fTTuHDhAjo6OnD16lUe0LG0tBQBAQGorKzksbiio6N5EMfOzk7uk3LlyhUMGTKEe4Q/8cQTWLBgASoqKlBfX4/s7Gx88MEHOHPmDIYNGwa7XbW6ozD8KSkpUBQFI0aMAABcu3YNFRUVaGlpwcmTJxEfH49p06Zxxzq6AgMDUVNTg+bmZgwaNAiPPPII5s2bx/Vs9P5IN0HvVyQG6L2Gh4cjOTkZra2tnJNdvnw5D4NDe1m0NKR2RbNcmQgi/Rpwy3BGPNQBZ4spqiNH6hbPBK3fMmidQe5YZhmBGQSSzRh7hzE233G9jS+pEr23wSzm1kIeosJMq6z4ckVRjFheVGQSLAlZgt997Xc4cfEEAOC5uc8hpToFM8bMwLIpy3j7ZOZLHIlI3Vy6dAkPBD/Ax0E6lBMXT2Dj4o2wWCwICQnBfV6+GNx/MFfEiia84gcimuqKcydTylmzZnFLFVlncezYMbz00ks4duxYFwpL/pipH8oQJ1OLJDrKycnhDly+vr5OedLld2G1WnlsKBLV0NxonhkZGfxwIeTxyiuvoLa2FmVlZdzMlt5ZaGgoAgMDsXfvXi4TJ5+Sc+fO8bzqMTExPOOgxaJmMCRxGgA+bk9PT0RERHBvdaKIX3rpJRw5coT7jFRWVqKxsRFJSUmYOnUq/Pz8sGLFCh7d1tfXFx4eHpg2bRoeeeQReHl5wdvbG0FBQdzk2MvLixtKkIWUGJqjoaEB165dw3333Ydf/epXuHnzJsrKyuDr64sDBw4gLCyMW2RVVVUhNzeXc2F1dXVITU1FSUkJysvLUV1djcDAQAQHByMyMhKrVq3C4MGDObci7tmkpCQsWrQIn376KQ86SAQXiZYKCgoQEBDAjToAlTuIjIx02keUmXLGjBl8X5eVlXEOjvYSmZOLjrDy/pT3k7gPZM5AjzvQOmdEjlv8rQd6HLzeWDVAM5SJGU/0/gC+DyDO0UgagNcVRWl31ePdBnrReLWoXlf3jBRVrpRYYhm9fvQUZoC6AcY+vx8AMGpQG/x9/cEYQ9PNJvgM8HH6K4LPAB982taI+7y0I3p+2taItrabGDBgAO655x4oyudoa7sJLy81fzRjzvcuN3nA/77P8c9/X8jHRRtRDFstzpWU1qKC0miNRCpNFu/Ja6LXD7VFylFShJIVlyizluXMdruqYA0ODubcQkREBEpKSnD9+nV4eno6WYgRpUvRc8nrmzImJiQkYMyYMfDw8MDZs2d5qtq5c+dy8RuFGqGIv6IVDym/hw0bhvh4FfnbbDYkJiZ2CYl/+PBhREdHY/fu3VixYgXOnj0LQOVGKO94WFgY52AiIyORlZWF5uZmLF68GIWFhYiIiOAZGCMiIrpk1BM5rqysLBw7dgybNm2CxWLByZMnceHCBYwePRqffvopT8REa5uZmQlPT0+Ehobi1KlTSEhIwNNPPw0/Pz+cOXOGz6OmpgbLli2Dn58fjwJAugQyCNi5cyfP2khrJUdgJoOFoKAgjpTJYZEsxygFAO0B2jP0XhYuXMjHRXtc3n80Pz0DDXpO0F0RknxOGJUz4tgBY0W63W5H//79SxRF6RKD6a4L584Y+x2ArwCwA6gE8JiiKE0a5c4DaIEaXqVTy0JABi0EovUStA46wPnAMrKAkA+27oD80uXNGfJz1QIqNmAw+vXrx8s13WzC4P6qmS5jDHXX6zBq0CgAtxTvZD5K9+h/qis++/zzz3HPPffg8qeXMeK+EdwDnsp8dfJIPDI9wPT45UPeaNPKybZsNhuXS4vJdbTqE2UohmQnyxOR4hPDPVB7cn3RKocsy+x2OxISEjhioTlRqHZvb28eWgMA5wxE7+TGxkZUVlY6KVXT0tL4HAip7N69G0uXLuXWarW1tdi6dSvmzJmD2tpaTJo0ySl8fJ4jFE5ubi7Gjh2LxMRETJw4kesGxo0bx0ViRD3n5ubC09MTVVVV+OMf/4hnnnkGI0aM4MjCbldDdjQ0NCA+/laUA5p3RkYGWltbMXHiRPj6+vL0uefOneMckkgEiAixtLQUly5d4nlL6P1ERETwg7+2ttbJEu7IkSMYPHgw3wckIhQhJiaGi7CCg4PxwQcfICAgAJcuXeI+JpmZmTh69Ci3BqM5iciB3gslsxLHoveNynteq6xM5GiBGSLL1XOt74y+JUpHIY9PbqN///6aoUx4alT5ApDg+FsIoEC+9Or19AKwGICH4//fAvitTrnzAIa403Z0dLSiBe3t7V3uNTQ0KFlZWUpLS4uSlZWltLe3O5XTqiM+E+uZBb2yLS0tTmWoXfG++PzkyZPKiRMnNNsT5yG2JY+hvb1dSU1N5e3Q/YaGBsPxy23RpbUW8ljkZy0tLV3ut7S0KKmpqfw6dOhQl34JGhoalOTkZP4uqD3xfdJ9eY2PHj3K77W0tCgnT55U2tvb+b6g8dGzo0ePKu3t7crly5f5uE6cOKE0NDTwdtrb25UTJ04oJ0+e5PXEMV2+fFk5evQo/0v1Ll++rGzfvt2pnY8++ki5fPkyn5+4H1paWpSjR48qv/vd75Qf/vCHyt/+9jc+joaGBuXEiRO8DtVLTU1VLl++rCQlJSkbNmxQLl++7NSfoihKeXm58vTTTytJSUl87NRfUlKSsnXrVuXQoUNKS0uL8re//Y3/L86xoaGBryXdq6mpUZ577jll//79SkNDAx8LvZujR4867buGhgZl69atSkNDg9M7pDWj/8X5tbS0KG+88QZfB5oTrUlDQwNfY9r74p5qaGhQDh065PRe5P1K89J6prX/9c4Io+9TC1ydS1rt07swUzcrK0sBkKNonKlGOpAfOP4uh8oRyNdtAUVRkhVF6XT8zAQwqrfaFsNSiKDFRYixmUSLH706MmjFzjKSM8oKcgLZwkJUuGlFArVYuuYpkfsWI4BqcV5EGYrmsaJsn8xu5fGLEXlpPmSdpcdpyB65dJFXu9wHydxnzpyJiIgInD9/votHL5WlqLR2+y1vbnHO4lqKa0zvX1xTxSGzLi0t7ZJbncxwSSEcExODGTNmICoqipvY0thIKQrc0mdZLKpHfmJiItra2ngWQZKxi+EzaHyXLl3CmTNn+JoeO3YMO3fu5Mr7WbNm4fHHH8e8efPg4+ODwsJC5Ofnc6stspyz21XntubmZpw5cwZTpkzBww8/zEVMtLb19fU4fPgwzyUeGRnJ9QM5OTnw9vbG5NBfwQAARmlJREFU6tWr4enpyZX0lCud3iOtO82b3oufnx82bdqERYsWcc6krKyM63uKioqQm5vL90ZhYSG3ZhLfocgViZwRRUSmoJnUB83dYrGgoqKCO6MCXR0ES0pKEB0drcvx0vvU+sa1dA5AVy9y6svIYorKyOXJYEL8/vTOG9LhiHtc7FerLHRiYZnhCLpwAFr3bscF4J8AHtV5Vg0gF6pC/wmDNp4AkA0gOyAgoFtYvTugh/X1qOWWlhZdrkGmBOl/Pe5Iq6xYTo9SEtt9++23NbkNmWqR62pxIK7KaM1HpJBpDbQ4QnltxPInT55UampqNMcqg0xVir/FsYjviPogTkMsK86DKH7xHlGANCe5Hy0uVnxGnARxCocOHVKSkpKcKGeipEWqW+bGqK2XX35Z2bhxo5KUlKTU1NQoP/zhD5Uf/vCHyuXLl3lfxFFQnydPnnTiaGgcycnJSlJSklJeXq4899xzSlJSEh8DcVq0x2pqapTU1FTl7bff5tzAoUOHOLXf0NCgJCUl8b5pnZKTk7tQ6sTdiHNLTU3lv2msxG3U1NTw9ylzu/I+E7kmGcT9YMT5mwWjsvL5Jb9Tehcip6t33hmdGXJ/6AYHQvCAxr0HTdTTBcbYYcZYkcb1VaHMTwB0Anhfp5nZiqJEO8byfT3nRkVR/qQoSqyiKLFDhgzRxeoimFGCdwe0TPWoP61YSwQkwxcpDdFJSW5TK2CkSHWTTkGPWrJYLBg7dqyT/kcci54JoBaXJvYjcylUhqgl4toAcJNbmjNF0xVjiNEaiO3kOZJLkVnlhQsXnMxZxTUX78lzpXbJvJiU4/SOSKdCJsxkKiomviIuhfxURM6R5iLGDaP1or5FCpUsvj7++GOkpaVxTmLv3r08f/b06dOdqHtADeqYk5PjZDEkGyKQs6O3tzfvd9myZdi0aRNPYhUVFcUNAZ599lluUUWhPiwWC/Lz83m+k+nTp/OUrFOmTEFCQgIyMzPh5+eHAwcOwG63Y+TIkUhOTkZoaCjPFZ+QkAAAmDRpEhhjKCgogKenJxTlVjBKi8WCgQMHOhlY0NqS8pyAOIn09HQkJCTg+vXrsFqtWLp0KQ/yCaiWeZRIitoR14m+GT2dJ42DskXqlTEDet8mPZONa+ieuNeI09XicsS2xL2iV8axtu5F42WM/TtjrBBAKGOsQLiqoepBug2KoixSFGWSxvWRo+/vQBWdfUuhL6JrG5ccf68A+AeAaa76JRGWGaWT2ZetVU4rSBqZmOohMNn/Q2xbNBUUDygAXQ4s8SDWE7mJm09vnuSRLtq7U12jsPbywSy2YbFYuti1k5ghPz+ftyt+EDTPwsJC7kUtlpE/Njk0PKWMFb3bRfNbUWwlitEo21xFRQWWLl3qhCBIASmKUcREVuJBIxIjNFZy7CPxikgEyBF4xXc6atQonDhxwilLHpmzkkmt+G7J/JQxxv1RaHxiqlaLRU3K9eyzz2LKlCmoqKhAdHQ0PvnkE7S2tkJRFD4HX19fLFmyBPX19XzeFOU4KioKgwcPRmhoKBePUE6XMWPGQFEU1NXV8WCFc+bMwapVq1BWVobc3FwUFhYiODgYISEhqK2tRUREBGbNmoW5c+di3rx5POotAB6YUnyv+/bt4zG9CAi5h4WFYc2aNRg8WDUwIbEghaBRHIYhdruaC+Sll15yEuEZESCiCI0yXsrEiBmfMfmb0fo25f0kEobyM/H/7vQl96cJWmyJ4wUMBjAWwIcAxgiXr16d3rgALIWavGqoQZmBAO4V/k8HsNRV2zExMV1YNC2WzQy7qaccJnZXFokYiX202hCVg6KYwwzbqaXk0+vb1TMtMYoRm06ss544QKuOrEzWEnORKEarvigO0qpLYjfqi8QYR48edRqr+FcUWYiiMllURWVJuSq3J4qUWlpalO3btyuXL1/mYyARi7xO4j3xb0NDA1fUk1hINCQQx9fQ0KC88cYbTgppakMU5YgiKlJOi+VIPEXipxdffFFJSkrqIt4RjQqof1FURPeSk5OVN954g4ulSOwlj5nqiO+ZFP4vv/yy8tFHH3UxBmhvb+ft0j4lIwRSlotA74TWlfoQDQDEvSXuD9o/VE/eR0bgqoyeot7oOzJrtGPmDJHbBJCtuCPCUhSlWVGU84qifBOAD24pz0fro6NegT8CuBfAIcZYHmPsTQBgjPkzxpIcZYYDOMEYywdwCsB+RVEO9LRjkVMwW06LslAEio3K64FMScttExWu5zchs6FEJRv16Yq7EvuRI4YCXT3gxbHoec4asdHEaouiCFnMFRMTwx3u5Poi1yGuCc1l3759vC0yMPD19eV51eXyspgvIyOD53VISEjgIjLqS6SMFYH6tdvVEBjUN8Wuqq2t5T4Mra2tTqIZkbNsbGzkUWfFd1pWVoYzZ84gISEB9fX13JAgIyOD3ysoKOA+EJTPg0xiExISMG7cOO68Se+NQp/TvCsqKhAVFQVAzc0RHByMU6dOoaioCGPGjHES79jtdp42lsZZUVGBuLg4pKSkYPTo0bBYLJxzW7ZsGY9qQOtIPhkEoiEBrY3dbkdoaCgA1ZyZuMWMjAyncdtsNs5R1NbWYunSpcjKykJCQoLTGC0WC09tm5iYyNeJco/s2rWLc0YiRR8bG4tZs2YhLCwMBw4ccHLwdMVpyFS/+O3Sb61v2IiTMcvlaHEcenXMtGkmmOL/g6qHGOa4djLGnnRVr7ugKEqwoiijFUWZ7Li+57h/SVGUZY7/qxRFiXJcExVF+Z/e6NvsSxDFOFoHumgBRZYRRjmMZZGSbPVFz0ULCxFEkYVR5kQS38iWT1ptyRtMRGzi4aq1ycW5i3JqM2JBrYOY7os5MkQQEZQscqMwD6LYRmT3qT+bzYYjR45wREHjJrm+iDRlMZ6IcMR3T572ovWUTBBcvHgRQUFBAG4l1xIRyfjx43l/5EQYERGBdevWYdmyZUhNTeUOejExMRgzZgyqqqoQFhbG5eEZGRnYs2cPGhsbkZuby30vaB137doFu131RCdLJXEMOTk5XFw3ePBg/PjHP8apU6dQX1/Px2y3q5kai4qKeGiQ4OBgNDY2Ij4+nmc2JF8UiqJrt9vh4eGBwMBAvPTSS9i6dSsWLVrErdkonpgoWioqKsK6deuwfv16+Pr6Ijw8HJ6envydBgcHo7KykvvGEOKpqanBmDFjAKiWiI2NjcjOzkZBQQEKCwu53k/cx2vXrkVMTIyT97q4D8QwInrfk9Yel/UYsq7Nld5Cq30zIjJ3xWmuypnxRC8AMFNRlBuO3wMBZCiKEmlqBHcR6HmiG4EW1U8vXXYC0pMX0mHkKtyA6NSm1Sc5sWmFHge6esPK9bOzs6EoCqd+jcq6uk/jMQqzfvr0abS1tcHLy4uPOzg42CnPOZXT8lqXOQOt8PDymOjQl5E4AKf6cp/Hjh3Dxx9/jE2bNuHw4cMAwD2Y5XkRohKV+Vo57OVw3LRedLARJUxh2+lAorq7d+9GfHw8qqureRttbW2Ij4/nimK73c5zi5BuJigoCLW1tU4cGa1BdnY2D5dO65OWlsa93uX1JKKFTI9pbevr61FfX+9k9EDUO7WRkZHBo+Smp6dzTkVE2pWVlWhoaEBcXByysrIwZcoUnoOdOKaSkhKEh4ejsLAQra2tmDNnjtMYxVAiorMhfXP19fV4/fXXsXbtWgQHB8Nuv6Vop/FRf+JaiQ548riJUBO/Ra09a+QsK39XZIJt9nA3Oi96G7odzh1q+JLPhN+fQScuyr8a6CmYiCIU2UxXyigtllT8LVKnWuIvom7lMnL4dyN2lMQ3IpWlV1aPchLBKMy6xaJaLHl5efGgewEBAdi3b18XMZTonyPWl4EOfFHZLSu+AfCIqNQm3Y+KiuLUrJiGl0RkQUFB8PPzw6OPPoo1a9bwZEwAnCIOi1ScKEITLapsNptTGl56f6Rkra+v58Eji4qK8MEHH/A0uuStvnTpUpw9exaKoiAiIgKMMVy6dAl2ux0dHR0IDQ1FTEwMF/Pk5OTwhE7BwcHIyMjAzp07ef9kmXblyhWntSPrK3k9STxHIV/y8/O5F35KSgoX29BhSvGnSPxWWFjI5xgbG4ucnBwuQqJovgMHDkR6ejqysrJ4tkU6GBsbG7Fv3z6ePMtut2P69Omcmzx27BjPgCkaXJA4jNLIVlVVYe3atTh16hRvOyIiAh0dHUhMTER9fT0Xc4rfkxZioPkR4tQrI+8TcT9qfVd2u+pjZCSpEEEch7vIw0z7ZsEMB/IjAN+BaukEACsB/EVRlFd6bRR3CMxwIFpUhN4LclVW3lRa1AltAC1qR6bO5XZlTkiPencXtCgnLcpUURTdsRHI1JrMgeitk3xPXh/g1kEhRiomBzeRu8jIyOAhOYgLocNQDncicwwU5oEOVUIUdFjqjdtuV01H6UAXDzdKUhUQEAA/Pz+OMAAgMzMThw8f5pFkMzIynNLWEvL94IMP0NnZiaCgIHh7eyM6OhoJCQk8KRKF9iCKXdwfJCaRxy2H7REpbABOIV0IMcoZJfPy8uDn54f6+noEBASgrKyMW4iRnob6u379Oq5evYply5bx9SwpKQFjjKeCbWxs5BwCcQ0UFoUSdlVWVnLOTt5rVquV54IX093SGMjSjsoSNylbtMl6SgA8xhjVEzlSIymCVjIpcY+5klRofTdmwSxXJIMeB2LWMioawP+D6p0+xUydu/FyZYXVE0sGo7b0rDO0HAHlerJFk5YjkXjfVQgVPQsMrftalleyU5sr0KrjygpEzzJNfq5lIaYoXUO/yJZR4iVb2Mh1ae4UOkW06BEd8rTmffnyZe6QKVoHyU6EsjMhOe9Rf4pyy4GTwsvU1NQoe/fuVbZu3cotmMRwKmTtRSFVZGdF0QpLnJNo9SS/K9GySXQ2FcOTXL58mYcMkeuI1lKi8yNZe5FlmWj9Jb8b0VKMrKBkB0x5v4jPtSwaxfZFJzytb4zGKVtnyftGb1/rOSRSG0b73gxojVmvjDsAd62wJKgGkArguIqMWLRp1PUlArMKJlfiKgLZvl+uoxUmRRaPyFZC8hjlekZiMHnc9FtPoS7eI4sWUcSkRWFprZP4W3Yk1FpLrfegtQai2ILuE2svcinyGlL/p0+f5rkuAOewMeIco6KiEBERwZM0kdKUQnqLYgcxpERpaSlXzNpsNhw9ehR2u52Le0TfETHpEPlFAOBUOIWHpwRWdXV18PHx4XkvLBYLZs2aBbvdjr1792Lp0qXw9fXlIsSCggJu1UUWSjQXCutO+d2JyxEV5LSWojEBpelNSEjAjRs3YLPZeEInkRujvPD0nomT8PT0hKenJ3JzcxEeHg67XQ1Tkpuby9sQ94HVauWWYoAatp90R8Tx0XhlkRONX1xrcS+TyBHoKpoV/4aHh3OnRhofgC57TssXjPYira34LD09nfsEaYmEzYD8PZORgFy/V/UlWlhFvAD8N4ALUBHIUceV4qre3XiZ8QMxC0ZYnCgVmdroDubvKehxLOJzrb96/+tRNDJ1p1VPK4CbWN8MVyeDlo2+UXvkRyByIG+//Tb3pRB9Hug3vUvRT0Cci0jBigH55DHIwf/0xi2GpKDnNTU1nFuQOR+RQ6ypqVHeeOMNXY6DuBSt0B10ie1qcUhESZPvC4UcOXnypBMXQc9FroU4F2pH5NJSU1OVs2fPOnFM1KfYN73zmpoa3mdycjLnTLT8kLQ4S3l/0zzk9yK+ZzH4ph73q8XpuOKoKSyM1n41+q3VFpUTg3z2FKDDgZhBIGUALK7KfRmuniIQsy/C1SHmTn96G8YdpOTOuF1tdPl/sY7eR0UgH0ZiWyQacKeu6AQmjoU+HtnhkT7U/fv3dznY5Qix8kEg90+IR/zoxfdl9O619oYszhTHIh4KWu+B5lVTU6P87Gc/4/G/xPpynKjU1FQnZPL2229z0YwsQtWLTC2uu4ggWlpalJdffll58cUXnZAStSHWo/bb29uV3bt3K+vXr1fKy8ud2iNnRBojIR6aKyEsGr/43tvb25X9+/c7IS29fS4SBrTehw4dUp577jkee0t+Z/Jv2o9aCMoI9MRX8vsXozJrlTHaYz2BniCQvwMY5qrcl+GSEYjWouuB3osyKufqQNa6J278Q4cO8Y0vPqfD0ZW+w8ycZNDbnK4QhRYlpkeh6YW2FmXlcl3Z21xrvOJYtD4eOvTkNZXXQq8N+f/k5OQuiIcODz05Ov0vH3Ja4ebFelpjor1A74SCK8rzIOQhhjingIfie9F6V7L+gp7ROlJgRNIREadDoeTLy8s1uTlqKykpiSOKkydPKuXl5TwcPulSRM95EVlROPs33niji0e/OAcap7yf5fWntZJ1U3pcs0ykaNU3c15o/a93zxUHIs+nt6AnCCQWwEUABwHso8tVvbvxEhGI3iHV3cNYr5wWRWHmkKZDRi98h9bBpFXGVegDV9SMFuvvqp5MrWt9uFqHs6vfRvMVy8m5HOi+eNjq9UP3tEKyyGVlClTM2yGW1aLc5XA3RpwLiYnEQ5rKieI4GWGR2E1U5FN7dEDLcxDHICvf5b350Ucf8ZAkZCBA69vS0sLFbjKXRv1dvnxZefrpp5WPPvrIKWQK7XvRAECcJ0XvpXUU50ZISRTdyJwSjVGLCNILG6S1D/SQkNZeNfMNGn3LRr/1xtib0BMEchaqBdYCAPPoclXvbrxiYmIMF7m3F12rTT1W1dWmM0OdiPe14kLJoCUW0kJ4euuk91Fp6TrkD5Rk11qHn1HfRvOmOYniCrGOlkhLDHst9yGXFSlOLVGJKP7QmnN7uypnF+NTaa2LjExECyV5r4gHpTze5ORkrh+QEYGWaEk8WGksIkelhXjJcos4AFmMQ3W0OKPU1FTlww8/5NZmsghJ3FNyTDFx/CI0NDTwEPLyfqRYXoSEzVDz4rsX34dWSgQz36MM4nrrET6u9Cmu+ugN6AkCOeaqzJflio6O7rGZnDtg9gB2deDL7YgfhlEd8X+9ebpitc1+FOJvWVSh1Z4sHpEPY62+5XnrAR0sWghDBhKRmBU3UNsiAtRqX+/90EEhI1gRwch5HPQQFo1DRjhUnhCAeEiJGfXkd0GiI1nPQ+bAYvviXFpaWpzEecQZnDhxQikvL1dqamqUxx9/nCMJOrzJJLe8vJybI8tGAiICE98/cVZaxA/VIaRF86c6ycnJXTh7LYJB/F9r7Y32iZl74jOR8JFBC7HqjbMnYFS/Jwjk9wBeBDATqj9INIBoV/XuxkvkQERqqzeQSE8PYC35twh6ogQziETvMHc1RldgRIG5+si0ytNfVxSW1kem1bbRnBXlFrciys9dfejiGMwcCnpIS05RqyebF9uTOTZCDvQ/cRwk7hLl8VRW5M5kyvbs2bNOPhzt7e08Ui7dp71EIia6L6e4bWlpUcrLy5WHHnpI+eijj5Samho+bkJGNOZDhw4pL7/8Mk8cRe199NFHynPPPcf1F+J7E9sRvwOR4yGkJa4ljU0mfkQjDq09aBYpmCFw9Nox2tfynuluX0ZjMGqrJwjkqMb1pTXjFSleLdGF3uKKf7Wed+dFah2aRptSS+REz43aMHOYmxmn3j1XiKQ3+qP77iB9M+OWlcda6yvXl5GTFvVKB7neHtMSscnPxHaJe6B7ycnJTuav4iEvikPofyorti2u5eXLl5Vvf/vbynvvvedEbRPXICIaMfy7TBWLSLm9XTUrlnU9ogGIKOoSDRxovqQf0dvTMlIXvwFRbKb17uX3ocUF65U3+ub19qar79YVaHFbZr5DM8SRq+fdRiD/SpcowjJ7qMqHt9kN5i642oha7KtWeVfIyGzfYntah6WW1ZD829XH4S6icXXAG81Za2202tJD0uJzIkBkYkT8YAlx6CE8eW3kA5jS09JhS1yFKP+XRVfibzn1LomGRC6CkAHV+fDDD5WjR486eb//+Mc/5pQ+tUXWXnp5YURdjdZ+FNuS10ZLh6T1zclISe89G623/Nxo7+hZxrkCca5aXKcZTtbVeOie/J3S+xYjJ3T3nOpDIEpXJbpZ0No43dEbuFNWPpi12FejNs1SNkYfhyw3N6L2xDGaGaceEnIFeh+UK72LHIpFUbpnaqw3R5Gy1zJMMCIQ5LUUfRpEJE4K4K1btzo9N1qn9vZb4U9k/YI8nzfeeEMpLy93ckSUrbeI89CzEBQ5C9kEWG9N9d6HPA8au2ztZlbPKPp3iAYRRm0YfReuQC6rR6yYRVxa8xN/6+n8zHIgRn30IRDlzniiu3sYmkFEInXpTh9GlLr8ly4tZaFsOqpHgWlxIK7GZ7as0RqJlLreIaCnD9EjCvQOJK1Di9ZNL/KAHsVIf8lKitqRxSmKcsvjnpCLqKiW25V/y8hDBBFJ7d+/X0lKSlJefvlljjjIKVHkzOgw1kKUIvIQxWjynPW4Vb19TkiOfKNkqy4ZqYtzJyKI6olWaPKaaSFedw9+d8q6u++NyuvtL3faF++L4waQo7iLQKCGe59lVObLdPUmAjECsy/ZVVl6bkRh6bWvd2iJH6rWx+vKpNUMgtA7EIzGa/TcFSUmelibfaY1Rz3OyQgByOPUqyMjZVH38OMf/5griuVUujQu8fDWQvz0W0T24lxFk1wtqp8QEwU4TE1NVXbv3q089NBD3BlQpKRFD3WtPSaOXfaN+eijj5x0MvKaymOnNggxyboN4p5EvxaZcCAdi7iOsjOuuGfpuThHLURjBO6UNQNG34FWuZ5wOPSc/gIoUbrDgUBNHvWFH/69cXUHgbh6WWZYWbEtd5CB+NzshtWjorUOfq0DUU+sIx9aZjanO5SaXhtaUYDlMnpIpr39llmsWJ/0DLLOQDxs5LVyxc2JY9H7LbYrUuBnz57tIg+nw0+OOCsjePGQFKPYimMjxJKamuoU1kNEHjKCoksMiyKulSxCE8ViWmtHcyWESR7nsh+L1oEuIj0RmYprQPORkaiMSOR7MnEhI2vxPWpxfHpg9rB3F8y2J4+9p+11iwNR6+E/AXwdjtwht/sC8EuH53ue41qmU26pI05XBYDnzbTtLgJxtQm0dBNm2nSnD7Nl9No3+0yrnEzJaP11NV4tJOWK4hF/yw5kMnIzQpgy1SiOWw4yJyMi8dDTm69cViu0hawzktsVfS20ELz8W+vQJapcjgumhThFHxQtrsbM+xHnI5oHJyUlOYUc0ZsPcVuE1ERzZNEjXawjgh7XIM5bRjAUKFEsr6dz0UIiemPRgu7qHG4H9ASRiXV6YsbbAuBzAB0Arjt+X3dVr7uXA4E87aJMPwCVAIIAWADkA5jgqu3uIBBXC+8O8qA2xb9G/cgf3xcBcv9mx6M1PyO2Wj4IFOWWqMTdj1rvMNeizs2MncaipwSWjQmM5k73ZNGRWNcIOYtrQiDqR8R+tfQjokWVHB/KaJ5a4xLDpIjxquT1EH+LPiotLS28DRGxiRyijIi09p8e1yzPWxSbaRE4MoeYmprq0pdI6/2YJSrv1DfdXeQh6UC+HEp0kwhkJoCDwu8XALzgqm13EEhPMLerNl1R0nRPpMi+bKB1ILlCPvIHLFOK8oFCbenJ4WUq1kiR7orqNioncwhGim1xvKLoqKWlxYn6doVExLb1ysrrLfpZNDQ0KD/72c+cnPRctSW/y5MnTypJSUldYoyJh7343lpaVCW4GEOLkI4WohHFVnSg6xEBZggaGbnJayQjeT1LM711JjCLPOT+egq9jZB6iwNhAB4F8DPH79EAprmq193LgUDOAygA8GcA92mUWQ1gm/D72wD+qNPeEwCyAWQHBAToLpCrBewtEA9WVx+A/NG620dvljeDAMSyZkVdev1oiXvkeuJaGvWtxbmI5fUQtXyoueIO6NBxdcCLbYmhOkgEpHVYi3XlECoy1yaPiXQPYn+KouYYkfcWIRexXy0ui9oWRWCiJZy8bqTPOXTokBMHovUNULskiqK6sne9WQWw1n15XoribLKs9VwLuvN9ynV70gbB7SB4RegJAnkDwGukhQdwH4DTruq5aPMwgCKN66sAhjtEVPcA+B8Af9ao/w0NBLLVVb9G0XjNgtGGdKcNV+FFXPVhdCCatdQwW14+ZM0YArhCNq76dUX5G3188kFk5rDR4wr15OZG6683Vi3EJ3JcegELZRGTbAAgcjRy9FtFuRUGg7gN8T3K/VH+C1GfIZaj/rX0HKLIR2s/iBfN14gTEJGpFgGjR4ARt2L03mXETvMSRXx0X64n/q9nPq7Vn9445HbNQm+dRWagJwgk1/H3jHAv31W93rgAjAVQpHG/RyKs7r40+WM2cwh255kroM0usvl67ZpBMmYOe/kDlvswkkHrgdm10WpfDiKoBbIs3dUY5DKiyEM+7I18MIwQrGz6KiM7cexa60lITGu9KKqtFkIVORBXhzwhBz1fDxI9ae0JvTble+SQqIckza4n/S8jMr1Q9Ubj0rJik8VMWvtQa8215quXH8YdMHv2mG3LbBs9QSBZDo6AEMlQEZn09gVghPD/DwHs0ijjAaAKQKCgRJ/oqm3yRO/Jwsv1XCk7zUSEdbdPat+VLkX+sOQ2jT5Crfuu7uk9c3euspewvAb0QZqh+sTwH1rPXVGosmKaQEv8oqXsFYEUrFqRYGUzYjGeFIFWEEbxmZz3Q25bRghyOdnUVY/T0tsjMqIRvwF5/UVEJq6n1h7W6t9IrCkjY7kdrfoEWuI6o/cqcndaoDUPo+/SCLTWpqdgto2eIJBvQU0iddEhUioD8A1X9bp7AXgPQKFDB7KPEAoAfwBJQrllAM45rLF+YqZtmQPp6aK6OnSNDhmz/bpbR+9j1/rg9JTP8iZ1xeXI/fZ0Y+sdJmLbZvsgcYZe6G+j9ozEdbL4Q++A0GpTbktsg0APEYhmuuLeE/UcWvtRRhoiwhDbN9L7GK25XO/QoUO68cDa21VnQllhreW5rkcoaLUpEgzi3Gmuovmzlo5JbktrHbTGohdnyij+lFYf4hjEcka/xbZuJ/TICgtAGIDvO65wM3XuxsuMFZarA1urvNFBp1Xe3X57sjm0PhhX7cofsFamO3cQo7vj1aOyzPajdUjLh4qev4bWeIwODaL8Zb8SM9Y7oh5CzgevdThqrbs8P7OHn9bhrHeIEbcg5gqRy4nrJOtJ5DHW1NQoDz30EA/xTnW08qDoJVkS/1KdhoYGZevWrU5Ri0Wxo+xTJJbR86rX6tfVM2pfi9uUQUbSRiIzvfruODiaBbmtniKQaKhZCZ/ElzQXiOICgbg6WF29nN46PHuzTaPD2J06RgePXjmj9l0911oHozmI9+jDlQ9Uubx8GBtZVumJ8EQORLZMEsN36M2RDi5ZMS7OSYtSFp9rIXmxD+Iq3EmgpDX/y5cv89zjYtt6CEq2xpIPVEIeWiI1eW6u9p/IIelxIGI9+f2ICMgIzBAcIhgp4LXapDrd+WZ7G3nI8+uJCOvnDpHSL6F6pecD+KmrenfjpYdAXG0IrY3cXXBFTZgZkzsbpjtjNossxTG6Gq9Wea1yWqI2I4s1vcOLnulRZ67EeVrjF39rvStZ6a7H9ekp5vXWS+sgMspHIpaj+FZiAEJ5vkT9ax1mYvuyYp/0KvJ66q2drPegenriXq12tZC/FuIUf2vtOdmKTLYK05qHKx2Xq29bCxm6Y8zSXeiNM6AnCKQEwADhtxd0Amvd7ZdZDkS+r7VpuwNGB6jWIaa3Sc2wrL29CfX6MDNeLY5GT/+iZ14q9qXXr17/Wm25UtQazVcL2eiJH0QuRasvrQPS1aEiHkZ6B6085pqaGk0FPO0nWewjKuz1EJm7uSbkQ5T+yjlKxP701tpsH+IaiL9lZGDmG5ffv6s9Ldc1SvHsqn53oSftinV6gkA+BuAj/PYBkOiq3t149SQWVm9RB64OIXfakO9pjVurrrvj1btvltXWGqt8qIse3HryaDpUtDL96R1y8jvUsu4yQxyI7RutidZfUXwjr5mMdFwRF1qHlniQy2sr1tdLSmaG+tfy4hbLmCUm5HUnyl9rDHqEg5EuSGzXTB2R8zD7beghOTN7qCfPuwvdRR7iXtVDIPfANbQDOMsY+wtjbDtUhz8bY+wPjLE/mKj/pQO73Q4AsFgsmDx5MiwWCywWC+x2O7Kzs/lzM23I/1Nb1C49s9vtKC4uNmxbHJfFYnG6n5eXB7vdzi9qX65P5YzGS7+NystzMGpXHmt6ejoKCgqcynt6eiIqKgp2ux0VFRWYMGGCbn8WiwVBQUFO62WxWDBhwoQuayjWAwDGGL9PoH4fXUFuh9rXWzO9tbBarVi9ejV8fX0xefLkLm0WFBTAZrPh9OnTyM7O7jIOmgMA3ra4j3x9fbFixQqUlJQgLS0Nu3btgs1m61LfarV2GZ/NZnOak7g29Ndut6O0tJS/E3GvWa1WXka8L34nWnuJ7gHqO5H3tNhPXl4eGhsbcfr0adjtdqf3Rc9tNhvy8vIAAJGRkSguLub35DriuyooKEBnZ6fTfF2BuPZWq9VpX4rj0qrnqt3bAVrtujrD5O9GF7SwingB+I7R5ar+3XS54kBcsaJa7LFeO2Z1A+5Q8UYiLuqLEueYkUnLbWtZf5ilXsz6WZA1jJ5psEjl63EGenJzvfkZPdebo967MSNyMHrvWu1qeVzrvWcjRS/VM1pbsW0j5bEW52Zk6SW+D3lOss6HdC6UU90VR0dcgl55re9H773prZm74O632l2QOTBXfZtt04x1lwjooRWWBcAkx+Vpps7deLnSgZg5NN1hc13VcXfzmlH8ah0gZtt21/rD1VjomXjJ9vha5emvlrxcbrcn8l1Xc5YPWvl9aVk2yePTAvn9iAiTDktRH6BnPaQ1J3kuooJcfEbtGpmvynOVkbbcnp4PiZwjncZFyn1X+5XaNlterw0z98w+c/cAdndsdF8OIWREPLkD7s6v2wgEwHwANQCOAUgDUA1grqt6d+MVHR1talF7g3JwBVqUqDvlzdQxMwat391FInr35QPRLOIUx9FbOh2qI3tIGyFk8RDUM0uVCRCjQ1m2gKL2RVm8qHwXEx/J5rF6cxIp/eTk5C7964U00RqfXEfPjFYrmyUhRK04WWaIHXldZSMAuSz9NZqTVrt6fRqNqzfAVV/i9yLuCVex9Hr7bOgJAskBECr8DoFOdqq7/bodjoQ9ATMHpFZ5s8+7Q0WJB4KWuE7r4yRwZQnkqm+jOZl9H3I/rj5Mccx6YjgtRWt7e1dlv9666BEL4sGsZ8ElHtwyItCbkzw/+eDWsnTTWkMtjkerD7r0Ug+IiE/PskprTnpz1do/MtKUHRC19qkesndnLGahO8hI7FPLodeoXm+fYT1BIAVm7n0ZLrNWWLcLebj6+HvatpaFj9mNq3XwalmuaJlb0sGgl0jHncNCa05GVKdWeXH8Rjor+YA0svySP96e6Ii01t3owGppUR0B33jjDUOxmdyfljhJRA56bYi/ZW9ysYyc+0RPJKiFEGXQGp/Rwa73nqiuUQgUeZ+aQR7uWlyJdbtzoGvtfXfr9yb0BIFsB/COQ5Q1H8DbALa7qnc3Xt3Jid5boLUJexu0lKfujM3soe6KsjPTttkysuzXDBKRx2pUR+sg0TvgzVB/emPSE2+5Qq6iqEyMgiu2a2S2q7ceeuMR11kUWWkhB62c4noEjBnEYHZe7iBgrWeu/EhcIS6j/aqF2Iy+GSPozllxO84VRekZAukP4EcA9gD4B9QIuf1d1bsbry8SgShKz9lgV232BDGZOWy1+nW3rF49ozJGB7sIRgjMFXJ1tY7igdmdqARmD1mt/o2oUD2qmLgmo7Afcpvic9m3hNrUQkhmxHhGa6HVhhkrQjMHeXe+CzPfqR4ClPeaVjlXOg+j367GfbuI024hEKhJnbrk4/iyXq6U6O6Au1To7QAz1KxePa17WrLjnvZr9MHrHTquPgItysxIhCbL/LXGoXWQy20QJW42KoEZSxmtMRitq9ba6SEeLZNXGeFoeW1riZqobG96U+vNWQ5t76oNrXEYWfDJZc2OzdU8WlpcpyM226eZOnpzvx3QEw7kfQABrsp9Ga7e4kDosO1ufCy9zWB245h5rnffiC0WD0lXYObQ0OpLi9p1x7pMi8oT+9MDuR8jjkQPwZjVxVD7WlF69eYk/9WjZmWlu3xQ0v9i/nO5L3EN9CIra83VzGHq7oGv9x7p0iMK5PbEcdP36eqg1tt78mVGBCu21RMxtd4Z4MqK7HYb/ugZTplBICkAWgAcgZqfYx+Afa7q3Y1Xb4qwzFImWve0NoOYD8GorBkwkjO7oo7MxjWS29W656ovvUPKVftmxuaK6nTXTNPM+5brmuFAZCspV9SseE88KOW6YsY/cVzyoWOkA9Lbq0bzdiWeEQ9ZvYRrZjkQuT8twwGjuvJ82tvbee51VxyM1hjMrlN3wNV30R3i0x3oCQcyT+tyVe9uvO6kDsToYzKi/uVnZrgBrX7NyJDl32YOfXfHYoYKFMsaUVpG89Bq2x0EYWYeZkQarsYrU7dEOIjv3xU1K/4vW5DJyMvoYDNaZ63DU0/fYnSQaf1uabkVjUDvIDf73cjraZZI0PsGKcKwGSRkNNYvGsx8A+6A2wgEwAAATwH4I4CNADz0yn5ZrjutRHf35Wl9mN3ZBO5Qyu5QmO6Cq/FrWViZOTh6ImfuThmZqnV1MGkdmjRe8sTXcqwUQ7xoIRxXY9Prz6yo1ejwFduU35cRoaTVDuUsF50wtZwQXbUl1hXXVJ6PO/MTE4WZcda73aKj7kJvI7buIJC/AtjpQB57AbyqV/bLct0pBGKWetIqczsPdL0+b2d7Zig4d8Yhf+iuKEwzyMsMV2H0m+4ZHXKuEEJ7e3uXQ1BGBFr7wh2q3B3Qs2gTx0T33EXk7e3OTphaczdqS0+v46quK8MPsX3ZWs2d+ZmF3vr29AiWLxqBFAr/ewDI1Svbm5cDceU5rvMA8nTKnYea6CpPb3LyJSKQ23Uw64kczIqz7gQ1c7v6IGqwp+27qu9KmS0eclrrLloZUVA/vfSuWv0YfbA9+ZhlZCYejO6k4BXn7o5BhNinKzEcjbe3jEn0EIDWu9PKa2K2P7Pi2TtBuPXGIe/qXbmqaxa6g0ByjX7fiQvAFgA/13l2HsAQd9ojBHK7WE+9j9bo4zDiOHqT+hE//t445PX60At/4k4bZhWxWs/kQ07vQKfDWsvyTEYIRhZZruZolgOQuQ0txz13+3PVhtFcXSFCeR3dmauZeWj1SSCbY5vlgMxYdd0OMHpXt7N9V3XcOQO7g0A+A3DdcbUA6BT+v65Xr7cuAAzABQDjdZ53G4HQAroLZja7K+9Z+SPT41R6cpDK5eR2e3rIu+pPb5xm+3BlAKB3EGrFC9JrRx6X0XpoHWCuFM7029UBLo9JfD9m5mHUnzw2dxCvq/5kal5cf3eo/J7qsoz0Z1pz7iny6A6C7G1i9YtAPN22wvqiLgBzjURTUKMC5zqCPT5hps2e6EDMbARXHzpR/65yL7tqz53nZkwMb8cmF9umw8YswjMyQTZzCGuV16qn51io1Z5WX2JdPQdDMwe4EafgijAxywmJ83XVv6t29Pax1nt2dWB3x2xcazxa6yHvh57u7+5+J3pI+06Mobe+6bsKgQA4DDWzoXx9VSjzBoDNBm34O/4OA5APnRDzAJ4AkA0gOyAgoEeL2Bsvw9VG7k4fvdFedyheV32KH7U75sE97V9vHDIl6kpEpBUKRK8fkXPQG7PeQeJqbVzpcswclEbj0zp4XR1SeomgxP7FvOpaQGvcWyIlPesw8V3ebg7EFbFG93qCNN35DnuLMLyrEIiry6G0/wTAKJPlfwngaVflzIZz740y3YHuvPDeoopcHfZG/cgfjJYYqTcowJ6AGapeq44ZDkIuqyhd/TPcGZur/0UQ+yF9jh4npKf7coUItPrUQgxaB7irDIpmPPX1xqh1X14z8f31xEPcbN960apd1b1d8C/Jgbi6ACwFcMzg+UAA9wr/pwNY6qpdMyltzYhJbqftd3cO2u6U16L8qB0zDmPiPZmSl2X4WuXuBLh6j721zvLcxANW70DTAiMKWqt/dzgQo/FrPXP1vuS5aREersahR2zIZfXGonVfi5MyGlNPuAAzYs8vkmjqTfiyIZC/APiedM8fQJLj/yCH2CofwFkAPzHTbnc4EK3NcDs3xZ04aIny08pIJ5bpDgWtVbe76+ZOeS2OxwgJ9vY6ax3u8nMj/RchXi0Zvpbfi9bhqDcWV2DEdeqBvL5m6mvtKaP56L1DuZ44Dzn+lxHXYTQWV9AdAuSLhO6MVazzpUIgt+tyV4mu9ZF0h7pzt093qNae9mNESSlKz6xW3EFCWnXN1hMPHy2LNyOT3N4AI4pT611q9Ssq4eVD1OwB35311kNQRnOU72kRCVprLZr96q2BjDD0EKTeniWRmFnCRWt8rrjvO0Hk9SZ0Z7xynT4EonQvnLvR4SDe740NpfXRmXXUchfRuDr0tA5ks+25ar+74zJTz+igc7dNo3bEe7RGsiWW1r4worQpTIhWlkQz79+orKtD1KgPo/3d3u4ssjRC0Fqha/TGIiexMtpfWvW74+BolvAw6v9uhe6MV6zTh0AUBWFhYS43nrsL625dd9rW+7C1fosfjDuHjatxmEUesk9FdxCPeBi5U8/oXnfK6NUzc+iJEZX1qFhXZrN6QQbNjFFvbEYmxK4OfqNxtLe3d5mzmTG6ImC0ogy7uxZmkanR3FyVMTOOOwm3qz89BHIP/g+Bt7c3LBZLl/t2ux2nT59GdnY27Ha7YRt2ux15eXm8HP3uLaDxie2KY5b7J4iNjcXUqVMBQPO53MfkyZM110Ieh1EZsY/Jkyfzvum3UV2qL685Y0yzfbmePEe9ddGr5+o9a9WV50Rt0L2pU6di5syZsFgsXfaF2LfVauXrRSC2a7FYkJeXB5vNxtsyA/J6i2PQeh82mw27d++G3W7HhAkTnMZts9kM2xbBw8PDVDnxubzPxTlaLBbExsbCYrHwy8x+kvsxs0/09o3dbu/yTrSgN/abu3vRTH93DLSwyr/qpacDccXCa5XX+t3b2F+vPVc2+73JEemNS08c4U6/ZHaqRem5ojrdpZLF/93hwGicstmqKxGH1nj0RCRaZcyIe8yAq3paHIi7ffZ0bLfj+6E5mTEy0Ppt1njEzD5yxb3eTmOOnpYjQJ8ISxuB9NYL7O2N4E4/3f0Autu/HLKiO/3IH3h3RVKuQO8wdPXR65mH6q27Ox+ukVy/u1ZB7o5DLm/UZ08JEjMHZ3f3rNF7NdOWWQLFHULG3XJ3WjzWnbXuQyA6CIQW1Oi3WejpJutpP7ezT7ntnn7o4r3bRYW5QlJGB3RvUYu0VmYPNrNjccc6yagvV4d4e7t+2JLu9CE/M/rdG+PvjbHdKeLQHejpmPo4kG5crqywXLGb3YG7cfPdaTASJ4hl3G3TqC8tilo2I3VHRNRdbkAv2ZFcztV8ZN8GvRAh7q6jGd8PLQTojnjxdlDfWuMyas+d+3qI9G6DOzkmPQTC1Gf/NyA8PFzJz8/XVaTn5eVx5aY7CjtXICvkbne93oDe7ruxsREVFRWYMGECrFZrj8Ykviu9d6l132azIT8/H4wxxMbGcoW2q7m66k8LSAEugpEBB2MMkZGRfG3EMdlsNhQXFzv1b7PZuqyjmXmIz7XaNQt6fZldK1L0ymXN7jvqx8x+ksdkpo8v4tv7Ir93V8AYy1EUJVa+32eF5QDR0qO3X2J3kYeRRYVsJdMT0LJA6U1rDpvNhoqKCgQHB6O4uLhb7Ypj0rLKka14tO5brVZMnToVsbHqd0BjMWM5RP3RuhvNwWazYdeuXcjIyOD1jfbd1KlTERYWxscjrz9ZbYltaCEPo3emZX1UXFzMra/cBTPfkR7oWYfpWYBpzclisWDChAmm9pM4Jq11cGd+twt685vrs8K6TVdvp7TtLd2J2fYJtEI29KQPd5XM3WnflR7CbFtaYgWjOfRm9AASHZHXtpEBgBwryghk8Zo7Y3NHzKK39mZFYe7o3syMRW/d9PQaWm27mr9Z3dvdIKLqDZFZb+pGxP/R5wfSO6BnP94dCsIM5aR3Pzg4uFeoJD2KsTsiDaP2iWI249NiBKJdvRZHInMiRtSwu3O0Wq1YvXo1fH19OfVrs9k052C1Wk23L45TnJMRaHEqZsRX8vqQL4hI9ZNYrbt+NnprIoPeuonvjNaGysttG/mTuPJpkdu+o5S7BhjNxZ02uiOSlPs1PQYtrPKvepm1wtIDPQWtu+1oteUu3E0UU0/m0hOlp1zGjEK8N9etO4p1M22K7emZD8ue/67aNDIY0Av82J39rTem7nI0WuXd2TNm9oQ73KJWnz3lcHtjbXpaT6t+HwdiAtzB9jJ27wkHYFZWbFTfCHpCTZmpa6ST0KrvjqzZ7DuRuZn8/Hxdmb5ZqkqmYM30b1bpK3sk67VPYyTuoLGxscu4xfU2G3lAS5cCdNWniJ7gWvOVxy73LUdm0Ft3M172WrotdzhKec5yf6I3vrtgt6uRFGRujZ7p6Vrc4ZLcHU9POSkz3vdOoIVV/lWvnnIgRtBTjqI32+tuXaKmXJnciuXN9N2d8ehRsUZOeEYJk8zIuuVyveGNTW1RnCytZENG1LocvVZvfe8kuFonsxS1K+7A7DvorgRBHIf41x0ww4G4Wq/uRBvoKdfjLqDPD6T3legy9PbL60l73UEeYlRZs85fZvvuznj0xCh6SM6M6Mqdw8isKEzvYNISNcn1XB2SegfOFw1662RW7GWWUHH1vnorXbLsW3M7v+Wefh+9TayaAT0E8n9ehNWbcDeY/wLaPghm+iJWX0/U0R3RktE9alMP1H3btR09E06jOesF1zMap9GYZUWuniGCaBoum/PSb1eKflkE011TaLMgi9pcgZ7y12i9ZeMKV23rjbO4uNgt83C99shAwmq1mjYCcAdc7St3vldXZux3Ev5PORLGxsYq2dnZX/Qweh1Eqx2S6dLHYLZed/rqKdAB48ohUP7bk7H01vi12unNtXGnby2LpJ4QHzk5OfD09NTUg1D7eu/N6B2ZsRZzF/T2Rk/aM+ugeLeAq++oN6DPkfBfFGQqT6Sk3KlnFnpzg5qhvo1MQ3vTAa6n7ZhdTy1la0/6ttlsTqkIZFNMd8But6OgoAB2ux2RkZG6imej96aneDdSOOuNxQz0JvKg9noaLeFOQ09Md3sKfQjkSwxaFlBAV6saLbhTm6474i75uZEF0d0CZq3qeuo7JLdXXFyMqKgop/wZ3fVtsFgsiIyMxMCBA136JHTnPVDOGleiF3dESD1ZQz1rwd6IltCdcZitpycS/CLgC0EgjLFvMMbOMsY+Z4zFSs9eYIxVMMbKGGNLdOr7MsYOMcbKHX/vuzMj/2JBy/yvJ9SXkdmtUd9m7stjdBdcmW/eCUqvt7kzom7F+fQEKYrI1V3dih5YrVYn0VVvEBq0D6g9+b68r90JsdLd8RFH5A531ZtjkYkIs0jTFYd5pzmgL4oDKQKwCkCaeJMxNgHAWgATASwF8DpjrJ9G/ecBHFEUZTyAI47f/9JgVnHb03bdKeOqbk8+bqN2e8Pe3Z0xuFob+QA0KmtG8e8OQndlOOAuaBEk7rSjFaPNjJGBvK/dESF19xvQ0/92x+DDnbHIxJ/IYZtpX4/DvBPfRRfQMs26UxeAVACxwu8XALwg/D4IYKZGvTIAIxz/jwBQZqa/223GK8LtMLG7XWZ73TXNpfu3w9y4J7b/vemLI5tMyj4ZlFzLrA+NKxNOMyaat8uMs6c+Jt0NM292zr0N7uw9M+bWrtrtaR9a5d0xZe8JQMeM16MLRvliYSSATOF3neOeDMMVRbkMAIqiXGaMDdNrkDH2BIAnHD9tjLGy3hqsATAAXgDaACiO3/T3fgDXdOqIZbWe3UkYAu1xyiDP1R3oSV0CeZy90aYM4rvxdtxrFe5B6OseAAM0+tdbT63xmnnfevsEGvfNAoM6zqsGY3M1vnsee+yxzzXa9QJwE4D8zEybWuMwuz/dBaP9ozdGsQ6k+u6O05133w+AD4BPob+uZsDMGMdo3bxtCIQxdhiAn8ajnyiK8pFeNY17PToEFEX5E4A/9aSN3gTGWLaiYQ53t0HfOHsX+sbZu9A3zt6DnozxtiEQRVEWdaNaHYDRwu9RAC5plPuEMTbCwX2MAHClO2Psgz7ogz7og+7D3WbGuw/AWsZYf8ZYIIDxAE7plPuO4//vANDjaPqgD/qgD/rgNsEXZcb7NcZYHYCZAPYzxg4CgKIoZwEkACgGcADA9xVF+cxRZ5tg8vsbAA8wxsoBPOD4/WWBu0ac5gL6xtm70DfO3oW+cfYedHuM/6dCmfRBH/RBH/RB78HdJsLqgz7ogz7ogy8J9CGQPuiDPuiDPugW9CGQ2wBfxlAtjLG/MsbyHNd5xlieTrnzjLFCR7k7HtqYMfZLxthFYazLdMotdaxxBWPsjkcqYIz9jjFWyhgrYIz9gzHmo1Pujq+nq7VhKvzB8byAMRZ9J8YljWE0Y+woY6zE8S39QKPMfMZYs7AXfn6nx+kYh+E7vEvWM1RYpzzG2HXG2FNSGffXU8u7sO/qsYd9OIBQdPW0nwAgH0B/AIEAKgH006j/EoDnHf8/D+C3d3j8WwD8XOfZeQBDvsC1/SWAp12U6edY2yAAFseaT7jD41wMwMPx/2/13uGdXk8zawNgGYCPofplzQCQ9QW85xEAoh3/3wvgnMY45wNIvNNjc/cd3g3rqbEH6gGM6el69nEgtwEURSlRFEXL4/2rAHYpitKuKEo1gAoA03TKvev4/10AK2/LQDWAMcYArAHw4Z3q8zbANAAViqJUKYpiB7AL6preMVAUJVlRlE7Hz0yoPk13A5hZm68C2KGokAnAx+FvdcdAUZTLiqLkOv5vAVAC7agUXwb4wtdTgoUAKhVFqelpQ30I5M7CSAAXhN+mQrUA0A3VchtgDoBPFEUp13muAEhmjOU4wsR8EfAfDlHAn3XEe2bX+U7B41ApUC240+tpZm3uqvVjjI0FMAVAlsbjmYyxfMbYx4yxiXd2ZBxcvcO7aj2hBqzVIxDdWs+7LRbWlwbYXRKqxR0wOeZvwpj7mK0oyiWmxh87xBgrVRQlzaB8r44TwBsA/hvquv03VHHb43ITGnV7fZ3NrCdj7CcAOgG8r9PMbV9PCcyszRe6T0VgjFkB/B3AU4qiXJce50IVw9gcurC9UJ2P7zS4eod303paAKyAGrhWBrfXsw+BdBOUL2GoFldjZox5QA2zH2PQxiXH3yuMsX9AFYn06oFndm0ZY28DSNR4ZHadewQm1vM7AJYDWKg4hMwabdz29ZTAzNrckfVzBYwxT6jI431FUfbIz0WEoihKEmPsdcbYEEVRbkeQRV0w8Q7vivV0wIMAchVF+UR+0J317BNh3Vm420O1LAJQqihKndZDxthAxti99D9URXHRHRobjUGUHX9Np//TAMYzxgIdFNdaqGt6x4AxthTAcwBWKIrSqlPmi1hPM2uzD8A6h/XQDADNJFK9U+DQxb0DoERRlN/rlPFzlANjbBrU86zhzo3S9Dv8wtdTAF0JQ7fW84u0BvhXvaAebHUA2gF8AuCg8OwnUK1gygA8KNzfBofFFtSQ70cAlDv++t6hcf8FwPeke/4Akhz/B0G12skHcBaqqOZOr+17AAoBFED9MEfI43T8XgbVcqfyCxpnBVS5d57jevNuWU+ttQHwPXr3UEUurzmeF0KwJLyD6xcHVcxTIKzhMmmc/+FYt3yohgqzvoBxar7Du209HePwhooQBgv3erSefaFM+qAP+qAP+qBb0CfC6oM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YNeA8bYZ44onkWMsb8xxry/6DF1BxhjPoyxTcJvf8bY7tvc518YY6s17vO+GWP3MzVCrY0x9kcX7e1mjAU5/rcyxt5gjFUyxs44Qm78m+PZWMZYm+N+CWPslMMBktoJY4xlMMbaGWNPG/T3DUf9o91dA3eBMRbBGPvLneqvD7pCHwLpg96ENkVRJiuKMgmAHaqNOQfGWL/b1XEvt+0DgCMQRVEuKYrS5XC/EyD1fRPAzwDoHuQA4Ihh1E9RlCrHrW0APgUwXlGUKQCWAvAVqlQqijJFUZRwqI6FP2SMPeZ41gjg/wH4XxdD/S6ATYqiLJDGctuiXSiKUghgFGMs4Hb10QfG0IdA+uB2wXEAwUzNMXCUMfYBgELG2ADG2Ham5k84wxhbAACMsfWMsY8YYweYmqviF9QQY+xRB2Wcxxh7i5CFgxL/L8ZYFoCZYueMsVTG2MuMsTQHZTyVMbaHqTlWfiWU+5GDYypit/Ij/AbAOEd/v3NQ6UWO8kbj3+MYfzlj7CWtRWFq7ojfOuZzijEWLDyeyxhLZ4xVETci9q0oyg1FUU5ARSRG8C04ohcwxsZBDa3xU0VRPne0c1VRlN9qVXQgnR9BRRpQFOWKoiinAXTodcbUvBFxAN50rNd6Bwf6T6hBBq2MsSOMsVzHun1VmFspY2ybY/3fZ4wtYoyddKzhNEe5gUwNnHnaseZi9OB/QkV6ffBFwBfhEdl3/WteAGyOvx5QD7B/h5pj4AaAQMezzQC2O/4PA1ALYACA9QAuQ/XC94IaDiIWam6VfwLwdNR5HcA6x/8KgDU6Y0mFIwcHgB9AjT00AmouljpHPzFQPYMHArBC9cKdAmAsgCKhLf7bxfirAAx2/K4BMFpjXOdxy1t5HRz5F6BGAfgbVKJuAtSQ6059C22sB/BHg/dwDECE4/8VAP5hUFarfR+o3KR475cwyMMCIfeNY3x1cERQcOyHQY7/h0D10meOvjsBRDjmnQPgz45nXwWw11Hn1wAeFcZ2DsBAx+/ZAP75Re/9/6tXHwfSB70JXkzNZJgN9WB9x3H/lKLmPwFUSvU9AFAUpRTqQRvieHZIUZQGRVHaAOxxlF0I9aA/7Wh7IdTwEQDwGdRge3pAMZ4KAZxV1BwT7VAP+tGO9v+hqJS9zdHnHBdzNBr/EUVRmhVFuQmgGMAYnTY+FP6KnNNeRVE+VxSlGMBwF+MwghEArmo9YIz9xMFZGQXz04oe6y4cUhSlUWjv14yxAgCHoYYyp/lVK4pSqKjc0Vmoa6hAfWdjHWUWA3je8f5ToSJoEltdgRoepg++AOiLxtsHvQltiqJMFm8wNTbbDfGWQX05ro7iKP+uoiha4advKorymUF77Y6/nwv/028PF2PRA6M6Yh+fQf/7UnT+F+v35BBvg3rIAioii2KM3eNATv8D4H8YYzaD+lOgJnDqCYjv/FsAhgKIURSlgzF2Xhif/F7Ed0brxwB8XdFO0jYA6nz74AuAPg6kD+40pEE9UMAYC4FKSdLB8ABT88F7Qc3CeBJqMMnVTM21QPni9Sj77oxlJWPMm6mRVL8GVXfTAjWNqrvjNwsPC38z3B20CSgBEAwAiqJUQOUIfyXojgZAB0ExNXnT/wLY2ovjGQzgigN5LIA+Z6YHBwE8yRiPFDtFeBaCOxwRug9uQR8H0gd3Gl6HqmwthCr/Xq8oSrvjbDgBVTwUDOADRVGyAYAx9lOoyth7oCpzvw9VdNQjUBQl12EGSiH1tymKcsbR50mH8vpjqJFUzYzfLPR3KP7vgRpe2zQ4qPdBACyMsZUAFjtEXiLsh6p7Ouz4vQHA7wBUMMYaoVLszwnlxzHGzkCl5lsAbFUUZbujPz+oCGgQgM8dhgYTlK7JnYzgfQD/ZIxlQ42qW+pGXUBNHPYKgAIHEjkPNc8KACyAOt8++AKgLxpvH9wVwBhbD1UJ+x9f9FhuJzgQQKxyG5MeOTi4o1Az5RmJ+L7UwBjrD9VgIE65lX++D+4g9Imw+qAP/sXAYYTwC3yxebfvBAQAeL4PeXxx0MeB9EEf9EEf9EG3oI8D6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuQR8C6YM+6IM+6INuwf8HiQ6dkszuFGEAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pm_phi1']\n", + "pm2 = selected['pm_phi2']\n", + "plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.plot(pm1_rect, pm2_rect, '-')\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we'll make the same plot using proper motions in the ICRS frame, which are stored in columns `pmra` and `pmdec`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pmra']\n", + "pm2 = centerline['pmdec']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pmra']\n", + "pm2 = selected['pmdec']\n", + "plt.plot(pm1, pm2, 'gx', markersize=1, alpha=0.3)\n", + " \n", + "plt.xlabel('Proper motion phi1 (ICRS frame)')\n", + "plt.ylabel('Proper motion phi2 (ICRS frame)')\n", + "\n", + "plt.xlim([-10, 5])\n", + "plt.ylim([-20, 5]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The proper motions of the selected stars are more spread out in this frame, which is why it was preferable to do the selection in the GD-1 frame.\n", + "\n", + "But now we can define a polygon that encloses the proper motions of these stars in ICRS, \n", + "and use the polygon as a selection criterion in an ADQL query.\n", + "\n", + "SciPy provides a function that computes the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of a set of points, which is the smallest convex polygon that contains all of the points.\n", + "\n", + "To use it, I'll select columns `pmra` and `pmdec` and convert them to a NumPy array." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1049, 2)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "points = selected[['pmra','pmdec']].to_numpy()\n", + "points.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll pass the points to `ConvexHull`, which returns an object that contains the results. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.spatial import ConvexHull\n", + "\n", + "hull = ConvexHull(points)\n", + "hull" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`hull.vertices` contains the indices of the points that fall on the perimeter of the hull." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 692, 873, 141, 303, 42, 622, 45, 83, 127, 182, 1006,\n", + " 971, 967, 1001, 969, 940], dtype=int32)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hull.vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use them as an index into the original array to select the corresponding rows." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ -4.05037121, -14.75623261],\n", + " [ -3.41981085, -14.72365546],\n", + " [ -3.03521988, -14.44357135],\n", + " [ -2.26847919, -13.7140236 ],\n", + " [ -2.61172203, -13.24797471],\n", + " [ -2.73471401, -13.09054471],\n", + " [ -3.19923146, -12.5942653 ],\n", + " [ -3.34082546, -12.47611926],\n", + " [ -5.67489413, -11.16083338],\n", + " [ -5.95159272, -11.10547884],\n", + " [ -6.42394023, -11.05981295],\n", + " [ -7.09631023, -11.95187806],\n", + " [ -7.30641519, -12.24559977],\n", + " [ -7.04016696, -12.88580702],\n", + " [ -6.00347705, -13.75912098],\n", + " [ -4.42442296, -14.74641176]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_vertices = points[hull.vertices]\n", + "pm_vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To plot the resulting polygon, we have to pull out the x and y coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "pmra_poly, pmdec_poly = np.transpose(pm_vertices)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figure shows proper motion in ICRS again, along with the convex hull we just computed." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pmra']\n", + "pm2 = centerline['pmdec']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pmra']\n", + "pm2 = selected['pmdec']\n", + "plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.plot(pmra_poly, pmdec_poly)\n", + " \n", + "plt.xlabel('Proper motion phi1 (ICRS frame)')\n", + "plt.ylabel('Proper motion phi2 (ICRS frame)')\n", + "\n", + "plt.xlim([-10, 5])\n", + "plt.ylim([-20, 5]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use `pm_vertices` as part of an ADQL query, we have to convert it to a string.\n", + "\n", + "We'll use `flatten` to convert from a 2-D array to a 1-D array, and `str` to convert each element to a string." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['-4.050371212154984',\n", + " '-14.75623260987968',\n", + " '-3.4198108491382455',\n", + " '-14.723655456335619',\n", + " '-3.035219883740934',\n", + " '-14.443571352854612',\n", + " '-2.268479190206636',\n", + " '-13.714023598831554',\n", + " '-2.611722027231764',\n", + " '-13.247974712069263',\n", + " '-2.7347140078529106',\n", + " '-13.090544709622938',\n", + " '-3.199231461993783',\n", + " '-12.594265302440828',\n", + " '-3.34082545787549',\n", + " '-12.476119260818695',\n", + " '-5.674894125178565',\n", + " '-11.160833381392624',\n", + " '-5.95159272432137',\n", + " '-11.105478836426514',\n", + " '-6.423940229776128',\n", + " '-11.05981294804957',\n", + " '-7.096310230579248',\n", + " '-11.951878058650085',\n", + " '-7.306415190921692',\n", + " '-12.245599765990594',\n", + " '-7.040166963232815',\n", + " '-12.885807024935527',\n", + " '-6.0034770546523735',\n", + " '-13.759120984106968',\n", + " '-4.42442296194263',\n", + " '-14.7464117578883']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = [str(x) for x in pm_vertices.flatten()]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now `t` is a list of strings; we can use `join` to make a single string with commas between the elements." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_point_list = ', '.join(t)\n", + "pm_point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting the region\n", + "\n", + "Let's review how we got to this point.\n", + "\n", + "1. We made an ADQL query to the Gaia server to get data for stars in the vicinity of GD-1.\n", + "\n", + "2. We transformed to `GD1` coordinates so we could select stars along the centerline of GD-1.\n", + "\n", + "3. We plotted the proper motion of the centerline stars to identify the bounds of the overdense region.\n", + "\n", + "4. We made a mask that selects stars whose proper motion is in the overdense region.\n", + "\n", + "The problem is that we downloaded data for more than 100,000 stars and selected only about 1000 of them.\n", + "\n", + "It will be more efficient if we select on proper motion as part of the query. That will allow us to work with a larger region of the sky in a single query, and download less unneeded data.\n", + "\n", + "This query will select on the following conditions:\n", + "\n", + "* `parallax < 1`\n", + "\n", + "* `bp_rp BETWEEN -0.75 AND 2`\n", + "\n", + "* Coordinates within a rectangle in the GD-1 frame, transformed to ICRS.\n", + "\n", + "* Proper motion with the polygon we just computed.\n", + "\n", + "The first three conditions are the same as in the previous query. Only the last one is new.\n", + "\n", + "Here's the rectangle in the GD-1 frame we'll select." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -70\n", + "phi1_max = -20\n", + "phi2_min = -5\n", + "phi2_max = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we transform it to ICRS, as we saw in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import gala.coordinates as gc\n", + "import astropy.coordinates as coord\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "corners_icrs = corners.transform_to(coord.ICRS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use `corners_icrs` as part of an ADQL query, we have to convert it to a string. Here's how we do that, as we saw in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "\n", + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have everything we need to assemble the query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assemble the query\n", + "\n", + "Here's the base string we used for the query in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Modify `query_base` by adding a new clause to select stars whose coordinates of proper motion, `pmra` and `pmdec`, fall within the polygon defined by `pm_point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query_base = \"\"\"SELECT \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + " AND 1 = CONTAINS(POINT(pmra, pmdec),\n", + " POLYGON({pm_point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here again are the columns we want to select." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Use `format` to format `query_base` and define `query`, filling in the values of `columns`, `point_list`, and `pm_point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258))\n", + " AND 1 = CONTAINS(POINT(pmra, pmdec),\n", + " POLYGON(-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883))\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query = query_base.format(columns=columns, \n", + " point_list=point_list,\n", + " pm_point_list=pm_point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 7295\n", + "Jobid: 1603132746237O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019143906.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And get the results." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7346" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "candidate_table = job.get_results()\n", + "len(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting one more time\n", + "\n", + "Let's see what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = candidate_table['ra']\n", + "y = candidate_table['dec']\n", + "plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.xlabel('ra (degree ICRS)')\n", + "plt.ylabel('dec (degree ICRS)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we can see why it was useful to transform these coordinates. In ICRS, it is more difficult to identity the stars near the centerline of GD-1.\n", + "\n", + "So, before we move on to the next step, let's collect the code we used to transform the coordinates and make a Pandas `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from pyia import GaiaData\n", + "\n", + "def make_dataframe(table):\n", + " \"\"\"Transform coordinates from ICRS to GD-1 frame.\n", + " \n", + " table: Astropy Table\n", + " \n", + " returns: Pandas DataFrame\n", + " \"\"\"\n", + " gaia_data = GaiaData(table)\n", + "\n", + " c_sky = gaia_data.get_skycoord(distance=8*u.kpc, \n", + " radial_velocity=0*u.km/u.s)\n", + " c_gd1 = gc.reflex_correct(\n", + " c_sky.transform_to(gc.GD1Koposov10))\n", + "\n", + " df = table.to_pandas()\n", + " df['phi1'] = c_gd1.phi1\n", + " df['phi2'] = c_gd1.phi2\n", + " df['pm_phi1'] = c_gd1.pm_phi1_cosphi2\n", + " df['pm_phi2'] = c_gd1.pm_phi2\n", + " return df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we can use this function:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "candidate_df = make_dataframe(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And let's see the results." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = candidate_df['phi1']\n", + "y = candidate_df['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.5, alpha=0.5)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We're starting to see GD-1 more clearly.\n", + "\n", + "We can compare this figure with one of these panels in Figure 1 from the original paper:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The top panel shows stars selected based on proper motion only, so it is comparable to our figure (although notice that it covers a wider region).\n", + "\n", + "In the next lesson, we will use photometry data from Pan-STARRS to do a second round of filtering, and see if we can replicate the bottom panel.\n", + "\n", + "We'll also learn how to add annotations like the ones in the figure from the paper, and customize the style of the figure to present the results clearly and compellingly." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving the DataFrame\n", + "\n", + "Let's save this `DataFrame` so we can pick up where we left off without running this query again." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "!rm -f gd1_candidates.hdf5" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_candidates.hdf5'\n", + "\n", + "candidate_df.to_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `ls` to confirm that the file exists and check the size:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 756K Oct 19 14:39 gd1_candidates.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_candidates.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_candidates.hdf5\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CSV\n", + "\n", + "Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html).\n", + "\n", + "We won't cover all of them, but one other important one is [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), which stands for \"comma-separated values\".\n", + "\n", + "CSV is a plain-text format with minimal formatting requirements, so it can be read and written by pretty much any tool that works with data. In that sense, it is the \"least common denominator\" of data formats.\n", + "\n", + "However, it has an important limitation: some information about the data gets lost in translation, notably the data types. If you read a CSV file from someone else, you might need some additional information to make sure you are getting it right.\n", + "\n", + "Also, CSV files tend to be big, and slow to read and write.\n", + "\n", + "With those caveats, here's how to write one:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "candidate_df.to_csv('gd1_candidates.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can check the file size like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 1.6M Oct 19 14:39 gd1_candidates.csv\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_candidates.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The CSV file about 2 times bigger than the HDF5 file (so that's not that bad, really).\n", + "\n", + "We can see the first few lines like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ",source_id,ra,dec,pmra,pmdec,parallax,parallax_error,radial_velocity,phi1,phi2,pm_phi1,pm_phi2\r\n", + "0,635559124339440000,137.58671691646745,19.1965441084838,-3.770521900009566,-12.490481778113859,0.7913934419894347,0.2717538145759051,,-59.63048941944396,-1.21648525150429,-7.361362712556612,-0.5926328820420083\r\n", + "1,635860218726658176,138.5187065217173,19.09233926905897,-5.941679495793577,-11.346409129876392,0.30745551377348623,0.19946557779138105,,-59.247329893833296,-2.0160784008206476,-7.527126084599517,1.7487794924398758\r\n" + ] + } + ], + "source": [ + "!head -3 gd1_candidates.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The CSV file contains the names of the columns, but not the data types.\n", + "\n", + "We can read the CSV file back like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "read_back_csv = pd.read_csv('gd1_candidates.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compare the first few rows of `candidate_df` and `read_back_csv`" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
\n", + "" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 0.791393 \n", + "1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 0.307456 \n", + "2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 0.779463 \n", + "\n", + " parallax_error radial_velocity phi1 phi2 pm_phi1 pm_phi2 \n", + "0 0.271754 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 0.199466 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 0.223692 NaN -59.133391 -2.306901 -7.560608 -0.741800 " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "candidate_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
00635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
11635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
22635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 source_id ra dec pmra pmdec \\\n", + "0 0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 \n", + "1 1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 \n", + "2 2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 \n", + "\n", + " parallax parallax_error radial_velocity phi1 phi2 pm_phi1 \\\n", + "0 0.791393 0.271754 NaN -59.630489 -1.216485 -7.361363 \n", + "1 0.307456 0.199466 NaN -59.247330 -2.016078 -7.527126 \n", + "2 0.779463 0.223692 NaN -59.133391 -2.306901 -7.560608 \n", + "\n", + " pm_phi2 \n", + "0 -0.592633 \n", + "1 1.748779 \n", + "2 -0.741800 " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_back_csv.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the index in `candidate_df` has become an unnamed column in `read_back_csv`. The Pandas functions for writing and reading CSV files provide options to avoid that problem, but this is an example of the kind of thing that can go wrong with CSV files." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In the previous lesson we downloaded data for a large number of stars and then selected a small fraction of them based on proper motion.\n", + "\n", + "In this lesson, we improved this process by writing a more complex query that uses the database to select stars based on proper motion. This process requires more computation on the Gaia server, but then we're able to either:\n", + "\n", + "1. Search the same region and download less data, or\n", + "\n", + "2. Search a larger region while still downloading a manageable amount of data.\n", + "\n", + "In the next lesson, we'll learn about the databased `JOIN` operation and use it to download photometry data from Pan-STARRS." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* When possible, \"move the computation to the data\"; that is, do as much of the work as possible on the database server before downloading the data.\n", + "\n", + "* For most applications, saving data in FITS or HDF5 is better than CSV. FITS and HDF5 are binary formats, so the files are usually smaller, and they store metadata, so you don't lose anything when you read the file back.\n", + "\n", + "* On the other hand, CSV is a \"least common denominator\" format; that is, it can be read by practically any application that works with data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/_build/html/_sources/05_join.ipynb b/_build/html/_sources/05_join.ipynb new file mode 100644 index 0000000..e4d80bf --- /dev/null +++ b/_build/html/_sources/05_join.ipynb @@ -0,0 +1,1301 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 5\n", + "\n", + "This is the fifth in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "Picking up where we left off, the next step in the analysis is to select candidate stars based on photometry. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:\n", + "\n", + "\n", + "\n", + "In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. \n", + "\n", + "By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. We'll reload the candidate stars we identified in the previous notebook.\n", + "\n", + "2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars.\n", + "\n", + "3. We'll write the results to a file for use in the next notebook.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Upload a table to the Gaia server.\n", + "\n", + "* Write ADQL queries involving `JOIN` operations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reloading the data\n", + "\n", + "The following cell downloads the data from the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can read it back." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`candidate_df` is the Pandas DataFrame that contains results from the query in the previous notebook, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "x = candidate_df['phi1']\n", + "y = candidate_df['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same figure we saw at the end of the previous notebook. GD-1 is visible against the background stars, but we will be able to see it more clearly after selecting based on photometry data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting photometry data\n", + "\n", + "The Gaia dataset contains some photometry data, including the variable `bp_rp`, which we used in the original query to select stars with BP - RP color between -0.75 and 2.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.\n", + "\n", + "Now, to select stars with the age and metal richness we expect in GD-1, we will use `g - i` color and apparent `g`-band magnitude, which are available from the Pan-STARRS survey." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Conveniently, the Gaia server provides data from Pan-STARRS as a table in the same database we have been using, so we can access it by making ADQL queries.\n", + "\n", + "In general, looking up a star from the Gaia catalog and finding the corresponding star in the Pan-STARRS catalog is not easy. This kind of cross matching is not always possible, because a star might appear in one catalog and not the other. And even when both stars are present, there might not be a clear one-to-one relationship between stars in the two catalogs.\n", + "\n", + "Fortunately, smart people have worked on this problem, and the Gaia database includes cross-matching tables that suggest a best neighbor in the Pan-STARRS catalog for many stars in the Gaia catalog.\n", + "\n", + "[This document describes the cross matching process](https://gea.esac.esa.int/archive/documentation/GDR2/Catalogue_consolidation/chap_cu9val_cu9val/ssec_cu9xma/sssec_cu9xma_extcat.html). Briefly, it uses a cone search to find possible matches in approximately the right position, then uses attributes like color and magnitude to choose pairs of stars most likely to be identical." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the hard part of cross-matching has been done for us. However, using the results is a little tricky.\n", + "\n", + "But, it is also an opportunity to learn about one of the most important tools for working with databases: \"joining\" tables.\n", + "\n", + "In general, a \"join\" is an operation where you match up records from one table with records from another table using as a \"key\" a piece of information that is common to both tables, usually some kind of ID code.\n", + "\n", + "In this example:\n", + "\n", + "* Stars in the Gaia dataset are identified by `source_id`.\n", + "\n", + "* Stars in the Pan-STARRS dataset are identified by `obj_id`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For each candidate star we have selected so far, we have the `source_id`; the goal is to find the `obj_id` for the same star (we hope) in the Pan-STARRS catalog.\n", + "\n", + "To do that we will:\n", + "\n", + "1. Make a table that contains the `source_id` for each candidate star and upload the table to the Gaia server;\n", + "\n", + "2. Use the `JOIN` operator to look up each `source_id` in the `gaiadr2.panstarrs1_best_neighbour` table, which contains the `obj_id` of the best match for each star in the Gaia catalog; then\n", + "\n", + "3. Use the `JOIN` operator again to look up each `obj_id` in the `panstarrs1_original_valid` table, which contains the Pan-STARRS photometry data we want.\n", + "\n", + "Let's start with the first step, uploading a table." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing a table for uploading\n", + "\n", + "For each candidate star, we want to find the corresponding row in the `gaiadr2.panstarrs1_best_neighbour` table.\n", + "\n", + "In order to do that, we have to:\n", + "\n", + "1. Write the table in a local file as an XML VOTable, which is a format suitable for transmitting a table over a network.\n", + "\n", + "2. Write an ADQL query that refers to the uploaded table.\n", + "\n", + "3. Change the way we submit the job so it uploads the table before running the query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first step is not too difficult because Astropy provides a function called `writeto` that can write a `Table` in `XML`.\n", + "\n", + "[The documentation of this process is here](https://docs.astropy.org/en/stable/io/votable/).\n", + "\n", + "First we have to convert our Pandas `DataFrame` to an Astropy `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astropy.table import Table\n", + "\n", + "candidate_table = Table.from_pandas(candidate_df)\n", + "type(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To write the file, we can use `Table.write` with `format='votable'`, [as described here](https://docs.astropy.org/en/stable/io/unified.html#vo-tables)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "table = candidate_table[['source_id']]\n", + "table.write('candidate_df.xml', format='votable', overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we select a single column from the table, `source_id`.\n", + "We could write the entire table to a file, but that would take longer to transmit over the network, and we really only need one column.\n", + "\n", + "This process, taking a structure like a `Table` and translating it into a form that can be transmitted over a network, is called [serialization](https://en.wikipedia.org/wiki/Serialization).\n", + "\n", + "XML is one of the most common serialization formats. One nice feature is that XML data is plain text, as opposed to binary digits, so you can read the file we just wrote:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n" + ] + } + ], + "source": [ + "!head candidate_df.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "XML is a general format, so different XML files contain different kinds of data. In order to read an XML file, it's not enough to know that it's XML; you also have to know the data format, which is called a [schema](https://en.wikipedia.org/wiki/XML_schema).\n", + "\n", + "In this example, the schema is VOTable; notice that one of the first tags in the file specifies the schema, and even includes the URL where you can get its definition.\n", + "\n", + "So this is an example of a self-documenting format.\n", + "\n", + "A drawback of XML is that it tends to be big, which is why we wrote just the `source_id` column rather than the whole table.\n", + "The size of the file is about 750 KB, so that's not too bad." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 396K Oct 19 14:48 candidate_df.xml\r\n" + ] + } + ], + "source": [ + "!ls -lh candidate_df.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir candidate_df.xml\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** There's a gotcha here we want to warn you about. Why do you think we used double brackets to specify the column we wanted? What happens if you use single brackets?\n", + "\n", + "Run these cells to find out." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table = candidate_table[['source_id']]\n", + "type(table)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.column.Column" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "column = candidate_table['source_id']\n", + "type(column)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# writeto(column, 'candidate_df.xml')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uploading a table\n", + "\n", + "The next step is to upload this table to the Gaia server and use it as part of a query.\n", + "\n", + "[Here's the documentation that explains how to run a query with an uploaded table](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html#synchronous-query-on-an-on-the-fly-uploaded-table).\n", + "\n", + "In the spirit of incremental development and testing, let's start with the simplest possible query." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"SELECT *\n", + "FROM tap_upload.candidate_df\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query downloads all rows and all columns from the uploaded table. The name of the table has two parts: `tap_upload` specifies a table that was uploaded using TAP+ (remember that's the name of the protocol we're using to talk to the Gaia server).\n", + "\n", + "And `candidate_df` is the name of the table, which we get to choose (unlike `tap_upload`, which we didn't get to choose).\n", + "\n", + "Here's how we run the query:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job_async(query=query, \n", + " upload_resource='candidate_df.xml', \n", + " upload_table_name='candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`upload_resource` specifies the name of the file we want to upload, which is the file we just wrote.\n", + "\n", + "`upload_table_name` is the name we assign to this table, which is the name we used in the query.\n", + "\n", + "And here are the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=7346\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
635559124339440000
635860218726658176
635674126383965568
635535454774983040
635497276810313600
635614168640132864
635821843194387840
635551706931167104
635518889086133376
635580294233854464
...
612282738058264960
612485911486166656
612386332668697600
612296172717818624
612250375480101760
612394926899159168
612288854091187712
612428870024913152
612256418500423168
612429144902815104
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "------------------\n", + "635559124339440000\n", + "635860218726658176\n", + "635674126383965568\n", + "635535454774983040\n", + "635497276810313600\n", + "635614168640132864\n", + "635821843194387840\n", + "635551706931167104\n", + "635518889086133376\n", + "635580294233854464\n", + " ...\n", + "612282738058264960\n", + "612485911486166656\n", + "612386332668697600\n", + "612296172717818624\n", + "612250375480101760\n", + "612394926899159168\n", + "612288854091187712\n", + "612428870024913152\n", + "612256418500423168\n", + "612429144902815104" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If things go according to plan, the result should contain the same rows and columns as the uploaded table." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7346, 7346)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(candidate_table), len(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(candidate_table['source_id']) == set(results['source_id'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we uploaded a table and then downloaded it again, so that's not too useful.\n", + "\n", + "But now that we can upload a table, we can join it with other tables on the Gaia server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joining with an uploaded table\n", + "\n", + "Here's the first example of a query that contains a `JOIN` clause." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT *\n", + "FROM gaiadr2.panstarrs1_best_neighbour as best\n", + "JOIN tap_upload.candidate_df as candidate_df\n", + "ON best.source_id = candidate_df.source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's break that down one clause at a time:\n", + "\n", + "* `SELECT *` means we will download all columns from both tables.\n", + "\n", + "* `FROM gaiadr2.panstarrs1_best_neighbour as best` means that we'll get the columns from the Pan-STARRS best neighbor table, which we'll refer to using the short name `best`.\n", + "\n", + "* `JOIN tap_upload.candidate_df as candidate_df` means that we'll also get columns from the uploaded table, which we'll refer to using the short name `candidate_df`.\n", + "\n", + "* `ON best.source_id = candidate_df.source_id` specifies that we will use `source_id ` to match up the rows from the two tables.\n", + "\n", + "Here's the [documentation of the best neighbor table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_crossmatches/ssec_dm_panstarrs1_best_neighbour.html).\n", + "\n", + "Let's run the query:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "job1 = Gaia.launch_job_async(query=query1, \n", + " upload_resource='candidate_df.xml', \n", + " upload_table_name='candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And get the results." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3724\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2
arcsec
int64int64float64int32int16int16int16int64
6358602187266581761309113851876713490.0536670358954670841015635860218726658176
6356741263839655681308313884284887200.0388102681415775161015635674126383965568
6355354547749830401306313783776573690.0343230288289910761015635535454774983040
6354972768103136001308113804456319300.047202554132500061015635497276810313600
6356141686401328641305713959221401350.0203041897099641431015635614168640132864
6355986079743697921303413920912795130.0365246268534030541015635598607974369792
6357376618354965761310013993335021360.0366268278207166061015635737661835496576
6358509458927486721320113986549341470.0211787423933783961015635850945892748672
6356005321197136641304213922858936230.045188209150430151015635600532119713664
........................
6122417812491246081297513437559955610.042357158300018151015612241781249124608
6123321473614430721301413414585387770.022652498590129771015612332147361443072
6124267440168024321305213468524656560.032476530099618431015612426744016802432
6123317393403417601301113412177938390.0360642408180257351015612331739340341760
6122827380582649601297413404459335190.0252932373534968981015612282738058264960
6123863326686976001303513545702197740.020103160014030861015612386332668697600
6122961727178186241296913380061687800.0512642120258362051015612296172717818624
6122503754801017601297413464758974640.0317837403475309051015612250375480101760
6123949268991591681305813551997517950.040191748305466981015612394926899159168
6122564185004231681299313490752973100.0092427896695131561015612256418500423168
" + ], + "text/plain": [ + "\n", + " source_id original_ext_source_id ... source_id_2 \n", + " ... \n", + " int64 int64 ... int64 \n", + "------------------ ---------------------- ... ------------------\n", + "635860218726658176 130911385187671349 ... 635860218726658176\n", + "635674126383965568 130831388428488720 ... 635674126383965568\n", + "635535454774983040 130631378377657369 ... 635535454774983040\n", + "635497276810313600 130811380445631930 ... 635497276810313600\n", + "635614168640132864 130571395922140135 ... 635614168640132864\n", + "635598607974369792 130341392091279513 ... 635598607974369792\n", + "635737661835496576 131001399333502136 ... 635737661835496576\n", + "635850945892748672 132011398654934147 ... 635850945892748672\n", + "635600532119713664 130421392285893623 ... 635600532119713664\n", + " ... ... ... ...\n", + "612241781249124608 129751343755995561 ... 612241781249124608\n", + "612332147361443072 130141341458538777 ... 612332147361443072\n", + "612426744016802432 130521346852465656 ... 612426744016802432\n", + "612331739340341760 130111341217793839 ... 612331739340341760\n", + "612282738058264960 129741340445933519 ... 612282738058264960\n", + "612386332668697600 130351354570219774 ... 612386332668697600\n", + "612296172717818624 129691338006168780 ... 612296172717818624\n", + "612250375480101760 129741346475897464 ... 612250375480101760\n", + "612394926899159168 130581355199751795 ... 612394926899159168\n", + "612256418500423168 129931349075297310 ... 612256418500423168" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This table contains all of the columns from the best neighbor table, plus the single column from the uploaded table." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['source_id',\n", + " 'original_ext_source_id',\n", + " 'angular_distance',\n", + " 'number_of_neighbours',\n", + " 'number_of_mates',\n", + " 'best_neighbour_multiplicity',\n", + " 'gaia_astrometric_params',\n", + " 'source_id_2']" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1.colnames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because one of the column names appears in both tables, the second instance of `source_id` has been appended with the suffix `_2`.\n", + "\n", + "The length of the results table is about 2000, which means we were not able to find matches for all stars in the list of candidate_df." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3724" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get more information about the matching process, we can inspect `best_neighbour_multiplicity`, which indicates for each star in Gaia how many stars in Pan-STARRS are equally likely matches.\n", + "\n", + "For this kind of data exploration, we'll convert a column from the table to a Pandas `Series` so we can use `value_counts`, which counts the number of times each value appears in a `Series`, like a histogram." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 3724\n", + "dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "nn = pd.Series(results1['best_neighbour_multiplicity'])\n", + "nn.value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result shows that `1` is the only value in the `Series`, appearing xxx times.\n", + "\n", + "That means that in every case where a match was found, the matching algorithm identified a single neighbor as the most likely match.\n", + "\n", + "Similarly, `number_of_mates` indicates the number of other stars in Gaia that match with the same star in Pan-STARRS." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 3724\n", + "dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nm = pd.Series(results1['number_of_mates'])\n", + "nm.value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this set of candidate_df, almost all of the stars we've selected from Pan-STARRS are only matched with a single star in the Gaia catalog.\n", + "\n", + "**Detail** The table also contains `number_of_neighbors` which is the number of stars in Pan-STARRS that match in terms of position, before using other critieria to choose the most likely match." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting the photometry data\n", + "\n", + "The most important column in `results1` is `original_ext_source_id` which is the `obj_id` we will use to look up the likely matches in Pan-STARRS to get photometry data.\n", + "\n", + "The process is similar to what we just did to look up the matches. We will:\n", + "\n", + "1. Make a table that contains `source_id` and `original_ext_source_id`.\n", + "\n", + "2. Write the table to an XML VOTable file.\n", + "\n", + "3. Write a query that joins the uploaded table with `gaiadr2.panstarrs1_original_valid` and selects the photometry data we want.\n", + "\n", + "4. Run the query using the uploaded table.\n", + "\n", + "Since we've done everything here before, we'll do these steps as an exercise.\n", + "\n", + "**Exercise:** Select `source_id` and `original_ext_source_id` from `results1` and write the resulting table as a file named `external.xml`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "table = results1[['source_id', 'original_ext_source_id']]\n", + "table.write('external.xml', format='votable', overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use `!head` to confirm that the file exists and contains an XML VOTable." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + "
\r\n", + " \r\n", + " \r\n", + " Unique Gaia source identifier\r\n", + " \r\n" + ] + } + ], + "source": [ + "!head external.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of the Pan-STARRS table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_external_catalogues/ssec_dm_panstarrs1_original_valid.html) and make note of `obj_id`, which contains the object IDs we'll use to find the rows we want.\n", + "\n", + "Write a query that uses each value of `original_ext_source_id` from the uploaded table to find a row in `gaiadr2.panstarrs1_original_valid` with the same value in `obj_id`, and select all columns from both tables.\n", + "\n", + "Suggestion: Develop and test your query incrementally. For example:\n", + "\n", + "1. Write a query that downloads all columns from the uploaded table. Test to make sure we can read the uploaded table.\n", + "\n", + "2. Write a query that downloads the first 10 rows from `gaiadr2.panstarrs1_original_valid`. Test to make sure we can access Pan-STARRS data.\n", + "\n", + "3. Write a query that joins the two tables and selects all columns. Test that the join works as expected.\n", + "\n", + "\n", + "As a bonus exercise, write a query that joins the two tables and selects just the columns we need:\n", + "\n", + "* `source_id` from the uploaded table\n", + "\n", + "* `g_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid`\n", + "\n", + "* `i_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid`\n", + "\n", + "Hint: When you select a column from a join, you have to specify which table the column is in." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT *\n", + "FROM tap_upload.external as external\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT TOP 10 *\n", + "FROM gaiadr2.panstarrs1_original_valid\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT *\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT\n", + "external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT\n", + "external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\n" + ] + } + ], + "source": [ + "print(query2)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query=query2, \n", + " upload_resource='external.xml', \n", + " upload_table_name='external')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3724\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idg_mean_psf_magi_mean_psf_mag
mag
int64float64float64
63586021872665817617.897800445556617.5174007415771
63567412638396556819.287300109863317.6781005859375
63553545477498304016.923799514770516.478099822998
63549727681031360019.924200057983418.3339996337891
63561416864013286416.151599884033214.6662998199463
63559860797436979216.522399902343816.1375007629395
63573766183549657614.503299713134813.9849004745483
63585094589274867216.517499923706116.0450000762939
63560053211971366420.450599670410219.5177001953125
.........
61224178124912460820.234399795532218.6518001556396
61233214736144307221.384899139404320.3076000213623
61242674401680243217.828100204467817.4281005859375
61233173934034176021.865699768066419.5223007202148
61228273805826496022.515199661254919.9743995666504
61238633266869760019.379299163818417.9923000335693
61229617271781862417.494400024414116.926700592041
61225037548010176015.333000183105514.6280002593994
61239492689915916816.441400527954115.8212003707886
61225641850042316820.871599197387719.9612007141113
" + ], + "text/plain": [ + "\n", + " source_id g_mean_psf_mag i_mean_psf_mag \n", + " mag \n", + " int64 float64 float64 \n", + "------------------ ---------------- ----------------\n", + "635860218726658176 17.8978004455566 17.5174007415771\n", + "635674126383965568 19.2873001098633 17.6781005859375\n", + "635535454774983040 16.9237995147705 16.478099822998\n", + "635497276810313600 19.9242000579834 18.3339996337891\n", + "635614168640132864 16.1515998840332 14.6662998199463\n", + "635598607974369792 16.5223999023438 16.1375007629395\n", + "635737661835496576 14.5032997131348 13.9849004745483\n", + "635850945892748672 16.5174999237061 16.0450000762939\n", + "635600532119713664 20.4505996704102 19.5177001953125\n", + " ... ... ...\n", + "612241781249124608 20.2343997955322 18.6518001556396\n", + "612332147361443072 21.3848991394043 20.3076000213623\n", + "612426744016802432 17.8281002044678 17.4281005859375\n", + "612331739340341760 21.8656997680664 19.5223007202148\n", + "612282738058264960 22.5151996612549 19.9743995666504\n", + "612386332668697600 19.3792991638184 17.9923000335693\n", + "612296172717818624 17.4944000244141 16.926700592041\n", + "612250375480101760 15.3330001831055 14.6280002593994\n", + "612394926899159168 16.4414005279541 15.8212003707886\n", + "612256418500423168 20.8715991973877 19.9612007141113" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Challenge exercise**\n", + "\n", + "Do both joins in one query.\n", + "\n", + "There's an [example here](https://github.com/smoh/Getting-started-with-Gaia/blob/master/gaia-adql-snippets.md) you could start with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Write the data\n", + "\n", + "Since we have the data in an Astropy `Table`, let's store it in a FITS file." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_photo.fits'\n", + "results2.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can check that the file exists, and see how big it is." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 96K Oct 19 14:49 gd1_photo.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_photo.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At around 175 KB, it is smaller than some of the other files we've been working with.\n", + "\n", + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_photo.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we used database `JOIN` operations to select photometry data for the stars we've identified as candidates to be in GD-1.\n", + "\n", + "In the next notebook, we'll use this data for a second round of selection, identifying stars that have photometry data consistent with GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practice\n", + "\n", + "* Use `JOIN` operations to combine data from multiple tables in a databased, using some kind of identifier to match up records from one table with records from another.\n", + "\n", + "* This is another example of a practice we saw in the previous notebook, moving the computation to the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/_build/html/_sources/06_photo.ipynb b/_build/html/_sources/06_photo.ipynb new file mode 100644 index 0000000..1375ac2 --- /dev/null +++ b/_build/html/_sources/06_photo.ipynb @@ -0,0 +1,1372 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 6\n", + "\n", + "This is the sixth in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the previous lesson we downloaded photometry data from Pan-STARRS, which is available from the same server we've been using to get Gaia data. \n", + "\n", + "The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:\n", + "\n", + "\n", + "\n", + "In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. \n", + "\n", + "By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. We'll reload the data from the previous notebook and make a color-magnitude diagram.\n", + "\n", + "2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect.\n", + "\n", + "3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Matplotlib to specify a `Polygon` and determine which points fall inside it.\n", + "\n", + "* Use Pandas to merge data from multiple `DataFrames`, much like a database `JOIN` operation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "The following cell downloads the photometry data we created in the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_photo.fits'\n", + "filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(filepath+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can read the data back into an Astropy `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from astropy.table import Table\n", + "\n", + "photo_table = Table.read(filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting photometry data\n", + "\n", + "Now that we have photometry data from Pan-STARRS, we can replicate the [color-magnitude diagram](https://en.wikipedia.org/wiki/Galaxy_color%E2%80%93magnitude_diagram) from the original paper:\n", + "\n", + "\n", + "\n", + "The y-axis shows the apparent magnitude of each source with the [g filter](https://en.wikipedia.org/wiki/Photometric_system).\n", + "\n", + "The x-axis shows the difference in apparent magnitude between the g and i filters, which indicates color.\n", + "\n", + "Stars with lower values of (g-i) are brighter in g-band than in i-band, compared to other stars, which means they are bluer.\n", + "\n", + "Stars in the lower-left quadrant of this diagram are less bright and less metallic than the others, which means they are [likely to be older](http://spiff.rit.edu/classes/ladder/lectures/ordinary_stars/ordinary.html).\n", + "\n", + "Since we expect the stars in GD-1 to be older than the background stars, the stars in the lower-left are more likely to be in GD-1." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_cmd(table):\n", + " \"\"\"Plot a color magnitude diagram.\n", + " \n", + " table: Table or DataFrame with photometry data\n", + " \"\"\"\n", + " y = table['g_mean_psf_mag']\n", + " x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlim([0, 1.5])\n", + " plt.ylim([14, 22])\n", + " plt.gca().invert_yaxis()\n", + "\n", + " plt.ylabel('$g_0$')\n", + " plt.xlabel('$(g-i)_0$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`plot_cmd` uses a new function, `invert_yaxis`, to invert the `y` axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness.\n", + "\n", + "`invert_yaxis` is a little different from the other functions we've used. You can't call it like this:\n", + "\n", + "```\n", + "plt.invert_yaxis() # doesn't work\n", + "```\n", + "\n", + "You have to call it like this:\n", + "\n", + "```\n", + "plt.gca().invert_yaxis() # works\n", + "```\n", + "\n", + "`gca` stands for \"get current axis\". It returns an object that represents the axes of the current figure, and that object provides `invert_yaxis`.\n", + "\n", + "**In case anyone asks:** The most likely reason for this inconsistency in the interface is that `invert_yaxis` is a lesser-used function, so it's not made available at the top level of the interface." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don't have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD-1.\n", + "\n", + "The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD-1 or not.\n", + "\n", + "As a simplification, we'll choose a boundary by eye that seems to contain the overdense region." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Drawing a polygon\n", + "\n", + "Matplotlib provides a function called `ginput` that lets us click on the figure and make a list of coordinates.\n", + "\n", + "It's a little tricky to use `ginput` in a Jupyter notebook. \n", + "Before calling `plt.ginput` we have to tell Matplotlib to use `TkAgg` to draw the figure in a new window.\n", + "\n", + "When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib as mpl\n", + "\n", + "if IN_COLAB:\n", + " coords = None\n", + "else:\n", + " mpl.use('TkAgg')\n", + " plot_cmd(photo_table)\n", + " coords = plt.ginput(10)\n", + " mpl.use('agg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The argument to `ginput` is the number of times the user has to click on the figure.\n", + "\n", + "The result from `ginput` is a list of coordinate pairs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0.2150537634408602, 17.548197203826344),\n", + " (0.3897849462365591, 18.94628403237675),\n", + " (0.5376344086021505, 19.902869757174393),\n", + " (0.7034050179211468, 20.601913171449596),\n", + " (0.8288530465949819, 21.300956585724798),\n", + " (0.6630824372759856, 21.52170713760118),\n", + " (0.4301075268817204, 20.785871964679913),\n", + " (0.27329749103942647, 19.71891096394408),\n", + " (0.17473118279569888, 18.688741721854306),\n", + " (0.17473118279569888, 17.95290654893304)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coords" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If `ginput` doesn't work for you, you could use the following coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "if coords is None:\n", + " coords = [(0.2, 17.5), \n", + " (0.2, 19.5), \n", + " (0.65, 22),\n", + " (0.75, 21),\n", + " (0.4, 19),\n", + " (0.4, 17.5)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of `x` coordinates and a sequence of `y` coordinates. The NumPy function `transpose` does what we want. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.21505376, 0.38978495, 0.53763441, 0.70340502, 0.82885305,\n", + " 0.66308244, 0.43010753, 0.27329749, 0.17473118, 0.17473118]),\n", + " array([17.5481972 , 18.94628403, 19.90286976, 20.60191317, 21.30095659,\n", + " 21.52170714, 20.78587196, 19.71891096, 18.68874172, 17.95290655]))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "xs, ys = np.transpose(coords)\n", + "xs, ys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To display the polygon, we'll draw the figure again and use `plt.plot` to draw the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)\n", + "plt.plot(xs, ys);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again.\n", + "\n", + "If you want a polygon with more points (or fewer), you can change the argument to `ginput`.\n", + "\n", + "The polygon does not have to be \"closed\". When we use this polygon in the next section, the last and first points will be connected by a straight line.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Which points are in the polygon?\n", + "\n", + "Matplotlib provides a `Path` object that we can use to check which points fall in the polygon we selected.\n", + "\n", + "Here's how we make a `Path` using a list of coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Path(array([[ 0.21505376, 17.5481972 ],\n", + " [ 0.38978495, 18.94628403],\n", + " [ 0.53763441, 19.90286976],\n", + " [ 0.70340502, 20.60191317],\n", + " [ 0.82885305, 21.30095659],\n", + " [ 0.66308244, 21.52170714],\n", + " [ 0.43010753, 20.78587196],\n", + " [ 0.27329749, 19.71891096],\n", + " [ 0.17473118, 18.68874172],\n", + " [ 0.17473118, 17.95290655]]), None)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from matplotlib.path import Path\n", + "\n", + "path = Path(coords)\n", + "path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Path` provides `contains_points`, which figures out which points are inside the polygon.\n", + "\n", + "To test it, we'll create a list with two points, one inside the polygon and one outside." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "points = [(0.4, 20), \n", + " (0.4, 30)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can make sure `contains_points` does what we expect." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, False])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside = path.contains_points(points)\n", + "inside" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an array of Boolean values.\n", + "\n", + "We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reloading the data\n", + "\n", + "Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(filepath+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`candidate_df` is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Merging photometry data\n", + "\n", + "Before we select stars based on photometry data, we have to solve two problems:\n", + "\n", + "1. We only have Pan-STARRS data for some stars in `candidate_df`.\n", + "\n", + "2. Even for the stars where we have Pan-STARRS data in `photo_table`, some photometry data is missing.\n", + "\n", + "We will solve these problems in two step:\n", + "\n", + "1. We'll merge the data from `candidate_df` and `photo_table` into a single Pandas `DataFrame`.\n", + "\n", + "2. We'll use Pandas functions to deal with missing data.\n", + "\n", + "`candidate_df` is already a `DataFrame`, but `results` is an Astropy `Table`. Let's convert it to Pandas:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id\n", + "g_mean_psf_mag\n", + "i_mean_psf_mag\n" + ] + } + ], + "source": [ + "photo_df = photo_table.to_pandas()\n", + "\n", + "for colname in photo_df.columns:\n", + " print(colname)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we want to combine `candidate_df` and `photo_df` into a single table, using `source_id` to match up the rows.\n", + "\n", + "You might recognize this task; it's the same as the JOIN operation in ADQL/SQL.\n", + "\n", + "Pandas provides a function called `merge` that does what we want. Here's how we use it." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2g_mean_psf_magi_mean_psf_mag
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633NaNNaN
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.74877917.897817.517401
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.74180019.287317.678101
3635535454774983040137.83775218.864007-4.335041-14.4923090.3145140.102775NaN-59.785300-1.594569-9.357536-1.21849216.923816.478100
4635497276810313600138.04451619.009471-7.172931-12.2914990.4254040.337689NaN-59.557744-1.682147-9.0008312.33440719.924218.334000
\n", + "" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 0.791393 \n", + "1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 0.307456 \n", + "2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 0.779463 \n", + "3 635535454774983040 137.837752 18.864007 -4.335041 -14.492309 0.314514 \n", + "4 635497276810313600 138.044516 19.009471 -7.172931 -12.291499 0.425404 \n", + "\n", + " parallax_error radial_velocity phi1 phi2 pm_phi1 pm_phi2 \\\n", + "0 0.271754 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 0.199466 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 0.223692 NaN -59.133391 -2.306901 -7.560608 -0.741800 \n", + "3 0.102775 NaN -59.785300 -1.594569 -9.357536 -1.218492 \n", + "4 0.337689 NaN -59.557744 -1.682147 -9.000831 2.334407 \n", + "\n", + " g_mean_psf_mag i_mean_psf_mag \n", + "0 NaN NaN \n", + "1 17.8978 17.517401 \n", + "2 19.2873 17.678101 \n", + "3 16.9238 16.478100 \n", + "4 19.9242 18.334000 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged = pd.merge(candidate_df, \n", + " photo_df, \n", + " on='source_id', \n", + " how='left')\n", + "merged.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first argument is the \"left\" table, the second argument is the \"right\" table, and the keyword argument `on='source_id'` specifies a column to use to match up the rows.\n", + "\n", + "The argument `how='left'` means that the result should have all rows from the left table, even if some of them don't match up with a row in the right table.\n", + "\n", + "If you are interested in the other options for `how`, you can [read the documentation of `merge`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html).\n", + "\n", + "You can also do different types of join in ADQL/SQL; [you can read about that here](https://www.w3schools.com/sql/sql_join.asp).\n", + "\n", + "The result is a `DataFrame` that contains the same number of rows as `candidate_df`. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7346, 3724, 7346)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(candidate_df), len(photo_df), len(merged)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And all columns from both tables." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id\n", + "ra\n", + "dec\n", + "pmra\n", + "pmdec\n", + "parallax\n", + "parallax_error\n", + "radial_velocity\n", + "phi1\n", + "phi2\n", + "pm_phi1\n", + "pm_phi2\n", + "g_mean_psf_mag\n", + "i_mean_psf_mag\n" + ] + } + ], + "source": [ + "for colname in merged.columns:\n", + " print(colname)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail** You might notice that Pandas also provides a function called `join`; it does almost the same thing, but the interface is slightly different. We think `merge` is a little easier to use, so that's what we chose. It's also more consistent with JOIN in SQL, so if you learn how to use `pd.merge`, you are also learning how to use SQL JOIN.\n", + "\n", + "Also, someone might ask why we have to use Pandas to do this join; why didn't we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Missing data\n", + "\n", + "Let's add columns to the merged table for magnitude and color." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "merged['mag'] = merged['g_mean_psf_mag']\n", + "merged['color'] = merged['g_mean_psf_mag'] - merged['i_mean_psf_mag']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These columns contain the special value `NaN` where we are missing data.\n", + "\n", + "We can use `notnull` to see which rows contain value data, that is, not null values." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 True\n", + "2 True\n", + "3 True\n", + "4 True\n", + " ... \n", + "7341 True\n", + "7342 False\n", + "7343 False\n", + "7344 True\n", + "7345 False\n", + "Name: color, Length: 7346, dtype: bool" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged['color'].notnull()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And `sum` to count the number of valid values." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3724" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged['color'].notnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For scientific purposes, it's not obvious what we should do with candidate stars if we don't have photometry data. Should we give them the benefit of the doubt or leave them out?\n", + "\n", + "In part the answer depends on the goal: are we trying to identify more stars that might be in GD-1, or a smaller set of stars that have higher probability?\n", + "\n", + "In the next section, we'll leave them out, but you can experiment with the alternative." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting based on photometry\n", + "\n", + "Now let's see how many of these points are inside the polygon we chose.\n", + "\n", + "We can use a list of column names to select `color` and `mag`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
colormag
0NaNNaN
10.380417.8978
21.609219.2873
30.445716.9238
41.590219.9242
\n", + "
" + ], + "text/plain": [ + " color mag\n", + "0 NaN NaN\n", + "1 0.3804 17.8978\n", + "2 1.6092 19.2873\n", + "3 0.4457 16.9238\n", + "4 1.5902 19.9242" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "points = merged[['color', 'mag']]\n", + "points.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `DataFrame` that can be treated as a sequence of coordinates, so we can pass it to `contains_points`:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([False, False, False, ..., False, False, False])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside = path.contains_points(points)\n", + "inside" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a Boolean array. We can use `sum` to see how many stars fall in the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "496" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `inside` as a mask to select stars that fall inside the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "selected = merged[inside]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's make a color-magnitude plot one more time, highlighting the selected stars with green `x` marks." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)\n", + "plt.plot(xs, ys)\n", + "\n", + "plt.plot(selected['color'], selected['mag'], 'gx');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD-1.\n", + "\n", + "Finally, we can plot the coordinates of the selected stars:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,2.5))\n", + "\n", + "x = selected['phi1']\n", + "y = selected['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)')\n", + "\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example includes two new Matplotlib commands:\n", + "\n", + "* `figure` creates the figure. In previous examples, we didn't have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like `figsize`, which sets the size of the figure.\n", + "\n", + "* `axis` with the parameter `equal` sets up the axes so a unit is the same size along the `x` and `y` axes.\n", + "\n", + "In an example like this, where `x` and `y` represent coordinates in space, equal axes ensures that the distance between points is represented accurately. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Write the data\n", + "\n", + "Let's write the merged DataFrame to a file." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_merged.hdf5'\n", + "\n", + "merged.to_hdf(filename, 'merged')\n", + "selected.to_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 2.0M Oct 19 17:21 gd1_merged.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_merged.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_merged.hdf5\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save the polygon\n", + "\n", + "[Reproducibile research](https://en.wikipedia.org/wiki/Reproducibility#Reproducible_research) is \"the idea that ... the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research.\"\n", + "\n", + "This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis.\n", + "\n", + "However, when we used `ginput` to define a polygon by hand, we introduced a non-reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline.\n", + "\n", + "Since `coords` is a NumPy array, we can't use `to_hdf` to save it in a file. But we can convert it to a Pandas `DataFrame` and save that.\n", + "\n", + "As an alternative, we could use [PyTables](http://www.pytables.org/index.html), which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let's take advantage of Pandas." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "coords_df = pd.DataFrame(coords)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_polygon.hdf5'\n", + "coords_df.to_hdf(filename, 'coords_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can read it back like this." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "coords2_df = pd.read_hdf(filename, 'coords_df')\n", + "coords2 = coords2_df.to_numpy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And verify that the data we read back is the same." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.all(coords2 == coords)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan-STARRS.\n", + "\n", + "We drew a color-magnitude diagram and used it to identify stars we think are likely to be in GD-1.\n", + "\n", + "Then we used a Pandas `merge` operation to combine the data into a single `DataFrame`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you want to perform something like a database `JOIN` operation with data that is in a Pandas `DataFrame`, you can use the `join` or `merge` function. In many cases, `merge` is easier to use because the arguments are more like SQL.\n", + "\n", + "* Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes.\n", + "\n", + "* Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it's not just for making figures.\n", + "\n", + "* Be sure to record every element of the data analysis pipeline that would be needed to replicate the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/07_plot.ipynb b/_build/html/_sources/07_plot.ipynb new file mode 100644 index 0000000..77778eb --- /dev/null +++ b/_build/html/_sources/07_plot.ipynb @@ -0,0 +1,1174 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 7\n", + "\n", + "This is the seventh in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the previous notebook we selected photometry data from Pan-STARRS and used it to identify stars we think are likely to be in GD-1\n", + "\n", + "In this notebook, we'll take the results from previous lessons and use them to make a figure that tells a compelling scientific story." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly.\n", + "\n", + "2. The we'll see several ways to customize figures to make them more appealing and effective.\n", + "\n", + "3. Finally, we'll see how to make a figure with multiple panels or subplots.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Design a figure that tells a compelling story.\n", + "\n", + "* Use Matplotlib features to customize the appearance of figures.\n", + "\n", + "* Generate a figure with multiple subplots." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Making Figures That Tell a Story\n", + "\n", + "So far the figure we've made have been \"quick and dirty\". Mostly we have used Matplotlib's default style, although we have adjusted a few parameters, like `markersize` and `alpha`, to improve legibility.\n", + "\n", + "Now that the analysis is done, it's time to think more about:\n", + "\n", + "1. Making professional-looking figures that are ready for publication, and\n", + "\n", + "2. Making figures that communicate a scientific result clearly and compellingly.\n", + "\n", + "Not necessarily in that order." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start by reviewing Figure 1 from the original paper. We've seen the individual panels, but now let's look at the whole thing, along with the caption:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Think about the following questions:\n", + "\n", + "1. What is the primary scientific result of this work?\n", + "\n", + "2. What story is this figure telling?\n", + "\n", + "3. In the design of this figure, can you identify 1-2 choices the authors made that you think are effective? Think about big-picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface.\n", + "\n", + "4. Can you identify 1-2 elements that could be improved, or that you might have done differently?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some topics that might come up in this discussion:\n", + "\n", + "1. The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD-1 in \"unprecedented detail\".\n", + "\n", + "2. The figure documents the selection process as a sequence of steps. Reading right-to-left, top-to-bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result.\n", + "\n", + "3. It's mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned.\n", + "\n", + "4. Since the panels represent a sequence, it might be better to arrange them left-to-right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting GD-1\n", + "\n", + "Let's start with the panel in the lower left. The following cell reloads the data." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_merged.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "selected = pd.read_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_second_selection(df):\n", + " x = df['phi1']\n", + " y = df['phi2']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)\n", + "\n", + " plt.xlabel('$\\phi_1$ [deg]')\n", + " plt.ylabel('$\\phi_2$ [deg]')\n", + " plt.title('Proper motion + photometry selection', fontsize='medium')\n", + "\n", + " plt.axis('equal')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,2.5))\n", + "plot_second_selection(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Annotations\n", + "\n", + "The figure in the paper uses three other features to present the results more clearly and compellingly:\n", + "\n", + "* A vertical dashed line to distinguish the previously undetected region of GD-1,\n", + "\n", + "* A label that identifies the new region, and\n", + "\n", + "* Several annotations that combine text and arrows to identify features of GD-1.\n", + "\n", + "As an exercise, choose any or all of these features and add them to the figure:\n", + "\n", + "* To draw vertical lines, see [`plt.vlines`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.vlines.html) and [`plt.axvline`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.axvline.html#matplotlib.pyplot.axvline).\n", + "\n", + "* To add text, see [`plt.text`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.text.html).\n", + "\n", + "* To add an annotation with text and an arrow, see [plt.annotate]().\n", + "\n", + "And here is some [additional information about text and arrows](https://matplotlib.org/3.3.1/tutorials/text/annotations.html#plotting-guide-annotation)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# plt.axvline(-55, ls='--', color='gray', \n", + "# alpha=0.4, dashes=(6,4), lw=2)\n", + "# plt.text(-60, 5.5, 'Previously\\nundetected', \n", + "# fontsize='small', ha='right', va='top');\n", + "\n", + "# arrowprops=dict(color='gray', shrink=0.05, width=1.5, \n", + "# headwidth=6, headlength=8, alpha=0.4)\n", + "\n", + "# plt.annotate('Spur', xy=(-33, 2), xytext=(-35, 5.5),\n", + "# arrowprops=arrowprops,\n", + "# fontsize='small')\n", + "\n", + "# plt.annotate('Gap', xy=(-22, -1), xytext=(-25, -5.5),\n", + "# arrowprops=arrowprops,\n", + "# fontsize='small')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Customization\n", + "\n", + "Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties.\n", + "\n", + "There are several ways to override these defaults and customize your figures:\n", + "\n", + "* To customize only the current figure, you can call functions like `tick_params`, which we'll demonstrate below.\n", + "\n", + "* To customize all figures in a notebook, you use `rcParams`.\n", + "\n", + "* To override more than a few defaults at the same time, you can use a style sheet." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes.\n", + "\n", + "To change this behavior, you can use `gca()` to get the current axes and `tick_params` to change the settings.\n", + "\n", + "Here's how you can put the ticks on the inside of the figure:\n", + "\n", + "```\n", + "plt.gca().tick_params(direction='in')\n", + "```\n", + "\n", + "**Exercise:** Read the documentation of [`tick_params`](https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.tick_params.html) and use it to put ticks on the top and right sides of the axes." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# plt.gca().tick_params(top=True, right=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## rcParams\n", + "\n", + "If you want to make a customization that applies to all figures in a notebook, you can use `rcParams`.\n", + "\n", + "Here's an example that reads the current font size from `rcParams`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10.0" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plt.rcParams['font.size']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And sets it to a new value:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['font.size'] = 14" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Plot the previous figure again, and see what font sizes have changed. Look up any other element of `rcParams`, change its value, and check the effect on the figure." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you find yourself making the same customizations in several notebooks, you can put changes to `rcParams` in a `matplotlibrc` file, [which you can read about here](https://matplotlib.org/3.3.1/tutorials/introductory/customizing.html#customizing-with-matplotlibrc-files)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Style sheets\n", + "\n", + "The `matplotlibrc` file is read when you import Matplotlib, so it is not easy to switch from one set of options to another.\n", + "\n", + "The solution to this problem is style sheets, [which you can read about here](https://matplotlib.org/3.1.1/tutorials/introductory/customizing.html).\n", + "\n", + "Matplotlib provides a set of predefined style sheets, or you can make your own.\n", + "\n", + "The following cell displays a list of style sheets installed on your system." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Solarize_Light2',\n", + " '_classic_test_patch',\n", + " 'bmh',\n", + " 'classic',\n", + " 'dark_background',\n", + " 'fast',\n", + " 'fivethirtyeight',\n", + " 'ggplot',\n", + " 'grayscale',\n", + " 'seaborn',\n", + " 'seaborn-bright',\n", + " 'seaborn-colorblind',\n", + " 'seaborn-dark',\n", + " 'seaborn-dark-palette',\n", + " 'seaborn-darkgrid',\n", + " 'seaborn-deep',\n", + " 'seaborn-muted',\n", + " 'seaborn-notebook',\n", + " 'seaborn-paper',\n", + " 'seaborn-pastel',\n", + " 'seaborn-poster',\n", + " 'seaborn-talk',\n", + " 'seaborn-ticks',\n", + " 'seaborn-white',\n", + " 'seaborn-whitegrid',\n", + " 'tableau-colorblind10']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plt.style.available" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `seaborn-paper`, `seaborn-talk` and `seaborn-poster` are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters.\n", + "\n", + "To use any of these style sheets, run `plt.style.use` like this:\n", + "\n", + "```\n", + "plt.style.use('fivethirtyeight')\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The style sheet you choose will affect the appearance of all figures you plot after calling `use`, unless you override any of the options or call `use` again.\n", + "\n", + "**Exercise:** Choose one of the styles on the list and select it by calling `use`. Then go back and plot one of the figures above and see what effect it has." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you can't find a style sheet that's exactly what you want, you can make your own. This repository includes a style sheet called `az-paper-twocol.mplstyle`, with customizations chosen by Azalee Bostroem for publication in astronomy journals.\n", + "\n", + "The following cell downloads the style sheet." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'az-paper-twocol.mplstyle'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can use it like this:\n", + "\n", + "```\n", + "plt.style.use('./az-paper-twocol.mplstyle')\n", + "```\n", + "\n", + "The prefix `./` tells Matplotlib to look for the file in the current directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command:\n", + "\n", + "```\n", + "import matplotlib as mpl\n", + "\n", + "mpl.get_configdir()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LaTeX fonts\n", + "\n", + "When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses [`mathtext`](https://matplotlib.org/3.1.0/tutorials/text/mathtext.html) to typeset them. `mathtext` uses the same syntax as LaTeX, but it provides only a subset of its features.\n", + "\n", + "If you need features that are not provided by `mathtext`, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX.\n", + "\n", + "In `matplotlibrc` or in a style sheet, you can add the following line:\n", + "\n", + "```\n", + "text.usetex : true\n", + "```\n", + "\n", + "Or in a notebook you can run the following code.\n", + "\n", + "```\n", + "plt.rcParams['text.usetex'] = True\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['text.usetex'] = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you go back and draw the figure again, you should see the difference.\n", + "\n", + "If you get an error message like\n", + "\n", + "```\n", + "LaTeX Error: File `type1cm.sty' not found.\n", + "```\n", + "\n", + "You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages `texlive-latex-extra` or `cm-super` might be what you need. [See here for more help with this](https://stackoverflow.com/questions/11354149/python-unable-to-render-tex-in-matplotlib).\n", + "\n", + "In case you are curious, `cm` stands for [Computer Modern](https://en.wikipedia.org/wiki/Computer_Modern), the font LaTeX uses to typeset math." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multiple panels\n", + "\n", + "So far we've been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as \"subplots\".\n", + "\n", + "Confusingly, Matplotlib provides *three* functions for making figures like this: `subplot`, `subplots`, and `subplot2grid`.\n", + "\n", + "* [`subplot`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot.html) is simple and similar to MATLAB, so if you are familiar with that interface, you might like `subplot`\n", + "\n", + "* [`subplots`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplots.html) is more object-oriented, which some people prefer.\n", + "\n", + "* [`subplot2grid`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html) is most convenient if you want to control the relative sizes of the subplots. \n", + "\n", + "So we'll use `subplot2grid`.\n", + "\n", + "All of these functions are easier to use if we put the code that generates each panel in a function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upper right\n", + "\n", + "To make the panel in the upper right, we have to reload `centerline`." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_dataframe.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "centerline = pd.read_hdf(filename, 'centerline')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And define the coordinates of the rectangle we selected." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0\n", + "\n", + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max]\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To plot this rectangle, we'll use a feature we have not seen before: `Polygon`, which is provided by Matplotlib.\n", + "\n", + "To create a `Polygon`, we have to put the coordinates in an array with `x` values in the first column and `y` values in the second column. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-8.9, -2.2],\n", + " [-8.9, 1. ],\n", + " [-6.9, 1. ],\n", + " [-6.9, -2.2]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "vertices = np.transpose([pm1_rect, pm2_rect])\n", + "vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function takes a `DataFrame` as a parameter, plots the proper motion for each star, and adds a shaded `Polygon` to show the region we selected." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib.patches import Polygon\n", + "\n", + "def plot_proper_motion(df):\n", + " pm1 = df['pm_phi1']\n", + " pm2 = df['pm_phi2']\n", + "\n", + " plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + " \n", + " poly = Polygon(vertices, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + " plt.gca().add_patch(poly)\n", + " \n", + " plt.xlabel('$\\mu_{\\phi_1} [\\mathrm{mas~yr}^{-1}]$')\n", + " plt.ylabel('$\\mu_{\\phi_2} [\\mathrm{mas~yr}^{-1}]$')\n", + "\n", + " plt.xlim(-12, 8)\n", + " plt.ylim(-10, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that `add_patch` is like `invert_yaxis`; in order to call it, we have to use `gca` to get the current axes.\n", + "\n", + "Here's what the new version of the figure looks like. We've changed the labels on the axes to be consistent with the paper." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.rcParams['text.usetex'] = False\n", + "plt.style.use('default')\n", + "\n", + "plot_proper_motion(centerline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upper left\n", + "\n", + "Now let's work on the panel in the upper left. We have to reload `candidates`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a function that takes a `DataFrame` of candidate stars and plots their positions in GD-1 coordindates. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_first_selection(df):\n", + " x = df['phi1']\n", + " y = df['phi2']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlabel('$\\phi_1$ [deg]')\n", + " plt.ylabel('$\\phi_2$ [deg]')\n", + " plt.title('Proper motion selection', fontsize='medium')\n", + "\n", + " plt.axis('equal')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHICAYAAACiZIUjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD4JElEQVR4nOy9f1ib53kv/hECCQnxSyAhLAwGGxuMwRCwHeeHHRJix1nXtOnSbu3Wduu67eq2ni7deq5u57tlXddepz3NyblOT7u225K2a7suS9qtXVo7ToidNI4dMBiMjQ2GICNLlvglkBGSEfr+wXU/vt9H7ytwEsdJeD7X5StBevW+z/v8vH987vs2pVKpFBQUFBQUFBQU1iCybnYDFBQUFBQUFBRuFpQgpKCgoKCgoLBmoQQhBQUFBQUFhTULJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoLBm8Mgjj6C5uflmNyMjnnjiCRQVFd3w52zYsAGPPfbYDX+OgsLbHUoQUlB4h+LjH/84TCYTTCYTcnJyUFNTgz//8z/HlStXbnbT3hYwmUz46U9/qvnsz//8z/Hcc8/dnAbdJBgJVq+++ir+4A/+4K1vkILC2wzZN7sBCgoKrx/33XcfHn/8cVy9ehUvvvgifv/3fx9XrlzBN7/5zbRrr169ipycnJvQyrfH8wHA4XDA4XDc1Da8XeByuW52ExQU3hZQFiEFhXcwrFYrPB4P1q9fjw9/+MP4yEc+Iqwg5Ab653/+Z9TU1MBqtSKVSsHn8+GBBx6Aw+FAQUEBPvjBD+Ly5cvinvS7b33rW1i/fj3sdjseeughzMzMaJ79+OOPo76+Hrm5uairq8M3vvEN8d1rr70Gk8mEf/u3f8Ndd92F3Nxc/Mu//IvuO5hMJnzrW9/Ce97zHtjtdtTX1+PYsWMYHh7GXXfdhby8POzevRsXLlzQ/O6b3/wmNm7cCIvFgi1btuD73/+++G7Dhg0AgPe///0wmUzib9k1trS0hC984QuoqKiA1WpFc3MzfvnLX6a9x9NPP4329nbY7XZs374dx44dyzgujzzyCCorK2G1WrFu3Tp8+tOfFt8lEgl87nOfg9frRV5eHnbt2oUXXngh4/1+9rOfobW1Fbm5uaipqcHf/u3fYnFxUXw/MzODP/iDP0BZWRlyc3Oxbds2/PznP8cLL7yA3/3d30UkEhHWw0ceeUT0EXeNrXZefP/738eGDRtQWFiI3/zN38Tc3FzGtisovO2RUlBQeEfiYx/7WOqBBx7QfPanf/qnqZKSklQqlUr9zd/8TSovLy+1f//+1MmTJ1OnTp1KLS0tpVpaWlJ33HFHqqurK/XKK6+kbrnlltTevXvFPeh3d999d6qnpyd15MiR1KZNm1If/vCHxTXf/va3U+Xl5amnnnoqNTIyknrqqadSTqcz9cQTT6RSqVRqdHQ0BSC1YcMGcY3f79d9DwApr9eb+vGPf5w6d+5c6n3ve19qw4YNqbvvvjv1y1/+MnXmzJnUrbfemrrvvvvEb55++ulUTk5O6v/9v/+XOnfuXOprX/taymw2p55//vlUKpVKhUKhFIDU448/ngoEAqlQKCTebfv27eI+jz76aKqgoCD1ox/9KDU4OJj63Oc+l8rJyUmdP39e8x51dXWpn//856lz586lfuM3fiNVVVWVunr1qu77PPnkk6mCgoLUM888kxobG0sdP3489e1vf1t8/+EPfzh12223pY4ePZoaHh5OffWrX01ZrVbxzMcffzxVWFgorv/lL3+ZKigoSD3xxBOpCxcupA4dOpTasGFD6pFHHkmlUqlUMplM3XrrramGhobUoUOHUhcuXEj97Gc/Sz3zzDOpeDyeeuyxx1IFBQWpQCCQCgQCqbm5uVQqlUpVVVWl/vf//t+pVCq16nnhcDhSDz74YKq/vz919OjRlMfjSf3lX/6lbj8oKLxToAQhBYV3KGRB6Pjx46mSkpLUBz/4wVQqtXxw5eTkCCEglUqlDh06lDKbzSmfzyc+GxgYSAFInThxQvzObDanLl68KK75xS9+kcrKykoFAoFUKpVKrV+/PvXDH/5Q056/+7u/S+3evTuVSl0TIB577LEV3wNA6n/8j/8h/j527FgKQOqf/umfxGc/+tGPUrm5ueLv2267LfXJT35Sc5+HHnoodf/992vu+5Of/ERzjSwIrVu3LvX3f//3mmt27NiR+tSnPqV5j3/8x38U31N/nT17Vvd9vva1r6U2b96cSiQSad8NDw+nTCZTmlB4zz33pD7/+c+nUql0QejOO+9MfelLX9Jc//3vfz9VXl6eSqVSqYMHD6aysrJS586d022PfD8CF4RWOy/sdntqdnZWXPMXf/EXqV27duk+V0HhnQLlGlNQeAfj5z//ORwOB3Jzc7F7927s2bMH//f//l/xfVVVlYYLcvbsWaxfvx7r168Xn23duhVFRUU4e/as+KyyshIVFRXi7927d2NpaQnnzp1DOBzGxYsX8YlPfEJwbhwOB774xS+mua/a2tpW9R5NTU3i/8vKygAAjY2Nms8WFhYwOzsr3uP222/X3OP222/XvMNKmJ2dxaVLl1Z1H96+8vJyAEAoFNK970MPPYRYLIaamhp88pOfxE9+8hPhxjp58iRSqRQ2b96s6bsjR46k9R2hu7sbX/jCFzTXf/KTn0QgEMD8/Dx6e3tRUVGBzZs3r/rdZax2XmzYsAH5+fmavjDqBwWFdwoUWVpB4R2M9vZ2fPOb30ROTg7WrVuXRkbOy8vT/J1KpWAymdLuY/Q5gb4zmUxYWloCAHznO9/Brl27NNeZzeaMzzcCbzc9S+8zejb/bLXvYITV3GeltnCsX78e586dw7PPPovDhw/jU5/6FL761a/iyJEjWFpagtlsRnd3d1pfGZG4l5aW8Ld/+7d48MEH077Lzc2FzWZb+SVXwGrnhTy/+HxQUHinQglCCgrvYOTl5WHTpk2rvn7r1q3w+Xy4ePGi0P7PnDmDSCSC+vp6cZ3P58OlS5ewbt06AMCxY8eQlZWFzZs3o6ysDF6vFyMjI/jIRz7y5r7QKlFfX4+XXnoJH/3oR8VnL7/8suYdcnJykEwmDe9RUFCAdevW4aWXXsKePXs099m5c+cbap/NZsN73/tevPe978Uf//Efo66uDv39/WhpaUEymUQoFMKdd965qnvdcsstOHfunOE4NzU1YXx8HOfPn9e1Clksloz9AKx+XigovBuhBCEFhTWEjo4ONDU14SMf+Qgee+wxLC4u4lOf+hT27t2rcWPl5ubiYx/7GP7X//pfmJ2dxac//Wl88IMfhMfjAbAcQfTpT38aBQUFOHDgAOLxOLq6ujA9PY2HH374hr/HX/zFX+CDH/wgbrnlFtxzzz342c9+hqeffhqHDx8W12zYsAHPPfccbr/9dlitVhQXF+ve52/+5m+wceNGNDc34/HHH0dvby9+8IMfvO62PfHEE0gmk9i1axfsdju+//3vw2azoaqqCiUlJfjIRz6Cj370o/ja176GlpYWTExM4Pnnn0djYyPuv//+tPv99V//Nd7znvdg/fr1eOihh5CVlYW+vj709/fji1/8Ivbu3Ys9e/bgAx/4AB599FFs2rQJg4ODMJlMuO+++7BhwwZEo1E899xz2L59O+x2O+x2u+YZq50XCgrvRiiOkILCGgIlGSwuLsaePXvQ0dGBmpoa/PjHP9Zct2nTJjz44IO4//77sW/fPmzbtk0THv/7v//7+Md//Ec88cQTaGxsxN69e/HEE0+gurr6LXmP973vffg//+f/4Ktf/SoaGhrwrW99C48//jjuuusucc3XvvY1PPvss1i/fj1aWlp07/PpT38an/3sZ/HZz34WjY2N+OUvf4n//M//RG1t7etuW1FREb7zne/g9ttvR1NTE5577jn87Gc/Q0lJCYDltAMf/ehH8dnPfhZbtmzBe9/7Xhw/flzDz+HYv38/fv7zn+PZZ5/Fjh07cOutt+LRRx9FVVWVuOapp57Cjh078Fu/9VvYunUrPve5zwkr0G233YY/+qM/woc+9CG4XC585StfSXvGaueFgsK7EaZUKpW62Y1QUFB4++CRRx7BT3/6U/T29t7spigoKCjccCiLkIKCgoKCgsKahRKEFBQUFBQUFNYslGtMQUFBQUFBYc1CWYQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1C5VQcQUsLS3h0qVLyM/Pf13p+xUUFBQUFBTeeqRSKczNzWHdunXIyspg97k5tV7fOL70pS+l2traUg6HI+VyuVIPPPBAanBwUHPN0tJS6m/+5m9S5eXlqdzc3NTevXtTp0+fvq7nXLx4MQVA/VP/1D/1T/1T/9S/d+C/ixcvZjzn37EWoSNHjuCP//iPsWPHDiwuLuKv/uqvsG/fPpw5c0YUevzKV76CRx99FE888QQ2b96ML37xi7j33ntx7tw5TQXlTKDrLl68iIKCghv2PgoKCgoKCgpvHmZnZ7F+/foVz/t3Tfh8OByG2+3GkSNHsGfPHqRSKaxbtw6f+cxn8N//+38HAMTjcZSVleF//s//iT/8wz9c1X1nZ2dRWFiISCSiBCEFBQUFBYV3CFZ7fr9ryNKRSAQA4HQ6AQCjo6MIBoPYt2+fuMZqtWLv3r14+eWXDe8Tj8cxOzur+aegoKCgoKDw7sS7QhBKpVJ4+OGHcccdd2Dbtm0AgGAwCAAoKyvTXFtWVia+08OXv/xlFBYWin9GhRAVFBQUFBQU3vl4VwhCf/Inf4K+vj786Ec/SvtOjvRKpVIZo78+//nPIxKJiH8XL15809uroKCgoKCg8PbAO5YsTfjTP/1T/Od//ieOHj2KiooK8bnH4wGwbBkqLy8Xn4dCoTQrEYfVaoXVar1xDVZQUFBQUFB42+AdaxFKpVL4kz/5Ezz99NN4/vnnUV1drfm+uroaHo8Hzz77rPgskUjgyJEjuO22297q5iooKCgoKCi8DfGOtQj98R//MX74wx/iP/7jP5Cfny94P4WFhbDZbDCZTPjMZz6DL33pS6itrUVtbS2+9KUvwW6348Mf/vBNbr2CgoKCgoLC2wHvWEHom9/8JgDgrrvu0nz++OOP4+Mf/zgA4HOf+xxisRg+9alPYXp6Grt27cKhQ4dWnUNIQUFBQUFB4d2Nd00eoRsFlUdIQUFBQUHhnYc1l0dIQUFBQUFBQeF6oQQhBQUFBQUFhTULJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1CyUIKSgoKCgoKKxZKEFIQUFBQUFBYc1CCUIKCgoKCgoKaxZKEFJQUFBQUFBYs1CCkIKCgoKCgsKahRKEFBQUFBQUFNYslCCkoKCgoKCgsGahBCEFBQUFBQWFNQslCCkoKCgoKCisWShBSEFBQUFBQWHNQglCCgoKCgoKCmsWShBSUFBQUFBQWLNQgpCCgoKCgoLCmoUShBQUFBQUFBTWLJQgpKCgoKCgoLBmoQQhBQUFBQUFhTULJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1i3e0IHT06FH8+q//OtatWweTyYSf/vSnmu8//vGPw2Qyaf7deuutN6exCgoKCgoKCm87vKMFoStXrmD79u34+te/bnjNfffdh0AgIP4988wzb2ELFRQUFBQUFN7OyL7ZDXgjOHDgAA4cOJDxGqvVCo/H8xa1SEFBQUFBQeGdhHe0RWg1eOGFF+B2u7F582Z88pOfRCgUutlNUlBQUFBQUHib4B1tEVoJBw4cwEMPPYSqqiqMjo7i//v//j/cfffd6O7uhtVq1f1NPB5HPB4Xf8/Ozr5VzVVQUFBQUFB4i/GuFoQ+9KEPif/ftm0b2traUFVVhf/6r//Cgw8+qPubL3/5y/jbv/3bt6qJCgoKCgoKCjcR73rXGEd5eTmqqqowNDRkeM3nP/95RCIR8e/ixYtvYQsVFBQUFBQU3kq8qy1CMiYnJ3Hx4kWUl5cbXmO1Wg3dZgoKCgoKCgrvLryjBaFoNIrh4WHx9+joKHp7e+F0OuF0OvHII4/gAx/4AMrLy/Haa6/hL//yL1FaWor3v//9N7HVCgoKCgoKCm8XvKMFoa6uLrS3t4u/H374YQDAxz72MXzzm99Ef38/vve972FmZgbl5eVob2/Hj3/8Y+Tn59+sJisoKCgoKCi8jWBKpVKpm92ItzNmZ2dRWFiISCSCgoKCm90cBQUFBQUFhVVgtef3miJLKygoKCgoKChwKEFIQUFBQUFBYc1CCUIKCgoKCgoKaxZKEFJQUFBQUFBYs1CCkIKCgoKCgsKahRKEFBQUFBQUFNYslCCkoKCgoKCgsGahBCEFBQUFBQWFNQslCCkoKCgoKCisWShBSEFBQUFBQWHNQglCCgoKCgoKCmsWShBSUFBQUFBQWLNQgpCCgoKCgoLCmoUShBQUFBQUFBTWLJQgpKCgoKCgoLBmoQQhBQUFBQUFhTULJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1CyUIKSgoKCgoKKxZKEFIQUFBQUFBYc1CCUIKCgoKCgoKaxZKEFJQUFBQUFBYs1CCkIKCgoKCgsKahRKEFBQUFBQUFNYslCCkoKCgoKCgsGahBCEFBQUFBQWFNQslCCkoKCgoKCisWShBSEFBQUFBQWHN4h0tCB09ehS//uu/jnXr1sFkMuGnP/2p5vtUKoVHHnkE69atg81mw1133YWBgYGb01gFBQUFBQWFtx3e0YLQlStXsH37dnz961/X/f4rX/kKHn30UXz961/Hq6++Co/Hg3vvvRdzc3NvcUsVFBQUFBQU3o7IvtkNeCM4cOAADhw4oPtdKpXCY489hr/6q7/Cgw8+CAD47ne/i7KyMvzwhz/EH/7hH76VTVVQUFBQUFB4G+IdbRHKhNHRUQSDQezbt098ZrVasXfvXrz88ss3sWUKCgoKCgoKbxe8oy1CmRAMBgEAZWVlms/LysowNjZm+Lt4PI54PC7+np2dvTENVFBQUFBQULjpeNdahAgmk0nzdyqVSvuM48tf/jIKCwvFv/Xr19/oJiooKCgoKCjcJLxrBSGPxwPgmmWIEAqF0qxEHJ///OcRiUTEv4sXL97QdiooKCgoKCjcPLxrBaHq6mp4PB48++yz4rNEIoEjR47gtttuM/yd1WpFQUGB5p+CgoKCgoLCuxPvaI5QNBrF8PCw+Ht0dBS9vb1wOp2orKzEZz7zGXzpS19CbW0tamtr8aUvfQl2ux0f/vCHb2KrFRQUFBQUFN4ueEcLQl1dXWhvbxd/P/zwwwCAj33sY3jiiSfwuc99DrFYDJ/61KcwPT2NXbt24dChQ8jPz79ZTVZQUFBQUFB4G8GUSqVSN7sRb2fMzs6isLAQkUhEuckUFBQUFBTeIVjt+f2u5QgpKCgoKCgoKKwEJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1CyUIKSgoKCgoKKxZKEFIQUFBQUFBYc1CCUIKCgoKCgoKaxZKEFJQUFBQUFBYs1CCkIKCgoKCgsKahRKEFBQUFBQUFNYslCCkoKCgoKCgsGahBCEFBQUFBQWFNQslCCkoKCgoKCisWShBSEFBQUFBQWHNQglCCgoKCgoKCmsWShBSUFBQUFBQWLNQgpCCgoKCgoLCmoUShBQUFBQUFBTWLJQgpKCgoKCgoLBmoQQhBQUFBQUFhTULJQgpKCgoKCgorFkoQUhBQUFBQUFhzUIJQgoKCgoKCgprFkoQUlBQUFBQUFizUIKQgoKCgoKCwpqFEoQUFBQUFBQU1iyUIKSgoKCgoKCwZqEEIQUFBQUFBYU1CyUIKSgovCuRTCbh9/uRTCbf1PslEok39b4KCgo3F+9qQeiRRx6ByWTS/PN4PDe7WQoKNxyyEJBMJuHz+eDz+a7rADcSJvTun0k4oOePjo6Kf3pteTOFl2AwiHg8jmAwqCvE8GcZ/b/e/fr6+sR9jdqeSCTQ1dWFRCJh2L7XK1jR72KxmOYZvI+pb2+EMPh65tH1PmOluaQEUYU3E+9qQQgAGhoaEAgExL/+/v6b3SSFtzkybfZ6m/D1Hqivpz0rCR3yZ1wIoL/Hx8cxPj6edoAb3VPvPkafy3/LgoDf78fJkyfR1dWFw4cP45lnnsG//uu/YnR0dFXPy9QvJEjIQk4ymUR2djZcLhd6enowPz+vEWJ8Ph+6urrg8/k0z5XbQM9xOp2YmppCQ0MDrFYrXC5XWp/Pz8+jp6cH3d3dGB0dRW9vr2E/0/WHDx/G/Px8RsEqFovhmWeeQTQaFe/S2dmJSCSCw4cPi/uNj4+jr69PjDO9i9/vvy7B1aivfT4fTp48idHRUfT09Lypwgg9w+/3pwmw/Dl6c4TPhTdD4F9J4Hu9a1sJcW9PvOsFoezsbHg8HvHP5XLd7Ca9a3A9h77RYU6Hl6zdvtntux4Eg0GMjY2hp6cHfr8/7Tu+Sft8Phw5cgQ/+MEPMDw8rDl46MBazaHOBYfVCDXyQeD3+zEyMoKuri4kk0l4PB5YrVZhAfV4PKioqEBFRYWuVdTv92NsbEzzvlyYoN/QOycSCWRnZ8PpdKKrqwuFhYUIh8OIxWLw+XxCEOju7hbvUlJSAovFgqKiIoyPjyMWi+Hs2bOadsjtXmmcuIWmr69PCCJ0mIZCITG/pqen0dTUJISYvr4+vPbaa3j++efhdDrFc+U20HP6+/uRSCREv5MgNTw8jK6uLjidTkQiERQWFgIALBZL2n7Dx87j8SASiaCmpgbT09Oiv/Wu7ezsxPT0NJ566inxLu3t7YjH46ipqRH3q6ioQFNTEyoqKuByucT4AVhxDnHozcH5+XkMDAygqKgIs7OzcDgcQhh6I8qALAABEP2vJ5TSOzmdThw/flxYwEZGRnDw4EGMjY1hfHwcPp8PJ06cwOjoqOG+k2mNGe0B/HpZwFwJXFjOpMgovLV41wtCQ0NDWLduHaqrq/Gbv/mbGBkZudlNektxIzUXvnnIB6lspvf7/Zifn0d3d7f4mx9inZ2diEaj6O3tfVNdI3qbzkqgg9DpdIrPqD9cLheys7PF+/X09ODZZ59FMBjEsWPHxG8BwOFwYGhoaFXCd19fH6LRKPr6+kS7qa9cLleaUKMnLITDYbExm81meL1emM1mAIDZbEZlZSUqKyvFZzLIqqB3ONCY+Hw+PPvssxgbG4PZbMbAwACi0Sg6OzsRDAaFNSKVSsFisSCZTGJkZATBYBBVVVXYt28fqqqq8Du/8ztobW1FR0dH2vM9Hk9aG/XmI/UDCTcNDQ0YGhqCw+EAACGUhMNhmM1mzX3pMAwGg4jFYujr6xP9RddSX7hcLkxNTYn5EA6HEY/HMTg4iIWFBfziF79AJBLBwMAAWlpaYLfb0dzcDK/XC6/Xqzu3qC0tLS3Iz8+Hy+XC+Pi4eEeaa3Rte3s7iouLsWPHDkxNTcHlcsFms2H//v3Iz88X96usrER1dTUqKysRDoexuLgo5oI8h7Kzs4UFRT6UZSGehLZNmzbBbrdj27Zton/J8jQ3N4eDBw/C5/OlCaR61h0S/kdHRzE2NoZEIoGpqSl4PB4xFnpCKb1Tf38/ent70dPTg1AohHA4jIWFBZhMJmRnZwtlpKenRyPg6Fnh5Oe4XC7MzMwIoVYGzYlkMnldewz1Ixci5bX2RoSi1+NupXGIxWKrElpvtGv0ZuBdLQjt2rUL3/ve93Dw4EF85zvfQTAYxG233YbJyUnD38TjcczOzmr+vdMgm9+v19VA/yXBxmhh8s0jmUwiHA6LBUi/7+zsxNjYGIDlgykej2N8fBzJZFLjZmhvb4fD4YDL5Vp1e1cCbTq0Weu9p977A0BrayuqqqrEwqcNnQ7VxcVFhMNhOJ1O7Nu3D42Njdi9ezcAiANwdnYW+fn5q3qXpqYm2O12lJSUwOVyYXp6GuPj4xgbG0M4HE4Tavjf9ExuBbjejdTr9cJms6G4uDjt8KMxI+uX1WrF3NwcPB4Pmpqa4HA4UF9fD6fTifLyclRUVKCtrQ1tbW3wer2YmprC4uIiAAjB12azoaWlBWazeVVzlWvgtBFTG8PhMFwuFwYGBlBTU4NoNAqv1yuEksbGRlgsFo2FIRwOw+12Y+PGjfB4PHC73ZpNnh/gwWAQiUQCZrMZVVVVaG5uhtVqxT333IO8vDw0NDQgFouhqalJjA0JTuFwWPMeemPHBdBEIoGDBw9ibm5O0w82mw3333+/WCMARDtlwVG22tH3JJTRHDebzQgEAmnuUr/fjytXrmBwcFA8iwttHo8HqVQK5eXlsNvtwtJ+4sQJZGdnIxwOayxjetadZDKJw4cPIxKJYHBwEAB0+0zuLxLgkskknE4nnE4nsrOzhRXM4/EgJycHpaWlMJvNcLlcKC8v1wg4Q0NDqKqqQiQS0Vg6A4GAWDPhcBh1dXVwOBwaYZaEBnKVms1mzR6z0tozm81oamrCyMgIHA6HriBmtA6MeGd685ZbR1faB3p6ejA6OiqEw0y/4S7267WG8fa+3axf72pB6MCBA/jABz6AxsZGdHR04L/+678AAN/97ncNf/PlL38ZhYWF4t/69evfquYCWN1kX2kC8YVEmstqrBJ67hH5fhyy5gxc05aTySQikQiqqqqEab6pqQlVVVVwu90YGBiAw+HA1NSUOITb2tpQWVkpNrqV3jOTQEObAgkY3HpipH3xz2nj7enpEe4m2XXS3NyMmpoa7NmzB/v27UNOTo64J/W92WxelavAYrHA6/UilUqJfnY6neIAXwlmsxmtra2oqKhAf38/hoeHNda5lTYeOuh4X9FnVVVVKC8vx+nTp1FWVoalpSXs378fZrMZFosFbW1tqK6uRlVVVVpbSSCpqqoCsDy/Jycn4ff78eqrr6K7u1vjKjJyi3FLG3dZ0Jzt6elBYWEhotEoWlpaxDiTgESWIT52eXl5uOOOO7BhwwZUVlaKTX5sbAzBYFDwi2hM5UPZYrGgqakJubm5cLvdGmEk07qTFQ46WK1WK6ampmC1WoXlWnYLAUBFRQXMZnMa54u7mMbHxxEIBISFiyC75ioqKlBeXp623mZmZlBUVCSEEro3WQ1MJpMQ+M1mM8LhMHbu3InFxUU0NjbC7XaLdU+CGBdi/H4/ampqEI/Hcdddd8FisWDr1q2iz/h+J1s3QqEQ4vE4LBYLqqurUV9fj6mpKTQ3N8Nms6GpqUkIgG1tbdi5cyeA5f0tGAyipqYGIyMjKCkpEe/b19eHSCQiLFoulwt2u10I6/J1/f39uHz5MhKJBEpKSoS7tbu7GyMjI2l7KH+fYDCI2tpaRKNRwTOjfqI5S/3E3723t1eXd0aWL1I4s7OzUVJSgqmpqTQlUA8lJSWYnZ3F5s2bV1QcuYtdnp961+vhepTztwrvakFIRl5eHhobGzE0NGR4zec//3lEIhHx7+LFi29hC7UuEiB9czMiu3LwDScYDMLpdIoNd7UcHK/Xi6qqKni9Xt0DSvbrc9dBdnY2zGYztmzZAofDAbPZLLTwyspKzMzMwGKx4MSJE2kHBW3ci4uLhqRePa2df9fd3Y2xsTGh5ZBAwvtHT/vi/SYvYn4I0v+T8CKb8OmeZEEAIARMmVvANzp6fjAYREFBARwOB9ra2jRtlwVlvunQgeT3+3H+/Hnxm9XyQWjc+fPI3WKxWFBbW4tUKoWHHnpIY/2jZ3MLA1l+aMxJq66oqMAtt9wCs9mMq1evIpVK6RKP5c2U+pxcPE6nU2NJKSkpQSQSEVYZ7gJxOBxC++djRxYOOuxok7darSgoKEAgEEBvby/y8vKEBUx2G+lZ0gAIa6FsETIaj1QqhVQqhcbGRhQWFqKjoyPNnUVuIQIJG7SG6L7EoSFLiHyQcdccjW08HheWABJeKyoqhOuMBM6nn34aPT09wjLK11R+fj72798vLICTk5Pivpxbtbi4iGQyidnZWSHEOJ1ODA4OorCwEH19fRoBt6enR2OdKywsRCQS0Vj9iPNFAm8oFBIuNJoPxD+KRqMoKCjAqVOnxLxvaGiA3+9Hbm4uTp48KcY2mUxq1ltTUxNisRji8TgCgQAGBgaEwElK4NTUVNr6IkFlfHwcAISQRb+hd5OtztyyQ4oRjTcXTkOhkBBOzWZzmsUukzJmsVhQX18vhMhIJKLZl2UFkVzs8vzMNL85rocH+FZhTQlC8XgcZ8+eRXl5ueE1tAnyfzcKepIzuRqampoAQLOAM5FdZZDWBCy/Uzgc1ghYeuDCj561h4MOmkAggOzsbOEuoA3C4/HAbrejvLwceXl5OHbsmBCUmpqaEI/HUVFRgd7eXl2XmyyQUF/5fD688sorOHjwIBKJRNpBMT4+LrTF2dlZZGdn49ChQxrNkt6VCzBOp1McBCSEEVehpaVFHOTymHEhwuPxCCGNNiVy3dC70CEFQMORIiEJAIqLi4VlQ+bKyIKyvOm4XC6UlZVh27Ztos3yxiO/QyYuFXez2O12cdDphZFzbZF4O1x4oHGprKxEa2srqqurhfssHA4LQd/n8+m6h4Brlq+qqiqEQiEUFBTAZrPBYrFoBA9ORDbqSyMeVWtrK2ZnZwWvbWxsDLW1tQiHw5qDmIQJ+fDg48wFPNllRdc3NTXBZrOhsLAQU1NTaGlpEbws7vbigjIduIuLi2Jd0H3NZjNKS0thsVg0QgAdZHxd07/p6WlhCeACEgm2wLKCk5+fL1xORn1J7SwpKcH09DQcDodwuwDL+xEd9IFAQHxG/VhYWCgsykVFRXC73RprLLfU0HPD4TAKCwsxPT2NQCAAm82m4edxC11JSQkmJiZw9epVMd+npqawe/duLCwspFmK+HojK6DH40F5ebnGJefxeFBVVaXZL2h9FRYWwmq1oqKiQmNJ42uT/z+1t66uTvDeyPpaWVmpWftDQ0MoKioS460naPA5IO8ZfN8nNzBfd3w/jsViOHbsGI4dOyaEZnldZVKc9Syrbwe8qwWhP//zP8eRI0cwOjqK48eP4zd+4zcwOzuLj33sYze7aQD0Q477+vrQ1NQEi8UC4NqkcrlcGh/2Svcloi4d5s3NzRoBizZlntMF0FoEKBLp0KFDGmIh3zzJT06/mZqaQiKRELwWr9eLsbExeL1eDAwMAFjeTLZv3465uTlDlxtZkehwpr4KhUKIRCJYWFjA4OCgOCioTaQlu91udHR0YHFxEfn5+RgbG8sYpkx8hXA4LBYxcU9og9EbM+5ODAavkYWJh9bT0yMOa9r8OXm1oaEBExMT4tAFkGaS51awhoYGzTjKm05lZSV27dqFnTt3Gm40slXK5XIZmsS5JhsKhTSHPBd2aNw8Hg9CoZBmLsnCA82BtrY2zTwnIYrGYGRkxFDop8OfBAfqT+5qaGpqQjQaFVYiI+hZn+gwslqtqK+vF+/pdDoxNDSEhoYGMe+4JYL3L0WsjYyM4MSJE8JtwoXY8fFxcYjPzs4KIYVbf7mwbTabUVBQgKGhIWEVGxgYwNjYmLBM6BGj+d80Z4nsH4/HhYDB+5uPCa3lbdu2obm5WRzGRiBFLJlMYnh4WHBy6D7EaeP3Jiud3W4HABQWFsJmswnrAxd85PHkc3h8fBwXLlxAbW2tECjJMt7f349Tp05haWlJzE3uCtu/fz9qamqEIEOKKVmM6PCvqanBzp07NcEHRgEJxPlzuVy6Flcac+DamqE5cfToUQ3vjVJBJBIJISzdeeedsNlsYj5w4VDP2i0HX2QSTGjvBZYVtyeffBLd3d04cuRImouOvxPno8m0g7cj3tWC0Pj4OH7rt34LW7ZswYMPPgiLxYJXXnlFuCtuNsgcTJYSWfvg6O/vF6G+K3E/PB4PotGoZiMgvgdZJ2iz7evrQ19fnzBDy/eamppCfn6+0Hjp8FxcXNRsnuTOsVgsaVar+vp65Ofno6mpSbTZ4/EI7ogRJ4QfzrSZt7S0oKOjA9XV1di0aZNoD7VpcnISgUBAmO/379+P6upqWCwW1NTUaA5j4FqY7MLCAmKxmIj2kTkN1C8r8ViIB9XU1CTM1rOzs5rDmrtoSKtfXFzUHBQyr4PGJxwOC3eZnjuLb2qy+1ImZiaTScGHaWlpEZ9xS5HD4cDMzAyys7OF24IOeb0NVM+1S/wqPasMXUOuCNrs8/Pz0dHRkXY9CWd+vx9TU1PCukZzRHY1cO3WaL2QRYxyCvHDjnhbdAgPDAzAbrcLoV5PyJPn7vnz54Wlcm5uThONSO0iawV30dE64oIrKSBkmbHZbNi0aROsVqsu14fPCQCa9w+FQho3k5FblA526hPZXas3PjabDa+88gp8Ph+uXLmC4eFhjaXF6PCVXdAyEdwIJDgcO3YMi4uLKC0tFQIVt4yTRai8vBw5OTlIJBIagZPmEeeBtbW1IRwOa/iTiURCRHWuxJMJBoMIBAIYGxvTzDG6TuYV0RhOTEwgNzcXw8PDQpin9dXb2ysEcBKKQ6FQmiWH3pnej97VSPAhAZXawS3/09PTaG5uRjweR3V19Yq8Uy5wk/JkZCW62XhXC0L/+q//ikuXLgmXyFNPPYWtW7fe7GYJDAwMwGq1orOzE8lkEg0NDZifn0dDQ0PaIUYay6ZNmzRcGD0LBye+AtcIbdx6QZttU1OT0OxliwC5haqrqzX+bGB5U5FNvNFoFFu2bEmzoKRSKXEdLfpgMJgxnJu/AydbEufkwIEDyM/PF+9Hh0lJSQmSySQuX74sNiqv14u2tjbY7Xa43W7Nc0jYycrKwubNm9HX1yf4AHp8JXkDp42DxquyshI7d+4Ulg6+mesJKS6XCxUVFcKkrscHohw3pPHpCTcEeQOW87Lw64LBIK5evSo2SdLiucAUjUZRV1cnhDhyd/C5wp/J5zCNP+dq6EE229N8oT6Ury0sLBRWzsbGRpw4cQLHjx+Hz+fLKKgaaaUkuPBDkcYNAEwmkzicZNc1Pa+kpERj+qdQfqfTic2bNwv3A7c4cJcE57HJAggnii8uLiIra3nbDoVCaGpqQn5+PlpbW2GxWASvJFMSTLPZLOabHiHYCCu5NLgQ1N3djcrKShF5m0wuR2XxSCN5PPg84n1j9Cx+iNIY7tixQ/C++PhQf3s8HszMzAAAamtrkZubKw7+lRKO0h7q8/nQ2dmJkZERhEIhXWIzfzcu2PT19WFoaCjN0s15RZwLNjo6CofDIayNNP9cLpcQYsk6yaPjaLw8Ho/gGQWDQaEIG/UpKQ9dXV2CwxmJROB0OuHxeJBIJPBrv/ZrqK6uFvsY/ZYH89C9ksmkJo2DrOC9XaxEplQqlbrZjXg7Y3Z2Vky4N5svFIvF8OSTT6K1tRVFRUVCYucLs7y8XBM5xCX7ZDIpwpDpO1mD4loOEa4rKirSTNt0ncvlEtE1/MAGroUq82fw+wNIs1Lw74PBIEZGRhAOh1FeXq6rhWYCHf60sfHnJ5NJxONxTE9PI5FI4NixY7DZbFi/fr3goej9HlgOQyZ3Vn5+viApy+9n1E4SMMnywTUlro3z+xi1hY/HwYMHkZ2djcXFRXR0dIhNbHFxESaTCZOTkxo3qtxH1OfyePX09CAWiwEA5ubmRBSNHp9GHr94PC54KHrvAkBzjTyf9CDPIb02G33v9/tx/PhxhMNhNDc3Y9euXZr78vko/5bPeZpD1OaBgQGUlJQglUoJMi+NlTwnyP1FbrrKykp0dXUhGo3CarUiJydHQ+LmfUJjRm2U14zeWubukYqKCrE/kJuurq4Og4ODaXMjFouhs7MT7e3tsNlshmOwmnGSx4bIyg6HQ8ylSCSiUTzoN/F4XBDb+dxYaU1wZNoLMu11XV1duHDhAmZmZuD1erFv3z5YLBYkEgn09vbC5XIJAZTu53Q6cfjwYcTjcZSVlcFisSAajeLixYv40Ic+JDhzExMTWFxcFO4+uS2hUAgLCwuIx+O47bbbhJIn7680P0gwJ6uUPGep72hd6vUbudwjkQhKSkoQCAREn8jjSfsgceFKS0tx6623avYRmmO0NuiZtAcCEB6X+fl54RLUE6JXM+feKFZ7fr+rLUJvdxBBLxaLiUlGPAw90GTi/nXaaGTeB+c70ASUtSyuVen5lem+pCkR7yeZTIoEXDyCxsiCQguJrB/Z2dmaMGWOTOZSbuqV2+31ehGJRFBcXIycnBzs3LkT69evF8RG+r1eVBj1Z319Pex2u8aFR9/zjV8mSyeTSSGwUumDnp4eTfiyrCEmEgkRfkv3kAnMlDG4pqZG9L3H4xHaI5GD+W+5RURv8yGLisViQVVVFTo6OhCNRnUPLnn+yNo13VeP8AlARMCsVtjVE0z43KY5xt08LpcLLS0taGpqgtvt1o1ko/ko/5YOCTrkiMhNSSJDoZDgcfFQeFmTpXfmFjvicrlcLuGeo98R74pzdLi2zC23emNhsVhQXl4u5tXIyAi6u7vFoU3udjlijbv19OabTJina3huMNmCw0uXUPqCjo4OYZWhPq2urhZ9TxZFfpDzuatHMOfBDrRmZFeLkcWKvyvP10VtSCaXQ9NjsZimz2i8Ojs7YbfbkZubKyxphYWFuP3220UCSHlf0dt3Ozo6UFBQgA984AMaN7S893J+Jc+3xdvE15VsBU0kEiLjNk8DUFlZqdn/9cYcWI6ga2xsxLp16+B0OjVKCI2z2WzWjBXlcyKrFFmSXC6XxrWsNyZvByiL0Aq4kRYhI4mcaxSJREIjxXPoaf9G18vPok2ssLAQdrtdV6uSLUK08EjbnZubQ1FREaxWK1pbWw21WdliQFYhclnx35HFQ9ZuVtL2aMOkg5SHthv1Gdfu6bnEOSHOUVVVlUZ7kvtXHrPu7m7EYjHxfFnLo3Gig25ubg7t7e1CiJqenhYChfw7PkfcbjdmZmaEVr1aTZoT8mULBb0bt0K+Xk2NnkNCxEoWNa5RZ2dno7S0VDNGXGsmzoXT6RRzl+5B1huySDmdTvT19cHtdgtNn67Nzs5GIBBALBaD3W4Xc1gOWpDXWSYBORgMori4WERG8fkir+ns7GwUFxcjEoloDrvR0VHx/Orqak1fyRaBRCKBnp4eABCCh9PpxMDAgGg/F2gmJyc1bm7ex/J+QILi0NAQamtrxfqld6eDVM+6A0CzNiorK0U/Li0t4fz582hvbxfWFKN2ABCWBno32UIn941sOZQtmSRo8/cYGRnB+fPnsXnzZuG6JAva7bffjnPnzulai7g1S88CotcOrijwd5EtuEZWr5Us9BRxabVasWPHDs19eXsAaPqaz21g2Q3L2wdAs0fRHBkfH9esWY/HI+5L60C2wpJXA0BGF+gbhbIIvQOgxzfh4esradJG2j+fbATZIkG+fLkEhPxcma8AXPNT19fXayY5Xc+1POAaKdzhcAh3H2Ue5kIZD6+lhUoL34gTw98vEAggFAoJIi/fHEir5MnKuI+enkttGR8fT/PbE0mYt4v3sdlsFkndKClcb28v5ufn0zQ4yldjt9vFZsazONP1skBHVkPKU0P9LGvHMvhBTdYCPe0SQBpXyOh99e7PLQyJRAL9/f2G40a/oSgWHuosR7WQZYei8hKJhKY+F60F4rsBywcNWT8CgUCaBcfr9eoKfcS30LN4EX9Dnl90bxJsksmkxlXA1zRp5o2NjZienkZRUVGaFVfOfSXPQ76+yIpHf8s5jMiqGwqFUF5ervmerCtmc3pCTZqTZC2kd+DpJciCSkI7cWjICiZbTin83+fzCVcUT6LY09OjyftEa4WnZJCjFQlGljSy2ASDy2VAqJwK7WmkOO3du1cTvEEWtKGhIUGa55ZuPatoKpXScI34ePF5RO9NmfX5Hg4gLTM4X1+0PsmyyN+XLMh2ux3bt2/XCGC8PbSnFhUVaYQ3Gl8AaX1N4+3xeNLyvPE1S1ZnPRI+PZ/mAmV0v9mWIWURWgE30iKUCXpuq9W6F1ay9JBJPisrCw0NDZrr+H0y8Tbka/jnXOM2m5cz4EajUfT394uEcZQrhXML9PK98HvRM4H0jUg+iEngINM3aR8VFRUiWoZHvMl++ezsbM0iljVxbkHiwiD1bTKZRFZWFoqKijA/P4+Ojg6Ndg5AcFFkzd3oHYFrWjYd4NyCZqT5yVYQPa2Y+hrQ1zTp96vhJnm9Xvh8PoyNjaWVeMhk/TOaT3ruyMnJSbjdbsFTkLVpbpGi8dLrTz0LmZFV0mjO6/WN37+cwNRqteK+++7T9JWsFZMQQQKTUT/wvggEAqLsB/Upjas8J/mcA65p+hQUoKeRy/Nd7lc+/mQNOXfuHOLxONxut+DdmM1mwXmkPh0bGxN7QUVFhZjPk5OTsNlsGB0dRUNDQ8a6eHrjwS3FADSWWhKwRkZGUFtbq9nzjHh1tJe63W7hutKzqnCLz/z8PKampgQHkn+vt6/JcyyRSODw4cPIzc3F7OwsbrnlFo01bWJiQvyOUqpwy7je+Ojt5TT3QqEQ3G63mAN6XKlMfa7XF0a8QKN5qGfde7Ow2vNbCUIr4K0ShPRMrVyjJIGBolX4ZJd/q7cYOE6cOIGRkRFNcUhZu+WHQSKRwKlTp7B9+3ZRiiCTq4NbcRYXF1FeXo7z58+LTY+Iv2Qapv7lmiXXJukAI5cS9Yl8+AHXNhIi/pKbhLdtfHxc484Drm3mRuQ+2UVI1h55wxgdHUVXVxfM5uVEe5OTk2kuHNlSICPTNbKAzIUW2ojJUpJIJNJcdEaCkewapPek+dTd3Q1gOQNyIpGAzWYT4d16rgKu3cuHjyzc8mfpQXZ7ye4v2e2gR4xfySUqE73ldq0knNC9iAhcUlIiuCWbNm0S5HtAK8xS/1KJCL31yp/BFYdIJCI4GXpuVL17yC5G+R3lgypTf3Elq6enB9FoFBMTE7Bardi8eTMGBwfhdrtRWlqqEQ6SyaTYn4LBIEZHR3HhwgVs2LAB8/PzgoOyGsHQaC5xochsNq+4to3caHrvy8ePLNHEwVlpb5THUxYmKKp2fn4etbW1aa75WCwmlCf+POqLQCCgKTWz0h7N3aXkBl5pfzICJ2bTs/X6lvh0nZ2d2LNnjyY56ZsN5Rp7m0PPlWCUpdfj8Yj8ET09PSL5n1F2Ye420XNnNDY2YmFhAXl5eQCgmYDcVcTLdFy9ehWhUAg+nw+vvvqqSMCo9050T5L4LRYL9u/fj5KSEiEEkSmVyIvEWyDy6tjYGPr6+jSEY7lP9EzhfX19yM7OxokTJ4TZmczgJLDI7jzqbyJbT05Oppl+yb1AJm8S5KgcAMFsNiMnJ0eY28vLyzWkQiKM81xL8lyQ35OD2tzX1ye4JPQu3L0WCAQwPDwsMgPrEVOJI8NdksC1MGISZnt6euDz+XDmzBm43W44HA643W7NnNNzqba0tGiI2NzlQuPCXS1GkN1eVEuKvqN3J42ehEBORuffy/NcL7Ov7B6UXQqyS5QT9ukgb29vR01NjVBe9GA2L9drKy4uRl9fn7gvL6WSTC4HJwwPD+PgwYOw2WwYGRkRhy8Ju0a8OAIJylRagh+gtM55PjEeFt7T0yMyfeu5YcmqsH79etTW1uL8+fMi5JrCr6ld4XBYHLxerxdXrlxBbm4uXnvtNdTV1YmcSPJY6blqyQLGD3AaD1KWksmkOHxpLnMyNhdeyI2fSCR0U09wgZDK2QwODoq9WKYFcCST+vUi/X6/ILw7nU7YbDbs2bNHk9iR3olKbNA+Rt+TmyyRSGB4eFjUhMs07yorK4Ubn9yodG85FF+v/Xr71vT0tObZfN3QnHK5XOjs7ITVahVJcY367K2CEoRuEuTFLRdppIlKhzfxctxutyhWqJddmPviAf2ieFNTU9i4cSPm5uZ0J7N8SHk8HpFLKBQKCaEI0M9bQxsLJRYEIAiiMteHH6Cck0Cp7LkwQH1C1iG9hdPU1ITFxUW0trZiYGBAI/DwvtETMCipYFFRESYmJjTcKVk4oX6i5Hi0SSSTSWzfvl2EkPKq68QVkjlX8lyQx17uZ2CZd0XaDv8dFxbuvvtuUTOKNpu5uTkcPHhQWJScTqfw5VOfUAV5mj9ut1tYNvgmKRcV1XPtyfW8+JjTvOC8Evke8hjRXOGCinyYcb4YzTlZcybLksfjEffklsdYLIaJiQkhCKy0pnj/U7SMxWIR+X14/9DaIEtFMBhMy83EE1MS32p4eFhkSaeSH9cDj8cjrA2nTp0SfCsS7vmc5nwRihQaGRlBcXGxxopKfb+4uCjCvCmZK2WF5twjvblOCVLr6upgNmvLgxitWRLqSAAhpUu23PIcNpOTkwiHwzhz5owuhwdYTlx75coVkd2cBFx6X7/fj+LiYthsNmFNLy0tFWOnJ7TxNo+NjeHVV19Ny9Y/NTWFWCwmrDPV1dWiv3gkJOeR0pzq7u7GlStXkJ2djaqqKk3Wc9mlLAtisoLAs+nzMab26/GffD6fKEytp2DyHFi0Pu12u6j59swzz+iW03kroVxjK+BGucb0XGGrifyR3V5G9zFyO8iulWQyaZhbAkj3b8vRQNx0zN13Mn/g2LFj8Hq9yM/PF+bulbgtRv9PZm/iyejlZQkGlzNdcxMx8XecTqdG2+Ig7WxyclL4543Gj2+4stuOm/SJdyS744zmgh70Ipf0eC9ypI78nIMHD4rkmcTT0puD9Ax6P+p/HvHEI7uM2gho86Nwd4zf78fJkycRDoeRn5+PgoICbNu2Lc0Vwd2WNMbkgqJ3kN1efAMPhULCPUm/zcRNoD6kqC6KmuKHudFYyW483qYTJ04gEAho1m44HNZEmem5t81mM0ZHR9Hf3w+Xy4XW1lbdSDy9eaTnNue8FxIkuYtRHnNaX3z8uIu5ubk5jUdEz5B5JkZz3Wjf4q4q/jkATWQSB58bsVgMTz/9tKgs0N3dLVzGtBb5PPf5fLoRe7Irmb9rb2+vKIhKLp/6+nrxe76HdXV14eLFi0ilUqiqqkJra6uYcwMDA9i0aZPYI43mkjzf5BxWfN/hEYuUP4y7HeUx4e2V3YRk1aacXSTU0PqkOUx9wdcvueCamppEAIXVasWlS5cQj8dFwd432z2mXGNvc3CtWI6cyRSdoxcRIrvUKEJifn5eWG6Aa9rD2NiYsDrIE49+RyG5sqmdLAJylmk67OT8JU6nE8eOHUNjYyPi8TgaGxtFO0n7NCqwyU3GelFj1Ic89xGZyJPJpMZiwn3iRhFWpH2aTCYsLS2ljQHXqIj/RH0m59Hg7TNyx9H9aPy5lYsf5mSVICsV3U8vPwe/N70vF5ra29sRj8dRV1cnDjnuLjOKjqIN7ujRo4jFYsKiIlvNsrOzEYvF8Mwzz2B0dFRTiV62QCSTSSwtLWHjxo2IxWIiak+OCOIuP169mzgmelFmlLvGYrGIMgQulyvNzcafQ33mdDoxMzODrVu3IhKJoKqqSmSJXklgNbp/MBjEpUuXEA6HcfbsWYyPj2uKE8vEfO4+AoDz588jHo9jcnISU1NTui4wPWuE/JnFYsGuXbtEZmD6F4/HRS0+ymVG78pdb3TtwMBAWs4xAg9QkPMSGfUfzR0Cj0yjedHV1YWuri74/ddKBvHM87J7MhgM4ujRozCbzejs7BTRkTk5OSICjNpOz6usrNQUNk0kEjhx4oTgP3ELIr1raWkpZmZmsLi4iKNHj2JhYQGnT58WhPnh4WF0dXUBANra2rB+/XphVab+t1gs2LJli4g45OuR5hKdDYlEQhMFS5Z32k+A9H07GFyO5DKZTEKwojEhXhJ3GfK5DFzLCWaxWFBaWopwOCz6nOpYJpPLkZJkcSOFdHx8HKdPn0YyuVwXj1vUtm/fjg0bNuiW03kroQShmwxu4iVhIlOYuJEbjP6m3xUXF6f5imlT5GHhsqmVDh253AZvL+cQ0W9kngawvMg6OzvhcrnQ39+Pjo4OkTeENiUqMzIyMiIy5som43g8jkQiIRLF6bWZP5fqd9EhQ/elpHlGPApu4pe1ajKLUyJIsorQ4u/r69OY9Dk4X8HI1CyXReD8J3L10GbNuRE0B6idAARBlIQPnjSNKloPDg6K7/WSFXJ/Pm26zz33HLKysuD3+9OqvQPXwtxPnz6N+fl5zM7OasKeGxoa0oTFrKwsUS8rGo2mWbjovlSXjhfpJE4Z50nprRdy1dDmLVuo+HjE43EcPXoUdrsdg4ODwqpQW1uLgYGBjGkF9IQHapPH48Ett9yC5uZmdHR0oKKiAuXl5Zr1w+fZ/Py8KBHj9/tRU1MjSnvQWufP5cqULETqJRGV1zK5pEdGRjQ15chtSe4U4oGQm56EFFkZKy8vRyQSgcPhEJ9nchtxVxyQXhKG+npyclLjepUVIS4gOZ1O5OXlYWFhAVu2bBHvSi5uWrs010lpoOf6fD4cOnQIw8PD+PnPfy72LT7unOuYnZ2NzZs3o7y8HGVlZUKBGR4exsLCglAum5qaMDc3l6ZE2O12lJeXp3Hm+HsSh3J0dBQnT54UwpvFYhH1zCjrOL0rub2tVitmZmZgs9k0tfLm5+dx5swZUTaECzEk+HEeHZ9PXGgnYbm4uFjzXhUVFdi+fbvYC4gTarFYUF1dLWq5KY7QGoYseNBEI6lfnhz8oJC1dr6x2e124Svmz6LMqDIJj/M3aCPRs07pcYj0+D7AtZwW4XAYO3fuFOZzvslRraT6+nr4/ctFSjl3gw7RcDgssuJyM77sHvJ6veLQ5AcmhcvTu+txUYin1djYmJaBlfqVb/Dc2kaHAhcCZfeVLORy3pFsQUgmr2UZp4OFNiDakOX+5/PB4/FgYmJC5Amh+SXnL2loaMDExITgwQAQAh/dk4iYdXV1KCkpwUMPPaTZHPm7ulwulJaWIicnB/X19RoS79TUlEZYNJvNcLvdmnkpC4vcBSnzpoinxIV9I54Sn89kXZSFT5qb7e3tQujgvB/qM74u+OEuH/SkoY+OjsLn88FsNqOtrU1wZ6g2mCz8JpPJNAtYfn4+Dhw4ICw53HJL72OUxTsUCulmEOZrmbhcHR0dwtpGEaPPPvsshoeHxUFOgl5OTg5KS0thNpt18z4VFhZqcj3JOYMy7S30HpwEXVlZKXhEHHr8Sq/Xi/7+fpw9e1Zkm6d9pbKyEh6PB6dPn8bVq1dFH8n8l/HxceTn5+Pq1auCP8gtfLzPaU5nZWUhNzcXZWVlwgW1d+9ezM7OCqFQLtzLBWi+rugZNGddruUq9na7HTMzM5oitrSXkEW2t7c3zaJrNptRXV0Nv98vagGSAAZAo7wA0FWQZAsan/OVlZWCMkGuV7LO8kAVmaohK783A9fFEfrP//zP637Avffem1bX5p2EGx0+L3NN5MVvFCZOv+Wfy4cvab6ZTPlGbSIhwyifit7zjb7PlFeCP4cyC/Mkd7TQ5Pw1RlwY/kx+wHHug8yH0eO4cMuIzAWSs+2S/3ylukmr7S/Og+JZeeWsrslk0pAvRpwl0nbNZrPgcsj5fk6ePImSkhLBm+J9Cyxn9s3Eb9LLBMzzk1B79OrYyf1B6QcsFgsOHDiQMWs2mfVjsRhsNhtaW1vT+EJ68+x66qDxeaEXUs3XJpCeu2lsbAzhcBipVMqwP+TM3kRup/QMJETLVkqj7L28ptjU1JRmvurlDMs0D7u6uvDaa68hFovh1ltvRTQa1aS5MOo/zrMiLhkAMTbkOstU91BeB9QnnINitNZoLvX09Aghge9lXV1dQtjctm2bsJTz/D8yx03uf3nc5fHk84CHlcvr1oh/pLcPU7/xhJ96HEHOn6S9j6K1ampqBA+J3uXEiRMYHx+H1+sV9frktanXTn4dAPzgBz+AyWRCSUkJ7r///rQ1xDlzPp8Pp0+fRk1NDWKx2KqL/14PbkgeIap6vFqYTCYMDQ2hpqbmun73dsKNFoQo8Rw/aIhsWFJSIg44ozIbMohXQ5oKhaWvVhjKtMG+EegdenqLlicr5PkmeKHIRCKBgwcPoqCgANXV1Zo+4QRDnjAOgGYhGpWaMBKYSBDjdaf4tXToUeQMoJ9ITQZvBz/0ZeFXFjg4mdLoenJrnD17FrW1taitrU27juafxWJBS0uLxiROxMtMOankTZ4+45YwEh65EGfUJydOnMDzzz+PgoIC7Ny5M43Qzfvt8OHDqKqqwtjYmMgbRbwhvTGUD5pMc5N/RwcisKwJ8xIRRkoe52jxSBxOAJZzHBnlReJzlwck0LyV2/3MM89genoaxcXF2L9/v+CwUf4ZPt9pb+DjzOchPa+hoQF9fX1IJBIit41eH3G3oywUJJNJIchQNJecJ4feXa90Bwn3egkoZWVSHldAux7lhJvyb43mgN41lMaioaFB7Nd8HDPliSKBgPiVoVAoY3kkeg8aF3mf5t+TcH3q1CmUlJTAZrOJvF4kJOvtL0b7/kr94Pf7MTMzg+7ubjz00EOatSGvMb9/uVjy5cuXsX79ehw4cOBNF4KAG0iWDgaDWFpaWtU/0hAVMoN4MLSB00KfmZlBPB4XRLOVwDlDNGmJG6NndtQzTweDQTgcDgwODgq3zPVOUKP7ZuI+Adp8LPQO/f39GjMysBxabLfbceXKlTTtlszrFHrvdrsxPj6uqecDaEnn3MwNQPjI+f1CoRCi0SgGBgY0pnAyEVOhwytXrmiEiUx9l0wmNTmhuNvQyGVJWiGNDR9r7v4gk7TFYkF+fj7m5ubS7sstEOSn7+vrw9jYGM6ePZvWT3og0zppc/RcKrJJwsD09DTi8biGw6AXFNDY2IgtW7bA7XajqKgIgDbzNV3f29uL2dlZXLhwAfX19ZiYmBB8Gj4u1Fcmk0m0V97cyTRPLgh53pKLgdwW4XAYV65cQX9/fxpXZ3R0FMeOHcOxY8cwNjaGqakpUbGcu/T4XJRdQtQu4v6R64eqoNN8kecIob29HcXFxWhvbxfX0O9pvhPXhFwSPFyft48Ee5vNBrfbreHo0LuT1YbI0VRMmbtFzWazEH4GBgawuLgIm82mGVvixHG6gF5pGr20GmbzMieOzy3qW2qjbGlxu92a8HouQPEx7e7uRldXl26RaFojiUQCZ8+exdjYGDo7OwVvcHx8XLwvX0MkAHV1dWF8fBzxeBxnzpzBpUuX0kLc+ThzNzsd8EC6G4uE2VAoJBTqpqYmwZeT+W58fwkGl9NsyK5U6p+xsTGcOHEijbrhdDoxNjaWJgTJ70D9Ssk2uYvvZuG6BKGPfexj1+Xm+u3f/u23tCzFOxGc0yJvjMRNoJwcK5m0adP2eDyw2WwoKSlBSUmJYb4X+fCkZ1N+B0oWqCfYyPeKxWK6FekJ9E6cX0EkYgCaxIiyhkJ8DUJTUxMKCwszRhrQgTwzMyOyscrkVb1Eenr3oTGS28Hf6ezZsygrKxP5cKi6eKYIQOJQUU4o7ouXf0f9HAgENBsY5dMBoEtyb25uxqZNmzShqVxIptwldNBQvqqamhohzK0mmpHfl1cr59FRVVVVIopL5ucQSHDIyclBKBQyJNq6XC7YbDYUFhbi1KlTCAaD4pDnbaYoSTrw5OcFg0HdA0UeYy5EkoBAVkHOEerp6cELL7wgoqpIoOH31hNyZW4dP5zp0Ovs7ERFRQX8fj/q6uoMx8Nms+H+++8Xbhfi59CB7XK5NDXE+Ljzeajnbne73Zr1Sck4ietGtaNICOUgQYa4VvQsGXpCP93T6/UKKzD/LeeLkfJHUVuyEEP8H/qMggL4XidHqwIQ7no+15PJJJqbm1FdXY2Ojg5YrVbU1NSI9ysvL4fb7U5LUOj3L6eOWFhYQHZ2tmj7zMyM4CsZKY3UH1arVXAe5f2LhOempibU1NSgra1NWH05B8zlcmF0dBQnTpwQY0yBNrOzs3jmmWeEZZ0wOTkpErXSOPv9fo3SKp8Z/G+a36QwlZaW3lR+EKDyCK2Im1FrjJsg5XpUK/2OJibl0nC73Wmp8rkJlNfdMvIZV1RUaHJz6PEUhoaGYLVa4ff7sXPnTpH+X48Yx59HGtf8/DxsNpsoxHrixAmMjY2hqqoKO3fuXHXfyb7oTOVG9FwiK5UnMXrmzMwMnn32Wdx77724cuWKbhV1o/GSrRRG/CXi/NhsNuEy4i4E7hICjOvD0RhkZ2fr1g3Ta5cRD4N/DlzL0UNEWbmkAd2bXDXc1ShHcun9Tna5kHuVhAae/4UONDoQ5GhA+V0z9Rm/hlwZlEuFWx/o8CRhqbi4eFX5h/i8SyaTGncwjRkvV0LZmjPlHZPHxoh3SO8t5+OS+SlkXSGstCcY1TrMxOMymnP0vEzvq1eHj/hq69evF9QD2l+DwaAYHwBiLZWUlKCvrw9Op1MoaoDWHURKJOcV8XlKfajXF9RWckmXl5djdHQU58+fR319vRDqGhsbdfNFGa1Fo7HPpECTsJhIJFBdXY2mpib09fWhqKgIR44cgcPhwIYNGzQWOFkAD4fDKCgowMTEBKanpzXRwXru32QyKdYPgOveb68HqtbYm4S3QhDS85/SpkVhyitNaPl+fHPmBySZPYeHh9HQ0CDMqDLBj8y2ANDS0oLJycm0Be33+zE3N4eRkRHs2bMHR48eRVVVFWKxmEYAozZwAY02T9pQZDLn6xFIeF+uhgi7WsL0ap7FC8fq1UyTtf6VeCl6B5Psn9c7XDihV++g4mNGhWDl5+oJBUbtXYm/sNJhKNcPk/tdb23oCbokUMmEVi60ZJpHRu8OQJcMDlxLUyALC5kEK6P52dXVhWg0CofDAQDi/4lvpicIylwoGTIPzojfwXl1NAYAdIMUZM6cTNTXK+YrC1R6iVevZ0yM1rM8V+Rkh3pCNbXV4/FoODcEozVLbu28vDzk5OSkJVHVKyZN7yDvCx6PR7j0KOO4XiJFI2VAb6+T+4KfCbK1LxaL4fz58xoBhgQWCnrQK24cDAYxMjKCy5cvIxqNorq6Gjk5OSLIQn4WvTNZaEm4yhSQ80ZxwwWhhx9+WP+GJhNyc3OxadMmPPDAAyJx0zsVb0XUGGl7nOzJF8lqyM6y4GCkTdGi4xlG6TNekZ1cG0RoJCFKXmzd3d2Ix+Np1wD6GUoJRpr+9b4ntUNuW6YMy7zv9d5ptcRLvQNQL2JEr4jhagi83d3dmJubQywWw759+zJatOQ2UR0x2lxJK+OmaZn0ytsUCoU0m/gbsaLojQnNlUybOW+TbJFYSajU0/r1BCw9gj4AzdrhgiMXKABootD0hEZ6B2ozFwB5sWG/359RSzaymMhEdX7NSlnG6f39fj9CoRCampqEMKk3x/lhzOcZFwblgriUVd1sNotx55FgemvzevaETHORC3i8r3t7e8WeRULHSgIa7dM2mw2jo6NwOp2iPA0vJssLPpMFjxQOWenjVj0uYCSTyVVFx8kCbKa9hPZ8QJujSa4Ar2e5zBTQceLECZw+fRobN26Ew+HQ3FfP4udyuXDixAm8/PLLaG1tRU1Nja5V+s3CDc8s3dPTg3/6p3/Ct7/9bRw5cgQvvPACvvOd7+Cf/umf8Nxzz+Hhhx/Gpk2bcObMmdf7iDUB4igMDQ0hGo3imWee0WR+5mHk5BvW4wZwsiMAUTyQCh9yngNPTkf3pslCfy8uLsLr9YqQatmiASBt8+cEQ745EU/C4/GIpF/8UCY3gnx/vXeV35P6kCegk/vG6F5G72Q2L5NtOXlW5oIQb4A2UHqPTLmCuA+fxgTQr11Fz+jt7U17XwInmNK7EF/A6/VqQmyJF8GL2MogXkEymRRzknL0yD5+4mAY5QDR61u97wEgEAiIPpG5JXzuytwZ3lcy143el6xiMv+L3oG4SjSWMmfM4/GIwrE0BpQXhfe1zPHhc0WvnldDQwOGhobgcDjQ19eHVColyMVEUOZCkBHvjvPC+HPpd6FQSENMJysZuaN7e3tx6tQpLCwsCPI3Hx9y08g5eujdAWj6j5feoQAE4m7R78k1kkwmNcVljcZGnlsrzUVat5TsUO5rEh7k+ZUpMID2SKrrdenSJVH4lgTcEydO4LXXXsPg4KCGmEzcLBJ2KVM5z0vFhQ/is4VCIc1c520Frq1XSlRK68Dv1ybBpLZbLBZYrVZNfqrs7GyUlJQInpRssQK0ARPyWeL1elFXV4e8vDy0traKNW0ymTS58GicKP+Zw+HA7Oys4L8ZBWO8VXjdFqHHHnsML774Ih5//HEhac3OzuITn/gE7rjjDnzyk5/Ehz/8YcRiMRw8ePBNbfRbibfCIhQMLkcdnTx5UpRR4GneZeuOnmtDdhGQ9kHmdT1T6WrdIHzjMXLxJJNJsbiIEEscJc5XGhsbE3W8uDamp63zqCae8l5PW5atXLJ2J1sWjDR22Yyr5/JIJpOG9daMrBYrjb+eFsdzsfDinYSVrF5GrhEjK6NspaL+Ly8v17hGPR6PqI1UXV2NaDSaxgfTez/qNz52cj4XI03S6XSir69PU79KdkPw0N+VXEdG7sfVuMe4ZcTItannmuaCHlncxsbG0N7eLgQZCrPnY0QHnOzmlPtXbjMJGETsJvLx8ePHMTExAa/Xi61bt8Lv92N0dBQbNmyAxWLRcIhki9BK81fmzng8y7l/OAeQW4QoGnMlN6Beji7ZfbO4uKjLi+SWM86lk9fBasaU0iGkUinRp8SzPHv2rKglt3v3bs39enp6EI1GYbVaMT09rcnlI1t6aO2HQiEx3nrtks8FekeKlAWu8cEyUSX0OH7cQpRpPzNyXcvpS/j+SfXcKGpMb16/WbjhrjGv14tnn30WW7du1Xw+MDCAffv2CVb8vn37MDEx8Xoe8bbAW0WWTiavEZQrKiqwc+dOQ7cML5xJmweBFv3ly5cxMzODe+65BzabTXxOBNZwOLxqIidZHniSPFlw4YKS7G+nTX92dlZDngX03SrEY3nllVdQXV2dlivIqP/45iEn4pMPTZvNhrGxMdTX1wuLhN57GbVPL6mivBnoCXirFZJIuNMjWq7UPt7OTIJmJncWsJwfZWBgACUlJSguLsbY2JhwD/3iF7/A7OwsCgoK0NTUZCgI8kOPBF9uwk8mkzh06BDy8/M1FlDu/onH4xgcHITdbtccmHrCrZErZyWXq9zfADRtXSlJHgmOei4E7g4dGRnB4OCgKLRaV1cHu92OQCCA0dFRzM3Noa6uTqNMyO7y1QjYcn4oEih6enrQ29uLUCgEj8eDjo4OTE5OivXp8Xg0B6RR8jyjA9HpdOK5557TjKfMGeNKCmBMltVTSGT3HB34JKxTXiDeV9QfsmBBFovZ2Vns378/o2uG8laRAMPnGyl6dXV1OHr0KNrb22GxWDR9RXOjpKQE8Xhco8gauT1XIorL7k09Ar+eW01PqePKUiKRQCgUEhZl3vdGBXVlRdxIEZE9B0b5ld4s3HDXWCQS0ZQYIITDYczOzgIAioqK0kLvFPTBD1JZNuWbn9lsRkdHBwoLCzWh3AQyl6dSKRQWFopQRo9nuUYQ5frgLgPuYgHS3UgkvGzbtg3l5eViEhPIZWGxWITAsrS0hOzsbBF6Ho1GUVxcLK6hd9Hb1D0eD0ZGRlBWVoaxsbE0t4aRm0u2Xsk12EgDJBM35YSRXVckVFH0j9w+l8uFoaEhVFVV6bpdZBM27yfuJtEDtd/v92vclXrvzTd6PXdppnbouRz4/Xp6etDX14dgMIhQKISxsTFh5g8Gl3NNLSwsCMI932DpHYmjQ/OFxiSZTIr0AuFwGA0NDcjJydGdD/QOvOxFpveTP9N7V735I7uHV3Jd0jqz2Ww4ePCgOAgikQgOHjyIWCwmrLvJ5HJ+odHRUYRCIRQUFMBkMmHbtm1CEWloaIDNZsOtt94Ks9mMhoYGTS4ds9ksQpZl1wdBdjOZzWYRQUXCTSKRQENDA7Zv347a2lrhKs/Pz0dra6tYm/T+3O1nNG94Pw8MDMDhcODChQsadwiv/3Xw4EHMzs6it7cXAETNNb0xkd2W/PCn35KQTZGIi4uLmJycFOkSzGYzJicnEYvFxJyen5/HwMAAzp8/L+rVZQLlrRoeHta4hbxerwhHHxgYQH5+viY3mdG8sdvt6O3tTRNuaW7yWoJ6NeRofEnpHB8fF7mKjO5nMpng8/lw/PhxkSeIBB/ac/x+P/r6+nDp0iWcOnUKyeRymL7T6URXVxdOnDiB3t5e9PT0aN6NKAs8z5pcEofGlMYnFAql5Ve6WXjdgtADDzyA3/u938NPfvITsTh/8pOf4BOf+ATe9773AVjOErt58+Y3q63vepjNy7VqaLEbQeYQyPcgDhBplXQYXb58Gfn5+cjKykJFRYWhOVJexKRN2mw2mM1mjI2NoaurS2xa8uHT19eHubk5kZSP2kSbfibQu1OVdLvdriGn6rVPBi0wEo749R7PcgLAhx56CPn5+aKEAV+wegILPzzD4TBqa2tx5coVuN3ujIctbTKJRAKJRAJLS0swmUyG9ZZokw4GgyJPCG1onCdCwhoJbCsJNvw5NF56uYHoOQ6HA+Xl5WhqakJLS4uoQeXxeMRcaG9vF/3GXVl0OAEQlaZJs+QCKxVnJXdmJusZuVX0yMMARN9QAj56Z71DRG+8aF7wxJAyF0ZOWNnS0oKxsTFkZ2fj8OHDaGhoQDweR15eHo4cOSKEgGBwOWHh6dOnYTKZsGHDBuzYsUPwjIBlS/qWLVswPz+vyQFDLgaXyyUEdgC6AjXnz3m93rQ+pTlRWVmJ++67Dw6HI42fome1pLmWSCSEciGPE0X+1dXVYW5uDjU1NZoaYNSfAwMDiEQi+I//+A9EIhGR1JHzgeR78hxonD/ElS+v1yt4KUtLS4L3Qm3leZJIkamursa2bduwYcMGXaWSg+Z8XV2dhj/DhZGFhQVMTk7qrjHi+g0MDIh6hZm4gbyWIM3pZDKpy6ciy3tFRYVhPT3iap06dUrwmzg3JxwOCw4hcI07RO/33HPP4fz58xgcHERRUZHgFBF4/+rta3yd0b1pn1jpTHgr8LpdY9FoFH/2Z3+G733ve6JicHZ2Nj72sY/h0UcfhcPhEBI/RUK8E3EjXWNGXBxgdfwS+V5GXBfyUUciEfj9fuzevTstrFl2bRn5zsnlyWtTychUAiPT+wNakzC5EvLy8nD//ffrugr1XDtGOWqMXFxy6Qe5L4FrHBE6FEkgIheH7BqT0x8Eg0EMDg4KXoBe2Q+6r55LTM+1GY/HhdafKfLCyEWmx00gIYi7SeR+p0ggq9Wqyc2iF3nI+1AWXIyeozc28pxcKcLN6J1XM3+MwpF5hCTnrMkuk66uLiwsLAhLDPUFzc2ZmZk0Fw31J9WDo99QCgvOGTTaJ/TKxsjvQJ/RgSvzQeQxlF1QsnAlR2ZRSaVoNJqWQoMUgs7OTszPz6OgoAC7d+8WvBYSlsidSnm4eBt5yQ86xGlujI+PIxaLYX5+HnV1dbrRnLJrnPMsV+II0VgRb44HshAvyu12A9AKSA6HA+FwGJFIBPfcc4/gLPLx43tXf3+/bo05nmKBeJ9GLjA9l67P5xNurUyh6vQ7yl8XDocxNDSE7u5uNDc3Y35+HkVFRbrlUfTWnryuVuKdvZl4y/IIRaNRjIyMIJVKiRC6dxNupCCU6SBeicMhXxcMBjMWas2Ub4Xaovd7+VCQhSYjgW10dBSnTp3C9u3bRYI7DqODRfZ7DwwMYNOmTZoigavtV9Je5DBx3gaZZK3ng+c8ANrceUiuHoFVJiYTZ8Nut6O5uVlDWjQSPI0S3I2PjyORSGBubg7btm1L8+PLMMrJJM8nXvfO5XKlEdVpgyMrB8/6LedM4SRMmfgsv49RCDoP+Z2ZmdHdfPnYyIn9jNaK0RqTuV8yMVqPvC+PN11PfBDKv0J9wA+z8vJy0Z9kSaO2kECgJwjpvZ/eGsiUD0tvP6ADnfqS84Tomdz6x+doYWEhnn76aTQ3NyORSKTlzenr6xPrbGlpCYODg9i8eTM2bNgAABqB6cSJE7h06RK2bduGubk50UaqO1hTUwO73a6ZY8XFxZiYmIDZbMbWrVtF5BYpDDxfFQlsNMYr8cv4OqR9MhKJYMuWLWk5h4LBIIaHh0Xpl9LSUgwNDSE/Px8ARDJUzs3hwRwyyZivHXIlU6JFPYEik0JMCiLNSzmHl1zrjiysZMGme5EL0OFw6BY6NtpXqM+MErneCNxwjhAAvPjii/ijP/oj/NEf/RFKS0vhcDjw/e9/Hy+99NIbue2aAfmLKZyRDkYj1w99ThwBCoGlSce5LvI9eM0gI16O3u/7+voMa1jF43HDkHWz2Sy0I06Ok905FMYKaDd3isxoamqC3W5P4yWtpl8LCgpEbSQ9Uy13I+qZaDlHgdwmHo9HhKwSN4CbymXQwdHa2opNmzbh3nvvFdo6uYrkkHv6DQm3fr82PL6iogJ2ux21tbWYnJw05AJRnxJRlcJ4ybyuJ8hyLZLeSeYtuN1uMS5ULqOwsFBjkeFuEbk/ibdB77O0tITnn38eMzMzwqyfTC7XIqqoqIDVahVjKfcrcTT0Cr7yA46vHe46kF0xetwv+i0XlvlcpvYQJ4XCjc1mc9q4yC4acoFRThvOrwKWk5m2tbWJZ9L7ybw+Pk6JRELwsYjbQYcrXUMHI+dnUOkNchPRPch1bLFYRFqJnp4eTT2qM2fOwOv1YmxszNAqQu4br9crOCs0jiaTCePj4xgdHUUgEBAJG6lkRjK5XHfQarViZGREKAS0jiYmJkR5IRImaC+xWq2ipARxr9rb2zVCkJwOg+aIXJON3LSbNm0SZVm4y9fj8WBubg55eXlIJpPiWVVVVSLAhVyl5BpMJpOadtI+zF3XwWBQpFigpIfUXs4hpD0kHo+LfpP5W+Si5X1CghXt9TQXiCYwMzOD6upqzMzMwGKx4OjRo8jLy9P0Mc21ZDKZtq9MTU3B4XAgEonAbDaLfYP2dSNX2luF1y0IPfXUU9i/fz9sNhtOnjwpBmZubg5f+tKX3rQGvpthNpvFZOS1aPQONpowpJ3p5UjhB5vRPYwmHAk4MlmS6p3JNaxcLhcGBwcxOjqKrq6uNB6Px+MR0r5eThVgWeOhPBwyB8blcmFiYkK0Va4Txd9Ffi8ScKqrq3HLLbcAQNqhQfegzU0m9fFx4IRROuSmpqaE6VoWWvl7ktAaDAbR0tKiu4llEmSMxqm1tRXRaDStMKXcPzLpWi8PE4FcdmazWXB7eARRMBgU/CuLxYLW1lYhDHJ+DXAt90gwGBRjQ2NKBzW9z/nz52E2m9Hd3Q0A4vCJx+PiOTSWepwXIzIvabU9PT1izMiCxPufriNrA7l1Ms0DeYxpbfLx5NfTeJjNZsF1kucSCbnEA4rH45icnEx7P79/ueYcX8d8/RB/BgA6OztFkVbeJ4FAIK0GGrmkyIVCwh+NqV6eKcpA73Q64XA4UFpamjYGJCQTGbuyslIIJCQwktBz9uxZuFwulJeXw2QyCesjFU6en58XvFP6m5L2hsNhzT4gW69dLhc6Ozths9kwMDAgBA0itpNVntY0AFGTbWJiAuPj40gmk4Jcrlfny2w2Y9++fdi4cSM8Ho8It6+srERzc7N455KSEszPz6OmpkYIpnKkFbWDzy/iFpKAytc9CcckgNGezffykZERWK1WnD17VuzzJCCFQiFMT0+LPaWpqUkoyCQck5Vt165dGB0dFX3t8XjS5hrfV2iPaGpqgtfrzZj/6mbgdQtCX/ziF/EP//AP+M53voOcnBzx+W233YaTJ0++KY17t4O0dYqmogmtp6lzCwJtmCRI6B0C/B78UJS14EyWDDokSkpKNJoSmdULCgpEhKDeexUWFgqtmBZweXm5iBLhAghtmBMTE6Kti4uLgryXifDKDzx+wOpFLXCstAD1xkEmQeqRcbl1DYAo8EiaFh1AZDrWew69B2nQ9Bnf2ElI5VYX/m504HHSdUNDg+BQcDI3d3vwSBjaoMkFwIUqup64MMA1iwz1E3DtoKWN/dSpUxqhtL29HSUlJXjooYfEJllTU4Pp6WnRD3pjKc9hWaAky6DD4UBnZ6fgavBDhCwLExMTQggqLy/XCN6ydQmAGEeay9wqYLR+4/G4EByIAK2XrJCeJysgvE+dTqcQVEkIstlsmkR9yWQSeXl5mJubQ0lJiRBAp6enhQDCD/JQKISrV6/i7NmzolYcKRrJ5HK241gsJu5RXFyMpaUlUbSX+o1c/dRmLiST8hEOhxGLxdDf3w/gmqWso6NDcA9LS0tFUAdFhi0tLcHvXw4Vt9vt2LVrF2ZnZ5FMJjE5OYm5uTn09vYKi+bY2BhOnjwpCMuzs7N49dVXhUVifHwcvb296O/vx2uvvSaEOhJkSejJysoSUWd8nOS5kUwmRZQc5x75fD709vaKubi4uIjt27cLlxlZ3/WSb/L5RckWuYAqgxRBsnjxddrR0SGyylPUmMPhwIkTJ1BYWCjGi7vryRpIY3fbbbehpKQEDQ0NYp0Eg9oC0nyNkgW4tLRUkMBp73I6nRol4mbhdXOE7HY7zpw5gw0bNiA/Px+nTp1CTU0NRkZGsHXrViwsLLzZbb0puNEcodXUfVoNxyHT36TpyQQ/OU+IvLBIM3Q6naipqQGgLapJ5EB54yeTMi9IyP3IdB85n0xfXx+uXr0qosVoYei58vj7JZNJDWFV5qQY1ebRq+XFBQKjjYauXU2OHu6KoLxNdPgS18SIryL3EY0j/Y76mdwZ8rvQMzmZmwSkc+fOCU4PcR24W0zmjDQ0NAjeCxd8eLv15jN/N+Bakj8j3hb1IVk9yJrA30+eZ5kSshGZuaqqSqQA4P1Bie5sNpvGPWrEZeJJ+nheFj3ysvzuwWBQJMEkFxvdg3g0RUVFCIVCoi1ybhayIvFCzHrcJo/HIzh4VqtVQzo2WvOxWAydnZ3Ys2cPIpGIsJ7xZKi8HTQ2+fn5Yu/SK93C+4H2gcuXLyMUCqGhoUH8lh++NL68T2WuiclkwtmzZ1FcXIxkMomJiQnMzs4iEAiguLhYWIMXFhaQm5uLkpIS9Pb2IisrSxDKgeXQ+GAwCIvFgoKCAt1Cz5k4lnwuANpyRjR3yJo0Nzcn5qK8RoyShhoFHejtiSsF28j7Ec/zJpfT4ftnMBgUJXvMZnNaPTGjdumdBbRXyGT9G0GcvuEcofLycgwPD6d9/tJLL4lDUyEzPB6PSMPOXQiym0jvcO3u7sbIyIiY+PLhza0d9Hs+qbmWz60ispbNI0q4idVut6OtrU1EhfHJT/5lIhZz7Ybfhz+bNniPxwOHw4Hm5mZhBQCga72gjSYYDKK2thbRaFTXakSuI7JIEO+pr69P9CmZ30krW8lMa+TO0rPMkSuLtHQyl1Mf61mm9PpIrw1kNeDhx2Q9JO2O34NCh61WK7q7u2Gz2TA9PS2EHn4ffv/Ozk5Eo1G89NJLGBkZEVXWedtcLheOHTuGoaEh/PKXvxQ8DW7yb2trS4s21HNtms3LeWEozFev3IKe1US+H6U6iMVi6OjogNVqRTAYFPyWhoYGOBwOwf/irgluaQWWo2IpCR+3BNLc59wePq508NDcpySDfA6Ry3JwcFD8ntZEX1+fsCjOz8/j4MGDgmdH/WC32zUpDvhBR9YrcsOT8iBbhCn8PRKJCIsZ9S9wzZXtdruRTC7nl9m3bx/y8vKwuLiIxcVF2Gw2IRjy/DR8TlG0IbkIyQrS3d2Nrq4ujI6OinHgljmvd7nkz759+2C32zE5OYmFhQVcvnwZubm52LFjB+68805s3LhR7FNtbW3Iy8sTdbuI13b+/HmkUimYzWaUlZWhrKwMGzduFGMjgxJTDgwMpJU6IcuebN3gFlay4Hd0dCAWi4mcXDTfiftDpGS+b+tZG4H0vEv0vUwj4JD3Bm71kpUJehZF5CUSCcHzIuGOrpNB84v6hue2ojnLuVs30xoEvAGL0Fe+8hV897vfxT//8z/j3nvvFTWy/uzP/gx//dd/jT/5kz95s9t6U/BWldjgGiegLaMRDofTojmGhoYwMjKC9vZ2TVSWLMXTZ+Q2ys3NFdls9TRZbomg38pClp4Fg0PPmrGS9gLolzeQtQdeyJAEm0zFBvWeQdq3w+HA9PQ0zGYzGhsb0zLSZrJCGVmLjK6hMSCXA2mNra2tae9rdD+9PjKybvHreB8Qj2B6ehp5eXmIxWLCxM0tS/J9KWInNzcXo6Oj2Lx5s+AT8XF66aWX8OKLL+L2229HYWFhWnFJTvrlbRofH4fb7cbMzIzQ1kdHR3HmzBls3boVlZWVuikQMlnT5Cy61EaynpArjIjWmaIYaa0YRXHxTM5tbW0aqyxZVowsqMA1a8ztt98u3Ft0UCYSCZw+fRrbtm3DzMwMLly4gJGREdx1113YvXu37jzhApkcCdXd3Y2LFy+itLQUeXl5mszYcrFPstTyCB+yatF48baS9Vcv87pRWgJqK83NhYUF3H777WlpKWTIWY7pHrIllD+X3keuiUZpKWRBg96J5s7MzAy6u7vx0EMPwWazaebbShY3ozkrW675WWBkbaT5JgtdenuE3N8r7WF67dWzzsnWab7meBqGRCKhG0H8etpyvbjhFqHPfe5zeN/73of29nZEo1Hs2bMHv//7v48//MM/fNcIQTcSmfgNsqWIfPIOh0PwTChqKJnUJtniVhAAQmqnCZyfn59WXJX7mzkhkjKA8ggEeobMyeHgCzqTsEQh9rLwIVuzEokEJiYm0NDQIMh+ZM2RSakcsobEfeUtLS2IRCI4ffq0KCVRWVmpa+HS41gZwUiICgavZS5ubGzE3NwcCgoKRLtow5Mj8GQ+gtxHZO3iRWvl62iMgWsFThsbG5Gfny+0feJx0H1IyKT722w2dHR0IC8vD3v37hWuHZpHxD/xer246667kJeXh5qaGkxNTaUltyPrm5yw8qWXXhJkS7N5mUQ9NzeH8+fPa95P5koZ8bj4AcE1UbKeUBh7T0+PmIuXL19Ouz9/x0AggFdffVWE9ROoj4ggzsfO4/HgzJkz6O3thc/n0whsNNZkjTl37hwSiQT6+/s1a3NpaUkQWNevX48tW7aI/uQWYnJnz8/PizIaJpNJkIIpJUEqlcKFCxcQjUbFIUf8k76+PnR1daGrq0vMW4rwofVNEX6jo6Po7+9PC7SYnp6G3W7H9PS0iBI7fPgw5ubmNOuHLKZkNS0oKMCOHTs0RVH5mHOrsMViwa5du1BdXa2Z62SRJiFHL5iAW2tIKSQLEbcQ8znq8XgwNjYGr3c5MaQ832ThivYMvp5JeOPh6HIyUK/XK7JKU1v1rDxTU1MIBAI4efKk4PvIa5/v03qCh55lkIN+IweUUGAFCV98zfG9jp5FCgCHniX8ZuENhc///d//PSYmJnDixAm88sorCIfD+Lu/+7s3q23vatAk4Jk/+UFGZDcAYnGPjIwIwmdra6s4aHgUEJ+QyWRSpEonM3FNTY3QAGX3DmlLnOSsFzVm5JIgkBAUCAQ0B51cFmB4eBhzc3MihJSuSSQSMJlMGq4I5e7h5UX4oucLmu4zOjqquRc9lwoBFxcXY/PmzcjLy8uYWZa7R/TMuCttJtRnJGxMTU2lufJo4yUXiHyvTIJzJsgbFJFsKysrxSalZ26n37lcLjFupLXS77lARpFKlZWV2L17N+677z7k5+eLXDmnT58WhxjPkuzxeARht7KyErFYTGSn3bhxI65evYo9e/Zo3oksB3IUIGE1Fj0ShkkYeumll5CXl4ecnBz4/X4cP35chMbTO05NTWFubg6xWAw///nP00LSi4qK0qLi6Pfk/uVKCD8sydXmcDhw7NgxEW7Ox4iyDO/atQu7du0S/fW9730Pr776quBxxGIxUW29t7cXp0+fxtzcnCCMT01NYXZ2FuvXr8fU1JRGkOXBDPR+tNaprf39/bDb7YhEIoauJBIqaH4ePHgQk5OTeOWVV3SvB5bdT+3t7RgZGUE8HhdjzIWFnp4e4ZrlfUzr22QyiSKoZrNZCBR0rRy2ztvIhXUSVHg0r9mcXt6IzymyCNHeCaS7tckF2tvbq4nqJAGK2sSFH721Ti6tlpYWrFu3TkTOcdA+TcK+niInz0N53zESVuQ1xv+m9lLkpSw0cbfZ28EtBrxBQQiA4Irs3LnzXZdM8UZiJR8p11jIxKvHg2lsbNTUYJItCJSnqL+/X2Oql6+lzYZyPZAmS1ooJy9zQY23hU9wuX6XrGF5vV7cfffdyM/PR01NjTgsKM071QoCIEJpiainV16EL1i6D9XLopBvWuyHDx/G9PQ0zp07h02bNmHfvn0azo7eWMmRXvydOZ/LCPJGIYebezwekTNHT8CUD3+jw56Pg2wx4Xli6HO+QfE+pO+JH0CWRb0IOZPJhFgshkuXLgkhiiw4Xq8XIyMjyM7Oxr/9279heHgYvb294js+H3NycoSbxefz4ezZs9iwYQMGBwd1BUP6rZ6QrQc9/hYJQzt27EBRURGampoQCoVE2DbfsBsbG7FlyxZYLBZcunQJJ06cEPcdGxvD0aNHEQgEEAgEhLXk2LFj8Pl8KCoqQllZGbZu3SoESjosiZvldDpx6NAhZGVlYWRkRIwbhR+TYMrHtLOzU7x7bm6uSMpYX1+PkZERRKNRzM/P4+LFi9izZw+i0SiWlpaQl5eHhYUFIaj29PRo0iLQ+qUD12pdzvQ+PDyMRCIBu92Ou+++WxN9R3OOBG5ao36/HzabDa+++qooRirPVRKS+/v7sbCwgHPnzgmrEFmzLl++jMuXL+sezmQNmpychNPpFHuYbE1pampCPB4Xe04sFsMPfvADzM3NaSzj5BamaF5qp7z/cEGC+EHUJyQc8XI6xElzuVyaHGVypCJPNQGkk5+5dZuUYplszOc3WX65kuzz+RCLxcTepyfw6AlhslIm/21kiaf2k6WKrPo0xpnW7o1G9vVc/PDDD6/62kcfffS6G3Oj8I1vfANf/epXEQgE0NDQgMceewx33nnnTW0THUw8JT6Q7jelSUSfExGdfLAA0irQ030AYO/evZicnBTPSiQSyMrK0q1aH4vFsLS0JMomkAbB6zfx9suEV2oT5c3g70KLD7gmTHBTK7dK0d88eimVSiEQCGgilvizaRPi9zGZTFhcXITb7RbRGfF4HPX19Th//jza29ths9k0mpJRBBigdTPS59wMXFNTo+tP1xt7ObKNLCMECs/nrgGqCL2Sb50fFPyepPnT5/I96H3ICsS1bGqf3vPOnj2Lubk5UYg5HA5rSkV0dHTg0KFDyM3Nxfnz51FbWyu4HYuLi+jt7RX8ArPZLNq+tLSE2dlZwSOiNQNAJFns6elBSUkJTp06JWojGY0hL89A72c2mwUvqq6uTlzvdruRSqU0Lgu/34/6+npROigYDKKrqwsNDQ3w+/2oqalBdna2sEJ0d3eLsgTV1dViDVCuF1ojtG4OHz4Mp9OJ4eFh3HXXXZr2m83Xwo/5fnD77bfj8uXL2LBhAzZs2CAOx2QyidraWpw9exazs7PYvHmz4CgVFRWJzL7kgqM1QnOgtLRUc9iThXdychKbN29GVlYWLl26hJ6eHiwsLKCyslJjwQgGl2vlUdbwWCyGTZs2aZJQ0hwki6LT6YTT6UQgEMCWLVuwfv16eL1e+Hw+XLp0CWfOnMHOnTuRm5srst8T6Jk0ljU1NRq3Jl1rsViwf/9+8dnBgwdhMpnQ3d2Nj3zkIxpBjiLzuJIYCATSFBjqn8XFRZhMJnR1daGkpARTU1MoLi4WggZFjlF5DJnTxfcvclMa7Xk8GpK3Sb4v7xOiLNDn4+PjCIVCwnJDiWL5viP3IZ0L9C6VlZUaYZDWqN5+zM8CmvN+v19Y8OT96q3EdQlCPT09mr/JPLllyxYAEInRiAD6dsCPf/xjfOYzn8E3vvEN3H777fjWt76FAwcO4MyZM4bhu28VeHI7IkHTgpInhey+IHOq1WoVUUhy6DNFcezatUscaoODg6itrUVXV1dainOa9LTIXS6XOLDo0ODgk1tPICDyaTJ5LdOoTGolwh0A8c7cDw1AI0Tx/D28dhAR8+i3VIiRL2De3k2bNon3kDdLAl/g3HLBBQ1ZmPX5fKIWm3woy30m+/HdbrcIV6aDh6xggUBA3FPeiGQYvQ9vA23sPp8PWVlZgh/kcrlw6NAhXLlyBbOzsygpKREWHhozvslSJEkgEIDT6cTS0pKwMJCW39zcLHhtubm5ogp2UVERbDabELwuX74syiPQ5kwpH6gel8/nQyqVgtvtxvnz51FeXo6f/OQnKCsrg8lkQltbmzhoPZ5rWY0DgQDcbjecTid6enpw5swZXL16VbgKGxsbASwfQGVlZZoSKlVVVWLOBQIBfOADH0BPTw9MJhOmpqZw+PBhUeoEuJbzJTs7GxUVFULAIGFKBr1rfX09jhw5gnvuuUe4NGisySp64cIFHD9+HG63G2VlZRgfH8emTZswMzOTVqAzGAyisbFR5CmjEHCPx4Ndu3YhGFwmFUciETGPaE7z+lSUNoESHWZlZaGwsBC/+tWvhAWhsrJSw2shzhtZcgsKCmC32+FyudDf34+zZ8+io6NDHKQNDQ2i/ANlvM7NzYXX60UoFMLY2BgKCgowNDSEffv2iflF/CBaa8TjIssZzXe/35/GoQOWc1g9++yzIgSfuHEkIJIQyuuo9fT0oKmpCT6fL43MTxn/L126hO3btwNYzgX23HPPaTwmvA2ceMwFLN6XMnp7ezE9PY3z58/j3nvvRU9Pj6Ysiixg0G+Ki4vFGPv9fmzbtk2sbRL+iOfG20d7nF65JNoDS0pKEI/HRSqTaDQq5qIsSFJZnpKSEs25cbPwuqPGHn30Ubzwwgv47ne/i+LiYgDA9PQ0fvd3fxd33nknPvvZz76pDX292LVrF2655RZ885vfFJ/V19fjfe97H7785S+v+PsbGTXGa0CReV3OGKpXJ4q7BYg7w2vG6EXLANeiGwYHB2G321eVO4WsILRIZWErU3TOyMiI2JjJ9GuUF4csAXp5ebiFhfM1eO0gvVw6RkKQ/J0ReD+TgMJrKMl9QNqrHD2kN2Y8iocXdKXNizgD2dnZWFxcRDKZFHWKqG+j0Sj27dsnLAA8nNoogozaMD8/jxMnTsBqtWJmZgZbt27VhJZfunRJWBjIRULvSvlbqqqqcOHCBZHlmFyiPNqoqKgIV65cETnGyEpBfeR2u7F161acO3dO8G+Ki4uxbds2kSySolLGxsYQCoWEhcrlcuFnP/sZXnvtNczMzODAgQPIzc1FKBRCSUkJvN7lPD1DQ0MoLi5GU1MTZmdnceXKFbz44ouIRqMoKipCfn4+bDYb2tvbNQcRj5arqKjA2NgYNm/eLKLgKElec3OzcEvRoUPKYG9vr+D46UVq8vnjcrlEdu3m5mYRdkxFPk+fPo2XXnoJiUQC69atw969e0X7HA4HHA4H9u/fr9kn+Jw4dOgQfD4fPB4P2trakEgkMDAwgJqaGoyNjaGurg6pVEqzluiQLi8vR05ODvLz8zE8PIytW7fC41nOJrx582aYzWYhPLS0tGBmZgZWqxXPPfccysvLEQqFsLCwgE2bNiEUCiGZTKKpqQk5OTka6wkJ1RcvXkRWVha8Xi+cTqeomF5dXY2hoSFcunQJeXl5+OAHP6iJ8HvmmWcwMzODZDKJD3/4wwiHw5oaii6XC729vSJ9QX9/Py5duiQCB0iYoOSJbrdbuLgaGxvR29uLS5cuYd26dTh79iwuXrwIh8MhkoEeP34cR48exdWrV1FWVob77rsPoVBIEJtvvfVWRCIRNDc3C0VIrmFnZPHln/t8PnR2dmLDhg1YWFgQ+aO4UEKRoG63WyhOtIfI+5acJ4nv893d3RgbGxP5leT28ShhyklEa514rnIUIe1zK0UGvlHc8KKrXq8Xhw4dQkNDg+bz06dPY9++fbh06dLrue2bCvJlP/nkk3j/+98vPv9v/+2/obe3F0eOHEn7TTweF75bAIJUeKPC5wncksD9vXLFYQ69yUsbcSayaGFhIY4ePSpM3PxQ5oc18WIIXOiijZvCbWVNi/KcTE5OYsuWLcJao3dvzlGRFwQdgIB+MVi5IOLo6Kgo1BiPx9NC7TkvI1MiPr1+01useiZuQCuMJJPXEj5SP3ABzSjEn96Pjyk9g6J/ampqsHPnTtFPyeRy0ja+CckCJjernz9/HsFgEFeuXBHkylgshvvvv1+EBwPaitQLCwvw+Xy4ePGihuBZW1uLXbt2CYEwGAzi6tWronZUaWkpotEoNm3ahF/84hfC5VlbW4ucnBxcvXpV3GvdunUiuWBZWZno9/n5eZw/fx5ZWVloaGhAIpHAk08+iatXr2Ljxo3CApGbm4tdu3bhwoULiMfjSKVSsNvtuPXWW3Hu3DkEg0E4HA5cuXJFtIFKRHDBfnx8HJFIBL/61a/gdDoRj8exe/duWK1WXLp0CQUFBbhy5Qq2bduGUCgkcnt94AMfQHV1tShBY7FYcODAAU2BTTk8GrjmfrVYLJpQ7GQyiZGREfT19WF4eBi/9mu/hvr6egDLewQJbSSIykIWsJyS4+zZszCZTNi2bRtOnjyJkydP4sqVK9i0aRM2btworJJkHbx69SqOHz+OHTt24OzZs3j11VcFgf2+++4Twu7Ro0dx6dIlZGVlYd26ddixYweefPJJVFVVYWlpCRMTE1hYWMDevXthsVjEOL344ouYn59HR0cHCgoKhFLo9y9nlieLGu11hYWFWFpawgsvvIA77rgDdXV1Qnjo7u4W0X/19fUoKCiA2+1GSUkJpqen0dTUhM7OTszMzGBhYQGlpaW4dOkSiouLkZeXh7q6OuGGGh0dxdNPP428vDxYLBYRVHH16lX4fD5YrVZs3rwZ//Vf/4WKigrs2LEDMzMzsNlsOH/+PIBl/mZ1dbVY/3a7HRcuXBBJG8myxoUB4BrtgfL8ELjliFsXZRoBCSW0N5E7eWpqCs3NzZokjrTPyMIYpZmgZKo8gWem/ZH2p0QiIZ5HAh+PJibFUi9R6puJGx4+Pzs7i8uXL6d9HgqFMDc393pv+6aCalWVlZVpPi8rK0sjhRG+/OUvo7CwUPxbv379DWsfJ5l5vV7ccsstIlkVmUWJqFxSUpJGJpNrFRGxzyihFgkqkUhELHpOhKNFBCCNHEykOVljWFxcxMDAAE6dOiUinijSa2JiAk6nU5hIOYGQBCISoIzIv0QiJssV51aRCZ0vogsXLuDKlSviUKJQeznpGdXU4f0kk/7kfiMLHU9XwL8jdyRtfDMzMzhx4gR++MMfwmQyCQKsTBzk4e08UZ5syufPcLvdwq3E+yk7Oxt2ux0TExOIRqPo7u7G0tKSpq4SCUGxWAzNzc2C1zI4OIipqSlcuXIF586dE0Tpvr4+jI6O4sknn4TFYsHQ0BDm5uawtLSEy5cvC02diNd+v19Ekc3OzmJ6ehqvvfYaXnnlFfT392N4eBgPPPAADhw4IOpGlZWVwWq1Yvfu3bh06RJuvfVWmM1mTE1Nob+/Hz09PaKsQiQSwdDQEAYGBmCz2bBv3z7ce++92LBhA1KpFEpLSwVHpLa2Flu3bkVeXh5uueUWjIyMYMuWLWhoaMDly5cRj8dFnSxKPMgPlJKSEgQCAWzevBmxWAxerxfDw8NCaCKh02KxiEO8tLQUR44cES5rsuxQCDqtJRoTsvD5/X6Ul5eL2k58bZJFacOGDXjPe96jcc22tbWJYInTp09jbGxMfEdrlQj62dnZyM/Px9TUFHJycpBMJrFp0yYUFRXhnnvuEes6Ho9jYmIC4XAYNptNzA2r1YorV64gFovh0KFDiEQiGBwcRE1NDRoaGtDQ0IBbbrkFXV1d2LFjByKRCHbv3o2ioiJYLBbMzMwIt1UoFMLFixcxPz+P1157TRyK8/PzmJiYEIcyzX2n0wm73Q6Hw4G9e/dicXFRozzEYjHMzs5i3759uHr1qkjS+Ktf/UqErefm5iIQCGDDhg1wOp1wu91Yv3496urqcOTIETEOg4ODyMnJwdmzZ0UASTQaRTK5nEiyuLgY0WgUt956q0juWFhYiLGxMRQXF4vq7gQqF0KpJ1wuFxwOB4aGhjT8O04xcDqdOH78uKamF9+TqG+4wkQkfK/Xi8nJSYyPj2NgYAAzMzMoLi4WPFESqkgop3em6EG+R4bDYUHCJ5I15xByJZH+BQIBXLp0SbgW6XyiM4ALQW+HEPrXLQi9//3vx+/+7u/i3//930VUyb//+7/jE5/4BB588ME3s41vGCaTSfN3KpVK+4zw+c9/HpFIRPy7ePHiDWsXjwSiyUJ5e2hi0ORZXFzU8C74hiqTBlcKSaRraFKSFYh/TgJVb2+v2Fi9Xq8QJmjxZWdno6GhAdu3b4fFYhEE7oqKCmzfvl1ko6X3pYVONZ+MohG4pYTyjCSTyzmTuru7EY1G0dnZqekrr9crEky2tLSgvb0d8XhcRCKRD5xnVuXP59wfDt6uTEVLqf9CoRCsViteffVVUel5cHBQHPr8fny8fD4fnn76aRFZxXMXyWHWjY2NyMnJgdPpxLFjx3D8+HGxoZLW9rOf/Qyjo6M4e/Ysent7MTw8jH/7t3+DyWTCq6++iqKiIgDApk2bMDExgfr6emRlZQkhY35+XhR6pE3961//Op566ilcunQJVVVV4lByOByCZA9AWDNqa2tRVlaGtrY2bN68GaWlpSKEOy8vD1u2bEFRURHOnTuHyspKvPDCCygoKMC//Mu/wGQyoba2Fi6XS1hFvV4v7rjjDmzcuFHUnWpsbMQdd9yBvLw82O12xGIxOJ1OTE5OoqKiAtXV1Whra0Nvby/27NkDu92OqakpkV+HhGsyjvMDxWKxoKamBjabDXv37hVcl1deeUW4eKanp0UywqamJkxPT2PdunXo6+tDc3OzqJVFYcw0V0nQDAQCGBkZEVFbVNuJronHlyuHl5aWYuvWrVhcXITT6RQh8V6vF42NjRgfH0dlZaWYTzTniSAbCoWwYcMG0WfNzc3YvXs3duzYgd/+7d+GzWYTBxlVcweWLUlOpxNbtmxBU1MTmpubhfUjHo/jnnvuQW1tLd773vfiPe95jyihEgwG0dzcLNwkDQ0NqK+vx7lz50QepurqarjdbpFTy+PxYGRkRAgX3FVJXC5K4UAWMeKPZWVlCWt1bW0tsrOzMT8/D7vdjnA4jEAgILiRBQUF2LlzJ9ra2lBRUSHWPvHz8vPzsbS0hN27dwuFY2pqCqlUCuvWrUNOTo5wBXs8HqGwUnZvYNl62d3djV/84hcYGRnB1NQUNm3ahJ07dwqB2m63a/YbHtk5MDAAn8+nqc3Haw/yPUsvDUtTUxOqqqrQ1NSkSYPS19eHU6dOwefzib3KbDYLAZmULTkfE1mix8bGRPSv3p5JeaaIMiODz0surN9MXBdZmuMf/uEf8Od//uf47d/+bVy9enX5ZtnZ+MQnPoGvfvWrb1oD3whKS0uFlM1B5nY9WK1WYUp+q0Hm+sHBQWzbtk1DgiazME+ORRoBB48y4+x/gpF/lwQduh+3uoRCIfF7zgUi7ZeEJyI+yrwcejeqObO0tCQsJzJxWI/oR22iHCBUHZwsICTMmM1mVFdXC0Kf3+9HbW2t8PVTmQFuReL9xInP8rjE43GR44jSHsigvifexu7duxEIBPDaa6+hoaEBR48ehdlshsVi0fQ59SX1BZF4x8bGUF5eLkpzzM3N4dSpU+jo6EBfXx/sdjv+4z/+A3Nzc5ibm4PJZBIbS21tLbZv347Tp09j06ZNOHPmDKampkS16+rqalGBe25uDuvWrYPNZoPb7cbk5CSA5fVMhwsADA0N4ezZs/D7/YhEIrDZbCIcuaOjQ0Nyp74dHx+HyWRCbm4uWltbEQqFBKEaWOYVTk1NYWFhAVNTU7j77rvx3e9+F83NzYjH46KwaGlpqXAVeDzLCfso6mVychK7du1CYWEh/vEf/xF33303Tp06hdzcXJFz6+DBg/B6vRgcHER5eTny8vIQDofFgQdABB5QOQEiOfMImObmZvT394uNnOpmBQIBLC0tIScnB7/+67+OyclJFBUVIRgMCr4QuTxo3F0uF8bHx7Ft2zZMTEygvLwcTqdTRKJxdzcR5QGgrq4OS0tLePnll9Ha2opgMIhXX30Vs7OzGB8fF2PB3chEVh0ZGcHu3bsxNTUlBC6+R/BoRhrDrKwsQVrftWuXKL5qs9lw5513plllW1pa4PP5kJ2dLWqSORwObNq0CePj48Id1NbWhra2NsGToX6h+c3XGB2exEPKzs5GKpVCMBgUZF4ic1NbeD2scDgs8oqNjo6KaFFS+Ki/iLiek5ODBx54ADMzM4JvQ/1ALmKXy4WjR4+KfG7Ud62trRqrYiKRwPz8vOawp34h6zjtQdQXfr8fJSUlWFhYgNlsRiwWw+DgoCbCmO/HfF/j+yqvmUbcoKqqKhQVFeHs2bNoamoSgl5OTo64PynHtPanpqZQVFSEaDQqBDWam6QskZWIytqQJ0AG32f52N/M4KXXbRGy2+34xje+gcnJSfT09ODkyZOYmprCN77xDeTl5b2ZbXzdoBwLzz77rObzZ599FrfddttNatU1eL1ewXshbZ8InIFAQFMTizQOWqi0eGjRxGIx3QzTshDIhQ2/3y9ca7JEThuPxWLR5JrhPCA5RFJ2b/FnJRIJDA4OikRnANLq9pB1BNBWOSfQoUsWDMqSDOjnoXC5lutqLSwsIBAICCFEr43BYFCjqXATMFm+BgYGEIvFkJOTo+srJ1CWYIvFAofDgQ996EOCr0ableySnJ+fRzKZREFBAT74wQ+K+3PuwJkzZ/Daa6+hu7sbDQ0NiEajaGtrw7p167Bx40Ykk0mRVyYcDuPq1as4cOAAZmdn4Xa7UV9fD5vNhttuuw2VlZVoampCRUUFtmzZIopS5uXlCXcRr/Td1taGO++8E3fddRdqa2vxgQ98AHfccYdIoBgOhzW5i6jN5eXl2LJlC86fPy8qrtO8r6qqwvbt25GdnS0Ox4WFBezatQuxWAxzc3Nwu93CikQWp3A4jKKiIpSUlKCyslJYHCORCH7t134NyWQSd9xxh+CW+Hw+bN68WbiYyS3R0tKC0tJSZGWlb4PcZE85rQKBAKamprBz506h2TscDhFxZLFY0NDQALPZDJPJhEAgINzFAETuLXKJBYNBES5P7qLOzk5MTU3hxz/+MUZGRoRrgVM5s7OzYbFYsHv3bsRiMXg8HhHuvmXLFjG3aT3SoRuNRkW9NeqXTC4XykxNexStt9bWVpEOQG+foXWWlZWFRCKBkydPCutjeXk5qqqqxD2qq6uxc+dOYV3y+/0i0IC4LKSA0IFLa1tOBmsymYQLx+v1ivtXV1ejtbVVk1pgYGBAWHWp1E1lZSVKS0sBQFjmqJQK5currKwUVvGjR4/CarViZGRE1wJPFqO2tjYRIUdtpfdpaGhAKBRKy0NGuc9mZ2dRWlqKc+fOiTxL8pjxsZYjUfWuBYCZmRnU1dUJSy/vc7qX13sthx0pxFT7z2KxCGoErUlyo8fjcU3pGjnnEAnSJGxlyuH2VuG6yNJ9fX3Ytm2b7sahh4GBAWzZsiWNdPtW4sc//jF+53d+B//wD/+A3bt349vf/ja+853vYGBgAFVVVSv+/kbXGgPSayNxEhzlWKH6RyQABYPXQl+dTqeIBCNSNXe/0MHEycVyxJlMmCbti6J2ZO4Ob7NeThy6hoekAhBWBAprlise0330EgIC14i+VqsVc3NzuOWWW3QjzsiNFo1GMTs7Kw5gvfIZpDXzcFiLxYKxsTFMTk5i+/btCIfDiEajmJmZEZEkRlXYqf0UUk4WHcqvw4UoPp7xeBxms1lDCueHzenTpxEIBNDU1ASv1yvI9VTzi/hLVNYilUrB6/UKrdvoGUSUNJlMGBgYQDAYRFlZGdxuN2KxGOx2O5qbm8XcDIVCaGpq0nDFYrEYTp8+je3bt6OyslJYIGZnZ0Vm46qqKuzYsUNDcAeA0dFRDA4O4p577oHZbEZvby+SyaSwNhK4pYmEPU7+5NyqZDKJgwcPIh6PIysrCx7PclJMmifNzc3w+XwYGBgQhUb16lORW2B6ehoej0fjSuZWl2AwiIKCApFwsLCwULjoiN/Dye7z8/OYnp5GKpUSQorb7RbRfG63G6dPn8b73vc+VFdXGwYxZIoulec4twKPjY0JwZ8iibgVd3x8XFh9KioqRJtpf+GRQpz8z+uVAcCLL74Iq9WK/Px8NDQ0pO0zNAf06rxRX5FbqaWlJS0lBrCcKf7JJ59Ec3MzxsfHRaCAbI2giE6iRZjNy6le5GhcHqknW8z4deRqr6urE9YaIsNT4IJe35KlFIBQliiogxOL+R5ZVFSEI0eOYOPGjaitrdXMJb29T49wTdfySFu9avNG70vWUr0aiXR/ec/Wq0k2PDyMCxcuiChN/v2bjRtClm5paRFm89Vg9+7dIqfHzcKHPvQhPPbYY/jCF76A5uZmHD16FM8888yqhKC3CtxCQBqZbLbmG73ZbBZCEJEq29vb0zJM0yTr6elBT0+PxodM0r5MyqTDkrg0vEwGgVxzpKHRAuAWIHre5OQkiouLkZ2dLZ5HxNJoNJpm6tVrO4+qIbNrfn6+yNOhl6o9GAxiYWFB5PR4+eWXMTIyYqglBYNB9PT04OWXXxYavMViQUlJiTjoX3vtNWRnZyMQCOC5557D4cOHMTo6mpZZmtpPuUdoYyXhifqQrHLkj7darRr3CFn3aH5QxA2Z20tKSjQERLN5OettS0sLkskkLly4AJPJJLS8goICzMzMCPM+tZsEo+bmZjQ0NOCuu+5CR0cH7rnnHiQSCeTl5QlOAGmOU1NTYj55PB4MDAwIciRZKIeHhxGPx0W0zbZt2zS8F7J22Gw2bN26FVNTU2ITbW1tFZu4HABAFofS0lLxPOpH6vtgMChc9kRAJuGG3oVIzBRez+tb0doDIAQnuu/Y2Bief/55wZ0zm5eL9o6MjIhIO8rmW15errECES+MNmaTySSyjHu9XuTn5+M3f/M3cfXqVaxfv17wZPiaBaB5VxKyKReUDC6w0fOJkE28Pp/Ph66uLvh8PkESn5+fF/8lknBRUZGwksp1/ihIYGRkRBB0iShNlih5n6Hxo0g1fphzTlxhYaGwSPGDPZlMYmpqCrt378b4+DhqamrSLMkE4hnt3LkT1dXVKC0tFeRhOXKTOEVGnEGaQy0tLRgcHNSU7aD+lbPE0zsDEAEgVD+xpqYG4XBYQyzmVeGrq6tx7733oqamJiMnlPZhuRoAv5a+k4UgvQz5XDiqrKxETU2NsMxygYfOLb1ajRwulwuzs7OanEEy7+lm4LosQllZWfiDP/gDQQZbCd/4xjdw5syZm5oo6Y3iRlqEjCRwDtL0SMM3yhGkd18Kb4/H45rEbty6YpSjSC9sW7ZQUN4I0jz4Zjs/P4+RkRG0t7eLTYU0X708FnrvwLVE0gTpQKGMqJQrQ8+qRBv7hQsXkJeXh4KCArS1tWFsbAwdHR2aUObs7Gx0dXXh9OnT8Hg8+PjHPy60Z9qUQ6GQKIx57tw5rFu3DktLS7j11ls1li0u5MTjcczOzqK4uFij7coaNdf2T58+jZmZGcRiMdx9991i3Hp6etDV1QWTySQOTq7lk5WBcyna2tpECC/XEoFlEixponJYN0V/UdFTEmaJq8PnoN/vxyuvvIJIJCK0Wso9Q+/GN0153vO/9eYFn5NyfiTeb9wyQdo/aa/0HD6niPxeV1eHubk5Te4VmqMUQkxzLTs7G+Pj4yKXTEVFhbCsFhYWYmJiQuNK0KvOTRYRsppxNwL1A7kQyD1NFl2ufdPazLSWqKr9xo0bBXmcW1WoD65evYp4PC6ET24VoYioSCQihHPZaklzcG5uDkNDQxqhV2+f4mPO84nx9cHDtzs7O1FTU4P8/HyRnoGHksvzw8iiQSHiXq9XzAXiG9Hzee4kLhDTMw4fPoxIJIL5+Xnce++9cLlcePLJJ9Ha2oqioiJdC7nevJff0yg7tBxFmunc0LMQrQZG7ZAtS6s5szj4GWM2m9HV1YWFhQWRd4vnVLsRuCF5hO666y7DaCsj/PCHPxRF/N6JuJGC0GomLU1Q2mBl18pK99UTmmgy0705CdVocvODmw76qakpbNy4UeSg4WZ6njcnFArBZrOhu7sbO3fuRH5+flpGZr2NzOiADAQCIt+Ny+US7ifu0uCbCOW0aGxsRGdnp9DUKKkc5WLq7e0VeVE2bNggXEpk+aADPRhcTjo4PDyMBx98ELFYTJA0uduReExEFpU1MJ/PJw4bOjRIiHzllVdQXV2N3NxcoRVTwr1UKpVWb402rVgsJtyd3CzPx536ZqVNbjX3BK65HMhaBKwuYaUerneTX8mcL8+llYQpGm9K8kkuaJ7rhR/cdAiTm4RyH8luFb12krCeSCRQUVEhBA4aD3KxAOl5hfih7vF4DN1izzzzDKanp7G4uIja2lqR3DAWi4l3IiGXym6YzWZDJYQrR7IAxt8xkUigs7NTlLExGmfOlyKrA/UX9Q39zZPNUt+QtY63y2jvoPUlCzwmk0kjCBmtAzoHHA6HWJ8UmCEL3W9kvvN5TvcmNxvRCvTyDHFKAZC5HqH8bFoLekLa1NSU2KO4cpApBxt3A5KwAwAjIyOYnJzELbfcouvmfLNxwxMqrhXcbIsQLUJi65MlwIhDQ7+RtQgOnnSMNGGyNskLS14oZBYeHBxEXl4e8vPzUV9fb5iMixK0UXp6PYsQgIy+a7ktlESvtbUV+fn5YrPiz5mdndUIZwRZQ+EbXGFhIc6dO4d4PA632y2sBjInxu/34/Tp06ipqUEsFhPWAmq/zCehcaA+pPHu6urC6OgocnJysGPHDs1hopcwcqXNIhO3arXzT7YSruae8nyT3/N6kGlNrOY7vf4y4kzo3Xd0dBSdnZ0oLS3Ftm3bdDPfGh2UFPFJ8/r+++/XJK/Tazc/jOnA4BYs6lci527evBmpVAqDg4MoKCiA2byca4mS9JHARAnwEokEnnrqKezYsUOUeBgbG8P58+dRWFiIrKwsVFRUaA5wPevAaseK5s/FixcxPj6ODRs24P7779fdR2jN8OhYI+5aKpUSFkmqML+0tITS0tI0SxXtj7IyqKckAdqEhCRk9vX1oba2Fr/61a9En/PkghTVp2fRyiR0Z+LT6PUrXUt8Q9qn9MaGc4BisZgQODhJW7bgGWXz5+3nwgxZpo3WktwWEtxJiF7JOvxmQwlCbxLeCrK0Ebi1or+/X2hoZrNZkB1p85AnpJ4pniYcuYwqKytFHTK9yWikgRMHZGhoCPfcc4/gXZAWzInWJPVnWgDANbOzkbbDwS0QLS0tmhQDRDyksOgrV66gvb1dbFry+9GGzwsTctcb8RJ4Hxsd/Jnar3cYU5I3t9utqfV0vULAmwmjTOYrPV/WYleydGaac68n6zcdmnRY8mdfzz2PHz8uXFKUjyqT+5kOWSohYLfb0dXVhfXr12Pjxo2i9pkRIVTPbaN3mBJ52Wq1Ynp6GlVVVRgbG8PCwgKCwSByc3PR0NAAl8ulCZwoLy8XViUKJyeLQTC4nC+GB2IYWWaNhAb5PbgVYXp6Gnv37hURYTyru6wsJBIJTE5OivVMhyjdm4RR3hdE5NbLqM9J23JQA6cMcIsXV1Ci0Sh6enqQlZWF/Px8dHR0pFnBqO1c8OQuZh6IAiDNyqMn/K2G7iC/q941lHNOzx0vB+XI98l0dqxWeJEVKqN7ciHrRrjHlCD0JuFmWoT4oUQmUSJDy4t8JS2dL2DulsrkZlutm4Jzg7iWByxvvpxHtNJkX82C5wcLAF03Ba8hFI/HUVdXl6YdGt2fazMEfk0mF42RJcfoMM7Ej1mJO6NnvXmjwpJsMcv0fKNxI1cHhYTrab1G2ihFAHG+xWrm4aVLl3Du3DnccccdcDgcaRacTBZS+f2N3I/8XblQS+uJEnfyQ91isWQUhOT20WHPBbvi4mIN9ygQCAiX0OjoKF588UXU1tZi586d4vClg5nmHkGuc5fJVcr7WM9FR+D7C5XkeOCBBxCNRnWtIXrP4bwcOmxpnOSDknhPt99+O4aGhtL2MRqf2dlZ9PT0oK2tDZs2bRLWbIoepEg0s1kbdUpCVCQSwQsvvIC77roLW7duTbPYcsWLrN1NTU0i5URjY6NQwOQ+kC1Cmdb+9fCAVrKMrmY9v16rLJ/L5FLmuaSoL3jFepnb92bjhpfYUHjjoMlAB7KMpqYmIQSR1hQMLue7KS0thc1m00j7yaQ2I7PZfC3axuO5Fl3AC4KOjo7i2LFjGB4e1qRNpxpJVImYtEgC3Y+qeVMaf8qhk52dLbhhejmBjEAbA2l+FJ0BXFtkHo9HaHLJZHoeCuqf7du3o7CwEO3t7RohiDKxUuZc+f08Ho/Y6L3e9JB73pfyWFJUHpUKoCg1j2c5k3VtbS1+8IMfIBqNps0Bl8uFy5cvY3R0FKOjo2LDk8ePIGe5Xmk+rQTqSzocenp6MDc3J8Y3U8ZyPm6BQAChUAinT59GX1+fyKUj97He/QYGBuD1ejE2NqY5QIzei8ZqYmICDocDMzMzGsGc2sbXQiZQ/hgSSPQQDAZhs9lw7NgxkXeKl7qx2WyaPDgABJeHczgIJGgEg9dSHFASU8ruW1paKqKJ6OCwWCyYm5tDYWEhZmZm0p5PgizNYYo6o37lAmowGBQlH5xOp6adJNCWl5ejqalJcKmGh4dx+PBhUcjVarWKSvZUOkJWNsxmM1paWkRKCbkvKDcN5W4CINpM6z8cDqOurg6/+tWvdLO8B4PL2esvXryIdevWYW5uTjPPyApDSqWcS42Uy9zcXDQ3N2NhYUF8R33f29uLK1euYHh4WBQUdjgcOHz4MMbHx4VCqOcqNpu1EVZAek62THNe3id4tQF5H+L7Fh9vo/W3kqBj1C4aG3ITxmIxnDt3Dv39/RgZGcGvfvUrkXiU72c86vBmQlmEVsDN5ggRiNdDeVpkX68c3bKa6DK/34+uri4Eg0FkZWXB7XajqakJk5OTQiiiYoRG9yOrFaXn53VyjCwqq+kTPYuNnnmVkzpJs+N+aT2tiGtjAHT7S09jWq22RaZ5IoxTpAsAfO9738PExARKS0vx0Y9+VPM7v9+Pw4cPY2FhAV6vVwgkRjyh1ViE5MK8mfhARtwunpclE/+B8wA4QqGQhtB+PSZ1vb6VPwsGg5oIOHKtrIZUnWkOGmnEPp8PR44cQVlZGVKpFDo6OjQHA7dgyC5DOVIPWLaG9PT0wOl0inmciV8izzOqps4Fdm61Wk2/c54TrxwuvwP9PT8/j5dffhm5ubkiKSKwnDbg6aefxoMPPohIJGLIQZHzBq2GGydHc8kuKXn85O/1ODK8Kjqf47RHhMNhFBcXp+XjodxGdG/KJl9VVYWpqSlEIhHcc889IoM1dwfqWbh5sAHnKelZ7X0+n2afICFRjgh8PcLFStZuEkTloB3Zik77ZyKRwMWLF7F7927N9XpW4hsBZRF6B+B6JoPZbIbb7dZ1NXg8HkGiA65pUPJ1tImTkOPxeEQdmvr6eqHdUv6T8vJywbWhzUHWBshq5Xa7xYSj3ESANt+JDLqnkUZDWqzf79dkeCZNksyv9Cz6nvqE56vRs5RR5lzZWmRkgaHvqd4O3Y9vnASeZp7nkHnwwQdRWlpqWI+vpqZG5HghbcmoMCHPBms0n3p7ezE6OornnnsurS96e3s1GjXNI4fDgWAwCKvVKmon8UN4fn4ehw8fxvz8PPx+v8g/0tPTg/HxcaHxcgsAr78kW4d4/3HeF7fo6B0ex48fx4kTJ+ByuZCfn4/9+/eLQ4QK/tJ8B/Q5FfRcuZiuEYLBoCjaGQ6HUVNTg2AwiFAoJHLE8HlD88jlciGZTOL8+fOYnZ0VSSPJwtnS0iKsnJxHJ7v05L6wWCzYuXOnUI44/8fhcODcuXMYGxsTxUSNQOMUjUZRVVWFoaEhYQWR1wJZNz/4wQ9i48aNaG5uFvfp6+vDlStX8Nxzz8HpdGJiYgKJREJ3jfPyEvSOZI0xcvknEglR3oJb3uR3ofVPeyb/nPqJLNh5eXkaFxZZNcxms8hnxfcBski3tLSIPYrK2hCPy+FwYGBgQFxPQiG3jtJ+7Pf7cfnyZWFRAa6V4OB5jvia4fsEVRugd7weAUPeg+Uxo/xSVOEgEAhgcXExzVrK54jZvBzdXFVVhfz8fNx+++1wOByorq6GxWJBIBDQWPrfDnhTLEIUXiv7Gold/07G28UitJKWuhoOBPf1ywRrPU2fotWi0SicTqdhplW99sltAtK1Ws4pIouBbHWS2wxcIx3K3CRKdkgkQa4dcZ80PV/W9FbqRyNiq56GyPsxkz/ciLBtlEZgpXkiE7CpDlNDQ4OoKURE0fLycszMzGisRYAxV4T6gOe/IctRJBIRldop9FyeazK3hmvYejmVMhEoidTscrmwa9cuzVzgWXvlaCI+jvw5gUBA8PHKy8vTLI90WND40DogwYj2CAozlseJLLrFxcWYmZkR8yQTJ0wvO7ERjKylFy9eFDXQeAQR9YNejprVWJKMrKMvvfQSfvazn2HDhg1obW0V7i2ymtC6pWzitbW1Ir+RXui6zFk7ePCgJv2F0b5D+4DZbNaMvdxPMn+L+m1+ft5QoVypH5LJpK5Vk3NnSDEYGxtDIpHAa6+9hg0bNojIPx54IUeKAelWQc4fzWQl1rOKcWI353fS+qE5SBQNIwVFb30bRaHKc+6NWLEy4S2zCP37v/87Nm/ejPvvvx9NTU04fvy4+O53fud33ujt39WgA7S7u1tMLj3rApBZ0g8GgxktLwSPxyMymsq+Yb37k7Wnrq4OyWRSWFD0niH/XuY6cGsL/T+AtOzWetYu3mZZ86D3IAEnFovh/PnzGiIiXcfzxJBWS7/nh+P4+Liu9kz3q6ys1ETgcL4UWW+4j56+B5Bm2eHWPM4v4tfRcwH9mmrUDrLOUMXqYDCoqZfEx2FqakqTJZpKO5w4cQJFRUVpvAy++fGs4F6vV2SpraysFBEwyWRSZHSmv4PBzBlvqX9oPI3qYSWTSeHGbWlp0QibwDIfp7y8HCUlJZo2EMiqRWRksowSH0+2gJBQ8vTTT+PVV1/Fr371K8HRMZuXCczRaFQkiNPTdEOhEK5evYqcnBwxHlQglywvskWSigrHYjHNfJS1eDqs6F3496lUCuXl5SJvC4fP58PBgwdx4sQJjbWG1mMgEEjLNEzPJysg1ZbibuyamhpRrLe8vFzU1OLrdmZmRnCSOGQOCufBmc1mdHR0oLCwUBz68vXB4LXyIFQOh3OR5D6nceRjXVxcjPn5eSwuLqKvry+j9UKPkyNbaoFrNdyam5sxPT0t6u5VVFTAZrPh1ltvhc1mE9zCcDiMhoYGDA0NiRIwlKVa3iPJetTb24uDBw8iEokY8gbJjXzw4EEkEgkx10kZamhoEPst1SIk6xfx54ysOsTN4nxQXr+R9wPntup5Gt5qvGFB6Itf/CJOnjyJU6dO4Z//+Z/xe7/3e/jhD38IAFD0o5UxNTWFaDQqJiZt0pkK5sngG7eeu4lL4TQJ9TgzgLZQKhFnq6urYbPZBHFa/p2eW4Ef8KQx0QYkE+W4dq0nAMpt5uBCIB3KmzdvTns/uheVJpFJenxDI2QSSsm9RhtTa2srampq0NzcrJvynrgBsruNBItIJCLcJ/xQk9/VaG6Q5YwKkW7fvl0jWNIGSwkcKQEkABFy3dfXh97eXgwMDIh3lDdS0nZpXLkmx5+1uLgoNk5+H9LWefvpd7x/QqGQIMvTZkm/oXt4vcuFNbmwycntVJ1eFvBpbjqdTtFuvaKT9CwiildVVeHy5cvIzs5GX1+fmPvT09NCKDQSIGkdtbW1ifbIh4Qs5JPbhdpO68zn82F+fh6HDh3C0NAQDh06hHg8rhkzencAmJiY0N1LQqEQEokERkZG0tzSZvO1EjFyQWZ+4JHQRO5f4rZt3boVZrMZk5OTKCgoEO4ssqhSeZi6ujpNiQVZUOECKpDuDiYFh9YNucetVivq6uowMzMj1mkyqS34CaQf1KQgdXR0oKqqCg0NDZpirzL0XOgc8jygtUGkYXJJ5ufnC+sqcYkGBgZgt9sxODgo3Mt6z6H5HIvFsLCwgFgsJvpLz605MjICq9UqhEty7ZFFiJd40tt7jRRq6juemZr2MrlsEM0jPXfyzcAbFoSuXr0qJklbWxuOHj2Kb33rW/jCF75w3Vmo1xpo07hy5YqYmLIAsRpwDYEmF1Wup1pdRhK3fNDpWS84z4NrTvS9HL2kp/3zDYe3l/zkZI7WayPfTPiByg8p2mQbGxthtV6rrk3vTr+3Wq1ppTC4VYd828RN4lwgDln4JIEgU3V7+b35O5EQLFv35DauNDcsFgt27dolBATeXjr8Z2ZmUFpaKjZ/Xs3d4/HA5XIZ8kN8Ph9GR0dx9uxZJBIJ3f6RDyd+HypeK0f6yHOSXDPl5eUIBAKYm5sTQoDeoa5n0ZycnBT9yvuRz2e9DZrmHK+9RGTkj3zkIygsLERDQ4NwixFnQm8d0rNJqQAgnif3rd47eL1eMR97enowOjoqMqvn5+eL+mYyp4c0+mg0ilgshlOnTqUJlGTF27Vrl3jnpaUl+P1+FBYWampg0TqlKCWy5HL3L0W+kVLAhalYLCZcsn19fUilUqJCPbdky4IJF3y4wiUrOCTsUMQoKUVcUKP5c+nSJZw6dSrjGHDrR6ZoQ6M1TZD3EBqb8vJyodjwe3NXJLX96tWrSCaThlZhms82m01YNzlvkCuZ3KrW0NCQtv+tRhjhQnomVxlxrYBlrmJ3dze6u7vFfWSF+M12i10P3rAg5Ha7NZtaSUkJnn32WZw9ezbjZqewDJqY+fn5KCkpAYCM0v9KoMlFVgaZQC1D1sBoMns8Ht3PucuK7tnQ0ID5+XnBB+OapcfjERYq2XRPQsD4+Ljgmei1kW8msqAmu5OoWOzp06fFIjQibhsJKRzcZaYH+cA0Gg9uIcpkDtZzy2QSSAn8wOT9yw8M+q1caNfjWSZ/7ty5E62trWLj1PPlnz59WhPinEwmdS08/HDi86e5uVmj4XPwg8FqvZZhmQqjUvVrABp3hh68Xi9uueUWTbI6PXfjwMBAmhBP5PxYLIbp6WkAQCAQQCqVwvz8PLZs2SIsHOT6kS0GfBxp/lK0D7kuVuPy5PPS7XYjJydHhLHbbDbs2bMH+fn5qK2tTXM/kMvF4XCIAsXcLWKxWHD//fdj06ZNYrzOnz+P+fl5HD16VJD9qf+oCDL1lRyMwMvQ0OFmt9tRX1+vqcVWVFQk3GWXL1+Gz+cTwo2RNTSZTOLgwYM4f/48nnnmGXR3d+umduCHKylg8nyOxWKw2+2rHoPVQp5j1G7qO+obErDIOg1AWPQqKiqQTC6nL6E1T8Kj0TNozCmSiysger+RCyfz/S9TPxh5D16vSysT3eOtxhsWhL7//e+jrKxM85nFYsGPfvQjHDly5I3e/l0Nztfwer1IpVJiUtLijcViOH78OEZHR1e1SLlGQwdfJolb1sBW+lx+DrBMrl1YWEiz0vANNBAIpLlbaFGVl5cLP3QymcwYvaPnRiEXBeUXyc7OxrZt24TJXb6eoKcF8cXt9S7nZCkuLk5b7Nzydj15kvTMwVyI4WMvcz/4+8tjyX/HrWBcSONzg9+Dux9JAE4mk2mbXDAYRG1tLSorK9HS0iK0UO4y1etbvoHq8Sf4byKRCIqLizUCq9lsxrZt21BVVSWI2JnmJh0+3E0mC/wEslqWlJRoLI5kXSBtmfMmuFVucnJSzA+ZS8XHMRwOIxgMoqqqCn6/XxNEIh8oRhFslZWV2LFjh4gQI/ejXmQTHYZ2ux33338/qqur4fV6hVukt7dXRNRRhNDExAT27NkDh8OB9vZ2jZuDWzKcTmfaGFMfc5c0d5umUilMTU2JaE2zebk0CLlA+/r6BH/lhRdeELwofugWFBRgfHwcly9fFkWdObeO5gxlVvb5fJp+Javehz70IaF4Uj91d3drIutozpKSQAJtpj1Ybz8xm83IysrSKFTU56SwAhB11MxmMwKBAE6dOoXx8XG4XC44HA5hvcmUz4sScfb19WmstNQuHr1K/SGviUzCjeyaX8mK5HK5MDMzA5fLhdbWVvHv7Yg3FDV28uRJvPjii7BYLLj99tt1tbx3Ot6qqDFAGwlAh9ng4CCuXLmiW4+Krl3tM/SulaMyuAl3NXlMiHBJkVpbt25Ny0Hh8/k0uSf4piBnupWjQuQ26h2gpHEnk0nMzc1pcoKs1A/y5yv9Lf9upVpgclRKpneR+4VH0xlFT8n9IEdfkaVtpVIRlHOF6s7pRbjp9QVFqRHng0cIUt/IUXZvZDwy/VbuB95vmbI7837j7ejr64PT6URNTY2m/2kMebV6nr9LjlCamJjA4uKippK7HK3I34dnlKe6fPK7kptqdnYW+/fv182szCvb8/GitlPiS6rlRfX19OaaPN9XimzkY5BMJjVZowGI9d7V1QWTyYTm5maEw2E8//zzQnC64447YDKZMDk5KbJ2k3XZZrOJ38j7EkW7UgkOEsaNSj5QO5aWlrB+/XpNsWU66Kk/KTqSMoeTYqe3T+q5sAAIq6YcBUtRVtQWLsjz6NJMa1nOzyTPCbmor7xOMuUmSyaTmmLa8v7An0W5ttatWwen06kp16M3r1Zzlr0erPb8zjb8ZgU89thjePjhh4WZc2JiAg0N/3975x5dVXXn8e/NDQk3DxLyIiEhkBBe8jBpEI1aIUrF1mpnOjLDTB+yFjKL1WHstD5aW6daW+rUZ2cxq61dKrWzZtW+pmNb7cBQQ1sriAmJgQgiBPMi14Qk5E0uuTnzR9Zvs8++59xcICSB+/2slaXce+45e++zH7/9+/3277cUP/7xj6es1DfV0LUqwLnJQSR/v9+PhQsXqsGuS/RidhhrgRQ7bTAYdAzvb2p+ZJBK2fTAgMFgUKXLkGcHg0F1yuiWW26xHcOWTu71epVPiux6TIEOGJ1EJEqrLlTrZXSqrwzS1tZWFBYWoru7W+28ZYCZmh4AtrpJ+5vvxPz3WO9wrIGtxwcxJzQpozh7SoLHSDcYooHQJ+LY2FhbnBGznNKXKioqkJCQgGAwqBYP3e9B/m22hWhNxFQk9RFtmcQlMTHfh1NgQFNIN9vcLJvUy8284tQGMp5ECNKFGam//Jl+LABUIk6/349Tp07ZYurI+9AXbD0Yql4fuTYzMxOpqaloampCbGwsGhsblaZYF5yA0UleTDyy0OhCkARGlOfpJlJ5rkR/19tEr6tgziO6aVcfNyIYmyEZnITq2tpaZGZmIiEhQWmLysrKbCk6RGvV2tqKT3ziE2oB1/uBlE+0oOnp6RgZGbEF/RNhX9e6dXZ2qsz1or2Qa3STflVVFWbMmKFyGP7xj39UCW8l1ILcV/9/J4EnNjZWnTg1BSYxLwJATEyMLeBmMBhUGyOzL+jzTXFxsfI1Nd/f4OAgRkZG1NyoB0CVd27OtaaGaMGCBeju7kZCQoLt/euCcm1tLRobGxEXFwe/3481a9bY+pcpMIdbnyaK8zKNvfjiizhw4ACGhobwne98B//2b/+Gjo4OtLW1oaGhAZ/61KewZs0avPHGG5eqvFc8ot0QASImJkaZM0R1/M4776ggh6aq1rTjmpjf62pTMVPppwFqa2sRHx+P+vp6AKHpMnTfD5/P5+goDISGydd9CXS/Iz0wnlwnKlw9QJ6505Jj4snJySov28DAgAoIpscwkTLU1NSoumVmZjre2639nHx8ZBHS/YV0sxcwqi5+//33VdBCHdN5UOoswoZ5GtDEySxw+PBhDA0NqXYQc4v5bsrLy5UGwukd6o62uukmOztbHVX3eDy2U4Hii6Q7oJt11fuZBJuTQIlVVVXo6+tDTU2NY52d1PhiMtJNa+Z7kB1rZWUlGhoalNlWN5/Kvzs6OkJO6knZxURXV1fnGmjOnPjdTJtSFzm1d+rUKZvGprm52fbuhoeHsWzZMnWUXN7JiRMnMDg4iJ6eHlswTDFRy5FnGTNSR5ljnByDRaMji6bT+xPk4MTBgwdt/dKss99/LqWH3md8Ph9uvPFG9PX1ITc3F5mZmWhqasL06dNRWVmphCC9nNIn5XScZVmqPkJaWhqOHDmi/Mxqa2tx8uRJ9W58Pp+tveRdtba2YmhoCD09PViyZAny8vKwevVq5Ofnh4RaMP/fKeyHaHn0gKPiByT+TvrvdNeCnJwc20EQETr1+SacS4MIo3qIDwC2cCFO4QX0OomPIQDHlCDiKpCTk4P58+djw4YNtlhKZnlF+IvE7eNScl6C0JNPPolrr70WSUlJ6OjowNtvv41nn30We/bsQXJyMr797W/jiSeewP3333+pyntF4ia8SCcEzsVXqa+vR0JCAo4ePeo4aZmLg7kQm6cYZJIyjzzLtUuXLkVKSorKvix+A6JOlrw9TloTUZ+LPRlAWMdifcI0fTVkwTHzj+ltKJOaaF26u7vR1taGvr4+lcNKBKyGhgakpaWpujnlNnPCFCBEgDpx4gSqqqqU+tzNp0ciTnd3dzsKsk7vXyZEmWjCOSjKQtTW1obu7m6lIdNPa4kw5fF4bI7xEivEqQzAud2uGdslLi4OlmXhww8/dPRF0k1mbsLcihUrMHfuXHWapqGhAZZlISkpCZmZmWEdy3VNqdsCrb+HlpYWHDhwAP39/SoIoix+0tbSn+T0VFJSkhKGTD+1pUuXKu2A/tyWltEUNvoCHu5dy0m7lJQULFmyRPlidXR0YHBw0BYBPD4+Xgn/Xu9ooMHjx4/j0KFDjiYLEVhHRkbUIqr3F9EiOLWd7uck/cfUxsi7XLx4MRobG5GSkqIESFm49U1GdnY2+vr6lJO33qYSQ0ochufMmYOmpiYMDg4q7YEZf0kEUQCOvmByFF2CN2ZnZ6vDKWauOGm3zMxMeDwe5QwvJ92KioqwcuVKJUjo/km6aVg3bZntpY8B8Y0Tfyf9RJaEeNADdUoMH90/UcaA7kMUCASUf6kIZlIvfVPY3t6OwcFB1U/NuD9m/WSt0Dcb+uYnISEBq1atwrXXXmubT2Q86fNjMBh0De8wkZyXIHT48GH09vbizTffxLRp0xATE4Of//znuP3225Geno65c+fiF7/4Baqrq/Hb3/4WJ06cuFTlvqLQndDEOU9XN+s71SVLlqhYOU7qf3Myc9uBAgjZ2ZvpK8SR24yv4vV61QQqAgYQahMXIUhiZvj9o8kq//KXv6C/vz+s9sVpp7VixQrlZ+AU20QPRicCW0lJiespJfN5+k5MF051bYyYUeS9iAAlAkpPT48yRZkCrtxLjoWbgqzeD+TYt66p8ng8IXFb9PIFg0EVd0XqnpycjJKSEttpLdGWdXR0hAidci+ZGIPBoG2BCgaDWLx4se2UYHb2aNgAWVjc0IU5U+iUVBGrVq1S6SZWrlypgg+Gc8rUyx+uvwvB4Ogx8d7eXixatEj1bbd+tHbtWvT19dnCFuiCt2juOjo6wtY/HLKoSDC/VatWqcV26dKltj4sY0r6ld8/6kjc09ODjIwMW84pqUsgEMCf//xnZYoQoUp3FgecI6pnZmait7cXZ8+excGDB/Haa6+phdzUjB45cgS5ubk4evQourq6kJSUhJ07dyrtm1zn9TqfgNQ1MbW1tWhra0N/fz/mz5+P+Ph4ZcI0Y//k5OTA4/GoxdaMB5aamore3l6sWLFChQwQ3y83AbC9vR2WZcGyLHi9Xts14UJrmN/p86zThsapLeS6gwcPKuFbBFzdcV80NLW1tejt7VUCrdfrRU1NDWpqalBdXW3T/ujmTGA0BM6rr76Kzs5OtLe3O55y1ecZM9WRvDengxj67/V5WczOhw8fVoqVyeS8T41Nnz4d11xzDW644QZcffXV2Ldvn3oBjz/+OBYuXIizZ89i48aNmD9//rg7GF+J6DuCcJoSGZgihJrqf/1awPkYpK4hMnf2Xq9ztnon9EBnTipPqZecNJGd7v/93/+hp6cHf/zjH8NqX8ydiGh6gHMOuvrgTElJwZEjR5Tvhlzn5JgsbdDR0WE7Om1qpMw4TDJ5SaA6vY6i0cjOzsbw8HDIiS0gNPij0ym2rq4u9PX1YdeuXSpyrxxZbm9vVxONaE0kBpOceHEKDChaG/ncDFLnpHmqqKgIaRvpH5Iaoa6uTk3SK1euRGFhofKtcBJwdYHWTej0er0qiafX61WxoEz/En0RBpxNr25If3KKcq2bBvTJ3WmhGhgYQGVlpcq07fP5bCa03NxcJcyZ7eJUTlNL4rQZAUbjEFVVVaGyslL9Lj8/Hzk5OcjIyLCNGWmXiooKeDwe9Pf3K7MOcC7TuvghOSGnMRMTE+HxeHD27FnU1NSoPqdvyFasWIGhoSEsWLBA1UfWgLHi1OgLbV5eHpYuXYqcnBzcdNNN6tSb1M/c7IlWUkItmCeh2trakJqaauuz0t/lXZlzqbk5Ol+kPuK8rWvdVqxYYRMmnNwEZMOj30/XNMm7Ew24nKKTOqWlpalk2rr2x3Qr6OrqUumJiouLbeXQhTrpj6LBGxoaUtHo9ROOet8Wd46dO3eqTZXct6WlBQsWLFCbtcnkgo/PP/3003jiiSdwzz334MCBA1i4cCHuuOMOJCUlYfbs2SqD+c9//vPxLO8ViewI4uPj1QTrNCmJ1kb8MdxMKyKYSJwNs+NLR9fj/8i9RA3stJjoHVxfWJ1UnvqzxIdsz549yMjIQFtbGxYtWoS8vLwxfXPMRa+9vd0WKE8G6p49e5CQkIC6ujrl/7Fr1y7H4H1SLl1b1NJiT3eiC6fAuVQgpsDqNoEBo/5UXV1dyodB2lf3QdEnX5mcJfFpZ2cn0tPTkZ6ejpiYGKSkpIS8FxGIjhw5ErF6WX93upOj/Dc+Ph433XSTTeuj182pHeRd1dTUoLe3F1VVVWGDH+p+Ek5+SFI3U3OkC93yXkRj5XYvU+gQQViP3Cy7dhGqJXK0+W5EaybvKRAI4NChQ0hJSUFDQ4N6R6INkHqaaVOcyinzQGxsrDJROAkPcspLAtaKILBo0SL09PQ4Lq7l5eVIT0/H3/7t3yrzo1w3ODiIuro62yZCR3by69evx/Lly5GTk6MCJeoRraVvrVu3TjneS6TzlStXqrhQbn52+kIrcZBmzZqlfA8B2LSxpulP0lUUFhaq8ADyrvLy8hAXF2frs04+Zm791IyZBMAWEVv6pn7kXoSFrKwsNc/owrVsLJz6qtRJ6qxvUsxxIuNyyZIltv4SFxeHpUuX2sxz+oEG+W1mZiZmz56Nm266yZYPzM1VQ7T03d3daG1tRUNDg22O1ds1MzMT+/fvV9HY9e8BKJ9Qp9PAE8kFC0LFxcWoqqpCQ0MDrrvuOkyfPh2pqanYvn07vvvd7wIY7Si33XbbuBX2SkZXjbvFpJFrLMtCR0eHa8RT3bfB5/Op4+0mElFYjqXKKQfdX0YfdG4Th5PKU34jv5ddZWpqKtauXYt58+apCSac34+56BUXF9sC5QkLFixQC7fYvEdGRlSyQLc214/0tre3o6mpSU1EWVlZtoXWSTMg7d3Q0IDKykpl3hR/KtEQ1dTU2E7kSf3MCUcEtMLCQuTk5MCyLPh8PixdulRlsJZdobSB1+tVvgR6242lGQHO5bsTDZScFunu7sbixYtVTCHRzIjfl5jodFOqBMasr6/H0NC5TNtuZhS9/5h+SHJf03lfF7rlvUg9dGFTv5fZb52EUNO3SvcJMvtiY2MjqqursXjxYni9XmWOWrt2LeLj41Uk7OrqamViTElJUZomfdMh5dSFJ3HQ1v3a9PdZWlqqBAshMzNT+YqY84L41Kxbtw6dnZ04cOCAMlP5/X7U1dXhzJkzKlu62YekX0qMp46ODpVt3S3wq8QHam1ttaVakXcomz09yOrg4CAOHTqEwcFB9S49Ho86uSVCl/6+dSEyPz8fpaWl6OnpQXNz85imOLfYUk7oGprq6mq1kOuCkS7I6S4NIgjqTsMSsFP8Y/S+qmuidSd8p3EidROhqrW1VbWJeUDAaaMrpld5PzKWw7lqyDvIyspSyZydNkyixV+1ahWGh4dDNNBiltTbcLIYl+zzH374Ifbt24dAIIDrrrsOc+bMGY+yTQkuZRwhE93vwM3HQd/Bu8Wv0SfNuro6+Hw+W1weQY+tAoxmQpbFXt+BSwyY7OzsiDIbB4Pn4gMFg0E0NDSoSMEAQn6jL9j6YDtx4oQtk7ruiOj2TPETaG9vx8KFC5GcnOzoyA2EZn6XRVuOu5pxZ9zeTzA4Gr9DAqDpcWd0YXB4eNgW30MEA6eYPfrzxFFcP5JsClOAXb0v9zZjOpnll0U9JSVF+Rbp7SoTlWSS17OIA+dioIjpBzh3bNzv9yvBPi0tTS38Tu8asJsyRbAy4/641aG5uRmxsbHIyMiwmfl0ASrcmDGP6psxVxobG1U/Hh4eVs678+fPh9d7LsO59Kn3338fCxYswPvvv4+EhAT09vbaktlKfCdJU6GPGTmCrJt09fep18183059Sf9OTBUDAwPqdKYZ50sfH+b7lX6ck5OD06dPO8bDOnHiBCorKxEbG4vi4uKQXFWDg4P4xS9+gdLSUqSmpiI7O1uddGxra1OOwXo29GDwXAZ03UnYKc6WGWPJrS85jZFw/Ux+I3OGGTvK6TdOn4kWW+IxSZBQ6asi9MnngH1suz1HBG+9P+rzox6VXdc26vOnmOsOHjyIlJQUFBQUOB5r1zX0wWDQMT6X09xkll1vT7f4SBdDpOv3uAhCVzITKQi5YU7SYwlLwLmO6vF40NbWpoQJp4VWzCKycOnB3kxhSZ9QzIlEn3AF2RVEUl4JiqhPvLJzuuGGG5CQkAAAjpOX1EXKa2pMnJDJQxY8fYERDZk+wMeaON0GvZz4ycnJQWlpaUgQONkRSrJFU1sxlsDkVje3xdIUjpwEKf0e0j/M9ynld5v45Xv998BoH3JaBPQ2l+vcJlj9ufLOc3JyVOoNp/aJVDh0qoceqC4YDOL1119HQUEBEhMTbSd6zI2KCLHJycn485//jNTUVBQXF+Po0aMoLCxUgrpTu5mbBXlHonlwqoeTsKcvhkNDQ0pIcwvqqL83eU8ifEjYADmGrqdCEfbv36+Ogl977bUhY6WyslJpN0VQEW2kx+NRY0CerfvxyLUiROrfSbnT0tJQUVGh2leEADOgo1lPJ+E6nCAufUru59Tn9L6pm8/lfZibgWAwiL179+Lw4cMoLy9HUVFR2L5vfmeWJ9I52RSY9HaVk4lO5dCDpcr7CRdI1WxXcw5227ReKJGu3xedYoOMD7pmxNSS1NTU4MSJE6ipqbGpLcOpE0Xtm5ubi7y8POUMKfcWHxsZFMPDw8rEpTud6qpRE10Fqv9bBqGodN1OEZj3Ejv+0NAQmpubkZ09GlfommuuQVdXFwKBgFInizrbHPzZ2dkqH5OT2tV8vpi/dL8dQYLNmbZ4N8dJc1KTBUv8d7xer83XQK4Xs4PUOxLT0Vg4mX+cTAGmv46O6bNhXuP0DN0MZfpDyOeSK0sEHr1O+kQveZdMXyPT1GX6/ADOBwXM96ebu5zaVEwyx48fVxonmeRXr16NoqIirFixAm1tbSFaLnFk9fl8KCkpUT5VMTExaG9vR2JiIo4dOxaSyw84F2JCNDCyeAhi4nDyxzN9kfTvxFRj+pKYbSqbEnkPtbW1KrGrLqhLrirTZ6W4uBjFxcUoKSlRZhjdjLVixQoVtkKE4Pj4eOTl5WHVqlUoKCiwhV6Q93rs2DHs2rULIyMjKtSDzDO6CbSurk7lSZMAhCKImLGU3NosGAza3qs+b8qJPTFJSQwgt/lYNPMNDQ1qE5Cfn6+0Leb4aWtrU4cS9HYL11/dNjR6nzf7ptNYlvVCNH1jHeDJz89X64O0v5xgq6ioiOjgwsXk1hwvKAhNEfSJyJzoMzMzERcXpwKPRZKdXg+spQ8GvbPqx4RNp1N9MtTtw7pQpE/e5ukec9GVBc0ty7wsyCtXrlQ5pfLz87Fu3TqlPm9tbVVJVeUEmdOi6HR8WMqgTyR+v3PwPflc/JdkgtEXflOgMp8FnJuEbrnlFhQUFKC4uNhRmJLJIC8vzzGBpz5JSYwVXThwEy51gsGg2tU7BVtzuodeVt3EF04Qd/pNMDjqsNrV1aX8PGQRkMVZFljJ7SYnUyRmilO7Shu6CaBOfUwXjv1+Zyd/uUdlZSVef/117NmzR5kAKioq0Nvbi9OnTyM/P18lbZWgj04xkvz+0ePt06dPR0lJCbKzs3H69GnHd6GXCTiXWFj/XuLlSD2CwdEknfv373d1sJb6e71edRwcgDqoIGYop7AU4gguUaql74kwK5sz6R9erxfXXnstCgoKlFlVMs+LAKJrSHQfF6c5TcbtK6+8ghMnTmDfvn1KQNRj4oiQmpiYiCNHjqjI7BIqIjc31zFJru7/I++wra0N6enpIX3qD3/4g9qUStt3dXW5zsfZ2dno7e1FQUGBEvb0d2NugAOBALKysjBr1iwkJyfb2i1cf21pabH5funvXIS9SDbQMg/7fD4sWrRIJd01y2reX5/zFy9ejP379yMuLk457+/fvx/Hjh1TZjTRgjqdCp0MKAhNEfTJ3VxMZKGU3UMkErSb9kI+1zOQO+3snXBS48rkZzo8iyAmO0y5RnwjzMElCwgAm/bBaaeiH7s2d8dOAqBMcC0tLY7RbN3aSI/qbCKCogxkt4UEsJ/Scmtrr3f05I+kIgFCk29Ke0gWcJmUwmk1hHCTqHzvpEkQwUF8ZILBoOuJMfP0n7SRLI5jmSn9fr/tSLtohST8gptvkTlBh9Pc6fUUDaiYWMwgd3FxcZgxYwZmzpyJ7OxsxMTEoLCwEENDQ8rxU0IRSNBHp4CX2dmjx8gXL16sduM5OTkh9ZJr5eBBdvZojKLly5eHBMMD7M7gEplbd7A221ec3cUPRB+3cmpMxo2YGKU8a9euRWxsLN555x0cO3YM77zzjuqzZhZ1p36oCyx6v9Dr7fbOpF+VlJRg/vz5uO6661S59bQ7EuzxzTffRH9/PyoqKlTMq8WLF6tymQKX9CddaEtJSUFvb2+ItlveoZjsTE26iQRQHRwcRGlpqaMGSH+Pra2tKnBjTEyM7X1JOhIzd5zMEZLvz6kc4SLau22CEhISsHTpUltcs3AaaZl7jxw5gtLSUgwPD2P16tXo7OzEiRMn8Morr6ChoUGFH2lpiTzg6KWGPkJjMNk+QrIDd/MfifQe5+MU6JT3yek3uoOdIKY2Paq0eY2TU+/5Jhh1q1c435jY2FiVK03s0eFs7idOnFC+WQUFBbbvxFwhOyFJrHk+PkVOfiC634DEH0lKSrLlktL9VbxeL3p7e1FfX4+1a9e6JnIdKzmsWztIHfT6yaKhl72yshJNTU3o6urC4sWLVW460x/A7d2Ee/9jtaMsBGaiSac6OpkPnJytc3NzlW+eOKmbCUf1Ng0GR0MHpKWlhSSfNf1+RACRY/Bmm8q1Mnbk0IFTW8qCrOfOcktMbDr5uvmNOPkgAed8e5qampCfn4/+/n6sXbvWllPMyc/I9IeR+ps+XW59cP/+/WhoaMDcuXOxatUqV1+YgYEBFXLi8OHDNvPYhx9+qLQ8MTExjr4/lZWVOHPmDLxeL06fPo2ioqKQ5KJOvlRmec13o5fTbdwDo8JKTU0N2traUFRUhMHBQXVwxc23T8yWCQkJmDZtWtjE1G5OyeHG11gJgPXy63O/aJ8TEhKQmZmJXbt2ISEhAQMDAygqKkJfXx/S09NRWVmJ06dPY+3atSFz7HhAH6ErBDGFufmPRHqPSHbIghl52O03wLk4Lma8DfMIqX4NANvO29RQhcM0tziZmUxhUb8uKyvLlrsp3C5HhBwnU5iYCVesWKEWcVk4RYNjavZ0jYn5XNldSliElpbR5JGisZBw+Y2NjSguLrZFxdWD8Lm9K9NXy6muTv41Ugc9X5iTKSoQCKCrqwszZszA6dOnkZmZqTQfLS0tKsq8+Qyn938+Gh7R9DnV3aktxBRq1hOway0AuyZPbyPp4zU1NUqzIX52bW1tSnPX2Nio8qZJPUQoAAB9D+rkoyPCjZOWUS/L8PAwfD4fVq1aZTuibbahGRdLH5O634hbe4tvz9/93d/hzJkzKm6XKfR5vV5bvzNNnDJ2dL8xsw10iouLlWlZr7s5xhMSErBy5UoUFBTg6quvVmNHNGiSGsTJ90w3AQ4PDyMlJQV9fX0AQo+qy3sEnJ2kxVS4e/fukDhLZh11s+DBgwfx4YcfIjU1VQlB5vsQDZAI78nJyRgaGkJ2drZrjjG9fXQhSNcSuo0vM/iqid/vx4kTJ7B79260tLSo9tB9L+Pi4vDxj38cixYtwq233qqitHu9o6fbJAzFZEJBaBKJxLdDTGE5OTno6OhwDHo21n3Cmb6cHGj1sPtOPg9OPkXmd27+G8C52DVVVVUA4OrAp9fNKRZNuHo5aVhk0Th69Kg6yRVOWNF9opwmsNzcc4lR4+Li0Nvbi/7+flRXV9uuAUYdYOvr69Ux4WAwaAuKqQsEcsx5eHhYtU11dbUtXL6++OjmpHBCRCT9za2eZhub6Vnmzp2r4kOJGcLv9ys/q+rqauWfYJrMzPc/lgrerIecPhtLk6ibSvWAo1J+t9/r5dHNsRITSHb/ZhTi9vZ2tLe321LMyMKYl5eHrKwstdBlZ9tT3ABQ4900V+m4xcJxakMzLpaTgB/unYtgKAlKJeGr0/NMU79u4gRg2yQ55clyeq6E7HDyNdTLrAu80q9KS0tRUFCgTrhJIEDpk7KhEGFSAtc6CYVmf3CaH/U8f/rYM/N86Wb1tLQ0pKamoqenR50QNutWW1uL7u5uldRW/Cjz8/Nt/ccsl9M7jWSTJG3v9XpDnPil3Xp7e5GYmGjz2zQ3HNIufr8fqampysJRWlpqCzcyWVAQmkSkI5qnLkxEVZucnBwS9My8z/lkUA8Gg47ZivWw+3ICQA/KKJO3PC+SSdR8rpw4GUvDJXWT3XcwGAyZmJwmI6eFQCY1PWqyOYE6nSrRHQHNBUcXCpcsWaJUvmYdZIeZkpKC6upqVFZWqmBp+rPEj2jmzJkqmGEgEMDZs2eV8KQnmzQnMidBRiYgXYh0w5z49R2o3ldramps6VnkFIyckAoGR49qS1LerKwsDA4ORuQLYJbBrJMI0m+99RYCgYDSWIXbVeomCTMlgQgaogk120cvjz7Ji1OpOHebJ+vk5JT4+4iwI8ipJNGaAFCnw+bOnauizUuZzXEq5rjBwcGQMuv9VfzITO2EU9vq99adeM3xZWrLwm2ApK3kRKiZvNbUIuvmTrNM1dXVaGhoCPE1dHtfZnlF+JNM7uLrJhvO5ORkdcq2tbXVZi7UhQwz2rPpLyfzlKSOECHCaayKf5bX68XAwIBNu2tuBJcuXYqhoSFl5pH5Qtcs6UK3lMtNYBNfSKf21vH7/cq/UsZ2S8to2o2PfvSj6O3tRUNDAwYHB0PGi+4DJf5ochgl3HoxkVAQmkSkwwChToZmx9W1NObkpN/nfDKoy8IwllN1fX094uPjQ8KoR/IsvZz6jlgSa5oLrjkY9V08cG6C1SfLcEKPk9lMj5qsl1F29U5OrLJ4OqVekIEcFxeHJUuWOGZwT0hIwC233IKBgQGcPXsWbW1tKrO1/iwRfDo7O5UvR21tLSzLwvTp023O1E51DLeDBRDyPBO9PsFgELt370Z3dzfa2tpsfTUzM9NRZS4Lttc7mg9Kov16vV4VWwSA0pxI8DtdoDYnR70PSF/q6OiA3+8POUXohlOf14+Ri7CqZ/KW03nSN0Tzox8ykIMLTsfEJZFsQUFByGIli2lOTk5IShsnLZn5XkUo6Ovrw/vvvx+iudUPK1RXVyMpKcnxkIKbFkbX2o2loZP76YlgndDNcyJQi3As8YOAc1G+9flG6puUlITY2FiVM0/KGm4zpgsTIhDGxcWhtLTU5uQs7QxAmdClXc0TveLw66RxlfQystA79S193hYfNADKr0nK0djYiLffflv5BXZ2dqK8vBx9fX0qh5jevk4HbqT/m6fGpJ3k5KPMbXp76lqrw4cPo7GxUW0+gNG54C9/+QtOnTqF9957DxUVFbbNl96/RDMoybMDgUDI2J8s6Cw9BhPhLK3vVnV1ogRE7OjoUBFoxakNQIjzm3RawD3Al9vzhMHBQVRUVKC8vBw+nw/AuYCOemRjAK4RaXV0RzwZHE7P1Z3yzAjYUma9brojsenEF65+TvU3nQX1oF9iFjODygm6iWqsaN8ykXd2dqqouyJQ6kEqTc2X6Vtyvrsovb7iqJqVlaUiA8tkbZa7paUlxBFbNwWZgRVlkpc+IW0rk7AsxHISpq2tDX19faivr8f8+fORmJgY4sipl10WIacI1aI1cXvnsghKYFG5l7xzp+foUY17e3uxYMECFVDQqa30iNJjBSuUXXV3dzfS09PR2tqqnIed2tbtee+++67ScGRkZIQEGgSgnqO3rek8az7HaQy4tS0w9vg132cwOOoI/u6776rfffzjH4fX63VMluzk7K0vxuEOWejvprCwEH19fa5RjGUukKS3Mt51U7OYLM0DF/JO5Z2UlJSgoKDANncBsEWj1p/pFDB17969au4tKChAdna24yGKcMjz/f7QgLmA/XCMCOpSPv2wxJ49e3DmzBmUlJTgjjvuUPVOS0tDVVUVOjo6cOutt8Ln84V1wJY6ywmyrKyssKbpi4HO0pcRugRt+nbIYmH6s8hxSD3jtaigpQOHS3rptpBWVFSgq6sLFRUVtutzcnJCggGax71NTDWyqW3QzXh6Ali3ex06dEiZLlasWAGfz4fU1FS0tNjjUJg2fNNc6KZxcFKz6+Yn2f0Dds1bJLZ2fVeYl5eH4uJi29F8UysVGxurtDgSVC4/Px8dHR0RmRQFEQD0ZIuBQAC/+c1vcPToURWk0+me2dnZIUkRTXOGXv/a2lqbuU83Y0j76s6rckS5sLAQvb29jrFYnDQ5ubm5yMzMVJnEw5m1BGlr8dcJZ8rRtaF5eXmIj49HYWEhurq60NzcrLKum+/N9AsRnHyixL/MyaxlmhOc4r+IlnHFihVKWBZtS21trTLf5ebmhjjJyu917UxVVZWtXuKTJJqwcEIQgDHHr6DXX46jDwwM2OYx3YwlY1c/Op6bm6s0m+HCVggyV86dO9cmBIUzF2VlZSEtLU0lFj18+DDq6upQV1eHnJwcmyZJTLUtLS3o6upSCaXlGaYmUDdZ6lo5aRe5p/Tt7Oxsm1+XODAvXbrU0aXC1K7L5kfa0JzndFcIMdXKBkDXxq5cuRL5+fkoLy+3bUp9Ph/KyspsplLTNOvUzjk5OZg1a5YKfjuZUCM0BhN1fN5NgnbaHcn1bjtQmXgBqPgjQHgtkeCkEZJndXZ2hk0nYE6WZuoD/Tq/34/6+np0dHRg2bJlISkHTMyw/KJtkHqKmc0sj9/vt13jtutwS2Mifhh6KAF9YDtpI5w0UuZOuLOzUyXilAjW+k7MKcS/uYuPRCO0d+9evPPOO7j66qtRVlaGQCCAl19+GZZl4dSpU/j0pz+tNCRjLXaCqZ0DnFNpDA2dSxti1s/sO259yE3L+dprr+H48eNITExUp5mc0i6Y5hHzc/05TlpFs0719fU4fvw4br75ZhQUFLhqPPU2qa6uxpkzZ1RARamn5HkTLZW0kXmsXfyAfD6fLYO7WT59MxWJ1lDvkw0NDejs7LTlEZR+qgdpdOv3stiOlebE6b23tLSgrq4ORUVFtvFvjm997Eq7RxJ2w23chNNaSDkDgQAaGhrQ1dWlYo+ZBzv0fH0+nw9ZWVnKl0xCOpjjXzSiPp8PDQ0NttAXkWrR3covp0tzc0djr8l1CQkJIelQzLkMOOenZuZAMzWm+lg2UxXp/wactXbhNGHjBTVCAObNmwePx2P7++pXvzrZxXLEyQdAdpC6pK1fn5CQgPLycmV71r+TEywAVCbmqqoqZZM1fQrkeXFxcfjEJz6hhCC5nyQ41CcRACHaAUEf+PK9Gc06Li5OxfyIj49HfX29687ADMtv1lMfoLpmxrxGR58EdL8EfRGRk2aS1VnqLc6fTmlEnDQs5k54xYoVtjaVz6WM+ok1fec4lo+PWTdJRCv7HckGnZaWpoQgp0XTaRcnn8kEJn4Suk+LaK5EEyFB5Mz6mX4wsniamkx9N60fBrjppptQUFCAm266SfnPiZAhp4Gk/Po7c4qL5fTOdC2XqV1ZuHChEkaCwXOn/+S9iSAtv09LS0N/fz/S0tJsY0DqJpGepY3kHnrW8dOnT9s0Q3pf16/V72cKgeZYlzEEjC56IiSIJtLj8eDs2bPKf0fMuLW1teq/prbKaS5wamdph/b2dsTFxakoxrqvlZj89ACq+nexsbERhd2QudJJK2b6nkn7yByVn5+PpKQkLFu2TKX+kGjzUp7s7GyUlJTA5/MhLS0NHR0dCAQCyrFY7+/yjoFRjWhVVRViY2Oxe/fuEGuAqUU3kfhlgUDANp9nZWVh2rRpKkzI8PAwBgYGMHPmTEftY3NzM1pbW9Wz9LXD6YSuaHvS0tLUfKAHqtW137q/ktnO8rn+nMniitYIzZs3D5s2bcLmzZvVZ0lJSUhKSor4HpMVUHEsG2uk1+n24cHBQRw/fhwLFixQOxIJFhhO22DupmX3J/4D+o5CBot+P9mlm9foNua6ujrXYGBOhNO6RLqz0NtOfIDMMrjZ92XRBkKTGEZajkh9mfRd5KFDh9Rpl3D+AU4+Zm4+PuF8Jdx8Gdra2pCUlBTW32IsnHy1nDQAoqVcuHChEr703aqpIZG0BHqsGrddv/4OdU0SEJp41OzDui+RqZWIJBhjOO2NqaGUBUe0DLrfjpTV1ES5BUh087cxNXW7du1CX18fCgsLbYEMdeG4vb0dM2fOVL5TkQbudPOD0ttU5l3pX+ejBTLfr5Ogrz9Tn/vC+Y9JH5U5Q08qqr/zgwcPqj5oBsAUR/ba2lrMmDEDb731Fq655hqkpqa6aqbcNEIyXpwyypvaQqdgoE5BH8dqO/M9mNqt8vJy5Uuq30+0RLGxsY5zEjVCl5Dk5GQllWZnZ5+XEDTROO14xrKdhvNvAc7ljiktLYXP50NhYaEtwJh+Askth5moeWWXKVoe6cB6IEB94IkPg+6fIWXSMY/i6m0hk24gEMD+/ftx4sQJ247YSeviNgHLKRWxn+t2bLMMTpoEXauht4m5C47ELBHJdTJB+/1+ZS4xUzy4If1C8reF8/Fxam+9Xzn5MpSUlKhwALKgO/krhMN8h07au0AggJ/97Gfq5Jp8f+bMGfzv//4vjh07poSEgYEB1NbWhgScdAoHIKcN9VQNIjRJHChdYyXxkGTnbPoSOZ3Uk/Gla7xk8RdNo2jRzAVINghSLul/cp3ed5z+X0zPVVVVISfD9LEOOJ8k9PtHj0sPDAzYTmxKmIS4uDhYlqXGuWg7pJ66v6OOkylZyiz1F02PecJMNKLp6eljzo2y8Eqi07F8z/Rnuc290kanT5/GjBkzQkIZyGGKzs5OlJaWYu7cueo7Gcu7d+/GwMCA8m87fPgwZsyYoXJymW2ml9NpjMp4cEuZZGpeZdxL2/j9fpumNBgc9amsrKxUJ3wB5yCr8kyZD+rr69Hb24va2lpH4am/vx91dXWoqanBsWPHUFNTE9KXJ4srXhD67ne/i/T0dBQXF2Pbtm1hYyUAoyq6np4e299E4aSOB+yd0BwMZicKtyBlZ2ejsLAQpaWlKsCYHq3VKYeZDE6ZGEQIEpOOOShE/QmEms3MvF1uTrpO30kwwerqapuzq6luHattKyoq0N3djZ07d6qcQlIu/T5jCVr6AhtOGD1fAUG/Pi0tDXv37kViYqLNNLNs2TJHHxenGFL6/fT/N8tsTrhOmhq/32/ra3r0WCenXrdnC+Y7BM4JncBov6+pqUFcXByamprg8XiQmzsaDfm9997DwMAA9u7dq0w53d3dSEpKUgcLTCEBsB/NloVEwiWIw7Mu3OlJSeW4u5t5z+mdyH2CwdFwD+JU69Zn5D0ACPneyVwarl+J8Ga+N32s62Y4v99ve35hYSHWrl3rmLbELa6WCCDhHNflGSLgSPvosY7i4uJshxNEyAUQkjRWP4It76yqqkodtY+NjVVmHDfzk/4sMxGzPi+3trYiNTUVfX19tmjrpjnINOkGAgEcOXIEc+fOVVpy6XuZmZmIiYlR1+rl1NvZnJNEMDUjg4d7D9nZo7GsRkZGHMepbA4CgYCqi9Nz9X4vbSThKNLT0x3HfVdXF0ZGRpSpLpyD+0RzRZvGnn32WXzkIx/BzJkzsX//fjz00EP41Kc+heeff971N48++ii++c1vhnw+EaYxJ7Wxk1p7rGOJ4+mYZt7PyYQWTs0MnNsd62pkwN0RXG8LKeeJEydQXV2NnJwcrFq1yiYkjmUaNFXSFRUVKoeQz+fDihUrbLlxzseZNxx9fX14/vnncfPNNyM9PT2sGl/KqjsZtra2OjqIu73f+vp6dHZ2qvdiOtMDoSEXnNrb7HNujtvhHCbNvgrAtf+FM8N5PB4lqGZkZChB/cSJEzhy5AjWrFljO6VllsHE7Wi2biIVB2av16scR3XTg35fN7W+2R7AqKN1e3s78vLyHJ1WRQtUXV0Nj8eD0tJSm4bSFE7H6veSO2v69OnqFJZTe+iHAYDwZjbznZlmKieTOGDPtSVhNzIzM2FZVkg4ENEi62ZPaUs9fIHfP3oQQsa1OCo3NzcjGAyqf5tO32OZ08z3qZu8RFgU/yGv1+uam1HuFQgE8M4772DmzJkqRIRokEzTqZjBneZ7qbPeLuHMV+Fyi+n5K4HwJv9IzegytvU6AOfGvbQJMHFaoEhNY5edIOQmqOi8/fbbjv4Tv/rVr3DXXXfh1KlTIdF/haGhIbUjAkYbcs6cOZOWdNUcmJH6lThNzLq/yVgTwvk83xysTovRWL+LREhwq5e5M9bV73p9nWznsptzE+7k93Ivp2SNbu/jJz/5iTJt/PM///OY/kISZ0j8bmSy1BdtN+ExGAxi//79OHnyJD7ykY8gPz8/5H7A2IJCpO88ks/0fwOhiUT192FOtOa99Hrr8bTC+f1EOtGaQqB+4lI0oFdddRWOHDlii6VlCiROC5VefzF5OcVykfu0t7ejrq4OCQkJKCoqUvNYY2Oj8k1Zvnw5Dh48qPK5OQkbIlRVVFSMeRqzr68PPp9PmSRN4UOc+vX2dtq0OW2KTJ8v3a9F/LxEI6i3nem3pL9T6Uu6n5XuqxQMBtHW1qbGstOYj2QuNd+NLOyy4ZAx2NzcjMHBQde4PseOHUNFRQWWLFmCsrIyAMDOnTsRHx+v3ovbWAtXxsbGRhw4cADp6ekhaSrC/c6c29w2x5HOz5GM+0vh/xMJV6wgdOrUKZw6dSrsNfPmzcP06dNDPm9paUFeXh727duHa6+9NqLnTXb2+fEm0sF/MfeM9BnjVRaZXCVas/j8iDlD30E6DWyncphH/500WvJsJ8fKzMxMfPDBB3jzzTdx1113jembFm4HZ17nNjmZmhunCelCHNPduJD3JxqBlpbRwIszZsxAcnKyq4YknMDhtlONtC2dniUCQHp6unLkbG1tVZnpTSdeXVh1E9DCLQyyyA8ODuLo0aNYtGgRTp48iZ6eHixfvlz1tf379+PQoUNYuHAh+vv7ER8fj6GhISxbtsyWlkPXInR2diIpKckWENMsU0pKCv70pz9h4cKFsCxL1UvGlO4r4+TfE64f6AKM/E6chPWQARKJuaOjA5mZmSgpKbEdwXfSSptjTheU3Ma5+TsnTedY/UPKK/fJyMgIOZBgsn//fjQ0NGDu3LlYtWoVWlrOBSpdsmSJ0opFsjHVEeFYj7t0Plzopvpy4ooVhC6G3/3ud7jjjjvQ0NAQtuPrXGmC0JWIqRU63wnbiXBCRSQLdqSqeL38wNgRwcNdF65+IhyYcaciaRO3hdxtwRmLyspKFYnW6/ViwYIFKlibXl5ZLMrLy5VGTlepuwmFgUAAu3fvdtSEjKWZBGBrp1OnTqGtrQ2LFy9Gb28vli5dirq6OscYKaZGSJ7npoWT7/r6+lBZWYk5c+Zg3rx5ShMlWhExcwWDQcydOxfLly9HRUUF5s6di/7+fhUs09R0mNHQ9V2/28kfKWcwGERzc7MKvaALgma/jkRzINecOnUKw8PDtkjq9fX1OHz4MAAgIyMjpC+MtdFy24yMNVYjFYRM3LRhbpha3PHSmFwJgsqlJuoFob1792Lfvn0oLy9HSkoK3n77bXzpS1/CypUr8corr0R8HwpC0cmFTjLnO0kC4xcqYaxymaaySHxNzOcC4Rf+SAgEAqiqqlKCq2VZ6pixXl4xHwwNDanccPoi7PaOxvKP0H0WAHv4AwC2dpL0F2LCcQucGM5/Yixfjffeew8JCQno7+9XUbz1uol2xkwcej5mTtMk7tRP9brI/4sm1Cko6vlsMHR/GV2z6rSJOV/fkYsdqxQkrlyiXhA6cOAAvvCFL+DIkSMqnsOGDRvw4IMPqp1cJFAQIpeaiTIlRurrE+53wPja/MM93y0Wz8W0ky4YmCalcPW9EGf5SMsSaeydsTQcF1qOS/G7ibofIeGIekFovKAgRMiVx4U4VRNCLi8iXb9jXb8hhJArFK/Xe15+IYSQK5crPqAiIYQQQogbFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtFIQIIYQQErVQECKEEEJI1EJBiBBCCCFRCwUhQgghhEQtl60gtG3bNlx//fVISEhAamqq4zWNjY244447kJiYiIyMDNx7770IBAITW1BCCCGETFliJ7sAF0ogEMD69etRVlaGF154IeT7YDCI22+/HZmZmXjjjTfQ0dGBu+++G5ZlYfv27ZNQYkIIIYRMNS5bQeib3/wmAODHP/6x4/e7du3Cu+++i6amJsyePRsA8PTTT2Pjxo3Ytm0bZsyYMVFFJYQQQsgU5bI1jY3F3r17sWzZMiUEAcC6deswNDSEqqoq198NDQ2hp6fH9kcIIYSQK5MrVhDy+/2YNWuW7bOZM2ciLi4Ofr/f9XePP/44UlJS1N+cOXMudVEJIYQQMklMKUHo0UcfhcfjCftXWVkZ8f08Hk/IZ5ZlOX4uPPTQQ+ju7lZ/TU1NF1QXQgghhEx9ppSP0NatW7Fhw4aw18ybNy+ie2VnZ+Ott96yfdbV1YWzZ8+GaIp04uPjER8fH9EzCCGEEHJ5M6UEoYyMDGRkZIzLvcrKyrBt2za0trYiJycHwKgDdXx8PEpLS8flGYQQQgi5vJlSgtD50NjYiM7OTjQ2NiIYDKKmpgYAUFRUhKSkJNx666246qqr8LnPfQ5PPvkkOjs7cf/992Pz5s08MUYIIYQQAJexIPSNb3wDL730kvp3SUkJAKCiogJr1qyB1+vFq6++ii984Qu44YYb4PP58A//8A946qmnJqvIhBBCCJlieCzLsia7EFOZnp4epKSkoLu7m5okQggh5DIh0vV7Sp0aI4QQQgiZSCgIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRquWwFoW3btuH6669HQkICUlNTHa/xeDwhfz/84Q8ntqCEEEIImbLETnYBLpRAIID169ejrKwML7zwgut1O3bswG233ab+nZKSMhHFI4QQQshlwGUrCH3zm98EAPz4xz8Oe11qaiqys7MnoESEEEIIudy4bE1jkbJ161ZkZGTgmmuuwQ9/+EOMjIyEvX5oaAg9PT22P0IIIYRcmVy2GqFI+Na3voVbbrkFPp8Pf/jDH3Dffffh1KlTePjhh11/8/jjjyttEyGEEEKubKaURujRRx91dHDW/yorKyO+38MPP4yysjIUFxfjvvvuw2OPPYYnn3wy7G8eeughdHd3q7+mpqaLrRYhhBBCpihTSiO0detWbNiwIew18+bNu+D7X3fddejp6cGHH36IWbNmOV4THx+P+Pj4C34GIYQQQi4fppQglJGRgYyMjEt2/+rqakyfPt31uD0hhBBCoospJQidD42Njejs7ERjYyOCwSBqamoAAEVFRUhKSsJvf/tb+P1+lJWVwefzoaKiAl//+tfxj//4j9T4EEIIIQTAZSwIfeMb38BLL72k/l1SUgIAqKiowJo1azBt2jR8//vfx5e//GWMjIygsLAQjz32GP7pn/5psopMCCGEkCmGx7Isa7ILMZXp6elBSkoKuru7MWPGjMkuDiGEEEIiINL1e0qdGiOEEEIImUgoCBFCCCEkaqEgRAghhJCohYIQIYQQQqIWCkKEEEIIiVooCBFCCCEk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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_first_selection(candidate_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lower right\n", + "\n", + "For the figure in the lower right, we need to reload the merged `DataFrame`, which contains data from Gaia and photometry data from Pan-STARRS." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "filename = 'gd1_merged.hdf5'\n", + "\n", + "merged = pd.read_hdf(filename, 'merged')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the previous notebook, here's the function that plots the color-magnitude diagram." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_cmd(table):\n", + " \"\"\"Plot a color magnitude diagram.\n", + " \n", + " table: Table or DataFrame with photometry data\n", + " \"\"\"\n", + " y = table['g_mean_psf_mag']\n", + " x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlim([0, 1.5])\n", + " plt.ylim([14, 22])\n", + " plt.gca().invert_yaxis()\n", + "\n", + " plt.ylabel('$g_0$')\n", + " plt.xlabel('$(g-i)_0$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(merged)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add a few lines to `plot_cmd` to show the Polygon we selected as a shaded area. \n", + "\n", + "Run these cells to get the polygon coordinates we saved in the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_polygon.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.21505376, 17.5481972 ],\n", + " [ 0.38978495, 18.94628403],\n", + " [ 0.53763441, 19.90286976],\n", + " [ 0.70340502, 20.60191317],\n", + " [ 0.82885305, 21.30095659],\n", + " [ 0.66308244, 21.52170714],\n", + " [ 0.43010753, 20.78587196],\n", + " [ 0.27329749, 19.71891096],\n", + " [ 0.17473118, 18.68874172],\n", + " [ 0.17473118, 17.95290655]])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coords_df = pd.read_hdf(filename, 'coords_df')\n", + "coords = coords_df.to_numpy()\n", + "coords" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "#poly = Polygon(coords, closed=True, \n", + "# facecolor='C1', alpha=0.4)\n", + "#plt.gca().add_patch(poly)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subplots\n", + "\n", + "Now we're ready to put it all together. To make a figure with four subplots, we'll use `subplot2grid`, [which requires two arguments](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html):\n", + "\n", + "* `shape`, which is a tuple with the number of rows and columns in the grid, and\n", + "\n", + "* `loc`, which is a tuple identifying the location in the grid we're about to fill.\n", + "\n", + "In this example, `shape` is `(2, 2)` to create two rows and two columns.\n", + "\n", + "For the first panel, `loc` is `(0, 0)`, which indicates row 0 and column 0, which is the upper-left panel.\n", + "\n", + "Here's how we use it to draw the four panels." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TU147rnn8O9///u0xnXHHXego6MDP/7xj9HQ0ID/+7//w0MPPYR7770XYWGnvg7Jyck4dOgQTpw4gZ6eHvj9/mltdyb86Ec/gsPhwDe/+U0cPnwYra2t2L59O7773e9S4ybUeCYjMzMTl112GX7+85/jm9/8JqRS6YTrfvzxx/jf//1fVFZWor29Ha+//jr8fj8WLFgAhUKB++67D/fccw9ee+01HD9+HCaTCc899xxee+21kPv7+c9/jgMHDuBHP/oRKisr0dzcjA8//BA//vGP6bnceuut+O53v4sPPvgAbW1t2LVrF9555x0Apwx9gUCAjz/+GN3d3XC5XOOOkZ6ejuuuuw6bN2/Gvn37UFVVhW9961swGo247rrrpjXvDAaDMWeZlcy+c0ioqlg+wYUChPb2du7aa6/lIiMjOYVCwd14442czWYbt93zzz/PxcXFcREREdzGjRs5h8MRsJ9//vOfXEFBAScWizm1Ws2tWLGCe++99ziO+2/RgclkmvI8EFTkEGrbUInmzz//PJeamsqFh4dz8+fP515//fWA/X744YdcWloaJxKJuKSkpJBz4vP5uEceeYQzGo1ceHg4l5+fT4sPJhpLX18fB4ArKyub8tz453i6xROPPPII9/Wvf52TyWRcbGzsuEKU4HnjOI5TqVTcli1b6N+7du3iFi1axInFYk6v13M///nPA6p5Gxsbucsuu4yTSqUBY5xqu1BFDklJSdxTTz016Ribmpq466+/nouKiuKkUimXkZHB3X333bRQI9R4JioyILz88ssBxT8TsXfvXm7lypWcWq3mpFIpl5eXx7399tv0c7/fzz3zzDPcggULuPDwcE6r1XLr16/ndu/ezXFc6Hvw8OHD3Nq1azm5XM5FRkZyeXl5AcU4brebu+eeeziDwcCJxWIuLS2Ne+WVV+jnjz76KKfX6zmBQMDdeuutIefW4XBwmzZt4lQqFSeVSrn169fTqm2OO1U8oVKpAs71/fff5+bgTx6DwWAEIOA4lnQyHR5++GF88MEHqKysnO2hXLIkJyfj7rvvvmS6MJwNjz32GN566y3U1NTM9lAYDAaDcR5hoVgGYw7hcrlw5MgRPPvssyELGBgMBoMxt2GGHYMxh7jzzjuxfPlyrFy5Et/97ndnezgMBoPBOM+wUCyDwWAwGAzGHIF57BgMBuMCY8+ePbjm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61vfwu9///sJXaOrqwvxeDzN7aHVarF48WL6+6FDhzA0NISrrroKKpWK/vz+979HV1cXuru7MTw8jBUrVtBzNBpN2hgMBoORD9FoFIWFhfT3EydOYPv27Xj00UfTjpPL5YKJZI899hjNvs/1k8vb0d7enjWmQqEAAEQiESQSCTzwwAN49913sW/fPvzsZz9DIBCY7C0zZogzG2XOYADYtWsXUqkUGhoa0NnZiWg0ioaGBpw8eRK9vb249NJLAQBr1qzB9u3bJ3QNjuPGPCaVSgEA3nrrLZjN5rR9crkcfr8fACASicY9NoPBYPApKytDX18f/X3//v2QyWSoq6tLO+7w4cO4/fbbs86/77778IUvfGHUa+TKtt2/fz+uu+66tG1EuOn1euzZswd1dXX038Grr74a77zzDv75n/95zPtizD6YsGOcceLxOABgaGgI7e3tqKiogE6nw7PPPoulS5eioaFh0teoqalBQUEBdu3aBYvFAgDo6+vD0aNHcfnllwMAli5dCrlcDofDQbfxKSkpQUFBAfbs2YP58+cDAAYGBnDs2DHB4xkMBiMXjY2NeOWVV+jvEokEiUQCQ0ND1JL33nvvCbpNgRFhWFZWNu7rDgwM4MSJE1ljHjx4EBUVFSgrK8P27dvT/ritqKiAy+Ua97UYswMm7BhnnIsvvhhSqRSPP/44wuEwzjvvPDz33HN49tlnsW3btim5hkqlwle/+lV897vfhU6nQ3l5Ob73ve9BLP4k+kCtVuPf/u3f8O1vfxupVAqXXXYZBgYGsHPnTqhUKtx+++24/fbb8d3vfhdarRYGgwE//OEPIRaLs6x4DAaDMRrNzc14+OGH0dfXh9LSUixfvhwFBQX47ne/i29/+9s4dOgQzbafij9uCfv374dEIsmyDL7//vtYt24dAGEvBPs3bu7ChB3jjGOxWPDSSy/h3//93+F2uyGVShGJRPD222+nxbNNlp///OcIh8O47rrroFar8Z3vfAfBYDDtmP/3//4fDAYDnnjiCXR3d6OkpAQXXHABHnnkEQDAM888g3vuuQef+cxnUFxcjAcffBAnT55Mi5VhMBiMsaivr0dTUxP+93//F3fffTdMJhNeeuklPPTQQ3j55Zexbt06/Mu//At++9vfQqvVTtl19+/fj9raWsjlcrptaGgImzZtwjvvvANgJJGCb6FzOp246KKLpmwOjDMMx2DMIKWlpdymTZty7t+2bRv3uc99bsxxLr/8cu5f//Vfp25iOQiHw5xGo+FeeOGFrH0ARr0XBoNxbvPWW29xS5Ys4ZLJZNa+ZDLJrVq1inv44YenfR6//OUvuauuuor+Pjw8zNXU1HBOp5MbGBjgampquN7e3mmfB2N6YBY7xozhdDrR19eH+vp6wf3Nzc3Yt28fBgcHUVFRgU2bNuHCCy/MOd5zzz2HF154AR999FHOMcdLW1sbOjs7sWLFCgSDQTz++OMAgOuvv54ec88996TFzjAYDIYQV199NY4dOwaXy4Wenh74fD40Njait7cXP//5z3HixAls2rRp2udRUFCAX/ziF/R3qVSKp59+GmvWrEEqlcKDDz4InU437fNgTA8ijmMpfoyZ4W9/+xtuvvlmhEKhScdzuFwuRKNRACOu3qmqAdXW1oavfe1rOHLkCGQyGZYvX45nnnkmTTh6vV7ac9FkMtG2PQwGg5GLjRs34qGHHoLL5UJ5eTnWrl2L9evXo7y8fKanxpjjMGHHYDAYDAaDcZbAChQzGAwGg8FgnCUwYcdgMBgMBoNxlsCEHYPBYDAYDMZZAhN2DAaDwWAwGGcJTNgxGAwGg8FgnCUwYcdgMBgMBoNxlsCEHYPBYDAYDMZZAhN2DAaDwWAwGGcJTNgxGAwGg8FgnCUwYcdgMBgMBoNxlvD/A8CcBOTPOA/kAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "shape = (2, 2)\n", + "plt.subplot2grid(shape, (0, 0))\n", + "plot_first_selection(candidate_df)\n", + "\n", + "plt.subplot2grid(shape, (0, 1))\n", + "plot_proper_motion(centerline)\n", + "\n", + "plt.subplot2grid(shape, (1, 0))\n", + "plot_second_selection(selected)\n", + "\n", + "plt.subplot2grid(shape, (1, 1))\n", + "plot_cmd(merged)\n", + "poly = Polygon(coords, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + "plt.gca().add_patch(poly)\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use [`plt.tight_layout`](https://matplotlib.org/3.3.1/tutorials/intermediate/tight_layout_guide.html) at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don't overlap.\n", + "\n", + "**Exercise:** See what happens if you leave out `tight_layout`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adjusting proportions\n", + "\n", + "In the previous figure, the panels are all the same size. To get a better view of GD-1, we'd like to stretch the panels on the left and compress the ones on the right.\n", + "\n", + "To do that, we'll use the `colspan` argument to make a panel that spans multiple columns in the grid.\n", + "\n", + "In the following example, `shape` is `(2, 4)`, which means 2 rows and 4 columns.\n", + "\n", + "The panels on the left span three columns, so they are three times wider than the panels on the right.\n", + "\n", + "At the same time, we use `figsize` to adjust the aspect ratio of the whole figure." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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R4+ira0N2dnZ/Lz6+nqcPn0aiYmJAIA9e/YgKCgIs2bNQnx8PEwmE2pqanDzzTeP7AMFSHZ2Nnbv3o3bbruNH/vqq688niE4OBhut9trGREREUhMTMTu3btx0UUXeZSzcOHCc6qfnDCXmprqVcskx969ewf9zTRfgTBnzhxs2rTJQyD46quvoNPpeP3UavWgNgrkuuFw3nnnYdOmTUhLS4NKJf/pkKuPL+666y7MnTsXr7zyCnp7e3Hdddf5PF+lUmHFihVYsWIFnnzySURFReHzzz/HypUrodFoUF9fH7Dm7bzzzkNFRYXX8Tdv3jz09/dj586dWLFixaDf1Wo1APh83jlz5qCvrw/79u3DkiVLAADNzc04ceKEx7tOEARBECMNmWsSxCRixYoVyM3Nxc0334xDhw5h//79uO2227Bs2TIPc7iQkBDcfvvtOHz4ML744gvcd999uOGGG2A0GgEMRKl87rnn8NJLL+HEiRMoLy/Hxo0b8cILL4zJczz88MN488038ec//xlVVVV44YUXsHnzZo/0EWlpafjss89gs9nQ0tLitZznn38e7777Lo4fP45HH30UpaWl+MEPfjAmz+GLL7/8Er/61a9w4sQJ/PGPf8S//vWvIdXrnnvuQUNDA77//e/j2LFj+Pe//40nn3wSDzzwAIKCBqbutLQ07Nu3D6dOnUJTUxP6+/sDum44fO9734PD4cCNN96I/fv3o6amBtu2bcO3v/1tLujI1ccX2dnZuOCCC/CjH/0IN954I0JDQ72e+/HHH+P3v/89SktLUVdXh7fffhv9/f2YPXs2dDodHnroIdx///146623cPLkSZSUlOCPf/wj3nrrLdnyfvSjH2HPnj343ve+h9LSUlRVVeHDDz/E97//ff4st99+O7797W/jgw8+QG1tLXbs2IF//vOfAAaEfoVCgY8//hh2ux2dnZ2D7jFz5kxcffXVWL9+PXbv3o3Dhw/jlltugclkwtVXXx1QuxMEQRDEcCAhjyAmESxBeHR0NC666CKsWLECGRkZePfddz3Oy8zMxHXXXYfLLrsMq1at4toSxl133YXXX38db775JubNm4dly5bhzTffRHp6+pg8xzXXXIOXXnoJv/71r5GTk4NXX30VGzduxPLly/k5v/3tb/Hpp58iOTkZ+fn5suXcd999ePDBB/Hggw9i3rx5+OSTT/Dhhx9i5syZY/IcvnjwwQdRXFyM/Px8PPPMM/jtb3+L1atXB3y9yWTCli1bsH//fsyfPx9333037rzzTjz++OP8nIceeghKpRJz5syBwWBAfX19QNcNh8TERHz55Zdwu91YvXo15s6dix/84AeIjIzkwqNcffxx5513wuVy4dvf/rbP86KiorB582ZcfPHFyM7Oxp///Gf84x//QE5ODgDgmWeewRNPPIHnnnsO2dnZWL16NT766COv73Rubi527tyJqqoqfOMb30B+fj5++tOfepie/ulPf8L111+Pe+65B1lZWVi/fj1PsWAymfCzn/0Mjz76KOLj43HvvffK3mfjxo0oKCjAFVdcgcWLF0MQBGzZsmWQiSZBEARBjCQKgQz/CWJK8dRTT+GDDz5AaWnpeFdl2pKWloYf/vCHHvnSCHmeffZZvPPOOygvLx/vqhAEQRDElIE0eQRBEMSY09nZiQMHDuDll1+WDX5CEARBEMTwISGPIAiCGHPuvfdeLF26FMuWLfNrqkkQBEEQxNAgc02CIAiCIAiCIIgpBGnyCIIgCIIgiGnFrl27cOWVVyIxMZEHNfPG//7v/0KhUPjM5UkQEw0S8giCIAiCIIhpRVdXF+bPn48//OEPPs/74IMPsG/fPp53liAmC5QMnSAIgiAIgphWrFmzBmvWrPF5jsViwb333outW7fi8ssvH6OaEcTIMK2FvP7+fpw+fRo6nQ4KhWK8q0MQBEEQBDGuCIKAjo4OJCYm8hyY05H+/n7ceuutePjhh3k+Tn84nU44nU6PMhwOB2JiYmidSfhkNMbdtBbyTp8+jeTk5PGuBkEQBEEQxISioaEBSUlJ412NceP555+HSqUaUoqX5557Dj/72c9GsVbEVGckx920FvJ0Oh2AgQaNiIgY59oQBEEQBEGML+3t7UhOTuZrpOlIcXExXnrpJRw6dGhIGrjHHnsMDzzwAP+7ra0NKSkpI7bOPH36NHp6etDW1ob58+dDqVQOqxy3240zZ84gPj5+UBmnT5+G0+mERqPx8EP0dc1Qyh/qdd7qM9UYjXE3rYU8NnAjIiJIyCMIgiAIgvg/prN54RdffIHGxkakpKTwY263Gw8++CB+97vf4dSpU7LXaTQaaDSaQcdHap0ZHh4Om82G3NzcYQt4wICvoVKpxMmTJ5Gfn+9RFruH0Wjkx91uN0pKShAZGYnu7m6YTCa/5avV6oDOlRIdHe3xt1x9pjIjOe6mr7E1QRAEQRAEQUi49dZbUVZWhtLSUv4vMTERDz/8MLZu3Tpu9VIqlTCZTOcs7BiNRrS1tSEyMhIWiwUWiwVut9vrPWw2GyIjI9HW1gaj0RhQ+RqNxu+5brfb495yBPrMgZQ13ZjWmjyCIAiCIAhi+tHZ2Ynq6mr+d21tLUpLS6HX65GSkoKYmBiP84ODg2E0GjF79uyxruqoEBcXx//f6XTCZrN5aN3cbjfXoBmNRthsNmRkZAQkYDLBTA5xuTabTfbew2Eky5oqkCaPIAiCIAiCmFYcPHgQ+fn5yM/PBwA88MADyM/PxxNPPDHONRt9bDYb+vr6uDAmp3Wz2Wzo7u5GSUkJAIyIBhEYMOWsq6uDxWIJWOMXCCNZ1lSBNHkEQRAEQRDEtGL58uUQBCHg87354U1GmBaN+bnJab6MRiP3wxst7Zj43mIN33CESV/aw+kKafIIgiAIgiAIYpog9nPz5sumVCqRm5uLtrY2GAyGEbu3yWRCamrqIIFMbG5J/nUjw6QV8p566ikoFAqPf6SiJQiCIAiCIKYj/oQjl8uFgwcPwuVy8XMtFgsXrqTYbDa4XK5Bgpfb7UZ9fT3q6+uHLIjJBVJhZapUqkG+esTwmbRCHgDk5OTAarXyf+Xl5eNdJYIgJhllZWW49957UVZWNt5VIQiCIIhh4084KisrQ2dnJ8rKyvi5ALgvmy8hUVy2xWJBSUkJ6urqzlkQY+kZnE4nlEollEol+deNEJNayGMSP/s3kupkgiCmBxs2bMDbb7+NDRs2jHdViHGAhHyCICYrUqHMn3CUm5sLrVaL3Nxcfq7JZOKaNamQyEwrjUYjenp6cPToUej1egCAXq8fEUFMLj3DSKWKYExX889JLeRVVVUhMTER6enpWLduHWpqanye73Q60d7e7vGPIIjpzXe+8x3cdttt+M53vjPeVSHGARLyCYKYrEiFMn/CkVqtxoIFC6BWq2XPNRgMcDgcXGnCzrHZbNixYwcaGhpQVlYGk8mEjIwMFBQUjEjOvrCwMB7ldDSEselq/jlphbxFixbh7bffxtatW/Haa6/BZrNhyZIlaG5u9nrNc889h8jISP4vOTl5DGtMEMREJDc3F3/4wx+Qm5s73lUhxgES8gmCmKyMpFmj2+1GWVkZIiMjYbfbB/0eFRUFlUqFmJgY2Gw2GAwG7qt3LoiFTSaMMV9Bl8s1IkLfdDX/VAhDiR87genq6sKMGTPwyCOP4IEHHpA9x+l0cvtjAGhvb0dycjLa2toQERExVlUlCIIgCIKYkLS3t3PzOVobnRsTtS3l0hXU1taipKQEcXFxSElJ8dDyMXNHRl9fHxwOBzfZHKnUBaxebrd71O4xURmNd2XSavKkhIeHY968eaiqqvJ6jkajQUREhMc/giAIYupRVlaGdevWYd26dZPW3478BQmCGA3E5oss4qbZbIbb7UZTUxPMZjMX6pjgZTKZuPCn0WiQm5s74toxptUbzXtMJ6aMkOd0OlFZWYmEhITxrgpBTElowUlMJjZs2IDNmzdj8+bNk9bfzpe/II1HgiCGi9h8saSkBLW1tejv70d4eDiys7MBwCPFQnd3N0pKSuB2u7kgplarzzk4iq8cfSN1j+mMarwrMFweeughXHnllUhJSUFjYyN+/vOfo729Hbfffvt4V40gpiRswQkAf/jDH8a5NgThm+985ztoamri/z8ZYfWWq/9Yj8eysjJs2LAB3/nOd8h/lSAmOUyIcrvd6O/vh1KphFqtRnJyMlQqFZKSkmCxWNDX14ekpCS0tLRwX7mUlJRB5cmZfwaCWKM41c0xx4NJK+SZzWbceOONaGpqgsFgwAUXXIC9e/ciNTV1vKtGEFMSXwtOgpho5Obm4p133hnvapwTLCiQHGM9HocjVJJgSBATD7FAZrPZEBsbC6VSCYPB4BFNs6+vD3a7HRqNBgaDAWazmQtjSqVyUDlM25efnx+woMeuJXPM0WHKBF4ZDhPVIZYgCIIgJhLDEdguvfRSfPrpp1i5ciU++eSTUb0XCZQjB62NRo6xbstANGoWiwVOpxMqlYpfY7fbER0dDY1GwwU+m80Gq9XKA580NjYiMjISYWFhMJlMvByx2af49+HUbTpDgVcIgiCIUYF8vAhfDCfVyMmTJ9Hf34+TJ08O6V7DyV1I+Q4JAoNSEMilHmD+eMDX8SwiIiLQ0tICm82Gjo4OngsvPz8fDocDbrcbubm5CAsL41o3sV+fUqlEfn6+x+9SLBYL6urqPKJ0BsJ0TWQ+Ekxac02CIAhi5CCfS2Kkee655/D000/jiSeeGNJ1wzFFJXNygvja/NHtdnv1dRP745WUlCAjIwOdnZ0wGo1wOp04fvw4tFotiouLYTQa4Xa7YbVaoVarPcwrWTnSckca8tsbPmSuSSYJBEEQZO5GTEnovR46tDYaOcarLQM1jRSfx5KhR0VFoaKiAnq9HklJSbDb7TAYDDCZTDxZujeTTF/3MBgMsNvtQzbXnC5mnqPxrpAmjyAIgvAZ5IMgJiukoSamI4Fo1cTCF9P+RUZGwuFw8A2RxsZG6PV6qNVq2O12LoRkZGQEXBemibPb7cPSxI2WhnA6QEIeQRAEQRBTEjLjJAh5mPDFtHMOhwMKhQLR0dFQq9UAAL1e7yHU2Ww2ZGRkDEmjZjAYUFZWRpr0cYACrxAEQRAEMSUZTsAYgpjMBBqohAVOycnJwdGjR1FfXw+9Xo+wsDDo9XpYLBYoFArExMTwYClMozaUQCh2ux16vR52u/3cHowYMqTJIwiCIAiCIIgpQCCBSsSmmmVlZXC5XHA4HLDb7UhJSUF5eTm6u7ths9lgt9sxY8YMAOD58fr6+vwGQpEzB3W73VPar26iQZo8ghgmFHKeIIhzheaRqcFI9CO9C8RIIE5t4A2pqWZSUhLy8/N5hM3IyEjU19dDp9MhPDwcHR0dcLvdqKur4wKhwWDwWQ+WIJ29z0wwJMYOEvIIYphQXiaCGD+myoKY5pGpwUj0I70LxEjAApX40pgxQZDlvlu4cCEWLlyIlJQUaDQatLW1ISUlBcHBwdBqtcjOzgYAuFwufPnll9BqtV7NL5m5qMFgQFtbGyIjIwHAr+BJjDxkrkkQw8SfQz+F7iaI0WOqRE2kwCDjx0jO0SPRj/QuEGMJE8aAAR87JhiaTCZuxhkVFYWmpiZYLBao1WqcOnUKsbGx2L9/P9atWydbrjiaZn5+/rRIfzBRISGPIIaJv5DzU2URShATCbYwX758OYCRXRCPx8YMpa4YP0Zyjg6kH/29X/QuEGOFzWaD2WyGzWZDc3MzYmJiAAApKSkABrSBCQkJcLlciI6ORm1tLdLT05Geno66ujosXLhwUEoEbz54xPhB5poEMUp85zvfwW233Ua7sgQxgrCF+Y4dO0Y8auJ0NpebKuavQ2H58uVIS0vjGwajSVlZGW655Ra8+eab0/L9mojs2rULV155JRITE6FQKPDBBx8MOqeyshJXXXUVIiMjodPpcMEFF6C+vn7sKzvCGI1GJCUlIS4uDn19fbDb7Vwos1gssFgscDqdUCqVCA8PxwUXXICQkBCkp6dj3bp10Ol0HqaXLpcLW7duRWtrK59DnE4ntm/fzgO4EGMPCXnEOTOcxcF0WFBQ6G5iujEW43o0N0+m88bMdBRwd+zYgVOnTmHHjh2jfq8NGzbg5MmTyMjImJbv10Skq6sL8+fP96o9PXnyJJYuXYqsrCzs2LEDhw8fxk9/+lOEhISMcU1HHqVSiZSUFKSkpCA2NhZBQQPiADO1dLvdcDgcMBqNyM/Ph06nQ35+PpRKpazPX2lpKdrb23Hw4EHug8fy67W1tfn0xROnfAg0/YOvMnwdm26QuSZxzgzH5IVMGQli6jEW43o0Tdqms7ncdPQHG8tnFt+LNv4mBmvWrMGaNWu8/v6Tn/wEl112GX71q1/xYywp+EjAzBvH01/NZDIhNTWV14H54sXExECv18Nms0GpVMJoNHpNzcBSKqjVaixYsAChoaEwGo0wmUyw2WyYOXOmz+cTlwvAb/oHf2Ww6wJJJTHVISGPOGeG86GcjgsKghgvxsrXjMb15GU6Crhj+czTsX0nM/39/fjPf/6DRx55BKtXr0ZJSQnS09Px2GOP4ZprrvF6ndPphNPp5H+3t7d7PXc8hBCpYKlUKpGXl4eysjIYjUaeuJz95na70dHRgcOHD6OwsJBr98RluVwu9Pb2Qq1WIyUlBUqlkt9D/FwulwvFxcUAgLy8PF4WEyBZueL/DxRpGd6OTTcUgiAI412J8aK9vR2RkZFoa2tDRETEeFeHIAhiVLj33nvx9ttv47bbbqOFJjHtocjHvpmOayOFQoH333+fC3A2mw0JCQkICwvDz3/+cxQWFuKTTz7Bj3/8YxQVFWHZsmWy5Tz11FP42c9+Nui4XFuOtSbP7XajpKQEkZGR0Gg0Hpo7dszlcuHYsWO45JJLEBoaCrfbja1bt0Kj0UCn0/HIm8yHj/nz2Ww26PV6rul0Op3QaDRcyGPl1NXVQRAEaLVaLF68GGFhYdNWyyZlNMYd+eQRBEFMcaazrxlBSJHzP5wOfuJE4PT39wMArr76atx///3Iy8vDo48+iiuuuAJ//vOfvV732GOPoa2tjf9raGjwem4g+exGEpvNxoUIAB7J0Nva2uB2u7Fr1y60t7ejqKgILpcLNpsNhYWFiIyMhMFgQHd3N7Zu3Yqamhq43W5oNBrk5+cjNzcXarUaBoNBNhm7zWZDamoqNBoNEhISUFBQ4NdXbzrhdrtx+vTpES+XhDyCIIgpDgUBGgwt6qcvcpse0zHwDOGd2NhYqFQqzJkzx+N4dna2z+iaGo0GERERHv8mCkajEWFhYcjPz4fJZPJIhs6CqmRkZKC3txcZGRkoKyvj+e4SEhJgMpnQ1taGsLAwVFVVAQAXUpubm6HX62G322WFV4PBgLq6OixZsgQFBQXQ6XSIi4sbr6aYcDDT3ZGGhDyCIAhi2jEZFvUUuXh0kNv0IG03IUatVuP888/H8ePHPY6fOHECqamp41Src0MsfLH/V6vVHknQZ86ciRtuuAGdnZ3IycmBSqWCzWZDd3c37HY7cnNz0dPTgxkzZnAhTqwh9KaZs9vtmDlzJjo7O/n9+vr6eLqG6RwBEwDXfo40JOQRBEEQ047JsKgfjiA6GYRXMRNFKB0tbTcJ6hOXzs5OlJaWorS0FABQW1uL0tJSrql7+OGH8e677+K1115DdXU1/vCHP+Cjjz7CPffcM461Hj2YoOdwOLhWrrGxEeHh4Th+/Dg335w9ezbCw8NhMpngdrvhcrnQ1NTEE6qz1AUul4sLcGItIovWyYQacWTN6YpSqURiYuKIl0vRNYkRhRzaCWLkoXE18kyGaIfTIXLxVE+nQymGJi4HDx5EYWEh//uBBx4AANx+++148803ce211+LPf/4znnvuOdx3332YPXs2Nm3ahKVLl45XlccEcRqFyMhIVFVVITIyElarFUlJSdBoNNzU0mKxoKysDL29vWhsbOQROQ8fPoz4+HjEx8fDZrPBYDDAarXCYDB4aBJZ8BmDwQCLxTKu6SSmIiTkESMKfZwIYuShcTU9GY4gyq5h2qCJvjEw2YTSoTIdBPXJyvLly+EvwPy3v/1tfPvb3x6jGk0MxGkU1Go1VqxYwTVtLPedWPsWGRmJ6upqREZGwu12o7GxEb29vejp6cHu3btx3XXXoaysDJ2dnSgrK8OCBQv4vZiwV19fD7PZDLfbjZSUFJ/1mwj5BScLZK5JjCiTwQSKICYbE3FckUnZxGaymG1O5aBAw9XAT+U2IUYXZip5Lj5uzJTSZDJ5+O25XC5s2bKFp1tgefC0Wi1mzpwJtVoNAIiLi0Nqaio6OzuhVCqxa9cu5ObmIjQ0FDExMejp6cHBgwfR09MzrLqKhUzp847E808lhqTJ+/DDD4d8g5UrVyI0NHTI1xGTk8lgAkWMDWRiOHJMxHFF2sWJDWmDBjPWcxKNEWKs8ZZgnQk/ALymbXC5XCgpKUFcXBxPai4ut6ioCDabDQqFAldccQX/LT8/n5ftdrthNpuhUqkwe/ZsVFVVobCwEGq1GklJSXA6nSgqKkJYWBg+++wz6PV67rPX2NgYUEoFcZJz8fMajUaeB3AsE8xPZIYk5LEkkYGiUChQVVXFkyMSBDF9oAXO1GYqCRFTcUNiIm4MjDdjPSdNpTFCTA7EApAYm80Gs9kM4GsTSYbL5UJZWRkPlGK1Wj20d2VlZcjJyUF2djb6+/u5WSYTApVKJTexrK+vR3NzM/r7+yEIAvLz83lSdbfbDZVKhcLCQlRUVCApKQmNjY0AvjYRtdvtPoUzqammVOBjUT5J7hhgyD55Npst4NwWOp1uyBUiCGJqMJUXOFNRKBgqU0mIoA2J6cFYz0lTaYwQkwOpAMcwGo3chFEqADJ/OY1Gg5SUFMTFxfFzysrK0NbWhqKiIqxYsQJqtRpOpxMWi0XWd44FU7FarUhISODlMI1bW1sbTCYTFixYALfbjdDQUI9z/GnypJo7OYEvIyODfPX+jyH55N1+++1DMr285ZZbJlQiyMkG+bwQk5mp7FcyWfydfEHzy9dMRJ9HYuSRm5NoHBDjyXB9yIZ6HdO2MTNM8fW5ubnQarXIy8tDUlKSh6lmbm4unE4nUlNTUVZWxqNj+rqPWq2G0WiEWq3m93K73WhpaUFkZCTPjQdgUN4+f8IZ8xc0GAwoKSlBd3c3DwATaBnTiSEJeRs3bhySdu5Pf/oTYmNjh1wpYoCpsJAkxh5atIw+U0EooPnla6bKhgSNfXl8tQuNA2I8YZqpoSYFl0a49IdUKLRYLKirq0N9fT230LPb7R5lut1u2O12FBYWoq6uDlqtFkqlEqmpqbL+fqxsvV6PY8eOQa/X87r29fXxXHkAvAZO8VYmgwlydrvdbwJ2glIoTGimsrkbMXqQ6dnoMxXMsGh+mXr84he/wObNm9HU1IR33nlnvKszYfA1J9I4IMYTZmLodrtlA6b4u86XgCMOtgIAfX19HmaOLpcLFRUV0Gq1aGtrQ25uLteSMQGrr68PFRUVmDlzJtra2jBz5kwPTaBer0dRURH3gTOZTKioqEBYWBgqKiqwYMGCQWaVYr86aaAY9hu7t7f2GI5p5nRMvaAQ/CUJ8QJLGjmoQIUCISEhyMzMxNVXX80l+YlIe3s73wkgs1JiqkD+YgQxPbn00kvx6aefYuXKlfjkk0/GuzoThrGcE6fC/Etro5Ej0LYcaQHE7XajpKQEnZ2dXIBjZpRMi9fW1obMzEycOHECTqcTSUlJWLhwIWw2G7q7u+FwOAbF4GC+b2VlZQgNDcW2bdtgMBgQHh6OxMRE5Ofnw+12o6ioCBdddBEcDgcAcEFN+ozS57ZYLHA6nVCpVPxevtqDBYZhz+cLVjZLDzHRGI1xN+w8eSUlJXjjjTewYcMG7Ny5Ezt27MBrr72GN954A5999hkeeOABZGZm4ujRoyNSUYIgAmOqmJ4RoweZ9QXGWLfTud4vKioKSqUSUVFRI1uxSc5YzonDNf+kMTm9GWl/MovFgp6eHrS3t/PE5mJBCwBycnKg0+kwb948qNVq9PX1wWKxwOVy4fjx49BqtaioqIDZbIbdbofVaoXZbEZZWRkiIyOxf/9+dHR0wGw2Q6FQoLOzE9u3b4fdbkdWVhYqKipQUlLCzUK3bt2Kjo4ODxNT6XMbjUaoVCr+/3LtITblFCdZ9wfz55tO5p3DNtdkWrqNGzdyibO9vR133nknli5divXr1+Omm27C/fffj61bt45YhQmCIIhzg0x6A2Os2+lc7/fjH/8YsbGxZHr4f4yHVm245p80JomRRqlUcgGOCTZMm6VWqz2CsIiFKbPZDJfLhZqaGuh0OjgcDuTm5noIYna7HZmZmejq6kJYWBhWrFiBXbt2ISMjA263Gw6HAzExMXC5XNBoNLDb7dBoNKipqcHq1atlNZdMeLNardDr9bK5/piZqdVq5UFjmCYvkPaYiBq80WTYQt6vf/1rfPrppx4qxYiICDz11FNYtWoVfvCDH+CJJ57AqlWrRqSiBEEQxMgw1n5Ik9GEraysDE1NTbjsssvOqZ3Ysy9fvhw7duzw2Qbn2i9TwVd0JBkPwWm4feCt7yfj2CHGHqnQxLRjBoMBdrvd41ylUomEhAQP/zh2PvvbYDAgISEBDocDqampMBqNKC8v59E1DQYD6uvreWqG8vJyrFixAna7HW63G3q9HiqVChkZGR4+fsx3j5mElpSUID8/H0qlEjabDXV1dbyMuLg47N+/H3l5eVCr1dx/T/w8arUaCxYsGPH2myoM21yzra2NJzEUY7fb0d7eDmDAdMTlcg2/dgRBEMSIM9YmvSMZwTBQs7ZzNX/bsGEDtmzZgtjY2EHtNJSy2bM//fTTftuATK1HlkCi4E4UM0lvfU/RP4lAkEbpBAY0bsXFxdi3bx9qa2tRX1+Pnp4eOBwOGAwGj+vEJpRGoxGpqalQq9WIjY2FUqlEUVERqqur8emnn2L//v3YunUruru70dnZidbWVlitVl6GwWCAw+GA0Wjk/ntOpxMtLS0ewV/a2toQGRnJr2PmlDExMXA4HCgtLcWhQ4dQWlrq8Xt+fr5HhM9A0kn4O2eo0UonC8MW8q6++mp8+9vfxvvvvw+z2QyLxYL3338fd955J6655hoAwP79+zFr1qyRqitBEMSUZbL5fw2FkUw5Eeii91wXx77qPJSyWTlPPPHEsNpguP00UYSX8SQQoXmkhKiRaG+5MqZCuhZi9GECkNvtRl1dHRf2jhw5gjNnzuDo0aM4dOgQduzYAYvFgvLyco/rxAnJ+/r6eLkqlQoulwtdXV3o7OyETqfDF198gZCQEDidTlx77bVITEzkY6y7uxtFRUXQarUoKyuDxWJBZGQkampqkJGRgba2NhgMBthsNuTk5PC/gQENY0FBAcLDw5GZmQmVSoW4uDgYDAYPTZtarfbw4/MmoLlcLhw8eBAul4sHmxFHG5Vrv6nmrzdsc81XX30V999/P9atW8dfCJVKhdtvvx0vvPACACArKwuvv/76yNSUIAhiCjPZ/L+Ggi8TNrE5GqvXSJg0BnqeN3M4X3UeimmduJzrr7/eZ13kGG4/kY9XYIyU6fJItLdcGWSCSwQCM9Gsr68H8HWOuxkzZqCrqwuzZs1CaWkpWltbkZaW5iFYif3UDAYDysrKEBMTA0EQoFKpcOzYMbjdbsybNw9NTU1ISkrC2bNncdlll3FhjQlIxcXFCAsLQ3V1NWbPng2Xy4WqqipcdNFFPAUDE8oqKiqg1+tht9t5HZRKJfLz82Gz2XDZZZfBbrf7TLXAtIVy6STEQVmkUUK9td9UY9hCnlarxWuvvYYXX3wRNTU1EAQBM2bMgFar5efk5eWNRB0JgpigDMVfZCr7lozEs421n9xI32+4bSBe2ALwu1D2tuiV3j/QxfFwFufeyh4NwWq4/bR8+XLs2rULy5cvH5F6TFVGSog6l/Ek9tscbhnE9EPsP8eEIaPRiMbGRp53T6vVYtmyZbBYLOjs7ERycjJ0Oh1SUlJky7Tb7TwaJ/PRy8zMRE1NDfLy8mCz2dDY2Mj96KQ58IxGI8xmM3JycqBWq2E2m6HRaLBr1y6sXr2a+/OVlZUhJycHdrsdLpcLtbW1Hr6ETOBi/5UKclKhT05AkwZlaWxsHLKmbtL76gnnwK5du4Sbb75ZWLx4sWA2mwVBEIS3335b+OKLL86l2DGjra1NACC0tbWNd1UIYlLyve99T9DpdML3vve9ET13sjGVn02Ow4cPC9/73veEw4cP82PDbQNxWd7+PxBG4v7nyr/+9S9h3rx5wr/+9a8RLXc4TOV3crzbdqSZaH1Fa6ORg7Wlw+EQzGaz0NfXN2Jlm81m4eTJk8KBAweEkydPCnV1dcKBAweEyspK4YMPPhA2bdok1NTUCIIgCH19fUJVVZXw0UcfCd3d3V7L7Ovr4/Xs6+sT6urqhLq6On785MmTfL0fyPU1NTXChx9+KFRWVvLrzGazcOLECWHfvn3Cvn37hF27dgkffPCB8OWXX3qULS7L3338ta2/unsrI5BnHilGY9wN2ydv06ZNWL16NUJDQ3Ho0CE4nU4AQEdHB37xi1+MiABKEMTEZij+ImPtWzIZfM4mot9UIHWS82MabhuI/abE/+/LV2okfZdGMtjJjh07cOrUKezYsWPcA2ZMZV+u8W7bkWYq9xUxwJkzZwIO7CENEuItaAjzI8vNzYVGowEwYGW3b98+nD17FgA8Imaq1WrMnj0bFRUVg8pi9wDAtWlMW8aCLLKAKnq9HvX19TyYi7gssTaO+ffFxcUhLCyMR+J0u91oaWmB0+nk6Rxyc3ORlJTkEYkz0GAogZznz+fOWxmT3Vfv/7d35vFNXOfe/0kjS5YsW5ZkybLlBRtvLDY2dlkSypJCSNM2adPkTXrbkvTNegtpk7RJ097cLLQhTbP1vW1JS5PQ5KYJLQSSEOglITFLADtgvIDBYJAXJCRblmTJtmTJGp33D9+ZSLJsZCMb25zv58PHaHTmzDPnjEbz0/Oc5xEQQshYdiwrK8PDDz+MNWvWIDExEfX19cjNzUVdXR1uuOGGKZGhZjyqy1MolMnBunXr8NZbb2HNmjWTdk1LNDZOdJjrZLFppGME23jfffdd0paJGsPRri+kjI3pHPo9GaDPRrGDG0u73Q632x1V2B9Xy04ikUCv1w95PRwsy6K2tha9vb2wWq0QiUT82jtCCDIyMmCz2aBQKCCRSMAwDFQqFRobG/k1eMHH8Pl82Lt3L3Jzc5GYmAhgMLFKc3MzXz9Po9GEZLqMZI9CoeBFHveaE6XAl3X3gtfeSSQSPqyzpKQEYrF42DGKFMoZHMIaPN7DhV9GErkTjcPhgEqliunnbsyevDNnzmDp0qVDticlJaG7u/tybKJQKJRh2bZtG0pKSrBt27YR24306/hk8aBF8wv+RHstorHpUt6vhoYG3HDDDcjKysINN9wwZJyDxz98LhoaGnDHHXdgw4YNwz7EB9sYzfhwbTZs2DCu8x68votbY7Vp06Yrfp1NN2ipCcpUI9jDdSnCvUeX8iYFCxTOqycSidDZ2Ym6ujp8/vnnOHXqFCwWC0pKSiCTyQAAXq8Xe/fuRUtLCywWy5BjWCwWJCYmwuVy8RkuHQ4HcnNzeQ9iRkbGsHYxDIM5c+agubkZKpUKJpOJL+EQXM/ParXyXrTgc7VarVAoFGhoaBjieVSpVGhqauLXD3JCjxN/XNkGi8US4gkdzmPHrUHkSjyMNM5ctk7u70ilG0ZDR0dHTPoJZswiLy0tDefOnRuy/fPPP+eLHVIoFEqsBdX69etx4sQJrF+/fsR2wz0INjQ04Ac/+AH+9re/jZtwGumcg98rKSnBfffdhw0bNuCOO+6I2J4TNMuXL58QYcrZdDniZNOmTfjkk09w4cIFfPLJJ0PGOViYhYu0TZs2Yfv27di+fTu/LXw8g+c2GlF633334cYbb0RNTQ02b9487oJ5NLXxxpPJ8mMGhUKJnnBBGPLaXA8EAiHtg4ULlxiFq1EtkUiQnZ0Nh8MBk8kUkqhEJBJBqVTyIonLWsmVHeAghPDFyzs6OiCRSPgC5ZGEa7AYqqyshEQiQWNjI38uaWlpwwq74D44URlcS4+jsbEREokElZWVIeKNO2dO7IZn5hxJMEcb0skJyGAhGQtSU1Nj0k8wYxZ5999/P37605+iuroaAoEAFy9exN///nf8/Oc/x49//ONY2kihjBr6cDN5iNYTxc3Ztm3bRpy7J598EsXFxXjyySeH7eNS68nOnz+P3NzcUa2BidaDyB1juHMeSdRE8jRxgmbfvn0TJhgu1/N13333YdWqVcjMzMSqVauGjHOwMAsXaffddx9uueUW3HLLLSFhj8Od+0heHe56AICUlBSYzWbMnDlz3NdOjlQbbyLvTdNt7Vow9B5Puero7QRMxwFLfcjmcHGiUqkglUpRWFiIWbNmQSaT8UKP8zpxnqvU1FRkZGSAYRg+PNNut2Pv3r3QaDTo6emBQqEAABgMBshkMthsthCRFk6wGMrNzYXX68WcOXMADDqIgMH1fSKRiLcnfB1gXV0djEYjNBoNH+oJfCkg58yZA7fbjYSEBJhMJuh0OohEIn48ggUoF7rJCdfhhOmlsmiGr4EMFpKxYDxCRMdcQuGxxx6D0+nEihUr0N/fj6VLl0IikeDnP/85/6VKubqYTOskaI2o8SOaeQ5OCd7V1YUbb7zxkg/W3JwdOHAAra2tAELnLvi4wz3Yhc/7tm3bsH79ejz55JN8jbJgMTGcMIi0rirYg3ipemfcvsuXL8cdd9wBAPjVr37Fe57C7Th37hzOnz+P7u5u7N69e8i5h7cfb+677z50dXWhpqYGFy9ejGhPMMHzvW/fPtx33334n//5n5D3hqsdFz6XJSUl2LJlyxB7gv9GS/D1wJ3TWIjmfhJpDEpKSoZcKxN5bwoft0hzcTn37YaGBj7RGnd9TxRX2z1+Mn2/Uq4QxmODf831gCITSEgBEFrjjfubkZHBCzGVSgUAiIuL48M6OfFjNpuh0Wjg9/tRW1uLhIQEtLS0YNGiRWhsbER+fj6cTidyc3P52nslJSW8IBvOI2YymZCcnAy73Y6VK1fCZDLx9feEQiFvQ3AZBODLOn0qlQqdnZ1D6tdxItBut2PevHkwGo1D3gMQUiLCarWCZVmYzWZe/IUTXpIhGqZEbb3LTc/Z19dHjh49Sqqrq0lPT8/ldjdq/vSnP5EZM2YQiURC5s+fTw4cOBD1vjRNcGyZTGmgp1uK7eGor68nt99+O7n99tsn7Fyjmefbb7+dxMXFkby8vJC2I6XI515v3bo14txFOu5wfXCvi4uLCQBSXFwc1bnV19eT4uJikpCQQNauXUvWrl1LEhISSHFxMXnxxRf59Pjh+wx3TmvXriVxcXEkLi5uxPHizu3222+/ZAmBsZYZGEtJAu7cL7VPpPnmjnf77bePeL2Ez+tYP7uR9os0H6O5R3Gfr9WrV1/yM8b1XVxcPOIxLvczezn3tkjnP9bx5z4rIpEo5PqeqHtvLK+TqcBEfr9O9mcjh8NBtmzZQl566SXy8ssvk3fffZfY7fYrbVZEYjaW9lZCjr7B//PX/ZMY21ojlg3gShRUVVWRM2fOkA8//JA0NjaS119/nbzzzjvk+eefJ//85z9JVVUVOX36NNm5cycxGAzEYDCQQ4cOEYPBQIxGI+np6SG7du0ibrd7SCmBS5UtMBqN5NChQ3xZhOrqavLPf/6TfPDBB+TQoUMhZRmC++COw5VuMBgMpLm5mVRVVRGv1zts6QSj0ciXYmhra+P748o4HD58mBgMhpBjRVOGIfwYwSUroh2LSH1FYjw+d5ct8q4kW7ZsIXFxceSvf/0rOXXqFPnpT39KEhISQiZ4JCb7jWyqMVm+PCeLHRNBtCIiErF+SArezj30r169etiH7GBhE81D73C12WQyGS++Vq9eTfLy8siLL75I1q5dGyLMonm4vv3224lIJCJ5eXm8iCouLiYymWzYh9jgc+LO+/bbb+fbXs65RRqfYBsvJaCCGYvAuZRoCh638PmOJFwj9c+Jeu7vaM5puPMb7geDSD8KhM9PcJvRfL4u9SNFcJvVq1cPuU4utc9IQvVSP3aMZONYhTD32eOuw+D9o/1x4FLnOh5Mph8jR8NEfq9N5mej1157jeTn55OHHnqIvPDCC+SFF14gP/3pT0lBQQF57bXXRtXX/v37yTe/+U2SlpZGAJAdO3aEvN/T00PWrl1L9Ho9iY+PJ0VFRWTjxo2jOkZMxpJlCTnxXojIM+56iZw/uD1iXTm320127dpFTp8+TXbt2kX27NlDXnrpJfLOO++QDRs2kJ/85Cfk0UcfJfv27SMffvgh2bt3L6muruZFlcFgIG1tbaS6uppUVlaSo0ePEq/XS6qqqnih1NbWxou14PF68803SU9Pz5Aae5xNPT09IdvDiSTcXnjhBbJlyxZy9OjRiG29Xi9ve3i/4WIzmGhq4AW3CT5esFiLtpZepHbB5zsen7tRhWs+8sgjUbd9+eWXR9P1mHj55Zdx991345577gEA/P73v8eePXvw6quv4rnnnhvSnqvJweFyucbdxquJ4BCsK0mkMJ7JEuoSazuCQ9BGE8rGJR8xGAwARhfuNNw8b9iwAe+99x727NmD5557DikpKUPOM1LYXVdXF7Zv3w5gcN3UcLaEH7ehoQFdXV1IT0+HwWDA+vXr0djYiEAggA0bNmBgYABr1qzhwwHXrVsXchwu4QkwfKhZSUkJ3n77bT4M74477sDhw4dhNptx7tw55OXlIScnB6mpqRETUQWHHnJriCLNfaQx5cYofHwAIBAIoLW1FTNnzsSMGTOwfPly/hiRwvE2bNiA7u7uqMJmR7JpuBC5X/3qV0Pme/ny5Thw4AC+8pWvoKWlZUj/4X1xZRGuueaakHPiuFR5guAQWe7aDg79jVRqgVsPSQhBTU0NysvLAYAPmV2+fDn27NmDmTNn8olvuP23bduGX/7yl9BqtcjMzMSvfvUrfkyGC+flzjl8gf1I96yurq6QEF7uM9/V1cUn79m0aRM2b96MAwcO8NdrpHni5vSOO+7A9u3bUVtbi56eHn5967p16/hxH+46CQ/FBkI/P/fddx8OHDiA8+fPY9OmTfjjH/8Y9X3vUiGYsbh/jhT6O1m+JyIxWb5frzS/+93vcPz4ccjl8pDtv/71r1FeXo6777476r76+vowb948/OhHP8J3v/vdIe8//PDDqKysxNtvv40ZM2bg448/xo9//GOkp6fj5ptvvuxziRpbM9DvDNmkUytgsbVAl7AAQGi5ArPZzIdZLlq0CL/5zW+Qn5+PI0eOQKPRwOPx8KGJWVlZfOim3++H3W6Hx+OBzWbD3LlzIRQKUVJSMiTkkYNbI6fT6bB9+3Z0dXVh27ZtWLVqVcjaN7vdjqKiIjidzohhmsEE92k0GjFv3jx+HV4wwWv/VCpVxBITXN09jUYzJLQ0vPRCJCK1CQ/TvFQ/3Hq/4LIO4efAZTKNOaNRhMuXLw/5l5iYSGQyGSkrKyNlZWUkISGBJCUlkRUrVsRMhQ6H1+slDMOQ7du3h2z/yU9+QpYuXRpxn6eeeooAGPJvMv5aNdFMJ+/XSF6RaH69Ha+xiOQVulIM9yv8aAn33gkEAgKA94QN1zZ8+3AhcSPNRbinaOvWreSaa64hCoWCPPLIIxG9UJzXZuvWrcOGmuXl5RGGYUheXl6Ix2Pt2rVEJBIRAEQgEPChicXFxby3J5LXKtqwxZHGONjbtHXrVpKXl8ePV3Cfw4XjReONGo0nKprr5VLhi8N5n4Ybp3AvMOctiuQJDPbuhnsWwz1gt99+Oz/nQqFwWG9k8Ge3vr6eqFQq/jskfGxH40kbrn24J3f16tX8nIePEXdv4cKMLzVPnOc1KSmJD2cejQcv3Bt/qbmNtu9L2R2NF/NyiLWXb6p+r05mT15hYSExm81Dtl+8eJEUFBSMuV9E8OTNmTOHrF+/PmTb/PnzyRNPPBF1v5c9lv4BQuq2hHjxQv41bCXE7+NDNDmvG+cd2rlzJ3nxxRfJXXfdRZ566iny61//mmzcuJH88Y9/JK+99ho5ffr0EC9VVVUVOXDgwJCwx2BvGec9q66uJmfPniVtbW3kzJkzZPPmzaSpqSnE+xXuIQz3hHH9G41GYjAYyPvvv08OHDjAtzl69Ch/jGBPWvjf4LBLbltbWxsf/hns9eM8fqMJ2QwPZ71UeCbHSJ6+8fbkjTlc86WXXiLf+ta3QuKg7XY7ufnmm8mLL74YE+NGwmQyEQDk0KFDIdufffbZYT/o/f39xOl08v8uXLgwaW9k48nliqArweV+WY7l4TTWYxHpwXQivvyDzz1cUEV6WBzp4TR8OycWuXPKy8sjAoGAMAwTEq4V/hAaqc/wUEeu/+FC/iKF2gXbM5JYHEnk3n777UQoFBKRSBQiUMIFIBcK+uKLL44YknmpsMVLzdlI/Y0UajjSOEUiWJRFGsPREo1oHGm/8FDC8P8H28nZnZCQMOwPF5cKiczLyyMikShiqO3tt98eEoK4du1aEh8fT5KSksi8efP4HwTCxzLSPSTae1FwO06oC4XCiD8mBAv/aMQ59zo8nHm0dg13vUWzbTSMdC3F8n4da1E22b9Xh2Myi7ydO3eSgoICcsstt5AHH3yQPPjgg+Q73/kOKSgoIDt37hxzv5FE3v33308qKiqI0WgkgUCAfPbZZ0Qul5ODBw8O20/MnzN7rRHFnffQJnL0zSeJ99AmQlo+DxFTzc3NpLq6mrjdbnLw4EHy3HPPkf/6r/8iv/3tb8nWrVvJ4cOHyfvvv0/27t0bsuaOEy3DiR2v18uHgRqNRl5YVldXk+rqanL69OkhIjM4XDJ8LVswnBDiBObhw4dDhJjBYCA7d+7kjxEeQsnZyonEw4cP87Zxoo5bTxccvhkcdjqcGOO2V1dXkwMHDpAPPvhgiAgeiUhhnpHGeFKJvPT0dHLy5Mkh20+cOEHS0tIuy6ho4ETe4cOHQ7b/5je/IYWFhVH1MZlvZOPJeP8aOh6M55flcA9Al+vJGGnf8LVf40m4NyLYe3WpX9yDPR3hXoKtW7cOeW/r1q0kMzOTyOVyEh8fH+JhkkqlRKVSkUceeYQUFxeT1atXhxwrksgbjXeHax9JTIZ7YUYSPcFCONy7GHzu0XpluQfwa665JmqvaTQigRuTaNc0Xorwcwsew8vtc6x2RTMOwZ68y/GUj/RZGOkeMdr76VgEYPiPM+HvR0owdCkboznuaAn/rMWKWIjmK8Fktm0kJuOzUUNDAxkYGCCEDD40Hz58mGzbto0XLdF6VYYjksjzer1kzZo1BAARiURELBaTt956a8R+Yh4xNozIO/rmk6Ty1UfJ0TefHNzmaCcGg4Fs2rSJPPfcc2TLli3k/fffJ++99x7ZunUr+ec//0kOHjxI2traSE9PD9m+fTvZuHEj2bJlCzl8+PAl15T5/X5+fd+uXbtChEpbWxs5e/Ys+fDDD3nxE75ebjgPXnD/kTxwnE1Hjx4NEaVHjx7l/549e5ZvxyV4OXz4MC/KOHvCPYrctn379pGdO3cOK3aDPYZHjx4llZWVQxK8jDRu4YlbOIEcPuaTSuTJ5XLy6aefDtn+6aefErlcfllGRcNYwjXDmYw3solgqn3xXOoBJ5r9RxsCNByxEpuctyjc4zVaovG8BYuChIQEkpmZGZKc5FIer7i4ON6rFfzAyHlQgr0Kw51X8MOfQqEgAEhmZuYQD+NIwitaD2Okcwj2oEYjYCJ5doLh+owm3DXcCxPNg2o0XrDgeQ0Px4yF54RLYjNSNtFLcbmfl9GeRyzvbWPxbF1uv2vXRvZEXwruuh7OmxjLe+BIBH/WYvn9MtW+s6Y6k/HZSCAQEIlEQsrKyshdd91Ffv/735PKykricDhi0n8kkffCCy+QgoIC8uGHH5L6+nryhz/8gcjlcvLJJ58M2894evL8Va8R466XiL/qtVBP3tE3iL/mHbJ1y7vk/vvvJ6+88gr54IMPyHvvvUf+/ve/kzfeeIN8+umnZOfOncTr9ZLq6mqyYcMG8vOf/5w8++yz5L333iPV1dVDslcS8mWYZnV1NTl58iTZtWsX8Xq9ISZybQ4fPsyLqmiTkUST1ZIQwgusYGHH/eW8dX6/n2/Hicvg8Mpw4cgdZ9euXWT37t3kzTffDDm34RKlRJs4hgs1jeThnPSevB/+8IckKyuLbN26lVy4cIFcuHCBbN26lcyYMYOsWbMmZgaOxIIFC8i///u/h2ybNWsWefzxx6PafzLeyKYbsfhyDhcVo30QieWv2LH8xTvcCzYWIp3b1q1biUqlIlKpNKJ3gfMAhYflDSeYhgsJjCRAVq9eTQQCAcnMzBx23dE111zDr30a6TxiRbhHI5qH6LVrB9ffCYXCiCIveCwv1V80P1IMd/7RjEukOYrFeA5XfmI0fV9ND+eXOtdoxiKSJ3q87Blr27H0czVdB+PFRI7hZHw2OnToEElLSyO33HIL+d73vkdKS0uJQCAgQqGQFBQUkCeeeOKyBF+4yHO73SQuLo589NFHIe3uvvvukO+uS3HZYxkk8oy7XiLnd/yWGHe9NMSzZ9z1EvnTMw+Re++9l/z5z38mVVVV5OTJk+TNN9/k/3JeuObmZt67x4Vtvv/++8RgMPCipLq6mhgMBt4bVllZST788EM+u2a4l8tgMJADBw6Q6urqiCJmJPEYvt4uPFNmuDcsfO0h50k8evQo3z64j0jr8sIFJDc+XB+R2kUiXPSFe+vOnj1Ldu3aFeJtjDQeMblWIjBmkdfX10f+/d//nUgkEiIUColQKCRisZj8+7//O+nt7Y2ZgSPBlVB4/fXXyalTp8hDDz1EEhISSGtra1T7T8Yb2ZUm1g8GsXjYjMarcbl2jqWvsfYbiz4i9cXBPZyrVKoRPUDhXq1I4ZLDHWM4gvsYbu6j8b6NF6PxzkRb+iDah/KRjh3tw3G09kfy7IyW4fqgD+yRudS9Ltp74XQc3/H8EedqYSLHcDI+G5WVlQ3xtO3bt4/k5eWRZ599lixbtozMmDGDdHZ2jqn/cJHHjcHu3btD2t13331k1apVUfcbS5EX7MkL3tb24QvEsON5UrnxMfL8U78gBw4cGCKEenp6yObNm8mnn35Kmpubea9Yc3Mzee2118jHH39MPvjgA1JZWUl27txJ9u3bR15//XWyb98+cvjwYX4bt5YtvGZcdXU1OXToEN93uLcv3CvW1tZGduzYQSorK0l1dTVfs2/Xrl2ksrKSbNq0ibz33nu88OREUiRxFJychbMteN1d+D6RPHTBHsBoE6VwfQ13rHCxGakeYHCtvdOnT08ekcfR29tL6uvrSV1d3YSJu2D+9Kc/kezsbCIWi8n8+fPJ/v37o953om5kU+lLO9ahi7F42LySIVvhBJ/zaMKhhutjPHjxxReJSqWKKgFSsN3Dibyxem5iIYKj2X6lidauWMx7tH3Qh+qxE+vr9nL7HU/G8sNDrI9DiY6r3ZMnlUrJmTNnhmzfuXMn+e53v0sCgQC59dZbyT333BN1nz09PaS2tpbU1tYSAOTll18mtbW1/FqrZcuWkTlz5pDKykpiMBjI5s2bSXx8/Khq5Y23yDPueokceu2X5NBrvyRVm58gh/72JGlqqOVr0nGCw2AwkL/85S/kz3/+M78G7+jRo2Tbtm1k48aNZPPmzfxaM86Dt3fvXt57Fx4WGe7t4sIoDx06RCorK0lVVVVEzx23v8FgIFu3biU7duzg++eSurz//vtk48aNvK3BXrpIhPc9mpDKaF4HE+xJjOZYkersRfJ0trW1kY8//vjKirz6+nrCsmzU7U+ePMkvlJ2MTNSNLJberMns6Yi070Q+2A7XfiI8eaOxcbyFL2fLpYpQj3V7LOwficsJXZzMxOI6HM3nkz5Uj42pfp2NhpHO9Woah8nGlf78TkaRt3TpUvKf//mfQ7YbDAaSmJhICBlMujFjxoyo+6ysrIyYJOXOO+8khBBiNpvJXXfdRdLT00l8fDwpLCwkL730EgkEAlEfI5Yir+3DF8ih135J2j58gRd9zdueIx+88CBp3PJrcvi1X5Hmbc+RnX/+NdmzZw958803ydmzZ4nBYCB//etfyc9+9jOycePGEE/e4cOHyZYtW8j27dtJc3NzSJkDzjvGedM471wkEcSJGa6twWAY4g0LFjycJy94DV9w6Od7773HJ1CJlLRluBDOkYRgpDV+4Z67kQQet19whtHh+o8U8hmcjZQbZ04cNzc3k48++ujKFkMvKyvjC/pFw+LFi1FXV4fc3NzRHGbaMVLx1Wi5VJHYWBFtwdVNmzZh9+7dWLNmTUhh4XAbL+fcw4vuBhf/HYnwY4bbdTkFb8PHh+uvq6sr6kLT+/btQ2trK/bt2zds0eRLMdL1EFxEO1KbSxVKDid8+/r163HixAmsX79+VPZHO+7DXTOx+BxdSWJRzDjaPmjh5LEz1a+z0TDSuV5N4zDZmKjv+6nExo0bsXjxYpw7dw5PPvkkioqK4PP58Morr0ClUgEYLHzd0dERdZ/Lly8HIWTY93U6HTZv3nzZto8XFpsTDecvwGxzwmDqRHFeBs5ecCNPn4IvmutQtvTraG5uRnJyMrxeL1/EWywWQ6FQoLGxEaWlpWhuboZSqYTVakVXVxcSExPBsiy0Wi1/LJVKBavVCr1eH1LAW6fTwWQywefzwWazoaysDFlZWWhvb0dXVxdKS0tHLAYOgC+azrIsWJYFMPgddvr0aSiVSjAMA6vVGlJAPdwGrhC8yWQa0i8AmEwmtLW1wWQyobS0FHv37oVEIuGfKbm/JpMJRqMRLMsiKytryJhbrVa+0Hxubi5ftN1iscDtdqO2tpbXSl6vlx8zALydXAF3jUaDkydPQiaTYWBgAEajMebXyKhEHiEE//mf/wmZTBZVe5/PNyajphuxeOAa7gv3cgRLrO2JtO1yzj34iy4lJQVvvfUWUlJSIvYXPg7BbS4l+i6XSIJ3pHmJ9uFprH1w59/Q0ICUlJSYi6Unn3wS69evx5NPPjmq/aId92jFJoUyHlxN19lI5xrpvSv1fXO1QQX2UObMmYMjR45g3bp1mD17NiQSCfx+P0QiES/EamtrkZ6efoUtHT/0WiUYRghNciJaTFaYrA4ECIFIIEDBTD3cvgEUZKTC7urDNXolrI5OJCYmQqvVoqysDPPnz0dpaSmsViscDgeSkpLw6aefQqfToa2tDd3d3dBqtejs7IRMJoNSqYTD4YBGo4FIJOLFGSdqOIFXW1sLlmWh0+lgtVoBAGazGQD415zgCd6XE1Esy8JkMoFlWV5g9fT0ID8/Hy6XCzKZjO87kg0Mw/DCiusDAC9qOex2O1QqFRoaGpCbmwuDwYCSkhJYrVZexHL2mM1mft/g43DHzc3NjSg05XI5amtr+X6DBS1np8lkQkZGBv+6sbERarUacXFxMb9mBGSknzHCWL58OQQCwagO8M477yAtLW3Uhk0ELpcLCoUCTqcTSUlJV9qcMbFu3Tq89dZbWLNmzaR/MBntA0JwewAj7juacYj1g0qk/mIxL1NpbqNhLONOHyoplMnDdLon0XvL8Ez2Z6O2tjbU19eDYRiUl5fzD9IHDx5ER0fHmCNkxoPLHsu+LuD0zpBNpk4Hqk6ex9lWM1QKOYqy0+Ds80CVlAB/IACDsRP5WakQK1LB6hcgIzOTF1QmkwlerxcikQidnZ3o7e2FwWBAV1cXLzK+9a1vAQBOnjyJgYEBaDQaSCQS3tPGiSe9Xo+6ujr09PSgr68PxcXFIccBwAulYA+b1+uF0+lEWVkZGIYJsQkYnN+Ojg6kp6cjLS0NZrMZGRkZET1r4XCCkTs258nz+Xyoq6uDRqOBXq/nBRjnQeSEGgDeK8g5tLxeLyQSCX8u4Z7J4L8NDQ2Qy+Xo7e3lzy9am3t6ejB37tyYfu5G5cnbt29fTA5KiR1T6Re/0XrQIoVGcoR/QY9mHGL9S32k/mIxL1NpbqNhLONOw5YolPFlNGJnOt2T6L1l6pKdnY3s7Owh27/61a9eAWtGR7CgiEYAREKTnIg4hkGyXAa1Qg6Xpx9e3wA6HS6IGAZJMilEQgZlGXJYZV7ogrxZGo0GtbW10Gq1fHgiwzDIzs5GW1sbvvvd7+LMmTO8R00oFMLhcODUqVMwGo1ITEyEUqlEYWEhGhsbIZPJYDQasXDhQojFYv6c9Ho9TCYTTCYTL7Y4Ied0OqFQKPhxYFkWIpGIF1ENDQ38tvAxCvb6cWKTa8ONbfA2YFDg7d27F7m5uRCLxRCLxSEevmCPHxemyglajUaDEydOQKPR8McMD+nkRKrVakVZWVlI6Cjn/Rtpri0WC/x+/5iuhUsxKpFHmXxMpdCiWD4ghH9BT7ZxmMj1V9OZ6fRQOZWhXo/py2jEznS6J9F7C+VKEBziFyw0RoO1uwezctKgUSZCKBSiKFOHgw1nka9Phb23D36WhV6rhFgsgj5gBOvphsnZz4c8ciGNNpuNFzRHjx6FUqnE8ePHUV1djcTERMydOxdSqRR9fX1oa2sDIQQ5OTkoLi6GUCiEx+NBTU0NsrKy4HK5kJubi/b2dt7O4LDJ4PBKbk0dt83v90MikfACKicnBzU1NSguLuaFI+dlM5lMOH78OAKBADQaDTo7O3mPWfjYcqLPZDJBIpHAYDBg9erVwwptlmV5geZ0OqFSqdDY2Ai/3w+z2TxEHHKMFDoazVxzHkCxWDym62EkRhWuOd2Y7CEJlOGhD50UysQxncL0KKHQeyklHPpsFDvCx3LUnrx+F3DyvZBNLBuAxeaEz+eHsdOO7j4P8jNSYTBZkatPQa/Hh7LCLDCMEABg6hXAm7EEEqmUX0dnsVigVCohkUhQX1+P2tpa9Pb2QiAQoK2tDXq9HkuXLkVeXh7+53/+By6XC263GwsXLkRpaSkA4NSpU/B4PIiLi0NFRQWAwVDH5ORkxMfHQ6vVDvG2hRM+HpzQkkqlaGtrw8qVK0PET3t7O9ra2sAwDEQiEZRKJWQyGS/qgr183No6rVaL7u5ulJSUQCwW85634BBMAHzIpMFgwIoVK2C326HRaGCxWACEJogJn8NotkVKQBMcrurxeGIerimMSS8UCoVCmbbcd999WLNmzZT3ejQ0NGDdunVoaGi40qZMGjjvHBV4FMr4cynRM4T4JEA5I+JbLBvA2QsdkMXHDQq89C8FHjC4do9lA9BJWUicBl5UZGVlobi4GE1NTejv78esWbNQXFyMmTNnQiaTwev1IhAIwGKxoKqqCqmpqZDJZFCpVDhz5gw+/fRTVFZWwufzQa/XQ61Wo66uDr29vejv78cXX3wBp9PJZ5Yc6VwjjYdWq4XBYOCzXwaj0+kglUpRUVGB8vJyPikL1xfDMDCbzTAajXwiFbFYjIqKCl5QcWsMNRoNLwq5f1zWzMbGRuh0OojFYmRlZSErK4u3MdgzyWUDDfYiDnduXJuGhoaQtjqdDhKJBKmpqdFdE6OAhmtSpiR0PcX0hXoWJh/TJUyP3jcoFMqUI70M6G4D/jfwzmJzwusbgNXZA7lMAoOpCwtm5eBQQzNy0zVoMVlhd/VBmSSDxeaEXquEHmagvxtIUINlWVRWVsLpdOKtt97CqlWrUF5eDgBoaWmBTqdDIBAAy7JISUlBIBCASqWCXC6Hy+XitwmFQsTFxeH06dOwWCyw2WwghCA+Ph4nTpzAggUL+FBFn8/HlykYKSyRC9+cO3cubDYb/wzAecFYlg0p5xAeBsmt8eP+z3nMOA+hXC6H2WzmQyq5sgdarRZ+vx9paWno7Ozk1wyG9x9sh9/v59sEh2wOB9eGy7zJiUyuLN1oyn9ECxV5lCkJXU8xfaEP4pTxgt43KBTKlEOaDKhmArZzAACdWgFTpwMA0NPrgcfrw//bsheJcglqz7RjXkEWZmZocPKcEfmZqfD5/NCpFWj48DVoF3wXEDJISEjAqVOnkJKSgvPnz2Px4sW8xyknJ4cXZVyoo0KhgMfjwcyZMzF79mw+7T8AJCcnw+/3Izc3FzqdDmfOnEFhYSHEYjHvIaurq0NbWxsCgQAWLFgAYFAwtbe38yXaMBUAAE5oSURBVOvqxGLxkBILwWv3uMQtIpEoJNNnMJynkoMTae3t7ejt7cXJkyexaNGiIfX1WJaF3W5HSUlJyJrBcILtkEgkIV7EkdbdhYducolpOM8eV+sx1sRkTZ7H44Hdbh9ygo2NjZgzZ87ldj9u0LhzCmXyQT15FMrEQT9vsWeqjyl9NoodMRtLbw9wcjtYvx8WmxMsG4B3YABdjl40nG/HBbMdjh4PFs/LhV6tQu3ZdjCMAG6PD4UzdOh1+yARCyHR5iGteClYlsXAwACOHj2KefPmQalU8t4sTrxwAkggEODs2bPIy8tDR0cHnE4n8vLycPbsWZjNZigUCvT392PRokVwuVzw+/3IyMgAMFgOQSwWQ61Wo7GxESUlJbx4Y1kWx48fx8DAALKzs6HX60PWq3GCirMnXPCFr6kbab1je3s7jh8/DqVSiYSEBJSUlPA2cG25cx+pz9GuqQz3/I1UioELiZ1Ua/K2bduGgoIC3HjjjSgpKUF1dTX/3g9/+MPL7Z5CoVxl0DVCFMrEwXnON23adKVNmTbQMaXEHEkioCnkQzVZNgBnbz9KC7KQkpQIm8uNa4rzUJStR3x8HHTqJCRIxPhqWQG0qiRkpCZDIhZjnoagJCORzxS5cOFCuN1ueDwe+Hw+PtkIMLg2TiQSwWQy4cKFCzh+/DgOHToEl8uFc+fOwePxwGAwoLW1FTNmzIDT6eQ9bBw2mw0+nw9isRhlZWUAgJqaGrjdbrAsi9TUVF7cud1u7N27F263mxdSnMALXt8WvD2YSOviOHQ6HdLT05GVlcUXJP/kk0/4JC46nQ5dXV3w+Xy8/T6fD3v27EF3dzdqa2vh8/mGCD5uTd9wcDYBCPFAAl96/7i5GGtJjZG4bJH3m9/8BsePH0d9fT3eeOMN/N//+3/xzjvvAACu4sSdFAqFQhkGmgBl8jBdkupMJuiYUmINy7IwsSnQqJSQiOPAMEKokmRobLkIAkCvTYbXP4CSvAzo1ArIpBIsr5iFHL0Geo0S8eI4zC/MRo5eA/uJj6GSEIjFYmRnZ0Or1QIA7HY7VCoVLBYLamtr4Xa7UVNTg7/97W+or6/Hv/71L3R1dcHpdCIxMRHd3d3IysrCNddcg9zcXKjVaphMJthsNr6uXGpqKjIyMkJq4LlcLhw5coR/Pzs7G1lZWXzSE6fTyWe1jOQxCxZ8wUJrOPEHAFarFSkpKfx6wIaGBng8HjidTn7tHlcqgROJDQ0NkEgkqKmpgVwux969e9HT04Pa2lreCxdJVEayibOXW8fHtfH5fPzfixcvxvqyuXyRNzAwwKv+iooKHDhwAH/5y1+wfv16CASCyzaQMvHQBzAKhTKeUE/H5IF6zmMPHVNKrLFYLPASIayMbjCRinZQ7JXkZaB81gzMy89CxawZ2PvFKWgUicjQDq7xMpisMHU6IGIY6NQKAIBOmQiJ+Sj0KYOvuTDC0tJSSCQS+Hw+tLe348yZMzh37hxkMhkuXLiAjIwMpKSkIDU1FWfPnuU9bqmpqWAYBlarFR0dHbBarWhoaIDZbAYhJKSAeGJiIk6cOAGdTgebzRaS5VKtVkMmk/GetqNHj/J198K9Ztxrbl2bxWIZVvwBCBGAFosFCoUCUqkUJSUlvCcvIyMDGRkZvEgsKiqCyWTCzTffjN7eXuTm5sJgMIQUcr+UR3E4D2R4pk3ub6y5bJGn1WpDxIBarcYnn3yC06dPU5EwRaEPYBQKZTyhng7KdIf+WEqJJbxAKFkGMGIwjJAveJ6lU6MgMxXvVdaA9bN4r/IYej39aGwxweroQafDBT/LwtrdAwCD+6qkYFoq4fP0obm5GSqVik980tjYyNfR40oPLFu2DBkZGVi2bBlKSkqQlJSErq4u5OXl4fDhwzAYDNBoNEhPT0cgEIBSqURaWhovuIxGI1iWRX9/P1auXMlnmdTr9bBarTAajTAajejs7AQAdHZ2YmBggH8d7jULDoOMJnQzXGzl5uZi1apVfJIWLmFLcKmEpqYmZGVlobm5GWVlZUhMTMSKFSt4T2N4KQWfz4djx45BpVJFtCmS4CspKQn5G2suW+T993//95DaDmKxGO+++y72799/ud1TrgD0AYxCoYwn1NNBmU5EEnT0x1JKLOEFgkQG6OaGvGexOXGooRlyiRg7D9VDlZSAPUdOoO2iFYFAANrkJKSpk6FTK8CyAb5+HjwOWOs+xoDPx9eUs1gsSExMhNvthlAohMvlQnx8PCwWC8RiMcrLy8EwDHp7e7F8+XIAQHx8PJqamgAMrjtLTk6Gw+GAWCzmxVBGRgays7OxcuVKeDwe5OTk8MfkvGgSiQQKhQImkwlarRbZ2dn8Or5wr1lwGGSk9WwajSZkfWH4WIYLOmCot7CkpARyuZz39un1etjtdigUCjQ0NAwJ2WxoaEBvby8aGxv58NTh1uyFr8cTi8VIT08f3UURBZcl8o4fP4733nsP27dvj/hr1bXXXns53VOuEPQBjEKhjBbquaBcrUQSdPTHUsq4oZ0NiOL5lzq1AtcW56PP68M3l8zDeWMnJCIRjp5uw2mDEafbzIBg0IPHJW4xdTpg6nRAE+eBTuQKEU/x8fHIzc3lBVp2djZSUlIwc+ZMXpjJ5XJcuHAB8+fPx4ULF5CYmAir1YqkpCTEx8dDq9VCo9FAJBqs1KbX65GVlcULP6vVygsgTnSVl5dDIpHAbDbD7/fz4gcYWoA8UkHyYKxWK19PL1ra29tx7NgxPkQ0vIg6t8bO6XRGDNnkROGcOXOGhJICQ0XkRDBmkff73/8eFRUVeOaZZ/DUU0+htLQUxcXFqKmpiaV9FAqFQpkCTAfPBRWqlLEQSdBF+2MpveYoo4aJA9LmffmSEUIuj8cd1y8CAMwryIJYEoeUxAQYu5y4aHWg7mw72s02aJITIRHHAQDcHi9srj6UpQqRJfX8b18Mvy7N6XRi9uzZqKiowK233sqv1wMGS0P09/fj2LFjyM7OhlQqBTCYcFEoFPLrzACEJBs5d+4c9u3bB5/PNyQJCcuyfCFyLiFKMMHFy30+H58cZrhsmsHr/cLX8gW/bm9vR3t7OywWC3xBXs3g4wavsSsrK4NMJhuSHIYThVarFW1tbXxfXMZOrh9OAHJJV8ZT9I1K5L3xxhs4fvw4vF4vNmzYgN/+9rew2Wzo7OxEW1sbbr75Zixfvhyff/75eNlLoVAolEnIdPBcTAehSpl4Lif6hV5zlDGhKQTEcgAAywbAsgFIxCIIBAKYbQ4IBUBCQjxaL1rReN6E+tPt+Nfhepg6HdBrldCpFWi+0AlFghQMIwRj+gJwDWZ35MRVf38/urq6UFZWBqlUCkIIzGYzfD4fX/9v5syZ0Ov1EAgEkMvlaG9v5xOUSKVS1NfXQyAQQKfTwWQy4YMPPkBXVxeampqQlpY2JAmJQqFAb28vysrKhoRSsiwLh8PBh0sOJwaBL8MhrVZrxLV8wa+59YAajQZSqRQqlSpEBLIsC5FIxAtGn8+HlpYWvP322+ju7o4oMoHBbKUsy/IZOznhCYA/X060jpfQG1Ux9FmzZuHcuXMAgEAggFtuuQWLFy/G/PnzUVpaiuTkZLz66qt48803UVVVNS4GxxJa8JNCoVAoHFO9iDXl8rgS8z8Zrzn6bBQ7xnUsrWfBGg6i5nQr3F4vet1e5KSloOqUAfJ4CfYcPolTLSb0eX1IlEqw8itz8fUlxcjSqeHz+WG02iGJi0P5rBlgGCHAiMHm34DaphbesyWRSLBq1Sro9Xq0t7fDarXCbDbD5XLBZrPhhhtuQHV1NcRiMTweD2bMmIG+vj6sXLkSlZWV/Dq7iooKPmPn7t278bWvfY1P9pKfn4+DBw8iPz8fUqk0ZI1deDFxkUgEhmGgUqn44upcSCdHcMFyACEFxznvG4Ah4Z6cIAQAqVSKsrKykMLrwKA4a2pq4rNh5uTk4Pvf//4QQcodkztW+DlxYrGpqQl5eXlITExEYmJizK+VUXnyTp8+jZ6eHhw+fBhxcXEQCoX45z//iW984xtQq9XIzs7G1q1bUVtbi507d6KlpSUmRlIoFAqFMt5czeuRadjglfGqXc3XHOUyUefB0svCO+CHwWhFojQeHp8f182fhXRNMpbPz0eiXAoJw0AuE8MfYKFTK+Du9+JkiwkA+GQsx061wudxw3T4n/D0OKHVapGWloakpCReBNlsNiiVSsyZMwdqtRo/+tGPYDAYkJ6eDpfLBUIIOjo6YLFYYLFYsHLlSigUCn6Nmk6ng0KhwI033oiuri4EAgH09vbigw8+gMfjQVNTExiGCRFMXIimxWKBSCSCXq+HTqfDiRMn4PF4hqx3Cw/j5Dx6FosFbW1t/Dav18sXXrfZbGAYBkqlEhKJBCKRCB6PByaTKSSBC+eJW7FiBZYsWYLS0lLcdtttw9bxE4vFfIIXACFrEBmG4b2iw3kjY8Go1+TFx8fjK1/5Cq699lrMmzcPVVVV6OnpQUNDA5577jkUFBRgYGAAd911F2bOnEl/BaJQKBQKZZJDwwYvP+SYCmXKhCIUQleyAtk6NVaUDxY+LyvMQlaaGpK4OPR5B5CqTIJWnQQRI8LKBbOh1yjR3N6J3PQUSCUS6LVKNJwzotftQcM5I+DtA2OuhT5Nh/T0dH69GVdbrqurC1arFbNmzYLdbkdiYiKkUikkEgnS09Nx8eJF9Pf3o7a2li+T0NjYCJvNhnfffZcvQJ6UlASNRgO3242bb74Z2dnZKCkpGSJ2uLWBSqWSF0ecd40Lh+TWuLndbuzduxdyuXxE4cT1GVz3DgBkMhnKy8tDvG7BCVw48SaVSrFkyRLcfPPN/FrES2EymWAwGFBTUwOWZaHRaNDd3c0nrBmvcE3RWHd86aWXsHz5chgMBjzwwAOYN28esrKycPz4caSnp/MxridPnoylvRQKhUKhTAiTMZRuvOCEzVReUxmJ0cwh51UbK5xQBnBZ/VAo0cKk5CFrZj7gtods16kVSFEmIT87FWarBGkqBazdPdh5qA7KBBl6PT5UzJoBAFArEsAGAijJyxhcn8c4wZproUothdPp5MsBcF6z+vp6GI1GAMD58+cxc+ZMZGVlwe1245vf/CY+//xzDAwM4NixYxCJRJDL5di/fz8IIejv74dGo4HNZoPZbEZycjLsdjv0ej2/5g1AyDFLSkr4pChchCBXkgEA3G43HA4HWJaFTCaDy+XiSz1wBNen45KnmEwmzJo1K6R+XXhbzobhBCMnMoP3C3+fCwnlyi/U1NSAEIL8/Hx88cUX0Ov1aGhoQEFBwWin/5KMWeSVlpaipqYGDzzwABYtWgRuaZ9IJMIbb7wBAHz1eMrVxdX0YDTR0LGlUCaOq+mhPZLAmQ73m4mcw+kqlCmTGIEASJ8PnNsLYDAJi8XmhE6twMI5uUhTKVB7xoDq0xdgtHYjQ6dEulqJeQWZYNkAGs4ZoZDHI009KAJ1agX0WiVY1gVLTytyy64LET8+nw9msxmEEJw5cwatra0ghEAsFmPOnDmw2+1YtmwZXyLBZDKhu7sbAoEAbrcbAJCSkgKfz4ezZ8+CEIKLFy9CpVLhk08+QU5ODuLi4vhjer1ePttlbW0tbDYbioqKkJubC71eD5ZlUVtbC6VSyQu9U6dOobi4OMTLxgm54NcMw8Dv9/PH4kJKgwneL3itH1fkvba2Fh6Ph+8jWEgCXyZ6EYlEvFczEAjwY3Lbbbfxawv7+/tje23gMkQeAMycOROffPIJOjo6UFVVBZ/Ph0WLFiEzMzNW9lGmIFfTg9FEQ8eWQpk4rvaH9ulwv5nIObxcTyCFMiaSMwF1HmA7B4vNCbfHi4YuJ0ryMv63Hl4PfF4v2IEBxAlUgBAQMwze2VOFzFQlAoEAv1av9kw7ygoH15Cxpnq0C+PBqLJ5LxVX687n82FgYADAoBbQaDQwm81obGzE3LlzkZWVBb/fj+bmZtjtdhBCeGEkFAohl8vhcDjgcDgAAK2trfzavnnz5kGn04FlWTQ0NPCevIGBAdjtdggEAt7rp9FooNVqAQw6n7Zs2QKGYVBZWYkbb7xxxGHTaDQh/Qdn3eT+HywMg9tw6/wUCgVYlkVaWhoA8NkyueygXHIX7m9hYSHOnDkDlUoF4MtafADGReSNKrvmdINmkBofpsOvv5MVOraUqwF6nU8O6DxcnVwNz0bPPfcctm/fjqamJkilUlxzzTV4/vnnUVhYyLchhOCZZ57Bpk2b4HA4sHDhQvzpT3/CnDlzoj7OhI1lgAXO7Abr6kTtmXYo5PFwuNxos9jQ1GJGq6kTDnc/ri3JhZhhcN7Uhew0FRJkUlw3fxZsPX0Y8PlBBATZuhQwjBBt5i6Y7T0QZMxHxsw5ISGQLMuipaUFn3/+ObKyssCyLD766CMolUrMnTsXKpUKn332GZKSknDy5ElUVFQgPT0dQqEQZWVlYFkWe/bsgcvlwsKFC6HT6XD+/HmsXLkSUqkULMuipqYGXq8X2dmDInP37t3o7e1FXFwcXC4XZsyYAblcjpSUFEgkEuj1eng8HlRWVmLFihWXXC/HFSvniplbLBaoVCqcOHECGo0GWVlZQzJiAl+GZQ7n2VMoFJDJZCECkeuDy7rZ0NAAuVwOl2uwEL1er4fL5YJKpbpy2TUplGig2cLGDzq2lKsBmgRkckDvN5Tpyv79+7F27VpUVVXhk08+gd/vx/XXX4++vj6+ze9+9zu8/PLL+OMf/4ijR49Cp9Nh1apV6OnpuYKWD4OQAWZeByY+AWWFWZDFS6BJTgQjFECrkiMuTgRf/wDOX7DCaHUhKUEKry+A4pkZsPf0wdPvRXefG4xQyNfdS1MnQ5Mkw7nqveh1dIXUg2MYBt3d3cjMzITdbsc//vEPxMXFwW63g2EYHDt2DCqVCk1NTVCpVJDJZLjhhhsgFovBsiysVit6enpACIHL5YLb7UZRUREaGhrQ3t7OJ1JpamriX3PZOru6unDhwgV88cUXMJvNCAQC/Ho9q9WK1atXRxR44YXQgzNncmGZjY2NIRk3OUwmE9ra2mA2m0PGIFzwlZSUQCaTDVu7T6fTwWq1oqSkBL29vfB6vTAajbBYLOjo6IjlFQGAevKm/a9VFAqFMtWgHqTxhY4vZSSuxmcjq9UKrVaL/fv3Y+nSpSCEID09HQ899BB+8YtfABgM4UtNTcXzzz+P+++/P6p+J3wsezqAs/8DkEGhZup0wOfzY+unR1F3th2JcikytUoIhALolIn4amkROpwuOLr7kJehhcFshTpJjlRVEiTiOBw/2wajxYasjEzccOfDsPaxvOeK85p5vV7YbDacOnUKN998M1JTU9HV1QWHw4H4+HgcPXoUBQUFEIlEuHjxInQ6HZ/4pLOzk8+q+c4778BgMGD58uVQqVTw+/0wmUy8EKuoqIBer0dLSwtOnjwJQggSEhJgsViQk5PDt+M8f+EEe+70ev2Q1wDg8/n4EE4ukydXyP3YsWMYGBiARCLBvHnz+GLrwQXdg/sChq7jC/cetre3o7OzE2VlZXC5XNBoNNSTR6FQKJTpy9XgQRptuv1YpuenntKxQUskTF+cTicA8GulWlpaYLFYcP311/NtJBIJli1bhsOHDw/bj9frhcvlCvk3oSSmApkL+ZcMI4RYLMI3vjoPqepkpKmS0Ov2we7wYP/xM3jl3Y9x4FgTmi904PP6s6hqOA+T1Q5n3+D6sOQEKSTiOGgSRbAc2gLvxTO8R89utyM/Px8qlQpxcXFYv349lixZgsTERCxevBg33ngj8vLyMHfuXHg8Hhw6dAgtLS1ISUmBTqeDy+XC7NmzwTAMtm3bhuPHj8NiseDIkSNwu90YGBiAy+XiBQ8nmHJycvDtb38bq1atwqlTpzB79mw4nU4UFRVBJBJBpVLxNfOC/2o0Gl5cAeDr3gV73RiGQVpaWkipBm4NXkZGBlwuF8xmM+rr6/mC6FyYJ+e1DIbzAHKhnuHeQ7FYzBdq7+rqivnlcFmJVygUCoVCoYye0SY1iWUSlKs9ocxYmQ6JaChDIYTgkUcewZIlSzB37lwAX5YLSE1NDWmbmpqKtra2Yft67rnn8Mwzz4yfsdGgLQLcNlhOVcPrG4CIYeAbYPHtZaX44lQL4sQDqD3dDovNCU1yIpTyBBTOSIPT5UaCVIw4oQhaZSJ06sH6cRJxHPwsC5+3H92n96MkWQh2QMOXBRAKhcjPz4fT6YRcLg/JeqlQKKDRaFBdXY3Ozk4MDAygqqoKVqsViYmJMBgMUCqVcLlcSEhIQE5ODsrLy9Hc3IxAIICkpCR4vV4sWrQIDMOgp6cHtbW1mDNnDiwWC7RaLQ4ePIjrr78eZ8+eRXJyMhoaGvh1byqViv9rtVpDMmVywiuYYGEXnDSFYRiUl5fzCWbS0tJCPHm1tbWQyWRobGxERUUFWJZFe3s7Tpw4wSdnaW9vh8VigVKp5G0JPoZMJov5pUBFHoVCoVAoE8xohVYshRnNAjk2Yi2Oadjs5IDzzn7++edD3hMIBCGvCSFDtgXzy1/+Eo888gj/2uVyXZmM81mLoOvtgqX9PHRqBXRqBerOtmNJaT4az5ug0ySjw+5CUXYaNKoEzMnR41TbRbAgIELAOzAAa3cPstLU/1tq4QJEDINUVRKszccBYwv8unI+qyQAPuMlJ1zkcjmampqgVCqxbNky7Nu3j19fp1AoIJVKsXTpUnz22WcQCoXIzc2FWCyG1WqF1+uFWCyGRCLhM1UCwJkzZ/g+1Go1jEYjysrK0NbWhqSkJNhsNsybNw9isZjPmpmcnIyuri6UlpbytlosFr7WX3CZhGDRxREccpmTk4OcnBz+PW6/kpISNDQ0oKioCMeOHYNarUZDQwP6+/shEonAMAyMRiNYluULsYcfO7zGXiygIo9CoVAolAlmtEKLCrMrT6zngHoGrzwPPvggPvzwQxw4cCCkrnNwIexgIdPZ2TnEuxeMRCKBRCIZP4OjRciAKVgFPdsPDLhh6nTAz7LQpyih1yjR3euGWCREd48H7VYbWi/asKg4Fz19/VDIpaj84jQUyTLo1UpokhMBAJrkRIgYBiwbgEbkQ+PxDzDnutthDySErEvjBBFX7JxlWXi9XqxevRpGoxFmsxnLly9HXl4eamtrER8fD5/Ph4SEBHi9Xr7eXSAQwOzZs5GYmAiWZeH3+6HVatHZ2YlAIAAAyMvLg0KhQGlpKUwmE6RSKfR6PcRiMT8UXHg1FyIJDM6vz+dDZ2cnNBpNSObL4AQtZrMZRqMRGo1mSEkFDm5frVaLU6dOwe12IxAIoKSkBFarlReX3LXEZe0MX683HlCRR6FQKBQKhTLB0LDZKwchBA8++CB27NiBffv2hXhnACAnJwc6nQ6ffPIJysrKAAwm5di/fz+ef/75K2Hy6BHLgJnXAWd285sYRoisNDW+u7wClcebUHOmFZ0mJ5y9Hni8Ptx+/QK0XOxC3dl22Ht6IBFLcNOSUqRrkyGOE4FhhHB7vKisaUKuPgWV/3gV2SWLUF8nx4rrroPdbucFslqthsViAcuy6O/vh9vthtfrRUVFBaRSKRiGQUlJCT7++GOUlpZCJBLB4XCgoKAAn3/+OXw+H4RCIR/+abFYUFpaCoZh+LVvNpuNF1GnT59Gbm5uSFhmMGazGVarFSqVash6OGBwPWVdXR0uXrwItVrNi3WtVguxWDysdy/YK6jVatHV1YWFCxdCKpXy15XJZEJKSgrEYnFIuQW5XA6z2cxfY7GGijwKhUKZYGiY1tSFzh0lVlDv7JVj7dq1eOedd/DBBx8gMTGRX4PHhREKBAI89NBD2LBhA/Lz85Gfn48NGzZAJpPh3/7t366w9aNArgGyFkPvPwiGEfLr7HIyNLD39CFVnQi7oxd9Xi98hEX92QuYkZECbUoSLtpdkEkEIEKCDK0KbGAwY6ejx41cvQbNxg5I4hhsfffvWLhwARrrFahYtATAoKgxm818eGIgEEBbWxuysrLQ3NwMkWhQfuh0OiQnJ+PEiRMQiUTIzc1Fc3MzZsyYgYsXL/Lihys/UFtbi4SEBJw+fRpJSUmwWq0YGBhAd3c3GIZBVVUVrrnmGhw8eBAikQilpaV8sXGWZcGybEiyleDQTM6Tx4WKFhcXo7GxETqdDna7PWRYw72WXFkGAMjPz0djYyMfZsodVyQS8SGtPp8PHo8HZrMZubm52LNnDxYsWBDz6acij0KhUCYYGqY1ebmUiKNzR6FMfV599VUAwPLly0O2b968GXfddRcA4LHHHoPH48GPf/xjvhj6xx9/jMTExAm29jLRFIBx26BnmvhNnOAzd3XjuysrcK7dAlOnEzKpGL7+ATi63Vg2Lx9sIICy/OzB4ugWG+zOXszJ0aO7z4NZWWmoPH4ayYlSNDWexPLiGUBvAVipGj6fD4FAAHa7HXl5eWhubg7xlprNZgiFQnR2dsJkMuHIkSNQq9Ww2+1ITk6GUChEUVER7HY775WzWCxQKBQ4dOgQuru7cfz4cWRlZcFut6OoqAhyuRy5ubk4ePAgOjs7//c8GV48+Xw+2Gw2/r4eLvC4/3PCjEvY0tjYCJVKxbdpb2/nk69woZZZWVkAEJJwhgvvtFgs8Pv9kEgk/HpDLpNmSkoKzp07h97eXnz22Wcxn3oq8igUCmWCoWFak5dLibipOnfUA0mhfEk0JaIFAgGefvppPP300+Nv0HiTuRBsbxcsbc3QqRVgGCH0WiUAgA0EsGBWLi502HC69SIMpk64+/vh8w3g9hsWIUunBgC0mKzotLugVsiRqk6C1dEDZVICbN19WDA3B3ZbJ/Rn/gULkwmzO54XWn19fZg3bx7MZjMEAgE0Gg1cLhefobK1tRXx8fFITk6GQqGA1+uFVCpFWloaVCoVvvjiC2g0Gmg0GnzxxRfo6+vDyZMnIRQK+SQuRqMRS5YsQUZGBkQiEZKSkvhjcXChmhaLBWazGf39/WhvbwcA+P1+sCwLvV6Pzs5OeDweAIOlNbi1dVxoZn19PQYGBviQz+A1dQzDoKysLMTDx3nxOBHJlXOwWq1QKgfnwGazITk5OebTTkUehUKhTDA0TGvycikRF2nupoKAmkgP5FQYDwrlqkIohCVhFrykBRabE3qtkl+fx2Ht7oEqSQ6byw3vgB+yBDEsXU5YugZLLdhcvUiSxwMCoLm9E3FxQhguWJGjV0MujR8MBSUB6Lwt8PniYRXEQ6FUQ6fT8clQuNIG3GuGYRAXF4fi4mLI5XLI5XJ88cUXIIRAJBIhPz8fJ0+eREpKCnp7e3Hq1Ck4HA7ExcUhJSUFK1euhNvtBsuyKCgoQHd3N9LT0/nkJsEZPzmRxtXNs9lsUKvVYFkWLpcLGRkZMJlM8Hg8EIlE0Ov10Ov1Q7Jvzps3D52dnVCr1WhrawPLsrwnLxyTyQSj0cgn9eHCggkhIaUZ9Ho9enp6Yj7tVORRKBQKhfK/jEWAT4UQzon0QMZiPKhQpFBiiy4zB5aBFdB11wD40pPJsgFYbE4Uz8yAUChEQZYOvb0eiAQMGs61w+cPwOcbQFlBNuIYEXRKBUiA4KyxAxk6JeIlEn6tH4et/SwKk1XoFSmHCKWysjK+DILP50NhYSHi4uKwYsUKWCwW2O12HD9+HO3t7UhMTATDMBAIBEhLS0N1dTUSEhKQn5+PefPmYcGCBWAYBu3t7bBarZg9ezaamppQUlICsVgMk8kEr9cLk8nEr+trb28HIYQvns6y7JAMl1zbSNkvxWIxKioqItbZA0LX6305xl+GcXIZWIP7zcrKgsPhuOw5DkcY8x4pFAqFMqE0NDTwtZ4mU19XC/fddx/WrFkzqUM4OfE6EYIpFuPBCcVNmzbF0DIK5eqFYRjo84vB5CwJ2W6xOeH1DcDe04eK2TPgHfAjOz0FAqEAgQBBb58HYpEAzl4PVi6YDbFYBAgEyMvQQi6Nh1qRAO/AACw2J1g2gNoz7ZDHi+Gyd0HrrAds54fYYbPZ4Ha7+aLoK1euhN1uR1ZWFq6//nqUl5fz3reioiKkp6fD4/GgsLAQ3d3dUCgUiI+PB8MwqK2thdFohN/vR1NTExQKBerq6tDS0gKfz8cneQkWXlztutTUVGRlZSE3N5cvTt7T04OkpCQ0NDTA7XajtraWT6xisVj4bTqdDtnZ2Xz2T67sgk6ng0Qi4UNFMzIywDAMFAoFnE7nkCyd3H4dHR0xn3Mq8igUCmWKE8sHYvpwPXomUkBNBWIxHlNBOFMoU5KUPEA7m3+pUysgEcdBp1aAZQNQJEgBAcCSwVp0CVIJTrd1wNhpw8fVJ6FKTEB3jxsWmxPmLgfMXd1wuNzQqRWw2JxQyOPR2++DTq2Af8AHy7GPgI7GEBNKSkogl8tRWloKvV7PJySxWCzIysrCDTfcgK9//esoLy+Hw+GA0WhEYWEhPB4PGIZBW1sbkpOT0d7eDo/HA4FAwGfn3LVrF7q7u9HQ0ACz2cwfUyAQ8GvkgMFyBxKJhA/LBAZ/5MzNzUVvby9KSkrgcDjg8Xh4z6NGo4HD4UBfXx9qampCxB9nP+e1tFqt8Pv9/GuZTMYXTXe73bBYLDCZTDAYDKipqUFKSkrMp5qGa1IoFMoUJ5aheFM1sQhlenG1rVul4amUCSXjK4DHAfSYQ5KwtJtt+Ly+GbbuPvj9fni8A0iQSMCyBO0WBxgRg701p+AfYHH+QgcIKwAgQEXRYOZMlg1AEheHkrwUWGxOiBhmMJTzwhcABGBTCvkQyIqKCrAsi5aWFpjNZqjVanR0dMDn8/Fr3GpqamAymWC32+FyueBwONDV1cUXRee8dFzikjfffBMqlQpmsxlLly7lwyH9fj/sdjtUKlXI3/LycgDgvWlyuRwGgwErVqyA1WqFRqOB0WhEXV0dCCEoKyuDTqfDsWPHYLfbeRGn0+n4PliWHRLuyWGxWCCXy9Hc3IyVK1fy4akqlYrPuBlLqCePQqGMChrON/mIpSeJeqWuLsbz80zvFdFDPeiUCUUoBHKXA2I5v4lbm5eTnoKiHB3StErotckQiIAkuRSKJCkEEMDrHYDRakNTWyck8QycPR70ewew58hJuPu9YBghrN098LMsGEYIhhGCZQMw1fwPTPX7Q8ImLRYLamtrceLECRw5cgRtbW2orKyEyWTiQyOdTicEAgF8Ph/0ej2fldPn8/EhkImJiTh37hwKCgrQ0tKCb3/728jJyeFDKbu6ujBnzhxIJBKUlpZCIpGgt7cXu3fvxrlz53Ds2DH4fD709vbyde68Xi8YhoFUKoXP58PZs2f5sggZGRnIy8vj1/QBg2GoXq+XD+/kPHgMw/CePgD8MbgxKCoqQnd3N59pM6bTHPMeKRTKtIY+jFCmGrEQG9NVsIzn55neK6KHhqdSJpy4eKDw64ByBoDBtXnKJBmS5DLcvHQ+7rzxWpQWZkOVJIdCJoMiIR7OHjfOtVtQ23QBSQliGDscyNAqsftQPbp7+tBs7IROrRgSAlpzuhVnWs04uvc9XGysgs/ng8/nA8uy0Gq1SElJwcKFC+H1epGRkcEXJheJRFAqlcjLy4NKpUJCQgLmzZsHp9OJ06dPY+fOnZBKpYiLi4NGo0F/fz+++tWvoqmpCS0tLdi9ezdaWlpgNBpx4sQJaDQaPsNmTU0Nenp6UFU1aI/dbudDNJOTk3lhOTAwgLS0NBQUFIRkxMzNzeWFHefFczgcfI084Ms1d9y5AIM/pMpkMrAsC6PRiLNnzyIxMRGNjY3DzdSYoeGalKsaGiIzeqZrOB+9FiYH4zEPscj2OBUyaI6F8fw8T9d7xXhwtYWnUiYJEjkwcwXQY4FOcgSWCy3I1Wt575vB2AWZWALjgAMqUQJYth8XupyYm5MOk82Fx7//dRw/1w6NOgnnjR2QxovRbrYhK00NnVoBU6cDJqsDpg4HDBetkEhEqD39DkqtXbDOXYSUlBRkZWUhKysLZrMZCxcuhMFggFKphNVqBcMw8Pv9aGlpQVJSEpKTk9Hb24u8vDw4HA7Ex8fD5XIhLi4OCQkJkMlkIISgo6MD7e3tCAQCsNlsSEpKgtfrRUNDA3w+Hzo7O5GVlQWPx4PvfOc7aG5uRklJCSwWCy5evAiPx4O+vj709fWho6MDMpkMK1as4MNIuTBQt9uNjo4OzJo1C52dnUhLS+Nr5wFfllDgPHterxdWqxV6vZ6v0Tdr1iw+HDXWTFmRN2PGDLS1tYVs+8UvfoHf/va3V8giylRkuj64jSfT9WGEXguTg/GYh1iIjekqWMbz8zxd7xUUyrQjUQdm7reh1zUDphrA34+Gc0boUhJx6vxFXPeVIsgkElzsdIAICFgAX5mTjS/OtKAwU4emC2YoExJwuL4ZF7scmF84A2wggMZzJgRIACqFHPlZqbA5ehBIkqLmwB4ok1Uh5QtUKhUcDgdmzZrFr2nz+Xxwu93weDzo7u6GUChEfn4++vv7UVpaisbGRgiFQuTk5KClpQUZGRmoqqqCVqsFAKSmpvLFzAFAo9Ggrq6Of58QAqfTyRcw9/l88Hq9qKmpwcqVK9Ha2gq32w2FQoHTp0/zIo9lWVgsFthsNmi1WthsNrAsi87OTlRUVIBhGL4NF84Zvm5Pp9Ohs7MTOp0OZ8+ehVqtHjovl8mUFXkAsH79etx77738a7lcPkJrCmUo0/XBjTJ66LUwORjtPETj+YuF2KCChUKhTGsEAkBTMBi+aa5HyUAADc3tuP+WFbD39EGTnAiWDcDe04eZmVq0mrogFg3g0IlmJMri0d5hg7PHjcbzZqjkCThpuAhJHINUdRKkYjEUcilUSQk4droFaaokGGr2QlPUB0IIMjIyIJPJIBKJYDQa+ayXWVlZWLJkCRoaGpCUlASZTAapVIrMzExIJBJkZWVBLpfD5XLxhdadTiccDgfuv/9+iMVifh0dwzAwmUwghIAQArvdDpZl+SLoRqMRAoEAfX19SE1NhdFoxA033IDZs2fjwIEDiIuLw7Fjx1BWVsbbk5mZyZdK6OzshEql4o9nsVigVCrhdDr547Msi/r6erAsC7FYDIVCge3bt0On0+HChQsxn9IpLfISExNDstZQKKOFPrhROOi1MDkY7TxQDyxlukJDyClXBJEYyPwKxCn5qEg5BjgvQCcWofZMO9hAAFplErI0akjjxGBJACW5iXC6PZiTq8dHh4BMrRIe3wBmzdBhgA1g+fwiAEDt2TbYnL0oy89Gb78XqsQE6OTdECcEoNFocOLECfh8Pr4MgU6nQ1ZWFp8Bs6OjA3l5eXA6nejq6oJOp8OcOXP4/ViWhUAg4L18J06cAAAolUo+yyXLskhLS+Pr87W0tIBlWVitVvh8PkgkElx77bVobm7G0qVLeW/dzJkzeW+bQCBAUlISDAYDVq5cCavVCrfbzZdx8Pl8aG9vh0ajgdlsRklJCR/e2dnZiYGBAd7jV1NTA71eD4/Hg+XLl8d8KgWEEHLpZpOPGTNmwOv1wufzITMzE7fddhseffRRiMXiYffxer18dhsAcLlcyMzMhNPpRFJS0kSYTaFQKJQYQh+EKdOVdevW4a233sKaNWsm9AcMl8vFZy2kz0aXx7QYS6cRpmP/gru7C46ewXp4bCCA+uYLUCsSkK1LAcMIoUlOhMXmBABokhPR2HIRc3LSYe/pgyoxAZ8eOwVpvBiJ0vjBGnosO5icJUWJPS0CuEg8xGIx4uLikJSUBIZhIBaL+TIGVqsVcXFxSE5O5ssncMKNE4ZarRZerxfnz59Hf38/hEIhSktLUVpaisrKSuTm5iIxMREajQb/+te/4PP5kJGRgaSkJOzZs4evmScUCiESieD3+/n1dF1dXZDL5ZBKpWAYBkqlEjKZDDqdDjU1NfB6vRCJROjs7IRCoYDb7UZ+fj4kEgkvWlmWRUNDA0pKSiAWi9He3g6j0YiMjAwkJyfH/FqZstk1f/rTn2LLli2orKzEunXr8Pvf/x4//vGPR9znueeeg0Kh4P9lZmZOkLUUSijTNVMfhTLR0JIPUwN6zxs9NOMmZVKgyIBu6V2QzVyE8rkFyEpTgxEKoUyUobvHA5YNwOsbgLW7B3qtEgzzpbSw2J3w+gbQ2HIRhdk6KBJkKJ81A3qtks++aelyIFdoRgI8KCsrw8qVK9HX1wez2Yy2tja+lhzLsigoKIBEIkFqaipUKhXUajVEIhFKSkpQVlaG8vJyyOVyKBQKtLa2wmAwoKOjAydOnIBEIoHBYIBOp4PVaoVCoUBPTw80Gg1aWlrgdrthMBj4enUajYZPpKJWqzEwMIDe3l4olUoQQkLKJ3DrCgFAoVCgra0NGRkZaG5uhs/ng8FgwLFjx8AwDCoqKniHlF6vR3Z2NnQ6HS5evBjzqZtUIu/pp5+GQCAY8d+xY8cAAA8//DCWLVuGkpIS3HPPPfjzn/+M119/HTabbdj+f/nLX8LpdPL/xiP+lUKJBppanEKhXE3Qe97ooT9gUCYLTFwc9KUrwMy7DdAUQZ+qQoI0HkXZOjCMkBdspk4H2sxd2HvsFHrdHnQ6eiARx6EkLwOyeAnKCrNCRCAA6NQKJCZIsDo7AHF/F6xWK/Lz85GWlgapVAqNRgOVSoW4uDg4nU6kpKRAr9eHeNS6u7v5dW9qtRo6nQ4LFy5Ebm4u/H4/71krKCgYPKZOB5lMhpkzZ8JutyM/Px9qtRparRYrVqyAWCzm+/P5fDh06BD8fj+USiXOnTsHj8cDq9XK18XT6XTIyMiASqXiheTx48eRnZ2NpqYmdHZ28qGowJelFTiRGFxHL5ZMqjV569atwx133DFimxkzZkTcvmjRIgDAuXPnhs1QI5FIIJFILstGCiUW0CQflOkMDaGkhEPveRTKNCAuHsheDEZTiDL5EVhaz0CnVgwRbrOy09Dd60FJXgbE4kGpodd+Wezb1OmAsdMOlg0gK00NvVYJU6cDXut+CHKXw9k/6OVKT0+HSCRCdnY27/GyWq1gWRYqlQoMw8Bms0GhUMBkMqGzsxMejwcMw2DBggUwmUwwm82w2+1Qq9Xo7OyEWCwGwzAoLi5GZWUlUlNTYbfbIRaLkZeXh+bmZsjlcuzduxcFBQWwWq2QSqXweDxIS0sDy7I4d+4cioqKYLfboVKpYDKZcPr0afT19cHtduPzzz/H0qVLUVNTg/LycvT19UGn0w0prWA0GvkaegKBIObTNalEXkpKClJSUsa0b21tLQAgLS0tliZRKOMCTfIRe6iwmDxcqWQo9BqYvNB7HoUyjZCpwMz+BvRpcwDjMcDbAwB8uGYk4Tcs8QogUQddVgosvQAriodK5gfDMPxaNi4UEhgUf5wnDABfIoFlWSgUCgQCAeh0Ouj1egCDZRI4cWWxWGAymZCUlIRPP/0U5eXl6O3thU6ng9/vh1gsxpw5c7B161bodDq+RMLhw4f50gi9vb1QKBQghPCao66uDk6nE319fYiLi8Ps2bPh8XhQXl6OtrY2rFy5EmKxeIgHjyvlYLFYaJ08jiNHjqCqqgorVqyAQqHA0aNH8fDDD+Omm27ia1hQKJSrC5plcfJwpbw29BqgUCiUCUQ5A1BkAh0nAXMDGPhDPHYRkamgn1sIxi2EbuZcIH6w/BkDQK/9sgZduLgLhhOAbrcbDQ0NKCsrAzDoIeMEHsMwvNDjIISAZVnU1NRAp9OhpaUFc+bMAQBkZGSAYRhYLBZkZ2ejp6cHZWVlqK2tRXZ2Nvr6+sAwDO/ty8jI4EslJCUl4ezZs8jOzuZtmz17Nr+NS7bS0NAAuVwOp9PJ719bW4vu7m6cO3fusqYiElNS5EkkEvzjH//AM888A6/Xi+zsbNx777147LHHrrRpFArlCkHDwSYPV8prQ68BCoVCmWCEDJA2D1DnDRZSt53/8j2BAJClAPJUIDF18K9IMijohukukjiLhE6nQ21tLRQKRUgtPK/XG/Ka2yYSiaDVatHU1ISbb74Zzc3NUKvVMJvNYFkWPT09yM/Ph9Vqhc1mg0ajgcViwZw5c9DZ2YnCwkL4fD40NzcjPz+fD/sMLs3Q1NSEWbNmIT4+HgCQn5+P5uZmZGdn491330V6ejoaGxuxcOFC3raSkhK88847wwray2HKllCIBdMitS2FQqFQKBRKjKDPRrHjqhzLXivgvDAo6ORagIkbt0OFe/0ieQGDt9XW1qK3txdyuRwVFRVgWRbt7e04ceIEZDIZPB4PCgsLcfDgQSgUCqSkpKC9vR3Z2dlwOBwQCARITk5GX18fVqxYAavVCgC8R85ut8NsNmPp0qW8l48rm9DW1sbXzZPL5XyNPZ/PhxMnTqC+vh7PPPNMTK+VKenJo1AoFAqFQqFQKJMMuWbw3wQQ7vW7lBeQC5nk1mxztfiUSiXOnj2LgoICOBwOFBQUgGEY2O126HQ62O12MAyDwsJCdHd3Iz09HQ0NDbBYLHwCmDlz5uAvf/kLUlJS0NDQAIZh+Jp5Wq0WnZ2dyMzMRG9vLzIyMnDixAlcvHgRHR0dGBgYgFJ5iTDXMUBFHoVCoVAoFAqFQpl2cOUJuBDOioqKkPe5cEtuTR6XwTO4eLlcLofP50NPTw8qKipgsVggEong8XjgdDqh0WhgtVqxatUqHDlyBPHx8Whvb0dKSgocDkdIZs1gu5KSkvi6fImJiTE/dyryKBQKhUKhUCgUyrRDp9Px4ZqRYBhmSNJGzhvIFS/3+Xy8B5DzFrIsC6vVCoZh+EyfBoMBCoUCnZ2dcDgcmDdvHp+5UyT6UnKxLAuPx4O6ujoUFxcjISEBcrk85udORR6FQqFQKBQKhUKZdkSbyGUkxGLxEA8g5/UzGo2wWCzo6OiAUqlESkoK4uLioFQq+Uyf3No8o9EIABCJRGhtbYVEIkFrayvmzZuH9PT0y7IxElTkUSgUCoVCoVCuGp577jls374dTU1NkEqluOaaa/D888+jsLAQADAwMIAnnngCu3fv5r0zK1euxG9/+9txeRinTE24DJ4+n4+vs8eJweAEMJznj0On0/HZOwFAqVTi5MmTMbePZte82rIeUSgUCoVCoQzD1fBsdMMNN+COO+7AV77yFfj9fvzHf/wHTpw4gVOnTiEhIQFOpxO33nor7r33XsybNw8OhwMPPfQQ/H4/jh07FvVxroaxpERX2+9S+0okEmg0mpheK1Tk0Q8fhUKhUCgUCoCr89nIarVCq9Vi//79WLp0acQ2R48exYIFC9DW1jZkDddwXI1jSRkb43GtXNXhmpy+dblcV9gSCoVCoVAolCsP90x0NfkAnE4nAEClUo3YhquTNhxerxder3dIv/Q5k3IpxuNzd1V78oxGIzIzM6+0GRQKhUKhUCiTigsXLiAjI+NKmzHuEEJw8803w+Fw4ODBgxHb9Pf3Y8mSJSgqKsLbb789bF9PP/00nnnmmfEylXIVcP78eeTm5sakr6ta5AUCAVy8eBGJiYkQCASXbO9yuZCZmYkLFy5Qt/sUgc7Z1IPO2dSDztnUhM7b1GMi5owQgp6eHqSnp0MoFI7LMSYTa9euxa5du/D5559HFLUDAwO47bbb0N7ejn379o047uGevO7ubmRnZ6O9vR0KhWJc7B8Ppuq9YaraDQx6fbOysuBwOEb0Fo+GqzpcUygUjulXqqSkpCl38Vzt0DmbetA5m3rQOZua0Hmbeoz3nE0lQXI5PPjgg/jwww9x4MCBYQXe//k//wctLS347LPPLjnmEokEEolkyHaFQjElP2NT9d4wVe0GENMfVq5qkUehUCgUCoVCuboghODBBx/Ejh07sG/fPuTk5Axpwwm85uZmVFZWQq1WXwFLKZSxQ0UehUKhUCgUCuWqYe3atXjnnXfwwQcfIDExka9XplAoIJVK4ff7ceutt+L48eP46KOP+DT3wGByFrFYfCXNp1Cigoq8USCRSPDUU09FdMVTJid0zqYedM6mHnTOpiZ03qYedM5iw6uvvgoAWL58ecj2zZs346677oLRaMSHH34IACgtLQ1pU1lZOWS/4Ziq80XtnnjGw/arOvEKhUKhUCgUCoVCoUw3pn/aJAqFQqFQKBQKhUK5iqAij0KhUCgUCoVCoVCmEVTkUSgUCoVCoVAoFMo0goo8CoVCoVAoFAqFQplGUJEXBfv27YNAIIj47+jRo3y79vZ2fOtb30JCQgJSUlLwk5/8BD6f7wpaTtm1axcWLlwIqVSKlJQU3HLLLSHv0zmbXMyYMWPIZ+zxxx8PaUPnbHLi9XpRWloKgUCAurq6kPfonE0ubrrpJmRlZSE+Ph5paWn44Q9/iIsXL4a0oXM2uWhtbcXdd9+NnJwcSKVSzJw5E0899dSQOaHzNrFs3LgROTk5iI+PR3l5OQ4ePDhi+/3796O8vBzx8fHIzc3Fn//85wmydCijsX245+CmpqYJtBg4cOAAvvWtbyE9PR0CgQDvv//+JfeZDGM+WrtjNd60hEIUXHPNNTCbzSHb/vM//xN79+5FRUUFAIBlWXzjG9+ARqPB559/DpvNhjvvvBOEEPzhD3+4EmZf9bz33nu49957sWHDBlx33XUghODEiRP8+3TOJifr16/Hvffey7+Wy+X8/+mcTV4ee+wxpKeno76+PmQ7nbPJx4oVK/CrX/0KaWlpMJlM+PnPf45bb70Vhw8fBkDnbDLS1NSEQCCAv/zlL8jLy8PJkydx7733oq+vDy+++CIAOm8TzT/+8Q889NBD2LhxI6699lr85S9/wde//nWcOnUKWVlZQ9q3tLTgxhtvxL333ou3334bhw4dwo9//GNoNBp897vfndS2c5w5cwZJSUn8a41GMxHm8vT19WHevHn40Y9+FNWYTZYxH63dHJc93oQyanw+H9FqtWT9+vX8tt27dxOhUEhMJhO/7d133yUSiYQ4nc4rYeZVzcDAANHr9eS1114btg2ds8lHdnY2eeWVV4Z9n87Z5GT37t2kqKiINDY2EgCktrY25D06Z5ObDz74gAgEAuLz+QghdM6mCr/73e9ITk4O/5rO28SyYMEC8sADD4RsKyoqIo8//njE9o899hgpKioK2Xb//feTRYsWjZuNwzFa2ysrKwkA4nA4JsC66ABAduzYMWKbyTTmHNHYHavxpuGaY+DDDz9EV1cX7rrrLn7bkSNHMHfuXKSnp/PbVq9eDa/Xi5qamitg5dXN8ePHYTKZIBQKUVZWhrS0NHz9619HY2Mj34bO2eTk+eefh1qtRmlpKZ599tmQUCM6Z5OPjo4O3Hvvvfjv//5vyGSyIe/TOZvc2O12/P3vf8c111yDuLg4AHTOpgpOpxMqlYp/Tedt4vD5fKipqcH1118fsv3666/nPeLhHDlyZEj71atX49ixYxgYGBg3W8MZi+0c3PPU1772NVRWVo6nmTFhsoz5WLnc8aYibwy8/vrrWL16NTIzM/ltFosFqampIe2USiXEYjEsFstEm3jVYzAYAABPP/00nnjiCXz00UdQKpVYtmwZ7HY7ADpnk5Gf/vSn2LJlCyorK7Fu3Tr8/ve/x49//GP+fTpnkwtCCO666y488MADfOh6OHTOJie/+MUvkJCQALVajfb2dnzwwQf8e3TOJj/nz5/HH/7wBzzwwAP8NjpvE0dXVxdYlh0y3qmpqcOOdaT5SU1Nhd/vR1dX17jZGs5YbE9LS8OmTZvw3nvvYfv27SgsLMTXvvY1HDhwYCJMHjOTZcxHS6zG+6oWeU8//fSwCVW4f8eOHQvZx2g0Ys+ePbj77ruH9CcQCIZsI4RE3E4ZG9HOWSAQAAD8x3/8B7773e+ivLwcmzdvhkAgwNatW/n+6JyNP6P5nD388MNYtmwZSkpKcM899+DPf/4zXn/9ddhsNr4/OmfjT7Rz9oc//AEulwu//OUvR+yPztn4M9rvs0cffRS1tbX4+OOPwTAM1qxZg8FIokHonE0MY3kOuXjxIm644QbcdtttuOeee0Leo/M2sYSP66XGOlL7SNsngtHYXlhYiHvvvRfz58/H4sWLsXHjRnzjG9/g14NOZibTmEdLrMb7qk68sm7dOtxxxx0jtpkxY0bI682bN0OtVuOmm24K2a7T6VBdXR2yzeFwYGBgYMivCJSxE+2c9fT0AABmz57Nb5dIJMjNzUV7ezsAOmcTxVg+ZxyLFi0CAJw7dw5qtZrO2QQR7Zz95je/QVVVFSQSSch7FRUV+P73v48333yTztkEMdrPWUpKClJSUlBQUIBZs2YhMzMTVVVVWLx4MZ2zCWS083bx4kWsWLECixcvxqZNm0La0XmbOFJSUsAwzBDPV2dn57BjrdPpIrYXiURQq9XjZms4Y7E9EosWLcLbb78da/NiymQZ81gwlvG+qkUe9yUXLYQQbN68GWvWrOHXLnAsXrwYzz77LMxmM9LS0gAAH3/8MSQSCcrLy2Nq99VMtHNWXl4OiUSCM2fOYMmSJQCAgYEBtLa2Ijs7GwCds4litJ+zYGprawGAnx86ZxNDtHP2X//1X/jNb37Dv7548SJWr16Nf/zjH1i4cCEAOmcTxeV8zrhftr1eLwA6ZxPJaObNZDJhxYoVfGSKUBgajEXnbeIQi8UoLy/HJ598gu985zv89k8++QQ333xzxH0WL16MnTt3hmz7+OOPUVFRMeSZcjwZi+2RqK2t5a+zycpkGfNYMKbxvqy0LVcZe/fuJQDIqVOnhrzn9/vJ3Llzyde+9jVy/PhxsnfvXpKRkUHWrVt3BSylEELIT3/6U6LX68mePXtIU1MTufvuu4lWqyV2u50QQudssnH48GHy8ssvk9raWmIwGMg//vEPkp6eTm666Sa+DZ2zyU1LS8uQ7Jp0ziYX1dXV5A9/+AOpra0lra2t5LPPPiNLliwhM2fOJP39/YQQOmeTEZPJRPLy8sh1111HjEYjMZvN/D8OOm8Ty5YtW0hcXBx5/fXXyalTp8hDDz1EEhISSGtrKyGEkMcff5z88Ic/5NsbDAYik8nIww8/TE6dOkVef/11EhcXR7Zt2zbpbX/llVfIjh07yNmzZ8nJkyfJ448/TgCQ9957b0Lt7unpIbW1taS2tpYA4J8Z2traIto9WcZ8tHbHarypyBsF3/ve98g111wz7PttbW3kG9/4BpFKpUSlUpF169bxX5qUicfn85Gf/exnRKvVksTERLJy5Upy8uTJkDZ0ziYPNTU1ZOHChUShUJD4+HhSWFhInnrqKdLX1xfSjs7Z5CWSyCOEztlkoqGhgaxYsYKoVCoikUjIjBkzyAMPPECMRmNIOzpnk4vNmzcTABH/BUPnbWL505/+RLKzs4lYLCbz588n+/fv59+78847ybJly0La79u3j5SVlRGxWExmzJhBXn311Qm2+EtGY/vzzz9PZs6cSeLj44lSqSRLliwhu3btmnCbudIC4f/uvPPOiHYTMjnGfLR2x2q8BYQErbSmUCgUCoVCoVAoFMqU5qrOrkmhUCgUCoVCoVAo0w0q8igUCoVCoVAoFAplGkFFHoVCoVAoFAqFQqFMI6jIo1AoFAqFQqFQKJRpBBV5FAqFQqFQKBQKhTKNoCKPQqFQKBQKhUKhUKYRVORRKBQKhUKhUCgUyjSCijwKhUKhUCgUCoVCmUZQkUehUCgUCoVCoVAo0wgq8igUCoVCoVAoFAplGkFFHoVCoURJUVERXnvttTHvv3z5cggEAggEAtTV1Y3Y7qGHHhrzcSJx11138cd+//33Y9o3hUKhUKYnNpsNWq0Wra2tE37s+++/H//2b/8GALj11lvx8ssvT7gNUxkq8igUCiUKPB4Pzp07h3nz5l1WP/feey/MZjPmzp0bI8ui4//9v/8Hs9k8ocekUCgUytTmueeew7e+9S3MmDHjihz7r3/9KwDgySefxLPPPguXyzXhdkxVqMijUCiUKDh58iQIIZctzmQyGXQ6HUQiUYwsiw6FQgGdTjehx6RQKBTK1MXj8eD111/HPffcc0WOr1KpkJCQAAAoKSnBjBkz8Pe///2K2DIVoSKPQqFQRqCurg7XXXcdlixZgkAggKysLLzyyisx67+vrw9r1qyBXC5HWloaXnrppSFtCCH43e9+h9zcXEilUsybNw/btm3j3+/p6cH3v/99JCQkIC0tDa+88sq4hHxSKBQK5erhX//6F0QiERYvXhyyvbGxEUuXLoVUKkVpaSkOHToEgUCA+vr6mB27tbUVAoEAbW1t/LabbroJ7777bsyOMd2hIo9CoVCG4fz581i2bBmuu+463HTTTbjlllvws5/9DI888giOHTsWk2M8+uijqKysxI4dO/Dxxx9j3759qKmpCWnzxBNPYPPmzXj11VfR2NiIhx9+GD/4wQ+wf/9+AMAjjzyCQ4cO4cMPP8Qnn3yCgwcP4vjx4zGxj0KhUChXJwcOHEBFRUXItsbGRixatAhf/epXUVtbiyeffBK33nor4uLiMGvWrJgdu66uDsnJycjOzua3LViwAF988QW8Xm/MjjOdoSKPQqFQhuGBBx7ALbfcgieeeALt7e1YvHgxHnvsMSQnJ+PgwYMAgO985ztQKpW49dZbR91/b28vXn/9dbz44otYtWoViouL8eabb4JlWb5NX18fXn75ZbzxxhtYvXo1cnNzcdddd+EHP/gB/vKXv6CnpwdvvvkmXnzxRXzta1/D3LlzsXnz5pA+KBQKhUIZLa2trUhPTw/Ztm7dOtx444149tlnUVRUhFtuuQWLFy/G7NmzIRaLY3bs+vr6IWvg9Xo9vF4vLBYLAOCjjz5CYWEh8vPzLysp2nSFijwKhUKJgMViwWeffYYHHngALMvixIkTKCsrg1AohEgk4r/MfvKTn+Ctt94a0zHOnz8Pn88XEgqjUqlQWFjIvz516hT6+/uxatUqyOVy/t9bb72F8+fPw2AwYGBgAAsWLOD3USgUIX1QKBQKhTJaPB4P4uPj+detra3Yt28fnnzyyZB2EokkYlKyp59+ms/qPNy/4aJi6urqhvQplUoBAG63G36/H4888gg+++wzHD9+HM8//zzsdvvlnvK0YmJX/lMoFMoUoaqqCoFAAKWlpWhqaoLH40FpaSkuXLiArq4uXHvttQCAFStWYN++fWM6BiHkkm0CgQAAYNeuXdDr9SHvSSQS2Gw2AIBAIBh13xQKhUKhDEdKSgocDgf/ur6+HmKxGHPmzAlpd/r0adx5551D9l+3bh3uuOOOEY8xXNbO+vp63HTTTSHbOBGn0WjwxRdfYM6cOfz34o033og9e/bge9/73iXP62qBijwKhUKJgM/nAwD09/ejrq4OGRkZUKvVeOWVVzB79myUlpZe9jHy8vIQFxeHqqoqZGVlAQAcDgfOnj2LZcuWAQBmz54NiUSC9vZ2flswycnJiIuLwxdffIHMzEwAgMvlQnNzc8T2FAqFQqFEQ1lZGd5++23+NcMw8Pv96O/v5z18+/fvjxhaCQyKxJSUlFEf1+VyobW1dUifJ0+eREZGBlJSUrBv376QHz4zMjJgMplGfazpDBV5FAqFEoFFixZBJBJh/fr16O3txcyZM7Fx40a88sorqKysjMkx5HI57r77bjz66KNQq9VITU3Ff/zHf0Ao/DKSPjExET//+c/x8MMPIxAIYMmSJXC5XDh8+DDkcjnuvPNO3HnnnXj00UehUqmg1Wrx1FNPQSgUDvHuUSgUCoUSLatXr8Yvf/lLOBwOKJVKlJeXIy4uDo8++igefvhhnDp1is/iHIsfPjnq6+vBMMwQj+HBgwdx/fXXA4gcrUK/80KhIo9CoVAikJWVhTfeeAO/+MUvYDabIRKJ4Ha7sXv37pD1b5fLCy+8gN7eXtx0001ITEzEz372MzidzpA2v/71r6HVavHcc8/BYDAgOTkZ8+fPx69+9SsAwMsvv4wHHngA3/zmN5GUlITHHnsMFy5cCFlLQaFQKBTKaCguLkZFRQX++c9/4v7770daWhreeOMNPP7449i8eTOuv/56/OhHP8Lf/vY3qFSqmB23vr4eRUVFkEgk/Lb+/n7s2LEDe/bsATCYhCXYc2c0GrFw4cKY2TAdEBC6cINCoVBGRKVS4Y033sC3v/3tiO/v27cPf/zjH0Nq10Vi+fLlKC0txe9///vYGxlEX18f9Ho9XnrpJdx9990h7wkEAuzYsWPYc6FQKBQKhWP37t34+c9/jpMnT4ZEmQCDa8ZXrFiBa6+9Fhs2bBhXO/70pz/hgw8+wMcffwwA8Pv9mDVrFvbt24ekpCTMnz8fVVVVUKvV42rHVIJ68igUCmUEjEYjHA4HiouLI76/evVqHD9+HH19fcjIyMCOHTvwla98Zdj+Nm7ciNdeew1HjhwZts/RUltbi6amJixYsABOpxPr168HANx88818mwceeCBkbQWFQqFQKJfixhtvRHNzM0wmE1paWmC1WlFWVoauri688MILaG1txY4dO8bdjri4OPzhD3/gX4tEIrz00ktYsWIFAoEAHnvsMSrwwqCePAqFQhmBf/3rX7jtttvQ09Nz2fH+JpMJHo8HwGA4aKxqCtXW1uKee+7BmTNnIBaLUV5ejpdffjlERHZ2dsLlcgEA0tLSkJCQEJNjUygUCuXqYOvWrXj88cdhMpmQmpqKlStXYsOGDUhNTb3SplEiQEUehUKhUCgUCoVCoUwjaDF0CoVCoVAoFAqFQplGUJFHoVAoFAqFQqFQKNMIKvIoFAqFQqFQKBQKZRpBRR6FQqFQKBQKhUKhTCOoyKNQKBQKhUKhUCiUaQQVeRQKhUKhUCgUCoUyjaAij0KhUCgUCoVCoVCmEVTkUSgUCoVCoVAoFMo0goo8CoVCoVAoFAqFQplGUJFHoVAoFAqFQqFQKNOI/w91IjV2O2wCgAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 4.5))\n", + "\n", + "shape = (2, 4)\n", + "plt.subplot2grid(shape, (0, 0), colspan=3)\n", + "plot_first_selection(candidate_df)\n", + "\n", + "plt.subplot2grid(shape, (0, 3))\n", + "plot_proper_motion(centerline)\n", + "\n", + "plt.subplot2grid(shape, (1, 0), colspan=3)\n", + "plot_second_selection(selected)\n", + "\n", + "plt.subplot2grid(shape, (1, 3))\n", + "plot_cmd(merged)\n", + "poly = Polygon(coords, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + "plt.gca().add_patch(poly)\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking more and more like the figure in the paper.\n", + "\n", + "**Exercise:** In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we reverse-engineered the figure we've been replicating, identifying elements that seem effective and others that could be improved.\n", + "\n", + "We explored features Matplotlib provides for adding annotations to figures -- including text, lines, arrows, and polygons -- and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* The most effective figures focus on telling a single story clearly and compellingly.\n", + "\n", + "* Consider using annotations to guide the readers attention to the most important elements of a figure.\n", + "\n", + "* The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults.\n", + "\n", + "* If you find yourself making the same customizations on several projects, you might want to create your own style sheet." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/AstronomicalData/01_query.ipynb b/_build/html/_sources/AstronomicalData/01_query.ipynb new file mode 100644 index 0000000..9a7f17d --- /dev/null +++ b/_build/html/_sources/AstronomicalData/01_query.ipynb @@ -0,0 +1,1642 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lesson 1\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Optional detail \n", + "\n", + "> Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones:\n", + "\n", + "| Symbol | Operation\n", + "|--------| :---\n", + "| `>` | greater than\n", + "| `<` | less than\n", + "| `>=` | greater than or equal\n", + "| `<=` | less than or equal\n", + "| `=` | equal\n", + "| `!=` or `<>` | not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/AstronomicalData/02_coords.ipynb b/_build/html/_sources/AstronomicalData/02_coords.ipynb new file mode 100644 index 0000000..54821b3 --- /dev/null +++ b/_build/html/_sources/AstronomicalData/02_coords.ipynb @@ -0,0 +1,1970 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 2\n", + "\n", + "This is the second in a series of lessons related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1603114980658O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019094300.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_results.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/AstronomicalData/README.md b/_build/html/_sources/AstronomicalData/README.md new file mode 100644 index 0000000..190277b --- /dev/null +++ b/_build/html/_sources/AstronomicalData/README.md @@ -0,0 +1,172 @@ +# Astronomical Data in Python + +*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include: + +* Writing queries that select and download data from a database. + +* Using data stored in an Astropy `Table` or Pandas `DataFrame`. + +* Working with coordinates and other quantities with units. + +* Storing data in various formats. + +* Performing database join operations that combine data from multiple tables. + +* Visualizing data and preparing publication-quality figures. + +As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. + +This material was developed in collaboration with [The Carpentries](https://carpentries.org/) and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society. + +I am grateful for contributions from the members of the committee -- Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield -- and from Erin Becker, Brett Morris and Adrian Price-Whelan. + +The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment. + +This material is also available in the form of [Carpentries lessons](https://datacarpentry.github.io/astronomy-python), but you should be +aware that these versions might diverge in the future. + +**Prerequisites** + +This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +**Notebook 1** + +This notebook demonstrates the following steps: + +1. Making a connection to the Gaia server, + +2. Exploring information about the database and the tables it contains, + +3. Writing a query and sending it to the server, and finally + +4. Downloading the response from the server as an Astropy `Table`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + + +**Notebook 2** + +This notebook starts with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. + +Then, to select stars in the vicinity of GD-1, we: + +* Use `Quantity` objects to represent measurements with units. + +* Use the `Gala` library to convert coordinates from one frame to another. + +* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. + +* Submit a query and download the results. + +* Store the results in a FITS file. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + + +**Notebook 3** + +Here are the steps in this notebook: + +1. We'll read back the results from the previous notebook, which we saved in a FITS file. + +2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1. + +3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1. + +4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1. + +5. Finally, we'll select and plot the stars whose proper motion is in that region. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + + +**Notebook 4** + +Here are the steps in this notebook: + +1. Using data from the previous notebook, we'll identify the values of proper motion for stars likely to be in GD-1. + +2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. + +3. We'll also see how to write the results to a CSV file. + +That will make it possible to search a bigger region of the sky in a single query. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + + +**Notebook 5** + +Here are the steps in this notebook: + +1. We'll reload the candidate stars we identified in the previous notebook. + +2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars. + +3. We'll write the results to a file for use in the next notebook. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + + +**Notebook 6** + +Here are the steps in this notebook: + +1. We'll reload the data from the previous notebook and make a color-magnitude diagram. + +2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect. + +3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + + +**Notebook 7** + +Here are the steps in this notebook: + +1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly. + +2. The we'll see several ways to customize figures to make them more appealing and effective. + +3. Finally, we'll see how to make a figure with multiple panels or subplots. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + + +**Installation instructions** + +Coming soon. diff --git a/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md b/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md new file mode 100644 index 0000000..89bc0f2 --- /dev/null +++ b/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md @@ -0,0 +1,20 @@ +Copyright (c) 2019 Jan Bednar + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md b/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md new file mode 100644 index 0000000..89bc0f2 --- /dev/null +++ b/_build/html/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md @@ -0,0 +1,20 @@ +Copyright (c) 2019 Jan Bednar + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/_build/html/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb b/_build/html/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb new file mode 100644 index 0000000..94813e9 --- /dev/null +++ b/_build/html/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb @@ -0,0 +1,1640 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lesson 1\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Optional detail \n", + "\n", + "> Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp):\n", + "\n", + "* `>`: greater than\n", + "* `<`: less than\n", + "* `>=`: greater than or equal\n", + "* `<=`: less than or equal\n", + "* `=`: equal\n", + "* `!=` or `<>`: not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/html/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb b/_build/html/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb new file mode 100644 index 0000000..7707176 --- /dev/null +++ b/_build/html/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb @@ -0,0 +1,1966 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 2\n", + "\n", + "This is the second in a series of lessons related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1601903357321O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090917.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 5 09:09 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/html/_sources/README.md b/_build/html/_sources/README.md new file mode 100644 index 0000000..190277b --- /dev/null +++ b/_build/html/_sources/README.md @@ -0,0 +1,172 @@ +# Astronomical Data in Python + +*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include: + +* Writing queries that select and download data from a database. + +* Using data stored in an Astropy `Table` or Pandas `DataFrame`. + +* Working with coordinates and other quantities with units. + +* Storing data in various formats. + +* Performing database join operations that combine data from multiple tables. + +* Visualizing data and preparing publication-quality figures. + +As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. + +This material was developed in collaboration with [The Carpentries](https://carpentries.org/) and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society. + +I am grateful for contributions from the members of the committee -- Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield -- and from Erin Becker, Brett Morris and Adrian Price-Whelan. + +The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment. + +This material is also available in the form of [Carpentries lessons](https://datacarpentry.github.io/astronomy-python), but you should be +aware that these versions might diverge in the future. + +**Prerequisites** + +This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +**Notebook 1** + +This notebook demonstrates the following steps: + +1. Making a connection to the Gaia server, + +2. Exploring information about the database and the tables it contains, + +3. Writing a query and sending it to the server, and finally + +4. Downloading the response from the server as an Astropy `Table`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + + +**Notebook 2** + +This notebook starts with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. + +Then, to select stars in the vicinity of GD-1, we: + +* Use `Quantity` objects to represent measurements with units. + +* Use the `Gala` library to convert coordinates from one frame to another. + +* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. + +* Submit a query and download the results. + +* Store the results in a FITS file. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + + +**Notebook 3** + +Here are the steps in this notebook: + +1. We'll read back the results from the previous notebook, which we saved in a FITS file. + +2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1. + +3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1. + +4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1. + +5. Finally, we'll select and plot the stars whose proper motion is in that region. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + + +**Notebook 4** + +Here are the steps in this notebook: + +1. Using data from the previous notebook, we'll identify the values of proper motion for stars likely to be in GD-1. + +2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. + +3. We'll also see how to write the results to a CSV file. + +That will make it possible to search a bigger region of the sky in a single query. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + + +**Notebook 5** + +Here are the steps in this notebook: + +1. We'll reload the candidate stars we identified in the previous notebook. + +2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars. + +3. We'll write the results to a file for use in the next notebook. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + + +**Notebook 6** + +Here are the steps in this notebook: + +1. We'll reload the data from the previous notebook and make a color-magnitude diagram. + +2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect. + +3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + + +**Notebook 7** + +Here are the steps in this notebook: + +1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly. + +2. The we'll see several ways to customize figures to make them more appealing and effective. + +3. Finally, we'll see how to make a figure with multiple panels or subplots. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + + +**Installation instructions** + +Coming soon. diff --git a/_build/html/_sources/index.md b/_build/html/_sources/index.md new file mode 100644 index 0000000..a6a7b98 --- /dev/null +++ b/_build/html/_sources/index.md @@ -0,0 +1,169 @@ +# Astronomical Data in Python + +*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include: + +* Writing queries that select and download data from a database. + +* Using data stored in an Astropy `Table` or Pandas `DataFrame`. + +* Working with coordinates and other quantities with units. + +* Storing data in various formats. + +* Performing database join operations that combine data from multiple tables. + +* Visualizing data and preparing publication-quality figures. + +As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. + +This material was developed in collaboration with [The Carpentries](https://carpentries.org/) and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society. + +I am grateful for contributions from the members of the committee -- Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield -- and from Erin Becker, Brett Morris and Adrian Price-Whelan. + +The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment. + +### Prerequisites + +This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +### Notebook 1 + +This notebook demonstrates the following steps: + +1. Making a connection to the Gaia server, + +2. Exploring information about the database and the tables it contains, + +3. Writing a query and sending it to the server, and finally + +4. Downloading the response from the server as an Astropy `Table`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/01_query.ipynb) + + +### Notebook 2 + +This notebook starts with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. + +Then, to select stars in the vicinity of GD-1, we: + +* Use `Quantity` objects to represent measurements with units. + +* Use the `Gala` library to convert coordinates from one frame to another. + +* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. + +* Submit a query and download the results. + +* Store the results in a FITS file. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/02_coords.ipynb) + + +### Notebook 3 + +Here are the steps in this notebook: + +1. We'll read back the results from the previous notebook, which we saved in a FITS file. + +2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1. + +3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1. + +4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1. + +5. Finally, we'll select and plot the stars whose proper motion is in that region. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/03_motion.ipynb) + + +### Notebook 4 + +Here are the steps in this notebook: + +1. Using data from the previous notebook, we'll identify the values of proper motion for stars likely to be in GD-1. + +2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. + +3. We'll also see how to write the results to a CSV file. + +That will make it possible to search a bigger region of the sky in a single query. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/04_select.ipynb) + + +### Notebook 5 + +Here are the steps in this notebook: + +1. We'll reload the candidate stars we identified in the previous notebook. + +2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars. + +3. We'll write the results to a file for use in the next notebook. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/05_join.ipynb) + + +### Notebook 6 + +Here are the steps in this notebook: + +1. We'll reload the data from the previous notebook and make a color-magnitude diagram. + +2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect. + +3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/06_photo.ipynb) + + +### Notebook 7 + +Here are the steps in this notebook: + +1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly. + +2. The we'll see several ways to customize figures to make them more appealing and effective. + +3. Finally, we'll see how to make a figure with multiple panels or subplots. + +Press this button to run this notebook on Colab: + +[](https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + +[or click here to read it on NBViewer](https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/07_plot.ipynb) + + +## Installation instructions + +Coming soon. diff --git a/_build/html/_sources/last_resort.ipynb b/_build/html/_sources/last_resort.ipynb new file mode 100644 index 0000000..7982d3c --- /dev/null +++ b/_build/html/_sources/last_resort.ipynb @@ -0,0 +1,72 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Notebook of Last Resort" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are not able to get everything installed that we need for the workshop, you have the option of running this notebook on Colab.\n", + "\n", + "Before you get started, you probably want to press the Save button!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That should be everything you need. Now you can type code and run it in the following cells." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/_build/html/_sources/test_setup.ipynb b/_build/html/_sources/test_setup.ipynb new file mode 100644 index 0000000..10b3888 --- /dev/null +++ b/_build/html/_sources/test_setup.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Astronomical Data in Python\n", + "\n", + "This notebook imports the libraries we need for the workshop.\n", + "\n", + "If any of them are missing, you'll get an error message.\n", + "\n", + "If you don't get any error messages, you are all set." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from wget import download" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.path import Path\n", + "from matplotlib.patches import Polygon" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.coordinates as coord\n", + "import astropy.units as u\n", + "from astropy.table import Table" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import gala.coordinates as gc\n", + "from pyia import GaiaData" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "# Note: running this import statement opens a connection\n", + "# to a Gaia server, so it will fail if you are not connected\n", + "# to the internet.\n", + "\n", + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "During the workshop, we might put some code on Slack and ask you to cut and paste it into the notebook.\n", + "\n", + "If you are on a Mac, you might encounter a problem: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/_build/html/_static/__init__.py b/_build/html/_static/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/_build/html/_static/basic.css b/_build/html/_static/basic.css new file mode 100644 index 0000000..616111c --- /dev/null +++ b/_build/html/_static/basic.css @@ -0,0 +1,855 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_build/html/_static/clipboard.min.js b/_build/html/_static/clipboard.min.js new file mode 100644 index 0000000..02c549e --- /dev/null +++ b/_build/html/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n or other required elements. + thead: [ 1, "
", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +{% endmacro %} \ No newline at end of file diff --git a/_build/html/genindex.html b/_build/html/genindex.html new file mode 100644 index 0000000..1892aea --- /dev/null +++ b/_build/html/genindex.html @@ -0,0 +1,247 @@ + + + + + + + + Index — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ + +

Index

+ +
+ +
+ + +
+ +
+
+ + +
+ + +
+
+
+

+ + By Allen B. Downey
+ + © Copyright 2020.
+

+
+
+
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/index.html b/_build/html/index.html new file mode 100644 index 0000000..9faa9b9 --- /dev/null +++ b/_build/html/index.html @@ -0,0 +1,445 @@ + + + + + + + + Astronomical Data in Python — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + +
+
+
+ +
+ +
+

Astronomical Data in Python

+

Astronomical Data in Python is an introduction to tools and practices for working with astronomical data. Topics covered include:

+
    +
  • Writing queries that select and download data from a database.

  • +
  • Using data stored in an Astropy Table or Pandas DataFrame.

  • +
  • Working with coordinates and other quantities with units.

  • +
  • Storing data in various formats.

  • +
  • Performing database join operations that combine data from multiple tables.

  • +
  • Visualizing data and preparing publication-quality figures.

  • +
+

As a running example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.

+

This material was developed in collaboration with The Carpentries and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society.

+

I am grateful for contributions from the members of the committee – Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield – and from Erin Becker, Brett Morris and Adrian Price-Whelan.

+

The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment.

+
+

Prerequisites

+

This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough.

+

We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use.

+
+
+

Notebook 1

+

This notebook demonstrates the following steps:

+
    +
  1. Making a connection to the Gaia server,

  2. +
  3. Exploring information about the database and the tables it contains,

  4. +
  5. Writing a query and sending it to the server, and finally

  6. +
  7. Downloading the response from the server as an Astropy Table.

  8. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 2

+

This notebook starts with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky.

+

Then, to select stars in the vicinity of GD-1, we:

+
    +
  • Use Quantity objects to represent measurements with units.

  • +
  • Use the Gala library to convert coordinates from one frame to another.

  • +
  • Use the ADQL keywords POLYGON, CONTAINS, and POINT to select stars that fall within a polygonal region.

  • +
  • Submit a query and download the results.

  • +
  • Store the results in a FITS file.

  • +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 3

+

Here are the steps in this notebook:

+
    +
  1. We’ll read back the results from the previous notebook, which we saved in a FITS file.

  2. +
  3. Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.

  4. +
  5. We’ll put those results into a Pandas DataFrame, which we’ll use to select stars near the centerline of GD-1.

  6. +
  7. Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD-1.

  8. +
  9. Finally, we’ll select and plot the stars whose proper motion is in that region.

  10. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 4

+

Here are the steps in this notebook:

+
    +
  1. Using data from the previous notebook, we’ll identify the values of proper motion for stars likely to be in GD-1.

  2. +
  3. Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.

  4. +
  5. We’ll also see how to write the results to a CSV file.

  6. +
+

That will make it possible to search a bigger region of the sky in a single query.

+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 5

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the candidate stars we identified in the previous notebook.

  2. +
  3. Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a JOIN operation to select photometry data for the candidate stars.

  4. +
  5. We’ll write the results to a file for use in the next notebook.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 6

+

Here are the steps in this notebook:

+
    +
  1. We’ll reload the data from the previous notebook and make a color-magnitude diagram.

  2. +
  3. Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect.

  4. +
  5. Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas DataFrame.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Notebook 7

+

Here are the steps in this notebook:

+
    +
  1. Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly.

  2. +
  3. The we’ll see several ways to customize figures to make them more appealing and effective.

  4. +
  5. Finally, we’ll see how to make a figure with multiple panels or subplots.

  6. +
+

Press this button to run this notebook on Colab:

+

+

or click here to read it on NBViewer

+
+
+

Installation instructions

+

Coming soon.

+
+
+ + + + +
+ +
+
+ + +
+ + +
+
+
+

+ + By Allen B. Downey
+ + © Copyright 2020.
+

+
+
+
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/last_resort.html b/_build/html/last_resort.html new file mode 100644 index 0000000..b708665 --- /dev/null +++ b/_build/html/last_resort.html @@ -0,0 +1,313 @@ + + + + + + + + The Notebook of Last Resort — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ +
+

The Notebook of Last Resort

+

If you are not able to get everything installed that we need for the workshop, you have the option of running this notebook on Colab.

+

Before you get started, you probably want to press the Save button!

+
+
+
# If we're running on Colab, install libraries
+
+import sys
+IN_COLAB = 'google.colab' in sys.modules
+
+if IN_COLAB:
+    !pip install astroquery astro-gala pyia
+
+
+
+
+

That should be everything you need. Now you can type code and run it in the following cells.

+
+ + + + +
+ +
+
+ + +
+ + +
+
+
+

+ + By Allen B. Downey
+ + © Copyright 2020.
+

+
+
+
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/objects.inv b/_build/html/objects.inv new file mode 100644 index 0000000..75fed17 --- /dev/null +++ b/_build/html/objects.inv @@ -0,0 +1,7 @@ +# Sphinx inventory version 2 +# Project: Python +# Version: +# The remainder of this file is compressed using zlib. +xڅj0E +@'t, +MiB[HcNdfgΜ;cK\N2zř LL BtT`r{&\GP ߜ7B-u퐐=R= qs%f$o)`e/7ZrX3TEehʿ^?]M$ b`p@-Su<QeNAZCxb(OG0!w + + + + + + Search — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ Searching for multiple words only shows matches that contain + all words. +

+
+ + + +
+ +
+ +
+ +
+ +
+
+ + +
+ + +
+
+
+

+ + By Allen B. Downey
+ + © Copyright 2020.
+

+
+
+
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/html/searchindex.js b/_build/html/searchindex.js new file mode 100644 index 0000000..04dd8bc --- /dev/null +++ b/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["01_query","02_coords","03_motion","04_select","05_join","06_photo","07_plot","README","index","last_resort","test_setup"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["01_query.md","02_coords.ipynb","03_motion.ipynb","04_select.ipynb","05_join.ipynb","06_photo.ipynb","07_plot.ipynb","README.md","index.md","last_resort.ipynb","test_setup.ipynb"],objects:{},objnames:{},objtypes:{},terms:{"000":[1,2,3],"000000e":2,"000831":5,"00347705":3,"0034770546523735":3,"0051":1,"00781":1,"0092247424630945":0,"0092427896695131561015612256418500423168":4,"009471":5,"016078":[3,5],"0160784008206476":3,"0173655836748":3,"020103160014030861015612386332668697600":4,"0203041897099641431015635614168640132864":4,"0211787423933783961015635850945892748672":4,"0212759940136962":0,"02127599401369620":0,"022652498590129771015612332147361443072":4,"0233280236600626":0,"0252932373534968981015612282738058264960":4,"0317837403475309051015612250375480101760":4,"031798":[3,5],"032476530099618431015612426744016802432":4,"0331645898811":0,"0343230288289910761015635535454774983040":4,"03521988":3,"035219883740934":3,"0360642408180257351015612331739340341760":4,"0365246268534030541015635598607974369792":4,"0366268278207166061015635737661835496576":4,"0388102681415775161015635674126383965568":4,"04016696":3,"040166963232815":3,"040191748305466981015612394926899159168":4,"042357158300018151015612241781249124608":4,"0436496516182":2,"044516":5,"0450000762939":4,"045188209150430151015635600532119713664":4,"047202554132500061015635497276810313600":4,"05037121":3,"050371212154984":3,"0512642120258362051015612296172717818624":4,"05240":0,"05242":0,"05243":0,"05244":0,"05245":0,"0536670358954670841015635860218726658176":4,"05443955111134051":0,"054439551111340510":0,"05456487172972":2,"05560":0,"0565747323689927":0,"05657473236899270":0,"058532837763820":0,"059607":2,"05981294804957":3,"05981295":3,"06138786534987":2,"06566578919313":2,"06900136127674149":0,"08333":1,"08333333":1,"086156535525720":0,"090544709622938":3,"09054471":3,"092339":[3,5],"09233926905897":3,"09631023":3,"096310230579248":3,"099625":2,"0x7f446b1e8bb0":3,"0x7f9222e9cb20":0,"0x7f922376e0a0":0,"100":[1,2,3],"1000":3,"1001":3,"1006":3,"102775":5,"10294642821734962":0,"103640":2,"1048576":0,"1049":[2,3],"105478836426514":3,"10547884":3,"106963983518598261":0,"110783":2,"113270239706202":0,"118509434328643730":0,"126":3,"1266016679823622":0,"127":3,"13070799264892050":0,"13177563215973":2,"133391":[3,5],"134":1,"135":[1,3],"135d25m17":1,"13611254":1,"136112541397996":1,"137":[3,5],"137043174954120":0,"1375007629395":4,"138":[3,5],"139374":1,"140":1,"140340":[1,2],"141":[1,2,3],"141d36m09":1,"142":2,"1422630184554958":0,"14290850381608820":0,"14290850381608822":0,"143":[1,2],"144":2,"146":1,"146d16m31":1,"150":1,"151599884033214":4,"152":1,"152d49m00":1,"1576":1,"1601903242219o":0,"1601903357321o":[],"1603114980658o":1,"1603132746237o":3,"16083338":3,"160833381392624":3,"1612":0,"163":3,"165984":2,"1660452431882023":0,"166932":2,"172":3,"172931":5,"17473118":[5,6],"17473118279569888":5,"175":4,"17532366511560785":0,"17m":2,"182":3,"18339801317677":2,"196544":[3,5],"1965441084838":3,"19923146":3,"199231461993783":3,"1993":1,"19946557779138105":3,"199466":[3,5],"19d15m42":1,"2000":[0,4],"2001":4,"2010":2,"2013":0,"2016":0,"2019":[],"2035993780158853":0,"2041189982608354":0,"209568295785240":0,"21505376":[5,6],"2150537634408602":5,"216485":[3,5],"21648525150429":3,"218492":5,"223692":[3,5],"227920":2,"234399795532218":4,"24242734020255":3,"244439":2,"245599765990594":3,"24559977":3,"247329893833296":3,"247330":[3,5],"24797471":3,"247974712069263":3,"2492850691110850":0,"25084":2,"254529":2,"25452941346344":2,"255079498426542":0,"25734489623333540":2,"257345":2,"25d52m38":1,"26190982":1,"261909820533692":1,"263":0,"264":0,"266":1,"2674800612552977":0,"267623626829920":0,"26769745823267":2,"26847919":3,"268479190206636":3,"2717538145759051":3,"271754":[3,5],"27329749":[5,6],"27329749103942647":5,"2735991502653037":0,"27533313607782":1,"27533314":1,"2780935768316":2,"27d08m10":1,"282":0,"2873":5,"287300109863317":4,"291499":5,"297472":2,"2mass":0,"3000":0,"300956585724798":5,"30095659":[5,6],"3022057897812064":0,"303":3,"304":0,"304830296257144":1,"3048303":1,"30559858565638":3,"30641519":3,"306415190921692":3,"306747":2,"306901":[3,5],"30745551377348623":3,"307456":[3,5],"3076000213623":4,"3110309037199280":0,"314514":5,"31829694530366":0,"333000183105514":4,"3339996337891":4,"334000":5,"334407":5,"335041":5,"33554432":0,"337689":5,"34082545787549":3,"34082546":3,"346409":[3,5],"346409129876392":3,"3464446494840354":0,"34644464948403540":0,"3465790413276930":0,"34d18m17":1,"357536":5,"361362712556612":3,"361363":[3,5],"36286062483080":0,"3711441829917720":0,"3724":[4,5],"3733943917490343":0,"37339439174903430":0,"376256953641620":0,"3778523888981841":0,"379299163818417":4,"3804":5,"384899139404320":4,"3891":1,"3894019486060072":0,"3897849462365591":5,"38978495":[5,6],"390952370410666":0,"396k":4,"39818224846127004":0,"398182248461270040":0,"398623940157561":3,"4057468287575835392":1,"4057468321929794432":1,"4057468351995073024":1,"4057469661959554560":1,"4057469868125641984":1,"4057470039924301696":1,"4057470349160630656":1,"4057470520960672640":1,"4057470555320409600":1,"4057482027171038976":1,"406821174303780":0,"408554916570420":0,"414829591355289":0,"41554585481808":2,"4166017695258":2,"41683":1,"4198108491382455":3,"41981085":3,"42163944":1,"42163944306296":1,"422728":2,"42361471245557913":0,"423614712455579130":0,"423940229776128":3,"42394023":3,"42442296":3,"42442296194263":3,"425404":5,"4281005859375":4,"4301075268817204":5,"43010753":[5,6],"4361400589412060":0,"43911323550176806":0,"441400527954115":4,"443":[0,1,3,4,10],"44357135":3,"443571352854612":3,"44494195652069":3,"4457":5,"44677065513286795522015":0,"4467706551328679552270":0,"44677075477573274882015":0,"4467707547757327488269":0,"44677109150118026242015":0,"4467710915011802624269":0,"44677122550373000962015":0,"4467712255037300096270":0,"44677170997669445122015":0,"4467717099766944512270":0,"44677190582657812482015":0,"4467719058265781248270":0,"4467722326741572352270":0,"44677323554910877442015":0,"4467732355491087744270":0,"44677327720945730562015":0,"44677350011817617922015":0,"4467735001181761792270":0,"44677371014219166722015":0,"4467737101421916672270":0,"450599670410219":4,"45307359523051777282015":0,"45307363646185392642015":0,"45307383617937696002015":0,"45307409387744093442015":0,"45307433439514055682015":0,"45307468443413159682015":0,"45307512810560226562015":0,"45307526511350812162015":0,"45307550606271623682015":0,"45307635131191372802015":0,"45307684566150264322015":0,"4598362614808367":0,"4603095562147530":0,"470352406647465":0,"47260492416258":3,"474147574053124":0,"47611926":3,"476119260818695":3,"476168":2,"478099822998":4,"478100":5,"483019":2,"48301935991023":2,"4830193599102321":2,"486224":2,"490481778113859":3,"490482":[3,5],"491347561327420":0,"492309":5,"4937921513912002":0,"494400024414116":4,"496":5,"503299713134813":4,"50951508623503":3,"509812721702093":0,"51108346614440":0,"515199661254919":4,"516838":2,"51683846838757662":2,"5174007415771":4,"517401":5,"517499923706116":4,"5177001953125":4,"5187065217173":3,"518707":[3,5],"52170713760118":5,"52170714":[5,6],"5223007202148":4,"522399902343816":4,"5233504963518460":0,"524288":0,"5269":0,"5270":0,"527126":[3,5],"527126084599517":3,"5281":0,"5337":1,"5376344086021505":5,"53763441":[5,6],"544584":2,"5481972":[5,6],"548197203826344":5,"557744":5,"5585239223461581":0,"559971827601260":0,"560608":[3,5],"5620173752896025":0,"5672536244872520":0,"56924278755102660":0,"576671731208250":0,"577394":2,"57739430926034":2,"584105":2,"58671691646745":3,"586717":[3,5],"58913564478618":2,"589136":2,"5902":5,"5926328820420083":3,"592633":[3,5],"594":1,"5942653":3,"594265302440828":3,"594569":5,"595792323153987":0,"6014268933659210":0,"60191317":[5,6],"601913171449596":5,"60264825":1,"60264825107333":1,"6092":5,"611722027231764":3,"61172203":3,"6117399163086398":0,"61173991630863980":0,"6122417812491246081297513437559955610":4,"61224178124912460820":4,"612250375480101760":4,"6122503754801017601297413464758974640":4,"61225037548010176015":4,"612256418500423168":4,"6122564185004231681299313490752973100":4,"61225641850042316820":4,"612282738058264960":4,"6122827380582649601297413404459335190":4,"61228273805826496022":4,"612288854091187712":4,"612296172717818624":4,"6122961727178186241296913380061687800":4,"61229617271781862417":4,"6123317393403417601301113412177938390":4,"61233173934034176021":4,"6123321473614430721301413414585387770":4,"61233214736144307221":4,"612386332668697600":4,"6123863326686976001303513545702197740":4,"61238633266869760019":4,"612394926899159168":4,"6123949268991591681305813551997517950":4,"61239492689915916816":4,"6124267440168024321305213468524656560":4,"61242674401680243217":4,"612428870024913152":4,"612429144902815104":4,"612485911486166656":4,"622":3,"6280002593994":4,"629":0,"630489":[3,5],"63048941944396":3,"635497276810313600":[4,5],"6354972768103136001308113804456319300":4,"63549727681031360019":4,"635518889086133376":4,"635535454774983040":[4,5],"6355354547749830401306313783776573690":4,"63553545477498304016":4,"635551706931167104":4,"635559124339440000":[3,4,5],"635580294233854464":4,"6355986079743697921303413920912795130":4,"63559860797436979216":4,"6356005321197136641304213922858936230":4,"63560053211971366420":4,"635614168640132864":4,"6356141686401328641305713959221401350":4,"63561416864013286416":4,"635674126383965568":[3,4,5],"6356741263839655681308313884284887200":4,"63567412638396556819":4,"6357376618354965761310013993335021360":4,"63573766183549657614":4,"635821843194387840":4,"6358509458927486721320113986549341470":4,"63585094589274867216":4,"635860218726658176":[3,4,5],"6358602187266581761309113851876713490":4,"63586021872665817617":4,"637987125186749568":2,"637987125186749568142":2,"638049655615392384":2,"638073505568978688":2,"638086386175786752":2,"6382230817672987":0,"638285195917112960":2,"64484588686904":2,"64528557468074":2,"645286":2,"6518001556396":4,"6581664892880896":0,"662702":2,"6630824372759856":5,"66308244":[5,6],"6662998199463":4,"669179465293931":0,"6691794652939310":0,"67307907024910":0,"674894125178565":3,"67489413":3,"6781005859375":4,"678101":5,"682147":5,"68874172":[5,6],"688741721854306":5,"6908739159247":2,"692":3,"702780":[3,5],"7034050179211468":5,"70340502":[5,6],"7077765320492870":0,"714023598831554":3,"7140236":3,"71891096":[5,6],"71891096394408":5,"723":0,"723655456335619":3,"72365546":3,"72480529715140":0,"726277659009568":0,"7262776590095680":0,"7295":3,"7341":5,"7342":5,"7343":5,"7344":5,"7345":5,"7346":[3,4,5],"7347140078529106":3,"73471401":3,"741800":[3,5],"7464117578883":3,"74641176":3,"748779":[3,5],"7487794924398758":3,"750":4,"7549581886719651":0,"75623260987968":3,"75623261":3,"756k":3,"757716":2,"75771616932985":2,"75912098":3,"759120984106968":3,"7702681295401":2,"770521900009566":3,"770522":[3,5],"77247179230470":0,"7741412301054209":0,"77414123010542090":0,"77696341662764":2,"779463":[3,5],"785300":5,"78587196":[5,6],"785871964679913":5,"791393":[3,5],"7913934419894347":3,"7920417800164183":0,"81671044675923":1,"81671045":1,"81762228999614":2,"8205551921782785":0,"82055519217827850":0,"8212003707886":4,"8237207945098111e":2,"823721":2,"828100204467817":4,"8288530465949819":5,"82885305":[5,6],"837752":5,"842874":[3,5],"84372158574957370":0,"857327":2,"85955659758691580":0,"864007":5,"864952855984358":0,"865699768066419":4,"871599197387719":4,"872092143634720":0,"873":3,"874312918885040":0,"8754":1,"87738722767213":1,"87738723":1,"88267277109107120":0,"88580702":3,"885807024935527":3,"8867339293525688":0,"887462805949271":0,"89470793235991240":0,"89470793235991242":0,"89551292869012":2,"897001":[3,5],"8978":5,"897800445556617":4,"902":1,"902869757174393":5,"90286976":[5,6],"9037072088489417":0,"9197224705139885":0,"921180886411620":0,"922888231734588":0,"9228882317345880":0,"923799514770516":4,"9238":5,"9242":5,"924200057983418":4,"9242670062090182":0,"926700592041":4,"927008559859825":0,"9328536286811":3,"9347319464589":2,"940":3,"941079":2,"941679":[3,5],"941679495793577":3,"941813":2,"941813096629439":2,"945956347594":2,"94628403":[5,6],"94628403237675":5,"950660":2,"95159272":3,"95159272432137":3,"951878058650085":3,"95187806":3,"95290654893304":5,"95290655":[5,6],"9612007141113":4,"967":3,"96809693073471":0,"969":3,"96k":4,"971":3,"9719742773203504":0,"97282480557786":2,"9743995666504":4,"9785380604519425":0,"9806225910160181":0,"98062259101601810":0,"9849004745483":4,"987786":2,"9923000335693":4,"999":0,"abstract":0,"boolean":[2,5],"break":[0,4],"byte":1,"case":[0,1,2,3,4,5,6],"class":[0,4],"default":6,"final":[0,2,5,6,7,8],"float":[0,1],"function":[0,1,2,3,4,5,6,7,8],"import":[0,1,2,3,4,5,6,9,10],"int":[0,1,3,4,10],"long":4,"new":[0,3,5,6],"null":5,"public":[0,6,7,8],"return":[0,1,2,3,5,7,8],"short":[0,4],"super":6,"switch":6,"transient":0,"true":[0,1,2,3,4,5,6,10],"try":[0,1,2,3,4,5],"while":[0,1,3],AND:[0,1,2,3],And:[0,1,2,3,4,5,6],Are:0,BUT:[],But:[0,1,2,3,4,5],FOR:[],For:[0,1,2,3,4,5,6],IDs:4,NOT:0,Not:6,One:[0,1,2,4],THE:[],That:[0,1,2,3,4,7,8,9],The:[0,1,2,3,4,5,6,7,8],Then:[1,2,3,4,5,6,7,8],There:[0,1,4,6],These:[0,2,5],USE:[],Use:[0,1,2,3,4,5,6,7,8,10],Using:[0,3,7,8],WITH:[],With:[0,2,3],__builtins__:1,__cached__:1,__doc__:1,__file__:1,__init__:1,__loader__:1,__name__:1,__package__:1,__path__:1,__spec__:1,_classic_test_patch:6,a_g_percentile_low:0,a_g_percentile_upp:0,a_g_val:0,aadu:1,aarcmin:1,aarcsec:1,aau:1,aba:1,abamper:1,abarn:1,abc:1,abcoulomb:1,abeam:1,abflux:1,abil:[0,2],abin:1,abit:1,abl:[0,1,2,3,4,5,6,9],abmag:1,about:[0,1,2,3,4,5,6,7,8],abov:6,abyt:1,access:[0,4,7,8],accord:4,accumul:0,accur:[0,5],acd:1,achan:1,acount:1,act:1,action:[],actual:0,add:[0,1,2,3,4,5,6,7,8],add_enabled_equival:1,add_enabled_unit:1,add_patch:6,adding:[0,3,6],addit:[3,6],adeg:1,adjust:2,adql:[0,1,2,3,4,5,7,8],adrian:[0,1,2,3,4,5,6,7,8],adu:1,advantag:[0,5],adyn:1,aerg:1,aev:1,affect:6,after:[0,1,2,3,4,5,6],again:[0,1,2,3,4,5,6],against:4,agal:1,age:[4,5],agenc:0,agg:5,ahz:1,aji:1,algorithm:4,align:[2,6],all:[0,1,2,3,4,5,6,10],allclos:1,allendownei:[2,3,4,5,6],allow:[0,2,3],allwise_best_neighbour:0,allwise_neighbourhood:0,allwise_original_valid:0,alm:1,almost:[0,4,5],along:[0,1,2,3,5,6],alpha:[2,3,4,5,6],alreadi:[1,2,5],also:[0,1,2,3,4,5,6,7,8],altern:[0,1,5,6],although:[2,3,6],altogeth:1,alwai:[0,1,2,4],alx:1,alyr:1,amag:1,american:[7,8],amin:1,amol:1,amount:3,amp:1,amper:1,ana:[0,1,2,3,4,5,6,7,8],anaconda3:1,analysi:[0,1,2,3,4,5,6,7,8],angstrom:1,angular_dist:4,ani:[0,2,3,6,10],annot:[3,7,8],annum:1,anonym:[0,1],anoth:[1,2,4,5,6,7,8],answer:5,anyon:5,anyth:3,anywai:0,aohm:1,apa:1,apart:0,apassdr9:0,apassdr9_best_neighbour:0,apassdr9_neighbourhood:0,apc:1,aph:1,aphoton:1,apix:1,apixel:1,apo:2,appar:[4,5],appeal:[6,7,8],appear:[0,1,4,5,6,7,8],append:4,appli:[2,6],applic:3,approxim:4,arad:1,arbitrari:2,archaeolog:0,archiv:1,arcmin:1,arcminut:1,arcsec:[0,1,4],arcsecond:1,area:[2,4,5,6],argument:[0,1,2,5,6],ari:1,aris:[],around:[2,3,4,5],arrai:[0,3,5,6],arrang:6,arrow:6,arrowprop:6,articl:0,arxiv:0,ascens:[0,1,2,3],asi:0,ask:[0,1,5,10],aspect:[5,6],aspx:0,asr:1,assembl:[0,1],assign:[0,4],associ:[0,1,2],assum:[0,7,8],ast:1,astro:[0,1,2,3,4,5,6,9],astrometr:0,astrometri:0,astrometric_chi2_:0,astrometric_excess_nois:0,astrometric_excess_noise_sig:0,astrometric_gof_:0,astrometric_matched_observ:0,astrometric_n_bad_obs_:0,astrometric_n_good_obs_:0,astrometric_n_obs_:0,astrometric_n_obs_ac:0,astrometric_params_solv:0,astrometric_primary_flag:0,astrometric_pseudo_colour:0,astrometric_pseudo_colour_error:0,astrometric_sigma5d_max:0,astrometric_weight_:0,astronom:0,astronometri:0,astronomi:[0,1,2,3,4,5,6,7,8],astronomical_unit:1,astronomicaldata:[1,2,3,4,5,6],astrophi:1,astropi:[0,1,2,3,4,5,7,8,10],astroqueri:[0,1,2,3,4,5,6,9,10],async_20201005090722:0,async_20201005090917:[],async_20201019094300:1,async_20201019143906:3,attempt:0,attent:6,attoamp:1,attoamper:1,attoannum:1,attoarcminut:1,attoarcsecond:1,attoastronomical_unit:1,attobarn:1,attobary:1,attobit:1,attobyt:1,attocandela:1,attocoulomb:1,attocount:1,attoda:1,attodai:1,attodalton:1,attodeby:1,attodegre:1,attodyn:1,attoelectronvolt:1,attofarad:1,attog:1,attogauss:1,attogram:1,attohenri:1,attohertz:1,attohour:1,attohr:1,attojanski:1,attojoul:1,attokays:1,attokelvin:1,attolightyear:1,attolit:1,attolumen:1,attolux:1,attomet:1,attominut:1,attomol:1,attonewton:1,attoohm:1,attoparsec:1,attopasc:1,attophoton:1,attopixel:1,attopois:1,attoradian:1,attorayleigh:1,attorydberg:1,attosecond:1,attosiemen:1,attosteradian:1,attostok:1,attotesla:1,attovolt:1,attovoxel:1,attowatt:1,attoweb:1,attoyear:1,attribut:[2,4],audienc:6,author:[5,6],automat:5,aux_allwise_agn_gdr2_cross_id:0,aux_iers_gdr2_cross_id:0,aux_qso_icrf2_match:0,aux_sso_orbit:0,aux_sso_orbit_residu:0,avail:[0,4,5,6,7],avoid:[0,2,3],avox:1,avoxel:1,awai:[0,2],awar:7,awb:1,awkward:2,axes:[2,5,6],axi:[1,2,5,6],axvlin:6,ayr:1,azale:[6,7,8],back:[0,1,3,4,5,6,7,8],background:[0,4,5,6],bad:[0,3,4],badli:2,band:[4,5],bar:1,barn:1,bary:1,base:[0,1,3,4,6,7,8],basi:0,basic:[0,7,8],beam:1,beam_angular_area:1,beaten:[0,1,2,3,4,5,6,7,8],becaus:[0,1,2,4,5],becker:[7,8],becom:3,becquerel:1,bednar:[],been:[0,4,5,6],befor:[0,1,2,3,4,5,6,9],begin:2,behav:1,behavior:6,being:0,belong:1,below:[2,6,7,8],benefit:5,best_neighbour_multipl:4,better:[3,6],between:[0,1,2,3,4,5],big:[0,1,2,3,4,6],bigger:[0,1,2,3,6,7,8],bin:1,binari:[2,3,4],binary_prefix:1,biot:1,bit:[0,1],black:[2,6],blue:2,bluer:5,bmh:6,bol:1,bonaca:[0,1,2,3,4,5,6,7,8],bonu:4,bool:[2,5],bostroem:[6,7,8],both:[0,2,4,5],bottom:[3,6],bound:[0,2,3],boundari:5,bp_g:0,bp_rp:[0,1,3,4],brace:0,bracket:[0,2,4],brett:[7,8],briefli:4,bright:[5,6],brighter:5,brightness_temperatur:1,broadband:0,builtin_fram:1,button:[7,8,9],c_gd1:3,c_sky:3,cadu:1,calcul:2,calibr:0,call:[0,1,2,4,5,6],camera:0,can:[0,1,2,3,4,5,6,7,8,9],candela:1,candid:[2,4,5,6,7,8],candidate_df:[3,4,5,6],candidate_t:[3,4],capabl:2,capit:0,caption:6,carcmin:1,carcsec:1,care:0,carpentri:[0,1,2,3,4,5,6,7,8],catalog:[0,4],catalogu:0,cau:1,caus:[0,1,2],caveat:3,cba:1,cbarn:1,cbeam:1,cbin:1,cbit:1,cbyte:1,ccd:1,cchan:1,ccount:1,cct:1,cdeg:1,cdyn:1,celesti:1,cell:[0,1,2,3,4,5,6,9],celsiu:1,center:[0,1,2,3],centerlin:[3,6,7,8],centiamp:1,centiamper:1,centiannum:1,centiarcminut:1,centiarcsecond:1,centiastronomical_unit:1,centibarn:1,centibary:1,centibit:1,centibyt:1,centicandela:1,centicoulomb:1,centicount:1,centida:1,centidai:1,centidalton:1,centideby:1,centidegre:1,centidyn:1,centielectronvolt:1,centifarad:1,centig:1,centigauss:1,centigram:1,centihenri:1,centihertz:1,centihour:1,centihr:1,centijanski:1,centijoul:1,centikays:1,centikelvin:1,centilightyear:1,centilit:1,centilumen:1,centilux:1,centimet:1,centiminut:1,centimol:1,centinewton:1,centiohm:1,centiparsec:1,centipasc:1,centiphoton:1,centipixel:1,centipois:1,centiradian:1,centirayleigh:1,centirydberg:1,centisecond:1,centisiemen:1,centisteradian:1,centistok:1,centitesla:1,centivolt:1,centivoxel:1,centiwatt:1,centiweb:1,centiyear:1,cepheid:0,cerg:1,cev:1,cgal:1,cgs:1,challeng:[0,4],chamber:0,chan:1,chang:[0,2,4,5,6],character:0,charg:[],check:[1,2,3,4,5,6],choic:[0,2,6],choos:[0,2,4,5,6],chose:[2,5],chosen:6,chz:1,circ:1,circl:1,circular:[1,7,8],cjy:1,claim:[],classic:6,claus:[0,3,4],clean:[2,5],clear:4,clearli:[2,3,4,6,7,8],click:[5,7,8],clm:1,clock:0,close:[5,6],clue:0,clump:0,cluster:[0,2,4,5],clx:1,clyr:1,cmag:1,cmin:1,cmol:1,code:[0,1,2,3,4,5,6,9,10],cohm:1,colab:[0,1,2,3,4,5,6,7,8,9],cold:0,collabor:[7,8],collect:[0,3],collis:0,colnam:[2,4,5],color:[0,2,4,5,6,7,8],colorblind10:6,colorblind:6,colspan:6,column:[1,3,4,5,6],com:[2,3,4,5,6],combin:[0,4,5,6,7,8],come:[0,1,6,7,8],comma:[1,3],command:[0,5,6],committe:[7,8],common:[0,1,3,4],commonli:0,commun:6,compar:[2,3,5],comparison:[0,2],compel:6,compellingli:[3,6],complet:[0,1,2,3,4,5,6],complex:[1,3],compon:2,compos:[0,1,3,7,8],compositeunit:1,comprehens:6,compress:6,comput:[0,1,2,3,4,5,6],con:2,conda:2,condit:3,cone:[1,4,7,8],configur:6,confirm:[0,2,3,4],confusingli:6,connect:[1,3,4,5,7,8,10],consid:6,consider:0,consist:[4,5,6],constant:2,construct:2,contain:[0,1,2,3,4,5,6,7,8],contains_point:5,content:[0,2],continu:[0,4,5,6],contract:[],contribut:[7,8],control:[2,5,6],conveni:[2,4,6],convent:[2,5],convert:[1,2,3,4,5,7,8],convex:3,convexhul:3,cookbook:0,coord:[1,3,5,6,10],coord_si:0,coordin:[0,2,3,5,6,7,8,10],coordind:6,coords2:5,coords2_df:5,coords_df:[5,6],copi:[],copyright:[],core:[0,1,2,3,4],corner:[1,2,3],corners_icr:[1,3],correct:2,correspond:[2,3,4],cosmic:0,could:[0,2,3,4,5,6],coulomb:1,count:[0,1,4,5],cover:[0,2,3,7,8],cpa:1,cpc:1,cph:1,cphoton:1,cpix:1,cpixel:1,crad:1,creat:[0,1,2,3,4,5,6,10],criterion:3,critieria:4,cross:[0,2,4,5],cry:1,csr:1,cst:1,csv:[7,8],curat:0,curi:1,curiou:6,curli:0,current:[0,2,5,6],curriculum:[7,8],custom:[3,7,8],cut:10,cvox:1,cvoxel:1,cwb:1,cycl:1,cyr:1,dai:0,dalton:1,damag:[],dark:[0,6],dark_background:6,darkgrid:6,dash:6,data:6,databas:[2,3,4,5,7,8],datafram:[0,4,5,6,7,8],datalink_url:0,dataset:[0,1,2,4,5,7,8],datatyp:4,dau:1,dba:1,deal:5,debug:[0,1],deby:1,dec:[0,1,2,3,4,5],dec_error:0,dec_parallax_corr:0,dec_pmdec_corr:0,dec_pmra_corr:0,decibel:1,decibelunit:1,declin:[0,1,2,3],decmean:0,decstack:0,deep:6,def:[2,3,5,6],defin:[1,3,5,6],definit:4,deg:[0,1,2,3,6],degdegma:[0,2],degre:[0,1,2,3,4,5],delet:2,deliber:0,demonstr:[0,6,7,8],denomin:3,dens:2,densiti:2,depend:5,deriv:5,describ:4,descript:[0,1,2,3,4],design:[0,6],detail:[0,2,4,5,6],detect:[0,1,4],determin:[5,6],detrend:0,develop:[0,1,2,4,7,8],dex:1,dexunit:1,dgal:1,dhz:1,diagnost:0,diagram:[0,4,5,6,7,8],dialect:0,dict:6,dictionari:[0,7,8],did:[2,3,4],didn:[4,5],differ:[0,2,4,5,6],difficult:[1,3,4],digit:4,dimens:6,dimensionless:1,dir:[1,2,3,4,5],direct:[0,1,2,3,6],directli:5,directori:6,dirti:6,disappear:0,disast:1,disastr:1,discuss:[0,6],disk:[0,1],displai:[0,1,2,5,6],distanc:[0,2,3,4,5],distinguish:[2,4,5,6],distribut:[],diverg:7,divid:0,djy:1,document:[0,1,2,4,5,6],doe:[0,1,2,5,7,8],doesn:[0,5],dohm:1,domain:2,don:[0,1,2,3,5,6,10],done:[0,1,4,5,6],doubl:4,doubt:5,down:[0,1,4],downei:[1,2,3,4,5],download:[0,1,2,3,4,5,6,7,8,10],dpa:1,dr1:0,dr1_neighbourhood:0,draw:[2,6],drawback:[0,2,4],drew:5,drive:0,dry:1,dst:1,dtype:[0,1,2,3,4,5],dual:0,due:2,duplicated_sourc:0,dure:[2,10],dwarf:[0,4],e_bp_min_rp_percentile_low:0,e_bp_min_rp_percentile_upp:0,e_bp_min_rp_v:0,each:[0,2,3,4,5,6],eadu:1,earcmin:1,earcsec:1,earlier:0,easi:[2,4,5,6],easier:[0,5,6],eau:1,eba:1,ebarn:1,ebeam:1,ebin:1,ebit:1,ebyt:1,ecd:1,echan:1,ecl_lat:0,ecl_lon:0,ecount:1,ect:1,edeg:1,edu:0,edyn:1,eerg:1,eev:1,effect:[0,2,6,7,8],effici:3,egal:1,ehz:1,eib:1,eibit:1,eibyt:1,either:[0,2,3],eji:1,element:[2,3,5,6],elm:1,els:[3,5],elx:1,elyr:1,emag:1,emin:1,emol:1,enclos:3,encod:4,encount:10,end:[1,4,6],engin:6,enough:[0,4,6,7,8],ensur:5,entir:[0,4,6],entiti:5,entri:0,env:1,environ:[5,7,8],eohm:1,epa:1,epc:1,eph:1,ephoton:1,epix:1,epixel:1,epoch:0,epoch_mean:0,epoch_photometry_url:0,equal:[0,4,5,6],erad:1,eri:1,erin:[7,8],error:[0,1,2,3,6,10],esa:[0,1,3,4,10],esac:[0,1,3,4,10],especi:2,esr:1,est:1,estim:[0,2],etc:[0,5],european:0,even:[0,4,5],event:[],eventu:0,everi:[0,2,4,5],everyth:[0,3,4,9],evox:1,evoxel:1,ewb:1,exactli:[5,6],exampl:[0,1,2,3,4,5,6,7,8],exce:2,except:[0,2],exclud:[0,4],exercis:[0,1,2,3,4,6],exist:[1,2,3,4,5,6],expect:[0,1,2,3,4,5,7,8],experi:[0,5],expertis:2,explain:[0,2,4],explicitli:[1,5],explor:[0,2,4,6,7,8],express:[2,6],exquisit:0,ext_phot_zero_point:0,extend:1,extens:2,extern:[0,4],extra:6,extract:[0,2],eye:[2,5],eyr:1,facecolor:6,fact:5,fail:[0,10],fall:[1,2,3,4,5,7,8],fals:[2,5,6],familiar:[0,2,6,7,8],faq:0,far:[0,2,4,6],farad:1,farther:0,fast:[2,6],faster:[0,1,2],featur:[0,4,6],feel:0,few:[0,2,3,6],fewer:[0,5],field:[0,4],fifth:4,figsiz:[5,6],figur:[0,1,2,3,4,5,7,8],file:[0,1,2,3,4,5,6,7,8],filenam:[1,2,3,4,5,6],filepath:5,fill:[3,6],filter:[0,3,5],find:[0,2,4,6],finish:[0,1,3,4],first:[0,1,2,3,4,5,6],fit:[1,2,3,4,5,7,8],five:0,fivethirtyeight:6,fix:2,flame_flag:0,flatten:3,flewel:0,float64:[0,1,2,3],focu:6,follow:[0,1,2,3,4,5,6,7,8,9],fontsiz:6,forc:0,foreground:[0,4],form:[1,2,4,7],format:[1,2,3,4,5,7,8],forthcom:0,fortun:4,found:[0,4,6],four:6,fourth:3,fraction:[0,3],fragil:0,frame:[1,2,3,4,5,7,8],frame_rotator_object_typ:0,franklin:1,free:[],from:[0,1,2,3,4,5,6,7,8,10],from_panda:[2,4],full:5,functionquant:1,functionunitbas:1,fund:[7,8],furnish:[],further:[4,5],futur:7,g_0:[5,6],g_flag:0,g_mean_psf_mag:[0,4,5,6],g_mean_psf_mag_error:0,g_rp:0,gadu:1,gaia:[1,2,3,4,5,6,7,8,10],gaia_astrometric_param:4,gaia_data:[2,3],gaia_sourc:[0,1,3],gaiadata:[2,3,10],gaiadr1:0,gaiadr2:[0,1,3,4],gaiadr2_geometric_dist:0,gal:1,gala:[0,1,2,3,4,5,6,7,8,9,10],galact:[0,2],galaxi:0,galex_ai:0,gap:6,garcmin:1,garcsec:1,gau:1,gauss:1,gba:1,gbarn:1,gbeam:1,gbin:1,gbit:1,gbyte:1,gca:[5,6],gcd:1,gchan:1,gcount:1,gct:1,gd1:[1,2,3,4,5],gd1_candid:[3,4,5,6],gd1_coord:2,gd1_datafram:[2,3,6],gd1_merg:[5,6],gd1_photo:[4,5],gd1_polygon:[5,6],gd1_result:[1,2],gd1koposov10:[1,2,3],gdeg:1,gdyn:1,gea:[0,1,3,4,10],geadata:[0,1,3,4,10],gener:[0,2,4,6],geometr:5,gerg:1,get:[0,2,3,5,6,9,10],get_configdir:6,get_qualified_nam:0,get_result:[0,1,3,4],get_skycoord:[2,3],gev:1,ggal:1,ggplot:6,ghz:1,gib:1,gibit:1,gibyt:1,gigapixel:0,ginput:5,github:[2,3,4,5,6],give:5,gjy:1,glm:1,globular:[0,4,5],glx:1,glyr:1,gmag:1,gmin:1,gmol:1,goal:[0,4,5],gohm:1,going:2,good:[0,1,2,5,6],googl:[0,1,2,3,4,5,6,9],gorilla:0,got:3,gotcha:[0,4],gpa:1,gpc:1,gph:1,gphoton:1,gpix:1,gpixel:1,grad:1,grai:6,grant:[],grate:[2,7,8],grayscal:6,greater:0,green:[3,5],grid:6,gry:1,gsc23_best_neighbour:0,gsc23_neighbourhood:0,gsc23_original_valid:0,gsr:1,gst:1,guess:[0,2],guid:6,gvox:1,gvoxel:1,gwb:1,gyr:1,had:0,hand:[2,3,5],handbook:2,happen:[0,4,6],hard:[0,4],has:[0,1,2,3,4,5,6],have:[0,1,2,3,4,5,6,9],hawaii:0,hdf5:[2,3,4,5,6],head:[2,3,4,5],headlength:6,headwidth:6,heliocentr:1,help:[0,2,6],henc:2,henri:1,here:[0,1,2,3,4,5,6,7,8],herebi:[],hertz:1,hertzsprung:0,hierarch:2,high:2,higher:5,highli:0,highlight:[3,5],hint:[0,4],hipparco:0,hipparcos2_best_neighbour:0,hipparcos2_neighbourhood:0,hipparcos_newreduct:0,his:2,histogram:4,hogg:2,holder:[],home:[0,1],hope:4,host:[0,1,3,4,10],how:[0,1,2,3,4,5,6,7,8],howev:[0,2,3,4,5],http:[0,1,2,3,4,5,6,10],hubble_sc:0,hull:3,human:1,i_flag:0,i_mean_psf_mag:[0,4,5,6],i_mean_psf_mag_error:0,icr:[1,2,3,4,5,7,8],idea:[0,5],ideal:1,ident:[3,4],identifi:[0,1,2,3,4,5,6,7,8],ifa:0,ignor:2,igsl_sourc:0,igsl_source_catalog_id:0,imag:0,immedi:0,implement:2,impli:[],implic:0,improv:[3,6],in_colab:[0,1,2,3,4,5,6,9],inaccur:[0,2],includ:[0,1,2,4,5,6,7,8],inconsist:5,increment:[0,1,4],index:[2,3],indic:[0,2,3,4,5,6],individu:[2,6],info:[0,1,2,3,4],inform:[0,1,2,3,4,6,7,8],input:0,insid:[3,5,6],inspect:4,instal:[7,9],instanc:4,instead:0,institut:[0,7,8],instruct:[0,1,2,3,4,5,6,7],int32:3,int64:[0,1,2,3,4],int64float64float64:4,int64float64float64float64float64:0,int64float64float64float64float64float64float64float64:[0,2],int64int64float64int32int16int16int16int64:4,integ:2,intend:6,interact:0,interest:[0,5],interfac:[0,2,5,6],intern:1,internet:10,interpret:5,introduc:5,introduct:[0,7,8],invert:[0,5],invert_yaxi:[5,6],invok:[0,1],involv:4,irreducibleunit:1,isochron:[4,5],isol:0,iter:1,its:[0,1,4,6],itself:0,ivoa:4,jake:2,jan:[],janski:1,job1:[0,4],job2:[0,4],job3:0,job:[0,1,3,4,5],jobid:[0,1,3],join:[0,1,3,5,7,8],joul:1,journal:6,jupyt:[0,1,5,7,8],just:[3,4,5],kayser:1,keep:[0,2],kei:[0,2,4],kelvin:1,kept:0,key_column:0,keyword:[0,1,2,5,7,8],kib:1,kibit:1,kibyt:1,kind:[3,4],know:[0,1,2,4,7,8],knowledg:[0,7,8],known:6,koposov:2,kpc:[2,3],l_bol:1,l_sun:1,label:[2,6],languag:2,larg:[0,2,3],larger:[0,2,3],last:[0,3,5],later:[0,1,2],launch:[0,1],launch_job:[0,1],launch_job_async:[0,1,3,4],learn:[0,3,4,5,6],least:[0,3],leav:[0,5,6],led:0,left:[1,2,3,4,5],legibl:6,len:[1,2,3,4,5],length:[0,1,2,3,4,5],less:[0,1,2,3,4,5],lesser:5,lesson:[0,1,2,3,4,5,6,7],let:[0,1,2,3,4,5,6],letter:2,level:[0,5,7,8],liabil:[],liabl:[],lib:1,librari:[7,8,9,10],like:[0,1,2,3,4,5,6,7,8],limit:[0,1,2,3],line:[0,2,3,5,6],link:[0,1,2,3,4,5,6,7,8],linnean:0,list:[0,1,2,3,4,5,6,7,8],liter:0,littl:[0,1,4,5,6],load:[0,2,3],load_tabl:0,loc:6,local:[1,2,4,5],locat:[1,2,6],logic:[0,2],logquant:1,logunit:1,longer:[0,1,4],longest:0,look:[0,2,3,4,5,6],loop:[0,1],lose:3,lost:3,lot:0,low:[0,2,4],lower:[2,5],lowercas:0,lsun:1,lum_percentile_low:0,lum_percentile_upp:0,lum_val:0,luminos:[0,4],m_bol:1,m_e:1,m_earth:1,m_jup:1,m_jupit:1,m_p:1,m_sun:1,mac:10,made:[0,2,3,5,6],madu:1,mag:[4,5],magazin:0,magnier:0,magnitud:[0,1,4,5,6,7,8],magunit:1,main:[0,1,2,3,4,5,6,7,8],make:[0,1,2,3,4,5,7,8],make_datafram:3,manag:[1,3],mani:[0,1,2,4,5,6],manual:0,maraud:0,marcmin:1,marcsec:1,mark:5,marker:2,markers:[2,3,4,5,6],mas:[0,1,2,3,6],mask:[2,3,5],mass:0,mastweb:0,match:[0,4,5,6],matched_observ:0,materi:[7,8],math:6,mathemat:6,mathrm:[1,6],mathtext:6,matlab:[2,6],matplotlib:[2,3,4,5,6,10],matplotlibrc:6,matter:0,mau:1,max_parallax:0,mba:1,mbarn:1,mbeam:1,mbin:1,mbit:1,mbyte:1,mcd:1,mchan:1,mcount:1,mct:1,mdeg:1,mdyn:1,mean:[0,1,2,4,5,6],mean_varpi_factor_:0,meanobject:0,meant:0,mearth:1,measur:[0,1,2,7,8],medium:6,member:[0,7,8],memori:[0,2],mention:0,merchant:[],merg:[1,6,7,8],messag:[0,6,10],meta2:0,meta:[0,4],metadata:[0,1,2,3],metal:[4,5],meter:0,method:[0,7,8],methodolog:6,mev:1,mgal:1,mhz:1,mib:1,mibit:1,mibyt:1,might:[0,1,2,3,4,5,6,7,10],milki:0,million:1,minim:[3,6],minut:1,mislead:0,misrepres:2,miss:10,mitig:0,mjup:1,mjupit:1,mjy:1,mlm:1,mlx:1,mlyr:1,mmag:1,mmin:1,mmol:1,model:0,modern:6,modifi:[0,3],modul:[0,1,2,3,4,5,6,9],mohm:1,monitor:0,montez:[7,8],month:2,more:[0,1,2,4,5,6,7,8],morri:[7,8],most:[0,1,2,3,4,5,6],mostli:6,motion:[0,1,4,5,6,7,8],motiv:2,move:[3,4],mpa:1,mpc:1,mph:1,mphoton:1,mpix:1,mpixel:1,mpl:[5,6,10],mplstyle:6,mrad:1,mry:1,msr:1,mst:1,msun:1,mu_:6,much:[0,2,3,5],multi:2,multipl:[0,4,5,7,8],multipli:1,mute:6,mvox:1,mvoxel:1,mwb:1,myr:1,n_bad:[0,1,3],n_detect:0,name:[0,1,2,3,4,5],namedunit:1,nan:[3,5],natur:[0,2],nbviewer:[7,8],ndetect:0,nearbi:0,nearli:2,necessari:3,necessarili:[0,1,6,7,8],need:[0,1,2,3,4,5,6,7,8,9,10],neg:0,neighbor:4,neither:0,net:4,network:[0,4],newton:1,next:[1,2,3,4,5,7,8],nfrom:0,nice:4,non:[2,5],nonamespaceschemaloc:4,none:[0,1,3,5],noninfring:[],nor:0,normal:0,notabl:3,note:[0,2,4,6,10],notebook:[0,1,2,3,4,5,6,7,10],notic:[0,1,2,3,4,5,6],notnul:5,now:[0,1,2,3,4,5,6,9],nsource_id:0,nuisanc:0,num:0,number:[0,1,2,3,4,5,6],number_of_m:4,number_of_neighbor:4,number_of_neighbour:4,numpi:[3,5,6,10],nundetect:6,nwhere:0,obj_id:[0,4],obj_info_flag:0,obj_nam:0,object:[0,1,2,3,4,5,6,7,8],objectthin:0,objinfoflag:0,observ:[0,2],observatori:0,obtain:[],obviou:5,oct:[1,2,3,4,5],off:[0,1,2,3,4,5,6,7,8],often:[0,1],ohm:1,old:2,older:5,onc:[0,1,2],one:[0,1,2,4,5,6,7,8],ones:[0,3,6],onli:[0,1,2,3,4,5,6,7,8],onlin:0,only_nam:0,open:10,oper:[2,3,4,5,7,8],opportun:4,oppos:[0,4],option:[0,1,2,3,5,6,9],orbit:[0,1],order:[0,1,3,4,6],org:4,orient:6,origin:[0,2,3,4,5,6,7,8],original_ext_source_id:4,other:[0,1,2,3,4,5,6,7,8],otherwis:[1,2,5],our:[0,1,2,3,4,5],out:[0,1,2,3,4,5,6],outerspac:0,output:[0,1,3],outsid:[0,1,2,3,4,5,6,7,8],over:4,overdens:[2,3,5],overlap:[2,6],overplot:2,overrid:6,overwrit:[1,4],overwritten:1,own:[0,1,2,3,4,5,6,7,8],owner:[0,1,3],packag:[1,2,6],padu:1,pair:[4,5],palett:6,pan:[0,3,4,5,6],panda:[0,3,4,5,6,7,8,10],panel:[2,3,7,8],panoram:0,panstarr:0,panstarrs1_best_neighbour:[0,4],panstarrs1_neighbourhood:0,panstarrs1_original_valid:[0,4],panstarrs1originalvalid:0,paper:[0,1,2,3,4,5,6,7,8],parallax:[0,1,2,3,5],parallax_error:[0,1,2,3,5],parallax_over_error:0,parallax_pmdec_corr:0,parallax_pmra_corr:0,paramet:[0,5,6,7,8],parcmin:1,parcsec:1,parenthes:2,pars:0,part:[0,1,2,3,4,5,6,7,8],particular:[0,1,2,3],particularli:[0,6],pascal:1,pass:[1,3,5],past:[0,10],pastel:6,patch:[6,10],path:[0,1,2,3,4,5,6,7,8,10],pau:1,pba:1,pbarn:1,pbeam:1,pbin:1,pbit:1,pbyte:1,pcd:1,pchan:1,pcount:1,pct:1,pdeg:1,pdyn:1,peopl:[0,4,6,7,8],per:0,perform:[0,5,7,8],perg:1,perimet:3,permiss:[],permit:[],persist:0,person:[],pev:1,pgal:1,phase:[0,1,3],phi1:[1,2,3,4,5,6],phi1_mask:2,phi1_max:[1,3],phi1_min:[1,3],phi1_rect:[1,3],phi2:[1,2,3,4,5,6],phi2_max:[1,2,3],phi2_min:[1,2,3],phi2_rect:[1,3],phi_1:[1,6],phi_2:[1,6],phi_mask:2,phil:[7,8],phot_bp_mean_flux:0,phot_bp_mean_flux_error:0,phot_bp_mean_flux_over_error:0,phot_bp_mean_mag:0,phot_bp_n_ob:0,phot_bp_rp_excess_factor:0,phot_g_mean_flux:0,phot_g_mean_flux_error:0,phot_g_mean_flux_over_error:0,phot_g_mean_mag:0,phot_g_n_ob:0,phot_proc_mod:0,phot_rp_mean_flux:0,phot_rp_mean_flux_error:0,phot_rp_mean_flux_over_error:0,phot_rp_mean_mag:0,phot_rp_n_ob:0,phot_variable_flag:0,phot_variable_time_series_gfov:0,phot_variable_time_series_gfov_statistical_paramet:0,photo_df:5,photo_t:5,photometr:0,photometri:[0,3,6,7,8],physic:[0,1,7,8],phz:1,pib:1,pibit:1,pibyt:1,pick:[1,2,3,4],pictur:6,piec:4,pip:[0,1,2,3,4,5,6,9],pipelin:5,pixel:0,pjy:1,place:0,placehold:0,placement:6,plain:[3,4],plan:4,plm:1,plot:[4,7,8],plot_cmd:[5,6],plot_first_select:6,plot_proper_mot:6,plot_second_select:6,plt:[2,3,4,5,6,10],plu:4,plx:1,plyr:1,pm1:[2,3,6],pm1_max:[2,3,6],pm1_min:[2,3,6],pm1_rect:[2,3,6],pm2:[2,3,6],pm2_max:[2,3,6],pm2_min:[2,3,6],pm2_rect:[2,3,6],pm_mask:2,pm_phi1:[2,3,5,6],pm_phi1_cosphi2:[2,3],pm_phi2:[2,3,5,6],pm_point_list:3,pm_vertic:3,pmag:1,pmdec:[0,1,2,3,5],pmdec_error:0,pmdec_poli:3,pmin:1,pmol:1,pmra:[0,1,2,3,5],pmra_error:0,pmra_pmdec_corr:0,pmra_poli:3,pohm:1,point:[0,1,2,3,7,8],point_bas:[1,3],point_list:[1,3],poli:6,polygon:[2,3,6,7,8,10],port:[0,1,3,4,10],portion:[],posit:[0,4,5,6],possibl:[0,1,3,4,6,7,8],post1:4,poster:6,potenti:0,power:5,ppa:1,ppc:1,pph:1,pphoton:1,ppix:1,ppixel:1,ppmxl_best_neighbour:0,ppmxl_neighbourhood:0,ppmxl_original_valid:0,practic:[7,8],prad:1,precis:[0,2],predefin:6,prefer:[0,3,6],prefix:6,prefixunit:1,prepar:[0,2,6,7,8],prerequisit:7,presenc:0,present:[0,3,4,6,7,8],preserv:1,press:[7,8,9],pretti:[2,3],previou:[0,1,2,3,4,5,6,7,8],previous:6,priam_flag:0,price:[0,1,2,3,4,5,6,7,8],primari:6,print:[0,1,2,3,4,5,6],prior:[0,2],pro:2,probabl:[0,5,9],problem:[0,2,3,4,5,6,10],process:[0,2,3,4,6],produc:[0,4,5],product:0,profession:6,program:[0,1],project:[2,6],prone:[0,1],proof:1,proper:[0,1,4,5,6,7,8],proper_mot:2,properti:[0,6],protocol:[0,4],provid:[0,1,2,3,4,5,6],pry:1,ps1:0,ps1casjob:0,psr:1,pst:1,pswww:0,publish:[],pull:3,purpos:[2,5],put:[2,6,7,8,10],pvox:1,pvoxel:1,pwb:1,pyia:[0,1,2,3,4,5,6,9,10],pyplot:[2,3,4,5,6,10],pyr:1,pytabl:[2,5],python3:1,python:[0,1,2,3,4,5,6],qhull:3,quadrant:5,qualiti:[0,6,7,8],quality_flag:0,quantiti:[0,1,7,8],quantityinfo:1,quantityinfobas:1,queri:[1,2,4,5,7,8],query1:[0,4],query2:[0,4],query3:0,query3_bas:0,query4:0,query4_bas:0,query_bas:[1,3],question:6,quick:6,quot:0,r_earth:1,r_flag:0,r_jup:1,r_jupit:1,r_mean_psf_mag:0,r_mean_psf_mag_error:0,r_sun:1,ra_dec_corr:0,ra_error:0,ra_parallax_corr:0,ra_pmdec_corr:0,ra_pmra_corr:0,radial:[0,1,2,3],radial_veloc:[0,1,2,3,5],radial_velocity_error:0,radiu:1,radius_percentile_low:0,radius_percentile_upp:0,radius_v:0,ramean:0,ran:2,random_index:0,rapid:0,rastack:0,rather:[2,4,5],ratio:[5,6],ravedr5_best_neighbour:0,ravedr5_com:0,ravedr5_dr5:0,ravedr5_gra:0,ravedr5_neighbourhood:0,ravedr5_on:0,raw:[2,3,4,5,6],rayleigh:1,read:[0,1,2,3,4,5,6,7,8],read_back_csv:3,read_back_df:2,read_csv:3,read_hdf:[2,3,4,5,6],readabl:1,reader:6,readi:[2,5,6],realli:[0,3,4],rearth:1,reason:[0,2,5],receiv:[0,1,2,3,4,5,6],recent:[0,1,2,3,4,5,6,7,8],recogn:5,reconstruct:0,record:[4,5],rectangl:[2,3,6],rectangular:2,red:[4,5],reduc:0,ref_epoch:0,refer:[0,1,4],reflex:2,reflex_correct:[2,3],refresh:2,region:[2,5,6,7,8],rel:[0,2,3,6],relat:[1,2,3,4,5,6],relationship:4,releas:[0,1,2,3],reload:[1,6,7,8],rememb:[0,2,4],remind:3,remov:0,remove_job:0,reorder:0,repeat:0,repetit:0,replac:[0,1,2],replic:[0,1,2,3,4,5,6,7,8],repositori:[2,6,7,8],repres:[0,1,2,5,6,7,8],represent:1,reproduc:[1,5],reproducibil:5,requir:[0,2,3,6],research:5,resist:0,resourc:4,respons:[0,7,8],rest:2,restrict:1,result:[0,2,3,4,5,6,7,8],results1:[0,4],results2:[0,4],results3:0,retriev:0,reveal:[0,1,2,3,4,5,6,7,8],revers:6,review:[3,6],rewind:0,rich:4,right:[0,1,2,3,4,5],rix:2,rjup:1,rjupit:1,rodolfo:[7,8],rosenfield:[7,8],roughli:2,round:[2,3,4,5],row:[0,1,3,4,5,6],rrlyra:0,rsun:1,run:[0,1,2,3,4,5,6,7,8,9,10],russel:0,ruw:0,rv_nb_transit:0,rv_template_fe_h:0,rv_template_logg:0,rv_template_teff:0,sai:0,same:[0,2,3,4,5,6],sampl:0,save:[6,7,8,9],saw:[1,3,4],scale:[0,5],scan:2,scar:0,scatterplot:2,schema:[0,4],scienc:[0,2],scientif:[0,1,5,6],scipi:3,sdss_dr9_best_neighbour:0,sdss_dr9_neighbourhood:0,sdssdr13_photoprimari:0,sdssdr9_best_neighbour:0,sdssdr9_neighbourhood:0,sdssdr9_original_valid:0,seaborn:6,search:[1,3,4,7,8],second:[0,1,2,3,4,5,6],section:[0,2,5],see:[0,1,2,3,4,5,6,7,8],seem:[0,2,5,6],seen:6,select:[0,4,6,7,8],selected_t:2,self:[0,4],sell:[],send:[0,7,8],sens:[2,3],sensit:0,separ:[1,3,6],sequenc:[4,5,6],seri:[1,2,3,4,5,6,7,8],serial:4,server:[0,1,2,3,4,5,7,8,10],set:[0,1,2,3,4,5,6,7,8,10],setup:[0,1,2,3,4,5,6],seventh:6,sever:[6,7,8],shade:[2,4,5,6],shall:[],shape:[1,2,3,6],shorten:2,should:[0,1,2,3,4,5,6,7,8,9],show:[0,2,3,4,5,6],shown:2,shrink:6,shut:[0,1],side:6,siemen:1,similar:[0,2,4,6],similarli:4,simpl:[0,1,2,6],simplest:4,simplif:5,sinc:[1,2,4,5,6],singl:[0,1,3,4,5,6,7,8],site:1,sixth:5,size:[1,2,3,4,5,6],sky:[0,1,2,3,5,7,8],sky_coordin:2,skycoord:2,skymapperdr1_mast:0,slack:10,slightli:5,slow:[0,3],small:[0,2,3,6],smaller:[1,2,3,4,5],smallest:3,smart:4,societi:[7,8],softwar:2,solar:2,solarize_light2:6,solut:[0,2,3,4,6],solution_id:0,solv:5,some:[0,2,3,4,5,6,10],someon:[0,3,5],someth:[0,1,5],sometim:2,soon:[7,8],sourc:[0,1,2,3,4,5],source_id:[0,1,2,3,4,5],source_id_2:4,source_idg_mean_psf_magi_mean_psf_mag:4,source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2:4,source_idradecpmrapmdecparallaxparallax_errorradial_veloc:[0,2],source_idref_epochradecparallax:0,space:[0,5,6],span:6,spatial:3,special:[0,5,7,8],specif:1,specifi:[0,1,2,4,5,7,8],specifictypequant:1,spectra:0,spheric:1,spirit:4,spot:2,spread:3,spur:6,sql:[0,1,2,5],ssdc:0,ssl:[0,1,3,4,10],sso_observ:0,sso_sourc:0,stack:0,stage:6,stand:[0,3,5,6],standard:[0,1,2,3],star:[0,1,2,3,4,5,6,7,8],starr:[0,3,4,5,6],starrs1:0,start:[0,1,2,3,4,6,7,8,9],statement:[0,10],stellar:0,step:[0,1,2,3,4,5,6,7,8],stflux:1,still:[1,3],stmag:1,store:[0,1,2,3,4,5,7,8],str:3,straight:5,strang:2,stream:[0,1,2,3,4,5,6,7,8],stretch:[0,6],string:[0,1,2,3],stripe:2,structur:[0,2,4,6],stsci:0,sty:6,style:[0,2,3],subject:[],sublicens:[],submit:[0,1,4,7,8],submodul:0,subplot2grid:6,subplot:[7,8],subsampl:0,subset:[0,2,6],substanti:[1,2],success:2,successfulli:2,suffix:4,suggest:[0,4],suitabl:4,sum:[2,5],sun:1,superset:2,support:[7,8],suppos:0,sure:[0,3,4,5,6],surround:5,survei:[0,4],surviv:0,symbol:0,sync_20201005090721:0,sync_20201005090726:0,synchron:0,syntax:[0,6],sys:[0,1,2,3,4,5,6,9],system:[0,1,2,6],systemat:0,tabl:[1,2,3,5,6,7,8,10],tableau:6,tabledata:4,tadu:1,tag:4,take:[0,1,4,5,6,7,8],talk:[0,4,6],tap:[0,1,3,4,10],tap_config:0,tap_schema:0,tap_upload:4,taptabl:0,taptablemeta:0,tarcmin:1,tarcsec:1,task:5,tau:1,tba:1,tbarn:1,tbeam:1,tbin:1,tbit:1,tbyte:1,tcd:1,tchan:1,tcount:1,tct:1,tdeg:1,tdyn:1,technic:6,teff_percentile_low:0,teff_percentile_upp:0,teff_val:0,telescop:0,tell:5,telltal:0,temperatur:[0,4],temptat:0,tend:[3,4],terg:1,term:4,tesla:1,test:[0,1,4,5],tev:1,texliv:6,text:[3,4,6],tgal:1,tgas_sourc:0,than:[0,1,2,3,4,5,6],thei:[0,1,2,3,5,6],them:[0,1,2,3,5,6,7,8,10],theoret:[4,5],theorist:0,thi:[0,1,2,3,4,5,6,7,8,9,10],thing:[0,2,3,4,5,6],think:[0,2,4,5,6],third:[0,1,2,3],those:[2,3,7,8],three:[0,1,2,3,6],through:[1,7,8],thz:1,tib:1,tibit:1,tibyt:1,tick:6,tick_param:6,tidal:[0,2],tight_layout:6,time:[0,1,2,4,5,6],titl:6,tjy:1,tkagg:5,tlm:1,tlx:1,tlyr:1,tmag:1,tmass_best_neighbour:0,tmass_neighbourhood:0,tmass_original_valid:0,tmass_xsc:0,tmin:1,tmol:1,to_:2,to_csv:3,to_hdf:[2,3,5],to_numpi:[3,5,6],to_panda:[2,3,5],todo:[0,1,2,3,4,5,6],togeth:6,tohm:1,too:[0,4],tool:[0,1,2,3,4,7,8],top:[0,1,3,4,5,6],topic:[0,6,7,8],torn:0,tort:[],tpa:1,tpc:1,tph:1,tphoton:1,tpix:1,tpixel:1,trad:1,transform:[3,4,5,7,8],transform_to:[1,2,3],translat:[3,4],transmit:4,transpar:2,transpos:[3,5,6],treat:5,tricki:[4,5],trip:5,tripl:0,tsr:1,tst:1,tupl:6,turn:0,tvox:1,tvoxel:1,twb:1,tweak:6,twice:2,two:[0,1,2,4,5,6],twocol:6,tycho2:0,tycho2_best_neighbour:0,tycho2_neighbourhood:0,type1cm:6,type:[0,1,2,3,4,5,9],typefac:6,typeset:6,tyr:1,ucac4_best_neighbour:0,ucac4_neighbourhood:0,ucac4_original_valid:0,ucd:4,undergradu:[0,7,8],understand:0,undetect:6,unexpect:0,uniqu:[0,1,2,3,4],unit:[0,1,2,3,5,7,8,10],unitbas:1,unitconversionerror:1,unitserror:1,unitswarn:1,unittypeerror:1,univers:0,unless:6,unlik:[0,2,4],unnam:3,unneed:3,unnus:6,unpreced:[0,6],unrecognizedunit:1,until:[1,2],updat:0,upload:[7,8],upload_resourc:4,upload_table_nam:4,upper:[0,2],uppercas:0,urat1_best_neighbour:0,urat1_neighbourhood:0,urat1_original_valid:0,url:4,use:[0,1,2,3,4,5,6,7,8],used:[0,1,2,3,4,5,6],useful:[0,2,3,4],user:[0,1,5],uses:[0,1,2,3,4,5,6,7,8],usetex:6,using:[0,1,2,3,4,5,6],usual:[3,4],utf:4,util:[0,1,3,4],valid:5,valu:[0,1,2,3,4,5,6,7,8],value_count:4,vanderpla:2,vari_cepheid:0,vari_classifier_class_definit:0,vari_classifier_definit:0,vari_classifier_result:0,vari_long_period_vari:0,vari_rotation_modul:0,vari_rrlyra:0,vari_short_timescal:0,vari_time_series_statist:0,variabl:[0,1,2,4],variable_summari:0,varieti:[2,3],variou:[0,7,8],veloc:[0,1,2,3],veri:[0,2],verifi:5,versatil:2,version:[0,2,4,6,7],vertic:[3,6],vicin:[1,3,7,8],view:6,visibility_periods_us:0,visibl:4,visual:[0,7,8],vline:6,vocabulari:2,volt:1,vot:[0,1,3],votabl:4,wai:[0,1,2,4,6,7,8],want:[0,2,3,4,5,6,7,8,9],warn:4,warp:0,warranti:[],water:0,watt:1,weber:1,well:[0,2,6],were:[1,2,4],wget:[2,3,4,5,6,10],what:[0,2,3,4,5,6],whelan:[0,1,2,3,4,5,6,7,8],whelen:2,when:[0,1,2,3,4,5,6],whenev:0,where:[0,1,2,3,4,5,6],whether:[],which:[0,1,2,3,4,6,7,8],white:6,whitegrid:6,who:0,whole:[4,6],whom:[],whose:[2,3,5,7,8],why:[0,2,3,4,5],wide:[0,2],wider:[3,6],width:6,window:[1,2,3,4,5],within:[0,1,2,3,7,8],without:[0,1,2,3],won:3,wonder:[0,2],word:0,work:[0,2,3,4,5,6,7,8],workshop:[0,1,2,3,4,5,6,9,10],worri:0,would:[0,1,2,3,4,5,6],write:[1,2,3,7,8],writeto:4,written:[0,1,3],wrong:[0,3],wrote:[1,2,3,4],www:[0,4],xlabel:[2,3,4,5,6],xlim:[2,3,5,6],xml:[0,2,4],xmln:4,xmlschema:4,xsi:4,xxx:4,xytext:6,y_flag:0,y_mean_psf_mag:0,y_mean_psf_mag_error:0,yadu:1,yarcmin:1,yarcsec:1,yau:1,yba:1,ybarn:1,ybeam:1,ybin:1,ybit:1,ybyte:1,ycd:1,ychan:1,ycount:1,yct:1,ydeg:1,ydyn:1,yerg:1,yev:1,ygal:1,yhz:1,yjy:1,ylabel:[2,3,4,5,6],ylim:[2,3,5,6],ylm:1,ylx:1,ylyr:1,ymag:1,ymin:1,ymol:1,yohm:1,you:[0,1,2,3,4,5,6,7,8,9,10],younger:[4,5],your:[0,1,2,3,4,5,6,7,8],yourself:[0,1,2,3,4,5,6],ypa:1,ypc:1,yph:1,yphoton:1,ypix:1,ypixel:1,yrad:1,yrdegdegma:0,yrma:[0,2],yrmasmaskm:[0,2],yry:1,ysr:1,yst:1,yvox:1,yvoxel:1,ywb:1,yyr:1,z_flag:0,z_mean_psf_mag:0,z_mean_psf_mag_error:0,zadu:1,zarcmin:1,zarcsec:1,zau:1,zba:1,zbarn:1,zbeam:1,zbin:1,zbit:1,zbyte:1,zcd:1,zchan:1,zcount:1,zct:1,zdeg:1,zdyn:1,zerg:1,zero:2,zev:1,zgal:1,zhz:1,zjy:1,zlm:1,zlx:1,zlyr:1,zmag:1,zmin:1,zmol:1,zohm:1,zone_id:0,zoom:2,zpa:1,zpc:1,zph:1,zphoton:1,zpix:1,zpixel:1,zrad:1,zry:1,zsr:1,zst:1,zvox:1,zvoxel:1,zwb:1,zyr:1},titles:["Chapter 1","Chapter 2","Chapter 3","Chapter 4","Chapter 5","Chapter 6","Chapter 7","Astronomical Data in Python","Astronomical Data in Python","The Notebook of Last Resort","Astronomical Data in Python"],titleterms:{That:6,The:9,adjust:6,annot:6,assembl:3,astronom:[7,8,10],asynchron:0,back:2,base:[2,5],best:[0,1,2,3,4,5,6],centerlin:2,chapter:[0,1,2,3,4,5,6],clean:0,column:[0,2],connect:0,coordin:1,csv:3,custom:6,data:[0,1,2,3,4,5,7,8,10],databas:0,datafram:[2,3],detail:[],draw:5,figur:6,filter:2,font:6,format:0,gaia:0,get:[1,4],instal:[0,1,2,3,4,5,6,8],instruct:8,introduct:[],join:4,languag:0,last:9,latex:6,left:6,lesson:[],librari:[0,1,2,3,4,5,6],lower:6,make:6,merg:5,miss:5,more:3,motion:[2,3],multipl:6,notebook:[8,9],one:3,oper:0,option:[],outlin:[0,1,2,3,4,5,6],panda:2,panel:6,photometri:[4,5],plot:[2,3,5,6],point:5,polygon:[1,5],practic:[0,1,2,3,4,5,6],prepar:4,prerequisit:[0,8],proper:[2,3],proport:6,python:[7,8,10],queri:[0,3],rcparam:6,rectangl:1,region:[1,3],reload:[2,3,4,5],resort:9,result:1,right:6,row:2,save:[1,2,3,5],scatter:2,select:[1,2,3,5],sheet:6,stori:6,style:6,subplot:6,summari:[0,1,2,3,4,5,6],tabl:[0,4],tell:6,time:3,transform:2,upload:4,upper:6,which:5,work:1,write:[0,4,5]}}) \ No newline at end of file diff --git a/_build/html/test_setup.html b/_build/html/test_setup.html new file mode 100644 index 0000000..bc85f19 --- /dev/null +++ b/_build/html/test_setup.html @@ -0,0 +1,369 @@ + + + + + + + + Astronomical Data in Python — Astronomical Data in Python + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+ +
+ +
+

Astronomical Data in Python

+

This notebook imports the libraries we need for the workshop.

+

If any of them are missing, you’ll get an error message.

+

If you don’t get any error messages, you are all set.

+
+
+
from wget import download
+
+
+
+
+
+
+
import pandas as pd
+import numpy as np
+
+
+
+
+
+
+
import matplotlib as mpl
+import matplotlib.pyplot as plt
+from matplotlib.path import Path
+from matplotlib.patches import Polygon
+
+
+
+
+
+
+
import astropy.coordinates as coord
+import astropy.units as u
+from astropy.table import Table
+
+
+
+
+
+
+
import gala.coordinates as gc
+from pyia import GaiaData
+
+
+
+
+
+
+
# Note: running this import statement opens a connection
+# to a Gaia server, so it will fail if you are not connected
+# to the internet.
+
+from astroquery.gaia import Gaia
+
+
+
+
+
Created TAP+ (v1.2.1) - Connection:
+	Host: gea.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+Created TAP+ (v1.2.1) - Connection:
+	Host: geadata.esac.esa.int
+	Use HTTPS: True
+	Port: 443
+	SSL Port: 443
+
+
+
+
+

During the workshop, we might put some code on Slack and ask you to cut and paste it into the notebook.

+

If you are on a Mac, you might encounter a problem:

+
+ + + + +
+ +
+
+ + +
+ + +
+
+
+

+ + By Allen B. Downey
+ + © Copyright 2020.
+

+
+
+
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/_build/jupyter_execute/01_query.ipynb b/_build/jupyter_execute/01_query.ipynb new file mode 100644 index 0000000..05fff48 --- /dev/null +++ b/_build/jupyter_execute/01_query.ipynb @@ -0,0 +1,1675 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "hide-output" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "hide-output" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones:\n", + "\n", + "| Symbol | Operation\n", + "|--------| :---\n", + "| `>` | greater than\n", + "| `<` | less than\n", + "| `>=` | greater than or equal\n", + "| `<=` | less than or equal\n", + "| `=` | equal\n", + "| `!=` or `<>` | not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "celltoolbar": "Tags", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/01_query.py b/_build/jupyter_execute/01_query.py new file mode 100644 index 0000000..dc37d2d --- /dev/null +++ b/_build/jupyter_execute/01_query.py @@ -0,0 +1,601 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 1 + +# *Astronomical Data in Python* is an introduction to tools and practices for working with astronomical data. Topics covered include: +# +# * Writing queries that select and download data from a database. +# +# * Using data stored in an Astropy `Table` or Pandas `DataFrame`. +# +# * Working with coordinates and other quantities with units. +# +# * Storing data in various formats. +# +# * Performing database join operations that combine data from multiple tables. +# +# * Visualizing data and preparing publication-quality figures. + +# As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# As the abstract explains, "Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1." +# +# GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is "an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces." + +# [This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications: +# +# * "The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way." +# +# * "They also are being used as exquisitely sensitive scales to measure the galaxy's mass." +# +# * "... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature." + +# ## Data +# +# The datasets we will work with are: +# +# * [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is "a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision", and +# +# * [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources. +# +# Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +# One of the goals of this workshop is to provide tools for working with large datasets. + +# ## Prerequisites +# +# These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started. +# +# We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases. +# +# We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +# ## Outline +# +# The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database: +# +# 1. First we'll make a connection to the Gaia server, +# +# 2. We will explore information about the database and the tables it contains, +# +# 3. We will write a query and send it to the server, and finally +# +# 4. We will download the response from the server. +# +# After completing this lesson, you should be able to +# +# * Compose a basic query in ADQL. +# +# * Use queries to explore a database and its tables. +# +# * Use queries to download data. +# +# * Develop, test, and debug a query incrementally. + +# ## Query Language +# +# In order to select data from a database, you have to compose a query, which is like a program written in a "query language". +# The query language we'll use is ADQL, which stands for "Astronomical Data Query Language". +# +# ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL. +# +# [The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html). +# But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook). + +# ## Installing libraries +# +# The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/). +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Connecting to Gaia +# +# Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html). +# +# We can connect to the Gaia database like this: + +# In[2]: + + +from astroquery.gaia import Gaia + + +# Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for "Table Access Protocol". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections. + +# ## Databases and Tables +# +# What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL: +# +# * A database is a collection of one or more named tables. +# +# * Each table is a 2-D array with one or more named columns of data. +# +# We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the "metadata", not the data itself. + +# In[3]: + + +tables = Gaia.load_tables(only_names=True) + + +# In[4]: + + +for table in (tables): + print(table.get_qualified_name()) + + +# So that's a lot of tables. The ones we'll use are: +# +# * `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2), +# +# * `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and +# +# * `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS. +# +# We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. + +# In[5]: + + +meta = Gaia.load_table('gaiadr2.gaia_source') +meta + + +# Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents. +# +# To see the metadata, we have to print the object. + +# In[6]: + + +print(meta) + + +# Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`. +# +# **Exercise:** Go back and try +# +# ``` +# meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source') +# ``` +# +# What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out? + +# ## Columns +# +# The following loop prints the names of the columns in the table. + +# In[7]: + + +for column in meta.columns: + print(column.name) + + +# You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +# To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). +# +# If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness). + +# **Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names? +# +# Hint: Remember the gotcha we mentioned earlier. + +# In[8]: + + +# Solution + +meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid') +print(meta2) + + +# In[9]: + + +# Solution + +for column in meta2.columns: + print(column.name) + + +# ## Writing queries +# +# By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want. +# +# A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL. +# +# Here's an example of an ADQL query. + +# In[10]: + + +query1 = """SELECT +TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source""" + + +# **Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read. +# +# The words in uppercase are ADQL keywords: +# +# * `SELECT` indicates that we are selecting data (as opposed to adding or modifying data). +# +# * `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data. +# +# * `FROM` specifies which table we want data from. +# +# The third line is a list of column names, indicating which columns we want. +# +# In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive. + +# To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`: + +# In[11]: + + +job1 = Gaia.launch_job(query1) +job1 + + +# The result is an object that represents the job running on a Gaia server. +# +# If you print it, it displays metadata for the forthcoming table. + +# In[12]: + + +print(job1) + + +# Don't worry about `Results: None`. That does not actually mean there are no results. +# +# However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this: + +# In[13]: + + +results1 = job1.get_results() +type(results1) + + +# **Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*. + +# The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except: +# +# * SQL databases are stored on disk drives, so they are persistent; that is, they "survive" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook). +# +# * SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL. +# +# Jupyter knows how to display the contents of a `Table`. + +# In[14]: + + +results1 + + +# Each column has a name, units, and a data type. +# +# For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part. +# +# This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery. + +# **Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type? + +# ## Asynchronous queries +# +# `launch_job` asks the server to run the job "synchronously", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run "asynchronously", which mean they might take longer to get started. +# +# If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later. +# +# The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results. +# +# For anonymous users, files are kept for three days. +# +# As an example, let's try a query that's similar to `query1`, with two changes: +# +# * It selects the first 3000 rows, so it is bigger than we should run synchronously. +# +# * It uses a new keyword, `WHERE`. + +# In[15]: + + +query2 = """SELECT TOP 3000 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 +""" + + +# A `WHERE` clause indicates which rows we want; in this case, the query selects only rows "where" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1. +# +# `WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database. +# +# We use `launch_job_async` to submit an asynchronous query. + +# In[16]: + + +job2 = Gaia.launch_job_async(query2) +print(job2) + + +# And here are the results. + +# In[17]: + + +results2 = job2.get_results() +results2 + + +# You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), "Negative parallaxes are caused by errors in the observations." Negative parallaxes have "no physical meaning," but they can be a "useful diagnostic on the quality of the astrometric solution." +# +# Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate. + +# **Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. +# +# The query should fail, but notice that you don't get much useful debugging information. +# +# For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help: +# +# * Whenever possible, start with a working query, either an example you find online or a query you have used in the past. +# +# * Make small changes and test each change before you continue. +# +# * While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. +# +# * Launching test queries synchronously might make them start faster, too. + +# ## Operators +# +# In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones: +# +# | Symbol | Operation +# |--------| :--- +# | `>` | greater than +# | `<` | less than +# | `>=` | greater than or equal +# | `<=` | less than or equal +# | `=` | equal +# | `!=` or `<>` | not equal +# +# Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`. +# Be careful to keep your Python out of your ADQL! +# +# You can combine comparisons using the logical operators: +# +# * AND: true if both comparisons are true +# * OR: true if either or both comparisons are true +# +# Finally, you can use `NOT` to invert the result of a comparison. + +# **Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`. +# +# You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). + +# In[18]: + + +# Solution + +# This is what most people will probably do + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp > -0.75 AND bp_rp < 2 +""" + + +# In[19]: + + +# Solution + +# But if someone notices the BETWEEN operator, +# they might do this + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog. +# +# Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + +# ## Cleaning up +# +# Asynchronous jobs have a `jobid`. + +# In[20]: + + +job1.jobid, job2.jobid + + +# Which you can use to remove the job from the server. + +# In[21]: + + +Gaia.remove_jobs([job2.jobid]) + + +# If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself. + +# ## Formatting queries +# +# So far the queries have been string "literals", meaning that the entire string is part of the program. +# But writing queries yourself can be slow, repetitive, and error-prone. +# +# It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp). +# +# As an example, we'll divide the previous query into two parts; a list of column names and a "base" for the query that contains everything except the column names. +# +# Here's the list of columns we'll select. + +# In[22]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# And here's the base; it's a string that contains at least one format specifier in curly brackets (braces). + +# In[23]: + + +query3_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide. +# +# To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`. + +# In[24]: + + +query3 = query3_base.format(columns=columns) + + +# The result is a string with line breaks. If you display it, the line breaks appear as `\n`. + +# In[25]: + + +query3 + + +# But if you print it, the line breaks appear as... line breaks. + +# In[26]: + + +print(query3) + + +# Notice that the format specifier has been replaced with the value of `columns`. +# +# Let's run it and see if it works: + +# In[27]: + + +job3 = Gaia.launch_job(query3) +print(job3) + + +# In[28]: + + +results3 = job3.get_results() +results3 + + +# Good so far. + +# **Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input. +# +# Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide. + +# In[29]: + + +# Solution + +query4_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < {max_parallax} AND +bp_rp BETWEEN -0.75 AND 2 +""" + + +# In[30]: + + +# Solution + +query4 = query4_base.format(columns=columns, + max_parallax=0.5) +print(query) + + +# **Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. +# +# The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions. +# +# A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section. +# +# What do you think of this choice? Are there alternatives you prefer? + +# ## Summary +# +# This notebook demonstrates the following steps: +# +# 1. Making a connection to the Gaia server, +# +# 2. Exploring information about the database and the tables it contains, +# +# 3. Writing a query and sending it to the server, and finally +# +# 4. Downloading the response from the server as an Astropy `Table`. + +# ## Best practices +# +# * If you can't download an entire dataset (or it's not practical) use queries to select the data you need. +# +# * Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data. +# +# * If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously. +# +# * ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should. +# +# * ADQL and SQL don't require you to break a query into multiple lines, but you should. +# + +# Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect. +# +# There are a few things you can do to mitigate these problems: +# +# * Make each section of the notebook self-contained. Try not to use the same variable name in more than one section. +# +# * Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase. diff --git a/_build/jupyter_execute/02_coords.ipynb b/_build/jupyter_execute/02_coords.ipynb new file mode 100644 index 0000000..f287bbb --- /dev/null +++ b/_build/jupyter_execute/02_coords.ipynb @@ -0,0 +1,1972 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 2\n", + "\n", + "This is the second in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1603114980658O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019094300.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_results.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/02_coords.py b/_build/jupyter_execute/02_coords.py new file mode 100644 index 0000000..d12b02c --- /dev/null +++ b/_build/jupyter_execute/02_coords.py @@ -0,0 +1,413 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 2 +# +# This is the second in a series of notebooks related to astronomy data. +# +# As a running example, we are replicating parts of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server. +# +# In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be. + +# ## Outline +# +# We'll start with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. +# +# Then, to select stars in the vicinity of GD-1, we'll: +# +# * Use `Quantity` objects to represent measurements with units. +# +# * Use the `Gala` library to convert coordinates from one frame to another. +# +# * Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. +# +# * Submit a query and download the results. +# +# * Store the results in a FITS file. +# +# After completing this lesson, you should be able to +# +# * Use Python string formatting to compose more complex ADQL queries. +# +# * Work with coordinates and other quantities that have units. +# +# * Download the results of a query and store them in a file. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Selecting a region + +# One of the most common ways to restrict a query is to select stars in a particular region of the sky. +# +# For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects "all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg)." + +# In[2]: + + +query = """ +SELECT +TOP 10 source_id +FROM gaiadr2.gaia_source +WHERE 1=CONTAINS( + POINT(ra, dec), + CIRCLE(266.41683, -29.00781, 0.08333333)) +""" + + +# This query uses three keywords that are specific to ADQL (not SQL): +# +# * `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination. +# +# * `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees. +# +# * `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise. +# +# Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12). +# +# A query like this is called a cone search because it selects stars in a cone. +# +# Here's how we run it. + +# In[3]: + + +from astroquery.gaia import Gaia + +job = Gaia.launch_job(query) +result = job.get_results() +result + + +# **Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be. +# +# An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them. +# +# In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched? + +# ## Getting GD-1 Data +# +# From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1: +# +# + +# Along the axis of right ascension ($\phi_1$) the figure extends from -100 to 20 degrees. +# +# Along the axis of declination ($\phi_2$) the figure extends from about -8 to 4 degrees. +# +# Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so +# +# * That would be difficult to work with, +# +# * As anonymous users, we are limited to 3 million rows in a single query, and +# +# * While we are developing and testing code, it will be faster to work with a smaller dataset. +# +# So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# But first we let's see how to represent quantities with units like degrees. + +# ## Working with coordinates +# +# Coordinates are physical quantities, which means that they have two parts, a value and a unit. +# +# For example, the coordinate $30^{\circ}$ has value 30 and its units are degrees. +# +# Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure). +# +# Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters. +# +# To use Astropy units, we import them like this: + +# In[4]: + + +import astropy.units as u + +u + + +# `u` is an object that contains most common units and all SI units. +# +# You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/). + +# In[5]: + + +dir(u) + + +# To create a quantity, we multiply a value by a unit. + +# In[6]: + + +coord = 30 * u.deg +type(coord) + + +# The result is a `Quantity` object. +# +# Jupyter knows how to display `Quantities` like this: + +# In[7]: + + +coord + + +# ## Selecting a rectangle +# +# Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# We'll define variables to contain these limits. + +# In[8]: + + +phi1_min = -55 +phi1_max = -45 +phi2_min = -8 +phi2_max = 4 + + +# To represent a rectangle, we'll use two lists of coordinates and multiply by their units. + +# In[9]: + + +phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg +phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg + + +# `phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. +# +# But they are in "[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)" +# +# In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/). + +# In[10]: + + +import gala.coordinates as gc + +corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect) +type(corners) + + +# We can display the result like this: + +# In[11]: + + +corners + + +# Now we can use `transform_to` to convert to ICRS coordinates. + +# In[12]: + + +import astropy.coordinates as coord + +corners_icrs = corners.transform_to(coord.ICRS) +type(corners_icrs) + + +# The result is an `ICRS` object. + +# In[13]: + + +corners_icrs + + +# Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon. + +# ## Selecting a polygon +# +# In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example: +# +# ``` +# """ +# POLYGON(143.65, 20.98, +# 134.46, 26.39, +# 140.58, 34.85, +# 150.16, 29.01) +# """ +# ``` + +# `corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points. + +# In[14]: + + +for point in corners_icrs: + print(point) + + +# From that, we can select the coordinates `ra` and `dec`: + +# In[15]: + + +for point in corners_icrs: + print(point.ra, point.dec) + + +# The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number. + +# In[16]: + + +for point in corners_icrs: + print(point.ra.value, point.dec.value) + + +# We can use string `format` to convert these numbers to strings. + +# In[17]: + + +point_base = "{point.ra.value}, {point.dec.value}" + +t = [point_base.format(point=point) + for point in corners_icrs] +t + + +# The result is a list of strings, which we can join into a single string using `join`. + +# In[18]: + + +point_list = ', '.join(t) +point_list + + +# Notice that we invoke `join` on a string and pass the list as an argument. +# +# Before we can assemble the query, we need `columns` again (as we saw in the previous notebook). + +# In[19]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# Here's the base for the query, with format specifiers for `columns` and `point_list`. + +# In[20]: + + +query_base = """SELECT {columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON({point_list})) +""" + + +# And here's the result: + +# In[21]: + + +query = query_base.format(columns=columns, + point_list=point_list) +print(query) + + +# As always, we should take a minute to proof-read the query before we launch it. +# +# The result will be bigger than our previous queries, so it will take a little longer. + +# In[22]: + + +job = Gaia.launch_job_async(query) +print(job) + + +# Here are the results. + +# In[23]: + + +results = job.get_results() +len(results) + + +# There are more than 100,000 stars in this polygon, but that's a manageable size to work with. + +# ## Saving results +# +# This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it. +# +# Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again. +# +# Astropy `Table` objects provide `write`, which writes the table to disk. + +# In[24]: + + +filename = 'gd1_results.fits' +results.write(filename, overwrite=True) + + +# Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table. +# +# If the file already exists, the `overwrite` argument causes it to be overwritten. +# +# To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form. + +# In[25]: + + +get_ipython().system('ls -lh gd1_results.fits') + + +# The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_results.fits +# ``` + +# ## Summary +# +# In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file. +# +# In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1. + +# ## Best practices +# +# * For measurements with units, use `Quantity` objects that represent units explicitly and check for errors. +# +# * Use the `format` function to compose queries; it is often faster and less error-prone. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again. diff --git a/_build/jupyter_execute/03_motion.ipynb b/_build/jupyter_execute/03_motion.ipynb new file mode 100644 index 0000000..1ec8f83 --- /dev/null +++ b/_build/jupyter_execute/03_motion.ipynb @@ -0,0 +1,1914 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 3\n", + "\n", + "This is the third in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In the second lesson, we wrote a query to select stars from the region of the sky where we expect GD-1 to be, and saved the results in a FITS file.\n", + "\n", + "Now we'll read that data back and implement the next step in the analysis, identifying stars with the proper motion we expect for GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this lesson:\n", + "\n", + "1. We'll read back the results from the previous lesson, which we saved in a FITS file.\n", + "\n", + "2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1.\n", + "\n", + "3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1.\n", + "\n", + "4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1.\n", + "\n", + "5. Finally, we'll select and plot the stars whose proper motion is in that region.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Select rows and columns from an Astropy `Table`.\n", + "\n", + "* Use Matplotlib to make a scatter plot.\n", + "\n", + "* Use Gala to transform coordinates.\n", + "\n", + "* Make a Pandas `DataFrame` and use a Boolean `Series` to select rows.\n", + "\n", + "* Save a `DataFrame` in an HDF5 file.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "In the previous lesson, we ran a query on the Gaia server and downloaded data for roughly 100,000 stars. We saved the data in a FITS file so that now, picking up where we left off, we can read the data from a local file rather than running the query again.\n", + "\n", + "If you ran the previous lesson successfully, you should already have a file called `gd1_results.fits` that contains the data we downloaded.\n", + "\n", + "If not, you can run the following cell, which downloads the data from our repository." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_results.fits'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now here's how we can read the data from the file back into an Astropy `Table`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from astropy.table import Table\n", + "\n", + "results = Table.read(filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an Astropy `Table`.\n", + "\n", + "We can use `info` to refresh our memory of the contents." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
\n", + " name dtype unit description \n", + "--------------- ------- -------- ------------------------------------------------------------------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release)\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " pmra float64 mas / yr Proper motion in right ascension direction\n", + " pmdec float64 mas / yr Proper motion in declination direction\n", + " parallax float64 mas Parallax\n", + " parallax_error float64 mas Standard error of parallax\n", + "radial_velocity float64 km / s Radial velocity" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.info" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting rows and columns\n", + "\n", + "In this section we'll see operations for selecting columns and rows from an Astropy `Table`. You can find more information about these operations in the [Astropy documentation](https://docs.astropy.org/en/stable/table/access_table.html).\n", + "\n", + "We can get the names of the columns like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['source_id',\n", + " 'ra',\n", + " 'dec',\n", + " 'pmra',\n", + " 'pmdec',\n", + " 'parallax',\n", + " 'parallax_error',\n", + " 'radial_velocity']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.colnames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And select an individual column like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<Column name='ra' dtype='float64' unit='deg' description='Right ascension' length=140340>\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
142.48301935991023
142.25452941346344
142.64528557468074
142.57739430926034
142.58913564478618
141.81762228999614
143.18339801317677
142.9347319464589
142.26769745823267
142.89551292869012
142.2780935768316
142.06138786534987
...
143.05456487172972
144.0436496516182
144.06566578919313
144.13177563215973
143.77696341662764
142.945956347594
142.97282480557786
143.4166017695258
143.64484588686904
143.41554585481808
143.6908739159247
143.7702681295401
" + ], + "text/plain": [ + "\n", + "142.48301935991023\n", + "142.25452941346344\n", + "142.64528557468074\n", + "142.57739430926034\n", + "142.58913564478618\n", + "141.81762228999614\n", + "143.18339801317677\n", + " 142.9347319464589\n", + "142.26769745823267\n", + "142.89551292869012\n", + " 142.2780935768316\n", + "142.06138786534987\n", + " ...\n", + "143.05456487172972\n", + " 144.0436496516182\n", + "144.06566578919313\n", + "144.13177563215973\n", + "143.77696341662764\n", + " 142.945956347594\n", + "142.97282480557786\n", + " 143.4166017695258\n", + "143.64484588686904\n", + "143.41554585481808\n", + " 143.6908739159247\n", + " 143.7702681295401" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results['ra']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Column` object that contains the data, and also the data type, units, and name of the column." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.column.Column" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results['ra'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rows in the `Table` are numbered from 0 to `n-1`, where `n` is the number of rows. We can select the first row like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Row index=0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
637987125186749568142.4830193599102321.75771616932985-2.51683846838757662.941813096629439-0.25734489623333540.8237207945098111e+20
" + ], + "text/plain": [ + "\n", + " source_id ra dec pmra pmdec parallax parallax_error radial_velocity\n", + " deg deg mas / yr mas / yr mas mas km / s \n", + " int64 float64 float64 float64 float64 float64 float64 float64 \n", + "------------------ ------------------ ----------------- ------------------- ----------------- ------------------- ----------------- ---------------\n", + "637987125186749568 142.48301935991023 21.75771616932985 -2.5168384683875766 2.941813096629439 -0.2573448962333354 0.823720794509811 1e+20" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you might have guessed, the result is a `Row` object." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.row.Row" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the bracket operator selects both columns and rows. You might wonder how it knows which to select.\n", + "\n", + "If the expression in brackets is a string, it selects a column; if the expression is an integer, it selects a row.\n", + "\n", + "If you apply the bracket operator twice, you can select a column and then an element from the column." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "142.48301935991023" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results['ra'][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or you can select a row and then an element from the row." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "142.48301935991023" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[0]['ra']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You get the same result either way." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scatter plot\n", + "\n", + "To see what the results look like, we'll use a scatter plot. The library we'll use is [Matplotlib](https://matplotlib.org/), which is the most widely-used plotting library for Python.\n", + "\n", + "The Matplotlib interface is based on MATLAB (hence the name), so if you know MATLAB, some of it will be familiar.\n", + "\n", + "We'll import like this." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pyplot part of the Matplotlib library. It is conventional to import it using the shortened name `plt`.\n", + "\n", + "Pyplot provides two functions that can make scatterplots, [plt.scatter](https://matplotlib.org/3.3.0/api/_as_gen/matplotlib.pyplot.scatter.html) and [plt.plot](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html).\n", + "\n", + "* `scatter` is more versatile; for example, you can make every point in a scatter plot a different color.\n", + "\n", + "* `plot` is more limited, but for simple cases, it can be substantially faster. \n", + "\n", + "Jake Vanderplas explains these differences in [The Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html)\n", + "\n", + "Since we are plotting more than 100,000 points and they are all the same size and color, we'll use `plot`.\n", + "\n", + "Here's a scatter plot with right ascension on the x-axis and declination on the y-axis, both ICRS coordinates in degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_28_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = results['ra']\n", + "y = results['dec']\n", + "plt.plot(x, y, 'ko')\n", + "\n", + "plt.xlabel('ra (degree ICRS)')\n", + "plt.ylabel('dec (degree ICRS)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The arguments to `plt.plot` are `x`, `y`, and a string that specifies the style. In this case, the letters `ko` indicate that we want a black, round marker (`k` is for black because `b` is for blue).\n", + "\n", + "The functions `xlabel` and `ylabel` put labels on the axes.\n", + "\n", + "This scatter plot has a problem. It is \"[overplotted](https://python-graph-gallery.com/134-how-to-avoid-overplotting-with-python/)\", which means that there are so many overlapping points, we can't distinguish between high and low density areas.\n", + "\n", + "To fix this, we can provide optional arguments to control the size and transparency of the points.\n", + "\n", + "**Exercise:** In the call to `plt.plot`, add the keyword argument `markersize=0.1` to make the markers smaller.\n", + "\n", + "Then add the argument `alpha=0.1` to make the markers nearly transparent.\n", + "\n", + "Adjust these arguments until you think the figure shows the data most clearly.\n", + "\n", + "Note: Once you have made these changes, you might notice that the figure shows stripes with lower density of stars. These stripes are caused by the way Gaia scans the sky, which [you can read about here](https://www.cosmos.esa.int/web/gaia/scanning-law). The dataset we are using, [Gaia Data Release 2](https://www.cosmos.esa.int/web/gaia/dr2), covers 22 months of observations; during this time, some parts of the sky were scanned more than others." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transform back\n", + "\n", + "Remember that we selected data from a rectangle of coordinates in the `GD1Koposov10` frame, then transformed them to ICRS when we constructed the query.\n", + "The coordinates in `results` are in ICRS.\n", + "\n", + "To plot them, we will transform them back to the `GD1Koposov10` frame; that way, the axes of the figure are aligned with the GD-1, which will make it easy to select stars near the centerline of the stream.\n", + "\n", + "To do that, we'll put the results into a `GaiaData` object, provided by the [pyia library](https://pyia.readthedocs.io/en/latest/api/pyia.GaiaData.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pyia.data.GaiaData" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pyia import GaiaData\n", + "\n", + "gaia_data = GaiaData(results)\n", + "type(gaia_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can extract sky coordinates from the `GaiaData` object, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.units as u\n", + "\n", + "skycoord = gaia_data.get_skycoord(\n", + " distance=8*u.kpc, \n", + " radial_velocity=0*u.km/u.s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We provide `distance` and `radial_velocity` to prepare the data for reflex correction, which we explain below." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(skycoord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an Astropy `SkyCoord` object ([documentation here](https://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html#astropy.coordinates.SkyCoord)), which provides `transform_to`, so we can transform the coordinates to other frames." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "transformed = skycoord.transform_to(gc.GD1Koposov10)\n", + "type(transformed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is another `SkyCoord` object, now in the `GD1Koposov10` frame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to correct the proper motion measurements from Gaia for reflex due to the motion of our solar system around the Galactic center.\n", + "\n", + "When we created `skycoord`, we provided `distance` and `radial_velocity` as arguments, which means we ignore the measurements provided by Gaia and replace them with these fixed values.\n", + "\n", + "That might seem like a strange thing to do, but here's the motivation:\n", + "\n", + "* Because the stars in GD-1 are so far away, the distance estimates we get from Gaia, which are based on parallax, are not very precise. So we replace them with our current best estimate of the mean distance to GD-1, about 8 kpc. See [Koposov, Rix, and Hogg, 2010](https://ui.adsabs.harvard.edu/abs/2010ApJ...712..260K/abstract).\n", + "\n", + "* For the other stars in the table, this distance estimate will be inaccurate, so reflex correction will not be correct. But that should have only a small effect on our ability to identify stars with the proper motion we expect for GD-1.\n", + "\n", + "* The measurement of radial velocity has no effect on the correction for proper motion; the value we provide is arbitrary, but we have to provide a value to avoid errors in the reflex correction calculation.\n", + "\n", + "We are grateful to Adrian Price-Whelen for his help explaining this step in the analysis." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With this preparation, we can use `reflex_correct` from Gala ([documentation here](https://gala-astro.readthedocs.io/en/latest/api/gala.coordinates.reflex_correct.html)) to correct for solar reflex motion." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gd1_coord = gc.reflex_correct(transformed)\n", + "\n", + "type(gd1_coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `SkyCoord` object that contains \n", + "\n", + "* The transformed coordinates as attributes named `phi1` and `phi2`, which represent right ascension and declination in the `GD1Koposov10` frame.\n", + "\n", + "* The transformed and corrected proper motions as `pm_phi1_cosphi2` and `pm_phi2`.\n", + "\n", + "We can select the coordinates like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "phi1 = gd1_coord.phi1\n", + "phi2 = gd1_coord.phi2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And plot them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_45_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(phi1, phi2, 'ko', markersize=0.1, alpha=0.2)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember that we started with a rectangle in GD-1 coordinates. When transformed to ICRS, it's a non-rectangular polygon. Now that we have transformed back to GD-1 coordinates, it's a rectangle again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pandas DataFrame\n", + "\n", + "At this point we have three objects containing different subsets of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pyia.data.GaiaData" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(gaia_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.sky_coordinate.SkyCoord" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(gd1_coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On one hand, this makes sense, since each object provides different capabilities. But working with three different object types can be awkward.\n", + "\n", + "It will be more convenient to choose one object and get all of the data into it. We'll use a Pandas DataFrame, for two reasons:\n", + "\n", + "1. It provides capabilities that are pretty much a superset of the other data structures, so it's the all-in-one solution.\n", + "\n", + "2. Pandas is a general-purpose tool that is useful in many domains, especially data science. If you are going to develop expertise in one tool, Pandas is a good choice.\n", + "\n", + "However, compared to an Astropy `Table`, Pandas has one big drawback: it does not keep the metadata associated with the table, including the units for the columns." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's easy to convert a `Table` to a Pandas `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 8)" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = results.to_pandas()\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`DataFrame` provides `shape`, which shows the number of rows and columns.\n", + "\n", + "It also provides `head`, which displays the first few rows. It is useful for spot-checking large results as you go along." + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
0637987125186749568142.48301921.757716-2.5168382.941813-0.2573450.8237211.000000e+20
1638285195917112960142.25452922.4761682.662702-12.1659840.4227280.2974721.000000e+20
2638073505568978688142.64528622.16693218.306747-7.9506600.1036400.5445841.000000e+20
3638086386175786752142.57739422.2279200.987786-2.584105-0.8573271.0596071.000000e+20
4638049655615392384142.58913622.1107830.244439-4.9410790.0996250.4862241.000000e+20
\n", + "
" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 637987125186749568 142.483019 21.757716 -2.516838 2.941813 -0.257345 \n", + "1 638285195917112960 142.254529 22.476168 2.662702 -12.165984 0.422728 \n", + "2 638073505568978688 142.645286 22.166932 18.306747 -7.950660 0.103640 \n", + "3 638086386175786752 142.577394 22.227920 0.987786 -2.584105 -0.857327 \n", + "4 638049655615392384 142.589136 22.110783 0.244439 -4.941079 0.099625 \n", + "\n", + " parallax_error radial_velocity \n", + "0 0.823721 1.000000e+20 \n", + "1 0.297472 1.000000e+20 \n", + "2 0.544584 1.000000e+20 \n", + "3 1.059607 1.000000e+20 \n", + "4 0.486224 1.000000e+20 " + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python detail: `shape` is an attribute, so we can display it's value without calling it as a function; `head` is a function, so we need the parentheses." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can extract the columns we want from `gd1_coord` and add them as columns in the `DataFrame`. `phi1` and `phi2` contain the transformed coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 10)" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['phi1'] = gd1_coord.phi1\n", + "df['phi2'] = gd1_coord.phi2\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`pm_phi1_cosphi2` and `pm_phi2` contain the components of proper motion in the transformed frame." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 12)" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['pm_phi1'] = gd1_coord.pm_phi1_cosphi2\n", + "df['pm_phi2'] = gd1_coord.pm_phi2\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail:** If you notice that `SkyCoord` has an attribute called `proper_motion`, you might wonder why we are not using it.\n", + "\n", + "We could have: `proper_motion` contains the same data as `pm_phi1_cosphi2` and `pm_phi2`, but in a different format." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot proper motion\n", + "\n", + "Now we are ready to replicate one of the panels in Figure 1 of the Price-Whelan and Bonaca paper, the one that shows the components of proper motion as a scatter plot:\n", + "\n", + "\n", + "\n", + "In this figure, the shaded area is a high-density region of stars with the proper motion we expect for stars in GD-1. \n", + "\n", + "* Due to the nature of tidal streams, we expect the proper motion for most stars to be along the axis of the stream; that is, we expect motion in the direction of `phi2` to be near 0.\n", + "\n", + "* In the direction of `phi1`, we don't have a prior expectation for proper motion, except that it should form a cluster at a non-zero value. \n", + "\n", + "To locate this cluster, we'll select stars near the centerline of GD-1 and plot their proper motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting the centerline\n", + "\n", + "As we can see in the following figure, many stars in GD-1 are less than 1 degree of declination from the line `phi2=0`.\n", + "\n", + "\n", + "\n", + "If we select stars near this line, they are more likely to be in GD-1.\n", + "\n", + "We'll start by selecting the `phi2` column from the `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi2 = df['phi2']\n", + "type(phi2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Series`, which is the structure Pandas uses to represent columns.\n", + "\n", + "We can use a comparison operator, `>`, to compare the values in a `Series` to a constant." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi2_min = -1.0 * u.deg\n", + "phi2_max = 1.0 * u.deg\n", + "\n", + "mask = (df['phi2'] > phi2_min)\n", + "type(mask)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('bool')" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask.dtype" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Series` of Boolean values, that is, `True` and `False`. " + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "Name: phi2, dtype: bool" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Boolean `Series` is sometimes called a \"mask\" because we can use it to mask out some of the rows in a `DataFrame` and select the rest, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected = df[mask]\n", + "type(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`selected` is a `DataFrame` that contains only the rows from `df` that correspond to `True` values in `mask`.\n", + "\n", + "The previous mask selects all stars where `phi2` exceeds `phi2_min`; now we'll select stars where `phi2` falls between `phi2_min` and `phi2_max`." + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [], + "source": [ + "phi_mask = ((df['phi2'] > phi2_min) & \n", + " (df['phi2'] < phi2_max))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `&` operator computes \"logical AND\", which means the result is true where elements from both Boolean `Series` are true.\n", + "\n", + "The sum of a Boolean `Series` is the number of `True` values, so we can use `sum` to see how many stars are in the selected region." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25084" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phi_mask.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can use `phi1_mask` to select stars near the centerline, which are more likely to be in GD-1." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25084" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "centerline = df[phi_mask]\n", + "len(centerline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a scatter plot of proper motion for the selected stars." + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_79_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.1, alpha=0.1)\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Looking at these results, we see a large cluster around (0, 0), and a smaller cluster near (0, -10).\n", + "\n", + "We can use `xlim` and `ylim` to set the limits on the axes and zoom in on the region near (0, 0)." + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_81_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can see the smaller cluster more clearly.\n", + "\n", + "You might notice that our figure is less dense than the one in the paper. That's because we started with a set of stars from a relatively small region. The figure in the paper is based on a region about 10 times bigger.\n", + "\n", + "In the next lesson we'll go back and select stars from a larger region. But first we'll use the proper motion data to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filtering based on proper motion\n", + "\n", + "The next step is to select stars in the \"overdense\" region of proper motion, which are candidates to be in GD-1.\n", + "\n", + "In the original paper, Price-Whelan and Bonaca used a polygon to cover this region, as shown in this figure.\n", + "\n", + "\n", + "\n", + "We'll use a simple rectangle for now, but in a later lesson we'll see how to select a polygonal region as well.\n", + "\n", + "Here are bounds on proper motion we chose by eye," + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To draw these bounds, we'll make two lists containing the coordinates of the corners of the rectangle." + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the plot looks like with the bounds we chose." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_88_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "plt.plot(pm1_rect, pm2_rect, '-')\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To select rows that fall within these bounds, we'll use the following function, which uses Pandas operators to make a mask that selects rows where `series` falls between `low` and `high`." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "def between(series, low, high):\n", + " \"\"\"Make a Boolean Series.\n", + " \n", + " series: Pandas Series\n", + " low: lower bound\n", + " high: upper bound\n", + " \n", + " returns: Boolean Series\n", + " \"\"\"\n", + " return (series > low) & (series < high)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following mask select stars with proper motion in the region we chose." + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [], + "source": [ + "pm_mask = (between(df['pm_phi1'], pm1_min, pm1_max) & \n", + " between(df['pm_phi2'], pm2_min, pm2_max))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, the sum of a Boolean series is the number of `True` values." + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1049" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_mask.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use this mask to select rows from `df`." + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1049" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected = df[pm_mask]\n", + "len(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the stars we think are likely to be in GD-1. Let's see what they look like, plotting their coordinates (not their proper motion)." + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/03_motion_98_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "phi1 = selected['phi1']\n", + "phi2 = selected['phi2']\n", + "\n", + "plt.plot(phi1, phi2, 'ko', markersize=0.5, alpha=0.5)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that's starting to look like a tidal stream!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving the DataFrame\n", + "\n", + "At this point we have run a successful query and cleaned up the results; this is a good time to save the data.\n", + "\n", + "To save a Pandas `DataFrame`, one option is to convert it to an Astropy `Table`, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_table = Table.from_pandas(selected)\n", + "type(selected_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we could write the `Table` to a FITS file, as we did in the previous lesson. \n", + "\n", + "But Pandas provides functions to write DataFrames in other formats; to see what they are [find the functions here that begin with `to_`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html).\n", + "\n", + "One of the best options is HDF5, which is Version 5 of [Hierarchical Data Format](https://en.wikipedia.org/wiki/Hierarchical_Data_Format).\n", + "\n", + "HDF5 is a binary format, so files are small and fast to read and write (like FITS, but unlike XML).\n", + "\n", + "An HDF5 file is similar to an SQL database in the sense that it can contain more than one table, although in HDF5 vocabulary, a table is called a Dataset. ([Multi-extension FITS files](https://www.stsci.edu/itt/review/dhb_2011/Intro/intro_ch23.html) can also contain more than one table.)\n", + "\n", + "And HDF5 stores the metadata associated with the table, including column names, row labels, and data types (like FITS).\n", + "\n", + "Finally, HDF5 is a cross-language standard, so if you write an HDF5 file with Pandas, you can read it back with many other software tools (more than FITS)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we write the HDF5, let's delete the old one, if it exists." + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [], + "source": [ + "!rm -f gd1_dataframe.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can write a Pandas `DataFrame` to an HDF5 file like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_dataframe.hdf5'\n", + "\n", + "df.to_hdf(filename, 'df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because an HDF5 file can contain more than one Dataset, we have to provide a name, or \"key\", that identifies the Dataset in the file.\n", + "\n", + "We could use any string as the key, but in this example I use the variable name `df`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** We're going to need `centerline` and `selected` later as well. Write a line or two of code to add it as a second Dataset in the HDF5 file." + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "centerline.to_hdf(filename, 'centerline')\n", + "selected.to_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail:** Reading and writing HDF5 tables requires a library called `PyTables` that is not always installed with Pandas. You can install it with pip like this:\n", + "\n", + "```\n", + "pip install tables\n", + "```\n", + "\n", + "If you install it using Conda, the name of the package is `pytables`.\n", + "\n", + "```\n", + "conda install pytables\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `ls` to confirm that the file exists and check the size:" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 17M Oct 19 12:05 gd1_dataframe.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_dataframe.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_dataframe.hdf5\n", + "```\n", + "\n", + "We can read the file back like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(140340, 12)" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_back_df = pd.read_hdf(filename, 'df')\n", + "read_back_df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this lesson, we re-loaded the Gaia data we saved from a previous query.\n", + "\n", + "We transformed the coordinates and proper motion from ICRS to a frame aligned with GD-1, and stored the results in a Pandas `DataFrame`.\n", + "\n", + "Then we replicated the selection process from the Price-Whelan and Bonaca paper:\n", + "\n", + "* We selected stars near the centerline of GD-1 and made a scatter plot of their proper motion.\n", + "\n", + "* We identified a region of proper motion that contains stars likely to be in GD-1.\n", + "\n", + "* We used a Boolean `Series` as a mask to select stars whose proper motion is in that region.\n", + "\n", + "So far, we have used data from a relatively small region of the sky. In the next lesson, we'll write a query that selects stars based on proper motion, which will allow us to explore a larger region." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* When you make a scatter plot, adjust the size of the markers and their transparency so the figure is not overplotted; otherwise it can misrepresent the data badly.\n", + "\n", + "* For simple scatter plots in Matplotlib, `plot` is faster than `scatter`.\n", + "\n", + "* An Astropy `Table` and a Pandas `DataFrame` are similar in many ways and they provide many of the same functions. They have pros and cons, but for many projects, either one would be a reasonable choice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_build/jupyter_execute/03_motion.py b/_build/jupyter_execute/03_motion.py new file mode 100644 index 0000000..6938dd4 --- /dev/null +++ b/_build/jupyter_execute/03_motion.py @@ -0,0 +1,776 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 3 +# +# This is the third in a series of notebooks related to astronomy data. +# +# As a running example, we are replicating parts of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server. +# +# In the second lesson, we wrote a query to select stars from the region of the sky where we expect GD-1 to be, and saved the results in a FITS file. +# +# Now we'll read that data back and implement the next step in the analysis, identifying stars with the proper motion we expect for GD-1. + +# ## Outline +# +# Here are the steps in this lesson: +# +# 1. We'll read back the results from the previous lesson, which we saved in a FITS file. +# +# 2. Then we'll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD-1. +# +# 3. We'll put those results into a Pandas `DataFrame`, which we'll use to select stars near the centerline of GD-1. +# +# 4. Plotting the proper motion of those stars, we'll identify a region of proper motion for stars that are likely to be in GD-1. +# +# 5. Finally, we'll select and plot the stars whose proper motion is in that region. +# +# After completing this lesson, you should be able to +# +# * Select rows and columns from an Astropy `Table`. +# +# * Use Matplotlib to make a scatter plot. +# +# * Use Gala to transform coordinates. +# +# * Make a Pandas `DataFrame` and use a Boolean `Series` to select rows. +# +# * Save a `DataFrame` in an HDF5 file. +# + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia python-wget') + + +# ## Reload the data +# +# In the previous lesson, we ran a query on the Gaia server and downloaded data for roughly 100,000 stars. We saved the data in a FITS file so that now, picking up where we left off, we can read the data from a local file rather than running the query again. +# +# If you ran the previous lesson successfully, you should already have a file called `gd1_results.fits` that contains the data we downloaded. +# +# If not, you can run the following cell, which downloads the data from our repository. + +# In[2]: + + +import os +from wget import download + +filename = 'gd1_results.fits' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# Now here's how we can read the data from the file back into an Astropy `Table`: + +# In[3]: + + +from astropy.table import Table + +results = Table.read(filename) + + +# The result is an Astropy `Table`. +# +# We can use `info` to refresh our memory of the contents. + +# In[4]: + + +results.info + + +# ## Selecting rows and columns +# +# In this section we'll see operations for selecting columns and rows from an Astropy `Table`. You can find more information about these operations in the [Astropy documentation](https://docs.astropy.org/en/stable/table/access_table.html). +# +# We can get the names of the columns like this: + +# In[5]: + + +results.colnames + + +# And select an individual column like this: + +# In[6]: + + +results['ra'] + + +# The result is a `Column` object that contains the data, and also the data type, units, and name of the column. + +# In[7]: + + +type(results['ra']) + + +# The rows in the `Table` are numbered from 0 to `n-1`, where `n` is the number of rows. We can select the first row like this: + +# In[8]: + + +results[0] + + +# As you might have guessed, the result is a `Row` object. + +# In[9]: + + +type(results[0]) + + +# Notice that the bracket operator selects both columns and rows. You might wonder how it knows which to select. +# +# If the expression in brackets is a string, it selects a column; if the expression is an integer, it selects a row. +# +# If you apply the bracket operator twice, you can select a column and then an element from the column. + +# In[10]: + + +results['ra'][0] + + +# Or you can select a row and then an element from the row. + +# In[11]: + + +results[0]['ra'] + + +# You get the same result either way. + +# ## Scatter plot +# +# To see what the results look like, we'll use a scatter plot. The library we'll use is [Matplotlib](https://matplotlib.org/), which is the most widely-used plotting library for Python. +# +# The Matplotlib interface is based on MATLAB (hence the name), so if you know MATLAB, some of it will be familiar. +# +# We'll import like this. + +# In[12]: + + +import matplotlib.pyplot as plt + + +# Pyplot part of the Matplotlib library. It is conventional to import it using the shortened name `plt`. +# +# Pyplot provides two functions that can make scatterplots, [plt.scatter](https://matplotlib.org/3.3.0/api/_as_gen/matplotlib.pyplot.scatter.html) and [plt.plot](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html). +# +# * `scatter` is more versatile; for example, you can make every point in a scatter plot a different color. +# +# * `plot` is more limited, but for simple cases, it can be substantially faster. +# +# Jake Vanderplas explains these differences in [The Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html) +# +# Since we are plotting more than 100,000 points and they are all the same size and color, we'll use `plot`. +# +# Here's a scatter plot with right ascension on the x-axis and declination on the y-axis, both ICRS coordinates in degrees. + +# In[13]: + + +x = results['ra'] +y = results['dec'] +plt.plot(x, y, 'ko') + +plt.xlabel('ra (degree ICRS)') +plt.ylabel('dec (degree ICRS)'); + + +# The arguments to `plt.plot` are `x`, `y`, and a string that specifies the style. In this case, the letters `ko` indicate that we want a black, round marker (`k` is for black because `b` is for blue). +# +# The functions `xlabel` and `ylabel` put labels on the axes. +# +# This scatter plot has a problem. It is "[overplotted](https://python-graph-gallery.com/134-how-to-avoid-overplotting-with-python/)", which means that there are so many overlapping points, we can't distinguish between high and low density areas. +# +# To fix this, we can provide optional arguments to control the size and transparency of the points. +# +# **Exercise:** In the call to `plt.plot`, add the keyword argument `markersize=0.1` to make the markers smaller. +# +# Then add the argument `alpha=0.1` to make the markers nearly transparent. +# +# Adjust these arguments until you think the figure shows the data most clearly. +# +# Note: Once you have made these changes, you might notice that the figure shows stripes with lower density of stars. These stripes are caused by the way Gaia scans the sky, which [you can read about here](https://www.cosmos.esa.int/web/gaia/scanning-law). The dataset we are using, [Gaia Data Release 2](https://www.cosmos.esa.int/web/gaia/dr2), covers 22 months of observations; during this time, some parts of the sky were scanned more than others. + +# ## Transform back +# +# Remember that we selected data from a rectangle of coordinates in the `GD1Koposov10` frame, then transformed them to ICRS when we constructed the query. +# The coordinates in `results` are in ICRS. +# +# To plot them, we will transform them back to the `GD1Koposov10` frame; that way, the axes of the figure are aligned with the GD-1, which will make it easy to select stars near the centerline of the stream. +# +# To do that, we'll put the results into a `GaiaData` object, provided by the [pyia library](https://pyia.readthedocs.io/en/latest/api/pyia.GaiaData.html). + +# In[14]: + + +from pyia import GaiaData + +gaia_data = GaiaData(results) +type(gaia_data) + + +# Now we can extract sky coordinates from the `GaiaData` object, like this: + +# In[73]: + + +import astropy.units as u + +skycoord = gaia_data.get_skycoord( + distance=8*u.kpc, + radial_velocity=0*u.km/u.s) + + +# We provide `distance` and `radial_velocity` to prepare the data for reflex correction, which we explain below. + +# In[75]: + + +type(skycoord) + + +# The result is an Astropy `SkyCoord` object ([documentation here](https://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html#astropy.coordinates.SkyCoord)), which provides `transform_to`, so we can transform the coordinates to other frames. + +# In[76]: + + +import gala.coordinates as gc + +transformed = skycoord.transform_to(gc.GD1Koposov10) +type(transformed) + + +# The result is another `SkyCoord` object, now in the `GD1Koposov10` frame. + +# The next step is to correct the proper motion measurements from Gaia for reflex due to the motion of our solar system around the Galactic center. +# +# When we created `skycoord`, we provided `distance` and `radial_velocity` as arguments, which means we ignore the measurements provided by Gaia and replace them with these fixed values. +# +# That might seem like a strange thing to do, but here's the motivation: +# +# * Because the stars in GD-1 are so far away, the distance estimates we get from Gaia, which are based on parallax, are not very precise. So we replace them with our current best estimate of the mean distance to GD-1, about 8 kpc. See [Koposov, Rix, and Hogg, 2010](https://ui.adsabs.harvard.edu/abs/2010ApJ...712..260K/abstract). +# +# * For the other stars in the table, this distance estimate will be inaccurate, so reflex correction will not be correct. But that should have only a small effect on our ability to identify stars with the proper motion we expect for GD-1. +# +# * The measurement of radial velocity has no effect on the correction for proper motion; the value we provide is arbitrary, but we have to provide a value to avoid errors in the reflex correction calculation. +# +# We are grateful to Adrian Price-Whelen for his help explaining this step in the analysis. + +# With this preparation, we can use `reflex_correct` from Gala ([documentation here](https://gala-astro.readthedocs.io/en/latest/api/gala.coordinates.reflex_correct.html)) to correct for solar reflex motion. + +# In[77]: + + +gd1_coord = gc.reflex_correct(transformed) + +type(gd1_coord) + + +# The result is a `SkyCoord` object that contains +# +# * The transformed coordinates as attributes named `phi1` and `phi2`, which represent right ascension and declination in the `GD1Koposov10` frame. +# +# * The transformed and corrected proper motions as `pm_phi1_cosphi2` and `pm_phi2`. +# +# We can select the coordinates like this: + +# In[78]: + + +phi1 = gd1_coord.phi1 +phi2 = gd1_coord.phi2 + + +# And plot them like this: + +# In[79]: + + +plt.plot(phi1, phi2, 'ko', markersize=0.1, alpha=0.2) + +plt.xlabel('ra (degree GD1)') +plt.ylabel('dec (degree GD1)'); + + +# Remember that we started with a rectangle in GD-1 coordinates. When transformed to ICRS, it's a non-rectangular polygon. Now that we have transformed back to GD-1 coordinates, it's a rectangle again. + +# ## Pandas DataFrame +# +# At this point we have three objects containing different subsets of the data. + +# In[80]: + + +type(results) + + +# In[81]: + + +type(gaia_data) + + +# In[82]: + + +type(gd1_coord) + + +# On one hand, this makes sense, since each object provides different capabilities. But working with three different object types can be awkward. +# +# It will be more convenient to choose one object and get all of the data into it. We'll use a Pandas DataFrame, for two reasons: +# +# 1. It provides capabilities that are pretty much a superset of the other data structures, so it's the all-in-one solution. +# +# 2. Pandas is a general-purpose tool that is useful in many domains, especially data science. If you are going to develop expertise in one tool, Pandas is a good choice. +# +# However, compared to an Astropy `Table`, Pandas has one big drawback: it does not keep the metadata associated with the table, including the units for the columns. + +# It's easy to convert a `Table` to a Pandas `DataFrame`. + +# In[83]: + + +import pandas as pd + +df = results.to_pandas() +df.shape + + +# `DataFrame` provides `shape`, which shows the number of rows and columns. +# +# It also provides `head`, which displays the first few rows. It is useful for spot-checking large results as you go along. + +# In[84]: + + +df.head() + + +# Python detail: `shape` is an attribute, so we can display it's value without calling it as a function; `head` is a function, so we need the parentheses. + +# Now we can extract the columns we want from `gd1_coord` and add them as columns in the `DataFrame`. `phi1` and `phi2` contain the transformed coordinates. + +# In[85]: + + +df['phi1'] = gd1_coord.phi1 +df['phi2'] = gd1_coord.phi2 +df.shape + + +# `pm_phi1_cosphi2` and `pm_phi2` contain the components of proper motion in the transformed frame. + +# In[86]: + + +df['pm_phi1'] = gd1_coord.pm_phi1_cosphi2 +df['pm_phi2'] = gd1_coord.pm_phi2 +df.shape + + +# **Detail:** If you notice that `SkyCoord` has an attribute called `proper_motion`, you might wonder why we are not using it. +# +# We could have: `proper_motion` contains the same data as `pm_phi1_cosphi2` and `pm_phi2`, but in a different format. + +# ## Plot proper motion +# +# Now we are ready to replicate one of the panels in Figure 1 of the Price-Whelan and Bonaca paper, the one that shows the components of proper motion as a scatter plot: +# +# +# +# In this figure, the shaded area is a high-density region of stars with the proper motion we expect for stars in GD-1. +# +# * Due to the nature of tidal streams, we expect the proper motion for most stars to be along the axis of the stream; that is, we expect motion in the direction of `phi2` to be near 0. +# +# * In the direction of `phi1`, we don't have a prior expectation for proper motion, except that it should form a cluster at a non-zero value. +# +# To locate this cluster, we'll select stars near the centerline of GD-1 and plot their proper motion. + +# ## Selecting the centerline +# +# As we can see in the following figure, many stars in GD-1 are less than 1 degree of declination from the line `phi2=0`. +# +# +# +# If we select stars near this line, they are more likely to be in GD-1. +# +# We'll start by selecting the `phi2` column from the `DataFrame`: + +# In[99]: + + +phi2 = df['phi2'] +type(phi2) + + +# The result is a `Series`, which is the structure Pandas uses to represent columns. +# +# We can use a comparison operator, `>`, to compare the values in a `Series` to a constant. + +# In[100]: + + +phi2_min = -1.0 * u.deg +phi2_max = 1.0 * u.deg + +mask = (df['phi2'] > phi2_min) +type(mask) + + +# In[101]: + + +mask.dtype + + +# The result is a `Series` of Boolean values, that is, `True` and `False`. + +# In[102]: + + +mask.head() + + +# A Boolean `Series` is sometimes called a "mask" because we can use it to mask out some of the rows in a `DataFrame` and select the rest, like this: + +# In[103]: + + +selected = df[mask] +type(selected) + + +# `selected` is a `DataFrame` that contains only the rows from `df` that correspond to `True` values in `mask`. +# +# The previous mask selects all stars where `phi2` exceeds `phi2_min`; now we'll select stars where `phi2` falls between `phi2_min` and `phi2_max`. + +# In[104]: + + +phi_mask = ((df['phi2'] > phi2_min) & + (df['phi2'] < phi2_max)) + + +# The `&` operator computes "logical AND", which means the result is true where elements from both Boolean `Series` are true. +# +# The sum of a Boolean `Series` is the number of `True` values, so we can use `sum` to see how many stars are in the selected region. + +# In[105]: + + +phi_mask.sum() + + +# And we can use `phi1_mask` to select stars near the centerline, which are more likely to be in GD-1. + +# In[106]: + + +centerline = df[phi_mask] +len(centerline) + + +# Here's a scatter plot of proper motion for the selected stars. + +# In[112]: + + +pm1 = centerline['pm_phi1'] +pm2 = centerline['pm_phi2'] + +plt.plot(pm1, pm2, 'ko', markersize=0.1, alpha=0.1) + +plt.xlabel('Proper motion phi1 (GD1 frame)') +plt.ylabel('Proper motion phi2 (GD1 frame)'); + + +# Looking at these results, we see a large cluster around (0, 0), and a smaller cluster near (0, -10). +# +# We can use `xlim` and `ylim` to set the limits on the axes and zoom in on the region near (0, 0). + +# In[113]: + + +pm1 = centerline['pm_phi1'] +pm2 = centerline['pm_phi2'] + +plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) + +plt.xlabel('Proper motion phi1 (GD1 frame)') +plt.ylabel('Proper motion phi2 (GD1 frame)') + +plt.xlim(-12, 8) +plt.ylim(-10, 10); + + +# Now we can see the smaller cluster more clearly. +# +# You might notice that our figure is less dense than the one in the paper. That's because we started with a set of stars from a relatively small region. The figure in the paper is based on a region about 10 times bigger. +# +# In the next lesson we'll go back and select stars from a larger region. But first we'll use the proper motion data to identify stars likely to be in GD-1. + +# ## Filtering based on proper motion +# +# The next step is to select stars in the "overdense" region of proper motion, which are candidates to be in GD-1. +# +# In the original paper, Price-Whelan and Bonaca used a polygon to cover this region, as shown in this figure. +# +# +# +# We'll use a simple rectangle for now, but in a later lesson we'll see how to select a polygonal region as well. +# +# Here are bounds on proper motion we chose by eye, + +# In[96]: + + +pm1_min = -8.9 +pm1_max = -6.9 +pm2_min = -2.2 +pm2_max = 1.0 + + +# To draw these bounds, we'll make two lists containing the coordinates of the corners of the rectangle. + +# In[114]: + + +pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr +pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr + + +# Here's what the plot looks like with the bounds we chose. + +# In[118]: + + +plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) +plt.plot(pm1_rect, pm2_rect, '-') + +plt.xlabel('Proper motion phi1 (GD1 frame)') +plt.ylabel('Proper motion phi2 (GD1 frame)') + +plt.xlim(-12, 8) +plt.ylim(-10, 10); + + +# To select rows that fall within these bounds, we'll use the following function, which uses Pandas operators to make a mask that selects rows where `series` falls between `low` and `high`. + +# In[119]: + + +def between(series, low, high): + """Make a Boolean Series. + + series: Pandas Series + low: lower bound + high: upper bound + + returns: Boolean Series + """ + return (series > low) & (series < high) + + +# The following mask select stars with proper motion in the region we chose. + +# In[120]: + + +pm_mask = (between(df['pm_phi1'], pm1_min, pm1_max) & + between(df['pm_phi2'], pm2_min, pm2_max)) + + +# Again, the sum of a Boolean series is the number of `True` values. + +# In[121]: + + +pm_mask.sum() + + +# Now we can use this mask to select rows from `df`. + +# In[122]: + + +selected = df[pm_mask] +len(selected) + + +# These are the stars we think are likely to be in GD-1. Let's see what they look like, plotting their coordinates (not their proper motion). + +# In[123]: + + +phi1 = selected['phi1'] +phi2 = selected['phi2'] + +plt.plot(phi1, phi2, 'ko', markersize=0.5, alpha=0.5) + +plt.xlabel('ra (degree GD1)') +plt.ylabel('dec (degree GD1)'); + + +# Now that's starting to look like a tidal stream! + +# ## Saving the DataFrame +# +# At this point we have run a successful query and cleaned up the results; this is a good time to save the data. +# +# To save a Pandas `DataFrame`, one option is to convert it to an Astropy `Table`, like this: + +# In[124]: + + +selected_table = Table.from_pandas(selected) +type(selected_table) + + +# Then we could write the `Table` to a FITS file, as we did in the previous lesson. +# +# But Pandas provides functions to write DataFrames in other formats; to see what they are [find the functions here that begin with `to_`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html). +# +# One of the best options is HDF5, which is Version 5 of [Hierarchical Data Format](https://en.wikipedia.org/wiki/Hierarchical_Data_Format). +# +# HDF5 is a binary format, so files are small and fast to read and write (like FITS, but unlike XML). +# +# An HDF5 file is similar to an SQL database in the sense that it can contain more than one table, although in HDF5 vocabulary, a table is called a Dataset. ([Multi-extension FITS files](https://www.stsci.edu/itt/review/dhb_2011/Intro/intro_ch23.html) can also contain more than one table.) +# +# And HDF5 stores the metadata associated with the table, including column names, row labels, and data types (like FITS). +# +# Finally, HDF5 is a cross-language standard, so if you write an HDF5 file with Pandas, you can read it back with many other software tools (more than FITS). + +# Before we write the HDF5, let's delete the old one, if it exists. + +# In[125]: + + +get_ipython().system('rm -f gd1_dataframe.hdf5') + + +# We can write a Pandas `DataFrame` to an HDF5 file like this: + +# In[126]: + + +filename = 'gd1_dataframe.hdf5' + +df.to_hdf(filename, 'df') + + +# Because an HDF5 file can contain more than one Dataset, we have to provide a name, or "key", that identifies the Dataset in the file. +# +# We could use any string as the key, but in this example I use the variable name `df`. + +# **Exercise:** We're going to need `centerline` and `selected` later as well. Write a line or two of code to add it as a second Dataset in the HDF5 file. + +# In[127]: + + +# Solution + +centerline.to_hdf(filename, 'centerline') +selected.to_hdf(filename, 'selected') + + +# **Detail:** Reading and writing HDF5 tables requires a library called `PyTables` that is not always installed with Pandas. You can install it with pip like this: +# +# ``` +# pip install tables +# ``` +# +# If you install it using Conda, the name of the package is `pytables`. +# +# ``` +# conda install pytables +# ``` + +# We can use `ls` to confirm that the file exists and check the size: + +# In[128]: + + +get_ipython().system('ls -lh gd1_dataframe.hdf5') + + +# If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_dataframe.hdf5 +# ``` +# +# We can read the file back like this: + +# In[129]: + + +read_back_df = pd.read_hdf(filename, 'df') +read_back_df.shape + + +# Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html). + +# ## Summary +# +# In this lesson, we re-loaded the Gaia data we saved from a previous query. +# +# We transformed the coordinates and proper motion from ICRS to a frame aligned with GD-1, and stored the results in a Pandas `DataFrame`. +# +# Then we replicated the selection process from the Price-Whelan and Bonaca paper: +# +# * We selected stars near the centerline of GD-1 and made a scatter plot of their proper motion. +# +# * We identified a region of proper motion that contains stars likely to be in GD-1. +# +# * We used a Boolean `Series` as a mask to select stars whose proper motion is in that region. +# +# So far, we have used data from a relatively small region of the sky. In the next lesson, we'll write a query that selects stars based on proper motion, which will allow us to explore a larger region. + +# ## Best practices +# +# * When you make a scatter plot, adjust the size of the markers and their transparency so the figure is not overplotted; otherwise it can misrepresent the data badly. +# +# * For simple scatter plots in Matplotlib, `plot` is faster than `scatter`. +# +# * An Astropy `Table` and a Pandas `DataFrame` are similar in many ways and they provide many of the same functions. They have pros and cons, but for many projects, either one would be a reasonable choice. + +# In[ ]: + + + + diff --git a/_build/jupyter_execute/03_motion_28_0.png b/_build/jupyter_execute/03_motion_28_0.png new file mode 100644 index 0000000..87f7d6a Binary files /dev/null and b/_build/jupyter_execute/03_motion_28_0.png differ diff --git a/_build/jupyter_execute/03_motion_45_0.png b/_build/jupyter_execute/03_motion_45_0.png new file mode 100644 index 0000000..f3e40e9 Binary files /dev/null and b/_build/jupyter_execute/03_motion_45_0.png differ diff --git a/_build/jupyter_execute/03_motion_79_0.png b/_build/jupyter_execute/03_motion_79_0.png new file mode 100644 index 0000000..f228c2e Binary files /dev/null and b/_build/jupyter_execute/03_motion_79_0.png differ diff --git a/_build/jupyter_execute/03_motion_81_0.png b/_build/jupyter_execute/03_motion_81_0.png new file mode 100644 index 0000000..291881d Binary files /dev/null and b/_build/jupyter_execute/03_motion_81_0.png differ diff --git a/_build/jupyter_execute/03_motion_88_0.png b/_build/jupyter_execute/03_motion_88_0.png new file mode 100644 index 0000000..5c20d6b Binary files /dev/null and b/_build/jupyter_execute/03_motion_88_0.png differ diff --git a/_build/jupyter_execute/03_motion_98_0.png b/_build/jupyter_execute/03_motion_98_0.png new file mode 100644 index 0000000..0691cd2 Binary files /dev/null and b/_build/jupyter_execute/03_motion_98_0.png differ diff --git a/_build/jupyter_execute/04_select.ipynb b/_build/jupyter_execute/04_select.ipynb new file mode 100644 index 0000000..6c68b59 --- /dev/null +++ b/_build/jupyter_execute/04_select.ipynb @@ -0,0 +1,1460 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 4\n", + "\n", + "This is the fourth in a series of notebooks related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In the second lesson, we write a query to select stars from the region of the sky where we expect GD-1 to be, and save the results in a FITS file.\n", + "\n", + "In the third lesson, we read that data back and identified stars with the proper motion we expect for GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this lesson:\n", + "\n", + "1. Using data from the previous lesson, we'll identify the values of proper motion for stars likely to be in GD-1.\n", + "\n", + "2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need.\n", + "\n", + "3. We'll also see how to write the results to a CSV file.\n", + "\n", + "That will make it possible to search a bigger region of the sky in a single query.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Convert proper motion between frames.\n", + "\n", + "* Write an ADQL query that selects based on proper motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "The following cells download the data from the previous lesson, if necessary, and load it into a Pandas `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_dataframe.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_hdf(filename, 'df')\n", + "centerline = pd.read_hdf(filename, 'centerline')\n", + "selected = pd.read_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selection by proper motion\n", + "\n", + "At this point we have downloaded data for a relatively large number of stars (more than 100,000) and selected a relatively small number (around 1000).\n", + "\n", + "It would be more efficient to use ADQL to select only the stars we need. That would also make it possible to download data covering a larger region of the sky.\n", + "\n", + "However, the selection we did was based on proper motion in the `GD1Koposov10` frame. In order to do the same selection in ADQL, we have to work with proper motions in ICRS.\n", + "\n", + "As a reminder, here's the rectangle we selected based on proper motion in the `GD1Koposov10` frame." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.units as u\n", + "\n", + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figure shows:\n", + "\n", + "* Proper motion for the stars we selected along the center line of GD-1,\n", + "\n", + "* The rectangle we selected, and\n", + "\n", + "* The stars inside the rectangle highlighted in green." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/04_select_11_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "pm1 = centerline['pm_phi1']\n", + "pm2 = centerline['pm_phi2']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pm_phi1']\n", + "pm2 = selected['pm_phi2']\n", + "plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.plot(pm1_rect, pm2_rect, '-')\n", + " \n", + "plt.xlabel('Proper motion phi1 (GD1 frame)')\n", + "plt.ylabel('Proper motion phi2 (GD1 frame)')\n", + "\n", + "plt.xlim(-12, 8)\n", + "plt.ylim(-10, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we'll make the same plot using proper motions in the ICRS frame, which are stored in columns `pmra` and `pmdec`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/04_select_13_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pmra']\n", + "pm2 = centerline['pmdec']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pmra']\n", + "pm2 = selected['pmdec']\n", + "plt.plot(pm1, pm2, 'gx', markersize=1, alpha=0.3)\n", + " \n", + "plt.xlabel('Proper motion phi1 (ICRS frame)')\n", + "plt.ylabel('Proper motion phi2 (ICRS frame)')\n", + "\n", + "plt.xlim([-10, 5])\n", + "plt.ylim([-20, 5]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The proper motions of the selected stars are more spread out in this frame, which is why it was preferable to do the selection in the GD-1 frame.\n", + "\n", + "But now we can define a polygon that encloses the proper motions of these stars in ICRS, \n", + "and use the polygon as a selection criterion in an ADQL query.\n", + "\n", + "SciPy provides a function that computes the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of a set of points, which is the smallest convex polygon that contains all of the points.\n", + "\n", + "To use it, I'll select columns `pmra` and `pmdec` and convert them to a NumPy array." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1049, 2)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "points = selected[['pmra','pmdec']].to_numpy()\n", + "points.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll pass the points to `ConvexHull`, which returns an object that contains the results. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.spatial import ConvexHull\n", + "\n", + "hull = ConvexHull(points)\n", + "hull" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`hull.vertices` contains the indices of the points that fall on the perimeter of the hull." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 692, 873, 141, 303, 42, 622, 45, 83, 127, 182, 1006,\n", + " 971, 967, 1001, 969, 940], dtype=int32)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hull.vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use them as an index into the original array to select the corresponding rows." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ -4.05037121, -14.75623261],\n", + " [ -3.41981085, -14.72365546],\n", + " [ -3.03521988, -14.44357135],\n", + " [ -2.26847919, -13.7140236 ],\n", + " [ -2.61172203, -13.24797471],\n", + " [ -2.73471401, -13.09054471],\n", + " [ -3.19923146, -12.5942653 ],\n", + " [ -3.34082546, -12.47611926],\n", + " [ -5.67489413, -11.16083338],\n", + " [ -5.95159272, -11.10547884],\n", + " [ -6.42394023, -11.05981295],\n", + " [ -7.09631023, -11.95187806],\n", + " [ -7.30641519, -12.24559977],\n", + " [ -7.04016696, -12.88580702],\n", + " [ -6.00347705, -13.75912098],\n", + " [ -4.42442296, -14.74641176]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_vertices = points[hull.vertices]\n", + "pm_vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To plot the resulting polygon, we have to pull out the x and y coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "pmra_poly, pmdec_poly = np.transpose(pm_vertices)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figure shows proper motion in ICRS again, along with the convex hull we just computed." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/04_select_25_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pm1 = centerline['pmra']\n", + "pm2 = centerline['pmdec']\n", + "plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "pm1 = selected['pmra']\n", + "pm2 = selected['pmdec']\n", + "plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.plot(pmra_poly, pmdec_poly)\n", + " \n", + "plt.xlabel('Proper motion phi1 (ICRS frame)')\n", + "plt.ylabel('Proper motion phi2 (ICRS frame)')\n", + "\n", + "plt.xlim([-10, 5])\n", + "plt.ylim([-20, 5]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use `pm_vertices` as part of an ADQL query, we have to convert it to a string.\n", + "\n", + "We'll use `flatten` to convert from a 2-D array to a 1-D array, and `str` to convert each element to a string." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['-4.050371212154984',\n", + " '-14.75623260987968',\n", + " '-3.4198108491382455',\n", + " '-14.723655456335619',\n", + " '-3.035219883740934',\n", + " '-14.443571352854612',\n", + " '-2.268479190206636',\n", + " '-13.714023598831554',\n", + " '-2.611722027231764',\n", + " '-13.247974712069263',\n", + " '-2.7347140078529106',\n", + " '-13.090544709622938',\n", + " '-3.199231461993783',\n", + " '-12.594265302440828',\n", + " '-3.34082545787549',\n", + " '-12.476119260818695',\n", + " '-5.674894125178565',\n", + " '-11.160833381392624',\n", + " '-5.95159272432137',\n", + " '-11.105478836426514',\n", + " '-6.423940229776128',\n", + " '-11.05981294804957',\n", + " '-7.096310230579248',\n", + " '-11.951878058650085',\n", + " '-7.306415190921692',\n", + " '-12.245599765990594',\n", + " '-7.040166963232815',\n", + " '-12.885807024935527',\n", + " '-6.0034770546523735',\n", + " '-13.759120984106968',\n", + " '-4.42442296194263',\n", + " '-14.7464117578883']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = [str(x) for x in pm_vertices.flatten()]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now `t` is a list of strings; we can use `join` to make a single string with commas between the elements." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pm_point_list = ', '.join(t)\n", + "pm_point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting the region\n", + "\n", + "Let's review how we got to this point.\n", + "\n", + "1. We made an ADQL query to the Gaia server to get data for stars in the vicinity of GD-1.\n", + "\n", + "2. We transformed to `GD1` coordinates so we could select stars along the centerline of GD-1.\n", + "\n", + "3. We plotted the proper motion of the centerline stars to identify the bounds of the overdense region.\n", + "\n", + "4. We made a mask that selects stars whose proper motion is in the overdense region.\n", + "\n", + "The problem is that we downloaded data for more than 100,000 stars and selected only about 1000 of them.\n", + "\n", + "It will be more efficient if we select on proper motion as part of the query. That will allow us to work with a larger region of the sky in a single query, and download less unneeded data.\n", + "\n", + "This query will select on the following conditions:\n", + "\n", + "* `parallax < 1`\n", + "\n", + "* `bp_rp BETWEEN -0.75 AND 2`\n", + "\n", + "* Coordinates within a rectangle in the GD-1 frame, transformed to ICRS.\n", + "\n", + "* Proper motion with the polygon we just computed.\n", + "\n", + "The first three conditions are the same as in the previous query. Only the last one is new.\n", + "\n", + "Here's the rectangle in the GD-1 frame we'll select." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -70\n", + "phi1_max = -20\n", + "phi2_min = -5\n", + "phi2_max = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we transform it to ICRS, as we saw in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import gala.coordinates as gc\n", + "import astropy.coordinates as coord\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "corners_icrs = corners.transform_to(coord.ICRS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use `corners_icrs` as part of an ADQL query, we have to convert it to a string. Here's how we do that, as we saw in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "\n", + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have everything we need to assemble the query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assemble the query\n", + "\n", + "Here's the base string we used for the query in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Modify `query_base` by adding a new clause to select stars whose coordinates of proper motion, `pmra` and `pmdec`, fall within the polygon defined by `pm_point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query_base = \"\"\"SELECT \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + " AND 1 = CONTAINS(POINT(pmra, pmdec),\n", + " POLYGON({pm_point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here again are the columns we want to select." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Use `format` to format `query_base` and define `query`, filling in the values of `columns`, `point_list`, and `pm_point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258))\n", + " AND 1 = CONTAINS(POINT(pmra, pmdec),\n", + " POLYGON(-4.050371212154984, -14.75623260987968, -3.4198108491382455, -14.723655456335619, -3.035219883740934, -14.443571352854612, -2.268479190206636, -13.714023598831554, -2.611722027231764, -13.247974712069263, -2.7347140078529106, -13.090544709622938, -3.199231461993783, -12.594265302440828, -3.34082545787549, -12.476119260818695, -5.674894125178565, -11.160833381392624, -5.95159272432137, -11.105478836426514, -6.423940229776128, -11.05981294804957, -7.096310230579248, -11.951878058650085, -7.306415190921692, -12.245599765990594, -7.040166963232815, -12.885807024935527, -6.0034770546523735, -13.759120984106968, -4.42442296194263, -14.7464117578883))\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query = query_base.format(columns=columns, \n", + " point_list=point_list,\n", + " pm_point_list=pm_point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 7295\n", + "Jobid: 1603132746237O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019143906.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And get the results." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7346" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "candidate_table = job.get_results()\n", + "len(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting one more time\n", + "\n", + "Let's see what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACO0UlEQVR4nO39fXRU15UmjD9nUnU7EhUgZWyX+ShAKqySrA+skoykGEjATegshVZrePXTEF6HnvYkPe52D+847U5PenV33p5M8nqa+dHj9XM6ed0J8dC0RtEoNE17FNtgI4hKWCoZVRGpZEoyKvNRxqZs8EWyb1X6/P4o7a1zrySCP8SXzrMWS6pb9+PcI3ufffZ+9rOFlBIaGhoaGnMH/+pGD0BDQ0ND4/pCG34NDQ2NOQZt+DU0NDTmGLTh19DQ0Jhj0IZfQ0NDY47BdaMHcC1YtGiRXLFixY0ehoaGhsYthUgk8raU8k7n8VvC8K9YsQK9vb03ehgaGhoatxSEEKPTHdehHg0NDY05Bm34NTQ0NOYYtOHX0NDQmGPQhl9DQ0NjjkEbfg0NDY05Bm34NTQ0NOYYtOHX0NDQmGPQhl9DQ+OmgmVZN3oItz204dfQ0LhpYFkWTpw4MaPx14vCJwNt+DU0NG4qrF69GoZhTDmuLgp6Afh40IZfQ0PjhsBpvMmwT/cdABiGgdWrV/N5pmnOeK7G1aENv4aGxnXHTCEdMuy9vb3TGnTLsjAwMIBAIICBgQGkUinbfWgx0Lg6tOHX0NCYVVzNe6eQjmrsI5HIjEa/v78fJSUl8Hq9CAQCOHjwIPx+PwzDQDqdRktLi94JXAO04dfQ0PjEQXH4qyVrDcOwxeullPxdVVXVlDi/ZVkQQvBnj8eD5cuXY2hoCKZpIh6PY8WKFTAMA6ZpIhwOa+M/A7Th19DQ+MRAhry3txc9PT2wLAuBQGBGDz4cDqOnpwcAUFFRAcMwIKWc1ugPDAwgGAwiGo2yV19bWwuXywXDMFBVVYV169YBAMLhMAYHB2GaJj9bLwKT0IZfQ0PjE4GanK2qqkJxcTEikQieffZZ7N27F+l0egojx+Vyobi4GAAwMDAAy7Js4R861zAMlJSUwOPxcDiop6cHhmHwgkH/AGDevHn40pe+hMHBQfT29sI0TVtCeK5DqNurmxVVVVVSN2LR0LjxME2TjS+FalTvnD6bpomBgQH4/X7E43EEg0EMDw9jfHwceXl5qK6u5vMHBgawevVqAPbwTyQSgZQSVVVVAIBoNIry8vIpu4ETJ05MyRdYloVoNIpgMGg7f2BggBeQuQAhRERKWeU8rj1+DQ2Na4Jpmmhra0MqlZriRatefDqdRjQaRSAQQDKZRHl5OXw+HyoqKpCfn4+KigoAOYPtTPISotEoLMvC+Pg4IpEIent7cenSJXR3dwOAzcMvKSmxGX3adYyNjSEWi6G7uxt79+6FZVkoKSmxhYrmKrTh19DQuCZ4PB5s2bIFIyMj7NmTIe3p6YFpmujs7ERrayvGxsb4+0QiAcuy4PF4UFVVBY/HwwafoLJ6KF5fW1uLBQsWIBQKoaqqCi6XC4lEYkrcnkJEgJ0tlJeXh1AohJqaGgQCAcRiMb5mOubQXMoB6FCPhobGNUEN7wCwedmEcDiMsrIyGIaBaDTKYRr1fPV+4XAYLpcLFRUV6O/vt8Xr1WfS76ZpIhaLcQjI4/HANE2+Rh2beq1pmujv70d1dTUzgMrLyzlsBeR2ILdbGEiHejQ0NK4J03m+alhHNcyAfQFwuVzs0UspbUZVvS/9Tkbf4/Gw8SfP33m+atwvX76MSCQC0zRtO46enh7bzoHg8Xg4iUw5h4GBAX4vAFwUNhc8f234NTTmONSwCRlC1fCq1bLTxcfJc+/v72fjCuTomQMDAwDAcXiV20/nkIft8XhQXV3Nu4Senh6Ew2GYpsk5hf7+fmSzWSSTSVtYiHYK6vUqTNPEgQMHYJompJTweDzs3VPIKZFI2MY53RzdLphVwy+EOC2EiAkhTggheieOeYUQLwghTk38/OxsjkFDQ2NmqEa1p6cH0WgUJSUlACa9dDWBmslk0N/fP4UbT7TMeDzO3HxVW6e/v5+fYVkWG1vysJ3hI8MwUFxcDLfbDQDM7a+ursbGjRuxY8cOrF+/ns8nr1/dYaTTaX5Pj8eDrVu3wuv1criHPH7aSaxevZpDR2rS2rIs271vB1wPj/8LUsrVSpzpmwAOSSlXATg08VlDQ+M6gwzy2NgYLMtib1lNvpL3G41GEYlEEAqFbFRM8tyrq6vh9XpRVVXF55BR7u/vx/j4uI2loy4oANjQptNp/j2RSCAYDPJOgAy0M6avev20wwgEAmhvb7ftTmhnQd6/3+9n9hAAvjcxkqLRKFf/CiG04f+Y+G0AP5n4/ScAGm7AGDQ05jzIq5ZSor293SazQN/Tz6VLl3KFLAA2+LQ4qElU8qTp2oqKCrjdbmbV0K4hlUrZQkHd3d1ob29HIBDgUAyxeOj+iUQCTz75JA4dOsQsIhozXWMYBjweDwKBwJSwjWVZiMfj2LJlCzwej00mgphFmUwGHo8H5eXlcLlcAIDy8nLb7uRWp4POtuGXAJ4XQkSEEF+bOHa3lPI8AEz8vGu6C4UQXxNC9Aohet96661ZHqaGxu0Pp2G3LAuJRAK1tbVobGyEZVloaWlBV1fXFF7+M888g2XLlk3hzquGlTxpn8/H3jZ55LW1tQiFQli3bh3WrVuHwsJCdHR0IBAIAMgtEPn5+aivr4fX6+XryPO2LAvpdBo//vGPuR7ANE289NJLSKVSXBlMISXDMFBXVwdgamKZwkYDAwO2nASNIxQK8eJBuwh6Z8pntLS02EJJtxpmlc4phFgspTwnhLgLwAsAHgNwQEq5UDnnHSnlVeP8ms6pofHh4GS1UCxfCAGXy8Whk3Q6DY/Hw7TK4uJiDomo16dSKQwPD3MSlaiP9HsgEIDX62VPuLu7G5WVlYjH45BSsgGl2P6JEyfg9/vh9Xr5XsBkZW00GsVbb72FhQsXQkrJRjyVSsHr9QLIhW7S6TQMw8CePXuwbds2xGIxuN1um8ibkxKqzlFvby8Mw+CKYNo5OOcSyFFVASAUCvGiqVYc34y4IXROKeW5iZ8XAPwMwAMA3hRC3DMxqHsAXJjNMWhozBWonrxTo76/vx9CCJSVlbHxVpkubrfbxrBx6tp4PB5ks1mQAxYIBDjJq8bTib+fyWQwODiI8vJyVFdXM3uGjLDf70cymQSQC/M42T8FBQV45ZVXUFRUhKqqKliWha6uLjz33HPo7u7mZ9MiQLmA2traKcqezqpeStbSd8FgEP39/QiHw7bCLtodqffKZDL8XDL6M/UOuJkxa4ZfCDFPCPEZ+h3AJgAnARwA8NWJ074K4B9nawwaGnMFqlFTQzFExSwuLkZZWRlLGJBnS0wXMpaUzFQ57XSPoqIivmc8Hsf4+Dj6+/s5JEOhn2AwyNIMlCimMba0tCCVStnCPBSP7+/vRyQSQTgchsfjweOPPw6Px4NIJIL+/n5UVVVh+/btWLduHe9YKPFMkQtnjYEzZ0E5iWw2y0lhr9fL80MxfdoNUH0AhYAsy7ItcoBdTtr5N7lZ4ZrFe98N4GcT+tkuAPuklB1CiB4ArUKI3wOQBPB/zOIYNDRuS0xXoeo09mTkSkpKmP8+NjaG0dFR1NTUAIAtrGOaJgYHB2FZFubNm2cTRAsEAlz4RNILKurq6myLwnTSyoZhYNWqVbzgGIaBzs5OVFZWIpFIoLi4GIZhoLe3lwXZSKhNDUE571leXo5oNGqbG5qTnp4eCCG4Spfgcrl48TNNE+3t7Vi1ahXH94Gcwiglq9Ukdn19vW3eSXtIhfO6mw1askFD4xYDeaMUOyepA9XQqOEKkiVQJRfIwFIYRaU6OmPdFCq6ePEi7rjjDlRXV9vuO5M6piqHoBZvqdIJTz75JDZu3IiysjIkk0nbzoHOLS4u5nj6TEaU3sk0TUQiEZw6dQrNzc18LJFI8OJF76zO13QVyfRuxDIyTRP79u1DMBgEAOTl5fH8CyF410TX3QzyD1qyQUPjNgGFKIhPT2ELp2Hs6uriVoRk6IBJL//dd99lxU06h75TwzzRaBSFhYW4cOECiouLYVkW2traOLHqFFsDwBW+4XDYpuQJgLtoeb1ePPHEEwiFQkgmk/D7/Whvb2cphoGBAVRUVHA83bmgqc9UdzqhUAiNjY08F/F4nEXaxsbGeA7U+VJDUuo8l5SUIBaLIRwOIxaLoaioCJWVlcjLy+NdSHV1NS8GdB0Vg6ljVMNONxra8Gto3IIgIxWJRDjhCMBGoayrq2MDSGwZui6VSuEXv/gFTNPksIuqcaMacyklvF4vmpub4fV6WaWTVDeByWQwVbhmMhkAuZAKhVnI0FKYiBYakkrw+Xxobm5GKBSyySfQ+9JC4qysnW7c8Xicx0JhJ8uyuBJYxa8zxi6XC6FQCGVlZVi/fj28Xi8qKiqQSCS4uUx7ezuOHDkyZYdD9+/t7UVXVxeP/0ZDG34NjVsAv85bDIfDOHToEPbu3YvOzk42LolEAgBsYQfTNHH48GF85StfweHDh/m+zrCvWpVLvHaC1+u1cfnJqJM3T0lSlSkETDJgKHEKgL1jWgioEIvGQAY+EolwERgxgUh7R+XUDwwM2NhEatUvxfDVxWOmzly0g6AY/oEDB3iuKCF94MABAMCmTZswb94827VOmemqqqopkhc3Ctrwa2jcRHCGMsjg9/b2TmkeToaspqYGhpHTn29oaIDL5eJkp6qJo+4Gtm7dipKSEvbcgcmet/QMMr5qfF4dp1MHnwwcFT4RG8dZPAXAJqymxsXV8FJ/f7+tgIu8brrG7/cjkUhg2bJlePrpp22hJzVeTz+p8pjGToshLSLq4kFjpkWJEtLOxW/r1q2wLAvPPffclG5f6kJKx4ntNFPY6npBJ3c1NG4SqElBSmqqyUhKipIRUZkj00E1Qul0GoODgxgfH4fb7UZtbS2fo4Zr1Fi4lBILFy5k1kwmk0EoFLIlbZ3PUVsz9vT0TPH4acxkbJ1JYfXd6N6dnZ3Iz8+3FVlRApdCWSqnnxZKJ5+fxuZ8lmVZXNOghr2klDba6HSJZcuy0NnZiXg8jh07dtjub5qmbUw0H3Qf+lvPZjtIndzV0LjJQd6qZeX05mOxGK5cuQIA7EWr3jeJiVHoApgMzzjZKYlEAoWFhbZjFAOnc6lidmxsDL/85S8xMjLC9M3y8nIAYEkEtRBKzS+oSV+n0SfQTsK5YDnfTd0tkH4+eetlZWXM2mlra5vyvk6HVt2hqMlgEoVTPXrauajzPV04iMaWl5eHbdu22dhT4XAY7e3ttl0EhcFUnSMKGUWj0esqAaENv4bGDYKzVy2QMyatra0YHh5GUVERx42TyaStcQgZmHg8jlQqhd27d8M0zWm9f8Mw4PP5MDIyApfLxeESMkRk2ICccVqzZg1Wr16Nbdu2sW4OVcWSB0zPyWaztuds2bIFg4OD7Nmr72eaJlpaWnD06FHWulHfRR0HxegB4PTp0wAmDSWJt1HeQQ3BkIGnmgB1bLSokmQzGWdaPJ2LFIV/iN2jvo8amiJlUnX8pH/U19fHVFEKBdHCR3MSj8fx7rvvTlETnU3oUI+Gxg0AGcHly5ezrrwzrk+GKJVK4dvf/jb+4i/+Aj6fD4A9REMLCIUVKMxBoYZUKoWnn34ajz76KFfC1tbW2p6hcuwLCwsxNDTE4SCVp69y2+PxOCzLQl1dnS1uTsVXavxeDeHQDiUWi/EiRNcS1DBQOp1mls90oRrn5+mKp5zhrMHBQU7aTqfNQ8+l8A/x+J2hHLWFo/ocGsd3v/tdbNiwAffffz8OHjyIFStWTGEW0RwQnPUEHwczhXq04dfQuI5QDVQ6nWbDocaV1aKggoICDA8PY9myZfD5fFOMcDqdxu7du7F+/XrMnz8fxcXFGBwcRGFhIZ5++mk88sgjSKVS8Pv9bJxaWlrQ2NjIRU2qt+r1evHyyy9jyZIl2Lhxo228TsNKhU3OZCkZalWQzVljYJom9u7di8LCQsybNw/BYBDxeByZTMbWjlE9X+3hO12h1Uz5AvV7gpoDcFIw1XupOQu6hq63rFx/gfnz5/N4KfyVzWYRCoVw9OhRuFwufkc6R81VAJONbNrb27FixQqsW7du2nf5sJjJ8ENKedP/C4VCUkPjVscHH3wgjx8/Lj/44AP53nvvyQ8++EBevHhR/uIXv5AffPAB/6NzL168KL///e/LF154Ydrvjx07Jl944QX53HPPyffee0++99578vjx4/K9996TUkp5/vx5+fLLL8v33ntPXrx4Uf74xz+WFy9etH1Px6SUfM7o6Kh86aWXbNccP36cz6Px07PoJ41P/Uz3nQ7nz5+f8k7O91Tnjt5FnS/1+5nmnMbrPKbO43R/A+eYjh07Zrvuvffek8eOHeP5Ud/35Zdftj1bvU491/n9xYsX5bFjx3i8zvM/LAD0ymlsqo7xa2jMItTwjRpnbmlpQWdnJ7NlVK+Tfno8HgSDQZSWlgIA897p++LiYuTl5WHt2rU2/rvaw5a0dxKJBDZv3syx8XQ6jWQyyccoLLR161b4fD4IIThmr3LWU6kUTpw4YatOVWPnwKTCJsXSSQGUYJomTNNER0eHrb2hGuJwaugDk7UBcqKJu5pYdu4A6Cf17aVEMXnuKioqKlBeXm57B7q+s7OTz1cZVfT3ofi+ugsjrSJ6t+7ubtvznFXIVFFNc1BcXMzVzio99ZPEbIq0aWjMaTjj4UTLtCwLzc3NtnNJYbK4uNjWiKS8vBwHDhzAli1bbIlUlamjhgScgmJqNyvDMPjera2t+NKXvgSfzwePx8PXUShibGxsin7/5s2bMTQ0NCUmbVkWj5Hepby8nMdBFElgMrfR3NyMzZs3IxqN4uTJkygrK0Ntba1t3M64NxleYttQctoZe1dDNSozh35SVTEtApcuXUJeXh6y2SwqKytt85lIJNDU1PSh/u5VVVVIp9Nob2/HZz/7WfT09PB9aZ7VPASFoLq6uhCPx7F8+XIMDw8DmBS/+6ShPX4NjU8YqgdbUlKCeDyOK1euwDRNPPPMM/jud78L0zTR3d2NaDTK9MHCwkIcOHAA6XSaY8jEWgGmFgR5vV4cPHjQVtjl9A7z8vLYwJHnalkW3n//fTz33HNMIVTj36lUCmfPnkVBQQEzeciTjcViiMVinNwEwBIOlFym6lR1rKoHu3z5cgDA8PAwysvLEQwGEQqF+Hx1l6AmsGnsxK6hhVTthqV6yOq5zgItOjcYDPK7xuNx1hii72lhJckFlYGk0jx7enpsf7dkMon6+nr4fD7s3LkTHo+HG9lTbF8tkKP/BrZv387N5GfL6APa8GtofCJQDRNpspDhLi8vZ1pmaWkpNmzYAMMwEI/HUVBQwPdIJpO2XrAqdbO9vd3m8VMbwk2bNjH7prOzc8q4yGgLIVhILJFI4OGHH0ZTUxP6+vpYyO3EiRNIpVJ45plnUFdXZ5NzGBgYQFVVFXbs2MGMIFUAjnR7DMNAWVkZUzEJxM03TZPngjz2vLw8AJPyDIlEAlu2bLGFi/bs2YOuri4AmEKtXLFiBVNI1fCQGo5Sm8WQJDMxoRobG+Hz+VBaWmrrrQsA8+bN450XLSY9PT28iKr6/seOHbOF9LxeL4eCgMmFOxKJ8HhVOiu1eKQw0mwZfUCzejQ0PjZoW19fX890yUwmg5qaGg5BqJREMiB79uxBQUEBV8eqMW61wlWNB6tVs0eOHGEqaDKZxA9+8AM8/vjjNpaO3+/HwYMHcdddd7GkMjApekb0TZ/PZ6MxEg2U6KMqu4WujUQiKCoqslWnqmEfokyqLRJJQprokSobyGm01Xvu3bsXTU1N/Cy1q5haXJbNZrn1It2H7nH06FFmKqmsqWQyaWuh6KSGOimkzryCyq7auXMnzyWF+ZwtGtXF8moU1U8CunJXQ+MTBv0PH4/H8dnPfhb79+9Hb28vVq5cCbfbjd7eXqRSKf6fXNWapxDOwoULUVBQYKsqVcNEFGZQwxWUgCSjb5omnn/+eXz9619nw0jXU8ghPz/fVtREhrO4uBjJZNJm1MgoU/KVDDR5qOl0GgMDA1i5ciWeeuopHDlyhOmZsViMdy3j4+Po7e3l0I1lWSwhDUxKI6u0TdUDJhiGge3bt9sWGEqskjYQVTZT60U1DNPb24vu7m6Mjo7ytRUVFQgGg+jo6IDf77ctuqpBJ50gteOWeg7NiWEYeOihh6bMv7rYq+Gn6d59Nj18J3RyV0PjQ4KMUjgcxuDgIBoaGiClxBe+8AUAORXHzZs345VXXsHu3bvxxBNPcGGTnNB/oTgw8deDwSCi0SiuXLkCwzCQyWS40cfY2BgnTNUFRDWOgUCAvXOCyrhJJBIskTw4OIhsNotMJmNL/FIYg5qKUFKWPFfDyAmj9fX1obKyEl6vF4899hg3WQ8EAlO0fIQQto5bFGaZjqNOxpLmqaKiAt3d3ax9T+erfHp1HkjLCICtiIx+VlZW2uoOVq9ezSJ1lDNxgkJuTh0ftZkLFYSRWB6N06n5T+O9GbpyaY9fQ+NDQKX8lZWVYfny5bZYLlEivV4vFixYgPXr17NHWl5eztWiagGUnNCLX7p0KebNm4eysjK43W720N1uNxtQ0nVxet/OVogE2l1s376dF47i4mKEQiG43W42XhR+IC+aPFQ1QX3kyBG0tLRg//79OH78OFKpFJLJJEzTRGtrK7NlCHl5eSyDTJ5tcXEx725UbR/Vy1ebzJw+fRp33323jRKq5j9U2QfKGdA5QK7QivSF1DwEGV+v18tUVadcAjGJ6G/qrNpVw1Rq/kWN3U9n4G+00Qd0jF9D45rg9FKBXIx9eHgY27dvn7bsn0Beqar4SAaXWB59fX146aWX8PWvfx0ejwexWIxplCq6urpw8uRJ7NixwxYnBsCVrdN50+TNUxtDUgClsajtCtWWiuruwuPxIJVKob29HQUFBbhw4QIaGxvh8Xhw6NAhuN1u5OXlTVG0pLlQK5NVOYqhoSFeNE6fPs3ia8BkxW55eTl75JQv8fv9SCaTtoYt6nyr8f2BgQH4/X54vd5pDe9MsXznuZaVE2Cj6mL6Xj02m2qbHxZaskFD4yOAjJZTKgHIGbJgMDglREBG0/k/v9rPln6qYQ3TNDE0NITBwUE0NTXZkqmqIezt7WXvXTX67777Lh566CFb2IaMMCVjVTlmSuLSmJ2GzjRNPPvss/z54YcfZoOrirfRs1R9/enmTk2K0piouInCUHStWtfQ3t6OxsZGfibNuyp3oUocq4lUQjqdxr59+1BWVmYLRzkNvLrgxWIxri2g72jenCEjwkwLxo2CTu5qaHxIkEEDJml7asemqqqqaePCwFTKoUpn3Lt3L8LhMIDJsIbH44HP50MoFGIVR6JMdnZ22gyzM9Y/MDCApUuXctiFIITgBDQxjYBJZonKlSdjHA6H0dnZyVWxn/70p7Fp0yZ8+tOf5hh/Mpmc8r7kxTuTnjR3QM6YUz0BLUSJRAKVlZX8TkAuDBYMBnle6uvrbW0eKTRGFbwqbVOtIlbnHsgtLkVFRbZEtZNSSX+748ePc9Uz3YNCS0QLVVlX0yWHb2Zoj19DYwZYVq5kn2iZKv2xo6ODk31Oz9JJ36N7kVeseuzT0QipaUp1dTVM08Tg4CCLr2WzWRb0UquBI5EIrly5wtRQolDGYjEMDg7izjvvxB133MEsGGByB0LeMgB0d3djbGwMDz74IOLxOO666y6k02kEAgEAucT1hg0b4PF42BOnIjR6Lhl1qvB1KleqOwV6Z6Ke+nw+m1FVd0TO+6TTaRw8eNAWGgJg223RDolyKH6/f4qnr+7gLMtCeXk52tvbsWnTJvj9ftt/D0AurKPunG5maI9fQ+NDgBJ4iUQC3d3dbPSz2Swn+wA7/ZC8aKfcAJAzEBQKqaurY30XuofqgZKBByYbsBAnvra2lo2g6rS5XC6sW7cOBQUF7FHH43GUlZWhoaEB77zzDjczSaVSfG/DMDhhHIlEkEqlcPToUZimibGxMbz88suchE4kEtiwYQOef/55HD9+HMuXL+eFjyipVL0ai8Vw7NgxLvKiOQAm20DSMdpJEH1UTb5SQxQnz7+npwdDQ0NYuHAhf6ZdlBqSi0ajzNc/fPgwUqnUjOEYCht5PB40NjbizJkzU3I1hmHYpCVuVWiPX0NDgdP7KygowOuvv87VqiofmzxLwzDYm7csy1ZApXqeJMFLhsNZFOVMSNJ9ybtX5ZuJxaNSCg3DwJ49ewAAW7duxdDQEAAgFArxuFKpFJ566ik8/vjj/C49PT3cnWvXrl2oqKjA0qVLbZRJ1TNWdejpeHd3NyorKznvYJomhoeHWXuIxkrv3d/fj/HxcaasqiwnNV5fUlIyZYdEz1SLpgzD4F0SMOn10zMpMd3R0cEUTgoLUTGXkyKq5khuVWiPX0NjBjjjuEDO+8tms3j99dc5lkwqisAk55zCD+Pj4+ju7uZSfPqeqITE0ac4ezqdRltbm60wSDUw5BWPj49jcHCQvfV0Os2ePhktn8/H8fFgMIitW7cimUyirKwMUkqWCCDj//nPfx4AsHfvXqTTaYyPj2P//v0AgLVr17I6J0Hd1XR1dbEnTiEa0zTx0ksvAZj0tpPJJCoqKmxGn+5DuxhVd18tZlLj9QBYI8jJ3vF4PFi/fj1isRj6+vqYKktzH4lE0Nraiu7ubliWBZ/Px1RbuvfAwAAqKiq4cY36t7jVjf7VoA2/xpyGGmJRQwyWZTEPneLiFAdXKYKUHCWDXlhYyEldwzBY3pj0emgRUfVoVNB1xJ0HwAaU5BeKi4s5rp9KpXDgwAGuPs3Ly7MZ0rq6OlvLRMuymFv//vvvIx6Po7S0FMuXL0c8HseCBQtQU1ODUCiE/v5+FhYjBs6JEyfYkNJ8+Xw+loqg3cF0Valqh63p2D/hcHiK9LRhGGhqakJtba0txt/T04NoNIo1a9Ygm81y8lcVtwuFQmhqamItIDqu3p/GaZomdu/ebRNyu12NPqANv8YchhomIcYNJVcPHDiAu+++m1kzFKoJh8MIh8MwTZOTj+FwGMPDw8hkMhgeHrapLqrFUKFQiEW/aLfgZJ+oXnEwGEReXh4Mw0AqlcLIyAiWLFkCICf0denSJbz++ut4//33OayjFkip2vIAWOystbUVyWQSpaWlKCgo4F685eXlNgNLxVwA0N7ezqEvUt9UmTBOdpPTqFO8XW3wXl5ejmg0yqqXbrfbJqNsmiZLFat/M/LGaW7nz5+PpqYmZvqof1uSdgAmcynqPNM4vV4vdu7cOSNL63aDjvFrzEmQYSEjRyGMYDCIRCIBIQT+6Z/+iSV1AXAs/OTJk1xoBEzP3Xa271PlBOh7WiCcbBW6ZmBggPXyd+/ejYcffhhnz55FJpPB2NgY8vLyIISwacirImiqJ53JZHhXcs899+Bv/uZvsH79emSzWdTX12NoaIhDLwDQ1tZmYy1RMjYSiWBsbAxr164FANbWd4araH6JeUT3cCZFp2upSB79+Pg43G63jXfvnFeVUkl/HxJJc/5tVA18day3M3SMX2POgjxT9V9nZyd27drFxqiuro4TiB6PB/v378fDDz9s8wArKiqQTCZRWVmJxsZG3g0AkwwZ+qdWvBIbCJgMX1D8XxUBc0r0+nw+PPPMMwCA5uZmXLhwgeP2586dQygUwrp161jrPRKJsAgaiatZVq6pytjYGDf3GBsbwx//8R+z0fd4PMwWovfZvHkzJ5KpYMnj8aCsrAxnz57ldyGap6pXb5omOjs7sW/fPoyNjfHfQK1roGMej2dKH11iQLndblvTF+e8Ovv+jo+Po62tDalUikM+zl2U2qRmLkN7/Bq3NSjuOzY2BrfbDSkl6urqAIDbDaqgCs9ly5bht37rtwCAtfXXr1/PXixJLxBUT9eycjLCJOUwnfdJ5xKIxz4yMsIywzRGwzCwa9cuPPjgg9i4cSMfVwumnAZ1z549iMfj+MIXvoDz588jGAyySBmNhRYGEiAj7n9fXx9Onz6NxsZGRCIRjI6O2ipn1Vi56k2TtEIkEoFl5ZQ4165da9s10I6EEsPErFE7h9F9u7q6IIRAJpPBunXrYFmWbSdC19EiWlhYiLa2Nu47QPIR6t9nrkF7/BpzFuXl5XC5XCgrK4MQgsMWM8VzXS4XhzIsy8KVK1cwNDRkozGSWiQAjluTd6lWzzopmtP1iaUdwPDwMC5duoRwOIyjR49i7969iMfjMAwDjz/+ODZu3Mj3GhwcxKFDh2w1BHQv6oglpYTb7caWLVuwbt06246EoCaZLSvXZcvlcrEGz/r169HY2Mh9eUmCmN5NXQgopENzPX/+fACwxdOz2Syi0SgAcHEUJZDVcdEurKioCKdPn+aFjto70jgobEP1FTt27EBlZSVqamrmvNG/GrTh17htocoG0P/8mUwG+/btYxkEFcS2aWhogMfjQW9vLyKRCIQQ3IKPWDnt7e3o7OyEaZpMfSQDnkwm0dDQwF5tOp3mQiY6l3jotFB4PB4UFhYiPz8fQgjk5eWhqamJO0KRd087mLvvvhsvvPAC0uk0Ojo68OSTT6Kjo4MNsdfrxapVqwAAzz//PFKpFNNH6fnkLQOwSUjU1dVx4ll9L2BSfsGycmJle/bs4bmkRYVCYipVk76rra1FeXk5TNPE008/baOnqn8HwsjICDZt2oR4PM67CrVtITCZdyC0t7fzrkNNnmtMQuvxa9yWoNh6YWEhSyJHIhFUVlayJ6yeSwsDFQ55vV6bHALpw5Axa2xsZDkEteE50T5JxoBCGatWrYLH40FBQQEsy8Lhw4dx4cIFbNq0iWPVHR0d2Lx5M+vbG4bB4RMSVCOv/OLFiwByi9u5c+fQ3NzM8fiRkRFUVVXhkUce4fdzevY0NpJUzmazKCsrsy0wNPa9e/fizjvvxDvvvMPef0lJCYqKipDJZOBy2c3IdDr0aiKdwjrEovF4PLZFSE3Ajo2NYWRkhHMk1GELmEyQZzIZjI6OIp1Ow+fzcbJZpedq2HHNMX4hxDwA70spfzW7Q5oKHePX+LCgBK7KvpmOgaIyQ8jgOGPYamiGqmaJ9gnA1qSDjOaLL76Ic+fOob6+nqWDLcvCk08+idWrV+PEiRN4+OGHuYGJGmoJBoNob2/HihUr4HK5sHTpUnznO99BQ0MD1q5dy+cVFBTgjTfewOXLlzF//nwUFhZiZGQElmVxHoPi6GR4VWlo+p4StCRvUFZWZqtsPXr0KEZHR9HQ0MCLT3d3N+cB1LzBdH+HcDiMU6dO2c51nk/evKrLQ9cWFRVheHgYFRUViEQi06pr0s5H1c3X+AiyzEKIfwWgGcBXAFQD+ADAbwB4C8BzAH4opTw1ayNWoA2/xtWgeuyqDAJ9Vvu0OmWSydsmgwbkwh5U5NTV1cVeJhU1kYY9JRqByUWBErPRaBRLly7F66+/zvcCgEOHDrFKZCqVQiAQsCVTSXZANWoU6jl37hwSiQQKCwttiVN1HgiqEBsA7lmr7kzUuSMjqwq9UahKrUsgCYlYLIaioiJbf9mr9a0lyWkg18BmOpon/aSCKgAssEbj6erqsgnNqXD+fTU+WnL3JQCFAP4UgE9KuUxKeReAtQC6AXxPCLH9Gh78KSHEq0KIgxOfvUKIF4QQpyZ+fvYjvZGGBuxFT2pHJzoWj8fZIDq9eLVtnspOGRwc5BixGpOnwiEyTps3b2aaI5DLH0QiEUQiEQSDQbz22mt49dVXeYwA2Fj7fD4OQ+Tn56O+vp47edH9VeqnaZqorKzE9u3bEQqFMDo6yto/ZGj37t2Lo0ePskwELWzEsDl+/Dh6e3uZQupEKBSyqXtSuEd9x2w2i76+PliWxbsLNck6ndRxJBLB0NAQS1bEYjFkMhlYloVUKoWWlhZ0dHRg3759iEQinBM5evQoqqqqbJpAQogZx6+N/rXjajH+h6SUGedBKWUawP8C8L+EEO6pl03BfwAwCGD+xOdvAjgkpfyeEOKbE5//5MMNW2OuQ/Uo1TgubfXVPrIq1CIelRFC51Fyl3YAZWVlAMALCD2HQgtbtmzhHQUJufX398MwDFsrQnWMan6BtOdJa0elTJqmyWEir9eLvr4+7utK3ruT4+5yuVBYWIje3l4IITgssm3bNs5HqHF8CvVQaEcNYx04cIDfj96dvHWVcqqC5l0tspJSory83CbsRpXQp06dwuc//3mcPXsWRUVFPN5Nmzbhueeew5o1azA4OIjx8XHk5+fz7knH7T8erhbqyQeQIeMvhCgC8CUAo1LK9mu6uRBLAfwEwHcA/EcpZb0QYgjA56WU54UQ9wB4WUpZdLX76FCPhorpDBYAW7iBvqeQAoHCMWooJBKJcJtDkmIOBAK2pCcZPIpBUys/MswqD50Md29vLxussrIyWziJQKGoVCqF3bt3s+EdGBjAxYsX8fWvfx0DAwP4+7//eyxatAhf/OIXce7cOU4oO5ub03MpGUo0TgBIJpN4/vnnsWrVKtaTJ4qq2kmM7rF06VK88cYb3AugoqIC/f393AuYYvKFhYUYHh7G+Pg4gBwdtq6ujhfBbDZr06+nvx/lPWi+ncylsbEx5u9Tklt79R8OHyXG3wng96SUp4QQAQCvAPh7ACUAXpFS/uk1PLQNwHcBfAbANyYM/7tSyoXKOe9IKaeEe4QQXwPwNQDw+/2h0dHRa3hNjdsZasm/WjCkGnH6Xe3L6vV62dBQ+0HyatX2hWSESEcnnU7buO8Ud55OStnZs5UKsgzDwNGjR3H+/Hk0NTWx10uyxBTbNwwDhw8fxmuvvcZGe8WKFbjjjjuQzWZx5coVPPjggzbGD8W/CwoKeAECcvmFYDDI+QIaX1tbG7OGAKCzsxNALkQ1f/58W1JVLZ6iHUooFGKGEyWBgcnmLK+//jrPB+VDpmvHqM6XGnZzFnABmHKdxofDTIb/aqGezyrJ268C+Acp5WNCCANABLnY/9UeWA/ggpQyIoT4/IcdsJTyhwB+COQ8/g97vcbtBdM00dLSwt6qanTJSKg0QDL6FI4hhorL5WJjQ6EMwzCmME/UTlpkqJy67cCkB6suKBR2aW1txeLFi/H666+jqCi3qSVaKLFqKisrMTg4CCEEHnjgAQBgnXoysC6XCwsXLmSDrYZl6D02b948hRWjVhZ7PB4b44U8/cLCQrjdbhQXF9sWUmIFqSCDDuQS4LFYDGVlZaxvryaxLSsnoeA0+k6tfTXs5izgcj5b45PD1ZK7qrHdAOAFAJBSWgD+5Rru/TkAW4QQpwG0ANgghNgL4M2JEA8mfl74COPWmCMgI20YBpqbm23Nr6mnLCVO1f6nJBe8efNmluwdGBhAYWEhIpEIDMNgbXYgF59vbm5mRonaSYvyAqTb7iwMMk0Tp06dslE/ASAQCMDtduPee+/FmjVrEIvFOExC/6hwq6CgACdPnsRrr72Gzs5OZDIZvPHGG7j33ntRVlbG0sJqIpVyCVu3boXP5+M+tSrUJKuTyVNWVob77ruPi9IymQxr3Ki5A/pJ80BzPzY2hvb2XNSXksB0fiQSsSXW1bHTTzUXow379cXVDH9UCPHXQoj/C0AAwPMAIIRYeC03llL+qZRyqZRyBXK00MNSyu0ADiC3g8DEz3/8iGPXuM1hmia31KOwxnRsDlXvRTW+lmVxCISMzMmTJ5nFoyo+Euh3WhTS6TT6+/ttlaJqxysKD1G4Rm3IXVpaivz8fMybNw+WZSEWiyEWi8E0TaRSKa41+O53v4uWlhZIKdHU1ITi4mJ87nOfw7Jly9De3o62tjZeMFRks1k2/pSMJZYMhaVokSCpCBIwA3K0ygMHDiASiWD//v0oKirixZTmhRhS6XTaJq2Qn5+PtWvXckGXCtoZUChI/Zupiyb9zVSJC43rg6sZ/n8H4G0AKwBsklJSTXQJgL/+GM/8HoDfFEKcAvCbE581NGygIqHi4mKUlZWxp01GjdgiRLukZCswqRQJTHqiANhgESOGPFu1YtTv92NgYICNaXt7Oy5fvszPtiwLJSUlrF2jerF0L4/Hg+XLl3MzkFAohJGREfj9fhQVFeHw4cP45je/iXQ6jXvvvRerVq3i3Yzf78eOHTu4qUlRURGLjqla8gC4wQotPps3b8Ybb7zBmv0qzVUIwa0KL126xPNRVFSEqqoqZjJlMhnW0gkEAjh+/DhTXjOZDC8+xKWfrkoXAL97f38/9wBWKbS0c6Bwz3QLusbsYUbDL6Ucl1J+T0r5H6SU/crxLgAjH+YhUsqXpZT1E79flFJulFKumviZ/nXXa8w9mKaJF198EceOHeMmIEAu4WlZOa2cpUuXcuKRulOZpolgMDglVEG/k8GixUENXwQCAVuSNJFIoKqqCm63m+P2wKQsA3mr1EYxnU7bum91d3ezR04J2FdffRUAsHPnTliWheeff54pk3Qt7UTOnj2LNWvWoLKyEs8++yz27NnD3HoCMWdKSkrg8/lQXFyMBQsWAAD3q21tbcXSpUvh9Xrx0EMPsQDdwMAAQqEQKisrkUwmYZom8vPzmap57NgxPPvss7AsC9XV1czMIV0fdRGaiVdfXFzMekNAbiGm1ocU6tKyCtcfMyZ3hRCfAtAEYAmADinlyYmE7X8CkAfg/uszRI25BsvKiYw98cQTNgPe29sLl8sFwzBw11134eWXX0Z9fT0XMi1cuBCxWIwbikzHCKGfS5cuxZkzZ2wePzF6yHv3er34y7/8S6xevRo1NTVswMirDwQCzEXftGkTvF4v38vJdx8eHsY999yDTCaD559/HtlsFvn5+fjc5z6HkZERmzEk4085h3Q6zfx8YFLeIJvNwuVycZFZOp1mrj5VGFdVVWF8fBzPP/88mpubsW7dOp6HkpISdHd3c/etRCJhK96i1pNq7D6VSuHUqVNMT6X3VRuk0HxTc/OtW7dOq7453e8a1wdXY/X8HYBlyNE4/7sQYhRALYBvSin3X4exacwRONk5xMEnhUgyGhTuMQwDd9xxBx588EF4PB42iqdOneJjTmql2hg9nU7jmWeewaOPPgpgkg1EHj2df+HCBTQ0NGDDhg3Mrff7/cx+ISYLadt4vV5EIhFmu5DoGZDrxRuLxfDQQw8ByLF71qxZAwAYGhpiDSB6vtoLNpFIYNu2bTAMg+9/zz334I477uCCqN7eXsTjce6dS4uBx+NhD5/up7KfiMOvhqyAnDFev369rRWjaZro6OjApk2beJGk7lkq+4nopCQ6R7kP7dnfPLgaj/8kgHIp5b8IIT6NXLw/IKVMXc8BArqA63aGysen+K9lWewpUvx6uiItJ+c7nU5jaGgIbrebC6EoiUgeMF1Dapd0PcXwV6xYgcrKSubLk2FTKZ3ZbJapi+Sdp1Ip+Hw+pFIpDA0N8WJAHnF3dzcuXbqEt956C8uXL0d+fj6KiorYOJ48eRL5+fk2qiiAKe0ELWtSNO2hhx5COp3m+XBq1ZDXnUwmpxS20a6mq6uLFzHnvDrvSfkCtRCtq6vLRv0Mh8Pc7EbVSdI8/BuDj6LVY0kp/wUApJTvA3jtRhh9jdsXZJApaUjc91dffZUbbjjDL+SVO41IT08PXn31VVy5coU9WDUGTR4wwdmEhaSWXS6XTZ5BNfoejwcVFRUIhUIYGBjg2H4ikcCuXbuQTCZx8OBBDoN4vV5Eo1F0d3cjHo9zU/CNGzeiqKgIIyMjHN/Py8tDeXm5bddjWRYuX76MgwcPIpVKcfORjRs3oqGhAceOHeMiMQCIxWL8PpR7ePrpp/kcCu/EYjFOVFdVVXGYycm4oaIvSsz29vYiFovZ4vnU2Iauc7lcvHgRjXa6v5fGjcXVDH9QCBGd+BdTPseEENHrNUCN2xeGkdO3J24+sWFGR0eZ1UMhHyBnzNrb27m3K8GyLBQXF2N4eBivvfYai4ip4Qt1MaBr6J5ktLxeL8rLy20hFwAsGpZKpWxslKGhIa5Y/dWvfgXDMLB8+XIYhoFEIoG//Mu/xF133YV169Zhx44dWL9+Pe8kDh48iCtXrvA8EP+eDC2Ne8GCBaivr8fw8LAtTu7z+bBlyxYkk0k21KdOnUI6ncaRI0ewa9cuAMAjjzwCn8/Hc0VsG5KnVumUqiY+VfVu2bKFY/zBYJAL4NQ6hlgsxqG06upqPl+Hdm5eXC3Us/xqF0opr5uGgg713J4gA+LUuLEsC319ffj5z3+OL37xi6ipqbEZf7Xgh7xSqsAl+V9ioFBV7eDgIBoaGmzaOupPin+T1LIqJxCNRnHp0iXW3CFtmX379iEYDKKmpoaN59DQEC5duoSRkRHE43Fs3bqVhdUI4XDYJnegPo9i+uqcADmKKi1eaowemKwepmtJA8cwDOzduxcNDQ1s/NXwFd2bQm3qnD755JNYv3498vPzeS4pTESLF82ZM4ymcfPgo2j1BADcLaX8heP4WgDnpJTDszLSaaAN/+0BZwUpHSPDFQ6HbYwc0spxatSrBpHOU5ONlmWhvLycpRCCwSD6+vqQl5eH4uJim9qkc0xq7J9YMhUVFQBgEyizLAvHjx+Hy+VCKBRCX18fXnrpJfzu7/4u5yeAnIetdvAKBoPYt28fduzYwYwdMvqqAVZpnRSrP3jwIFasWMELiZrvIPE556L4zDPP4NOf/jS2b9/OSeCxsTFUVlayZAV1C1NZS2TYVaNORp4avqh5FG30b058FK2e3chRN50Yn/juy5/IyDTmBEzT5K5Nzi5YAFgyoKioiI0PNe6g6/ft28dsmVgsxklcohWqzJ+BgQFuiO71elnlkQwZPdOyJhuqUIiGwh3UBYvGWFhYiPb2dixZsgSjo6NYvnw568PX1NSgtLSUWUYAeHfhdru5zywAm14Q5ROoYjYajaKgoIA1hogSmkwmOeRDhtbv9/MCODY2xt2paF49Hg8efvhhXgzIuPf399u0eyg5SzkAVZOIFj165uXLl9HS0oJ7772X/zba6N96uJrhXyGlnBLLl1L2CiFWzN6QNG43kMF1u90sbdDT0wMhBPPcI5EITp48CbfbzWEQ1funxGFRUREbSzJyZDAty+JG4YFAALFYDKdOnWI+PJCTOaBwBy0UaqiFdg3l5eW2VoGdnZ0YGxvj8VNDFRI7A8DsmaamJltSmpK2Tz31FL7whS+goaHBJrQGTIawgFysnSiktFNQq4Pb29u5jsHv9+Pee+9FNptFXl4e7y7ImNPCoVJayYOfrsjNKe5GKqJ5eXmoqKjgRU0b+1sbVwv1JKSUgQ/73WxAh3puXZBnSyEZlU1DBltKieLiYvT19aG0tJQpmU79dfKYTdPEyMgIhyaIkUKxa8BOW1T16qnqNJPJoLS0lGPfKt8/HA5zgRU1V/nbv/1bnDhxAv/pP/0nvPPOO7ybGBwcnBI+Ut87HA7DMHLaNURvdIZHTNPEnj17UFZWhlAoxJXJaljHSbEEchTR0tJSnDx5EvF43Mb1p0Wxu7ubdzsz5QauZsTVojCVUuock8bNiY9C5+wRQvy7aW70e8jJMmtoTAuVDtjZ2cmMmKeeegovvvgiK0B6PB4OJ3g8HkgpMTQ0BCkl69M4pQD27NmD/fv3o6CggMv9AfC9VNpiPB7nBaenpwemaaK2thahUAiZTAYHDx5EOp1mQ0Yhnmw2i6GhIe6g5fF48G//7b/FN77xDXR1deHixYvYt28f9u3bh8uXL+PYsWM2j53Q29uLoaEhjI2N8e/0Ts5zaTdDrKH6+nr2rlUGDY3H4/GgpqYGPp8PNTU13JjFMHKdv7q7u9Hd3c2USnWuent70dPTwxRRJ9NJTbJTj9+Ojg5bT1xt9G9tXM3jvxvAzwBYmDT0VQAMAL9zPTn92uO/dWBZFnp6ergbE4VuqMsUecaqd04NvNUqUuK+l5WVMasEyHnsK1euxBtvvMEhiZ6eHg5fqDRNCtlQaOTcuXMs0EZJyuHhYQ45UbvCTCaDTCaDNWvW8I7j0KFDGBoawqZNmzi2Tv++9a1vYdu2bVi7dq2t2AmYTBYTuygUCrEX7twd0O/k7QOwMYJUY0s7FNrV7N27F8XFxbZmKTS/zq5VJHKnto4knj7lANS+A2odg8athQ+d3JVSvgmgTgjxBQClE4f/WUp5eJbGqHEbgLj5pJqpthwcHh5mj1F1OLLZLIdMiEXjdrsRDAY53k8MlrKyMgwODnKfXMMwbA3RadE5efIkioqKYBg5HX8AOHr0qE3LR21oTmOnnINarBQKhXDy5EmMjIxgZGQEDz30EPLz8zlR/Z3vfIdF1ogRMzIywrIFlDh2u90wTRM///nPUVpaynNBBpxYNs3NzbCsnIwzdbEiuQiVk0/XbN26FU1NTfw+6kLp9MwpdJPNZpmjT3A2iXHG/jVuH1zN4/dO+8UErqeqpvb4bw04KZJqopEKsqZj9ahhDFWzRo1L070pDq/G+Z3GzTRNPPvss1i6dCkWL17M59DOggyuaZrYu3cvli9fjvnz59sakdN9Wltb0dTUhFgshiVLlmBgYADz58+3USfV/rHHjx/HkSNHUF1djS9/+ctTKKg0toKCAnR1dWHnzp02+igxgbq7u9nbp+uefvpp7Ny506ZhRHM4XT2EWqNA96duXcPDwyguLp7SZUwb+NsLHyXGHwHQq/zsdXzW0AAwGao4ceIEV8ICOYXK8fFxNkKVlZU2o0/nq3RDNU5P8scAbLK+VGj17rvvMpuH4tZAzjtdtmwZ3n77bRQUFLC+fEVFBXvRZJCpS1ZhYSHa2trwt3/7t+js7OTvg8EgV7teuHCBjT41H6HcQCQSQXd3N/Lz8/HII4/gnXfesS1WlJBNJBJ4+OGHsWHDBqxfvx5DQ0O8UxkaGuIF5Oc//znP6969e2EYhm2RIE17mivV6Pf29qK/v597C5DkQiKRwJYtW+Dz+VBRUcGFaHSd1sWfO7iaHv9KKWWB8rNA/Xw9B6lx80It3ydFyUAggP7+fvZ+iSY5ODgIYDJZqTbhUNki6r1Vg0/H2trakM1mUVNTwwtFeXk5F3lZloV33nkHX/rSl+D1erm1IN1bbX9YWVmJvLw8boHocrmQyWQQiURsuw/DyGnql5eXc90AhbMA4MqVK0gmkygqKkIgEGAKKS0utECVlJTA6/XaVDMBcHiLxrV8+WThfDabRV9fH7OTwuEwBgcHmS7qnDdKmI+MjLB0NP19KOxGfydK/qqLh8btj6t5/Boa1wSfz4dIJGLzLCsqKrB27Vo88cQTbACp+TYZfDI2QC5pS+0B1apc8oBpgQGAYDCIhx9+mL3fnp4edHd3s2iaZVmor69HKpXjH1CMnIrE+vr6bGOlEM/atWvx8MMPY+PGjVi5ciUb1Z6eHnR0dGDXrl3Yt28fe++nTp2CaZrcFpIkIciwArlwUSwWw9jYGMLhsG2xMAwDly5dQn9/rs8RhY88Hg+2bduGRCIBwzCwbds25OXl2bxxylGQh0/vQ3RVqgEAclo6FCqlVoqpVMpWa0DXaMwNaMOv8ZFBdM3du3fj6NGjaG1tZc/SMAz21inUcfr0aTZezi5SUkpUVFSwIaO4diQSwd69e9Hb28thifz8fFs7xcLCQsTjccTjcWzevBmDg4MYGRlho6Y29ZZSIh6P4+c//zmAXMiko6ODe+vG43Gk02n84Ac/wF133cVJ50WLFuHxxx/nYi9qlALkFCpdLhe8Xi+PEcgZWTK4lZWVEELw7oPmr6urC8uWLUMkEuEQFABbYxav12tbvJzIZDLo7+/npu8UPqPFQW1d2d7eDp/Ph46ODpsAnsbcwozJ3ZsJOrl780ClHVLDjePHj8PtdrOOPYEolQUFBfD5fOwpk6gaVeBms1lkMhmsXbvWprWjyieQd65qxqtJZMuyWOXTWWBEuwW6NplM4lvf+hb+5m/+ZkrhFaGjowPz58/nkBLdh5g31IidPtP1qmAc6ftTkpa09VV9/M7OTtTU1PBczqRfrxp8VfPemRxXE8TU30DV/CH9fHVXonH74kOLtDkufhDAKinlj4UQdwLwSClfn4VxTgtt+G8OWJaFrq4uW8s/akgC2HV3yCAdOXIEo6OjaGxsZCNLRod+p8YiJCTmZKSQ50/PUkMw2WwWALhSlSqBVdkBdfwejwfJZBLf+MY38Nd//dc4c+YMCgoKWHSMQGqYsVgMUkoIIeB2u7l3rt/vZ2YM7W4o8UwLFBlkp/Imha/UXYvaGYt2PaphVxcutQ5CNfyqDAYJwLW3t2PTpk04fPgw00p1SGfu4CMbfiHEXyBXuFUkpbxXCLEYwE+llJ+bnaFOhTb8NwdIaM3tdrO0AGnBOFsdqhRB8tZVHRz1fKJZOuUc6HqSVSYNHNUAApMLTk9PD4uKGUZOiTKTycDlcmHZsmV4/vnnUV9fj5GREZw7dw6bN2/G4cOHce7cOQQCAVRWViIej0/pgqWCKoFJrG3t2rVTaJNqKCcWiyEUCnFRFOn27Nq1Cw8++CA2btzI96UQTVdXF06ePMkKnuo91VaU0y0K6nzQwjtv3jzbbkJj7uCjqHMSfge5xup9ACClPCeE+MwnPD6NmxwkyQuAPe9oNIorV65M0XNXjT4ZRTJMY2NjNm8VgK3q1vlzYGAAoVCIn0mhH8oDCCG4YIkKuej+qgAaVe/SQvX222/DsiycO3cODQ0NMAwDfX19tsIyZ69edaFpbGxkcTZnk3EgF4559dVXeb5IbI6+f+yxx1hpk0IyTuE2eqba7pDUM1WFUZoTGhsdN4xc31z1uIYGcG3JXUvm/m+QACCEmDe7Q9K42UChheLiYuTl5fHxqqoqrF+/HsFgENFolJk5ANjoE9+cQC0GaWEgpo7KTlH1Y1RVSuKnW5bFht3tdvO96b6XLl1COp1maQKPx4NNmzbhwQcfZHXOn/3sZ0ilUhwDP378uK1Juco+ol0LsWFaWlqYQkrvptJaDcNAWVkZ7rvvPhQVFbFxpxwHAObS03Pi8bhNVK6qqgrRaJTZRMlkkhPFNEbTNNHS0oLu7m50dnYiHA7bxurMdWhoEK4l1PMNAKsA/CaA7wL4twD2SSmfmv3h5aBDPTcWFI6prq6GaZro6+vjxuC0KKgNRMhIU/GTaoDUzk1qiER9Bhl9Z5csup7CMWp4pLe3F1JKFBYW4r/8l/+CX/3qV/jVr36F/Px8PPDAA4hEIqipqcEbb7yB5uZmmKaJF198EcuXL8f999/PSVlVPdPZYcqycvLSFy9exObNmznsozYfV8MvJA3tcrlY6Izi7EBuV0DSFE4pCWByl7Vs2TK8/noupUa7G7oHLSa9vb2sKKrWHmjMbXzc5O5vAtgEQAD4uZTyhU9+iDNDG/4bD+qGFYlEEIvFsHXrVni9XoTDYWQyGZv0b0lJCQuekdF3uVwsEaDG+p3sG2BqklJdJKLRKMbGxqbtQkU4cuQIioqK8Nprr2HFihUYGBjAlStXYBgGXn/9dXg8HjQ1NaGvrw9Ajg45NDSEoqIiuN1uZDIZnD17lvX4qZBLje83NjYCAEs6qNIHAGwLnDP8QrkIMuq081CTxNPNiTNcpEosqMwebfA1CB/X8C9HjtXzohAiH8CnpJTvzcI4p4U2/DcOxLxpaWnBqlWrUFZWxgazpqbGpgSpeuZ0LRl4ALbvndTG6aiL6g5CNaQkjUA7DnU3QaBrDx8+jEOHDuHOO+/EwoULbV49LWbxeBwFBQUsnyCEQGlpKTN9VAYOxdzj8TjeffddjIyMYMeOHdPSRylur8bvgUk9ItM0WTtHpXjS+Gk3oS4eqi4QLUA6aasxEz4Oq+ffAfgaAK+UslAIsQrA30opN87OUKdCG/7rg+m44+RRqwY2nU6jtbUV27dv53PV69SkqHpPMt5kPMnoUZHSdOOhe6lNRKhZucfj4R1HZWUlWltbkc1mUVhYyKJr+/fvx8KFC3HHHXdg5cqVSKfTKCkpwdGjR3HkyBE89NBDU8TQKJQUiUS4uTo9W50PqlGgsTsXKvqelDqpglld2KjnrgpaFJ9++mk88sgjNiqmaZqsrjk2NoYFCxbYEuUaGio+juE/AeABAMellPdPHItJKctmY6DTQRv+2YeThqkeB6ZqwR85cgShUAiDg4O4fPkyd6syjFxjcCoiUq8jg02GlPIFL730Eh5//PFpi6mmC5kcOnQI8+fPR3FxMY4fP47h4WHs2LGDxxqLxfg5Pp8Pr732GkpLS1l/3jAm9fjJaPf29uLKlSsYGhpCMBi07WZIn0cdD/1OzKZ58+ahvLwckUgEtbW1ME0Tx48fR35+Pu8iiAarhnsikQjH9ml3RD8ty7J5/OFwGGNjY9z2kaCNvsZM+CjqnIQPpJQcQBRCuDDB8NG4fWAYdoVHgmmarKHjPJ9a8o2Ojtq46x0dHfD7/ejv70c4HGa2SSwWw7FjxzieTU3QH3/8cd4JqEqWlDNIpVIsmmaaJkZHR1FYWIjBwUFOjlqWxSEol8vFbJnXX38diUSCm4sTDbWiogI+n493MVVVVaitrUVRUREqKysB5GiYQgiWcaDxpNM5RXKPx4Py8nLmyVuWhVOnTvGOiPIGtbW1cLvdGBsbY1YS9ROwLIvbOJIevtoQncJRQI4KS6J3NG5t9DU+Cq7F438SwLsAHgbwGIBHAQxIKb8166ObgPb4Zw9EeaQGH2oFKfHfSXZgpkQiGSc1jKNW6RLD55VXXsHRo0fxxS9+EevWrbONQw2hqGEdGgMVS5Hnq1YMp1Ip9PT04Be/+AUqKytRU1PDIR11nCTvcOnSJWzevJmPq3PR3d2NS5cu4Z133uHG6hRPJzYQ7RzUXr4k1EaFUul0egr7iZqqALnm8plMBvF4nENTqvBaOBxGUVERdu/ejY0bNzIfn+ZWQ+Na8HFCPQLAI1BYPQCekddR5Ecb/tlBOp3GD3/4QwwMDODJJ5+Ex+NhzRhq9uH3++HxeKaVJCCjSFRKCldkMhmbbk5nZydOnz6N+vp6XiAAcGUthUbUcIrK2KG4NhV6qYtTOp3Gk08+iQ8++ADl5eX46U9/ioKCAjzxxBM4ffo0gMkkNABcunSJG6CoiWV6j3PnzuH48eP43d/9XbzzzjvMLiLJiIGBAfh8Prz++usYGxtj9o9awawWoNE/lfKpVhhblmVr2E7HKM7/yiuvYMOGDVpXR+Mj4SMZfiHEvwIQlVKWznjSdYA2/J88yCCfPHkS9fX18Hq9iMViyGQyyMvLY966qh8DwMZ3p/sQyCgT710NG6k6NU6eenFxMYud0YLjFGOj3wm0OHR0dCCTySA/Px/3338/UqkUnn32WdTV1eHMmTNwuVzYtm0bt3SkMar5BDUhSx7/okWLpmgDqUnbK1euIJvN4r777oPf7+fxqJW4Ho8HR44cwcsvv2zLYajCbFVVVTZhNZqbZDKJ5557Dtls1ibdoKHxYfCRYvxSyn8B0C+E8M/ayDRuCCiOTqyU9vZ25seT0fZ4PGyAqUKVZInpHj09PTajZxgGiouL2dOlylySRo5Go/xsj8eD6upqeDwebNmyhbtaOY0+3UMde39/P5LJJFpbW+F2u3HfffdxbmHnzp2488470dzcjB07dsDr9fJzVAaROkY1qTx//nxkMpkpRVI05vLycoRCIfzyl7/Ec889x5LO4XCYO18dOHAAlpVTDH3sscdsuxmSp5ZSwjRNHDx4kLtlUajs8OHDaGho0EZfY1ZwLaGewwCqAbwC4Aodl1Jumd2hTUJ7/J8sKPm4ePFiJJNJZsREo1FWhHSCPF2SKfD7/RgaGsKlS5dw4cIFNDY2MsNneHgYAJjfDoB57dFolJOpqmFXjb0aylFDJvT70aNHMTY2hkWLFuHtt99GRUUFLly4gKVLl+LMmTOcPHW73Rxymm4OqFG56tUT84h2CCQQV1xczFWzdE5rayvWrVvHPYCnqzsgTaG6ujrbPNCYDGN6qWTd/1bjk8DHEWn79iyMR+MGgAxoLBZDYWEhysrKMH/+fBtDxEmnJBiGwayTQCCA9vZ2LF68GG63m4uIqBp169atOHnypI11Qlx81eCTgXRWqlKhlzrmvXv3YuHChXC73ejo6MBv/MZv4NFHH8WlS5fwzDPPoLq62lbRS8nUmeiosViMQ0uq0Xa5XLwTAcACceq1p06dQllZGWpqatDS0oJHH32UQzX9/f0sW11dXc35ATLqFDajgrja2lpeFNQQmTb6GrOJX0vnlFIeme7fr7tOCPFpIcQrQoh+IcQvhRDfnjjuFUK8IIQ4NfHzs5/Ei2hcHeTNdnd3I5PJIBQKYXh42GaIg8GgTUxMjc8bhsFGyTAMNDc3o7KyEmfPnuXr1dCNKuamGj0ytG1tbUgkEti9ezfTI2kxoIUgHA6zx7xw4UL84z/+IyKRCD71qU9h0aJFOHz4MNxuNx555BEsWLDA1gDd4/FwstlJRyXjTQtPW1sbh2tIXx/IJWEpKdzf38/Mnfr6erzwwgv46U9/yi0g6d2Ki4sRCoVsc5XJZLjBDI2tubnZlkMAJsXXNDRmG7/W8Ash3hNCXHb8e0MI8TMhxNWarn8AYIOUsgLAagCbhRA1AL4J4JCUchWAQxOfNWYRqtGTUnJTbyEEG7+WlhbEYjFW06S2galUCm1tbWz81b62yWSSmTpkoMljpzaKtOCooZpEIoENGzbgzTffxCOPPIKRkRGk02nbeTRW6vB1xx134Pd///exePFi/NEf/RF+//d/n3vRXrhwATU1Ndi+fbuNYkkhJVX4DcjF6YmqSfx+j8eDy5cvY3Bw0Na6kO5TXV3N4md9fX3453/+Z3zlK1+B3+/nHARRT9UeuIBdkVQdh9pKUQ1/aWjMNq6lgOu/AfhjAEsALAXwDQD/L4AWAD+a6SKZA2XF3BP/JIDfBvCTieM/AdDwUQaucW2gGHo6nUYoFML69evZ0yRDQ4awtrYWXq/XJoY2PDzMIZF0Oo1EIsGsnkAgwJrylKhUwzTkSQ8ODtri9IFAAG+88Qay2SwzXfr6+vDqq69yXQEwGe8/cuQILly4gL/7u7/DwoUL8fzzz2P//v0AgLq6OqZR0hh7e3u5qTglS1taWrgIiyiUZKBpsTh79izuvvtuNsiGkROXUwumAGDdunV48sknuTKZ3tcwcjr9wWAQ7e3t6OzshGVZvAtSC9ScukZ0vYbG9cC1JHePSynXOI51SylrhBD9Ex79TNd+CkAEQADA/09K+SdCiHellAuVc96RUk4J9wghvoacRhD8fn9odHT0w7yXBiZDJ6lUCrt27cKGDRu4ry3x7tXkq5PTrjZXsSwLe/bsYVVOANMqcxKNkZ7r9Xpx5MgR1NbWsrHr7u7mWDydZxgG9u3bB7/fj3PnzmH79u2wrFyHr/z8fC4w83g8iEQiKCoqsvWWpdj53r17sXjxYixatIjljoFc1Wt+fj7H3umd1CRyKpXi4iyVhUO0S3pn9R4AbC0giQ5LDeCd7Skp7DVTLkVD45PEx0nu/osQoglA28Tnrcp3V101pJS/ArBaCLEQwM+EENdcDyCl/CGAHwI5Vs+1XqeRAxUBUax5yZIl/B2pZUYiEbjdblRVVdkSrNOxbvx+P0ZHR/HKK6/gjjvuQEVFBTKZDN+T6Jp0z4KCAjai8+bN49i9aZp46aWXUFlZycb26aefxqOPPopt27YhGo3C7XbDNE0MDQ3h7bffRmtrK5YsWYInnngCHo8HoVCIPXzKHdDYA4EArly5wkVopIPjNLK06KjXer1eDvs4Q040pyQvDYDnV11IqDqXFr9IJMJ5Aqo30CEdjRuNawn1fAXA/wngAoA3J37fLoTIA/CH1/IQKeW7AF4GsBnAm0KIewBg4ueFDz1qjWsC6eEnEgk0NzfD5XKhu7ubDZHL5bJp4juTusCkho/P58PXv/51NvoA4Ha74XK5bOdKKbkhOXnOtNAAuQWCtHnC4TCGh4fxyCOPYHh4mCUPMpkM2tra8Pbbb6O6uhq/8zu/g507d2J4eJjDJPRTNdCGYaC0tBThcBjHjx8HABt/X93dqOEkANz5S13s6Blk6AcGBlBYWIhEIgHTNG3duuinWl08ODjIHn9RUZEt1q+hcSNxTXr8H+nGQtwJICOlfHdikXgewP8DYD2Ai1LK7wkhvomc3PMTV7uX5vF/OJDhVsMKwGRoxuVyMYVQ5cm3tLSgsbGRwyNqtydiv5C6pRqjJkOWTqe5kxRJEFByV0oJIQSHSVTv2DAMdHZ24t1338WZM2fw/vvvY+nSpQiHw1i6dCnS6TQee+wxnDlzxtZdyll5S0ilUhgeHp7SuITOo1yF2rR9uobpzpoCqj4mfX1VerqzsxN5eXkoLi5m2eSysjLEYjEUFRVNCSFpaFwPfORQjxDiXgDfB3C3lLJUCFEOYIuU8j//mkvvAfCTiTj/vwLQKqU8KIQIA2gVQvwegCSA/+PDvozGzKAQD3HJVeNHhhywG3wK5axatcp2H5ISIKoiFTuRRr5qbFV9fVXbh8IjKkMGyIWZVq5cycb1rbfeQjgcRl1dHRKJBPLy8rBs2TIuLkulUjZmjGr0nXLSZFwpl0GhGBo3FWcBkzF7VSBNXSzU6uVEIgG/38/0TXVBIS2iRCKB4uJiLlSTUmJkZEQbfY2bCteS3D2CHKvnB4oe/8nrqd+jPf6rw+nxqh6/avzUHYDq5ZLi5IYNG5BKpeD3+/Hqq6+yAJnTYNH1xGtX2xJSExMCJYkB2LTqn332WSSTSXz+85/HyMgIfvnLX2LJkiVoamrCj3/8Y9TU1OD8+fPYtm3bFO+6p6cH4+PjWLduna1KlmiYJApHrRNVAw3kjD0tgj09PbbdyXQ9CQhqta9TqXS63ZVzodXQuN74OHr8+VLKVxzHsp/MsDQ+Lig27YzL07+qqioUFhZyqCaVSqG3txeRSIQlFIaHh7F582Y2+sPDw1yRO50UM5DzpsfHx1FQUGALt1DCl45lMhmYpomjR48yR55yDg899BBWr17NtQAulwvnzp3D448/ji9/+cvYtm2brTiK7ltcXMx6NxQySqfTaGlpgWmayMvL43uq3PnpjG9FRQUSiYSNajqTkabkr7qQ9PT08AKovjflPtTdg4bGzYJrMfxvCyEKMcHgEUJsBXB+VkelcU2YiQ8O2Pn7u3fvRl9fHzZv3sxtAIFcGKOqqoqbkpSUlGBkZASFhYVceUtJTufiUlBQgOHhYezfvx+pVArhcJiTxvR8UrFsa2vD0NAQGhoamP3j8XgwPj6Op556Cv39/diwYQMqKysxNjbGOwzVIKvP9nq9aG5unlLxumLFCq7Yjcfj2Lt3L/P5VaE14uZTMpc8fNM00draaiu+Up9L91BF3aiwS00SUwGbNvgaNyuuhc75B8jRKoNCiLMAXgew/eqXaMw2pktI0nEyOBSbXr9+PWpqagBMUhPVwiTiqZOBHRkZwd13380hFjKOQM6wkYHftm0bgFyrQ2pRqIZWKCafTqcxNDTEFE3aFZw/fx7l5eU4f/48CgsLcd999+Gpp57CAw88AJ/PZ6srcIZgKNewevVq7ljldrt5HtTFjaqR6Xpi3kwX0slms0in00ilUqy9Q2GyvXv3IhAI2PSAaCxX+5toaNxsuBatnhEp5UMA7gQQlFI+KKU8Pesj0/i1IKNMHqpKQ+zp6eHz5s+fz0apuLgYiUQCy5YtYzokGWLLslBVVYWCggI8++yz8Ptzatx0z97eXvT29uL8+fOQUjKP3uVyIRgMIh6P8zjS6TTfP5lMYsmSJfjP//k/4/XXX4dlWaisrMS2bdtQWFiIrVu3sljc3XffzfdRjbwq2kbHyHCTRlBtbS0Xmu3fv59zC7SAqddPt5MwDAN+vx/PP/88a+yrlM3CwkJeXCjMQzIT6pi00de42TFjclcI8R+vdqGU8r/NyoimgU7u2mFZFrq6uiCE4PZ9RUVF3J4PyCVVyYtXQ0Iej8dWoWoYBouTUYvDjRs3csKUZISJCZNOp/EXf/EX+Pa3vw2v18tJ1UgkgrGxMbjdbmQyGZw9exb19fXw+XxsZLu6urBv3z4sWrQIa9aswcaNGwFMhlAGBwcxPj6OyspKW+tGwzCYqeR2u21ceCdVkxYodfdB91dDUcTkUds8AuCWhydPnsSLL76InTt3AoBNw19lLKmKmhoaNxs+Cp3zMxM/i5DT4z8w8fnLADo/2eFpXCtU75I8Wqd3TJ6702Om76i4ivj4xGqpr6/H/v37YVkWGzoyiiTo5vf78a1vfQter5d5/R6Ph8XfgJwo2aZNm5BMJvk+JO723nvvYWxsDC6XC2vW5JRAnnzySaxfvx5r167lgrOSkhIcPXoUZ8+eRXNzM4qLi5k1Q9LHwGStAVE1+/v7+d3VY3R+WVmZzSOn96MFjmSZqeG6ZVn48z//czQ2NmLz5s22nYYaNtLQuJUwY6hHSvltKeW3ASwCUCmlfFxK+TiAEHJibRrXGRTKAYCqqir2aBcuXMh6MOo5QM6bDofDOHr0KId/yHCRtg6FVrxeL1epqpWttMiQ93zs2DFYlsVdsywr12hk3bp1qKmpQVVVFd544w0OFfX09MAwDDzwwAOorq7GZz7zGbz11ls4fvw4DMPA+vXrOZmshmVGR0exadMmAMCBAwds8tChUMiWp3AuUMTQoWRvbW0tN1gh0DzRwqhy8Pv6+lBZWQmfz4c/+7M/wx133DFlbulaDY1bDdfC6vEDULl8FoAVszIajRmhGjhneMPZ5Fv17vv7+zE2NobR0VEsW7aMj0ejUaYuXrmSa6xmGAZCoRC6u7uxd+9eW+6A4vVqm0SPx8MtAwnRaBQAcPHiRZZzzmazSKVSePnll/H9738fzz33HL785S9zXH/jxo2oq6uzafYDQGFhIc6cOQPDMLBlyxbE43FevIjWqUobDwwM8C6IJJLVXANV1NL1tMAAk4VaXq8XwWAQiUQCx44dQzgcxptvvskFXtMxqDQ0bjVcC6vnfwB4RQjxM+Qonb+DSVlljesA8jSdRUxCCDZS5LmXl5dzi0S1k1Q6nUZHRwdTOsfGxhCNRpHNZjE8PMzCZ0BOgycQCACYVO1U4+BkJOmeFDayrJw8My0UNPZLly7h1KlT+P3f/3380R/9Ebq6uljB0mlEaVfR39/PbRMNI9cnVy0Mo/dX4/00xt7eXgSDQSxfvty2WKrVw6q8hBquoZ1PQ0MD9u/fjwcffJCvUeP72vhr3Mq4FlbPdwD8LoB3ALwL4HellN+d5XFpOBAIBLiVIIU7gsEgBgcHbeEa0zSRyWRYk54MlM/nw5YtW5BMJlFeXs4hmXXr1qGpqQmxWAxdXV2IRqMoKyvDunXrbB4uLTaUPE2n0zh48CAefPBBW3EVLTSkt3/kyBGMjIygpKQEP/3pT+HxeJDNZnH33Xejo6PDxpkHwPcnzxyYrBSm38nbd/Ln1aKxaDQKIQT6+/v5uv7+fkSjUe45nMlkmG/vZOmQ529ZFtrb2xEOhwFAG32N2wIzevxCCA81UpFS9gHou9o5Gp881MrU8fHxKd9Tc3Oq0FX1ck6ePInW1lY0NTWxIJlqyMPhMDNkPB4P/w7AxlohNlBvby9TGy3LwtDQEDweD1588UUEg0EWfSNDvmzZMixatAhdXV2YN28e2tra8MADD3ADlwsXLmDLli0AJhOzxDASQqCoqAj9/f24ePEiFixYwM8dHR1FfX09Dh48iMbGRsTjcZsE9ODgIEKhEIel1MIt8viBHM+f8iS0mFDPYGBSmnpgYGCK9IOGxq2Oq4V6/lEIcQLAPwKISCmvAMBEu8UvAGhCrhNX24x30PjIUMM5lHAUQsA0TXi9XuaV79+/H3l5eairq7PpyZORImMP5EIg1ICF2hqSkVe9Z9WrVZOmZWVlbBApZk7VuABw6NAh/O///b/h9/vx/vvvIxaL4f7778fbb7+NlStX4o477oBhGFxMZhgGh2VoHNXV1SzrcPfdd+O5557DY489Bq/XC9M0OfyzatUqW8EZsYtojiistX//fgQCAbjdboyNjSEvLw9CCJvRp3AW9cyl+Xdq/Wto3C6Y0fBLKTcKIb4E4OsAPieE8ALIABgC8M8AviqlTF2fYc49qGETMraqSJhhGEgmk2hoaOCFQG0jGI/H4XK5WBe+oqKCDTbFzdVFgYyoU1tGDZ+QXDNx4KnZCeUUXC4X/H4/Ghoa8NprrzHv3uv1YsOGDXxfEo4rLi7mSmK1SleVPn7sscfg8/ls7w6AWUyqvDSQqxbu7u5mldDCwkLU1NTAsizs27cPW7duZe1/Ai1u6XQazz77LEpLS3XDFI3bGldN7kopnwPw3HUai4YDavw6Eong1KlTqK+vZw+bCqvIG25ra2OPPxgMcuhkfHycjTMpZFKiVG3DOJ3GPpDzfvPy8mz6M6rRzWQyMIyc7HM2m8WpU6cghMCDDz6ISCQCaptJ19ICRI1NDhw4gA0bNsDv99uomaqGDvX6BXI7F/LenTx6y7Lw85//nFsgqt8RR1/tmKVy/S9fvsx1A7SYamjcjpi1RiyfJOZK5a5aiEWfAbu0MRllajaSzWa5iEmNa6vFVer9Wlpa0NzcbFPdpOtSqRRGRkZsBWC/ThOIGDjE0Dl27BhGRkYAAA8//DDvQJwyBpSMBXLc/b//+7/nzlwqewaw5wB6e3tZIM65ENG4Dh06hLVr1/L4qBNWMBicIr9M19JcUyhNQ+N2wMeRZda4DiAFzHQ6zZ97e3uZIkkGv6enB8lkEk8//TQKCwttlauqESTeO30GcvH++vp6G4sGAMsaHzx4EAUFBRBCoLe3F+FwGP39/dMa/RMnTiCVSiEajeLuu+/Grl278MMf/hCvvfYa6uvrUVpaysVS0xl9qhMIh8Po7OzEmjVr2LB3d3fbdh4lJSU85kwmYzP64XDYppcDAPn5+bawEYW5yOgDk7sJdc6INqqhcbvjWnj8GrMM0tLx+/1ob29HY2OjjbGj9nHNZrN444038Oijj9qSuMTCASY9ZLVJOEkStLW14cyZM9i5cycbOap2DQQC8Hq93CxlJrExOpe0fTKZDGpqapDJZHDmzBmcPXsWpaWl04ZLaIzZbJYLxihebxgGCgoKcPDgQZtkQnd3N1566SU8/vjjLMSmNpRRvX3LsriiNxqNch6CvqMEN4V7NDTmIn6txy+EqBFCfEb5/BkhxJrZHdbcQTqdRiQSYa+a2CqFhYU4e/asjZ8ejUYRCoW4gTg1HgFyRq+trQ2WZXEIQ227SFWpO3bswM6dOzE0NISuri4Ak/LJdXV1/KwDBw7YFD/pd6oV8Hg8aGxsxP3334+ysjLk5eXh7bffxr333ouVK1eio6Njys4ilUqx5AFx5AcGBniMlmVheHiYWxiSUa+srMTjjz/OC5VarTtv3jyEQiHeIal9fMfGxhCPx/k7IJdf0Po6GnMd1+Lxfx9ApfL5yjTHND4CTNPEj370I7hcLpSVlSGRSKCsrAyRSARut5sNIGnOjI2N2QzWihUr+HfDMDixa5omWlpaEAgEprBe1F2CEIIXFErw0jlqf91AIMD1BJcvX8bo6CgCgQAuXbqE7u5ubNiwAfPmzcOWLVvw+uuv44033uBqXkI6ncZTTz2Fxx57DIaR67ZFlcbqeePj4/B6vWzkSXqhubmZz1EZQJQopp0SvR8lpOn+tPtR4/kaGnMV1xLjF1LJAEsp/wU6RPSxQd7zuXPnUFBQYGvqTfr2Xq8XPp+PNWdOnjyJVCqFnp4eRCIRSCkRjUY5P6Aa9+bmZtTV1dk8dhW1tbUs00BduPr7+zmvQAa0pKQE8Xgcvb29KC4uxoIFC9DU1ITS0lK89dZbWLt2Le6//36EQiGkUinbjkR9rmEYePDBBzn8U1dXNyUMY5omt1QEJkXUVM4+HVN/J16/GpqigizaTajhsunmQ0NjLuFamq23A3gZOS8fAB4F8AUpZcOsjkzB7cbqUWmE3d3dqKmpsbFxSE/n0qVLGB4eRmFhIe6//348+eSTKCgowNatW2368Gr16UzPUVk8dMypO6MyfOh+lpVrqjIyMsLeM+0Sli5dCsMw0NbWhh07dthCNgT63NXVhWw2yw3S0+k0e+lUnOZ2u3nBA+zMH3WMM/0OTGoLAZN6PjP1JdDQuN0xE6vnWgz/XQD+O4ANyIm0HQKwU0p5YTYGOh1uN8MPwFZspRZP0XHi7luWhdraWng8HqTTaVhWTk+fWC/T0RKdxVxkaFXj71wsyHD29PQwpz8QCKCvrw+nT59GfX099+sdHBzExYsXce7cOSxevBhHjx7Fn/7pnzJrRk2g0pjC4TCklLwLofqC0tJS26KijkcVYpvJUDsXPPW9CepuQRt9jbmEj2z4bwbcLoZf9WA7OzvZ01d55U7jTaDrTpw4AZ/Pxz1hVa49VbsGAgGucqUF48knn0R1dTUWLVoEYLKBCY2LdPCp/65pmuyJFxUVAQDi8TgMw0AwGEQsFmMJBxI1UxcxdcyAvWk5GWBKIm/ZssW2g3HuQNSdiXof2omoNQcz7Wac99bQmAv4yDx+IcS9QohDQoiTE5/LhRB/NhuDvJ1BCddwOIx0Oo0XX3wR3d3dvBioRry3t5cN79GjR7F37150dXXBsiwEAgEcPnyYdfCJseLz+dh4k2a+qppZV1eHt956C0VFRZBS2jj07e3t8Pv9HO8HckY+m82irKwMJ0+exO7du7F06VI2stSnd2BggHco1JtXDfmoi4DKMKJ+vWoS2JmPMIxJWQlaCHt7e9HV1YVDhw5h165dePvtt23n072n09jRRl9DI4drCfUcAfDHAH4gpbx/4thJKWXpdRgfgNvT46fQC8Wc1UrVnp4eVFdXw7IsRCIR9qwjkQgrT3q9XtaU7+npgcfjQVNTEzwejy22rVbeksdLiWESXgPACp7ApCY+ef8kg/DOO++gvr4eQ0ND7PETB5/YP+p9nCEfwN7kvLOzk5+9ffv2aXMVTi9efY+jR4/C7XbD7XbzDma6+L+GxlzFR+m5S8iXUr5CkrwTyM50ssbMIM+YaJEbN25kqiYZS8uybIaS9GUsK6eGmclk4HK5UFVVxfRPACgqKuJwCy0aANhYAjkvXkppa9NIC45qrEm5UqVaLlq0CNXV1Ugmk2zwgcn4ORV/qR2qVJkJYLJQjYrNKHfgdruvaqTJe6frKCm8ceNGzheo4S5iFGllTQ2N6XEtdM63hRCFyCV2IYTYCuD8rI7qNoQar162bBmOHDmCZDLJVE0gF/ffu3evrViKFgGPx4OGhgbU1NRw1SsVZYVCIQwPDyOdTrN8AbVAJINObQmphSDd0yldMDY2BiC3I4lGo7aY+pkzZzikBACRSARHjhzBnj170Nraym0OSZOfGp/Q54GBAfh8PgC5xaC5uRk+n4+llinMpb6/2uOWxrl48WJuPAOA6aN+v58Lz7TR19CYGddi+P8AwA8ABIUQZwHsBPDvZ3NQtxtUA7Z69Wr4fD6sX78eZ8+exeLFixGLxVhqYPHixQCAcDjMejYAWGNe5bqrhi2bzaKvr4/vRTF4ADbVTbXqlcZGn+ne/f39aG9vx5UrV/g5tbW1KCgowOHDh7lXr8vlQm1tLbZt28ZhJgrJAEBxcTHKy8v5s9/vxw9+8AMcOnSIq4bV0I9pmty60dkYXsXChQsRDAYRiUTQ0tLC75BMJjm3oY2+hsbMuGZWjxBiHoB/JaV8b3aHNBW3YozfyWyZ7jMdU5k0apXq0aNHsWDBAqYzptNplmCejpcPAN3d3aisrGQNfgovqeeriVeq8K2qqkJvby8WLlyIP//zP8f3vvc9+Hw+vg/F8SkJrL5LT08Pstks6/TT/Ukmms5V39mp7R+JRBCLxbBt2zZ4PB4OOU1nwGmRUAvW1HfT0NDI4UPTOYUQ//FqN5RS/rdPaGy/Frea4Ve57CSDYFkWs25UaiYZbDJeKg+9p6cHxcXFU6iWBCd1khKmeXl5tuumK9RySj3TotPY2MjSxJFIBJcuXcIdd9xhSzZTk/KmpibOK6g5BVVH3zByipuXLl3C2bNn0djYaJsHehY1QXn44YdtrKDpOPfpdBq7du3C5z//eaxfv14bew2NGfBRDP9fTPxaBKAawIGJz18G0CmlfGQ2BjodbjXDD0x69N3d3dwNq6GhAUNDQ3C5XKiurkY6ncbw8DAXKamxdmByESADSsVVMzVPAXIhIpJimIlXT7RIwzB4ISFvnoqpqN9tMplkL1x9N9M0kUwmp2jm03Oc9Qik2U8LhbNvgGEYeOaZZ1BUVISzZ8+ivr4eHR0d2Lp165Q6AWCSFaWNvobGzPg4lbvPA/jXFOKZUOr8qZRy86yMdBrcioYfmDSwpERpGAaGhoaYEaMaPaJYOnvBqhRJteJWNZ7qQtDf3z9tVyrVw5+u05azcpcSxNlsFjU1NdwEnRYotTmKatyz2RzhKxQK2bz/dDrNCVnDMPg+tPhVVFRwmAoA7wIAYPfu3Xj00Ue5YllX3mpoXBs+juGPA6iQUn4w8fk3APRLKYOzMtJpcKsZftWIjo+PY2xsDIcOHYKUEps3b2a9GgpzWNaklg0ArFu3ju+jGmmiKKo0TDpP9bKBqVWzXV1d0+rhUN6Afgdy8Xe3280LhbrYOMNN6gJAz1KlkZ0VtfQ5Go0ik8lwPUEoFEJ3dzfcbjfH/dXOXpTbmG5h09DQmB4fh8f/PwC8IoT4GXKUzt8B8JNPeHy3Dci7JsVLy7IQi8WwceNGAEBlZSXz+OfPn885gLq6OpimidbWVlRWVrKXr8bmyej39/ejuLiYDajaWIS+V40jVe464/DpdBpPP/00HnkkF7X7wQ9+gLKyMtxxxx22wiy1yYsqbwyAcw9qoZaq9UNqnE5PXW38Tj/dbjc/FwAuX76Mp556Co8//jg/01FPoqGh8RHwa+mcUsrvAPhdAO8AeBfA70opvzvL47plYVkWrly5wt5pPB5HKBTChg0bsGDBAlbbPHv2LAoLCxGJRLBnzx6O51MBkhovV+9Ni0YsFkN/fz/Ky8ttRp/CM9OBmp7QTiGZTKK5uRnt7e04cOAAGhoacOLECb6eDDaxfyKRCC9UBCr0ojFQ7oA49clkkncoKjdfbS1J3H8q5KJ/a9assTVgoZyE9vY1ND4erqnnrpSyT0r5NxP/Xr2Wa4QQy4QQLwkhBoUQvxRC/IeJ414hxAtCiFMTPz/7cV7gZgIlc0nSgHq9kiGrra3lYqPm5mZ4vV6uvKVCp7y8PDbgpM9D9x4YGEBhYSHmz59v070HwB2mysvLsXLlSlvYB4DN4NN4AoEAzp07BwC45557YFkWdu7cibVr12JgYIALsgCgubmZvXHnuCKRCP9OPPxkMokHHngAzzzzDEzTtO1c/H4/jh8/zj2BA4HAlKYspmniwIEDcEIbfQ2Nj4/ZbLaeBfC4lLIYQA2APxBClAD4JoBDUspVyEk8f3MWx3BdoBpYt9uNbdu2cTUqAG5crnLnyfP1eDzYsWMHSzBQbFzVvieUlJQgmUwyP19FJpOBZVk4evQo/uRP/gTJZHLahiPkbZumyVz6xsZG+Hw+FBYWwufz8Y6DlD7J+JNnnkgkbIVlg4ODLCNdWFjI15umaesNTLmGlpYWDA0NoaGhAQBYikI16iTgplboamhofDKYNcMvpTwvpeyb+P09AIMAlgD4bUzmCH4CoGG2xjCbIBkCMuD0O2nrAODjwWCQu2UBkx2lVA9clU9Q+9L29/cjnU6jp6fHpldDPH8yii6XC4Zh4P7778ddd901Rf+HUFJSgv7+fhw9ehSXLl1CJpPByMgICgsLcfDgQX4vut7r9doUL71eLxobG7mXbTweR2FhIYBcUnj//v1MP6XzaR4oVFNaWor77ruPReoqKipsCyXB4/Hg15EPNDQ0Pjyuix6/EGIFgE4ApQCSUsqFynfvSCmnhHuEEF8D8DUA8Pv9odHR0Vkf57WCuketWrXKpmvvbPShUi2Li4vZ8yVVzVAohGg0irGxMWb60HVEjcxkMnC73chkMli3bh0nZB999FHm3KtcfyCn+UPMoN7eXmQyGRu90jRNPPvss8hms7j33nuxYMEChEIhVgKlxPJ04SJgskkKxftVSid9pu/pfUmjh66n835dta2uxtXQ+Oi4YY1YhBAeAEcAfEdK2S6EePdaDL+Km4nOSQqTfr+fGSsE1UipxUtUtUtMGsoB7NixA5ZlsUyDs0hK/T0ajbLujd/vh8/ns7USjEQiGBsbY/aQqn8zODjIyVe1wndsbIyNPi0eqponGXCSY1CZQhTacR4HwAsbALz77rt45ZVX8Nhjj00x/uo1yWQSfr//k/kjaWhoAPgYjVg+5kPdAP4XgL+XUrZPHH5TCHHPxPf3ALhuLRw/LsjYBQIBDA0NsWElqEaxp6eHz4/FYhzzfvrpp7Fy5UqUlubaGVCiV90lqPeiMBAVdpWUlNiqX8kzHxsbw5EjR/h6UupUQzFqQrampgZ33HEHysrKmKdP9yOdHcuyOAzj1NQHJnV2nHN04MABlm6+88478fWvfx3JZJLHpobHgJzR/8M//ENW/dTQ0JhdzJrhFznC9d8BGHTo+hwA8NWJ378K4B9nawyfJIi9Mjg4CMvKaeNTdywqfKLYeyQSYUqkyns3DAM7d+6Ez+dDVVUVIpEIOjs7bQtGW1sb7xKc3agodNTV1cXJYrp248aNeOKJJ2AYBjo7O9Ha2grLslBQUIC2tjb80z/9E/bs2YNUKoW2tjYAYD2fdDrN1Eogp9tPFcWU2FUXjd7eXq4lAGAbJyVlvV4vL1g+nw+BQIB184kmqrJ8vve973FPYQ0NjdnFbHr8nwPwfwLYIIQ4MfHvSwC+B+A3hRCnAPzmxOebHpZlIRQKsTBZQ0MD1q5di0AggFgshlQqZTOeFD6pq6tDWVkZG3Uy6ECOiZNIJGzGXZUVdgqrkaZ+VVUVXC4XHyfD6/F4mFrZ1NSE9evXw+Px4P3338epU6eQzWbh8XhYMZNYO7FYDGNjY7YiLRqD3+/nHQB57KTrPzg4iEgkwlx/NaxFvwO5PAPVF9DiSAwhegfTNG2LgYaGxuxBN1u/BlC/3LvuugsLFiyAZVkYHR1FY2MjDCPXAnB0dBSLFy/Ghg0bbJIFRN9ctWoVlixZgnQ6zRWtZPgo1BIOh5HJZFBTUwPAHu4BJncUzuOpVIp1bEjzp66ujp9/5MgRZLNZ3H///fxcVSGT5CKcLQxJBfPxxx+HZeWE0tRkMZCrPwgGg2htbQUAbN++HQA4OU33c1YNq7IT15Lk1dDQ+PC4YcndTwI30vBTRW0ikcDLL7+MxsZGToSS8ezv78fdd9+NF198EU1NTTAMgytYSe/GsiwcOHAAGzZswJkzZ1gBk2LnlHCNx+Pw+/1IJpMoKiqCEIIZP+l0Gq2trSguLmb6Iy1KNC4VqpKlWtGbSCTQ0NDAyVbyuOPxuK0ylsZUWlpqU8qMRCKYN28ea/aoSWxVppnCQWorRNqZ0P21sdfQmD3ckOTurY50Oo22tjYMDAzg2LFj2LRpEwA7797j8aC4uBhnzpzB4sWLOQeQzWYRDAZZJsHr9WLLli0YGRnh7lhCCFuYZ926ddi2bRsWLFiAgoIClJWVcbcty7IQj8exfPlyrval6wKBAMfe1fwAFWolEgkEg0Hk5eWhtLSUK2XVxLRaOauOqaamhjtbGYaBwcFBGIaBYDBoM9qGYfA9KZRVXFxsa4XoDPFoo6+hcWOgDf8MoFj1gw8+iJaWFjzwwAN47bXXsGvXLqRSKTZulOjNZrPcACUWi9laLRI8Hg8rUdJuQG2FSAtEKBTCvHnz4PV6UV9fzx5yeXk5XC4XYrEYenp6kE6n+T779+/H+fPn0draiu7ubvj9fvT29jILKZlMYtmyZUgmkygtLUU2m0UkEmFvX0rJnvuJEyc4Ya0WbpEAWygUshl5NfFLeYGBgQHOJ5CBj0aj/J1O4mpo3Dhowz8DKLkaCATwyCOP4N1330VNTQ2LhqlNyqurq1FZWYl58+bBMAwUFRXhzTffRF9f3xR2DoXWKHSlJnDJWyelStM0cfDgQRvrZt68eQiFQuxNUyiqsLAQixYtQkNDA9xuN06ePIlsNouxsTEWfzt8+DB8Ph9GRkZ4PFSMtmzZMgDghugHDhxglo0zwUyaPACY809zRr2BqS8vMMn6yWQyGB4e1klcDY0bDB3jnwFk8CiEcuXKFaxfvx6AvcsVnetsmqL2uVVBjVn6+vo4mUoGc+/evSguLubEKVEza2pq0N3djby8PJvOvVqtS+EgVbeeZBiceQli8pSVlSEej+P8+fN455130NzczDsdv9+PV199FXl5ebZEsfMeALiIi8ZMGv/qvNBnOkdDQ2P2oWP814jpOPTl5eWYN28egJyBjcViHCYBJuWL1Z0ASQlTrF3V34nFYlM0aChWX1ZWhv7+flbrpPPURubq2EgArru7G+3t7bzgVFdXw+fzobGxEYODgwiHw7aCL9IUKi8vxz333MMMJTL6hmHg8OHDuHjxIhv8np4exONxlqVwuVysEkqLEYW+KFREYm+0kGqjr6Fx46ENvwKVa09eO4mjUTLTMAyUlpayV04JVEpaOhOefr+fjSUZRQBc2ap67Hl5eRw6Ki8vR19fH4aHh6dQOClvQLz+2tparFu3Ds3NzVMkJLxeL4qLi228fxJGo/epqqriGH4gEMD+/fsBAGvXrsX58+fR3d2NaDQ6RWaaZKGd8hKXL19Ga2srwuHwlHoEDQ2NGw9t+BWoBVSkoTM+Ps4yBGTYqXtUOBzG3r170d3dzfLFqhFMpVLYv38/F0eRwS0rK8PBgwcRiUSQTqd54SgsLORKWYrzNzU1wePxMENIrW4lz1s1qmqTk66uLg7NkLRCNBq1tUDs6ekBMEnpVBeYzZs3Y9u2bVi3bh1LRtAzaAzOauNoNIq8vDw0NTXxwqaNvobGzQUd458AGUEhBHu1xJqh+Dj9JOmGpqYmAJgiggZMFn0tWbIE999/P5LJJMe66XtaXAKBAILBIKtt0j1I4ZIUPgsLC7F//36miqox/97eXm64rjZhV7n29I7UGpEKvqjf7enTpznOT0a+p6dnWp0eYFKNFIAt30E7FOLua8OvoXFjoAu4rgFOWqJzIaBEbzAYRDQa5aSnM5FL1xNfnfrPqnLHdB49MxqNwrIslJeX83nqeFRJZ7VQSm3GDtgTpzQuNVREiVfy7mkhIElmwzDQ3d2N/Px8lJeX8+JB70/GnMalVt/SM9VG8Nroa2jcOOjk7jVArYS1LMsW0yaQjg150hTeICOucts9Hg8rahKlUmXHkEAb3Y+6cJE8cSQSwTPPPIN9+/bxNdFoFG1tbbwbUTtkORcUyjtQq0TTNNHe3m5rqUjevJSSdzNU8KW+J92XFqQTJ05Mid9ThTAtRNroa2jcnJjThl/1qOlfJBLBihUrAEx64QQqYAJyWjTErZdSsgxyOBy2cdjT6TSrcJLR7enpweHDh/Hiiy/aqlhpcejo6IBl5UTh7rvvPpZVHhgYQEFBAbLZLNra2nDo0CGWfFaNPsXtyeum9oWGYWDVqlU2dg9dd/nyZfzgBz9AUVERtm/fziEpIEdfTafTaGlpmVaz37Isrge4cuWKNvgaGjc55qzhJ6+VVDVJP390dBSVlZVs0CKRCFKpFMfk+/v7AeQ8ZUp4FhcX4+DBg7h06RKGhoa4cIs8bBJeIz59RUUF5s+fj507d9q0bQCwtAMZz9raWsyfPx9ALpmbSqXQ2NiIrVu3Ij8/n+Uf1PciTR66h8pIUlscqgna+fPnc7MUZ7z+1KlTAIAlS5bYWjqqieTBwUE0NjZi/fr12vBraNzkcN3oAdxIBAIBtLe3o76+nj1caopiWRaqqqpw9OhR7Nq1C8uXL8eWLVuQazNgD6tQMxX6HI/H+RyiWKrSDsR2IaOv5hKAXLL48uXLGB0dxfbt2zkZS5XE1PaxqKgIJ0+etKmBUiKYxjIwMDAlXAOAnxkMBtHe3o4VK1ZMyVNQPJ/e7ezZszbdIGr7qCaQNTQ0bn7MyeQuGbWSkhKEw2HMmzePdXNUb5Z+J2+fqmBpkVCNtqq2Sd+piVeqYKVeu7QYqDx4Nf4fi8VgWRZqa2uncOUpPESFYOXl5cwsUiuO1V68vb29uOuuu1hBlIw85TWoYtfZa9eZLAaAlpYWLF++XHv3Gho3OWZK7s5Jj19NSpIMA1XfksFUWSnkmVN8XL0PdaEyDIPVNsnzLigo4MVEFWuLRCIoKipCR0cH1w0A4NoAqogFYFs8Dh06hPz8fEgpMT4+DpfLxaEbejbp4x84cABbtmxBPB5HMBjEu+++i5aWFixevBixWIyvo/GqzyH2EtUrkHGnBYh2Mdroa2jcmpizMX6V/khebyQS4QQmGT+1YIqaihBM00Rrayu3OST643SCZPQvFArxd5s3b0Y8HkdXVxcnijOZDHPxiRE0MDCAZDKJY8eOYeXKlSgvL8fo6CiEEHzfYDAIAKyyuXXrVjbUsVgMlZWVKCgowLZt29jop9NplpJQxdboPqZpcotHYHKnpI2+hsatjTkV6lG9V8DOaSePlzz+3t5eXLp0CaOjowgEAnC5XAgGg9zpypkgJUM6NDRkWyCcYRNaUAoKCuDz+WwFT7SQbN++3aZ9Q5XDDz74INLpNFMq6Rxi1KxatQp33nknTNPkHQ0JtlVUVLCEQm1tLSzLsjVwCYfDGBwcxPbt2+HxeJBOp9HX14dEIsHHpptDDQ2NmxdznsdP7BPTNJFOp5FOp7F7926kUilbmCORSAAAqqqqsHbtWmzfvh2VlZUYHx/HwYMH4ff7EYlEuOE5kDPoR44cwa5du3Dp0iU+BkzmAejZ5J13dHSwkBntEgYHB7mpiiruRh683+/nkBEVdFFsvrGxEStXrsR//a//FT6fzxbGIa5+KBSCy+Xi44FAgO9TVlbG7B/qxuVyubij2HQxfw0NjVsTc8LjJy/7ypUryGazOHLkCJ544gkA4Pg9ec6qQVUlEyzLQjAYhNfrRU9PD4qLixGNRiGE4I5Y3d3dmDdvHnv8dD2NQU2eptNpZsY4k8LkoVNydmBggNsxUoJY7Y2r7hiOHj2KNWvW8K6FZByI7VNcXGzrt6tW5NIxqk4mI9/f32+rYNbQ0Lg1MGeTuyRboFbaulwuW5zaMAwkk0k888wz2LlzJ4c1KIZOSc6BgQF4vV6mThLds7W1FcFgEOvWreP7WZaF8fFxdHd3Q0qJefPmcRyekMlkuChMNeD0XCDn2fv9fnR0dGDz5s0cfikrK+OFhN4rGo3i/vvvx4EDB7B161YbjVN9f8obqAls9T6WZXG/AFUOWht9DY3bA7d1qMepHEnVsWVlZYhGo6xeaZomDh8+jEceeYQbgwOwSRCrTB+q2gWA+fPno6mpicXVSKHTsiy43W4uqFq6dCm3TEylUlzYRQsKJVpN07QJtZmmiZGREWzevBlerxculwsNDQ3wer2ckKVWiVJKeL1ebndI96D3ofkA7J2/CL29vejt7UV5eTny8vJYa9+pAKqhoXFr47YP9RD3vK2tDVu2bIFlWew9Dw0NcfcoSuoC+LXxbGey1rIsvr8qXez3+3Hy5EmcPHmSk8OVlZXcwUp9HoVz2traePdgWZZtx1BeXo5IJMJeOAmoUYUw1Rg4QzcECuGo4S16vjP8pO6GNDQ0bk3M2VAPGecNGzYgFovh1KlTqK+vZ2kClWoJTBp1Z3tFAhl6tQDKsixs2bLFFsOncEpNTQ1qamr4GrWGQDXQqhqnlJLzEvF4HNu2bePnqYwhkmsgjR+10CsQCNhi83RfOofklmnRIfVQ0v1Xw0Ha+Gto3F64rQ2/ZVno6upij5uag5DxcxYtAZNeMfWTLSsrs2noRyIRnDp1iqUdSM2zubl5ioetGnjyztXKWsPIdeii5K7H42EjTzmEbDZr20WozyCGDuUwKDGczWbhcrlQXFxsC9NQAhkAstksj6ugoMCW8KVxa6OvoXF74raO8RuGgbq6OuzYsYMVJ1UPnrzaVCrFUspUAFVWVoaioiLuY0sLRSgUYqNPWL58OQDwvVRpZ/pHXrxK00yn0zh48CDGx8f5PGrNSMjLy+N3KSkpQTQaZfVN0vAhqmokEkFxcTFqa2tRUVHBqpwE8vSdx0ZGRrjPLuUD6JkaGhq3H25rww9Myh1PJ0BGXPaOjg74/X5WzvR4PKitrYXX62WJZvKA1XuRh02hIp/Ph6eeegqmaTIfv6enB5FIhO9LCeLVq1fD6/WiubkZlZWVnBQmEThaaIgOCoA9e/LcKcQD5Dz4sbExXjhoV0FN4UnLnzx96sFbV1fHdQWWZWkvX0NjDuC2N/zTQQ1jkAxyMpnkBiWqRIGUEt3d3VxsRcfpPhUVFVwJe+bMGaxZswZer5ebqlCjc5WlQ7sBuocaZlGZRCprx5lw7unp4YpdKiRTWzHSvSgcNDAwgKVLlyIUCvG46F2JCaTZOxoacwO3PavnWqHKNhiGgXA4zGJoxP4pKytDKBSyceDVIq+CggIMDw9zpawaz6ffSftGFYej79U2h+ShO/voUn7CKaKmsnScRV0ejwepVApPP/001ynQdzqBq6Fx+2LOsnquFWpXKgqFkPe8du1a27nqeRSaIeE1ukY10qS1s2XLFpvyZjgcZpaO2r4RyOULiFZJ92tra2PPnJg6anUv5Szop9rn1+fz2YrTnO+soaExd6A9/hngFCNTGT0kbEZQvXYyxMTrJ3ZQUVGRTccfAIukqV24rtaoXBWVA3LyzrQDCQQCNn6+uhioOQmScaBdiYaGxu2LmTx+bfivASrfnpg3RJmkMIyq7UOhFY/Hg+7ubgA56qUQwqbDb1kWksmkzeueSf2SxkAduJYsWYLR0VEWUZsuZOMs0qJdCKAZOxoacwHa8H9MOI0okNsFqFW4lBcoLy/ndoZut5tDO1R1e/fdd+PNN9/k1odqY3PnMwFMWRRI5ZOeP9MOga4xTRPHjx/HsWPHuK+uhobG7Q9t+D9hkAdOAmpbt24FkFPoJLkFYLLRC12jxvtn8tSB3KLS3d3NTB3aVTjPu9oOAQCOHDmC4eFhFBYWYuXKlaznrz1+DY3bH3Nej/+TBlFCfT4fJ1wB4PTp02yMBwYGplxD1EkqJlNbMtLCQPz7RCKBZcuW2UTc1OIruqe6A6H7UEevefPmoampCbW1tUin01OqizU0NOYeZs3wCyF+JIS4IIQ4qRzzCiFeEEKcmvj52dl6/vWAKp1MP6mqV5U6dmK6YjLTNNHZ2Ym9e/fCsiyEQiE0NTUhlUoxOycQCNgMvXp9Op1mJVJgsgVjVVWVbZFxag9paGjMPcymx78HwGbHsW8COCSlXAXg0MTn2wpOw0peutNTtyyLC8bIoANAYWEhgBydk4w1STD39fWx3IMaSiKDTuEjANOydrSnr6GhAcyi4ZdSdgJIOw7/NoCfTPz+EwANs/X8mwGq168a63Q6jXA4jPb2dvh8PiQSCViWxRr41GTdmR946aWXYJomV/RSWAjIFZL19fUhHA6zlg/tBpyLjoaGxtzGrCZ3hRArAByUUpZOfH5XSrlQ+f4dKeW04R4hxNcAfA0A/H5/aHR0dNbGeT2gMnKI4w+A5RqI/9/f329rj6hy8NPpNIaHh1lvZ3h4GMFgEHV1dawbRAVkgL2CV0NDY+7hhrB6Po7hV3Ezsno+DlQ+vZMmGg6HWVJZ1fA5ceLElJwBxfPVwjBV51+zdzQ05jZuFlbPm0KIeyYGdA+AC9f5+TcFnFW/6u+1tbWorq7muD4xg8iIq+GfWCyG9vZ2m4Ac3UcbfQ0NjZlwvQ3/AQBfnfj9qwD+8To//6aHathVLR1n8RgtEo2NjUgkElPontroa2hozITZpHP+A4AwgCIhxBkhxO8B+B6A3xRCnALwmxOfNa4Cp16QM1nr9XqZ7qk5+hoaGteCWVPnlFL+mxm+2jhbz7ydMV2rSNIPciaCNTQ0NK4GLct8i8AZt9e9cTU0ND4qtGTDLYSZCrK00dfQ0Pgw0IZfQ0NDY45BG34NDQ2NOQZt+DU0NDTmGLTh19DQ0Jhj0IZfQ0NDY45BG34NDQ2NOQZt+DU0NDTmGG6JnrtCiLcA3Ey6zIsAvH2jB3ETQM/DJPRcTELPRQ43wzwsl1Le6Tx4Sxj+mw1CiN7ppE7nGvQ8TELPxST0XORwM8+DDvVoaGhozDFow6+hoaExx6AN/0fDD2/0AG4S6HmYhJ6LSei5yOGmnQcd49fQ0NCYY9Aev4aGhsYcgzb8GhoaGnMM2vA7IIT4kRDighDipHLsr4QQUSHECSHE80KIxcp3fyqESAghhoQQX7wxo54dTDcXynffEEJIIcQi5dicmgshxF8KIc5O/HdxQgjxJeW723IuZvpvQgjx2MS7/lII8aRy/LacB2DG/yb+p/Lfw2khxAnlu5tnLqSU+p/yD8A6AJUATirH5iu//xGAv534vQRAP4DfALASwDCAT93od5jNuZg4vgzAz5Erqls0V+cCwF8C+MY05962czHDPHwBwIsAfmPi8123+zzMNBeO73cB+PObcS60x++AlLITQNpx7LLycR4Ayoj/NoAWKeUHUsrXASQAPHBdBnodMN1cTOD/C+AJTM4DMHfnYjrctnMxwzz8ewDfk1J+MHHOhYnjt+08AFf/b0IIIQA0AfiHiUM31Vxow3+NEEJ8RwjxBoCvAPjzicNLALyhnHZm4thtCyHEFgBnpZT9jq/m3FxM4A8nwoA/EkJ8duLYXJuLewGsFUIcF0IcEUJUTxyfa/OgYi2AN6WUpyY+31RzoQ3/NUJK+S0p5TIAfw/gDycOi+lOvX6jur4QQuQD+BYmFz7b19Mcu23nYgLfB1AIYDWA88ht7YG5NxcuAJ8FUAPgjwG0Tni8c20eVPwbTHr7wE02F9rwf3jsA/CvJ34/g1y8m7AUwLnrPqLrh0Lk4pP9QojTyL1vnxDCh7k3F5BSviml/JWU8l8A/L+Y3LrPtbk4A6Bd5vAKgH9BTqBsrs0DAEAI4QLQCOB/KodvqrnQhv8aIIRYpXzcAiA+8fsBAM1CiN8QQqwEsArAK9d7fNcLUsqYlPIuKeUKKeUK5P5jrpRSpjDH5gIAhBD3KB9/BwCxO+baXOwHsAEAhBD3AjCQU6Wca/NAeAhAXEp5Rjl2U82F60Y9+GaFEOIfAHwewCIhxBkAfwHgS0KIIuQ8mVEAvw8AUspfCiFaAQwAyAL4Aynlr27IwGcB082FlPLvpjt3Ls4FgM8LIVYjt2U/DeDrwO09FzPMw48A/GiC1mgB+KrMUVlu23kArvr/RzPsYZ6b7r8JLdmgoaGhMcegQz0aGhoacwza8GtoaGjMMWjDr6GhoTHHoA2/hoaGxhyDNvwaGhoacwza8GvclhBC7BZCrJvm+OeFEAdvxJicEELsEUJsnfjdLYT4nhDilBDipBDiFSHEb018d1oIEZuQhjgihFiu3ONbE4qYpB67ZuJ4i6P+REODoQ2/xi0BkcM1/fcqhPACqJkQ0ZrNMX3qE7zdXwG4B0CplLIUwJcBfEb5/gtSynIALwP4s4nn1wKoR66Irhy5wiHSg/k+ckJ6GhpToA2/xk0LIcQKIcSgEOJpAH0Algkhvi+E6J3wcr89w6VbAXQo99kshIgLIY4hV0pPx+dNiKv1CCFeFUL89sTxfCFE64QX/T8nxMeqJr4zhRD/txDiOIBaIcT2Ce/8hBDiB7QYCCE2CSHCQog+IcRPhRCeq7xnPoB/B+AxReHyTSll6zSnhzEp7nUPgLeVa96WUpIMwFEAD03IB2ho2KANv8bNjiIAz0op75dSjgL4lpSyCkA5gPVCiPJprvkcgAgACCE+jZyOzpeRU0z0Ked9C8BhKWU1cpry/1UIMQ/AowDemfCi/wpASLlmHnL662sAXATw/wHwOSnlagC/AvAVkWtO82cAHpJSVgLoBfAfr/KOAQBJh/z3TNiMnEQCADyP3GL4mhDiaSHEejppQj8oAaDiGu6pMcegDb/GzY5RKWW38rlJCNEH4FUA9yHX4MKJewC8NfF7EMDrUspTEzICe5XzNgH4psh1SXoZwKcB+AE8CKAFAKSUJwFElWt+BeB/Tfy+EblFoWfiHhsBFCCnUlkC4BcTx78KYDk+Hl4SQlxALpyzb2Js5sTzvzbxvv9TCLFDueYCgMXQ0HBAbwM1bnZcoV8mxK2+AaBaSvmOEGIPcsbaiXHH8Zl0SQSAfy2lHLIdzEkKz4T3FY0VAeAnUso/dVz/ZQAvSCn/zVXuoyIBwC+E+IyU8r0ZzvkCcnOxB8D/jYkdxMRYXgbwshAihtwis2fimk8jNxcaGjZoj1/jVsJ85IzfJSHE3QB+a4bzBpELnwA5JdWVQojCic+qMf45gMfI0Ash7p84fgy57kkQQpQAKJvhOYcAbBVC3DVxrneCcdMN4HNCiMDE8fwJ1cppIaUcA/B3AP67EMKYuOYeIcR2x3njAHYCeHjiWUUO5s5q5EQECfcC+OVMz9WYu9CGX+OWwUTXr1eRM2Y/AvCLGU79Z+RUEyGlfB+5UMg/TyR3VcP4VwDcAKITypJ/NXH8aQB3CiGiAP4EuVDPpWnGM4BcLP/5iXNfAHCPlPItADsA/MPE8W7kQk5Xw58hF64ZmBjLfkyGq9RnnkdO+fEPAHgA/EQIMTDxnBLk+gBjYmEcnzhfQ8MGrc6pcVtiwsjXSynf/QjXfgqAW0r5/sRO4RCAe6WU1ic8zFmDEOL/AnB5JhltjbkNHePXuF3xOHKJ2nc/wrX5yCVT3cjF8f/9rWT0J/AugP9xowehcXNCe/waGhoacww6xq+hoaExx6ANv4aGhsYcgzb8GhoaGnMM2vBraGhozDFow6+hoaExx/D/B17bBfon95LvAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/04_select_51_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = candidate_table['ra']\n", + "y = candidate_table['dec']\n", + "plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.xlabel('ra (degree ICRS)')\n", + "plt.ylabel('dec (degree ICRS)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we can see why it was useful to transform these coordinates. In ICRS, it is more difficult to identity the stars near the centerline of GD-1.\n", + "\n", + "So, before we move on to the next step, let's collect the code we used to transform the coordinates and make a Pandas `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from pyia import GaiaData\n", + "\n", + "def make_dataframe(table):\n", + " \"\"\"Transform coordinates from ICRS to GD-1 frame.\n", + " \n", + " table: Astropy Table\n", + " \n", + " returns: Pandas DataFrame\n", + " \"\"\"\n", + " gaia_data = GaiaData(table)\n", + "\n", + " c_sky = gaia_data.get_skycoord(distance=8*u.kpc, \n", + " radial_velocity=0*u.km/u.s)\n", + " c_gd1 = gc.reflex_correct(\n", + " c_sky.transform_to(gc.GD1Koposov10))\n", + "\n", + " df = table.to_pandas()\n", + " df['phi1'] = c_gd1.phi1\n", + " df['phi2'] = c_gd1.phi2\n", + " df['pm_phi1'] = c_gd1.pm_phi1_cosphi2\n", + " df['pm_phi2'] = c_gd1.pm_phi2\n", + " return df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we can use this function:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "candidate_df = make_dataframe(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And let's see the results." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAADTCAYAAACrx+h2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACcK0lEQVR4nO29fXzdV3EnPMf0bZP0bR8sOX1JKE1bUpJ0MZQYig1tEtqnSaDd5UkC210shaWJJYU+rS05y5YW22yWZfsSp0shJU67zwKx1W27idk21lWB7VuAWFeKDU1fdgvo6l7LNrTbArvE0j3PH9L8PHc0M2fO794rCfKbz+d+bN37+52XOXNmvjNnzjkhxggVVVRRRRVVVFFFm4m2bHQDKqqooooqqqiiijhVAKWiiiqqqKKKKtp0VAGUiiqqqKKKKqpo01EFUCqqqKKKKqqook1HFUCpqKKKKqqoooo2HVUApaKKKqqooooq2nS0oQAlhPAtIYTfDiE8HUL48xDCyzayPRVVVFFFFVVU0eagr9ng+u8HgD+IMb4uhPB1AHDJBrenoooqqqiiiiraBBQ26qC2EMI3AcAcADw/VqfFVVRRRRVVVFFFhDYygvJ8ADgHAA+HEH4AAE4CwFtijF+kD4UQ3gwAbwYAuPTSS1/8ghe8YN0bWlFFFVVUUUUV9Z5Onjx5Psa4VfptIyMoLwGAJwDgh2KMHwsh3A8Afx9j/HntnZe85CXxySefXLc2VlRRRRVVVFFF/aMQwskY40uk3zYySbYBAI0Y48dW//5tANi+ge2pqKKKKqqoooo2CW0YQIkxngGA+RDC961+dQMAfGqj2lNRRRVVVFFFFW0e2uhdPGMA8P7VHTz/EwCGNrg9FVVUUUUVVVTRJqANBSgxxlkAENeeKqqooooqqqiiZy9VJ8lWVFFFX7EUY4QzZ85AdVJBRRV99VEFUCqqaB2IG9IYI7RaLWi1WtnGtR9G2WpPL+ujZUnlWr9Lzy8uLsKRI0fgzJkzrjZ6+oLPtNvtrH5r70m87dcYVmCtoq8mqgBKRZueLMWbMnIb0SaJ0JAuLi4Wfx8+fBgOHz5cfOclXpbWnlQb2+02PPXUU7C0tAQf/vCH4Vd/9VfhvvvugzNnziTryyHaDlqWBC6k3ynPeDsGBwdhaGgIzp49Cw899NAaoMJ5cObMGbj//vvX9JESPnPq1KmsfmP7Tp061VEHjjWWyfup8aosb7GOflCqfam5WhaUV/TspAqgVLTpyTIqkqKn33m88DJk1YFEvx8cHITh4WEYHBwEgBXDes8998A999xTfMdJK5eX5eEDwEVA0m63AQDg1KlTMDY2Br/7u78L9913Hzz/+c+Hf/iHfyh+t+rTSIoiUCASY4ShoSEYHByEgYEBuOWWWyDGWLRzYGAAbr75Zmi32zAwMLCGZ/RvLBsA4EMf+hDceuutAAAiqDlz5gy0Wq1ivDy83rp1q9hv2sdmswlzc3OwvLxc9G3r1q0QY4SzZ88WY3/PPffA61//ejh+/DgsLi4WfRkYGOioNxcMct7efPPN8Oijj/YUpGgA04poSeD5zJkzpUB5bvSx7ByvIlCbkDCU+pXwefGLXxwr0qndbsdWqxXb7XbWc/j38vJy8b23rH60j1Oz2YwTExNxdnZ2zbtSmUtLS3F6ejouLS3FVqsV3/GOd8RmsxlbrVZsNpvxHe94R2y1Wmady8vLcW5uLi4vL4t10O+wDl6m1W4P8XI1/rXb7dhsNmOz2Yztdrto+4ULF+Ls7GxsNBqx2WzG2dnZeNNNN8W5ubkYY4wLCwtxdHQ0zs/Px+np6Xj33XfHHTt2xNnZ2ey28jbPzc0Vbcf2zc7OxkOHDhV8nZubi4cOHSrGBr/bv39/3L9/f3KMsK7Z2dm4sLAQm81mXF5ejgsLC3F2drZj7JrNZlHu3NzcGh5SXlM+SzynfRwdHY27du2KtVot7t+/vxgD2n86TlpZqTGmJLUP5Rr5jG3R3qVzPUUabyS5x++XlpaKcUbe4xghjzx6SOJRq9WK+/fvj6Ojo2Iftfno7SfKI29XL3VhRRcJAJ6Mis3fcNCR86kAik3aBIvRNqiSUUGlIimAbtsnGQiLNIXPaXl5Oc7OzsbHH3887tixI9brdVGBe5TN3NxcYcwtvmL7pO+bzWYcGxtzGVutP6jkY5QVb7vdjrOzs3FiYqIYK2x7rVaLo6OjcXR0NO7fvz82Go1Yq9Xi/Px8XFhYKAwGGgtq2D1kATc0Mvhvs9mMhw4ditPT0x2yRmWh1WrFgwcPxqmpqTgzMxMXFhZUGca/EeRQ+Zibm4s33nhjnJycLPqCIIn2OdUXznOpb8izRqPRMV8so5YCQCl+c5DNASqfu1SOpLlu1YUAw8Mz+ne9Xi/mILYHgToHrJYekupZXl6OtVotjo+P9wyEWfzVAFouVUBHpgqgbBIqK6C5kZGFhYU14IJ686h0qNfJJ3S33r/WPjQouQbbUob4/9nZ2bhr16542223xe3bt8d6vd7xvqZoJZIiKKi4vACrjNGnxAGdZDRwnIaGhuLCwkJH2xuNRpyYmCiMBBqKsbGxArSklK71m8dT5eBOkjXKKzQ8Q0NDcWJioqNsKdqA/aLlLS8vx2PHjsVdu3atiQbleNcIeBEoWe9yMGlRqg2arGpAWeMx/o7zAueyBNT4OKNc1Wq1ePDgQZfM035RgEJB9MLCQpybm4sTExNxdHS0Q7+kQCSvR2tTWadE438qauSllKOjEcoWRoRT0bUcPbcZyAIoVQ7KOlLO+nKMF9dDaQ4G/Z5TCAG2bdsGIQSxzC996UvwyCOPwNmzZyGEAA888AAcPnwYzp49C4ODg8W/WM4b3vAG+NCHPlQ6OVJq37XXXgt33nlnx7q+1Sf67sDAAJw6dQra7baYTLl161Y4fPgw/NIv/RI89NBDMDAwUJSJPDl8+LCZIIm0ZcsWuO6662DLli0FPwYHB2HHjh3w6KOPungSQoAtW7bAhz70ITh79mzyeU6Dg4Nwyy23wGOPPQaLi4tFO86ePVus5bfbbXjxi18MW7duLfqIbf+2b/s2+Jmf+Rn4gR/4Abj88sth27ZtcM8998D+/fvh3nvvhXvuuQcGBgbgqaee6sjxoeNhySzNCdHGEPNMBgcHYdu2bbBly5bi38HBwSKXYXFxER544AGo1Wpw0003waWXXgp33HFHkaPRbrchxov5KwBQ5DRgn1H2t2zZAi9/+cvhqquuguc+97lqmy2KMcJHPvIR2LdvH5w7d65ow9DQ0Jq8EQCAs2fPwvHjx4u8EytRlPeDk5ZAjQnB+H8cb+wTwEr+zdmzZwteYH3XXXddISMhBPjN3/zN4v9YJx/nL37xizA1NQUvf/nLi9wZi7B9MUa49tpr4T3veQ8MDAwAwIochBDg3Llz8NhjjxVjjN8jnTt3bk3b2ix3Cvt77bXXdryLz7VaLThy5AgAQAdfPDu9UBYBAB5++OGOeRdCMOVHG3dsF+Y05bQH4GKu2Ec+8pGk/egm+T7Vjw0hDblsxs9XYgSlbDiXhmnp/z0IHnMwLly40BGKrtfrhTfIkba1npwTftaeLeOJc95NT0/HG2+8sfCcLL5KYVkpspTTpzJLVF6v0NsGWibNK5meni7lMbVarTgxMRHHxsbiwsLCmhC3RwZ4ZEzzODV+0qgd8orLO89pkcaTlq9FAL0yjctN09PTRT0YcbLmCnq7mjxrEUQuz1JkKMZOvYDvac9iP3AJTJr3Vv08wsojHVIZtO+p5TE+f3EZkM8vutxqET43OzsrRkA8859GOVKRCM4zaWxRb9H28whPKhqzsLAQx8bGilwyz9hp8uChbqJEZQiqJZ580kK2uSG0suuXVBF5QQ7+Ro0WKndUsFJ4kYeytXKtdltCzRWXVb5m3NBgTE5OxqWlpST/pHKkELgXOJUNnWJ427ukklNuq9WZjKg9Zyks+nuj0SgUYU770AhOT093JEVy2U0tRfC+0fHhy1rWUgd+J8lcSk7xXToneB4GHz/eR25kuUFKJela33OA0mq1irmNyydUFiRQKIEAqZ2a3NM66RhIYEgaZw2oUoBK68OxQAOtySV9jiZkY1us5GFpGcXS3ShfuPxFc6wo//ncoP33Aggph8gj09r3Kf3TC/2UQxVAKUESakeh9O4ywHdSilV7L1dIUCBp4h4aJpz4s7Oza4SWrlFb5UqCrhk/3u9Dhw4Vno0X6PA8EE+irEScl1JEKgVeNB5IQJa+12w248jISNyzZ0/hzac8lDKAUFN61Jik+MflwCuDfGyoxycZptxIFu2zJUcWcNCe4eVTQLx///44MTGRjJilvG4uYzlOgNUnlC806HyXlkR8rCQZr9frRd6UBEYksGgBb5xvUoSO94nWR3+fm5uL4+PjcWxsTIyY0bpGR0fjxMREnJ6eLiIaFjCLUdf32vzHv9EJbDabayIofHwkIK2NkQW8vTKtfZ+qf72pAiglSDI8KQWpEVdQZRS0pVgl46QhbQxb037hdlNMaPPWjcpgZGRkTV8kxUb77ZlUmhHuFthJHj71bj2GH0lSbLTdWBdPBrTaaCkQC4ho7bdAJP1b2jWESh0jNVqiHgdl2Gdt+3UZgIK7NzDZUgKSUnus7+hvlE8c0HvABcoQRjKQV1ZicFl5pkAD2zozMxPr9XoyUVdymrAOTGCl0T7uaFBv3hMFwOW2Wq3m4iXuNsNIKco23cqN5aY2A1gyQvnriURKY2fVge3mkZvUu5beSyVj0/HSxiR3bvSbKoDioF4ZP+kdLjBlFLTlhUnegbRs027LYU5UTFq2vjY5EdiMjIyIa/283xQIWeuvWta6Z2Jxb4PvouHt4sqCK43UrqNUBMUrM9I7Wk6BdVaDN2zs6Rs1griOjh6j9U5qDbwMT7DvdPeHlOvA+SR9R3nHwQUtjxrmVPST9psusdJ5qXnhkiGS2kWJznl0FHbt2pXM06DlSs6WZeCoPOREM6msSc4dld1msxlrtVqRa8Z/p7yX9GiujracAas/nvlN9aSk72ndXG9pZWr5OFwna2fEaFSGD72iCqA4iA+QhVRztxRqa9LS35pwIuCo1+tiGJF7q63W2lBpjDo4ospHUoZUOVNljXVL4VOuWDD0j2d2aJNQW3LyGCK+XksVt9RHqUwsY2FhQcwZyAUDEmnAiq/p57ZNqsdadvC8Tz1MK4JCZYHLUBlwLxlwCfxwIKr1mfIOjaUUIaFzjRsNbUmDzvOlpaWOXAgrj0EyuBiBoYfYWSBPAuIWT3nfyxjnMmeM4DZynkyNPJ2dnY1jY2NxfHw81mq1ZM5Jqi1ep9PinVSGBSwsuZPyGekYpiIfUlmch7VaLe7Zsyfu3r27OHbA6nuuI9UPqgCKg+jpozHameN0j3+KLMOP5FEaFHDww60kr5Dv2qHt0YRSE1I+CSTvXVp/xe/Qk8QJaO1oabdXDnkaGRlZM8Gk9mmGHr+jyscDFmPs3A0g8QPLoWvc3XpukoG3lCPKimXE8HkJqKbaW6Y/eLonD6/Tdkt5Gim505J76XfSwXoa0F5YWIjT09NxYmIijo+Pd5w6jOVK53TwermsSTtYaH9TRp0vjeXsFvMQBQkHDx4sohke/vJycsFJq7WSvH/jjTcWO8647sJIA7Yr90RhPucRxFvvt9sXdwdK893SGQhE6Tk5UvKwN2Kuya3GT8pD1AcHDx5csxSWqs/SH+tBFUBxEAckVuh+ZmamA6B4lb225ojKDZPytDCopNg179hjlLwTQnvf6iOGkPHgrVqt1pHboNVLjb/Xo/H+7o18edZ5EXxp4XuNLKOLZfBdEFwOuHdNcwMkI+8FBJS40k/xvNlsxnq93hEdk5YvJMOj8Y4DY/o7f0c6WM8C2twh4Imj1o4PXh6OJc1jkIyItf2YltNNZM5qK9Uxx44di+Pj44Wu8e4MSf0mEY55o9EQvX9Jn9FEXL6LipMWNdUcDD42qG/4acBYNnVE6Pv1en1NUjl1wqRjIng7vH3U+M/1geUAcn7zaKwml/0GLhVAcRCNoGgDQz2wMrtLqGBxoaXCauVnaOVRsoCLFjLvlRBSRI+TheeppDxjPHWSKzSrz2X6L73nnZCScvW8a40Zj3qlDDfyUlri48/kAlMtUmD1SVomkSJ4XsAklUu91xTY1MZIchTKJLDydnLQytuhAY9cg1+G0BDXarUCSOJpvZIH7XFGvDrDG0HAJGh+hL3mcPHy8foGmiws8Z7ym+a7od6hUTPuNNDvpqam4ujoqLiUQvusOTy0XzmA+MKFC8USGJ/f0pzBd2mUm9otLYKyHnIZYwVQXEQFiiNUK0TbbPqPhKeCZE3alAHXDE/qd+k3Lxiy+sK/5xMBzwHhWza1CYC8qdVq5tY/jSSF5gFj1oTE9yXvxDte1t/YZ3peiifioykk2hf+TJn8Aet56fdms9nRF295KfmmBiMlt3yOoZHWlk7Keox0/Mtshe8FGLB0ARpfzF+TPO0UiOpFO1Lgb25uLu7atSsODw936EVr7qJ+oUZeis6ltlYjOMGdRhbQx3GWNhWkABFvuxRx0QjLmZ6ejrt27YpjY2Pq3OJ6nQMtnAvWjtSy8yGXNjVAAYDnAEAdAI6nnl0vgMJDhh70zidUamC9hpZPFk8+i7W7gT/Ht0R6hdFjzFHwrQRfSxl6vGSJKJjAjxVh4PVKPEA5kDLkLaOZ8kIoeKBGA2UwdW9Rioe9AKM59SJZwN0jlxxw8Z1dnogHJmWjh6t5jRJ/vEaVk7QDzWP8NQPs9WKl56hBs3Kq6LOpRPky7eCkOWfLy8uxXq+vuSjSmqsLCwvqHWOU95ouoeXQs1osHknyYfW/rD3g36Fs4S3l0sGamqxZjtF6REks2uwA5WcB4AMbDVDoANIJZHnO/D0kTcl669e+0zxAquBSe/+pAOPSAL1l1uvtej1dCpS8oeQc8GAZklarVYSyx8fH1eiNZSA4j2meBZK2Ldpqd+p36tn1agkuxyNKPZtSxJpMamVLcknLzz1IK8a1B4RRWZWO06dgnYND7oFqRMeNJnymjL920rMkm5IRsnjqAfqWDKfGzAPCKFnRY8oLLEda/uB8ln6jzkjKsUvpM40HVjkaacufEi+kKIgWCcV+Sk6gNget8crZrdoNbVqAAgDfAQDTAPAjGw1QKEkTKKWgJAH3olPPBOJ18HfxPpXUOi8HDghOtDNQUh6R1HauVK1JK3klyDeqrDWlxtvHwaW0rsx5SZUi39ngMa5lo2gSLy1Dup4kGe2U4dQUqke2Jbnk5/pY+UiWAZUiI9KhgRxI8J0bKEueZVnMvaI5Hp4IiqQzvHz1GFneXj52VkSVj7m0LO5xQixgw5NF0cmQbj7WeCr1jR8wx3mkgd0yYCXFe1zKQn1tlcP1KAXv2pEJVG5xjPh2d8+ctHay9pI2M0D5bQB4MQC8SgMoAPBmAHgSAJ684oor+sWjDrKAgBZylwy5Z/87vmutjVuE73q3lnm8HjoxUgpAajudKCmPSlLOOGnp39ppjNw75GDBUo68Dbi9GXNl+FZijaTljBSw03jpiQKUpRwvF5/l9zpJhpMuT1l5DZoR4nzwem6e/mhGVeJnqryU58/BgnRIYArkWUCLP8Nln4M8awlWAzep8abRDe4McDCo8Ubim7XDiUZ6aXstHcXLwHGVtoLz/6fmpNYny8Giz9BkeGtZUapHA1u8n/i9JO+WvSkzD7ulTQlQAOAWAHj36v9VgEI/G32bcS5q9nj9KETd3nabUtJc6C5cuKAKH1dEvCyeBGuBOUnxcMHXvC+qnHiEhys2r5dqHU5FvQ2aA2IBR15uqh18TFIKylL8KU+N12eNiUae5SvkW+q+HzpmVl6XZhS0/noMIP5mgQxaj7Tk55n/FHzxvAY+hnSeUdn3GgYJFGnOB0/a1C71w2Pm8SZ0CchbkVHLAZDeo/ovJwGd8s4rz9yRkPhl/d9qDx0P7Kt0aKE1ZlwPpoC8Ry68Y+R9tx+0WQHKfQDQAIBPA8AZAPgSAPxn652NAihlB0pThpJQlsn+9xJVSOghTU5OrrkCnHokkoLGsjxr8ZqXF2Nn6FAzBqn6uKLQltNQ2eNNvTwXRWpzGWXAoz4p46qBMu0dy7vyXJ5H+WiNbxlZx+TGer1uJlunjJHWBgukWW2WZCslbzF2JkTnLq1Rw0nzUCwAzpd2vKH1HPmkkUB+KKUGHDUg4XWkJPlrtdZGdywdaIFVbwQFyQNOU3XyM4j4WCJ/6HJhLsjVlhq9c9OaDymniS+v5eZSlqFNCVA6GrHJIyhewebkEShUFpLHIpVTxoDgxMI15tnZ2Tg/P98RfqaK1QJJktKyFJZ0sy3fJWUpIK9C1PiCyh6XwPAeIPqcx2NNLdelcla4wvKAIUtBICiYmpqK4+Pj4rhJ3pAG6Gg7PcuN3Ph4T6v1eGhlwJxEmkeqHccvnYmRM+e5zGoyob0rzQ/rOc9v9GwRjBzgnMBdPdrSG404oA4cGxtzne4aoy5/PJpiAQ1L90n9tfRTtwYeeYC3PVsgS1veyamf7+TrFjBoulb7PeUY9IoqgJJJXJCsSIg1ATwCicoCj3+W2kEFhG+d9PZHQsbcmKS8TclwpEAN3qvDzxfQ6kRKlS21TSpraWkp1mq1OD8/v8ZTRfJ4rKlntMnfaq1Er+r1enHEeCoZWQMT9D1MtMPkQW80BOvh71Dll5vUqvFekzPJq7Z4yfnRjUcqXReBlBPZo3VIUZBcSvXDU4fET5xHNBqETlGj0TCjoc1ms9hWj6CLOwy5gIm3MWU0rf5p/aW6Eg+jK2tcaR/oZafS8feWQ9VuX0yyzskno2C1W8Cg6XgJAFrAsNe06QGK99MvgKJ5bFxB4u8oNLjGjEZUm0AW4qUeDgdA0vv0Ij2v4FB0nyNwqKDQk7R262heIm6pky7+spRTasJzACMpYv4cVfLcyywbQUm1FT1W3IlAL0vjZWiGG8ug7/GtijnemZTsnauQyj4jKVyuLDVZShkkqx2epSUpNyoVTcI5grkmZZMKqfGzZF1aWrDGjcsmTRTFOa0lgS8tLcVjx47Fffv2dTg3OSA05bTh36lzSmhZVmSK6qSZmZl4/fXXx6NHj4ry5iHqnOL/NYBh8QLf5TdxpyjFX06pPnptVNlVgzJUAZQEpQAJJ/S0MNSnGQkP4kXQkcpVkSayFU3h76aMkkQopOhtW8raUubaJPN4qJoB4u9TD4XyUfM+y4bRU3zS2qp5T5YC1hSv9G6OJ9oLj0grI/U95kBpF7NZfZDGrFs5svrGd33wNuC44l1TnsvpNJqdnY07duyIo6Oja+Sz3dZ3BKUOGOM6iCd+W2CCLo9q0ZsUaKHLRFye6XvoeE1NTYmRPXxWWqLj8wbbWa/X4/DwcBwfHxcdSG3M6b+Uvyk5s3iBdqLZbGYdQJnjOKCet5ZQ+RySbBS3Sb3QFxZVACVBKZTPiUZQLIWU8ghjtLeN8ed4XTSawtutgS6ezW9FeLyTgyoOK1FVOsMilevAIwUW8fZaBt1asvF65VRppoyEtZR18ODBOD09LcqTNaZ0/LQr43OVC7ZV2i7sAROaTOH3GGWgfaWyaRkBauwkObbGK2fLJJVNPiep3ODcpbd1l1XkXM65fGpjzxNxU+ORo2O4nrOiN5SovKMTxaM/vC5cjhkZGVlzRQV9R1qio+Ml5RxZcsz7jrlqPLGZn0fknVfLy8vFOVN87Cyg5Bkf/iy1JZp+1+rm+ozOs35u4IixAijZ5PW2Ukov19DlCi7fAspRsCToKMQU0Xezdk77qSlBPnGwP55ExFar5T6Ejr9n5bB0G0Hhnp0F3qwJ3m63zaPIrXqo96P1NaXUOHhqNptxbGwsjoyMFMtlklxqbUkl4UrGjZZvzQG65Eh3peSMFzeymGyMx6t7E2lpZINe8OglrxPEPV2N36kkbY/zZQEOTZek8mFo9JJHMHHnF/Ky2WzGRqOhnh2jOSspR5CXoS0lzc3NxX379sXh4eGOpP4YLy7BYbRakyeND1z38fZSJ0+LdEt61dK7+B6CK+QtXW6XHBLqcGGE0HPXXFmqAEomedGxV/nnXn+tKSWtrVrmuAZqpqen48TEhLid0KqXfm9NemniSEbas86JQMZ706dmeK1ny5C23CABjFQegxcsae22okz8fS4rHNyg9zQ1NSVGK3jZkvHReKHxKdVH/I5fepeKvkl18nbOzc3FHTt2xO3bt8exsbHsXRhWkrv1Xo7zwg2ZxddUIma3uQV8rHDsU8AIv6PyMjY2Fnft2tXh8eP4UPn0gFerrbRMdAZonbTNmq7hfNPkyeIXJ1omdag4mKHL89JcSTmmWA9evkoP4cN6aZSLfsput8+hCqA4Kddw8eelCYQCQG/y5cgWB5+/7zFu1jMSgJqbW7mFk0ZQuFLRBJ7WZSkOXo4UKm+3166ra/zNMZDUsGjjaSk6DzizxlqLNKS2mnqAiFa+lejIn8NdRJRfUhgcdz9ZES6qVD185/3wAgz6vBXC95DkFPAIitZ2if9SCN/znkfX4HsYLeLzTnp+YmIiDg8Px3q9riY/8pyQVFu4DrCWmqisWMCMLktiToYETDxypQF87ig1m81iORVz+Hhicmr+a0AstaXcAg40csF1Mj7DD4/UZMmStQsXLsTp6en4zDPPdEQBab1c9+fOrzLUE4ACAJcCwHO8z/fj02+AwgUmF6xIg4nf0zVibVJLiD61/uf1VNE7wIQ+nEi0bBrakwQelfGhQ4c6dixYk1pLXMWdLdYWZa5gJIPNDaR0CRwv31I2mrciKRM+1lZUhStcrtA8nqLksTYajULJWsqR30mk8YDmHeDOIw2gaHxIeeleUMXr4cqbjn8KnHXjeHiNEzeiHoCdMoYIKnmeiwTOlpeXC1CpnV4r6RQLsPPfJd40myvXRKQu7dP63GrZdy+lgEm9XhfzybRxxL8xMXlkZCQbLHNeURAtOYxUt1pRJ64veZQlBeytPnOgL4137lzpBZUCKACwBQDeAAAfAoCzADC/+u8nAeBdAPA92rv9+qwnQElNWk78eclT4xMu5VVL5ZR9Dr2roaEhdWlHAmg8GREnn/cSO8lYUYBmoXNu3HmbJcOVAzI1b5AnmWEbJNlIeS+SF0eVBIJU6cZdDnSl92u1WpEorclss7mSuzEyMrJmvPg7uGSBY1PGe/IsI3hBgNbOGPWlLV62ZWAl0uSCe5VSNIM+m2P4te81vkjgjM5PKyeFj2uKJ5Y8YnmenTqU6NhJY875yHceNZvNWKvV4o033hinpqbMO4/od7QubAMuGVJQmBvVxe/xjBl+3hGNhFj5YnxJpd2+mOfEc0c03mo6KcfuaOX1g8oClI8CwM8DwHUAsIV8/48B4J8BwH8BgJ/S3u/HZz2XeCRvNQdIWEqu27ZJlCpf80K1OjTvB3ki3QabKtPbF/5cascGBRY53mrKw6J/c4ApGalUHZJMSUBPKgcVXKPR6EiMplsWNb4uLCzEkZGRODU1ldzl482tSRkfby6VBry4HEtleIGi9BuVYynqqfGEAgMpspejNySwkOIXfYYn6Kbmb4x6lDjXCNE5pzkrVpl0WzXnIwcvUgQal80nJyeT993w9lpRHWl3n1f2pIgXl0HMo9LyxaRl77m5i4cyWvaEzyVJJ/FrDjxj1a3tSlFZgPK12m85z/Tys945KJJQ5xhXqgBzUStvk7X2LLW9LNHJpoXV+bIL5VOuMrbab01CCiJQgUkKQQOMufzg/Jf4kBoDKbJggRH6HPXAPP2g5WIEhZ6omSMv6CHj0iDtv9QO3n7rWc7HnHnCDYNnjtLx9B7dzo1RCoB4ZM07ry2i48qNvMYDLRJI/5+KImD5uJyhzQGLDwia8eoJKYqHW7mleWaNgQWoU8m8Ut9TeojbCctR0sCztvstxrWnYWu6RuIVH7PJycl41VVXxenpabNdyAvtkM1eUs+TZAHgsjLvdfvpN0BJCU9q0knlpdbxvW3ShK6XRJUO9VS0cwm093iZ1CBonqcHjEjfUf5QAMSNZFkAp/FfAlwp2UBDL90HREk6gE9TsBLx8SjTVt6eO+64I+7cubPwLC1+8pB/jsEoQ61WOpmcE3cgpHZKbfQYYI031HvFdz25XFq5FLR6gQ4tQ/s/jyKk3qHLSblAUeK7J//ES5ZjhH31gEmPc+XZbWWNIZcHJA6AtLameNVqteKBAwfi5ORkMoLSbq8cf7Bz5844NjZWCkB7qR8A5bNl3uv200+AIiks/F5C7l4PjyYnllHG3U7QnDLpZJH6qxkaa+lIAhBcmebwlSt2ensuNRi8Lzm8SfWZt0UCbxqvZmdn48jIiJgPgsTD8Lk5A1ShWcYuteRH28MjKBKhYcFlp9TJw71I/sa/UzvCPMTbJLWRfpcab07T09OF90qBO49iaNECad7gc9b5Hh4gSJ/jvKR9lsAglTdpzPuhw2jZlu5oNle2M+MuSpRN/Fe7G4vXkZJnqV7PEjjuJMJzV3CMpahUt2A+ZxxarZUDJI8dOxYbjUZfxg7JAihbQKEQws8qn58DgMu0975SaXFxER5++GE4f/48PPzww7C4uFh8f+TIEThz5gw89dRTcP/99wMAQAghWWYIAa677jp4wxveAMePH4fTp0/DkSNHirIpxRjhzJkzCACL7xYXF2FwcNBVn0a8bOyT1A4AgK1btxa/XX755XD55ZdDCKF479SpUx1lHT58GB544AEIIaxp5+DgIAwPD8O2bdtg27ZtEEIovhscHCzKePjhh4t3aVt52/Hdc+fOwd69e+GTn/ykWO7g4CDcdNNN8Nhjj8GZM2fW8Fbj06lTp+Dw4cNw+PBhWFxchBBCUT4n3g9sw+LiIpw5c2YNj0MIMDAwYI5lu92Gs2fPwtjYGAwODna0B/meGj9s17XXXrumLuQntueBBx6A+++/H06dOgXtdlvk07Zt2+Atb3kLXH311bC4uKiOzenTp2Hv3r3wkY98BJ773OfCLbfcAo899ljRbvr84OAgDA0NUaeng86cOQP3339/0VZKvP8hBDh//jzs27cPTp8+vaZt0v+lvvLx5H9r38UYC90gtRfpla98Jbz3ve+FV77ylYVcbdu2rUNmh4eHAQCK/uH8Onz4MADAGnnbtm1bwfvjx4/D2bNnRT6eOnUKHnrooY65K/H0Ix/5CPzmb/4mDA4OwpYtW9b0eXBwEG699VY4fvx4wX/8/ZprroE777xzjdxRHWrNbWvcNDpz5gzcd999xXyV6JJLLil0wUc/+lHYu3cvfPSjH4Xjx4/DrbfeClu3bu14nrfh1KlT8Nhjj8HLXvayDnn2EpdXWn4IAS677DLYsmVLhzwAXJQBroMsvsQYodVqQavVymojp8HBQXjNa14Df/EXfwGf+9znSpfTNWnIBQD+DwAcBIBfED5/p73Xz0+/IygSSqWeTs6hNZJ3Q719Tpq3hqe+5q4BWqFoK/zIE9Kk33iuR270w/KweFulfIwY06f4lgl/l+G3FrLV7u5I8Yuvv2N7KN9zPVKJv8g7Ot5Wgqq0LZyPFW5DHx8fL3hAkwV59Mu6KoLyUVseot/xHT00GoHeL+7YkI4yLzPWlJdlTjvW6uARvNT8kqIa2FZ6l0xqe6kWUZAiVrnyJ+kVLRrDz3zhY0T1aeqkU67X8SyQCxcurIlgUX5S2Tlw4ECs1Wqx0WjEer2ePP2a80iTG2suS9+nIlUxduYlaVudU1EdyjPPEli3BCWTZP8UAF6s/DavvdfPz3qdJCtRjiGOca2Qa8qQCoMUykflh8DIG/r2CqPUbkn4eSiyjHGkoVJvaF8DKKk6qeLy7HSR6k7VISldLQkxVZYUqk8tIXiUG/KcKkQ+BqkQMvaDAzetTY1Go1Do0sV01oWBvA85SaSS4m82Vw7nmpycjOPj48UR/to5Id7ysY24TJaTDC8ZfG0Zx1OGZcykpQKtbakDz7jD4i03RjkvaWFhYc3t3lQ+6VZ3Oq54GiyeiJqzpORx1uhZQO94x8pWfjT6qVOtPbzw2hIsiy5L4Tzl5xpRPuOpsVzPWrpJcmLKOENlqCxA+T4A2Kr8Nqi918/PRgGUlAK33mk2m2s8AgmtUw+TKwJ6eI8GIGLsFEB6SqLVbq93xC8m9JJHIWhtST1v1Xno0KFiCyI10F7QkGpXq7X2hGD+rLftZUAYtkHqC5ep1NkYqf56lS4FQHjbt7RlOSdfxOvpafljNOqHOxJSZ2Zo9Vs7PHBuegAGHzeUJS2B3FOGxBPPXNIMk8YDqX7PnOIyrs0frE87MLHVuni5phaRttrjmZ90TJvNZhE1qdVqHSAht+7c5/AZejw/5ad0tpE0/hzoSI4a7TOdn5sWoGzGz3oAFEk505BaN8bN8pysCcPPBdDaQZUACjDe7aB5QN6EVc/WQw8/LUp5ajl10nC1J7ve0y4tebEb4BejDlBSylQrU3vP6wlroXUPj1A5aks4ZQBiqs65uTnx8Ctp3HKMcIxr55S2TTyHZyk9ID3HDY+1FJ3a0k15waMT3vHOBeKePqd0pQUM+LsSYOXkmXcI8PnllKldiyke5vBMAhY0ipK6RX12dlY8m0WqC3mCc6mX81Wj0gAFAN4IADMA8MXVz5MA8C+td/r5WQ+AInk3qb3tKbIMhifrHb2N1DKPdpiYZKA1hUq9uV4KZRklhu3xThCv0vQeRsZ/62a5QTozgpYvGShaRi8URYq/3KBr/fWCJe0771JpCuRRZS0BfW8UgfOBUgqgSOWWAcESSWOjLRfj79I2VWwf5ZEE3taTpDHiY5AC15Qkva3pMSwvddikpkPpWFiylSMH3sMNc0Bmq3XxmAtc8knZsXa78wDAXhwDkKKySzz/EgDqAPDDAPDNAPAtAPAjAHByo0DKeiXJUqHMyTuh5XgMDTVc0rY9fIaGGa1lAI8R44rJcxR2LnULNHhZKe8ytw7ptEiPwsYDkzzb7iTlKi3zUS+nm3X+skbR47V6jbmHMJE25cmhwqbP0XqtiJ63fVLfOZhPRTjLyKHVdtoOKdSuHehlgWiqZ+jz0lKbN1Ja1uHgPKLRXS3RmRveVF04bqnLUKXIWiraZulHCSTRpSJLp3KdpPU9JYP8vXq9HkdHR+PMzMwacGqBPXSItehML6ksQHkCAJ4nfP88AHhCe8/7AYDvBIAPA8Cfw8r9Pm9JvdNPgEIHDT0l76mdvBwto14zAtahWjmejvcESMnzKmNstMkqeULdgJ6U8sj1mK0IihUlmZubizt37ozDw8NJL1r7nke5cHlCWovnZVg8zJETT5tz3vEa7hhXeHjjjTcWZ4Fo/aCnckr1SCAzVTefh1KYns7fMvkkWI8FbLDtUpIw7b8VyUz10fL48TtMVqY8pLlm1rh6omsWwKDtpAac9tkL0DmokxJEKTCWAIPkKFjgU5qrWh+tfuFz9GZnDq5SOtriEy714ynSmh7hOqpWqxWbDDblEg8AfKrMb94PAFwOANtX//+NAPCXAPD91jvrEUHBAfSc+KlNYL5rImWctUmt1aERN1LWsc6WUffwCOuTlCj3YDRvL9eIWqHMsqHhVB8p4cTVIlmW8uLPtFoXE1itbc2SkuOGhv7fe4mj1B7az5yTPKUyNF6kQLRXLj1b9612Wu3jNweXAY1SXcgfPFG20WioQB6NLb8kjvPJI2ecpziPpOUgPMUY73zS7rnReMPrpWBAeo8CRSvSYM1jOpajo6Nx165dcXJysmO5ZGpqKu7YsSNOTU2p4KnZbBa5GpZ8pnYi8jHikXi+VMhlhYMZaZnJyxsuo3T8pO+prsFlnm6i6R4qC1BOlvmt7AcA/isA3GQ9s167eDRDJBloay0SlWhOTkdK8Xg8CVQGfL2aft9sNjsiPWUMUUpBazsTLEBhlZnyGqXyc8GQRSmw6VFeXq8QiSsUeh6KxMdU4hwnCTDws1i0pSe+/VEC6h5FblGOIU6RBbxwbOv1euE5pkBSyjBo46wZ+fn5+XjHHXfE+fn5GOPFU1Ax2Z0bU69XzdvLHRgrRy1nC6/0O6+Tt9sD6lP1UocIt7gfPHiwo449e/bEF7/4xbFer68pDw1yo9FQL/nL4YHGb3yeAxRL/0lAVwJ5Xh0nOTxcT3azglCGygKULwHAU8LnFAB8UXuvzGd12eizAPBNwm9vXk3OffKKK67oK6OQWi35Dh2ukNDbopOBlyN5yJJyzPECvV43Kh5+WBN6K57tt7RtOTt5+ERLKWwaVs9N0uX9tSJH3ZDHGHoAZE47NENKPSo+ztbhdJYCROK7xjRDJ21/pG22dk/lKnkNbOYAPkvG6XlDeOAaNVzes2lSxPMsaB+OHj0av/mbvzk++OCDxTjxSK5mpDTyGD9rl19O+fx7BA2p+460JYecZWFJTuj8sLbOUoNs5QNK/fYc4cDBXs5ckOTNe5O8Vk6Kv56+9ZLKApQrrY/2Xu4HVo7NPwkA/zT17HpFUKxJI3kHGvpvt+VENKpkPOuevEwrKiO9TxG7ZOAsZSsh+DKI2prolAdWmDdVNh7cxOuw2p1jZMputU61w9MGqvAxYZoeNnbo0KFYq9VUxZXynLgy8vCMbn9M9ZN/55Ul2o+UcZZ+1+Sdv3fo0KE4NTUVZ2ZmCvCAvKrVamtO98U5nysTVoL2/Px8fPDBB+PevXtV45MLirjhpkn5HOCWPedJm3N0SdIaN66f0AjzG7g1kkCf1HcuR1iuZZBTejF19ATVb1o0UWuPppcpv/i7Hl5Y1C0AL0Ob9hwUAPhaAHgcAH7W8/x6HtRWJuFUIkkhIXDBRCSaIMnDf1KdkmeCJAmiBqw8QCNVn+ddz/qptj1Sar/0u3buifU+VdgeXliKxNNeDwjUiIb78UNBnbQbTOonAmYeHeFy1w0YkxR+jteo8UwyipaHiZEkutRI5bHZbBbHlyPo4zd302ekc4jo/PY4NhJf6Xep+Z/ikfUbRmSOHTu2Rub5XEgZKgssUp1B5z6Om7XkgeXiUmXqgsoYZR1L+853hFmy6NlhRXmSAnXYN77kKpWFgH9hYUFN1NZ4i+XOzs7GHTt2xNHR0Y7x9c5nOq5lzv0qQ2UjKHcCwD7y9wIA/D0A/AMA3K295/0AQACA/wQAv+p9Zz0BCgq9ttvAS1pIF8PjtVqtQ6FZ65MxpiMa/PncMz8karXkJa9UWWhUuReUMjpS/anMeb4bIOWRUKWl7RSR6vAAvRwAaJXPeYnhfkk5eUAYV3i0nVyRpnIcPJQLhL3gzfKGkVfofaMyxzlIvfr9+/fH4eHhYtcKBxecdxIoovOLRg14eyzQwT39VOidfm9t2+ZyhVGJ8fHxNXMJ2zgzM1MANi3XSWtLai5j33huA+cnPfHX4zxoUQPOX21ZnI6PZ4eVBHI00sZe0mm4gwpPYKaOG+7uwbuk8F8aFV9YWIgzMzNxZGQk1uv1pOMqER3DnNubu6GyAOUTAPB/kb/rq/9+AwD8d+097wcAXgEAcTWvZXb18+PWO+sdQbHOa8ghLhzNZjOOj4/HqampNZMqFe2QJrM2MWPUvYscardX9tPnCj5d2029k1LM0jkOXBlqXl2rtXbrKEZceMa+ZvCkE0Rpe1MeJ+9PrjEuux5M+261kxoP60C5nDbkgGNNjjy8lIAFXVrFsnn0CKMj2rH71IhY56NYbYkxDVC0Oc+Ng8Qja9s2LUfqP62TLmft2rUrjo6OmjIjLQtp84/2MWX4KMjTloQk4nIujYnmuNCcDpRZ6RRkCxhbMpFyHLCMRqMRh4eHi3OWqH5DQI13SVGAgoB8aGhIPa4gVz/lLrN3Qz3ZxQMA/5r8/xPae/38rPddPLkK2VsONdypREbLMGkeGyUPiPG0HbcfWtGQVL9T32tKRnpHUoYpZUCfv3DhQpycnIwHDhxIRlAkA0Prp16hR6nmGGOvceNbGfE3DURZ7bKMh+WJpsB1bt+1vnrAjeTt5kaFtLA4GoQyN5t7+yktPUpg1bMkwZdYOJhH77vRaMSZmZk4MzMjbm2OUT6nxhNV0JY6eDtToDHFMz4HqRxwXnkAlQbK+FyTdLHED0sWOI+wHlxe1y6lbDabcWRkJO7Zs2fN5agSWU6l5/deU1mA8tfK91sA4H9q7/Xz0y+A0mvEmCov5RV7gEdOuz1GTiuHTuKcS954X73I3cqlkNrrTfDjdWNkaXJyMgkspPGiRo8etEY9Hm9bLKJjJ71HQQMCSKybK5qU4knJJY4P5mpIkSrKy5ykQ40srxVJi9RIgE1qlwbkqEGn7UCDwC9q85BX+VvzJteAYJul3TQoXzR6gssb0rxAXvNL8zSeYp3S+TyczxLokfhh8YlGAfm4SaDMk1tngTLOY6qTJEBsjR2P3nj4QUEM9oFHzTnv+N98TFMAp9dUFqC8GwAOCd8fAoD3aO/189MvgEIBgccjj9EedC/A0EhTmJ4tbdJvGP1YWFhI9l/ybLUQqYeoUqC3Mlt9t7xHbqi48sj1jnFSasZI6oummHCsPIm3Xk+alq0tNbVaKxEuTCqkSlgy0CnAkPIsqYKX8qW8cuJpDx1fLflZq4+Pl/Y8l39uyLjsW4DeA8Jzf9f6YY0rpWZzJRdMmt80wtpoNIplXMnIttttdQ5jfgsuH01PT8eJiYmiXkmWNECrOQLescTL/fj5PDhuuFxNc5HoAYgc8HL9mwLeqfmjfYd90fjBl9P4zj0cz3q93rEbLQVoubO2XsmxSGUByqUA8EEA+GsA+C+rn78GgEcA4DLtvX5+1iOCIoVBpYHiSoyj9pzQeoo8RtiKkli/YVs9a/GS0UsR99QQKHWjpCXvsix4k97Xxj2VCe9pC++PxVPeDm0cvd6b1Q4JDKbK0ICv5f1rQFNrj5ULJhkCq27NcFjzVTOiKeOU4rtmBCWeW4BI4xktu9lcSbDmuWD8XQTXGhhCIIcghnrt9Ih8zIup1WrqfThevaiNmTWWVuSB9qFWqxXJp1R/l9kgoeknSpp+8OpXDtYxmkmXGmnbeXs0vYRzLHcXZK+oq23GAPB8ALh19fPdqef7+VmPHBTvBOKGlyJwTl6llWqTtPaJhO1IrfFqngmfzFTJlVHAUh+6icSkJr01mdDbkCafZaBTgIGTBQR52RRIeM608RjRVB+07ySZohcjap6jp7+8bZIil+SS8sebl4TGybOd1CIPyNFAlZUYTPvJw/Aoo5jfYxkxa1zb7ZUdgjfccENhYLUxlr6XeIbPLC0txdnZ2SJBkx5qRyMxFy5ciNPT0/HChQtr+p1yllIyy3mp5V5ZYBKjKDQSROuhBlub62VkC8dwdnZWjDyi7FjLOVS+pfxCKYKClMP7Xuh8L23ac1ByP/0GKGUVmGeSe4yFhzRjhAd40e2BvC4pOqR5hlyB8iURy1ikgF3Z8LiHHxp/qFeVe8S/t30pg03bge2z+OHpZ05USzJyUptijHF6ejpeddVVcXp6ujCenmPAUzyTwLYEWC2DnOqfloPjaR8tR3rPmu+SgaGgiSZx8nwuPg4cyGnLarwPOFZHjx6NIyMjhZGSlh21fmpbp/luoJmZmcLIS3MMjTz15qkjxQE37qyjdaccCt4+r+6wopEWaOYyq0XvLLnR7sviIJXyRXKwtPGTtkq32+01wMgiyZHItVVeqgCKg7RJLFFK8aUUHAcLOcCIh/JRmeDyiTRReXTFisQgcU8wtV2Z9tnqf9nfLJ5wj8oCUNQLyQEpvXgGFZAnGuDtZyoaJQFHDlSlNuGFdktLSx1zw7piIYeazaaanyDJuWecOHjI8WppG1JLeZqccl5qxkUbMw3kU2MqGVb6HT4/NTW1JuFV2oIr8Z2enCuNhWScm82VoxNw2YSClEOHDhXO0/z8/JozaVqti2e0TE1NdYAczLGgybYcHPIlGo2n0vdcvrRlIWwTz1WUnL6Ubku1SZqf0jKnNn64XE+3Slu6Ryurn6CEUgVQHKRN4hjzB8/6XVKIXk9P8rCo4dCy0blS0yYLbzdV1N78i5SCT3kZZSdFDrjhYNTzrsfbTCkeLTuejm0qhM/H0gOKuFzzMfdEYCTlaT2XGsNm82JehOYl011RfJy0dueCXGwv9Wp5GV7gw79Ho8BBnbYTRuOZBEBoW6hnjLJ04MCBIgfE45Bge/fv3x/Hx8c7kkw9OQnNZnPNpYZoLOv1egGYhoaGimRaGkWih5RRR2J8fDwODQ0Vy0raxgOPPEjtprK2sLBQgCxtic6Klnt0myc/jYNCCZhZ48dPTfbIrDSvvbqhW+oaoKweqja0+v+tAPBdnvd6/eknQLGMqqX0PAo5Zbw9ZVCFTgUuV+C5sNK+cfA0OzubfcgbN/7edzwedE4ZOXV6AKjGbxpZospOCsVqIKTVasWDBw/GqampODU1teagNDpGlrGSyEoyRfIadazPUpYSANfKwTI4iKIypIXQqTJOeZUW4EPifKV10q3VtH5rlwWth0dLeRJnatcE1xnUG242mx0RGhqxoZEOz9ZdPi7IE+m8Js+cxffx9Nqpqal44sSJYlmI9uPChQtizlO9Xo+jo6MdkZcUGNfaqf1OnTxtt5NGuXonNdckmfHaHzoGKUeCt0eKjGpzrNfUbZLsLwDAYwDwl6t/fxsA/EnqvX581iOCYoWbLYXs9b4ljxbJEnZtzTS3f7ydkqFG4bbux9Haq/XPMhy8bXRidLvlrYxXY40p/41HUHi+gWTQuPLA90ZHR+POnTvj9PS0emMp/f/CwkIcHh7uODyP9xeNgHWjtteIp4AWfU/qozbeCKLooXme9nm8O2neSHNdc1DwfelGYQ4w+JZPiZd0PLT7VFIyR0EOB7K4HECjnvRuF2k8tbmFfae3OXve5X2kyzPcyaI85HMel27wnTL5RPQ7bYzp/NRkSpNHL7i32sh5l5PbotmtnB2HNPenzBzrlroFKLOr9+bUyXdPpd7rx6ffOSiSYqUCKAmKlEktlY0DjWv70nHikiLyCKmnbzmClvJC8W/pHAytHgmEaOF6yRsrO0E8YIMqwRSvU+OggR6rDOzv/Px8x9bHFCCdnZ2NO3fuLK5MkDwn3I0zMzPTochSHpbmbdIIilWGBJS0eYS/lbmNOkZ7DtIoAJdfGn3Q+iItqdG5jEs1c3Nzcd++fXF4eFg9b4jXLS0jSdEpSaa0SKy0dCkZO26MLePOozQe+ZYcC0mmpfZwIO/Z+qrpHio7uWCCklZOWfCs6ZFcPe+xW1K5vA/dOoLdULcA5eOr/86s/nvpVyNAQbIEn4ZMqWHVrgWXkDai1VqtFuv1ukuILDTtEejUxPSiei78uPaNyt+qJ9VuWmYvEbulCHBMMUGvm1BmjmLhz1Iv3To1ln9HPWTt/pK5ubm4c+fOuHv37liv19W7drSyL1y40GEI6dkn3fRZ+k1bMrFOtmy3V7bV4v0x0hzUlhzpb5rc8XwRLfTebreL5QgKULyGqNVqFcshPNFdMkLaXGu3L95DJO24a7UuRlksg6bxSQOR0jsWgPDIjgb2JYNK+ScBIO745AIAK1lbG0vMZ5GAczdgyWpnSr9SuyU5hL3SuznULUDZCwDvBYD/CQD/CgD+DADGUu/149PPg9o8Bpp7n9Q4WMl+FKTQXTf0WHKpDdQASTkIvA6rf6llKktJa5Oc78tP8TFlpOr1ehwaGorj4+OuiZvrbfA+WwmXuZM2R+FweUIZogAlpw6trWispqamOsLk0vIiBdDI10OHDsXJycl44403FnlI9EAuTt2Mh9SWer0ex8bG1gB5Wlez2YwHDhyIx44dKy5Zy2kXz9GxgDM/Z4hHMaRoi7TUx40IRg8woZRu3+Vt4MtC3HA2m527cCRe8IihNwqMybf8gk0NSEhjakXwtHGSHCTpFnLrpGoJ5Gn9pPz05O7w9tFx2LVrVxwZGUkueZclbzn0Oc3hlPRKL9qYol4kyd4EAO8CgP8AADd53unHp59H3VuJfRLilJL4JAUlKTPJoEhCIrXLCjlbytlSCKigeCRIAibWVell+Yxl1Ov1uGvXrlir1VyeVUrZWOT1gqyoCuePlw+8/ciP1B0YUh3Wd7x8KzxPZRp/w2gfGqR2ux0bjUaxDMWpV14hytrU1FTcuXNnx84OrmQXFhZirVaL+/btW7P7IsUjfJeuv3MZxTobjcaa6AhfPpKMG/KPbr3FujAahQCMb63lQIfmNvH2tlqtDs99cnJSHCPabiyfJnqnxoX3Ica1uUnS+GsyScdEWo6Txk+ba9Zz2rhac0ACQrS/KR2IelUC2FKbvfObUpk5J9kziW/d6Ncc6gVAuRIAblz9/yUA8I2e93r96XcExRqQlMcdo53IOje3cvzz5ORklhL1fGcJqQUKqEJpNpvFXS6SR4jKT7vO2+oP97Aon6nnIyXjSeQBlLnIX/OCqLea8uxyKeWJaX2hYNcLbHm7pftKeF3S7hHPnU298LgkeeRzEGVp//798Y477ojXX399Ednh4FtKlB0dHY3XX399ByDWdEGj0YhDQ0Ox0Wh0tFFb3l1YWIh79uyJ733ve+PBgwcLGaeACAE5ArBnnnkmPvjgg/Htb3/7mhNl6b9S1JJuR9XOBJHGCXfK4P07FtF8JulaDzxplkdieBs1GWk2m2tuTC9jtOkYp/KepHmDMq+1NVe/WM/TOiX70w9dR8vNsRn9om6XeP4VAHwCAP7H6t/fAwDTqff68dnIk2QlNM4nkRXiXF5e7giXp+rKUfbedlPi3gEHLDHK5y949uNj+XxZih4UR3kprR2n+ptasirjVaSUiGSUu53AKQ9Kqpt6vJoCx7HSki6np6fjTTfdFI8dO6buPOFRQjRAjUZjTZmSPHl4oz3Hwb5mSLGvJ0+ejENDQ3FmZqZjjs7OzsaRkZEO+cJ3ZmZmitNWOfEzgI4dOxZf8YpXdCxttdsX8z24cZ+dnY3bt2+P119/fceurEajUSwp4f8x0oGn905OTnYsHXtAK+WX58gEHFM8SsC6dwbrq9Vq8aqrroq1Wq0DnODcpjtxNMNvRR4k8CRtkfcCeWtuWQ4U1/FlQFKO/EvReATWONd6GS1Ota8Xei2HerGL5+vYLp5Tqff68VmPXTxlAIHXINKEO+vYYclTzRUa7zYzTTlodVJlY7WFvku9YX5UugR6PH21QAMPX3br2Wvt8QDTVH9SsiO96xlbXLKTki6xjOnp6bhv3744Ojq6ZpkCFSL17KxzOzjApVEayzP3gr+5ubkiEZYfBd5qrSzB7N69O46MjBS/tVoXb3mm/cNk1pmZmQ5jyKNF2C6Mfj744INrlk209nNARfmK+V48YRnvsKG7uGjOi2VoGo1Gx0WcdI5KxhjHdH5+Pr73ve+Nd911V2w0GmJdWB4HVChn4+Pj8ejRo3Hfvn0d27F5G3O288d4Md+JL/mmAJolZ1Lycer6AKnsVH2p3ylJOorKuwaSrPLK2CetjH4DFgugbIE0fTnG+Az+EUL4GgCIjve+oujMmTNw//33w5kzZwBgBbidOXMGAVkHhRBg27ZtxXsDAwMwPDwMg4ODYtlYVggBrrvuOjh37hx88IMfhC984Qvi84ODg3DPPffAPffcU5S5uLgIR44cgcXFRVd/Tp8+DXv37oXTp0+L/cE+hBCK8h9++GEIIRTf8Wewbbfccgs89thjaltijLC4uAiDg4NFGW94wxvgiSeegFtvvbWjTw8//DBs2bIFLr/88o62SH2lfRgYGIBbbrkFBgYGOr7n/VhcXITDhw/D4cOHXbyjZeH/sd+Li4sF/2KMcOrUKThy5AicPn3aHBurPzFGGBoagsHBQVHmqKy1Wi1YWFiAU6dOwTXXXANbtsjTd3FxET74wQ9CjBGGh4fhxhtvhEcffbSj/hACXH311fAzP/Mz8KY3vQmOHz8Op06dgjNnzsCRI0cgxgi33HILXHPNNbBt2zYYHh6GF77whXDLLbfAC1/4QhgeHoaBgYGO9m7duhV2795djM/LXvYyuO+++woZTI1ju92Gubk5aDabAAAdsvfCF74Q3va2t8Hw8DB88IMfLMYTeXvu3Lmi/Ha7DadOnYKBgQG4/PLL4S1veQsMDAwUvHnf+94HH/3oR+Ghhx4q5ITPl8HBwWJOv/CFL4Sf/umfhjNnznTUw5+jfcP2X3fddXD27Nni723btsGdd94JAwMDcPz4cXjZy14GMUY4cuQInD9/Hn7kR36kGNd77rkHLr/88oIPXI6oDJ4/fx4uueQSOHfuHGzduhVe+tKXwoMPPgitVqvjPZQnHNPPfe5z8PDDD8PHP/5x+NM//dPiOfrO4OAgDA0NwZYtW+BVr3oVnDt3rphrx48fh5e85CXwK7/yK/C5z30OBgcHO+YyleEtW7Z0jCnnHaetW7fCddddB1dffXVHeZosWTQ4OAg333wzvP/974ennnqqkBEuO7zNWr0pijHCF77wBWi322v0Cf8/yuDDDz9cjO0111wDhw8fhnvvvRcGBgaKcQCANf3lPOC2DPmM85W2SSsDx//MmTNw6tQpeOihh9y2p6ekIRf8AMC/B4B/DQBPw0qy7O8CwDtS7/Xj088ICl/O0LYmUpLCgJI3LS0JaaFh/F3ymlOZ9pQ0j1A6U0CrU6NURMFKyPXUqX1P+aj9n7+byzdernROBsqHdj25l1883N5sNuPBgwfXJDjSiMjw8HDctWtXkdCo8RU9Mmw3z2mgyYrN5sXbXdEDx7bQCAiXY56jhPJ18ODBeOzYsfiZz3ymSKil0UPtrA7cLow35EpeIO0X9e7okgguW+A9NHzs6vV63LNnjxlBkcZJ8r55OB6jInQLvhYhQj6gLqBbtz1RJZRPfJfu0hoZGYk7duwoIkdaVPHChQtxamoqPv7443Hv3r3FmTp8d5CUwIs8m5+fjyMjI8UNutKyYuqQNGnucD0p6RdJLpaXl0X9SnOG+B1Bln7Qzpyx2o1ROpogS8eV2xupn1IERJINHq3Rojf4Ll7iyJf36Xd8B6kn77AsQZdLPAFW8lAmAeC3V/8fUu95PgDwYwDwFwDw1wCwP/X8ei3xpBRS6h2eYCS9i89Lp7VKQthq2btKUhOm2bx4oZZn65wXPEjGsF/JVRQESkZK4nVK2UtnLFBFh7zCcZJ2Y6R4T+uRzlOgfDt27Fi88sori7A2goeRkZF49913xxMnTnTkYUjgjOaK0EPV6DkW2B9UQFgHNTK4XbVer3ecBYL9REWIhhnrwz685jWvKRQl5rxg/Rww4VLMiRMn4smTJ+OJEyfi+Ph4R96IJJ/0sLRmc2Wr7szMTJyZmSmMA5dHOh88uWTS+NIlmFqtFl/60pfGW2+9tUgix/5ISx5cNvAcHkwOteYY/Y4CG85TbvD48hvqErrcRZcEue5B2ZmYmCjyeShAwt1deHcOLwOXyTDXRQIbEp9pvpWkM6WE8enp6QKgHTt2rJgry8vLcWZmJh49erQ4tZhe5+FxjDzUarUKPtHEf1o+B/dUt0sOLdcZVEbp2USavHIbQM+zoXzD+SLZsX5RaYACAFsA4LT1TNkPADwHAP4HADwfVnJc5gDg+6131uugNikvgnrTHkOUSmrC57m3pxlcKatcAkhSfdzLkI7Y5u9L5XFFh89ph4TxvmrgzjLwEnn6Kk1u6TkJrElGX8rD4LIh5VvweixwiAoUd4sgbzHJs1arqe/iCcUYgdm5c2d8/etf32H0KLCSIigjIyPxjW98Y7z99tvj+Ph4YXQef/zxYruvBAzp9nDMVTh69Gi86667CqCwd+/eeOzYsXjhwoWOiA2WiQZ9amoqDg8Px+uvvz7efvvtHXkRtM8YocBL6Gq1Wmw2V3aB7Nq1q/CQac4X9ZKl+azJhCSrNGIzMTERX/va18aXvvSlhUHEHB/tCHFaHj2XBMFFvV6Pn/3sZ4v7aaRbdPE7BEl79+7t2PWE9czPz8fdu3fHmZmZuLy8HBuNRjxx4kQB5Hbt2hWPHj1aAMyFhYXiTBYaTaE7hTiAn56ejjfeeGM8duyYeOHe8vJynJqaKrZqU51EjTbyAccM7+ChBp7ynupZyvOpqal4++23x1e84hUF/zGyhNdJYKSAni/j2d2Wct6oruZ2QAIYHICm9CXXUZ58F85vyVGitsuydb2mbiMo7weAK1LP5X4A4GUA8Dj5+14AuNd6Zz0AiqWkPPv8U0LMCQ1Lo9EQy9aAAgdBNITO6+WT0AqPWu2XlLrk3eH33MOTjAFth3dCeCIWFkjiUZKUt0rf156XDseS6tGWgyiAmJmZibVaLX75y1+OtVqtWCq5cOGCqjTx2Pv3vOc9cc+ePfGDH/xg3LNnT6zX62sU8dLSUqzX6/HkyZMFgMDTjXfv3h137NgRp6amChAwOjracaMsAgtqUEdGRuKJEycKg4bLKI888kgcGRmJu3fvLjzK6enpOD4+HoeHh+PIyEihXOfmVm6v3b17d3znO98Zx8fHxSgHPjc6Ohoff/zxeNttt8W7776744ZcegJuvV6P27dvjyMjIx3GUEvO1pI5ObCjxuizn/1sfPDBB+OBAwcKmT506FBhsKW7fOhz2FY0otu3b4+33nprEU3jcwn/RiAxMjISb7vttrhjx444MzMT5+bmCmBz9OjReOWVV8apqak4N7dy59OOHTuKyMmDDz4Yb7jhhsJoLywsxNtvvz2+6EUvirt371aXCigvsR0YTeM6C3dC7dy5s5Abqq9QPikYxyRR7vg0Go14++23x5/7uZ+Lx44di/Pz8x1RQiyXJimjET958uSac3yoHkSgNTk56XaCkCSgYAELS+b4+xLQ0XSYRDn2qRvnsQxZAMWTJHs5AHwyhDAdQngUP+UyXjro2wFgnvzdWP2ug0IIbw4hPBlCeFJKZuo1YULRNddc05HAFUKAa6+9Vk3q4glsIYQ1iZUSnTt3Dp544gnYsmWLmGw3MDAAQ0NDFNgVdcUYiwTDs2fPwvHjx4vkv1OnThXvnD59Gh555BF44IEHAACKerCvAOBOkL3zzjvh2muv7Xju8ssvh8svvxwAoCNZ9b777oO77roLzp49CzfffDN84AMfKBK3MDly69atEGOEm2++eU3iLfKA889KYKO/4fvt1YQ4TPQ6c+YMHD58GABgTeIeT7LFMgBATPTD56+++mp417veBc997nPXjNPZs2eLJDf+PpZ/5swZeOyxx+DWW2+Fz3/+83DXXXfBb/3Wb8E73/lO+NjHPgZvf/vb4aMf/WiR6PbUU0/B+973Pvjwhz8M7XYbtm7dCldddRX82Z/9GfzRH/0RfOu3fis85znPgYGBgSIJdN++fXD+/Hk4ffo03H333fDOd76z+PeWW26BH/7hH4Z3vOMd8J73vAeuvvpq+MAHPgA33HADTExMwFve8ha49tpr4Z577oE77rgDDh8+DPfccw+cPn0aLr/8cviJn/gJ+Pmf/3n41Kc+BYuLi3D06FH4/Oc/D7/8y78M58+fhze84Q1w2WWXwdNPPw333XcfvPrVr4YDBw7Am970JhgdHQWAlUTYV7/61QAA8Nhjj8GP/uiPwjXXXFPIOPL0+PHj8IY3vAHe9KY3wR/+4R/CZZddViSWbtmyBa677jo4f/48HD9+vEhQ/bqv+zr4iZ/4iWJOHjlyBJ5++umOuUKTOQcGBuCpp56CZrNZyOpjjz1WzB9MNMUE77/927+FyclJePnLXw4xriT/3nrrrXDy5Ek4f/48vO997ysSe2lyKM6pa665Bk6fPg2PPvoovPa1r4XrrrsO9uzZA+973/vgVa96FYQQ4JFHHoHFxUW4+eabIcYIjzzyCJw/fx4eeeQRCCHA8PAwXHnllXDu3DnYu3cvPP300wAA8PKXvxyOHDkCV199NTz66KOwc+dO+I//8T/CnXfeCUePHoW/+qu/gttvvx3+5E/+BBYXF+HcuXPwN3/zN3DFFVfAJZdc0jEfW60WtNvtIrEb58lv/dZvQQgBfu3Xfg22bt3aocva7Tb8zu/8Drz3ve+FsbExeO5znwtzc3PwG7/xGx2J5sePH4ef/MmfhMsuuwy+7/u+D972trfB/v37AQDgyJEjxTidP38eWq0WXHLJJXDvvffCE088AQ8//DAAQKErFxcX4b/9t/8GW7Zs6Zhrn//852FqagpOnz5dzFMc38HBQXjVq14F9957L/z5n/857Nixo5A7OldxU8TWrVuLhFuLqB6jY99ut+HDH/4wPPTQQ3D69OkOWUSSdD3qOUysPXv2bMemjbaQmIv6C3Ua6kNeH9ehuZszek4aciEG8ZXSJ/Weo9z/BwDeR/7+FwDwgPXOem4z9njiqe+tpYhUeVKEgYfn+PotJjrRywjRK7eOsZciBl7SDg1rt9uFZ4eeqnREv7XW6eGfJ7kRIwHo4U1NTXXkN3B+8PC7djow/1vyjujZELhkQq+UR6+Pjg8eiPWZz3wmTk1NxU984hPxtttuiyMjI0V7xsfHC88XPeyFhYV44sSJeP3118dHHnmk49hvjNQtLS0VOQ8nT56MjzzySNyxY0es1+sd8oC5Ccg3ev/O7Oxs3Lt3b7Es0G6348zMTLz22mvj3XffXXj6jUYjPv7443H37t2Fl4seNuaOUBnAvs3MzHRcHaF5nBgFwbrwSH+ad4P8nJ6ejs8888yaPCLpbpl2++L9PnhMuZaXgt9jmRi1wLppdAH5J8kQXX5rNBprbqluNlcSPDHiRHmFZeNS24kTJ8S7eNrtdhGZwCgCnnRKk20xjwcjbDR5V8qD40svfF5hHgme7zIxMRFvu+22uH379njixInYbHZevMh129LSUpycnIwHDx4sxrxWq8W3v/3tcXJyMj7zzDMdicK4ZM4PtJubm4sTExNxeHi46IMUGafjQfvJ9RvmVVkJ6xrPKF9waZjKAOcHPcmYyx63BzzfSFrCRtnX7qjaLBGUni7b5Hxgky3xcAOqret5jCZSN4MrCYl0e7ClND1riVZ/PGFAK8lMW1ahfbLCkx7+0SQ67X26Zj06Ohp37drVcaKvBRJRoWEuhJZbRHdy0J0MdD26VqvF5z3veXF4eLgDmPGk2xgvGiRcXnnd614Xd+/eXZSPCvrBBx+M+/bti7t3745TU1PxwoULsVardZz9gX3hN9JiOJ+CD1TiIyMjxY6Oer0ed+7cGY8ePVoYs1qt1pFQiaDnxIkTHTJK7+7BZzAHgRpFNOQInHjegbSrhI7D3NzFSxExFwZBL44/XYbDcqXrBVqtlnqhJ31GAth8jkqHjXFDRx0LlBc+fnxZCg3axMREMQbLy8tFoqqWj7CwsBCHh4eL5TPMYaGgFBN9JyYm4tDQUEcek7Q7RjOYOFb0egQEuCMjI0WuEyZvajeK0/NQcP7xpHWajyMlpVo85HlCmtPGnTF6jYGlwzQHkDtXFBhx8EPnEXdYJZ5YACOle7l8bmqAAgD/AAB/zz7zsLLd+Pmp941yvwZWLiD8LriYJPtC653NAFCowHnW/nIoFZ3RPBTt3RSAQQHWtjxTJcz7ivzxHk+P5aUAkwe9035Y27Wl5xuNRjx27Fh8+9vfXhgEDaRRhY/r6jz3ABUPAiU03Ojp0kn+zDPPxKNHj8aTJ0/GCxcuFIAGFTjuLMAIyvj4eJyamurI4cD6UYkdOHAg/tt/+2/jt3/7txdJmvyyOeQBNab4oQmkCGhrtVocGRkpol+4M2fnzp1FREE6AA2NHL+IjvYJlSw+T/lKDRfdSk3lDZUwNyoIEGk0AHNm8F9JVqWx98ggz6GguSlULjA3SDpOH//l3qzXKNC8ImwrGnoNoFD9RfUJgnE8CA/Ltq4b4DzkBpOOKT++ngIFBGS33357vPvuu9dsdW40GnFkZCTW6/UCkNC8Ni1CnHKwODDk/eF6ivZdixx3SxpwpvXhMzwfSnOetDo8OriXfdOoW4DydgD4aQD4RgD4JgB4MwC8DQBuB4CPpN5PlP3jAPCXsLKb562p59d7iYeGkKnw46BZp8FaZWvfa8LAFYAkWB5B4l4f9T7pFkDaPurd03eol+cFaqhAvTf2pvhRhv/47uTkZEd4VQJyNGTKAUmr1Xk3EQ/x09A7LQc9venp6SIBFSMRuNyAiXronc3MzMQTJ04US0MUXExOTsbv+Z7viQAQ3/SmN8VXvOIVcWRkRNxRRPuF7aBtQvlaWloqgBFGEObn54uERGlHGcrE+Ph4PHbsmBge52e8UMCK4GhqaqrYTk133WCb6VkfEoCgfcQtrxj9Su2E43ziu1eoU8KNAX2HzhW8wweP4Ndks4yzw+eH5VDQ+iS9Jnn6dP7zfkr8QsBDz9LBCCQma0vUbl+8yfy2226L119/fRwdHV0TZZQiVtrcpbvaJJ2IvJKWOWi/qc6VQAnyMnWWCu9vaqy9z1C5pKBPmxsIGq0zvjwAvZfULUD5mPDdE6v/zqXe7+VnPXbxUEIjxM8G8EQ0eDke4JHK5O6VQHPlJIWhebmSIuC5A9R4a+3QIlNSP6wIEPXWc/jvUWBoOGlkgYIbVApotLEMqjBQOe/Zs6fwCOmaP14gh2v+NGeAek/NZrPYWYM7Z7DP2M53v/vd8QUveEH8+Mc/XpQvAVrKP2z7M888s8YwUW8a+1+r1Yp7pDR5xmUpeqEkN9yUr5Iypctx0tzgiljzGiUwjPNZ2hJvRTVwaRABuXavFJUd7D/yRLtg0QIRqWUB/pzH8+U6TctN87SR95/PbRwDjEBadaBcU2AvbYVN3fhNgYd2x1C7fTFqLOXp0H5R+ZL0CM5zXArjS0US7yiQ1ICxlANj9ZcuDfFDELEN1Bmxoth0HK0cv15RtwDlzwDgNlg5E2XL6v8RoMym3u/lZ73OQaGTQoui0Gc15cmRq/Y+D9XlAhTLq5E8SymkrClETx003G+FGSk/rbqkejHkTMP83r36FsjS+M09Nq6UJCVIJzYq3aGhoWJZA5UwGjeUMR6dom1rNBrxjW98Y5FjMjExUZy0SpU2D/VLXj5VWHgx3fT0tDpOtA5c+uGGw3qP14lAGMEP8koyslqkAsukQEOTXdoe3HaKSZ8Wb3BMUL5Qvmu1Wpyfny+AG39Pkilrbmnv0ggX/42fm6TlpXkiKJjELt3GzN/hZVHDaOUrUPnW9BsHdZa+04AXbytPMuVt1ww17RfX59rZIXQpTMs14m20knCp7vHoKg5qJD5Sp8uKILbbnZsbrBy/XlG3AOX5APAYAJwHgHOr/78KAP4RALwi9X4vP+t5DorkeVjCRkP42mmMWvhVMygcVGjGWGob/w7/RkNJy0tN+hjtPf40rG2BLDqRpQOsKPGcAkzaw+Oj6W4PPEVUC23ycbKWyqS+acCMe3OSB0nPr8BwNz3xkeZT0LroeGGCpxZ9kMab1s29bRpBuXDhQkefJMUlyWdKYVKAT4EOJp/SW1op6KJjr4EhqVyaJEi9PRwTzH9J7crR+o/jRI96l97LIf4u9gP7JkXvsI+YgyFFibS5jFFDPE+HRqu8487bnopoUECkLS1ofJD6wHN/UnzX9BZf6tAMvbQkztuY6wBpv1k6x6Ojc+uT+IPgDfPdNn0EZTN91juCwr+nCp4jUwlxc+Gjmeoa2NEUljRJeLskYaeTRVpXjTF9O26MnTknkiJJKepWa2XZYPfu3XH37t1rdntwwl0Zd9xxR8dhS8jf/fv3x2PHjhURDDqpNMBGPWILbPF+aEqRy4QVhaLjT5UBPYGWR2A0T1DyACWDSg0/lo0Gju7+4GOpja0EoCwgz5+RlhKRL7Tf9E4ej2zh77jNtl6vF8/jziE8kXRmZsaUO20u0PmjAWsL5GgkAYLU/JJ0kbSDhtczOTkZr7rqquIQMgmoS+NnAXrqeFl9kKICFk9SUSdNH/LEYQmgSLy35N1yUnKAaVkwa/GjG4Aco+xUSXaun9RtBOV7AWAaVo+8B4DrAODfpN7rx2e9c1A4SZMjR0CokfC8Yykv3iaq8FPInHs9XnTOlYKkkK2189nZ2XjixIniaG1tlxS2EXeOSNetz83NxQMHDhSJpLhFknrm/B16+iavm48tVcoY5uRnZiBQGBkZWRPelcaO850aPfRo6fKBNr4pjxSBD243pgAFwbEn1GuBkVwgT9vFjZS0fROXkyzjwccZ+Ue3BnNgLSlk2kYca1xCoeOX8pAtkMcJ300tiUq71Dg/MBpgzU3k6+TkZMeJxFq7OBDSjDOXYU0feZacpIig5kxpEZS5uTkR3KaMrSXPKX3qBQ0ePSuR9V7ZMpE4IE/N+35QtwDlowDwUgCok+/6cj9P6tMvgOIFGbnhRV62VU9OKE0q01qz50qZ79rx9j9ldNFgSwmBKOwLCwsdd5RYYAl3qeDx4RK/8OAxPHzNuq8G1+/x8jvKa42PdL2eXr6HPKAJlNTwUmOMZWmHglFD4zkqmx/mJHn7XOl7FXVq3D2/aYrNo7g9MkaXU6msSfOTA+sUqMAycAlFM7oaKEgtNSLhWGuXyXGZxRwAXgfOOUn+Uo6Lh6Sx5JE+b5+18qVlcRwH7kxYstVsXrwsEqOuHiCY238qg1JUKFf+U+RxBjTQnNM/1Gfo1JRtby51C1A+sfpvnXw3m3qvH59+ARQvUrTChd2WLXlunjK5srTW4ekav7ZrJ7df9EAh7j1riov+nydhUSNDd33wclDhzM3NdRy+hrtjqAePz/L1ewn08NwHWo8UWra8TBqNobkmuV4cf4Zm7PfLs/KSVE+uYksBF36gmLakpvXZAv8pz1mrh4MCfN67sw8PyKPRHowAIWiR5rMVkteiHJy8/NCiG7QNUlSY7zRKRS6sCErqJGck6hzROZobtbb4wb+j+SrIC21pxOuopurmfbaWslN6hDssyEOaD7Ye1C1A+X0A+G4AmFn9+3UA8Pup9/rx2egICoaLrSvUc8tGIcfLzTTjqZXZbK5sYxwfH4/T09Nr3uegQVK60uTxhkS1bHkrmiL1H5UZBQJohLFPaOhpHs3y8nJHhAP7pS3XWGPCw8P02dQaf2qcuvFG+LvIJwvwdOvZlm1bL9/lRl+Kjlnl8ff57ilP3ZLnLc0pfE4DU7wuyXDioW64dV0a2zJOEudNvV4vtq1zPlCjx5cFqc7B/vFt4a1Wq8PpoNGGHC8/Vw9RnWZtfS7DL89zWI+m7yS+asvbKcAt9Z3KtZafo7WHltdtRKYM9WIXTw0AvgQACwDwxwDwvNR7/fhsdA4KDj4VRM2D4e9pg0yPME49K/2GoAlzICiSx+d5qJoLsPZMDhLnirzdbq8BDikhp+ifeyfU0EhnKvCokub9WvzkCXabhTxLPxJJ41omotKtktLe9xoPNKr0dmZPnXznDe7+Qnmy+IG/SxFJ6TmUM9xhhVs18WRWXpYkaxjZpFFA3teyY0Hn9czMTAFQ+Lyh80UCUVyHUEcB+4/n+lCnw7P91tNH1AvPPPOMeQu8VpZm1HnUSNvIoFHKDtA6pFwziS8aH1JAJgcApoBIN3rDSz3ZxQMAlwLAN3qf78dnowFKjPoasBUWswRIE1ZPObQsbYcFj1BI4VTJ06dbhy3h5EpMCxlKZzqkJh7/2/I8NOVgTbCUgfR62f0GM16Py2pfGaWFVFZJSfkcnn5JxIF8qv3YZlzK5Lu3ykZQ+HyjEUQK6vfv3x+Hh4eL8yRarc58Epwb/NA4K3IjtdHrHFHAT4GSxDOtr1w/cP7RPkk6igIxKVdIawcljM48+OCD8aqrropTU1Nqkqf0t+SkcSAv5fR4yTPPPPPZKqcMIEmRZltS8tULKgVQAOBnrY/2Xj8/GwVQ+EBxQfLcf6Eh3hzhyjHsNJJCQ6w5xsZSRkh8skkeGfeqcg1eqh1e4JZqOyevl60p414BGK3MMmNptUUrLzeyhHVJ2355ud7E8FQb2m05GdbylD1jo4Fk9LAxD4guTWI0gco87680Ry2jLrWXAwLtGa+u0cYDy0gtlXrlRFo6onXw83skcPPlL385Tk5Oxvn5eTEajG1NAUxJLnJzeiRepYBl2bmY0xarfroctrCw0JFYnNOXXlBZgPILq58PAMBfAcAvrX7+EgDep73Xz8963sVDiSuCMgi2H4aLtk/LNKd5G9ST8hgFq3ytX9rkxvtlKFDy5nWkJkpKMWvPpL5LGQnpb80z6xWVAbcIovmuEek5qTzMc0rlE/E24jKHtiyTyx/r+VbLfxqpt25JFmg+Cy4h8SsRYsxLRLfair+lcmEoYJUiJKnlTosnWiSMP++RTZRFvAgTwQytw9K1tAwp+RV5glvwkRd4mGPOKdYWb7zOIqeywNhLnvppmgJuMtixY0dx/5EFivtB3eagnKBLO6uXBv5B6r1+fPoJUFJGmE5ua7ux5rl7FSKfRO22fm8Er5Nux9QUUxmjqfVJ8y55CB2Nh3VrqKXYykwU/g43YEh4uia9wE7zwlNh91wjmdsPDQCmqNVqFYe21Wq17KOrMc9JO3FUajP1hCXvO1WGRB5Dro1VGT5SeaaAn4MWSS5wKUK7C8bbb16v5vnTcjFyRc8P4k5WzjzT2sDbIuWv8OgkloWXdaIc0jqoDpS20qM8Y36PBKgxQoNjg8cB5ABtypMcfW7Zh344LZS08qms4s7IRqMR6/V6nJ+fj/V6vTi1u19t06hbgPI0AHw9+fvrAeDp1Hv9+GxUBIWTZFhTv3mQLU4iTK5DhTA2NhZ37dplbiuN8aJSpFEKS1Hn8sXymGKUFXrKm+KTPzXByho49Bx42bVaLV555ZWxVqup/cUky9RWxVzvyLMjiPKDylYKFFODQUGqdUdJqr05ipYbNU9ORS9Iy4mi9Xu9YQrMrLGS3rcilZ65Qcum42hF6LCsRqMRh4eH4/j4eMdvHkdFAm8S2Nf0nqQLJF5JhxZKdUhzFtuoHVRI8/qwXLxqAq/H4PVq4yv1wwK47Xa7uFYBd531MiqR0oNekIn6kJ+HtR45J5y6BShvBYA5APjF1SWfWQC4N/VePz6bIUk2RhshW79ZRL0CvBQOvQh+260miNIZIpLnlUOWMuV/W+cfpECK9JwFjmjbJO+ckzb5Go1GHBoaio1GY807GKbft29fARitvngIFQO960MzIvw7muiYAsWtlr3NO4d3Wj+8oNN6vhdEedRoNMTL/KTIBzWGBw8eXBPh00Btr9pqAQVKdHytCB3tqyTrqfNJsL/8GgSpDylA1gtDrC3JlAUVCFSknDlt1yKNxlgADanVasXx8fFCp3jOP8qhlB60gJM0ZnwZstXynaPSS+p6Fw8AbAeAt6x+XuR5px+fzQJQUgJaJkmKGyLu9fFJaXmkkqedapcXQNDvPGFPfFZrr2UoU56mVrZk6LWyLICE7/Atn54x1ggVAC4rcf5JoIIqDe0QKFTm9OZVabmQ91sblzIGxpt3YZXt8QY5Ub7x3ATPORoLCwvFvU40+piSjzLEZcdTHj7juZjP4ivmgeFhkNr8lXJqUiQtA6b6k9I1GtBIgUZrzHiZVJfxcjHply99SLpacihQfroBuVzX0pvLeTQU+5YDLqW/ew3KU1Q2SfYy7becZ3r52SwAxatgNfJ6r9LE0u5SSbUhpfhTYICWgUbNEwHQ+uoBXF5jwL03arCkCJIXYOaANou4QuNREMoLyWv0KA0KSrVluJxwdRlDiiHjycnJNZEIT36C1V5LsXrBvdR2lBU86JDvMuPvIli05h8lqd3e84GkulN6Q3MeEEBMTU113BCu5ZZInj9vD513zWY6kZrqD8lL5zIngQnaLk9UmM8dSxa4HsElc7wag1/YSeebFXEoA7o5T2g9qNvoKd5YjwacKC+6cSD6QWUByvTqrp1dAHAp+f75AHAnADwOAK/T3u/HZ6NPku1VWdzQe5AqXVv3CJnVJkkBeww4V5DaWQj0Gc3r85QltV0iyZhigqZ0BoemxPG31Bp8LnHlzRUWNwYS/1Nt0PpkeY8a/6TyPLLKIyhUzqlnZ4Xgafvpc7yN+DcdZ8obamwsQLq0tBRrtVpsNBoizyTZokYiNQeluufmVk4sHhoaUsuQQKlHb2hAFfMy8DZnmlfDy0O+85N7eV94zps3d2V2dlY8CC3l3dO+YXQjdY4OAkrPkgXvH42gcJ5SebX0Me+DFsHRwAufF1I+GdetGhCh/MvRbf0GLKWXeADgxwHg/QDwaQD4ewD4HAD86Wpeyjbr3X58+nkXT45XlCrLCzq8RocLb1kUzhVdrjH01Mu3JGqePyo0LdEtB8RJ7eIASPOeLSCmKeYcfsSoh7+pIqEJ0ClPyMuD1DMWUOO88AJJCehiX+jyk2e8LJlHHtVqtbhz5844MjLSkUMigXCpf9TISnzSjIZ0y7BlTLAszJOxIigI9PC2bisaxcdAkxs0jPQ0XW38qTNkAYbUkQUauNO2Zufow1brYs6eBVBydKU0rtQ20Pam8nk0HnCAQn+3dFZOPyQgopVh2ascHdwN9eQk2V5+AOBdq7uDngKA3wWAb/G8188IiuQVlUGO3aBNzWPQlke8dXCl1g3YSZFmlKzJK3k31NuS2i31MZdH2jPehD+r/R4eU+9OutX50KFDcWpqqjiN1Co7pURylZNWlwY4PUC318qw1VpJbj127Fg8ceKE6c1rbZKMrIcvEgDCpQt6ei0HunhKqeUM0aUyqY4y+W/IEzofuwXeKdLAHV2usByB1HzXxrib9mlRIc53CdhqdVjgXJrL0oWTHpm0+pV6VtvO7UlF6JY2I0B5NQB8zer/3wkA7/S81+9txo1GI9ZqtTVnYpTNaJY8lBy0rSklayJrXo2E1HOMmfc57uVYRiulgHiY0mp3LyewZHy8bUSy8iyQtGUIVGq47XzHjh0dR7xbXpcW4bDGIpV8SftqHUyWKgND5tZJoznAkobX6eFkFPh5+NBNG3Cs+OFtuGzEIwQ4rghUeIQE+TQ3d/ECUSof1GCmwBf/jsuYdGKrdMaJlycpPll18Pb0cqw0ksrX5iSXb4+803rowWiptlpLoL0ECbTMVCSxn7TpAEpHAwB+EgDe73m230myfJAsA+QhCnA84EATiFR0gJapCZoWQZHakOqzBJw0RYTeA73d1RvGTP3t4Z1EOcAp5dVp9XoAigaEqDHioFlrKypUyfvCdzTDZnmDfKzn5uY6ckpwHD2RD6qoLS85NQ9oW6RzXVCGU9EBLqdlvXF+7gZu1dXuc0GgNjU1FW+66aZiV40EpqQImyQ3mhNEy+DLb9RoUp56ohucp9rSkscxarcvngFFeZaa07n6mZeXAhm0X5J8S+9r8mwtZ6faWZZS5VAdJeVirRdtdoDyGAD8lPH7mwHgSQB48oorrugPh2J6XbnMoEkK0Frv74WXInmpOaAIhVbbLkiVPwUZmiJCRYgXBloGLeUxefnjUWz8dw0sWGCwmzZYz1gASSLMWcDohmeHDH9fU9Ro4PhSGwJP66RYqb8cCEht0sAdBW5omKhBzT3FlzoQnkvuNJISH9EgWcthGHHRLlOkc41un6Y8xPHBwwRxHKgsSzLBjSaPwKUOUuP94du8vUmg+D4/A8oC9pyP3gg3lzULMEnOAnfy+C4aq0yLh7nfa5Srq6jcSs7DelG3B7XtEI66v97xXg0ATguf15Jn3rqagxJS5cU+R1A0A9WP8nOfyW0PL4cDGJ7rYCVxSWVL4XNNEVFjlkqIS31nKSQKBst4Vd5tyN2CSG/Sq1Qfrxv/xlty8WwVDWyUaTs1klyeMOciBxR42qSFuKW1fL41NmcOI5hvNBpirlQZMOoxyNI4avla+CxGxjjowfHBqwwocOFOhzSnkW94Vw2+32x2JnZb/FxeXo71ej3OzMzEmZkZ13komlMlRQD7ZcBp3+mYaXLEAbJ2uJ/WJgmgx+hP1k+Vb+n9FD+0tq0HdQtQ6hRAAMAWAJhJveco940A8GcAcIn3nfU66t7rTZctP/cZr6LEMqzkVGkZiyt6yQhawELrQy+AHh8LDXxQ8GJ5VR4vQ+tzN+ACgZ33AjmpHC0Xiedf9DrjXuMZj5rk1m0ZHi3SgjeHSwaQg9QUyMSlGWurb47sx5gG+NYcp8tmPOKqzU+NX95+0Igp3wpOeUPnl7SMg1FSzKtJyTiVFT7HeV/oElrZcbHawJfgtfwlPg9zt+u2WvLOI02/SGWmnKcckNEL/dwL6hagzArfPZV6L1HmjwHApwBga85763VQmwZW+ETpZ730b2+SLTXgmpLwJNFK5XlROTWauOxQxhjnAiQviMj1Mug7ltFL1UV56Q1Jc4XIAYHUdq+S6gfYTsmmpGxTyax86SEFKni51pZmCnY84NOTV5RaItUMDB037CMeHtfrg7VoG2iCL5UbvlS8tLQUJycni/N6+BzCfCnpUlM6N6Wl7pTTMDs723H5If9dA8wpkiIoqe3D2vzygPN2W15uk8rQxtRajkUd49VRHnnGcvsJZLoFKL8DAPcAwNeuft4CAL+Xei9R5l8DwPzqvT6zAPAez3sbcZIsHRycKHRHhXfwcgwhNWipPA0Opg4ePNihSLzGQvpOUrapiYjl0GWHHEOW64WniNflTWyjv3nyh1J153g3+B6Gu1OXFHKiRkerX1tG6ZcisgCwtazJo0YWHyWQqtXreY4T5ZkF0hD4cMXvlSWsp1aruQCtx7Bp/dae52VOT0/HG264oeO0XWlrvLVU4c314fNmYWEh1mq1wtmR5hXmQ/FlF81x4c6XJG9SfzSj3q1jwN9P8VLT/xYwp3UtLCy48316rZM5dQtQBgDgEQA4CwCLAPABABhIvdePz3oCFGnSSEm03sGzvEWpTul5ScHRCUWTJa0cEW+buzFiqcRLLVkztQ01lzRvy6N0+PPdGPBUOdL4eE7KlIgCS56sbJ3mynkjjUdKEed4ndLz/NkcnnNPenl5WZyzElmGg3rXeC29ltgao+8OGdpWzhvNqGrt9hg2yp/UvJfKxERcKgs8spHiobZbis8NqT9SdISCDPx3cnIy3njjjcUSNgVHkh5APSnVYzltkk7kYJr+lpJfiwcSL/F7Ta+kgMzY2FjctWvXGgcyNR/7QZt6F0/OZz0BSsqwpSYdJ8tb1J63Joc0oSwQpAmyx+OSnstRoqmykPghSTlgwGNgPHy1ytUUvKetlF9SHo00Phpvpd+l0DT3lFOGn383N7dyJDsua+KOE88tyVrfLMI5krpNN0Y7EkZzBKS25p5hQRMjR0dHiyhqDrDgc5O2NTeqQJ/h0RprHngNDZ8PmgFuNBrx9a9/fdy3b59oCPnfWtvoUgsff6s/FJykdh+Vza3j70vRJ2sJ1rNEngvKctrNgQzWg8txqaV+y6b0irqNoHzv6r08p1f/vg4A/k3qvX581juCIil0GrnAXA9rm2A3k4J/nwoxe8EGJa/x4AZUOy9B46WW9U7bRpVL7vpoWe8lR3FrytbiobZrih92lgPIsAzKeyn5Odfz4W2gu1xqtVpxZgeG1D0envadRDjm9XrdbHe7LW/x5PVpzoN17otW1sLCQpyYmIgzMzOFYucyKsmBdOgaL19qo6fsVuticmpOmD41HtYyBn2Pjhc/5wjbKTlVfJ7wiF+9Xl9zgJyktzzLGd2SNNf4bzRix20ET6aVwAfniwS0+fspfavNQUlP0mck0J2be5dL3QKUjwLASwGgTr47nXqvH5/1ACgpw0MFjF9fnmv8td+177vxjjRPoEwEJFc54PM8/IokKUQvQLGUhGe7sTVGliL3Knxt1xT1nK0wvwU2tQgKts9rvLBMa4cUB5cp2c4BXEjIEynnRpI/vuTgoXb74m3COe96ZFTqM10G0eRFmr+esvE9vNvH6o+2lVczSh7HCcus1+tF1IMf4Z9yqugzOO7UiGpyRvvDjW4Z2aPvSVESbfcU/Y6DGWm5iIMXOvelKA9GyBC0e/VttzqNPu9dJi1L3QKUT6z+Wyffzabe68dnPQBKyvBQQUsNXMrIeNcZUxMOjZEVFuWTpxtUbE1aqQ/4f+2MDmtdN1dpYj9x94N15wkfA60sPmFz+q4tJ9C6pTC/x1Oy+ECVmwVQLG9NK1v7jlJu+y2Dw8vzeIPYRj7H+DzwtI8raU0GpDGo1+txdHQ0NhoN1fFpNle29NLtpzlGdnZ2Nu7YsSOOjIwU70j9xuP1+aFuuTczY9koXwhMpJNStXNWKPE5IukOyfnjpxlb85aOJZ/zdB7mRIW9YAbBP8/v4of0SXpwYWEhDg0Nxd27d7sPUcuRHYvX2G7Pkms31C1A+X0A+G48+wQAXgcAv596rx+f9YqgeELj3HPPRet8ElmT1OOtSmuYlmFFgGXdqprbB+9vUvstAMPLS3k1uJw0NzfXYcRSAIT/TeuhSgyX9rSlqpThlPpvebEaf1Iy4lFUuXKcKtMD4CRK5R95vpPGVztaP6d9vBxNtvkxBK2WfEs6B7C1Wi3u2bMnjoyMmCCdE/7eaDTinj174tGjR4sts1K/EVTQ4/NxCS9niZMCagoqrS3d1g4eOl+98mLp6VSCPh9LDnRyohT0FnLrWSkCyWVDi9Lt2bMnvvGNb4z1et10HjzATuuHpcMtJ68X1C1Aef7qqbBfAoAFAPhjAHhe6r1+fNYrB8WjtHO8OKkM/j1fCpAMshcRewBWu92OU1NT8UUvelEcGhoqhZCxLimXIueobCTkgbRkJhlj7VA2aaKi0rJCwZoRpMqVLu3xDHhsFz04rRdElaElI9K4e41cSj5pW6yThKX54Bn71PkOOcqWJqLmRjk1GbAibfhMrVbrOIaAgwJpfqHM12q1NWOXAvlUT1HZsPpN267l4qTAoMch4u9pEWfN0OfqPMvx4M/SJRWuv7wkAStrLkkRFH7GjZb4be3mo6CG9tsCF3ws+biUdTLKUk928QDApfTI+434rPdBbR5PODWRvLkUfBcGn0TeCeSZnCiQIyMj8UUvelE8ceKEqXytPmveJSocnDjWEgLnQSrpOJVnIhlrzZv18PPQoUMdiXuScqHtn5+fj2NjY6UO9LMMJM+8TylmSTF6SZMjrUwL1Etl5cgZXa9PgS1qNLh8SHXytqVAgcUvKbKW8kKtJcAccEWXUlK6K+VEpJbY6LM5+kmag5oxzBkHrW0p0O0BVingUaY8ygtPAqwF3rUcH5wL4+Pja/LQeD2Wc7weVAqgAMDPWh/tvX5+1hugpBCk5zmeAJYyzlgWRcI5F5lZih/LwltDZ2Zm1tyUmwJU3EBJYAoPTKLbUtHAe2/zlDwbr6HDftLr7CXlm2skaWKw1b5arRZ37txZnA+RQ5qh9ygNSQliaFnLAUjJkSc5UAKEqbI8/eFzRzO63FAjeOQRNo/8WP0uE+XJcXa4DshJcubgXgNEFmi1QKZmjHNzebSlHunZ1NyUnk3pP2+UhutgKelVW5b1zhnvM1x2uM7V+tBu6xdF0n5oEZRc3VWWygKUX1j9fAAA/goAfmn185cA8D7tvX5+1nuJJzXpPJMUBxu3KWpHYFMUq0VT6ATMzXOIsXPbKE0Ko2VoAEUy1LwfdCLjZ2FhIY6NjcXx8fFkwipXgPwCNK+nhs/i1lgawqb1SH21DA1PMNaWjJaWlkrduYNl4MmZ2vkJlkKWvCgrByAl6/R3jTeW4ddAiUcJ8vHRjALdNSGdjUENCu5ikfImaJukPklLIl5lnjJI7XZ7zTKNdSItLwt3C9XrdXP3WquVvmuGf08TmGn0UgLpKX7QslKAIpe4LKQAgEbLyxcP5NOcG81xjLH8WUB8ztDIIV9S8yY2W6Da0671ACvd5qCcEG4z/oPUe/34bMRdPJ7nPGt1zWbTvENEi6BI5ezfvz82Go1kngNX6B4PQuuT5l1pxhIVISoj7ep5JKltFP3ngAmJpxJJZVq8pwCEhtM9gMvTXqS5uTkxx4W3EQ1yTqKvdhuwZiw8cim9h7yl456r7KTnOcjBJR3c7rpv3744NTW1ZsstdSYwirh///4OQMOjaxwMSfKUAl1Wn+m7rdbaRMocQEgTdMsuG2m/z82tHNg3NDS05nRibZlCW47jbU85RN65hWVLY5lL2N+xsbE1oNuz9K7JgQXoaI6cBLK485fKm5FAlfWcBjA9wKpb6hagPA0AX0/+/noAeDr1Xj8+G3EXj0U5QMYjVJ5nJcWvtYUj7RwDwcPrNMmNGmbLaGnerNZvy2DmggmLLGDpAZ1l65XeS4ECq/1SNCs1xtRQc2OMMiUpRqpEPUsc3qXNbkAL7QvWNzw8LDoCGlCj0S7JU81ZVsv1nLU25ThGUqhfq7PZbMaRkZE1u4VoW/GkXLostrS0FGu1WpyYmFhzv5O23Gstx1EeawDF4psHKOc6mXz+aVduUJnLjSpwfczLs3QlttN7PxeWayXsWw4ATfz1Rq7LUrcA5a0AMAcAv7i65DMLAPem3uvHZ7MBFK+hSnlZ0rPashH34um2Ncn45Sg+Sqg46FKD59Ap3lbPWRxS/z1eelnj1mg0Cm9TK4MCQc1Dys1yT0UEcsvI7T9vOzUmmLPDvU9vZI//5m1bznjz3/nSJ13C8cr7wsJCHBkZKcL5qaRai8rKaGrOW+/lHOWPUVx63gpvP42gePSWBtC08eHgRdNn1hxLAfgc8gJpWrd1S3tKH+bkrVjtRWdCA0rUieG8xrrogX30Pb5EWNYh81LXu3gAYPvqLcZvAYAXed7px2ejAUrZ9VNrEpfx4GMsn/DlJR4BQeXFD51K8UDzkCTeaP0oY4glQj7Q7aCWt4nJxBrfejFxc5Vt2bGU+NdqdS7D8TynlNHx1JHbNkmxSs9yT4/nbXnnJZUFDyil/Ektj3n5k3IkNJ0gefqSgeH1aEt8Wps90U+p/VR2KJiSln+0Lc+SvHt1n8f7R4A6NTXlipbxk12lOdWr+Wk9q+1gtMrmQHhmZiYODQ3FRqNhtqdX+lej6rLATNImJq5Njo6OZnmKmteLAqOt10rvW9956vd8r/1O/9a2BFvvSPV5eODlU6pvkrfWjXLrxcTNVWhlZEGrA41Zao1aWvbIDXF7eWWNNQKqer0eZ2Zm4tTUVKGgqYHD51JtxOcw76PZbKqJ7BRoYxtpjlRqHLv5XaqPtl/KAUktq3JjZclfqu24dDQ0NNSxtZ7rCw6mKKi08mZ4H/izVGZykkkRcKAjkpIXGoHiy6EpwGfpk7KgJnfphdu1mZmZuGPHjliv19319oMqgJJJ2uSVJplHuCwDoXmLlFJRCE58AkugAXMOyuw0iVE/VM3ybrg3TieLxQN8VgpJ8mdyxiVFueAz5z18rpv1Xa/8WCDR01Y+bh7PzSojp338ubm5uTgyMhK3b98eR0ZGii3U/Ch6Hv3zGDoLsNE5KMmj5NTQ8fXmYEnv0cRIvquJJlTyKIaH57xdOfJM+bB79+54/fXXF5EFLtMIpuhOPh41SY29pEfobzhG3p1/UpssohE2dHLQQUvt5LS2V5dxdMqCGjrmuNQ9Pz+fdaJwr6kCKJmkTV7rWe8zZQxaLkDRDt5BtI/l4S6GMgIpeTySQtBACc9U9+6ESp2oSJN6ex3d0PpHvXBPVEIrn5M3MsI9R4s4Dz3yWAbU5LyTAvC8bfV6vQjL0/NO6PscSEl1SOPrOYGVfmfJe6vVuVXeS9Tz50mo2ljh8is1gKllL+m7HMNHDTweIoggSjtmf3x8PA4PD8eFhYUiQRnPYfLOb2uMcAnGk1NSRnfzPBqP/vIAodylXkn2vPoCZQrbg7mF/ETxbh0oL1UApQdUBuVK1A3y9U4kFHbcbZPaV8/LKGvcpb5pSrDMdkBrEvPkMWmJIHcM+fPUcNBJTM+voH1L1eNVKJrhpktV0rNcDlDh8GUCzXBbS2pl257DB6pQLTm1wuo5joE0vqn2at481mkdU661Ududo/EJ6xkfH4+1Wk1MnNfGmUeZcgyS1D8LtDWbzeIQQ4y80vo9AAXrs5ZtqK7L0bMScb5xR0gaFz6OnqRtLQeHlifND8o/r8PD81dwZWB+fr7jVmxc0vIsf3VDFUDpAZXxViXKNZI5W07LJpPx53N3E+T2zTIcVhmWAuNGS1oOsiawpWQkD4q2r0yCpoc8hlvzrtvtiwmg1q4ry3BbSj7FS69itvqZ2jHhLcNa7uTPWqFuiS+p3ImcZPeUgdF+x+/pdmlJdqVx9uTRlJ2T0vt8rniOIqDzDi84lLYAe9ucA8QoyG82m7Fer6/Zlcj5hn/T/BYL7NN6JD1vjYsnwmY5o9xxpLv58HBRfmhkr2nTAhQA2AsAEQCe63l+M0RQ6PJIrwdMEhoLWcdoe7u5gMGT2d9rkrxYTUnnLHU1m2sTHi1+aErG2u6tKbkU33NBjAc8Sf2ZmJiIw8PDcWZmpqOd2vKcJT9lgGTqcD7aVkmG6RikeEXHj/ZPW+6kbeLAQzooi/aLHpKYAg0pY0/lKCdPRfoePfYU32k5Um4NH+8cYJ9LCJKsowiofKQMsodwbvClN81oI9gYGxsTowma/kQnCZdSus0Z0cBWCgBLUV8LCNIodI6jUZY2JUABgO8EgMcB4DNfCQAFKQd955KkCLwRlG7akmMIelk/96A0T0+qy6Os6/V6cd6JVBYdRwsESJMUw5/eo65zfu/2edo/TISmY4tGm55U28s2S2HwVFt5ZIJ+7zHY9P8UlPD5g3KB557QvvHIA2+PBLxScsi/l/hYZnw1arXWLjFaToCnnd0C6tRvHCRJuRUoy/T2YC8IlNogLb1Z4DV1VQnvB29HGT2ZKxeak9FoNDruXEuV6wWnvaLNClB+GwB+AAA+vRkASo4A5WyJy6F+lWsRN2SWIFoeRu57+C4mmEo3Elveg8dzxeSv2dnZNW1CLwoBTKou7oXQA764QrCAj8WPXP55ohoUBKIBxuREqux7CYTLyKsVScgx9jGmw+VjY2PFaalS+ZrsSd/nAhTpe29Ey8vH1Bz1yGQ39VtLxBYIwH/pMgMHVfTMnlzdoPHJGm8uk1Y0gwLzXjixuXOOz3PukEjyzv/PnbF+2h6kTQdQAOA1AHD/6v9NgAIAbwaAJwHgySuuuKJfPBI9D41yDhVKkQetUg9PW08sMyGoMkmtkWrt8CwHpTwdfookfcdaYkkZAAvw4Xoy3rRsLUnwiYu5CpJHxftqKeSyS2n8DBocO20btnRmDXqRdH28G2+tW0VG6/fwkNYp8dGSj9R9NHwbtdU3bXy9eVxSfVafpf6neO55Tls+1YyZVIcU5chpC51n2lUeniX2XLmw9K52ND3V2XwOaG0sM++9uh3t1/T09JqzqaTjMaS+Y3+tO+P6QRsCUACgBgCnhc9rAeBjAPDN0QFQ6KffERSvUvFEOrzbxiyB5+Wi4EveRZm8mBxQJrUjlUnvNV6Sh5cCQB6lm/K8sQ5MfNNOh+TvoUHB+0msdWxLIZZNRuZn0OBShLZjhPaXtkXLP/AQHzMsC3cBeMGypLT5d1ZEJWXgpYRRrQ3USaBzwpOczcf34MGDcXJyMl64cMGUB6k+rVytrb0wJFIfOW8tfUF1kGe5ViKvLvQszUr8of3x7FyS6qJ/a+3VyrTmvaWrrBN4pbHiMr+0tBSnpqbE5W6p3akIVa9pU0VQAOBaADi7Ckw+DQBLAPBZANiWerffOSgepSB9J/2eSm5N1ak9KyXBeVG2p92e8vjvHIzlKk5NaVvvexJmPZ43Turp6emkstGS4DxJu1r9ZTwqHgFIeWaa/EqXP3IlpbWJ17mwsBDHxsbiyMhIlgdmjbVkYCggQ6NpGXie+JqqR9qRlTPOyL9arVbcSC1FgyzgZOkE2t9eGhBJhjhv0QhKxlWSGc88pvXm6DAaxZWAsgS6sT3Uschpo5QjhXOIRyeteSiNmwb+rL7SMtvt9ppzZbBv09PT8frrr4/bt28vlrs9dofmXPUTpGwqgLKmAZskgmKRJMT0O+n33IN3JOICh5QySLl9kZ7JOQ9idnbWfSKkhyyvSDIa2vMpr1nb4sjH1joBshdrzc2mfsQ6pxyFaoELerIlXebD7xFkpKJr1OCikfJ6YBxsWeNO66I3tHrAtEcWtLH3Ln9yfmAbKfijdUnGhpchGTsqtx4AmCujGliTeJVqr0cPUCPqzYHDQ+lwzlBg5Il2eXSH1D9JDjDPrV6vF795nCepbRaI1saRytvk5KSoh5eWltTE8JQTmLqPrBdUAZQuSfIQNC+7l0hzeno6XnXVVXF6elr83VJkVl9Sz3n7IxmMsnVaRCe8pCy4p+cFYdLuIe7JSREUTTmXpWazWUQeUKmlvDDL0FLjx9tP8wRw+yPdtYJ33eBHu3ROMkIaoNB4w8Ff6nnaP+8BVR5+aR6rdsOuZXwlQCS9ZwEmCgykvuXMJ6+zIbWfL4dYz0oAz0PcUfDoG1zKxPM5MJcKd6pQ3kgRMWvJMJffCJbo0kkuQPHIhMZXfLder8edO3fGY8eOuZziXtqBbmlTA5Scz0Yf1GZNdG4kkboZZCmCoinJbgylx4vgz0sh3RTK5wbTy49UrgT3Kr2TjyoFvhTAvSXNw8mNlEn9b7cvHt+Ou4LKjKcG3mikhP5fU9TICy1yoLUNlTV6aqlx5rzIAdl0nKykV4uPmiGhoW3KB2lpyQJf0rNe8Kz1LRfsl9U/COCtPCspCiQBgl4ZQT5nEUA2Go04PDwcd+7cuWZJnW6p1+Sa8ttyRmgbLF1p9Un6zQNoNAcKSQJKVrs9v3XrWHqpAiiZVFbopK26uR5Mirjnz9vsmVi8L9Qz0dY6eRukPmnfcyDl4Yem6FI7c8ooYikngPNA43sukJD632533qrqBVmcUnLLlVvKK/MCC6TZ2dm4Y8eOODIysgbM9VrZUSOZs2OCtgPf5ee1oLLHA+4kw9Zup3cDSfPNsyxr9U0Cod66PbznfLNOZJbaUBaM5cogb4c2FsvLF08jxvbyM00kYK5FdbzzXXuOzn/aHm/ERXqfg3uJd7w9Hue2jJNUhiqAkknWYFrPSxNWMxBlE9w0T15rOxJfJqGKD8ucmJgoQqXWUdKa0vN4xCmgR9sjJRlbycfWhPJ4CdYk75WXIR0U1mw2XbuILOoVoPGSJPN0OyNf4igLWLRxoAnGUjQvpXQR5KJjwRMtNbBI/y+ds6M9W0bZS8BGAtDcu6b90QyaxmdteVByhjRHLScipj3j4ZfUPo/OaTabcWxsTAW1uITo2aXnaRufCzyxtl6vm0CX85RGejzAQirDE3HWQH6vqQIomcQHLDVZvANJlUUqISrlweYaUr5MIk3sZnNl94Fn95GHcpUyfV6LlFghZItv3XhznHg9nmUeqvy4V5wT4tWUCCrVMqcBW9SLelutlW23eOMzflfGE6UAQ/oe22rdeJvaOmuBaFqPdFgf/Z23STKcZeVXylPBJTw8hoCDNysyKgFOrf1au1OR1xzSdKqlmykQ1pZxsEzrPh+sAyMb3hOROWGd1k4udAyt1AErSV9qF8oG5uPwCCD+7d3aXgZc51AFULokL2r2ABlUGI1Gozgzgk9CqnBSHnsZT8PqTy92H2lt7fXzOROnG2+OP8N3UXi2lFOlpIFDK3qi9ZUru25BiiRfqSVF67A/7Jt28JZlICxjyCMKPFHTe06PVZdEHCBbkaFUeRL40q594P+n9VKeWIDEy3PpOwl48SRlK0Ij1edZetIAqtQn5N/s7Oya5XatL/Q3KkMUxJQFXjhO/OA6PpaWbtb45AGzfF5agEuSZU9dvaAKoKwT5QAZupWT3xkjGUH6ruZJaV4HVyC98HRyFXs/qBtDU5bo5OfJep4ISi4ASb1vGa5u+keVt1Qmj8hpcqXleWikGV/tPSn6ZBk/j2K3eCfxJzfHQ1vm5X3X2qNds8DbmAMYPO3mcpaTlC610RMZ4PyyeM3lEHPqUvoB+UUPOqSHIXrq1Pqeyxvv2FmyqtkBK5G21boY5bxw4ULPnFQPVQClBGmD3KuyqadTr9fNtWypXXRyoddFQ3eSh0BDfZ61W63Odtt3TXsOD7rls+ThdQPANEptAS1LEo/LKL5ugVrKk0aSlN2FCxfi5ORkfOaZZ4rnc5eveBQhpbA95Xuf98yBbreaW4aZt0FbzrTumLL60Q1w1+RT207tKc+zjEb/9p4TIuXpSGPE+0CTVZH3jUbDPKysrA6wxggjjtYW/zJ8t2SfJhPz81T6TRVAKUFamKxboCIJk3dZRXsXDznCNkphb/4+F1ZrokkKY2JiIg4PDxfruGU9KIwi8WPacw1tt4bZQ3QSU4PqBVde4x9jucO6NM9QCy/ntpXyoVarxX379nUobjy3Z3Jy0h0BwXbyA/O0pNCUjKeIy71lKHkbPTljqf6m8h+0Oun/y+qLlDG1jKYnoivJrDQ+/LdUnomnLCm3i74njTEHw1L/m82LCdPaEmYZOfToW6ld0pz2jitGevlZMbSM6enpeODAgTg5ObnmgNB+UQVQShAXPCl87fG4cgxPiiRB5JMs9TxSjqKWFAa9aM7Tb05YH548ihf2SYCprJei1ZvDc8oXPDF3enra5UFzQyItd2jvSkpJ8iitdkiGxSt/UrvweeQDBSIxXjy3J3X/jMRjK+mVjgN6lmXzbaQckpxTk3NAhfW7p91lQLcmNx4gJgFFzSjS+qQlK2rwOLDEseb/lpnfWI8UFcb2aeCK/mYdRkfLtvJfcvLhLF3Lf+PjiG3mYN0aV43fEljU+NUvqgBKD0hSEB4UnGN4yrRB8zZSSi23P573PWVo9Uo7KaR+lPVYYlwxoMeOHYvj4+PuJYFW62JIXjsxV+MFD8UjQKEJox7DY41xqh3WuynDo8mHdIx7LtjJ6SP1kmn+T5mdcBz4YlKldvcQlTdpZ5B3bOjzHgPgARQSaQCUj4EUhaHRWMuIeeY89hNPLJaAZdkomMUnzv8UIKR9tniDdUlla/NYG0Ov3dD4zudDSl9LIMSyQV4w3CuqAEqfKBcAlHkmlyTP01tHL9qTAhOeCeExdmUyzqenp+OVV14ZX//617sBSllDEWPnyaoWuFpvhYAkGcscmfaC7W77R71krmi9eQxSWzztx+9nZ2fj0NBQ3LVrV8fafMpISXUvLS0ll3koMJbmitZ3L3iVdp5RR0FaatNkRQMYGrD0tC9HZugY8Mhwajms1Vq7Bd6zK8/TxmZz5bwVfpeNd46lgH2v9fVGUQVQnkVkofz1rB/X2vHERq83prWZv6ftnLH6u7S0FGu1Wmw0GskJ2Qtg5/WW13uMKHUjLznGWaqrF23UPGQNiOS2Db9fWFiI4+PjsVardcgclSl+CZ0WqvcsK9H3teWWbk6olgy3xAM0+LgES3OOvN63Zyx4WTnJz7RMdAoajYYrytBut9fkv2lLlblEI6ZlytgM4GE9qAIoz2JabyHnChR3evA25Hrc3qReS0HmhJLLGmpPX+hvdCdTL8ao7HgvL6+ccHvy5MmOU25z67LqL2t08G802BScaiAwxxPV6pd2mfHdE9PT03Hnzp1xbGysMHS4NdVK2rSOybf4Rg/h8uyC80Z1LGBGAQodO+ndFGj1ztvc3VmcV/weJWs+aLql2y37zxaA0S1VAKWidaNUCJo/5528UlJvLtjwKhzJ+9WeywU+vF0TExOuW4xzyiyjVOfm5uKOHTvi9u3b4549ezpC3khlo19IOUaHl9Nq6acwW9EKK7pj8RrrGxoa6gjR8+gNHomOBy7SBEZLhrAcbkClaAONzND3MGnYku2UPPDysL34faPRyIompIChV767jbblzEkJDHczryvKowqgVPQVT90Y7lyF4zXyZcEAbRcPL3vL1MLm3UZQZmZm4tTUlLgGj22jiZQ5+TSp5EMKanm5dHuu9Jy1w0LjnxV5QX7wA9FoudoySQ645e3mAIiDGPoeP9a+mwgKj/jg97hjq8yZGFUEoSIPVQCloooyqN9enlWGt0zJkJUFSpwsIIE7M3D7aE4YXGsnjXBpeRVSRIXW7wnla3VqSxCpiE+qPx6eWOPvWR7s5dKgVJ73zJWKKipLFkAJK79/ZdBLXvKS+OSTT250MyqqaMMpxgiLi4swODgIAFD8P4SwLvUODAzA2bNni389ddM202dpmYuLiwAAsG3bNvEZfJe3I7fvqbZ4+Oopo9/jUVFFX+kUQjgZY3yJ+FsFUCqqqKKKKqqooo0gC6BsWe/GVFRRRRVVVFFFFaVowwBKCGEshPAXIYRPhhD+/Ua1o6KKKqqooooq2nz0NRtRaQjhhwHgtQBwXYzxyyGEgY1oR0UVVVRRRRVVtDlpoyIodwPAv4sxfhkAIMZ4doPaUVFFFVVUUUUVbULaKIDyvQCwM4TwsRDCR0MIP6g9GEJ4cwjhyRDCk+fOnVvHJlZUUUUVVVRRRRtFfVviCSHUAGCb8NNbV+v9VgDYAQA/CADHQgjPj8KWohjjgwDw4GqZ50IIn+lTk58LAOf7VHZFnVTxev2o4vX6UsXv9aOK1+tH/eT1ldoPG7LNOITwB7CyxPOR1b//BwDsiDFuWIgkhPCkttWpot5Sxev1o4rX60sVv9ePKl6vH20Urzdqief3AOBHAABCCN8LAF8HFRKuqKKKKqqooopWaUN28QDAEQA4EkI4DQDPAMAbpeWdiiqqqKKKKqro2UkbAlBijM8AwE9tRN0GPbjRDXgWUcXr9aOK1+tLFb/Xjyperx9tCK+/oo66r6iiiiqqqKKKnh1UHXVfUUUVVVRRRRVtOqoASkUVVVRRRRVVtOnoWQ1QQghHQwizq59PhxBmyW/3hhD+evW+oB/dwGZ+VZF2B1PF795SCOEXQwgLRL5/nPxW8boPFELYG0KIIYTnku8qXveYQggHQwhPrcr1iRDCt5HfKn73kEII7wohPL3K798NIXwL+a3vvK5yUFYphPBLAPC/YowHQgjfDwAfBICXAsC3AUANAL43xri8kW38SqfVO5jeCgA34x1MMcazFb97TyGEXwSAL8QY/wP7vuJ1HyiE8J0A8D4AeAEAvDjGeL7idX8ohPBNMca/X/3/PQDw/THGuyp+955CCK8GgD+MMS6FEN4JABBjnFgvXj+rIyhIIYQAALfBCsMBVi4yfCTG+OUY498AwF/DykBU1B1pdzBV/F4/qnjdH/oVABgHAOrxVbzuAyE4WaVL4SLPK373mGKMJ2KMS6t/PgEA37H6/3XhdQVQVmgnACzGGP9q9e9vB4B58ntj9buKuiPtDqaK3/2h0dXQ7JEQwreuflfxuscUQngNACzEGOfYTxWv+0QhhHeEEOYB4J8DwNtWv6743V8aBoDfX/3/uvB6ow5qWzey7gSKMf7X1f+/Hi5GTwAAgvB8tRbmoDJ3MEHF71KU4PWvA8BBWOHjQQD4JVhRMBWvS1CC1/8aAF4tvSZ8V/HaQSm9HWN8KwC8NYRwLwCMAsAvQMXvUuSxkSGEtwLAEgC8H18Tnu85r7/qAUqM8Ubr9xDC1wDAPwWAF5OvGwDwneTv7wCAZu9b99VHFr9DCHcDwO+snhr88RBCG1Yuoar4XYJSso0UQvgNADi++mfF6xKk8TqEcC0AfBcAzK2sFMN3AMBMCOGlUPG6NHllGwA+AAAfghWAUvG7BDls5BsB4BYAuIGc+L4uvK6WeABuBICnY4wN8t2jAHBHCOHrQwjfBQDfAwAf35DWfXXR74F8B1PF7x5TCOFy8udPAsDp1f9XvO4hxRhPxRgHYozPizE+D1YU9/YY4xmoeN0XCiF8D/nzNQDw9Or/K373mEIIPwYAEwDwmhjjl8hP68Lrr/oIioPugM7lHYgxfjKEcAwAPgUrYa2RKhO8J6TdwVTxu/f070MI/wRWwq6fBoCfBqhkez2p4nXf6N+FEL4PANoA8BkAuAug4nef6NcA4OsBYGo1QvhEjPGu9eJ1tc24oooqqqiiiiradFQt8VRUUUUVVVRRRZuOKoBSUUUVVVRRRRVtOqoASkUVVVRRRRVVtOmoAigVVVRRRRVVVNGmowqgVFRRRRVVVFFFm44qgFJRRRW5KYTwqyGEXcL3rwohHJfe2QgKIfzs6i2sp0IIcyGEXw4hfO3qb59e/f5UCOFTIYRDIYSvJ+/+QQjh73h/QgiPsDM4Kqqooj5SBVAqquhZTGGFXHoghPCPAWBHjPG/97lNz+ny/btg5ej5HTHGa2HlWoWzAPCPyGM/vPrbSwHg+QDwIPntXQDwL4Sifx1WLgSsqKKK1oEqgFJRRc8yCiE8L4Tw5yGEdwPADAB8Zwjh10MIT4YQPhlCeLvy6usA4A9IOT+2GqX4Y1i5LgK/v3T1gsJPhBDqIYTXrn5/SQjh2OoFhkdXL418yepvXwghHAghfAwAXhZC+KkQwsdDCLMhhPciaAkhvDqE8GchhJkQwmQI4TKhnW8FgLtjjH8HABBjfCbG+O/YLbiw+tsXYOWgr59YBWAQY5wGgH8Qyv0jALhx9XqMiiqqqM9UAZSKKnp20vcBwH+KMb4oxvgZWLkY7CUAcB0AvDKEcJ3wzg8BwEkAgBDCNwDAbwDArbByGzi9bOytAPCHMcYfBIAfBoB3hRAuBYA9APC3McbrYOUCQ3r/1aUAcDrGeD0AfA4AbgeAH4ox/hMAWAaAfx5CeC4A/BsAuDHGuB0AngSAn6UNDCF8IwBctnoFvItWgcvfwMpx3dZzbVi5Vv4HvGVXVFFF5akCKBVV9Oykz8QYnyB/3xZCmAGAOgC8EAC+X3jncgA4t/r/FwDA38QY/2r1uoL/TJ57NQDsDyHMAsBHAOAbAOAKAHgFADwCABBjPA0AT5F3lgHgv6z+/wZYAS+fWC3jBlhZhtmx2q4/Wf3+jQBwJWtjAHKragjhR1ejMJ8OIbzc4Id0O6tEZwHg25zPVlRRRV1QFaqsqKJnJ30R/7N62ddeAPjBGOPfhhB+E1ZABaf/zb7X7skIAPDPYox/0fHl6mUeCv0fcpdHAIDfijHey96/FQCmYoyv1wqJMf59COGLIYTvijH+TYzxcQB4fDXh9evExq5EXZ4HAH9ptA/pG2CFDxVVVFGfqYqgVFRRRd8EK4Dlf4UQBgHg/1ae+3MAuGr1/08DwHeFEL579W8KGh4HgDEEJCGEF61+/8cAcNvqd98PANcq9UwDwOtCCAOrz/7jEMKVAPAEAPxQCOGq1e8vWb0Vm9N9APDrIYRvWX0ugAy4YDWH5d0A8Hsxxr9V2kPpewHgk47nKqqooi6pAigVVfQspxjjHKws7XwSVm6c/hPl0Q8BwKtW3/k/APBmAPjQapLsZ8hzBwHgawHgqdWbqw+ufv9uANgaQngKVq5wfwoA/pfQnk/BSq7JidVnpwDg8hjjOQDYDQAfXP3+CVhZauL06wBQA4CPrT73J6v9q5NnPrzato8DwGdh9bZnAIAQwh8BwCQA3BBCaIQQfnT1+0EA+N8xxpbCn4oqqqiHVN1mXFFFFblpFYzcgjtkMt99DgB8bYzx/6xGXqYB4HtjjM/0uJl9oRDC/wsAfx9jfGij21JRRc8GqnJQKqqoohz6OVhJeP27Eu9eAiuRi6+FlTyTu79SwMkq/R0A/H8b3YiKKnq2UBVBqaiiiiqqqKKKNh1VOSgVVVRRRRVVVNGmowqgVFRRRRVVVFFFm44qgFJRRRVVVFFFFW06qgBKRRVVVFFFFVW06agCKBVVVFFFFVVU0aaj/x/XQ31GbD5pbwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/04_select_57_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = candidate_df['phi1']\n", + "y = candidate_df['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.5, alpha=0.5)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We're starting to see GD-1 more clearly.\n", + "\n", + "We can compare this figure with one of these panels in Figure 1 from the original paper:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The top panel shows stars selected based on proper motion only, so it is comparable to our figure (although notice that it covers a wider region).\n", + "\n", + "In the next lesson, we will use photometry data from Pan-STARRS to do a second round of filtering, and see if we can replicate the bottom panel.\n", + "\n", + "We'll also learn how to add annotations like the ones in the figure from the paper, and customize the style of the figure to present the results clearly and compellingly." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving the DataFrame\n", + "\n", + "Let's save this `DataFrame` so we can pick up where we left off without running this query again." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "!rm -f gd1_candidates.hdf5" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_candidates.hdf5'\n", + "\n", + "candidate_df.to_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `ls` to confirm that the file exists and check the size:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 756K Oct 19 14:39 gd1_candidates.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_candidates.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_candidates.hdf5\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CSV\n", + "\n", + "Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html).\n", + "\n", + "We won't cover all of them, but one other important one is [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), which stands for \"comma-separated values\".\n", + "\n", + "CSV is a plain-text format with minimal formatting requirements, so it can be read and written by pretty much any tool that works with data. In that sense, it is the \"least common denominator\" of data formats.\n", + "\n", + "However, it has an important limitation: some information about the data gets lost in translation, notably the data types. If you read a CSV file from someone else, you might need some additional information to make sure you are getting it right.\n", + "\n", + "Also, CSV files tend to be big, and slow to read and write.\n", + "\n", + "With those caveats, here's how to write one:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "candidate_df.to_csv('gd1_candidates.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can check the file size like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 1.6M Oct 19 14:39 gd1_candidates.csv\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_candidates.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The CSV file about 2 times bigger than the HDF5 file (so that's not that bad, really).\n", + "\n", + "We can see the first few lines like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ",source_id,ra,dec,pmra,pmdec,parallax,parallax_error,radial_velocity,phi1,phi2,pm_phi1,pm_phi2\r\n", + "0,635559124339440000,137.58671691646745,19.1965441084838,-3.770521900009566,-12.490481778113859,0.7913934419894347,0.2717538145759051,,-59.63048941944396,-1.21648525150429,-7.361362712556612,-0.5926328820420083\r\n", + "1,635860218726658176,138.5187065217173,19.09233926905897,-5.941679495793577,-11.346409129876392,0.30745551377348623,0.19946557779138105,,-59.247329893833296,-2.0160784008206476,-7.527126084599517,1.7487794924398758\r\n" + ] + } + ], + "source": [ + "!head -3 gd1_candidates.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The CSV file contains the names of the columns, but not the data types.\n", + "\n", + "We can read the CSV file back like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "read_back_csv = pd.read_csv('gd1_candidates.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compare the first few rows of `candidate_df` and `read_back_csv`" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
\n", + "" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 0.791393 \n", + "1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 0.307456 \n", + "2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 0.779463 \n", + "\n", + " parallax_error radial_velocity phi1 phi2 pm_phi1 pm_phi2 \n", + "0 0.271754 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 0.199466 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 0.223692 NaN -59.133391 -2.306901 -7.560608 -0.741800 " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "candidate_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2
00635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633
11635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.748779
22635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.741800
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 source_id ra dec pmra pmdec \\\n", + "0 0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 \n", + "1 1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 \n", + "2 2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 \n", + "\n", + " parallax parallax_error radial_velocity phi1 phi2 pm_phi1 \\\n", + "0 0.791393 0.271754 NaN -59.630489 -1.216485 -7.361363 \n", + "1 0.307456 0.199466 NaN -59.247330 -2.016078 -7.527126 \n", + "2 0.779463 0.223692 NaN -59.133391 -2.306901 -7.560608 \n", + "\n", + " pm_phi2 \n", + "0 -0.592633 \n", + "1 1.748779 \n", + "2 -0.741800 " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_back_csv.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the index in `candidate_df` has become an unnamed column in `read_back_csv`. The Pandas functions for writing and reading CSV files provide options to avoid that problem, but this is an example of the kind of thing that can go wrong with CSV files." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In the previous lesson we downloaded data for a large number of stars and then selected a small fraction of them based on proper motion.\n", + "\n", + "In this lesson, we improved this process by writing a more complex query that uses the database to select stars based on proper motion. This process requires more computation on the Gaia server, but then we're able to either:\n", + "\n", + "1. Search the same region and download less data, or\n", + "\n", + "2. Search a larger region while still downloading a manageable amount of data.\n", + "\n", + "In the next lesson, we'll learn about the databased `JOIN` operation and use it to download photometry data from Pan-STARRS." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* When possible, \"move the computation to the data\"; that is, do as much of the work as possible on the database server before downloading the data.\n", + "\n", + "* For most applications, saving data in FITS or HDF5 is better than CSV. FITS and HDF5 are binary formats, so the files are usually smaller, and they store metadata, so you don't lose anything when you read the file back.\n", + "\n", + "* On the other hand, CSV is a \"least common denominator\" format; that is, it can be read by practically any application that works with data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_build/jupyter_execute/04_select.py b/_build/jupyter_execute/04_select.py new file mode 100644 index 0000000..80e3271 --- /dev/null +++ b/_build/jupyter_execute/04_select.py @@ -0,0 +1,611 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 4 +# +# This is the fourth in a series of notebooks related to astronomy data. +# +# As a running example, we are replicating parts of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server. +# +# In the second lesson, we write a query to select stars from the region of the sky where we expect GD-1 to be, and save the results in a FITS file. +# +# In the third lesson, we read that data back and identified stars with the proper motion we expect for GD-1. + +# ## Outline +# +# Here are the steps in this lesson: +# +# 1. Using data from the previous lesson, we'll identify the values of proper motion for stars likely to be in GD-1. +# +# 2. Then we'll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. +# +# 3. We'll also see how to write the results to a CSV file. +# +# That will make it possible to search a bigger region of the sky in a single query. +# +# After completing this lesson, you should be able to +# +# * Convert proper motion between frames. +# +# * Write an ADQL query that selects based on proper motion. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia python-wget') + + +# ## Reload the data +# +# The following cells download the data from the previous lesson, if necessary, and load it into a Pandas `DataFrame`. + +# In[2]: + + +import os +from wget import download + +filename = 'gd1_dataframe.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# In[3]: + + +import pandas as pd + +df = pd.read_hdf(filename, 'df') +centerline = pd.read_hdf(filename, 'centerline') +selected = pd.read_hdf(filename, 'selected') + + +# ## Selection by proper motion +# +# At this point we have downloaded data for a relatively large number of stars (more than 100,000) and selected a relatively small number (around 1000). +# +# It would be more efficient to use ADQL to select only the stars we need. That would also make it possible to download data covering a larger region of the sky. +# +# However, the selection we did was based on proper motion in the `GD1Koposov10` frame. In order to do the same selection in ADQL, we have to work with proper motions in ICRS. +# +# As a reminder, here's the rectangle we selected based on proper motion in the `GD1Koposov10` frame. + +# In[4]: + + +pm1_min = -8.9 +pm1_max = -6.9 +pm2_min = -2.2 +pm2_max = 1.0 + + +# In[5]: + + +import astropy.units as u + +pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max, pm1_min] * u.mas/u.yr +pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min, pm2_min] * u.mas/u.yr + + +# The following figure shows: +# +# * Proper motion for the stars we selected along the center line of GD-1, +# +# * The rectangle we selected, and +# +# * The stars inside the rectangle highlighted in green. + +# In[6]: + + +import matplotlib.pyplot as plt + +pm1 = centerline['pm_phi1'] +pm2 = centerline['pm_phi2'] +plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) + +pm1 = selected['pm_phi1'] +pm2 = selected['pm_phi2'] +plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3) + +plt.plot(pm1_rect, pm2_rect, '-') + +plt.xlabel('Proper motion phi1 (GD1 frame)') +plt.ylabel('Proper motion phi2 (GD1 frame)') + +plt.xlim(-12, 8) +plt.ylim(-10, 10); + + +# Now we'll make the same plot using proper motions in the ICRS frame, which are stored in columns `pmra` and `pmdec`. + +# In[7]: + + +pm1 = centerline['pmra'] +pm2 = centerline['pmdec'] +plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) + +pm1 = selected['pmra'] +pm2 = selected['pmdec'] +plt.plot(pm1, pm2, 'gx', markersize=1, alpha=0.3) + +plt.xlabel('Proper motion phi1 (ICRS frame)') +plt.ylabel('Proper motion phi2 (ICRS frame)') + +plt.xlim([-10, 5]) +plt.ylim([-20, 5]); + + +# The proper motions of the selected stars are more spread out in this frame, which is why it was preferable to do the selection in the GD-1 frame. +# +# But now we can define a polygon that encloses the proper motions of these stars in ICRS, +# and use the polygon as a selection criterion in an ADQL query. +# +# SciPy provides a function that computes the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) of a set of points, which is the smallest convex polygon that contains all of the points. +# +# To use it, I'll select columns `pmra` and `pmdec` and convert them to a NumPy array. + +# In[8]: + + +import numpy as np + +points = selected[['pmra','pmdec']].to_numpy() +points.shape + + +# We'll pass the points to `ConvexHull`, which returns an object that contains the results. + +# In[9]: + + +from scipy.spatial import ConvexHull + +hull = ConvexHull(points) +hull + + +# `hull.vertices` contains the indices of the points that fall on the perimeter of the hull. + +# In[10]: + + +hull.vertices + + +# We can use them as an index into the original array to select the corresponding rows. + +# In[11]: + + +pm_vertices = points[hull.vertices] +pm_vertices + + +# To plot the resulting polygon, we have to pull out the x and y coordinates. + +# In[12]: + + +pmra_poly, pmdec_poly = np.transpose(pm_vertices) + + +# The following figure shows proper motion in ICRS again, along with the convex hull we just computed. + +# In[13]: + + +pm1 = centerline['pmra'] +pm2 = centerline['pmdec'] +plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) + +pm1 = selected['pmra'] +pm2 = selected['pmdec'] +plt.plot(pm1, pm2, 'gx', markersize=0.3, alpha=0.3) + +plt.plot(pmra_poly, pmdec_poly) + +plt.xlabel('Proper motion phi1 (ICRS frame)') +plt.ylabel('Proper motion phi2 (ICRS frame)') + +plt.xlim([-10, 5]) +plt.ylim([-20, 5]); + + +# To use `pm_vertices` as part of an ADQL query, we have to convert it to a string. +# +# We'll use `flatten` to convert from a 2-D array to a 1-D array, and `str` to convert each element to a string. + +# In[14]: + + +t = [str(x) for x in pm_vertices.flatten()] +t + + +# Now `t` is a list of strings; we can use `join` to make a single string with commas between the elements. + +# In[15]: + + +pm_point_list = ', '.join(t) +pm_point_list + + +# ## Selecting the region +# +# Let's review how we got to this point. +# +# 1. We made an ADQL query to the Gaia server to get data for stars in the vicinity of GD-1. +# +# 2. We transformed to `GD1` coordinates so we could select stars along the centerline of GD-1. +# +# 3. We plotted the proper motion of the centerline stars to identify the bounds of the overdense region. +# +# 4. We made a mask that selects stars whose proper motion is in the overdense region. +# +# The problem is that we downloaded data for more than 100,000 stars and selected only about 1000 of them. +# +# It will be more efficient if we select on proper motion as part of the query. That will allow us to work with a larger region of the sky in a single query, and download less unneeded data. +# +# This query will select on the following conditions: +# +# * `parallax < 1` +# +# * `bp_rp BETWEEN -0.75 AND 2` +# +# * Coordinates within a rectangle in the GD-1 frame, transformed to ICRS. +# +# * Proper motion with the polygon we just computed. +# +# The first three conditions are the same as in the previous query. Only the last one is new. +# +# Here's the rectangle in the GD-1 frame we'll select. + +# In[16]: + + +phi1_min = -70 +phi1_max = -20 +phi2_min = -5 +phi2_max = 5 + + +# In[17]: + + +phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg +phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg + + +# Here's how we transform it to ICRS, as we saw in the previous lesson. + +# In[18]: + + +import gala.coordinates as gc +import astropy.coordinates as coord + +corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect) +corners_icrs = corners.transform_to(coord.ICRS) + + +# To use `corners_icrs` as part of an ADQL query, we have to convert it to a string. Here's how we do that, as we saw in the previous lesson. + +# In[19]: + + +point_base = "{point.ra.value}, {point.dec.value}" + +t = [point_base.format(point=point) + for point in corners_icrs] + +point_list = ', '.join(t) +point_list + + +# Now we have everything we need to assemble the query. + +# ## Assemble the query +# +# Here's the base string we used for the query in the previous lesson. + +# In[20]: + + +query_base = """SELECT +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON({point_list})) +""" + + +# **Exercise:** Modify `query_base` by adding a new clause to select stars whose coordinates of proper motion, `pmra` and `pmdec`, fall within the polygon defined by `pm_point_list`. + +# In[21]: + + +# Solution + +query_base = """SELECT +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON({point_list})) + AND 1 = CONTAINS(POINT(pmra, pmdec), + POLYGON({pm_point_list})) +""" + + +# Here again are the columns we want to select. + +# In[22]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# **Exercise:** Use `format` to format `query_base` and define `query`, filling in the values of `columns`, `point_list`, and `pm_point_list`. + +# In[23]: + + +# Solution + +query = query_base.format(columns=columns, + point_list=point_list, + pm_point_list=pm_point_list) +print(query) + + +# Here's how we run it. + +# In[24]: + + +from astroquery.gaia import Gaia + +job = Gaia.launch_job_async(query) +print(job) + + +# And get the results. + +# In[25]: + + +candidate_table = job.get_results() +len(candidate_table) + + +# ## Plotting one more time +# +# Let's see what the results look like. + +# In[26]: + + +x = candidate_table['ra'] +y = candidate_table['dec'] +plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3) + +plt.xlabel('ra (degree ICRS)') +plt.ylabel('dec (degree ICRS)'); + + +# Here we can see why it was useful to transform these coordinates. In ICRS, it is more difficult to identity the stars near the centerline of GD-1. +# +# So, before we move on to the next step, let's collect the code we used to transform the coordinates and make a Pandas `DataFrame`: + +# In[27]: + + +from pyia import GaiaData + +def make_dataframe(table): + """Transform coordinates from ICRS to GD-1 frame. + + table: Astropy Table + + returns: Pandas DataFrame + """ + gaia_data = GaiaData(table) + + c_sky = gaia_data.get_skycoord(distance=8*u.kpc, + radial_velocity=0*u.km/u.s) + c_gd1 = gc.reflex_correct( + c_sky.transform_to(gc.GD1Koposov10)) + + df = table.to_pandas() + df['phi1'] = c_gd1.phi1 + df['phi2'] = c_gd1.phi2 + df['pm_phi1'] = c_gd1.pm_phi1_cosphi2 + df['pm_phi2'] = c_gd1.pm_phi2 + return df + + +# Here's how we can use this function: + +# In[28]: + + +candidate_df = make_dataframe(candidate_table) + + +# And let's see the results. + +# In[44]: + + +x = candidate_df['phi1'] +y = candidate_df['phi2'] + +plt.plot(x, y, 'ko', markersize=0.5, alpha=0.5) + +plt.xlabel('ra (degree GD1)') +plt.ylabel('dec (degree GD1)'); + + +# We're starting to see GD-1 more clearly. +# +# We can compare this figure with one of these panels in Figure 1 from the original paper: +# +# +# +# +# +# The top panel shows stars selected based on proper motion only, so it is comparable to our figure (although notice that it covers a wider region). +# +# In the next lesson, we will use photometry data from Pan-STARRS to do a second round of filtering, and see if we can replicate the bottom panel. +# +# We'll also learn how to add annotations like the ones in the figure from the paper, and customize the style of the figure to present the results clearly and compellingly. + +# ## Saving the DataFrame +# +# Let's save this `DataFrame` so we can pick up where we left off without running this query again. + +# In[30]: + + +get_ipython().system('rm -f gd1_candidates.hdf5') + + +# In[31]: + + +filename = 'gd1_candidates.hdf5' + +candidate_df.to_hdf(filename, 'candidate_df') + + +# We can use `ls` to confirm that the file exists and check the size: + +# In[32]: + + +get_ipython().system('ls -lh gd1_candidates.hdf5') + + +# If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_candidates.hdf5 +# ``` + +# ## CSV +# +# Pandas can write a variety of other formats, [which you can read about here](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html). +# +# We won't cover all of them, but one other important one is [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), which stands for "comma-separated values". +# +# CSV is a plain-text format with minimal formatting requirements, so it can be read and written by pretty much any tool that works with data. In that sense, it is the "least common denominator" of data formats. +# +# However, it has an important limitation: some information about the data gets lost in translation, notably the data types. If you read a CSV file from someone else, you might need some additional information to make sure you are getting it right. +# +# Also, CSV files tend to be big, and slow to read and write. +# +# With those caveats, here's how to write one: + +# In[33]: + + +candidate_df.to_csv('gd1_candidates.csv') + + +# We can check the file size like this: + +# In[34]: + + +get_ipython().system('ls -lh gd1_candidates.csv') + + +# The CSV file about 2 times bigger than the HDF5 file (so that's not that bad, really). +# +# We can see the first few lines like this: + +# In[35]: + + +get_ipython().system('head -3 gd1_candidates.csv') + + +# The CSV file contains the names of the columns, but not the data types. +# +# We can read the CSV file back like this: + +# In[36]: + + +read_back_csv = pd.read_csv('gd1_candidates.csv') + + +# Let's compare the first few rows of `candidate_df` and `read_back_csv` + +# In[37]: + + +candidate_df.head(3) + + +# In[38]: + + +read_back_csv.head(3) + + +# Notice that the index in `candidate_df` has become an unnamed column in `read_back_csv`. The Pandas functions for writing and reading CSV files provide options to avoid that problem, but this is an example of the kind of thing that can go wrong with CSV files. + +# ## Summary +# +# In the previous lesson we downloaded data for a large number of stars and then selected a small fraction of them based on proper motion. +# +# In this lesson, we improved this process by writing a more complex query that uses the database to select stars based on proper motion. This process requires more computation on the Gaia server, but then we're able to either: +# +# 1. Search the same region and download less data, or +# +# 2. Search a larger region while still downloading a manageable amount of data. +# +# In the next lesson, we'll learn about the databased `JOIN` operation and use it to download photometry data from Pan-STARRS. + +# ## Best practices +# +# * When possible, "move the computation to the data"; that is, do as much of the work as possible on the database server before downloading the data. +# +# * For most applications, saving data in FITS or HDF5 is better than CSV. FITS and HDF5 are binary formats, so the files are usually smaller, and they store metadata, so you don't lose anything when you read the file back. +# +# * On the other hand, CSV is a "least common denominator" format; that is, it can be read by practically any application that works with data. + +# In[ ]: + + + + diff --git a/_build/jupyter_execute/04_select_11_0.png b/_build/jupyter_execute/04_select_11_0.png new file mode 100644 index 0000000..82d2aab Binary files /dev/null and b/_build/jupyter_execute/04_select_11_0.png differ diff --git a/_build/jupyter_execute/04_select_13_0.png b/_build/jupyter_execute/04_select_13_0.png new file mode 100644 index 0000000..6b70416 Binary files /dev/null and b/_build/jupyter_execute/04_select_13_0.png differ diff --git a/_build/jupyter_execute/04_select_25_0.png b/_build/jupyter_execute/04_select_25_0.png new file mode 100644 index 0000000..da56759 Binary files /dev/null and b/_build/jupyter_execute/04_select_25_0.png differ diff --git a/_build/jupyter_execute/04_select_51_0.png b/_build/jupyter_execute/04_select_51_0.png new file mode 100644 index 0000000..4bd920c Binary files /dev/null and b/_build/jupyter_execute/04_select_51_0.png differ diff --git a/_build/jupyter_execute/04_select_57_0.png b/_build/jupyter_execute/04_select_57_0.png new file mode 100644 index 0000000..351b276 Binary files /dev/null and b/_build/jupyter_execute/04_select_57_0.png differ diff --git a/_build/jupyter_execute/05_join.ipynb b/_build/jupyter_execute/05_join.ipynb new file mode 100644 index 0000000..b98b274 --- /dev/null +++ b/_build/jupyter_execute/05_join.ipynb @@ -0,0 +1,1304 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 5\n", + "\n", + "This is the fifth in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "Picking up where we left off, the next step in the analysis is to select candidate stars based on photometry. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:\n", + "\n", + "\n", + "\n", + "In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. \n", + "\n", + "By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. We'll reload the candidate stars we identified in the previous notebook.\n", + "\n", + "2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars.\n", + "\n", + "3. We'll write the results to a file for use in the next notebook.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Upload a table to the Gaia server.\n", + "\n", + "* Write ADQL queries involving `JOIN` operations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reloading the data\n", + "\n", + "The following cell downloads the data from the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can read it back." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`candidate_df` is the Pandas DataFrame that contains results from the query in the previous notebook, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEJCAYAAACdePCvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAB/0klEQVR4nO29f5xl11Ef+D1m9GxZDSGztiN+yUKaYLkTzwxWD5EENgE5xOFjBBGKoxCIHScxsAnhs4ZdBzkCsiSfhHiJN5/Z9SSMg3eXH1GciSJr7cHutnbaZEYj0T3yzNi0RmhsPGOZVix3B9wPi/c84ewf79VTveqqOnXue60eTd/6fO7nvXvv+VHnnDpVdarqnpNyzmihhRZaaGHnwYu2G4EWWmihhRa2B1oB0EILLbSwQ6EVAC200EILOxRaAdBCCy20sEOhFQAttNBCCzsUWgHQQgsttLBDYVsFQErpa1NKR1JK51JKj6eUbt1OfFpooYUWdhLs2ub6/zWAj+Sc70opdQC8dJvxaaGFFlrYMZC260OwlNLXADgD4IYcROJlL3tZvv7667cUrxZaaKGFKw1OnTr1xZzzy+Xz7VwB3ADgGQDvTyntA3AKwE/mnP+IJ0opvR3A2wHguuuuw/Ly8vOOaAsttNDCCxlSShe059vpA9gF4LUADuWcvxXAHwH4RzJRzvmXc85zOee5l798kwBroYUWWmihIWynAHgKwFM550eH90cwEAgttNBCCy08D7BtAiDn/DSAz6WUXjV8dDuAle3Cp4UWWmhhp8F2RwH9BIBfH0YAfQbA395mfFpooYUWdgxsqwDIOZ8GMLedOLTQQgst7FRovwRuoYUWWtih0AqAFlpooYUdCq0AaKGF5wH6/f52o9BCC5ugFQAt7BjodrtTKcdj5tq7fr+P06dPu/VPIiD6/f5Y/mm0sxVYOwNaAdDCtgMxG8nISum1/Fb69fV1HDlyZBNzrGV0kplL3E+fPr2pHZ1OB7Ozs1hZWVHr63a7o3xafSWBs7S0hOXlZXS7XXS73bF2NmHkvB2TQCtELn9oBcAOB4vpeO8nLV++J4a6vLyMpaWlIsPjzInnl8/p9+TJk3j88cfx3d/93eh0OmZZkXZwZk510i8A7N+/HwA2ldvpdEbveJn9fh9nzpzB7OzsGG70/uGHH8by8rKJY6fTwYEDB7B3716srKyg0+ngrrvuQqfTUdsXGQ8N11qw+tYSgC1sD7QCYAcDaY+SQXAtVmq0NQJBY9b8HfAcY5yZmcHc3BwOHDigMkICSk9peH56LuvdtWsXbrzxRszPz+Ohhx7aVLesTwIXLv1+HzMzM5idnR3VOTMzgz179qDT6YwuXi7PL/u22+0ipWTi0Ol0sHfv3k2CCwDW19dHDJtwovq5QKK8JYEn8SsJYwu4EKHx0Orv9/ubVixemZF6W6iDVgBcRqBpr1sNly5dGruXzGt2dhbAQKNdX18vMhCrLIv5UTr61Zi/ZBqcoVE+ek7PODPct28frr32WrzpTW/C5z//+U0CxQLCdWVlZawfut0uzpw5M6pzfX0dDz744BgT4ziurKxgz549I4FB+WZnZ3H+/PlNDJ63c25uDjMzM5uY6NNPP41f+qVfwm/91m+N4SmZL8ejJPC45n/mzBlcunQppMHL9zRectx5+SQUacUyMzMzVr6llFBer94Sfq2gYJBzfsFcN998c34hQ6/Xc989+uijeWNjY+x3bW1t6nXxNCdOnFDT9nq9PD8/nxcXF3Ov1xvDyyrr+PHjudfrmXXz52tra/nRRx8N4Ul1Uh9RHfz/iRMn8sbGRj5+/HheWFgY3fN0vKwSyPLpGZVJ/UbpVldXzbbwvtvY2Mjvf//7R+Nq9T3HWbunPuTtscqS+a32yjyEN91rfWLV55V94sSJfOzYsVFfav2k9T2l4f1Xqlu+P3HixIhOJW5XMgBYzgpPbVcAzxNwDYVrMJophJsVpGZZU1cpH2mYmkbY7XbxxBNPjPDjeFmQUnLr5tro+fPnR2aTUlsszZa0cmCgyADAvn37cPXVV+OGG24Y2em51uvhb5maOp0Out0ulpaWcPbsWQAY9Rvh8cQTT4zZ6nlZZJ4hG/0dd9yBc+fOqasZWbe853lmZmbGHMvW6gmAq/lLExfloTEHMNqG3fJx8HIkyHr37t2LlNKoXKr37NmzY6Y1Xg9v8xvf+EacP39e1eS9VQDRO5kZNRNnCa601UMrALYANCKhSdzv90c2T41ZcmLfvXv3yKFXA6WoE5lW4t3v93Hu3Dm86lWvwq233jrGiLxyyFzBnaQeftYklmm5Q5Lb1U+dOoWlpSUAA8ZPDHbfvn24ePEirrvuOjz44IPmBPfMDLwuEkL79u0bY/wcdu3ahZtuukn1QZDfgAsUEliluum9Vi71Y8mkI/GVPh0ycUn/BafFnPPYvWbfJ1OXBVy47No12IXmK1/5imrek/XwMi5evKi2O+LT4e84bUXNR5F0NLe9ci4b0JYFl+t1OZiASktGz6xCwJftZArZ2NjYtDyl8qKmEg/X0tJYLu9LS/kSREw80fI0M87x48fz0aNHTRMIT6uZULR+rTFrEHBTHTeR8bo4PXBTX6QvuGmN2lIyDXllUnkSJy0dL5u3TzPDURqNhjWcqC2Li4v5+PHjI/qPtE1rp/Y+0i6vTAv/0tw+fPjwyHSq5S/xh60AGCagbWfqNdd2C4ASMybiiNjC+QTiTCNC8NPEW+JrMUaLcVlti6Sl9NE28Lasrq7mw4cPh236a2trjezYHsPg7eQ2cymUNKEebTcxxrW1tZHtW2OMnDFbeEsBWMLHElqWoOV9YYGlbGjlloQmvSMhIsfEGzcPvDGL0DbRWqnsCA1MS1C0AmBC8LQKel5ipJSOE6zlzIpq/SVNq3RP+FgChxO8Nak0vCO4l8qzgDMd6x0vU2plJQbFtViLWVrOUSkErPwRRySVSzSiMWCeTgoebRw1XLz2ev2q1S/fc5w0564GWjqPodMKQhOKGp4R4c/nRK/Xy8eOHRtp7h7dWnV4NGRBDR8oQSsABESX4PQuMlhyaaelJ42OR4Ro0RAlBu7hVSJQSaTWclUrz9LYZPkloP6aZpQTZ5iy/dTfUdworWTUFqOTdWlaKM8vo4is8sjcVcK7xOy9NPwiYeApJtrc4W2h95y+rSgySUuyj6Xpzxp36ided2nlpgkMqluOO81ZXoYFEvfoeGgwDeafcysAxoATJt1H7PYRjc0DjYFIYpG48Xwao7c0C0s7tiZ9lMFwjcua0BauMt3CwkJRE44IPov5yjwl+7QsX6OLWoZsTXpv8stx8sZnUiGs5SNzk0ZDVmioxXg5fcvypP9EEwZSEHLBycuh8F+PNjV/EceNr7bk+GihyFafllYAXp6tglYACOADevz4cVcL5sxjUrOFpYHw8iztS+LPJ6kULl68Pk8fZRY8v7YUttpi4appVZqJwlvJUNklZ66GW4SB80trfwkiSoNXv8RFSyMVCqsfI3Xwdnk2bjn2mgNXY+Ya7tJ5Lt9LISMFivxv1acpVrIfLFqS/EHr29KzEmwl88+5FQAuRJig1EYiZfL/mkmCv+OaR1Qjl4KCazGS4ZZwrHmvMSfP8Ua4UXpL8HiM3qq75JCzJrVkKFq9VpuizP/QoUOjD568Mrx2y/6V6Sny5tixY6rQsoSopoTIaCMLNJrVTGWlSLDSfJKCjeMc9SfwumrnLcdDM++WaESbx1FeM21oBUCerGNLE0qm9Zxykjg4w6bJVNJUrFULT6PZUemdlsdqJ588JSYWnYw1aSycSmV5AmJjYyMfO3ZsxKRLQqsWer3eiPlr7dHsw1IT5b+aX4EzWv4ltOZ7sHCU9xsbfhgjT+fVYZlhtLK0ubKxsTEWLKHhHB2X6Jz1yvTGT8snhWLOedSmUt9uhTloxwuAUsd6klnTcLQ0HKT2IyeuRhz8v6W1Urk06T0BYDmYNdORZEaUlhjZ4cOHx9qkaZCRfvHAYvQaTlEzTGnSl1YANQzHGgsCzQZNz3u9gTNeMk6ufWr0R8/p0mzkEqdSO7wVgMb8LIiOPTcD0dxYWFjIi4uLbkhlbR1WXi6EIoIzWq8cpxMnTuSjR4/mhYWFicanCex4AZDz5mU1f764uOjui2O949oZL59r8ZaWE8FV1iVNAZKRSOahlSMng8bk5ETnZWpptf7T2u211xIo2kT1Yqkj9ZVAMp5SWywFoySQuWCn7xqkMqA5na1xKjGtxcVFc8UThZKJqLYsigbj5h2KRJIfrXGICmnN/m/RG7+v8YmUgNp17Ngx9yOxrXIGtwIgj2uPUqO3Qt8ILMKi5bIkLi8kdBJi0pgH15RXV1fd8LMaJ7bGdCwmZ5mt5KohWp+Fp9R4tfZZzj6vbRLne++9d5MQ0ASwhRvdWxExGm3Q5m6aiUfWozGviFnCY0ARIKasfVNhMTULaJ5w/4XMFxFqhJfHQLWVBC9bG1v+rU4kKsrCj/ODSHtaAbAFAkBqYJLYahgj5aFytQnnMX9NG6HfWg2A5+VOYAsPi6FEwdOAtWcyWiPCJHg+qw2eZhZxfpe0eYuhaLZ4ni+6zYL2jPKWzIG8DMnweds0c8YkDIYY4YULFzY5ty3BVqLn6GrCwpvGShPYPB+P4uN1877iyhPPq80Z3r7SqtBaxWnQNOigBDteAORs2wFrHYs1xG4xEet9E/MFL0OLWOBA7zUfQE09Nbhp/0tlevhZAlObuF4/RMZLY1Al5h7tS628qMCg51yDtvBrMm5aXY8++mi+cOFCPnHixNRWAJ5SwGnA2ieLaH11ddUtf2NjY7R6kYIyZ//7EWtcNGVS5pPKiNdHGg7TGLucWwHgMnrJnCM2R41RexO1hBvVPYl5hq75+XnT39DrbTYDlDS0UluaMkKrfprYmt/BqoNP6EmdlLzM0jcikfK19lmMqBZKAl/iMglIZ21T8IQV/V9YWBjb60kbT+pH7UMy+Z87lq1x0WjdWu3RSl4LdSX6lf4WbazlKqSGr9SAJQB2zHbQfP94fgat3JP97Nmz7n7itH2sttUy3x6XyqPn8pnc+lduy+uBtS0ttevTn/702D7rcgvhubm50Xa8Ej8OdFzf008/Paq3dGIXPTt58iROnjw51l5r+2Wrf86ePYtut6v2Nd9amNrAz1Pw2lVqN9+SeN++fWN9xXGUz7T2WQe+03741tbd0S2D6ShNrQ+1NpXaob2jMyzOnz8/2q+fz5nSVtvyuaRHjYauvvpq3HnnnaPzG7QtuIHBNuCEF5W1tLQ0NrdpHF/60pfi5ptv3rTlNLVBozN53CjBzMwM7rrrLuzevXvTO5pjvC56zseaz3mtDp5vy0CTCpfrNa0VAA83szRpfm+VV6rDMhOVHJzR9kgg7UGLYInk12B1dTW///3v3+Rc9srq9cajTaivS3slyVWat/z22tB02RypRytba19ppanRmbYSjNAiz2+tKLSyPPMLr1+zn1vtLpVttUMr24uak5FgXt969cq2RttggTfmGm7TqDMCuFxNQAC+CsAnAHyolHYaYaAak/HSN7F5RyahRYzSCVhTrydcZFrtv4UXMX/NmetNcrlkjvSjNSGmxcyt9167vD7iTJvnLZ3rIGmE8nBHvmy/ZyLgTFpzAMsdP+m51bYIQ/Xe1c4ZL5qr19u8O6eMRLJMQNH6a597wkQKcIsuSsJhmnA5C4B3APiN50MAENQ4QCNCIvI88ll8r2eH6UXqKQkX+rUiN6yJpDmm6Fc6lC0cI0LDyjttzcjCx+sji/FaETdaJJDEXzIKuceSFJqecO/1em7ILWdG2vhb/Vxi7pG54dnxvXK4D4g+RJTtkfmJyXofSXoMuAQkjDw/IcdPbmAnd4GN8KKm/iEOl6UAAPCNAB4C8N3PlwCIaAuSsLxJF3HAkTajRSrIOmTImMcAow5PbaLTc8vJK4nVKpdMPSVcmkYd8T6YJlDbS8KAcC+FsHrMJmIOkW206rQEUUlQWfeaINCe8/SacLTw5wfZRM2AWl9FTpiTZWhtscJ4rXHSBI11/oDVt9Z7KbCteRP5rqUEl6sAOALgZgB/0RIAAN4OYBnA8nXXXTdRJxB4DF4jBI9JRuN7oxtjyfIt+6ScfKXoDG2ia7scltqmMSS+FC/5PrQytPLlhK0VAqX00sSg4WnhpZVdalNJeFjMR96XGLJVdomBWIzfwzvn8X2pvBBLrR+0uVf68lfD12oPrU4j0X/WveXbsejTWl3LcrX5a7XlilwBAHgTgPcO/5sCgF9buRuodS8ZoRysmsFpwiSs0DSZniai9RGS9kw60konQ2khh5RPm/gcIhpc6eOlqBmp1xs/wcmrz8LBiv8nZuedXyvxizBuj5F59/RMMllJoxGaLQkTeU+//LhND0+vfXKsS3kkc5cgaTuKh4aXNc7ar+e4lmWU+ivahxG4HAXAPwfwFIDPAngawJcB/JqXZzuOhOQMjj/LuS5u3yqbfjXbv8U4PGYhidXTMDQitLQX0vS1fWQihBxZoZQ0VY/hyjZYzvTIWJGg86LESn1QsqV7fc3TRIICeEw6pbfqK5kUtHzcPMnHiZt4ZJ01AkBjrKX+9Zh7iZa8NtJ9SZHSyox+MxIVSNFglQhcdgJgDIltXAE00Q7ombX/TbRezhTlNrGaucTSHix8uYDyVhJeGfSf8JukvZ4gknVauMjySv1TYsxWfZawitJLaXwiUSukGET9TDROluCyaCHSHi445KlZUsmIzA1JD5L5eqtuXrdXvvVcK0uL4qqJeqN+iJz1HMGV07dnFotCKwAUkJK+Nq+3qx//tUAyaD6hvNOLPA3HYi4RG7PXVun44mVr6b2ytLZ4QsF6b20PQKCZlEq4WeVquGj11ggZ+pWMQ76voU8vfXRcrLS0WR2tNiRwm78liKhszy6vtUFLp+EaFdD8P61s5e6fGo6lsZVCJEIHnnmQ7idh/jlf5gIgek1LAEQHqTTQmpbDbcjRT/Q1IpC2RFmOFyXiTSCtfAsvrVyp5dVsAW0RubU6sZyHvI3e2Fl7HkWYUonByPRRLVHDUduaY5Jzh2shEhHD01jbH8goG48xe3m9MS05Xmu37ej1nju4R+Kk4VzjTJ/kzIppjS1BKwCGYE1WLWKhZG6xJg4RU2Tf9dJAc0ZrTSreBm1/Eo2Za1ocZ35yKauFhFp9Y0UCaQesW2fCapN8Y2PwkZM8scqaQJpW7WlxJcFgpY8IXI+GtH6N7ChKNvia8Eitfi1CS2PQ3PTjMchac6Ost5TOokN+pkIEKF/kS2ZK55m2JlEErP/RKMMS7HgB4GkjxBBp2wMrokIjeGuiW0xTpi3FRRN+WpQPpedEIhmKNfk0IcEFjaWRNiFqXgbv28XFxXz48OFN2/BqZVjmslqG7j2PtCXC3DRGYLUvIlxKkVXeORa8PO3cCsn8vagaLnA0IU/CmR+FKdsj26bhKdtbw5xXV1dDdFqan9Zcj6xSSvXKe2s1o/GHprCjBUBEAyGCs7aM1ia1Nzh8EK0veyXzLjETS+DUhCTKvBbOJe3ZY9YWaCsmS/O0JqX2fhoTRANNaGq+GYthyjQ1Qoq/15z59MwSnho+hw4d2rSNs/xvRRDxOr3VAikrnmCjMqxtrOmjMc3saNEe4U67cJb2+ZIKiQdyTtWsMOR9aSUt55kWDNIEdrQAyDnGMDxNTSsj4uQirchbVVjEUMI3mj4SWuk9l9pYxGZsleeNA5VjmbA485hEEFlCRhO8UjuWETAebURWKqU+4wxDmvgs85kFhI9lXiN/hKdQWGPm0bBGj3xeSDxo62Z5ipbmnLcc/RqeVC4XoiVTGz2PrJIi/cL3e/JoQxubSYTAjhcABKUBjBC4TOu9y9n3K/BBlsKhaVtk3U2Ps9PyS8ao1Rmpx8KdiN2acJqmVDM5Lc1Zq0ebqLIPNHNIr/dc2Gxp868SLWoMT+JSA9r4WcwzWoc3rt69puFrePCyPRNWCdbW1jatguTXy5rw0sJStTGx+kUThlZfy/zU5kl9Aa0AYOB1ZImZa+8ijh/vvbTv1wy0x5wIvJPQIvbjGmZv1WMJIC29F9qplWH1v5ykNJnJ12MdjWkxAyuthiOfvB7I/KQdW0xQtj2qKHj3Vh5r3GoEQs29Nx4cJ482eJ9ZfhOLeUtBoJUp8dDMglpabQ6RYNG+q5DKRWSeetAKgAB4E9+7L2mgEcK1JrOVR2oPHG9tiW8JnloHaumdl97TFJvWbTFJPvG46YSEi9ffJcYbbb/XRi0daagHDx4cM4FowB2uHm2WcPCeaxFGkVWjVV6pLjrXl9fjCXitHM5UuYmJ3ked8yXgqxe5S6nXZ3Js+GZ5VBZFucm+qO1zDq0AGEJkMspBlM4vbpPTiMoqk9/XRolwhtbr2ZtUWU6maH9wwtYcUBFhppUf0axK+FnjYvW55jwt4WN9BOa1X0sjxyXaTrkC8PrDcthGxkfSrtYPFDUk+yyqjfJ81jYJHAeuCUuzqFe+1q5e77n4fh6VVKNAeO3RzFYEGt4ar+DpeRmaI30S5p9zKwByzrGlPU/L83CHmzyI29MgIlqGnGT0KwmstH1sr7c54qhE4BIPWs5aGpjWPi1ENCIcvfGwJgwvS/uAh9qhHVou+8Myb5QmXYkpycNKSkIlClH6LdXDx1YKSp5Gc1hGGJM2drRPkTWWWn5P2EYc4NS2Q4cOmd/kWDTG+4eeWQ5jqWiUIpGs/tKeTwtaATAE6XiywCPUEgOo0ZD5EpATnvz4S95bBCOdVRoh8nq0iS//lxihtu0uN7XIPDI/x4fq9RgdjyLRIoYWFxfzoUOHVPsu9UdpWS1x0t5ZY6xFl3gC1AKLBkuCsVSOVGg0bdsThPy559yX6UqmEu25RoOkqFy4cCFkGiF6scCiMemXs7ZDkSGrpZULz8vn9iRCvQStAMh1GpS1NI7WE3lO9Wjn7UrNjF81e6aXdsXUJnlJ++K4a4zCEgoyj2Vm8xivXKVY/WpFi8iP0TyI+EhKDLnUb175Wjp+ae3zGLKGO28D/9K1iS/MS1NaSeZsf8SomWDlCkCrUxNU3tzX8JEKkWZ6lffail7DLYKTxL8ptAJgCBqjs9JFJ2upHrr3TEFRoizhHcmvpeHttKKRIpOfgE9Mzwkmf622cRxLNugSw7bSavk8zbG0UrHKtfpAE1y8Ls6ka+goSi+ScUma9WjDAklbXt1kquGMnvJwJ6l1kA+/93xklslSlqHtxGr5XegZrUzJf1LjEC714yTQCgABGpFY6bT/pbKbRhdo6T0casqMlENaTlSAWfVozmsrreVQJ3z4fw8PPsk9xu3hWWIK8l2pnggDJFpcWFhQ97KRZXgCTnseGTvCoWSys1YIEWXAw5kYrsXo5QrAK4u3W77nfeitjDQ68ua19HfU0Eyvp/vurLY1gVYAZJtIItK3hvlrddUCJxZuV7Q0MgklJqIxNo1AawmxJLS0MbDMMtzcU2KkHHeuuZVwtiYr3cu+aaoQRHwOlM56J5/x/1Z0SU3QgzzW0UrHceKmNW9c5FwrMWDCX2tvLXiMu4Sv9p7/j8yhUp1yEzuJQ+0OpxrseAEQld5avuiBDBFNqwZfPhGsZaPm4JWMk7+T/y1h0KQ9pYlWYlTapJGOQ69uyZxK+JPZwQtPnEQYemVF8vC8GuP18KnZJqK232ReSxHh5Vr2862AEuOuTWulsSJ9SsJeliMd5LzO2h1OLdjxAiBnmwgiy3j5BWFtHRGo1TalxsjzWSuGKM5c+NQyO3lvrTY4eHvMlzRYj2GVtFnrlDPqQ2vJXqNR8vIi4PVZxH5MCoAmPDVBqfV7pG1WelkuF4BNhagGlsKgCUwL74hpzBprTjulMfGghN+kXwHn3AqAnLM+SBFpTY6dmv39m+Cmhb9puFD60olY/F5jHhrj4GkpnLEUwx5h0F5bez17Z0auPXqCzJtEtYf+8PZHnXYWI+UC2TvlTZYZxdeiXy8KimzbEWcoPbP8KlrIq2XyKfWXBVoarT+54Ov1eqNvDyzaioRrynbwZ7z/LCtBDa169U8KO14AyEHi956E5Qy5NClriJrn88rhaSTRl7Qb7RlnBlLgyLLp1wubJE2o5kMnXibda5OH+pw+rCo5ga32ys3lJGhmHmJsJAQ0oeWVI8vz6rFCOGvbVkrP81l9rrWj1+ttOrWMnsuPImVdJfMq/9X+W2UQg9dwJ5qk70Rk33KBrH2gxuuQY2PNTW0uWqGvNXtdlRSYKOx4AZBz/QrAGmwrTc51G3RFnIIa4UbLLjmi5HtLS/IYFBFoxIzG05cOwpF+jBqHJpVHdXht0KJNqA5ievKr4tKRiJE+oKU9bU5Hz0ttk0K8ljmUGI8l6KSmL/GpqYODHFe5O6c2nyIrUykgZN+TYOdnD1jl1LaJ1yOFFFcsKF1pz6dpHArTCgAHShLYGiRJHJSu5LX3tEitbvpfM9kjUSdR+2dpqVzCSdvCItI/pZBE7R0vXzMbaUzbcjQTE5EnrnmHokeUCUp7/PjxfPTo0bFNy6JjFqUhnje6ypDMsqYuqw1Wn3DmK5kdv5fzoORP8PqS+oEcrJET6TTcLeDtkf1H9VpCT2vDpA7gnFsBMBFog6RNxpzH4+gt4otqHJJ4IuFgNZpKVAA10b4JpF22qdPNS8MnSu222qV6+Ha99Cyi5UfeUVmcmdWOb0SYUjtK5iINvygjL+FoMVg+VlrcvfzuQNOIS0LHatfGhr9nVFSYc5DbQ9P4WjjxMYwESzSFVgAYUMMotEHSiIGISzvMg7Q+a9dOLyQz4oyNMM8ISG0lan/X0mgTwIMam7a8jzLFSNkkdL0P1SKg4cTLi2jmGmPQTvCSeTSHLC9HS6vdW2mijNJqGy+r9IUz7y+rHA8Hfs9XAV6fWOC1l+9qSr4Iy7yqfQMjyynhEoFWACgQjXLhYDFnrVx5sDoNqnbeKaXRmIRVj4ef9a5mSc9t57U4RJms9r8Jk5Vll5b/3gqsNCa1uEhGrTFGr1yOs3YyVVNGJev3aE+WF2HupXbVpo3UZY25Vo9cWUxKd7xsjo/mxyDhsLCwoPIfyzfVFCYWAACuAfBV0fRbcU1zLyCuCdQSaUkT4bt2WnXLZ5q9cJJthCMaV0Tr9JiAVU+pbP7eipTQ6piEmfBx05y4Xt7a91r6WkFi0WlkE8AanLg2zDXRprQxCXjjbuHE02jBBZb5UivbUnSi7bQUGQ33Xm98O/OS4Jq0r6sFAIAXAfghAB8G8AUAnxv+/g6AdwP4s1berbqmuRso3dfklYxL+6qRCLGGuVgCpekki2oMpQkesdt6y/9S3ZwhW3VLJjVpf1hjXzPJvagMjR6sNCV8tdDVGoEbaZOngFhCeZJ55OEh/TdaCKbMYwUXyDK0/1a/WvRn4S3ngtYvGl1wRdFbsU4DmgiAjwO4F8BeAC9iz3cD+EEA/wnAD1v5t+KaVhholLFqBK8xeo0QrfJKDLPpZJqEodWUIQWcx1AjtlqL8XiTp4SjBk2EnQaab0cyUf4bdVhKHCOOd4+BeYwrMjaSpuVqlGuutQoPf+4JGU0AauVoAokragRaVJGFpzYWmoKmndMRdR7LaCAJGxsbm461bApNBMBV1ruaNNO8prEXUNTubzE6mYZ+S4PP05VwjAonjeAtXEv1aUJOttO71yKWtENZtPbxie59VKYJhmnZoT1mKuvT2qSZUSzmqN1raT3tUHsux9Eyr3mOSQ1PKZT5HPLi1D3znreqs+aoRRMy0ibnrEadeePhaflWW+i55pvR8JS/pZUFRSlNwz8xVScwgJkm+UQZ3wTgGIDHh2alnyzlmdZeQJZElcQW2bgqynwjDDbKyAg3SxOvIRYpSDxtqlQOBx5i56WT/eJ9tq+dK2sxOq18XpbXjpLt1mp7RGhZ9WkmRU+4RYWh5YvikSoeWPTAy+Uhj1q7LBylYKEyNN+cNRakaMhzBEj50OZHVFhpfcHbqY2dRgueELf+y7DdSZh/ztMXABeb5BNlfB2A1w7/fzWA3wUw6+WZlhNYizf2JrulOch0kbrlBJLakDXg2kTU0miMwcO3xORKDKzU3tpnHhPnH2VpDCmCB32X4C2rp9V+jl9UsHOIRirJcvi9PACF05y2cVoEP01hkPHvVnnauNXY27VnpIVTOWtra2OrTz5/PcHqtZ8zf2vLFKtNXtm8L2TYpzafm0ITE9A7jOunAKxb+ZpeAD4I4C95aaYlAObn582QPEs7aPI5tpWetFmOAxGytzQuEZG2KpCEaC3LrTInWXqWhFiTsng/aRpZBA8vBHcaONeMm/VeE3Y1ZfJ0dC0sLIxWUETTXGsumS9lf0mtt8ZhaTHH2r7jaaRA4u/lXIuOqzavIspGTR05b/6AjMqIbkVfgiYC4I8B/AKAn1OuP7DyNbkAXA/gIoCvUd69HcAygOXrrrtuok7I2V4B0K93gLpML//LekoTWCNGS2OIaAJafk0zidh+tXJqwCL+SZgZL5czfXn+MAdP4ElmJj+qatIH2lh6bdX6ibYoWFhYGGPUtdogH2fSio8ePToqR9t3p9Q2b654+eR9JG+EgUbmDsfdW/GU5mqkbRJqTDiWY35S5p9zMwHwMICbjXefs/LVXgBmAJwCcGcp7bQ+BPMGs7SlK58sHoFajEkrqzTImhZSap/lfGui8dRoMrK+Jrh6IBkh9zXI9lqOWUswSSZi+UKiglgbg4gt+NFHH82rq6ujcmhDOktAWf0kPyRaXV0d27lTE4qlNtXapS0B7JUjlZfS3CiNq3fPn3vatoZHRNhrJqEoTtOEJgLgVQBebrz7M1a+mgvAVQA+CuAdkfRbLQC8dzKcTG5I5Wl7HiONTkIt0sHDX5ZVY8Yi5qmVy++9yVTriPbuCWiZTJt3WY5hbmKTKwWtbTV4ldqmCV35XgokCVpUiXaVFALNzxU92U7eU38vLCwUd3LV8ml9YPm+uOK0sbFhnsMh26P1fdTcyfNY9VgRRJYg0MZaCvFSAENE4YiAJQBeBANyzk/knJ8x3v1XK18UUkoJwL8D8HjO+V9NWl4U+v0+Tp8+jW63q77vdDqbnnW7XRw5cmSUp9Pp4Nlnn8XZs2dHZS4vL6Pf77t1dzod7N+/f6wO+k94aWX0+32cPXsWZ86ccevgbeN19Pt9nDlzBl/5ylfUPBqsrKyg3++P3svylpeXsbS0pOaX7ZRp5L0sW+uHfr+Pc+fO4Y1vfCMuXryI2dlZzMzM4MCBA7j11lvH6lpZWcG+ffuwd+9ezMzMjMrKOY/el8aK48X7QBtDD3dJa/1+H0eOHMHTTz896sNutzvqa0o7mB6b+4fK7Pf7ozSSlqn+mZmZTe2Zm5tTcffawNt81VVXYe/evWN9Q3RAeXh/7d+/fwwPKp+/m52dHRuTnDM6nQ5mZ2cBAOfPnzfHa8Dbxvup2+1iaWkJAEZ4E34azcrx1WBubg4HDhwYlcXr7Pf72L9//1jfUV2nTp1Cv98flZtSGvUf0eLs7Oymein/yZMnQ7ylMWhSIT+nob8FwGMA/mh4LQP4W16e6AXgOwBkAGcBnB5e3+vlmdYKoIlTV2r7chMnLzrFkvAlLVu+i2jllsnJ0ka9Pd49bVe21cJLlhFZHVj1lQ4s13DXlt81416Lr7by0mz8hBudCXDs2LG8sLCwKaSRt10LNdSiUmo+PrNwttJpPrLFxcWxVZlHM1p98plcrZTi8zUc5T5c/JsFLzRVw8szBW5sbIwOniHnM6VdXV0d66+1tTU1jNmC52MF4DHovwXgEwC+C8CfAvC1AL4bA3v9VIRA7TVNE1CTgzRo4DVzjMYwPeYrJ24UZxmDbBGmlobjpPWDZJyyDbKtVpvlstwTEKU21+Tz+l9rb7Tc6HcDXhpt/CkvMQ2iLU8ga/howqIklC0asWz2lgDt9XqjMw3ktwU8nRfZVhL4Flj0reEoDwfS8ni+Og1nbhajsslUROZK6hNy7M/PzxcF4FZAEwHwCIDrlefXA3jEyreV1zR3A23S4VziW3vza8+8CJUIHkRw8ivZCCOThGxFNEkBpwkXwpc0Vsv5qsVc83Z47ZS4Wm212lwqv8le8iU8mggmq69LeSOKQwnX0keEmkAh2tNo49ixY2OaryxLK5fS8O22rXZ44AkzLY3XL7ycCE6UR1Oict78wRg59rV+KK2aJoUmAmClybutvLbrQBgJnpYmwSJ+/i6q5ZQYaBT3CLFpworjsbq6Gp4kOeexA7q9ftLyWtqgFtZaKzDomWUWkGVGndslwVRiSBwk7Uhma9Vfa77zaJj3Ec9LUVgaXUWiX7Qvv2to3Zof0THThLDG1L2yZL3a2FIdWrw/T2e1bVJoIgBONXm3ldekewE16cho5E0phKy2fItB1GpF0To1YrfSkBZaYkRW+hrmTM81+zdpVZwBlOzQWj0cP6s/SjjK8krRJ969F7ZKfRGNoy+9l31n5dGYJJ15QWYNjflZzNNLbx104+GmtYWHDFs0z/c00vrOUga0fuTRZ9bYEb5em3i/RE3EJWgiAL48dNDK65MA/sjKt5VXUwHAGXSp8/nzGju9pVWV8tR8vBTRCKitZJeM1CkZZ4mBEo5y0nn1WL6LKGjt5/haGiDP79XPHbNeX3n48TwybNhzhPN7Lows57XV31GoVS60NlG7uGNV0oNk4CRgtfBdmVcTDt6ckKtyHrIq7fFaeKzXV5H3lmDzhI/VJjKLReZhFJoIgFd6l5VvK69JVwBySRphsnLZG6nHM/lIsOyBUhv1IhUkkMMpsrqge8k4owzGE0wl7aaEl3xuMT4u4CNCz2qjdlBMafJr5WtCxFvyy3Zpppaa9ln1lNJq7ZI4aeXIeUXp5YHvxITJSapFznk4SXxK9XPHNI/SiSh1EbomISdXEJZAJ7y8+UxjHd2sLwrVAuByvKZ5Ipj2nyZqjZNGA0uDt7aZkM88E0INDpH0EeYRYfBR5u/VpWly/HlpMkaYGr+Xm6RZgltrqydUPNOFxDNKWxxPq/1ankhEl5WHz4ea8acy+PGnOT/H/OS+PDV+MK1dvH885Y0/j9YXGXdthcfzasLHE64RE2ItNFkB/B0A/zO7/zyALwHYAPDjVr6tvLbaCSxteBxqB0AjHmmCkuk0TUb+rxFENcxFw8kj6ggz1955DJaH0WnEr03optET5MTW+txrj/yvMQjP0R3d5157ZzFCC4+cx81k2nha+XN+bkM67YhTD2cSGr3ec9tYSIYnGajXbn6vzYtSPsvkGRVoMo83h6UAlXQiFUzLzGyNU1NoIgCWAPwP7P4Tw9+XAPgtK99WXtNeAVjvJbE1LUcOmmZikBNUajVWyJ7Ew5oMtYLMYwpyuVvbPxYhl6JFeN6atDyNHId77703r66uhvpEprEYcMRM5+HttUPDg+5ln3hhnhqulsbJVwBcsHl4kemF7zpK+fgKgD5203bF5XVbjJv+y+NErf6WeMp5HqUr2XarL7S+pv6RAQeeUlRj+vVg4iggAPew/0tWvq28JhUAnlMlojlE3lll9nq9UbicLMdjqFJ70PDwJnDpWQlv+VzTJGvLsNpQAjl5vbZQGnI2Wg5JD1cPD41RSKbi5a+hQy+N7D/uELfS8veW85t+uWLi7btjHRfJyyFNlzuOpYChOi5cuDCmcGj9XbLna8xXChAuhLiA8j6m0557tCnTl46C9OpqCk0EwHnj+YsAfMbKt5XXtI6EtN7VTL4oA+QTTTpmLe1Eg+hSMYp/CUoMzGPCNQyuFs9Sf1mT0ysvKoAovRWmGImi8uiG42IxWkuwU/1yWwhvBWFpo/Kr2dKKb2Nj8+lvWt08bJhHApFiRO3jKzRKt7CwoG4K5znX+X1J0FmC3GuPfBcxJ/K+bDJ/mkITAfBeAP9Uef5PAfwbK99WXtM6ElJ7FulsTbJbAyh3NJTLVa8si8g9JjVNoimV5eHK08j7qKDVzGGUrnQymyfkLYg4ObW2SM3P2uK4RC8SF66R1pqYNAejR+OSIRFTJjxK+blA9PqPyubmno2NjdH+OPKrcimU5ufni1/fW33EBV1U0GtQoveSsqEJXKs9JYFUC00EwDUA/j2A8wD+0/A6D+A+TOFM4CbXtJ3AUYbEn5U0DkoTCXHzmCRn+jXfItS8q03vvS/1mebc5u+k1nrhwgXVaSntxRKkqYKXWdPeaB7eLu9rZY0OvP8yPTFML5+FkxdTrgkX3tdcebFWExxfz1nMGT83zdGmaXzeSBwXFxdVe78cJ0vRIFNTdBsN650X3FBa/eWs+wFL7ZnGqWCNw0AB3ADg+4bXjaX0W3lNYwVQYlzaIHOmHIkeqDUpSJAMswnzl8QviapEqBE86Xmkz7Slr8Vc+L7/FoOSdn05YbTnXtssBl0SnBpj5r8Rs6PVfwTWqsBbKXH8rT7Q+lVrV/QjOekA9uiCzEG8DVzAS3rRTG5aX3nPCEcrXVToa88m8eVFcJyE+ec8gQC4nK5JfQCliBqe1nrmRSbQfQ1T9eyK1nttsnrmJEmc1ufvNXhqjFnLJ3+tlYDMTyGI3oZz/GMZbQxK/cvLsk5vK2mX0hGp5bHAs0dr46elWV1dVU0jJeGj1cvr5DRSY1YjTbuURjpneXpuKuFtj8yrSL/ztBY9evh79VrvZH9q9REetTsVR2DHC4CcN2t6GvPyCE0yC/5cllmLj5dG/mqCzCNcrYxaArMETikMzyvHS0OMwJoM0q/C2yYZh1a+JbStfrSYhfTtWG2k9lg4WHXI8vj/tbW1fOzYsXzo0CGVQdeu/KwAhej8oPfRcxusfuC4RFaqUvjWrG49RYHmmqdAREHrT0vQT+MQeAmtAFBA07C8D3UoPe1saRFGRAvxhIWlzcmJ7BGvVd8kTjBZXo1/gvKU3kkh6+XRtO/FxcV8+PDhTT4ED5da7dJ7Zgljwov3lcW0rbo1pzA5Uj186Nfb+Mxjgvy/toePTE/779Qw4Zr3vI/J7GSZ4aLlWmMrHeH0fJoBF/L/tOYoh4kEwPD0rr89/P9yAN8cyTftayu+BOYTiwZa09R4Ghn1oBGHt9TjabVnkYnIBVWEyeU8ICzrfFULHwtqibUk8KTPIxqZI+vf2NgYO53KSkuCXGNqWj2R9lkKBNUdWQFYDFr7CE8ybk1RkOVIZubFpGvaqAxwsLT3qLIR7XNNQSAcas7m4O8i2v3GxsamczhKZTcFq0+nUdckTuCfA/D/Avjd4f3XAzhRyrcV16Q+AO0ZEar04lsmHvrl/y1zgmUXLuFV0nz55PfSyDq9TeJqtBpPSEUmsfVOm9w1OHpaLl+t9Hq9PD8/n++5555RaKA0qdWa8rhJLMoQtfbxQ9clEyj5GSy65PTId4qlPqEvonlZmqLD20NgmQA1/K3xpDHxbOOen82aQ54CQbSm4SjrohXNJFCiJW285PNJYBIBcBpAoq0ghs/OlvJtxTXJdtCelqNNFE078JbnWj2Wo0urm/ITwWkrDJq0TZbWhE90wkbLlhNlUgdWSbhZEz/CHLQVgJZH5ovirW32Rf1OX7Z69fR6vdEWCZw50jueXzNLyO8QKA0/sGV1dXVMCZD+EqkEaUKLRyFZJkCOr0cb2vwj5lxyJntjoUXlSKZvMVoPR1mPVo6FT6kNVj9OyvxztgXAi1CG/rCADAAppWsCeS4r6HQ62L9/PwDg9OnT6Pf7o3czMzOjd51OZ/Q7aPJz0O12ceTIETz99NNq+byeTqcz9r/f72NlZWWsXno2Ozs7SnP69GkAwN69e0dl0vNut4vl5WWcOXNmlEcClc/r4bB//37s3r1bzUd1R4Hj3O/30el0MDc3hwMHDph4RcsFxseJ55f90u/3N+HB05w8eXKUf2ZmZqyc3bt3j+WdFM6fP4877rgDnU5nDJ89e/Zgfn4eX/ziF0dpJd70jPDvdDqYnZ0doxv+e+bMGSwvL4/h/cUvfhFnz55Ft9vFww8/jFOnTqHb7eLJJ58EAMzOzmL37t24++67MTMzg36/j927d4/qAQY0QnOi0+lsoltO1zMzM7jrrrvG+pW3j8+hubk57Nu3b1M6Xhen6UuXLuHMmTNV40JpCUdqI+/jlNJYX2vtknOL48jrOn36NNbX11U65MDL9nDXeETtvKwGTSrwC8BPA/i3AD4D4O8BOAngJ0r5tuLaqs3gSktMgtXV1eLeI7X1crCiMKTd1yqf+yikbdez/Ufxi+TT+rLJEtbLr8VbW2YA0nY97U1biTU5cYuPHzer0D1F6/CxkmYdK6KINHmLRtfW1vI73/nO0bcT/OtaMkvRCV5Wm7V2eSsWL8qKwnR5u+QHTdavbJ9GU1qdpZBq/t8LX7baKyFiLq6BpnMwAmi6Asg5/28AjmDwJfCrAPxszvngVgmkrQZNCktt3ZK611577UjjkVK+2+26mqRVL4GmAZDmT889DUK24dy5c2Ori/Pnz7srBErH8YloxhInqe1EtB8OXIvT8tNKrNvtbtLg+v0+ut3u6NnMzAzuvvtuABjTlmms6BfAplUV1xQtPKX2TuO0vr6O9773vVhfXx+l3717N2688cYx7f7UqVM4e/bsSHucnZ0dGyfZrl27do095zAzM4Pbb78du3fvRqfTwa233oqbb74ZwGBlAgxWlrt27RqtIHib5cqK4y7b3O120e128Wu/9mt4+OGHN/VRv9/HpUuX8Pjjj4/69vz583j1q1+Nubm5sXkmx4KPP8dJzk9Jy5L+JcgVomYR0NrhzQFaGdAKiGivZlWprW45ROdNY9CkgrwwOAXsDcP/LwXw1ZF80762Yi+gJumkj0DaHCNlRKS9piFFoitIw9PuLU3J07Qj7SnhY5Vh2WE9sGylCwsLY6dA0XPp+OR9SI5RbfuIUn972rHcd2ZjY2PsmE5u56aVCncgS83/8OHDm5y1XrQIx11rl7WzZ87PrXS1CCHefwsLC5tw0uqlfvfCqzU8qD5tE0WvD7S56K2c6bfpOSDUvsOHD49W2pHVdpTeJ1lVEKDpCiCl9PcwWAH82+GjbwDwwFYIo62Efr+PpaWlop0c8KVuv98faW08PdcEShqAtVqQKwKpnWl2YZ6eA6UhXDyNnOriKwau0cq+iwDv5+XlZbXNsp+itlLr/a5du/CmN71pTIvudDp49atfjauvvnrUpj179ozGamZmBvv27RvTTCkf9Ym0RctVioUXrVT6/T5OnTo1wotWLwcOHBjV84pXvALnzp0b6zMq89Zbb8Wdd96JT3/602GNV9KKxFlq4pSm3+/j4sWLuOOOO7B7925cd911AJ7TlKU9/IEHHsD6+vrYylmbC+vr66NVFcdR+5Vp9uzZs2m1x9so31G7aaVizUU5Zln4/SiNB3x+3X333bjttttUPwKfD3w1QisRaz7LldI0fFUcIk7gvw/g2zE4DQw55ycBvGKqWDxPwJf1HlFowCfQ3NzcaKA18BgZMSHObGUdHn6eQ0pjDhouWl4yNXGzCM8nJ6/VP9IZ1u8PnIEWHl4/SSDnpnR+8vK4U5/qP3/+/MgBSeYIMnHQeMi+oPtOpzPWdo1hckcgpSGH8MzMzIiJv/nNbwbwnGAAnjPzfeELX8BNN9006gvOjKhdEg+in6WlJXS73dEvwczMzEiAUZ9xRs3HgHChPpqZmcH6+joOHjyIbrc7SkN5Op0ObrnlFtx4440jwSVNdcvLywAGptP3ve99uOGGG6pNGp1OB7fddttYu7kpT1OGZmZmsGfPHpw5cwanTp3Cnj17TAcrnzMkkAm63S7uu+++kRCnfPSOgDvF+Zzmv6RAaUJreXl5k3Kqpa8xpYZBWxbwC8Cjw99PDH934QUWBkpgOdD4e77k5VfpAxvPfOLhEYmDLrUp4swqlaH9cii1h9phnbMbXUqTw5BCFnn9fO94DV/6QluadXq98RBN7Qti+pXfg1y4cGHMXMTbRqYlab7R+pCPrzSP8P6NmMt4v1K/WB8sUXppBrT6n9pF/Tg/P79pDshLmoHow7qFhYWx8FPehxxK30fwMZH7NvHy+Alv3PFM42+114JebxA8wUNlqVwykUlTGh8b3l+cFjWzFW8HNzHz8dgKE1BEAPxLAPcAOAfgLwH4zwD+WSnfVlzTigIq2U45EWvbOvOJrJVhxUdrA2h9iRkRBJb9uilY9k9LOMk2S0K3BKhWHyd+Yrz33nvviLEuLCzk+fn5Tb4MPikXFxdHNljJrDWBwn+1cX3yySfzj/zIj+SjR4+OPqLjm9NR2o2NjdEZw1YbJT7WdyaRr0Cp3uPHj+cPfvCDY5E9Fh1Yp2dxupPfEPD6peBbXFzM8/PzeXV1dTROGn68/LW1tXzo0KGxaCY+VyQDleMsceM0d+HChfy2t70tX7hwYfSO3ss6OJ4lGzynL94fVJb2VbTsM963vAyeRhNs2hg1hUkEQMIg/PM/YuAL+HsAUilf5ALwRgBPYHDOwD8qpZ+WAJCD5GlN3gT0mLw2gJbDSk4eTYuQ5fM0EeIopdGYvMX0NQ1HaodWyJ+sz1r99HrPaZbEOLgTlacj7Zc0Tg1H0qouXLgwyie/jKbn9DHWiRMn8gMPPDBiJpxJ8cm6urqa3/nOd47ScvwoHJJWCXRvKRYSF61f6NmFCxfyPffcM2qT93U2/5pVtuP48eNjIc7SYUvtINxWV1dHbaL/1hgTbGwMtiFZWFjYpI1T6CofK+vsaT5n5KrzwoULo3zz8/ObPnjjglejaw93K2zUE9bePObvNZ5kldkULAHg+gBSSi8C8Mmc8+Gc81/LOd81/L/ZW1IJKaWvAvB/AvgrAGYB/I2U0uyk5XrA7X7axyESNGcOPZ+ZmRl99KOVz0PDNJs6lcND/zRHGs8jnYOUhr/nv/Q/EpZWCt8k2yavV/Mz0HXgwIGRo5Hyc7spgE0fIPG+WVpawmc+8xmsr6/j3Llz+IEf+AG8/vWv3+Q3efjhh0f/c86b8OEf+T3zzDO455578JGPfAQnT57EJz/5SVx//fVjdmCy3wMDR+nrXvc6rK+vj2zBNKZf+cpXxsbptttuwzXXXLPJYXzp0iV0Oh288pWvRKfTGYVHkk+CPlTj/SrpgPAim/rs7GCaPP300/jRH/3R0ceJe/bsGetfPu4555Fd/7777sNHPvKRURv37ds3cvx2Oh0sLy/j2WefHSvn0qVLWF5exsWLF/He974XAPCmN71pVE6328XJkyfHxpgHFJw9exYpJfz5P//nx5z0Tz/9ND70oQ+h3++PbN3UT8vLy5vCUckp/Pjjj4/S79u3D51OB9dee+1oLl9zzTW48847R/3J55h0xMr5Ie+5X0nOI8+3ps0V2RY5b3g5kXk7KbgCIOf8JwDOpJSu24K6vw2Dc4c/k3PuY3DS2PdvQT0jsJgXZ1RArOP7/T4ef/zxMYekZJrS4UvPJEhGSmXxXwIuezWcL168OHIsSkYS6R/rXusTzyElhSdnojxyQvv6kib13r178dhjj+EP//APxyJkuBOWJvarXvUqXHPNcx+pc6coCYnbb78dP/RDP4Tv+I7vwK233opbb70Vr33ta/Hggw9ifX0d3W4XMzMzuPPOO0eM4Td+4zdw8OBBvOQlL8EDDzyAhx56CB/4wAfw5S9/eRQNdvbsWezatQu33HLLmCOx3++P4u5TSiNn8L59+0aM6ZOf/OSYY5Par/VLznnMab1/+GX3/v370e/3cf/99+PjH//4iGlyej9w4MCov2677TY8/PDDI2bN49mJ2fNxO3PmDF7zmtfg0qVLeOqpp/B3/+7fxczMDHbv3o077rgDjz/+OB555BEsLS3hkUce2cRIgcE3CDfffDMuXrw4mg/dbhcf+tCH8PVf//UAMApC6HQ6o/o+8IEPjOHa7w8iqr70pS8BGCgKPCqP5vLc3NxICdP6s6TsaNFF2vzWonc0AWPNFTnH5Dsv0msaEIkC+joAv5NSeiil9CBdU6j7GwB8jt0/NXw2Bimlt6eUllNKy88888zElWqM1ZPMgP3hlNRy+YDLckiD41rS+vo6jhw5sql8S/hokQr83XXXXYf3ve99uPbaa3HmzBkA2LTVRBNC4toMgE1ROJoGJfOfO3cO119/vSnoOPDoDtLG+SqNNOBOp4M777wTjz32GB544IFRlEm328X999+PtbU1nDp1CufOnRsx99e//vWjD5Q6nc6IiT322GO47777RiuOj33sY+h0OnjrW9+Kn/qpn8INN9yAN7/5zbj99tvxwz/8w3jd6143GvsbbrgBv//7vz/WHmLUr371q3H27NkxDZRHpJCAWFpaGqMN3i88bJQrL/1+fxRRRIIrpYT7779fLefMmTPYs2cPnnnmGXznd34nOp3O2LidPHlytMr4yle+MurHZ599Fp1OB1dffTVuuOEGPPXUUzh58iSWlpZGeL32ta/FS17ykpGCQmXSOK+srIwYKw/BvfPOO/GGN7wBAEbROt1uF+fPn8ctt9yCN7/5zZibmxs97/f7eOKJJ/DEE08AwGgOyg/KtKioTqeDvXv3qhFBfN7KMdKUnvX1dSwtLY1CnCkd9ScfI2tu8P9eaPiWrgQ0u1Aet9N/p3aV8gXK/WsA3sfufwTAQS/P8/UhmMwT/VhDbqQl8/NIDelc4uVE8dRshtzWKSNaIk7pkq1e+6CH5/Oc2vJe285a2pv50YEUdUG2ZLJrLy4u5g9+8IObon6oD3i0Bo+w4Hb9Y8eOjXwOZNPnTmP5kRa3P/Pzai1/DceDjwN3aMpjLqleeZA4B3lcI7Vdw4HqlpFU3O5PeJL9XEanEM1SPZI2uHPUipCROFF93D8g08vx5M548sfRNuDkYyEa4WPO28Hr0OatHGs+ZvyQeR6RRXXxfpP1Sr8X92twmKYvAJfbgTAAbgXwUXb/MwB+xssz6XbQ3k6ApbzROnIuHwQunT78XSlahoATmpZHI+RSXbKPeFnE6KzDuSkdD4n0HNicIfFQQ+moIyfr0aNHR2XTBKfDxIkhyInF+4A7dmniHjp0KB88eHCUn0/co0ePjgmKQ4cOje2nJBm35szmbaW+4ZFM9F46fnl/Uvutcnk6yTQ1J6McY8JLCjFiZtoY872miDFrzm0t8sWit9XV1bywsDC6l31y4sSJPD8/PzYmPL8XtaTRtfZfO/tY9i9/xv/T19p0Spt2ZjV3XltjLdNPyvgJGgsAABsYfATGr89hEA56Qym/U+4uDDaY+2YAHQBnAPw5L880zgS2mIwWcTAJaJOH42INbpRR85DHqCCJ1OUdkkGEbp0I1ev1NjFz/k5jEmtra/mee+4ZY3I8L22i9p73vGcs2oXOwj169KgatSKZHzF3mpykSVKcN+HC83CaoDwyyojeae2mNssVB92T4NG2OvDokpcr38uoMNl+bdwJLy3WXVs18lUsbxffcsMSRLx+zshpZUfjIo+55Gk5M42EQGu0qL2XDFqmKdUhhZbWXm2+enhF6y/BJALgnwD4UQBfDeBrALwdwM8C+OsAFkv5C2V/L4DfBfBpAO8qpZ/mh2BSC/LCtaLlEnhhX1YeiZ/3nPAvCZmIgCnVLYEYuKbxckajaZ4UqilPcOIfCUlzxOLiYl5dXd2k/Z04cSL/6q/+an73u9+dV1dX1b7gdXNmRZomMRt5ADnllYKOM0XOyK2dPi1BSOYmbkbg762QQw6cafM2agf+cKZdKpP3m0VfvF1SwHnKAdVB/XPs2DH1u5HFxcV88ODBTX0oVxcRs6Zm2vFMtFoZk4AnCD28rTKawiQC4FHl2SPD3zOl/NO8pnkkpMZUcy4f+qI915ZuGmF6g8/zlQ7O8PDkZWobnFn2+RLT4Tjyj568fuQMgjNNbk/nzH5hYWEU708mCVpWS832woUL+Qd/8Afz2972tvye97xn0zcCvA9I65dChdtuOe45bz49jWuIdE/lkebLzULWB3qcGUfi560+loyf2sLx0MbPAotRRZQRqZhY9UgbOPdFyDro+wJ+wpumXHCQ2jsfMzl3vO8rSlDLiHk9llnN86s1qVPCJALgJIA3YxAx9KLhfxIAp0v5p3lNWwBE7W7ac29wPCaqPeMaCDEtTSvUtBivLu8DN8umbOWRH1TJE8ukxs/v+QTUbMbECOgZb5dMwz9meve7350/+MEPugJJapG9Xm+keXJnIs/DBZ3sH23cZRtleq0/LY1UpiNcuaDUcOVMVRP8EZD9J+nEYqiyDKtcbYVlMcRDhw7lQ4cOmTukSrCc5VZeS7DSWHrzyvNtWaApBUQH1pnUlh+xCUwiAG7A4EzgLwJ4Zvh/D4CrAXxHKf80r2kJAGJ00ltP76w8/L81aZviw7UAzYQk8SJG7B0M7xGNVjY3a5TSW0xNamdcc+P9xqM6pOlBtp1s9UePHh2d40tlawxLmhksIchNJrJe2Ra+OtNoRhPIxOQ0B6SlwUsceR9Z/hdvbLT+tJiuxnQ0uuORQCWguabhxU1AMg+nC/lOe2ZF0Xj9Ls2+vd7Ah/XOd75z09bdsg+0uj2hqK02LR4k8Sc6mEQIXHZRQE2uaZ4IxjvXi9zQ8uYc/zzceibx4FpAlKETjp5W4gHVw8+MjZiWrOcaE9PaxZ9bmjMBZzh8BWDhJLUrzSbOQQoRr1zqKxkxxN/Ltli+Gsn4NYEjaZQc3xbdWiCFqXTubmxsbPJHeOVL+71Xn8e8NFr36i29k/fSUS7rlPXTfy3k17qn/tBoX2trScBa5U561vYkK4BvAfAQgE8N7/cC+MelfFtxTcMJXHLOksYq9xKRk5KeRQjESiNtot7E1iaSJYSI+C1BkvNz9lJuZ7cmhVaf1b/aM6ufqDzuBNYYnzxO0Opbrb0ln06Ekco+INw5E+RjWMrL66VQVq1dsh3SVFDLEHh/yjK4ac4TiNRWjbESnpEVB39XY1IptVnipJl5uV+hiYM2IvQmdfbysYq0uwSTCICPY7BtwyfYs0+V8m3FtZVnAtMvZ8jaCqBknrEYkXUfnTDE1CO2Y5qgPOSSg7SXcmFAkTrWBNGWq56gkXhJ0KJwNGHLGazEg55Ljc8y72nCiP/KdnFcOLPm5hm+U6jVdpmGmL+VT8MnahaxQPahpZFqdZOzW65qZHnaO20cvFWnxUQt/Gh16G3QWGrnpExWq7O2bEnz0zI1TyIAloa/n2DPTpfybcU1TScwgWSkJQnthV9aEytSrixDS69NWAuHtbW1PD8/v8nRRu9p21xeNjF/isfWcONMkPeJ/NJS5vNWD9IHwJ9pfSL9H7wcEiSrq6ubjujzmL72XlvxWRq4plVr7eTKBQk+S2HworisZ1bdlnCzGKE2VjwE2CrfoknZrxHmJvvFml9cuFofKXrzqgYi+bW+rjHXWb6oSWASAfCbAG4E8Njw/i4Av1nKtxXXVgiAnOOdrE1KLQ3/pf+WqYbjoD23ypf4yzRk2rlw4cImBqFFTHDhZglDrvlqgoEYm9w3nz5a09poMYfI+bHyPY8u0hyVpYmpaZUyvYaXHF9NcEgcqa+8PNHQQEuIafhpbZH1WwKp1kfkCVeZVitH6xeLNj1fjoabla6EU8RcWDIzl0C2cVLmn/NkAuAGAB8D8GUAnwdwHMD1pXxbcW2VANAI3kvr3VvpLUZBDFdbupbAyktl81h3Wb8WtUDp+ElOkiFxASHbycvm+bToFc22z/vJig7xmJDGdEvgMYvSRNYYZ87jETWek1vLX2OSKTFVjYHyd9qqzTvHIULrGn1H8vIyLF+QtbLmuNYoc1pfR1bYkTZY91G8puH45TBxFBCAawB8dTT9VlyTbgVhPa9xAsrnpTBMz+vPiVWzrXsgv0qV5cs6tQNIZCQICQ3amkGWQZp8KarDstFzoPqscEKrLzQHZClPDdRMVp5GY1LR6BCvfk2IaBqiZ17jjDQqiErlev3A8dQEkCfAvS0utP7h6fn3IhHw2i8FZFPQhGJECNB82zYBAOAd3mXl28qrqQAodXzJDul59L0N2SgN1aERZ2myeYJFmnA0uzh/R4RFTFTaxwk3vi+Ppo1pzFxOcAsXma/Wvtnr6fHjNczKK3uSMjRmVcKxVJcUInLFJ+uU+Jw4cWK0AiMBXgq91dokcZJp+GpWK5uvHrXjGXlZnlD10hPdNRk/Xif/wlsbK6/8kjIT7WvCYzsFwM8Nr98A8CSAXxpevwu2jfPzeW3lCsByHnl5I3ZHSnfs2LF88OBB90MebVKXBEsNcZFWQRFC3pGN3IzhCUgrAsbDRWtHTTqr7GlMlib4yOce05KCMrL61MaG5+e/mtDhgl/6Y2qEHpXB9z3iOPHwSlk//0JZo60SU4yO96Q0IJUl/pzwtb60LvUlV7Y0uvCUg0nbNYkPYJ6bfoabwn2klG8rrq3yAcjwsUhnE+OLOMW4dmRpN95vidl4TEY+17YTsDQ6qY1p5VH+aWkqFt7RpTP/jZZdmy4y0Ut9Qhqm/PhKluMpAJw++DbEGhPm9TbZKoIrSrRFg0YjloDjl3xfuxLUVhoe3tqzWi2e55NRcNEoLMsfI+utoYMoTCIAzgF4Mbt/MYBzpXxbcW2VAMh5XKuKfuGobTNgpdXeRX5LTECbgN4yWNMmvdhp+l8KP9xq8PDj+NQwk2gbLIe5h6ulHHAmsrCwkBcWFkYf4nnCXHvOHbcUwsuZI723DqGpAaqP57fokz+XgqjWrCKf88NjLL8Ab6cWRWRt1BeFEi1a7yahye1cAbxruFf/zw9NQqdROLhlq66tFAA5P7f8s/aPiWjFMq33LkocVjn8Yy3+633NqZUTIWitPyLpIjiUQNOyapjlJLhZIbOlFYDmwJNjT1fEDCLzcXMLlWFtcS63Xa71hxGtWUxTMvlo5JF8J3+tcactMbgpSabnAkgqB9EVa2n+ltI3VZKmzfxznkAADPLitQB+cnh9ayTPVlxbIQA05udNxOigeoNIE1YSaI0Q4JNJmzyRci3tLYJLjR2zFK4YgUknhYVbpJ3W/kO1Qtt7Hnknx9xyuMryPGWD//cctJ7ALzm2S4oO72fJqLWIp16vt0moRdsZpaMaRu+lr6FTLryl0JtUCDRxAs9Y72rSTPOa9pnApYgEK/+kzEcSfJQRRYlLtquW6USYhYWL1key3U2ifzx8rXQls5a3DQNPV6sJWniW+i8SSaaF8xJ4O1JqoI2D1JhLzNtqi8XAtP6kseJRcvIsAK0MibdmcvJg0jGseVdKQ/iTj2WSPZ80aCIAHhpG/bwewDXs+Q0A/g6AjwK4y8q/FdekUUDaYGvLyJr89K5kj5RE600Iq35ZplaPhk9EyFh1astrAqsOr69qHO0aPhHb7cbGxsi2XrLVl8xlJChqmIHW/lJfEj5W/daKkQsH7/B4C0dL+eFRPVRP9PhFuXEf718ZKcSVIbk1txZlx9PzOvk5xU2dxFY/WMKsFqz8HP9er+duadEUGpmAMDiy8dcBfBaDs4DXADw89Atc6+XdimvaKwAOmsnE+pVl8gOhiTi1sqyvXps4LWW5HvPlz2sdgFo51F9yt9QSU2k6gbS2emn5VtM1ZVtMWQsLjJYrn3m05TEHWb821pYA8XC0aJ7+yxPQIv1g0SI90zR6ib8397SoPb69RvSDMEtAExCNy8OPJgFtfHu98YN/JlkhW9CeB+CAxVgj5goiOh6OF7GjahEKHn6yDJ63dFQegdaWkgYk8eB1aMcw0lLe66/a5xETAn+nMdoIaOXW+Gki5cvtFyL+EW9MSwy+JPQ1mueMWjJaT1B5+HmCJoJ/KQpLRjl5obAaPlqZ1Ae1wt+qU3sv+7vpar0ErQAogKWxWe/oOf8UXTquLJD2ysgk9iacpb15bdEESdQfwdsu08qzdCNAZVkT1tPUZPSTXGFNg2lr/5sAZ0wWc9ZwbtoOyVS095rdnNcXWVVIwWZB0/DTCE1qzFxGPskVoRW9RPfaZnk1eEeCDjxhP00h0AqAAngCoJTP0ui0cuSkixBXCTeNyDSns6XplfJaeFhalbTPlqDX6432mec4lASC1pfehKoBL1+T8riTryRotf2RaplCVKBHaFaml++lL6WEj/U+ks9qj0bHHCdpNio5jaVQiwovi04Jn0jQAVdopiUEWgHgQK3WFdWQLe0hMtmik1ZOdGvSa8w+0gYtftzDN9qHMq9cAWht1CahFiYo21zqfw0f77xaj2FafVMSVAS0guLbaZfq9toRgShzIybK94ribSvVV/INWcxY2vpLHzpadMrL4U5jOXbab5SOZTAEX4l4TF2j22lsRkcwyYdgtyhbQfyFUr6tuC6HFYDHjHgavgVyZBC1iW4xPGvZruFcS8Qyj4zYmKawpPbIdJq2Z/kvuI2Yp5ECxOoHC2diEPyZpQ1yPLxvM0r9Rc/5ITGab8qjKY3plYR9ZOyoT+h8CRkd40VUEb4W89bGy4qYKtnkS/ON40L18n6oXRFZ5dMHpbT3kkcPk9YZgUkEwCcAJHb/Ijoc5vm+tjIKqCZ9xDFMgx/RGrSJXmJ4soySPVmbGJ6Ao3dabHm0rBJIJyOVUzrFS6tXMkjPzOb1MceN95309Wjt5wJTCqYoY9bGUI6jx0gls5Qx5bxMqw95WbwPiaa1UFTaddTCVxPEEmcNJy2tt21GaV5qTlephHjKXY0pyJp30dWtLG8SmEQAnFaenS3l24pr0u8AamxqEWIq5Y+kkQw6yvAk8BhoDQ/NSVbS/CKCRcOrpo+1aA4ZXlpTpoWDxSysiSeZlca8OM6yHs5MtMPcNSZOjLQ07p5WL3HWjgS16i7RiDxj2sOJpynVpc0Vq33cl+K13wKpFHBzltUP9FyLiorUKcuJ+Le0PJMIgUkEwP0A/iGAq4bXTwJ4oJRvK65JBUDtAQtNOnzajCpaRkkz8rS7Gvy051KQRWzupYnGISKsSvh5aTxNsiSUtVWMBGKclkmJP7M2S9Nw08qSWqXWdr4DqYWPbK+kmZLwkGV7z3i7o33ehCHK/pUrACsqj+NjmYy0/vTwsJ5H5m8TmEQAvALAfQC+AOC/Ds8HeEUp31ZckwoAb//7ScDTHkr1TAsfTtTyeYmoahirBZ5GEyVqq//kR11yAtcwcK2dljlF/rfKKvmDHn300XzhwgX3+xDrf8k2TH4H2uNf+kC00EfpZNYYrjdmTejcAxoDaRqJ9kGkfF6PhndJkGuKCc87rfBjS/BumwDYigvAu4fbTJ8F8J8BfG0k3zR8AF4Mdimv9dxazkpGlLMeezyphuvhUkrr+RqiRBdhsrL86K6QtDeKdnpZyYSj/dfSlQ5f5xCJdpHlcGYsaS/Sd17ZVK4WcKDtZMrbwOuOaLCSnj0lItJHlpC13jWBmjlRsv1bW21oNNQUZ+rTmh19IzDJCuBbhvsCfWp4vxfAPy7lK5T5PQB2Df//IoBfjOSbVABwKV+zjNQ0Ew4e8+QTTcYi87wRhl56TriW0kTrLuWrKUv2iRcOJ5m8jItvwiQitv5S35HgqtkSQTPFSNpryjg4E+YfmHGQdntZDxdQHh6SnnlfaM7UktauKUf8XXTfoQiU5o/Vbq0vaxW1GuD0Ms0Q0JwnEwAfB/BtAD7Bnn2qlC96AfirAH49knYaYaCWqcICPihRoeERSE39nsDRiFdGnViTaxLwNKroxLLw0JhCSQuKMDBreS9NJlzD8+rT2krlyfp5eGSJ0XNFoQScLnk9knEQM7FWnrJO2TYuYOQ7LnA8oUb32k6mVj/S2cUWRCLxtP/8mdbW0rkJ02LKVjk0Ts/XZnAvQhlemnP+bfHsUiBfFN4G4Detlymlt6eUllNKy88888xEFfX7fczMzIzuO51OMU+n08H+/fvR6XSwsrKC2dnZYj7tPT2j+vv9Pk6fPo1+v78JR/pdXl7eVE6328Xp06c3ldHv97GysoI9e/bg7NmzWFpa2lRHqU4N5DveH1Qex0m+o/yyT6w+ovz0XiuL4/bxj38cZ8+eHRsXmX5mZgZ33XXX2Nj3+32cOXNmlG9mZgZ33HEHzp07h36/b44x4cZxBQbjcuTIEXS73bH6O50OUkrF/qBne/bswYMPPohut2uOAaWdnZ3FysrKiK4PHDiAubm5sX5YWVnBTTfdNEon8wLAnj17cP78+dE49vt97N+/HwBG9ymlsTECMMpPfczHQGtfSmmsDq0faVyeffZZ3H///WP9wPvDm4tyXkjaof8azQ54JTbhxftd1uXda7h59LyysoL19fVNNLBloEmFPK6h/yaAGzGM/QdwF4DfDOT7GIBPKdf3szTvwsAHkErl5QlXAJZEry2j5nmpHG9pyjUm+b4UQmatELT0WpkaPrVtsZ7V5C+lo69mva0TvPK0nVmj5h0NeB9y7bh29Vd7+pgHGk3wd9pKIhobz9NoqzetXRG/DZVRcq57oNE5/ddWmd48sOrUVrylsSr1kdffkwAmMAHdMGTmXwbweQDHAVxfyhco9y0ATmKwwgjlmdaHYFHzQrTMmogIK72GSw1TrW2LXMpbOJUEyCS4EA6Rg0w0JiMdq5MIYmnyaGLq4+VxX4FWh+fDaRJJVqIVLvBKwlIz51iBAnzsvLEgE5XlRC8xx0nmqGyPZw6zwBIQEt/SuE2bsUehsQDIzzHsa8C2hJjkAvBGACsAXl6Tbxo+AD6QpQicmjJl+R5zlNqhZBZamTVtqhEC1v/Sx0JWO6O48MkY0bw05lDTRyUoMUWtPo9JEkPU8ltMmPo9EtnEn0U+7OJlR843iAh+eQCLdgodbxd9lGb5TjS6omfWCVk1c0PrF6rf81/wdNaq3JoHNbwh0p6mUC0AALzDu6x8kQvAeQCfw+CA+dMA/k0k37T2ApIDPanDxdME5XPaI0hqhx6jjXzBLAVLFFcvXYQJenV47yMTzqq39v00JpXFOLR6aCw0x7MmzDiT8rR0z1RnPZf3vV5v5GBtEtGiKVAE3JEsmT3HUfahFxlHqwx5WhgXFiWtWpat0V0keq7X878Zkc9Lq4Vo+VrZtWAJAM8J/NXDaw7AjwP4huH1YwBmoz4GDXLOe3LO35Rz3j+8fmyS8mqBO6q63e5EDhfpcCLnluXoyQNBhgMHDpgOM+mAunTpOZ+75WTq9/s4cuRI0aGr4aQBd8TK55G8XlrZvlKZ3W7XTUPtWl9fH3umOdwibY/gTA47Xh4f906ns8nxTCAdrFT2zMwM5ubmxt7xsslxq9GqxIXyaPcpJTz++OOqE7VEIxxX+qV858+fH/X5k08+OdZWjiOvU+snThf79+/H7t27cffdd29yGvM+obGX48zHidom28nTcCe31nbuZOfPNTrj9fK6OX6y7we8evPz6LytBk0q5HFtfR6bdwP9SCnfVlxbsRuo1J5KEtqSztpSnH65dlGzxbDMU1pClrTAkgbigVaOZRNtWq72rvSFJoE8iY1v3iY1SjkuTfD28kxj5WNpmXRYekTbtOrw6MDSkEv4yjo1mo/SvVaPZqahi3/wJs2Psj3WClbzC9SsdrU0cs5adEj1y3DdUp/UACZwAp8D8GJ2/2IA50r5tuKapgDQGGqJEUf2IpcEIRmYxaSjzKCGEJosl6PlUNtKdvCacjnIGH2ZTwM5iT2HqiYwPEZUaku0XzlTio4lHzu5vTB/z/tdnlIXqcsaZ15miRFKOuv1eqNtKrx8Fg4a7fZ6vVE/8L32JR5eezScPUFh+aBKUT1aGzU8aTsPi+a2UwC8C8AZAD8P4OcwsNn/TCnfVlzT9AFYA1oayJpJqxFnyTFUIwgiaaWWESFYDY8oYUaEqUxvCeJIaGqJ8VqTj3/8pH15WWIeHLxVikZj5BCt2ZuK6EiLpLHqoDxekEHNOHtfb8sx4X3HfV5RHEhwaKsHwqXW56WNrxbu6kXEaZp7VBBouHElpyn9RaCxABjkxWsx2AX0JwF8ayTPVlzTXAFojiFpMuDvS6Dlie4xE2GakiC0Sc3b5jFQbzLz/JNqHXxCRARrVOOhtFHzkFVGzn5sehQfioLR8lvMV/ZNJBKKMz3rvFpNMGp9a0VqeUys1AdWWuofKRhKOPBDeTxFoylYK1geyWT1L08fSWv1jcXg5ThMGj46kQC4XK6tWgHQoNOBF1b8tixDK89Ko91buJXeaQxT4iJtxRJfL9pAmg1qGEKU0eQ8rj3xELuS4JCaE39e6mM5qUrbP5TKKwmhqPml9C0EHzM5fpJWvW3BOV7yGQmWkqnHi2ySz3u9Xp6fnx+teHheDweqx6Mfq14PInNUCm6PLuQ77TS3CM4eP/HmaxRaATAEiyHSrzbgkUG0/hN4RFyjzUSInsrkBFyzWyEn4JrTl7x+0Zi/jBsnBlE6fUsrr9frbTKrSCjFoDeN29aW7zx/ZHXBTVJeXdp/DnJFw3HRTuzS6uBfVsu+Onbs2FhIpjW+vE38a23ZN1o+S7jxNN57C7zx0Mq1+IAsh55vbAy22iafhydEI7jy/7VnmUhoBUBupjFY4BGRxUi0SRlhdlod/Fc+19I1iS/mzCQquCJMik8YC9/oxJZ96WniETNL5Bl/p0WdWPZwmU8y19IKoIQTF6KyHh5L75WxsbEx2n6b+0Y4Q5eRVh4+3Dym9Y2GS6nPtWg7a4Up/3uKmNcemY/PDZ5nbW0t9GW71z6rza0AmNIKYBLJTOk8p4/3TBKrZHaWPdnDQbv36vfKkO80J5e81xicxXCb+hcik9Jre4n5R+vUcJBpPYYW0TA1PLSx0MrUVnq0qtIO1dHq4hqsdoIW4V4yb2nmMUmvkll685OX4Skksm6JR0lgac+lAsfHQ660tWM4tf9WPaW2NYFWAAzBYga1TIIGpckpY1a6tbW1fPDgwXzo0KEQHhpzLaWXbZQT0iNcK4pITjzSpLQzZJsyYmki8cqKCmX+TtMeS8KlJHS99JG8sl+tvpfbJMj32pnEngmIM0KLGZW0f4631h7eJu6DkeGQTfpWq7tWqYoIGOu/tTrxyuf1lNrVBFoBwMBzSkZtzvTMisawwBv4xcXFPD8/33g/eI9hWRoXB0m8Xn0lnKhPpO2yqTYTPUyndhw0ZmZpfDV0YQEv0xNeWp3WmHGFIRrZ440x/7DKo1evzCgjk/hqZqcaZhlJ54FVr2TeHo6e8OD5rRVZbWBDBFoBIKCGWDijt9LzgarxD9Bz0pajmgrVw+2Q0qFqTRDveWlTughj9crzhIzVTgLrOL4mJoRSntp7As/XwBmsFmWi4VUCLmSlAC7l854TPZbOS6Z7ySClpuuNi3xXEnr0PCrovaibWj5Av96RjSXh1+sNIqO0/Y1kcMS0fJatAAiCxQxKzi5tAPl77T/dU2SF1Lg0JqJp+mR24UvqktMownQ0Qo+YLaRGx/OfOHEif/jDH66auJampbWl5vStpuAxFdLsvFWWXCWVVm4lvDUhXTLxRL5ot5z/nolDwyPi4G7i5CzNK++dhVdE+HjvrJW4hoPFIzyzWVNoBQADjxCtD6wsDUazlcoBLDFNclRFBIlmp5emIGtPkagGI/tDW6pGomkIF16XjEbxQDKz0iQnfKNmhKban5dG+5ZBptf8TxazLUUUWVASPtZqk/pQfg+jtdGqSxuXUr9NEueuMd2SwOFptf7VyijRC5+LVIYn2GqfTwKtABhCDXHI53LSyOWalof/RvApMYpSPRqesp5eb9xs4IFme49EVcjJwEHDzQKLMcr2yNVCScBZgkUbD09j1MrVyifBRMyXp9vYGI8fl+XI/oz0m9ZfXDHwtF9LIEXq5fXIvrPmXklAlNqm0ZmHuxYqq30R7tGFVj9vCzfNlugv+nwSaAUAgyadSUxTO3Tb0hY8p2kt0Zc0Ev7eYlS8Pm4yKtVvmaIsvLQ21rSL1+GtgrwJz4WBlcYbO4lbEwbF8xw7diwvLCyMvoqVgouEg+ao1+qOMgreXyX/TiRCyaJnTg8LCwubNmqTAtqqN+JzkFDCWabluBHukeg0jeas+VZSPrx2WcJ/EiHQCoAJQSNe+V6CN5G9vXy0enPOqpYhic7TyiUOvEwvTwksgq6ZlBYOET+IVSZ3Ynrhed7Ej5iqSkB10GFAXp9rX/JGfB9eWj7WpT7jZWljoZnv+CpRBiRouFpRSjRmJUFXMwe151rbIjTK6UnOYUtY1s4Jq58mYf45twIgBN6gRAdN5rEmsidMeBlEZDxKyLKJWxPUakdU65NlRKJx+PMo1Gg60TScsUizV8QsUROGWGpTacw5zUhmHCnfSxtROjgDlvRL7xcWFlQ65+cBl/xDmtJi0bRsUw2NyDZ5UOOTsu5leYcPH1a3cNAEt0Zv03QGtwKgAE2YPM8XWQaWiNuql5g/aY8ejqU9QzwGHcFlYWEh33PPPWqMeMkXEoEIDrXAJ5g2Xp6WVqMUWG2vwZlr0dHImBpmWKJPzTRivdfqjworuqidktl5ddSsyqgOb95opsZSWyIgBbksm5vmvK3ja4WeBq0AcKBkNiGwGEOJwXtL+GhYJbcR1zD4UrtqiYoEkqZ5Rg4nj5TvvWtiUrKcex7jqmW8lgIgI7S8snu95+zTmoCVGmOpLO+ZJQhLGm6E2XvPJUPT6vT2+tHoTtarKSbS7i/xkv3dhNas9xETHjH/UtuaQisAGMiJy7cELuXRCNgrX7uvTasRQsQJSr+TCCAPf63OWgFUi0+pv7QyIk7xiBPQ6wct/8bGxuijL3lsodVP1ncExBi5xui1yxJGHi1FfQ+UpyaKhZhwSXBZWrMcT16XND9p7fRCo/kBPdLPZuHgtVWrowR87LcCWgEwBI158wkXZZSaNmKlLeFTm1faFzWNqhRFItth4VXbngjUMPhSOSXGbpUr85ZWVzV1UXmHDx/OR48eHY0TZy6RaBqNiXFtUau/NNa8bEkrlgZq9Z0XMinTHzt2LB88eNBkwlS/d7aCRtv8uxIPX4+uKC+PBrIEcEkoaDhHoLRKmRRaAcDAYpIes/MYg4RIOBnllUyohmA8gRQRVvSuZLapZcre8yZ97JUXdXhHcK2dzKU61tbW8uLiovqFt/b9iBy/SHgqv9dCPbU2yA+9rDpKNBXtB2Ku2j75JByss32tvpH5PUUmIthLjvdez/av1SoNErjgoT6YRvQZh1YAKNCECUXel5bO8iOqiPYTxcnT1qz21nz5XMJDi2KgOiJOsciY8DaV+loro0m7Iu8spqFpdpFvEGqjaYi5R0xZ3vjSeHGmXFIKSmVROZp9/8SJE3l1dXUsj2VGsuijiWLB6TRytoE2TyIrx5r5ubEx2NyPb/DXZC5KaAWAA9HOjUr0CMFpZWpRCJMIHF5flFHyejW7drTtUsu1GGGpbI8ZaHlKURRWu2rrt9JZfVnbZi8KyGN4EX9HCTjTl33H2xopUwoljSHy7wi0OULpuO/DqisKWhtq53Vkjlh0KNNLPsD7v3TSXQRaAWBAdILz9NOop6SRlphACafoJJWajSREzdQQ7QMttK9J/0WZnHToW33sRew00SAJak+CKmmGpXGNMnnOqDzhQP95aKaHh8XUaoQSpzW6t5zgGk16UErjCSWtnRHasPrDmvclGqUQ8Emdw60AcIAIaxrgaZa1jLQpw5T1es9ownuEWMo/DXxrmKalwVPUTdNVmsfoLDzkmJbMNvy/d5aExjSsXw0fq+4owyqZRTjdRPCICtGNjQ31a2net5GwbU9QyjKlP4TnO3HixGj7jqbfZVh97G08yQVhZHffErQCwIFJ7O8562YP/q5mQpTeNQWL0Xj1lZiaNlm0T/lL9UUEoqdh5jyu/VsCLMr0+btS/Lj2a5UltV3rNDnelzIyRTPNRNtS+65kc7f2FpqEfil6Sguplf0QoRlNUGvt0OiExqr0IVkESsqFNUf43LriBACAnwaQAbwskn4rvwSehPlrjk+Zpml5pbTRMjVtLVKeFVmiaWGSoGlyRQ7wjjJPD+Q+OtIPURuyS/1W0uqjwosYihYB5JnLOG2V9p+x6q0N5fXGyYrGaUq3Hm1pfWQxc6surx+sfuQCprbfat5btFlbbgkuOwEA4JsAfBTAhctBANRqh03SRSFiRvCIRiOySHigNTlk+JulpfH30qFltSEK0bRcQ8x5/BSxJmMcqVcLbeT/Zb9q2q12OpSFT6T/PM03Cl6bSuktiPqVuPIg+8UTSqXnUkHx8tVq/aWxk23XlIFp8xKCy1EAHAGwD8Bnny8B4BFuZBfCaLm1WgMHb2kbmdRaGi86xWoHz6f5CLid1spHGrS2N38TrdTCNWIukHlqyi+lk1p5jWmG3ltfyVpjHakn+q4ENcpGpJxoZBkpEJzxRxzZ2nOPRrX8Vl1NFQZLqFjmYn5NAy4rAQDgDgD/evjfFQAA3g5gGcDydddd17gDLOKjd9Pah1xqLrXlRUwOJcIoCSSOY6Qcb3J4ERvaf0+ARQme12n5XbiW5W2bYLW3NponwiRqGXLJ3h1VWCaN5rLwsxQnKz3hUltfSZmJ4KmtwrTwTK+uSP1eGzWhYs0B71S2JvC8CwAAHwPwKeX6fgCPAvhTOSAA+DXpCqCkXWtQkuga09IGOsqAol9ylo7ls3Dlz2q1KFmWdZC97JuSI5aeR4SS5uz1nO68T2v6SAsl1fJEQfZJxMyjRb54YCk3tVp3FKTixOvS6oyGcHr94wkbmY/XX/LNaeMSFabyvRVQIsei1+vlo0ePmu2MKkQRuGxWAABeA+ALQ8b/WQCXAFwEcG0p77T2Aoq+K0n80uDwgY5qLpEBl5pKRKMrCQurDE940AEnHgEvLi5WnwEc6dcok9DuS/XTJF5dXQ2b42Rdsh3WvdfftcqDddhMDU1NujLgAqtkiiwJwFK92uqIC3AvAMBqgzZOVnqrXC9Agr9bXV3Nb3nLW8a+gtagaYAKh8tGAGxC4HlcAUiwNFv+PKq1aGVHnXAegZaERiS6Z9K6rEnAtX/ZZzxdDQHXTtYISFuv1V+8bu2MWA8Xnp+c7t7B9DR23gZjPG8Jj42NwRYCfF8cb4Uq72vpSMPBo3mNsVrMMxre6QnbRx99dNP2EhrI+uTGkFFctOe8HNpxVB7qVMKxFHARhVYACLAmpfU8ClrUSVQDk1BaThJhNRFO8n8TQadpQh7OUbCiL5poqDSBSDvWtv7V2iT/W2VbeUpMynrG30XCEGXfl+hZKzdCR9FQWM/0oTFqLZ1XF/l0ZBCCZ+OXdVj1Ea3wOVyiY4smtbZys6XVdu156ZCnCFy2AqDm2qoVQM3E9GBtbS3fe++9m4TAJNEuNROKv48ATXwtWsYTXpawKuFcg5OlkZaYofbLGSOFpZZsuaU6uS/CMxPVRAdF6NAbj9Ivx10TDBZEhDoxf++juUk0anpHmj19oFcSwlp+awx6vc3RWFGfRameaB/WPK+BVgAY0OuVt0OuAeu8XP47DYhojhHtRTJaeiaXqlr5/NIIXssTaQ/XlqITkGtzdLCG5ijXhIvHGDwcSuGlkrY8GrNwkGY2L5JNOmBLPp2IPV621QLC1TsDN1qPN+a8fTzCS3uv4dCEmdcqB1Y+jzeUcJgUWgHAQJtkmpbk3Tepp7QktfJp7y1mS++jpphS+d57yUwpraw7MonkWbTykA8vrxRIx44dG3NQy/6M9Dnfu36SCcj7sTT22jhKc1Ukkq3E7Ig+am3dJdCUDkuJsPCPOIo5nfCtOig/d97L9ll94/WVpdxYvIPelb6AjzyLKkElaAXAEDxtj0AL4ay1a1vEXBpsemZpwJLxerjVOjBLabT3FqF69lmtHD6RNjY2quyeltYWZW4SyKE6Pz9vavA1oAlLrU7NrLe2tmaaq5oy7AhtyueR8GSLecl6SltdSzxLwkIyZ75C0ASBZvKMBh5w059k8jKPDD/Wxk37HxVONdAKAAa1kyPn2A6EEqxQOE0b4mn5+bHepJS4TYLXJGawEkOKlMHj7kuOwNqymwgSqf1HneTe5LZCErnQ5/Vw4S772LK3R4WexpSs8FNeV0l4WaYXDccIeOmsOcnnkzS78PmmfaEeAR4hprWXl2kJRa//LZhEELQCwIAaArW0NKsc7bl2r305TIeJ1wx6JK1mI9W0lQju9GzSJapcxdQw/0nq1phwyb4u81n4aHk8xz0xWflhneZL4dFMFrOJapbeCpRr2JZg4ThZzM3q8yYgGaY2J2UbLHyj80tj1jQG2ulmpY80tf4sCcVJab0VAApYnVoidK491Gpc2nNLoNSEeEZx8JicV0bpnVdnzmVzVGQ57k2kWtDqsRyIsq4ac4Gl7dUoHlr5Vp9ZtOw5heV/3g+1TF2W4fVHDWh9z+vy3ln4RvtbCkSPaUfKlGVYfhIL7ybQCgADIhOZPyPGvLCw4K4IZL6IoPEm5yRtqUnTRIhZwJfhpc/jJfFH+spjbJE2aPV4TktvrKN0RPQT0T69eiKMWcvD28OhVliV8Jb2eU/54PlKyocn4Grml2WO00DzGWg4Wm2y8NXuNbynAa0AmCLwFYC33bAl0bX/TQd9mkSildm0fDkxax3SJW2V30eZlCVEpLbIyysxfkpT+pI24nD1cLXwL5Vh4Srt33IbCQuHKEihWcJXE4wlYU1gmTXlL1/BWz62KCOX76KWBK0sLTx0GhFoHFoBIGDSjiWmZu03YjEXb7lXY/uu0WB4HZF00o7dtK9qcZR4aP+t9037gfc9Dz2VjCjCvKzVSCSKLKJVSjwiTMkzZ3H8rO0GpjFPouVZgpffW30oV+PaOHCfgOcfmETglZ5peGu72R47diwfPXr0hbsb6FZc04wCqok08UDTOuQ91zis5Z61BJdlEXHUxMl7tm0rj9WmKEQ059pySs8mrYd/NyC/Ayj5JUrCwuv7iBmrpGDUlivxnmbUlZauiUKhCVJLwMr0Gm3IOWCZjZrgRkqAJ7CssrVIpYWFhXzo0KGJD4MnaAWAgKj9XoNaTZOYMH/urQBKk500mAgOtNyXGo8laKYFtdqqly6iCddMOKtMzvAXFxc3fWSklTHJQUI8fQRvj1lZ+FnPa/wnJaGj3Vv0awnKKD1q80rToLW2yuda1JXVJq99vDz+rLQq8YQip8dpQCsAFNAGoMSAIhNcEnxUg406hK38Xhtz3ixgmkRlRNJqTjOL+OUEjWisFnOxJlyEQZ04cWITw5cMS8NJs1lbTM4COUa1y/4ojck8Vru8sr2+9NotGTQ/7ITTS3SlKsfda7cXAaWtvCN9p5Wl9ZH3X4smquU1UWgFgAMWc/Ge1Woq3vtoHi9tSTPzojzot5YZaMAjfyzGIRmA3IK3VG9JOPL/kb7RGH603Rbt8DjxEkPjQpDi+zWHbKmtEiY1cVq0ov2XTNyjz17vOZ8JCVHPR2ZBxL+hpbVowVMarLZo+WqUM54/Gg7aBFoBEIQIs55EMkfyNCm/pJl5YWw0ISNHRHqHV5TqkfVxrT/CJJtC7YTW6ouOW872dgReWZwZaMKahKp3xkCkXQRRoWQxR7l1hxz3SH9qZVn94+HHL42WSMhY9Xl4au0ppfGEn9ceq+xpQCsApgxNmX/J3DRJ+ZTP09g8hudN2l5v4Ji65557XP9DFG8Lz5oyolDS7GQ7JxXwGjMs9b+HU87PbXwmv/718su6eVnWOcoeo+P1SkEknau1ZtJS+702yr2xNIHLD8qp+cK+1+uFzub1xnWrmHoNtALgMoFaRlBT7sbGxmj3yKhw8f5rE6lpVILGTCxBNM1+4eXWaM2T1C/HOPIhUaRMaU6STFvz8VgrO1kOP7Eqyny1/xsbm7dojtCbLLtmHGTMvEZTXHDWOFepb6J+icsVLAGQBu9eGDA3N5eXl5e3G42pQb/fR6fTmUo5S0tLuHTpEnLOmJubw8zMTLGefr+P5eVlzM3NAQBOnz6N/fv3j9LW4ufVI8u20vf7fQCYSr/U4Bh5X4sbT9/tdrGysoL9+/ePlVHTx7y8fr+PkydPAhgocXv37sWDDz6Iu+66CzMzM6NyPZx53ZSOl1/CUT4nevryl7+M17/+9aNyaOyBcRrz6iB8lpaWcODAAXdMTp8+jdnZ2VH/ajRF5QDA8vIycs5uuV47X4iQUjqVc56Tz1+0Hci0MIBpEVWn08GBAwdw66234rbbbtvE/E+fPj02wTmQAtDpdDZNHjkhrTJK9Whly/IBoNvt4vTp03ZDnboj8PTTTxfTaEyI/i8tLWF5edmsjz+nttCzmZkZzM7OAsDoeWlsqMz19fXRPc+7a9cuvOY1r0Gn00Gn0xkxf94Oi3FTeyTjp/clHK3nN910E66++uqxMmns+f9SHYRLSsnsG17+zMyMSmOUhph9p9PB3NxcmPlzXK5I0JYFl+t1JZiAtgMm9TWQ+aHkPPPeReogR2eTfKW0q6ur+a1vfWs+evSouUVwqdxSG6XT3TpgPGoS0fwumt299MGXFpKrOZTlQSoWXrI/uC1ei2CyIFpHC5MDWh9AC5NAlPnVvJMQ+Zyfl1vCS8Lq6uqmjelIuMlDxvmvrNMCaQvnvyU8iYFqAkeLvNIiXazypYDQ4u35GRRRIJy5A7Z2C/MWnh+wBEBrAmohBLR8tt55y2/rnQS+jPfykcmg1mR07bXXYvfu3ZtMJXv37kXOGWfPnh0z3UhzkGUKoYubUFZWVkZ2/yie3NzB67t48eImc9TKysomXCxzkjSP0D03FVK/7N69u4gnAZlW5ubm0Ol0MDMzM/rfwgsDWidwCy9I4E7OaTnSgc0OUK1Ofk/O96uuumqM+Un8Inhq5Vt5o89aaAGwncC7tgOZFlqYFDwn5yTleWVqTmyKLLHKqMHTcpJbK6vIsxZa8KAVAC20MAG0TLeFFzK0PoAWWmihhR0KrQBooYUWWtih0AqAFlpooYUdCtsmAFJKP5FSeiKl9DsppX+5XXi00EILLexU2BYncErpuwB8P4C9OedeSukV24FHCy200MJOhu1aAfw4gH+Rc+4BQM75C9uERwsttNDCjoXtEgDfAuB1KaVHU0ofTykdsBKmlN6eUlpOKS0/88wzzyOKLbTQQgtXNmyZCSil9DEA1yqv3jWs908DuAXAAQAfSCndkJXPknPOvwzgl4dlPpNSutAQpZcB+GLDvC9UaNu8M6Bt886ASdr8Su3htmwFkVL6CAYmoMXh/acB3JJz3jIVP6W0rH0KfSVD2+adAW2bdwZsRZu3ywT0AIDvBoCU0rcA6GDnSfMWWmihhW2F7doK4lcA/EpK6VMA+gDeopl/WmihhRZa2DrYFgGQc+4D+OHnudpffp7ruxygbfPOgLbNOwOm3uYX1HbQLbTQQgstTA/arSBaaKGFFnYotAKghRZaaGGHwhUvAFJK/yGldHp4fTaldJq9+5mU0vnhnkR/eRvRnDpYey1diW1OKf18SunzbJy/l7274trLIaX00ymlnFJ6GXt2RbY5pfQLKaWzwzGeTyl9PXt3pbb53Smlc8N2/+eU0teyd5O3WTso+Eq9APwSgJ8d/p8FcAbAiwF8M4BPA/iq7cZxSu38LgAfA/Di4f0rruQ2A/h5AD+tPL8i28va900APgrgAoCXXeltBvA17P8/BPBvdkCbvwfAruH/XwTwi9Ns8xW/AiBIgxO33wzg3w8ffT+A+3LOvZzz7wE4D+Dbtgu/KYO119KV3GYNrvT2vgfA/wKAR3JcsW3OOX+J3V6D59p9Jbd5Pud8aXj7CIBvHP6fSpt3jAAA8DoA/zXn/OTw/hsAfI69f2r47EoAa6+lK7nN/2C4TP6VlNKfHj67YtubUroDwOdzzmfEqyu2zQCQUvpnKaXPAfibAH52+PiKbjODtwH4zeH/qbT5ijgT2Nt3KOf8weH/v4HntH8ASEr6F0xMbJO9lvACbnOhvYcA/AIGbfkFDEx9b8MLuL1Asc33YGAe2JRNeXZFtDnn/MGc87sAvCul9DMA/gGAn8MV3uZhmncBuATg1ymbkr66zVeEAMg5v8F7n1LaBeBOADezx09hYEMl+EYAvz997LYGvDanlH4cwP15YCz87ZTSn2CwkdQLts2lMSZIKR0G8KHh7Qu2vYDd5pTSazCw+54ZWDbxjQAeSyl9G67QNivwGwA+jIEAuKLbnFJ6C4A3Abh9OKeBKbV5p5iA3gDgXM75KfbsQQB3p5RenFL6ZgB/FsBvbwt204cHoO+1dEW2OaX0dez2rwL41PD/FdnenPMnc86vyDlfn3O+HgNm8Nqc89O4QtsMACmlP8tu7wBwbvj/Sm7zGwG8E8AdOecvs1dTafMVsQIIwN0YN/8g5/w7KaUPAFjBYGn193PO/307kNsCsPZaulLb/C9TSvsxWAJ/FsCPAlf8GKtwhbf5X6SUXgXgTzCIfPox4Ipv8/+BQaTPwnC190jO+cem1eZ2K4gWWmihhR0KO8UE1EILLbTQgoBWALTQQgst7FBoBUALLbTQwg6FVgC00EILLexQaAVACy200MIOhVYAtHDFQ0rpf08pvV55/hdTSh/S8mwHpJTeMdz58ZMppTMppX+VUrpq+O6zw+efTCmtpJT+aUrpxSzvR1JKfyDbk1K6T8TPt9DCCFoB0MILDtIAQrSbUtoN4Jac829tMU5fNWH+H8Nga4dbcs6vwWALjy8AuJol+67hu28DcAPGjwh8N4AfUYo+hMGGcS20sAlaAdDCCwJSStenlB5PKb0XwGMAvimldCiltJwGZx78EyPrXQA+wsp541DLPo7B9iD0/JrhRnJLKaVPpJS+f/j8pSmlDww3mvsPww325obvuiml/zWl9CiAW1NKP5xS+u3hfvX/loRCSul7UkonU0qPpZT+Y0ppRsHzXQB+POf8B8Dg3Oyc878QO2Bi+K6LwUdQPzAUcMg5PwRgQyn3vwB4w3A7lBZaGINWALTwQoJXAfh/cs7fmnO+gMFmWXMA9gL4zpTSXiXPtwM4BQAppZcAOAzg+zDYHZZvwPUuAP9fzvkABucpvDuldA2A/xHAf8s578Vgozm+n9Q1AD6Vc/4LANYA/HUA355z3g/gvwP4m2lwUMs/BvCGnPNrASwDeAdHMKX01QBmhtv6hmAoGH4Pgy0AvHR/gsFWwfuiZbewc6AVAC28kOBCzvkRdv/mlNJjAD4B4M9hcEiGhK8D8Mzw/00Afi/n/ORwa4xfY+m+B8A/SoMT4xYBvATAdQC+A8B9AJBz/hSAsyzPfwfwn4b/b8dAOCwNy7gdAzPNLUO8TgyfvwXAKwWOCWwnx5TSX07PnWB3m9Mf2o6QGnwBwNcXU7Ww46BdFrbwQoI/oj/DDbB+GsCBnPN/Syn9XxgwbQnPiufW3icJwA/mnJ8YezjcgMWAP2b7ryQA/3fO+WdE/u8DsJBz/htWITnnL6WU/iil9M0559/LOX8UwEeHDt2Oiuxg1XA9gN918CN4CQb90EILY9CuAFp4ocLXYCAQ/jCl9GcA/BUj3eMA9gz/nwPwzSmlG4f3nCl/FMBPEMNPKX3r8PlxDE6SQ0ppFsBrjHoeAnBXSukVw7S7U0qvxOAUp29PKe0ZPn/pcIdWCf8cwKE0PPN1iIcm0DD0IbwXwAM55/9m4MPhWwD8TiBdCzsMWgHQwgsShidhfQIDxvYrAE4YST8M4C8O8/wxgLcD+PDQCXyBpfsFAFcBODvcRfUXhs/fC+DlKaWzGGzLexbAHyr4rGBg658fpl0A8HU552cAvBXAvx8+fwQDU5SEQxic4/zoMN2JYfs+wdIcG+L22wAuYrjrKQCklP4LgP8I4PaU0lNpeEj4UDg+m3NeNfqnhR0M7W6gLVzxMGT2b6IIm8q8XwXgqpzzHw9XDg8B+Jacc3/KaG4JpJT+JwBfyjn/u+3GpYXLD1ofQAs7AX4KA4fuHzTI+1IMNO+rMLDz//gLhfkP4Q8A/Op2I9HC5QntCqCFFlpoYYdC6wNooYUWWtih0AqAFlpooYUdCq0AaKGFFlrYodAKgBZaaKGFHQqtAGihhRZa2KHw/wN8dwW0tc51SwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/05_join_9_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "x = candidate_df['phi1']\n", + "y = candidate_df['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same figure we saw at the end of the previous notebook. GD-1 is visible against the background stars, but we will be able to see it more clearly after selecting based on photometry data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting photometry data\n", + "\n", + "The Gaia dataset contains some photometry data, including the variable `bp_rp`, which we used in the original query to select stars with BP - RP color between -0.75 and 2.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground.\n", + "\n", + "Now, to select stars with the age and metal richness we expect in GD-1, we will use `g - i` color and apparent `g`-band magnitude, which are available from the Pan-STARRS survey." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Conveniently, the Gaia server provides data from Pan-STARRS as a table in the same database we have been using, so we can access it by making ADQL queries.\n", + "\n", + "In general, looking up a star from the Gaia catalog and finding the corresponding star in the Pan-STARRS catalog is not easy. This kind of cross matching is not always possible, because a star might appear in one catalog and not the other. And even when both stars are present, there might not be a clear one-to-one relationship between stars in the two catalogs.\n", + "\n", + "Fortunately, smart people have worked on this problem, and the Gaia database includes cross-matching tables that suggest a best neighbor in the Pan-STARRS catalog for many stars in the Gaia catalog.\n", + "\n", + "[This document describes the cross matching process](https://gea.esac.esa.int/archive/documentation/GDR2/Catalogue_consolidation/chap_cu9val_cu9val/ssec_cu9xma/sssec_cu9xma_extcat.html). Briefly, it uses a cone search to find possible matches in approximately the right position, then uses attributes like color and magnitude to choose pairs of stars most likely to be identical." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the hard part of cross-matching has been done for us. However, using the results is a little tricky.\n", + "\n", + "But, it is also an opportunity to learn about one of the most important tools for working with databases: \"joining\" tables.\n", + "\n", + "In general, a \"join\" is an operation where you match up records from one table with records from another table using as a \"key\" a piece of information that is common to both tables, usually some kind of ID code.\n", + "\n", + "In this example:\n", + "\n", + "* Stars in the Gaia dataset are identified by `source_id`.\n", + "\n", + "* Stars in the Pan-STARRS dataset are identified by `obj_id`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For each candidate star we have selected so far, we have the `source_id`; the goal is to find the `obj_id` for the same star (we hope) in the Pan-STARRS catalog.\n", + "\n", + "To do that we will:\n", + "\n", + "1. Make a table that contains the `source_id` for each candidate star and upload the table to the Gaia server;\n", + "\n", + "2. Use the `JOIN` operator to look up each `source_id` in the `gaiadr2.panstarrs1_best_neighbour` table, which contains the `obj_id` of the best match for each star in the Gaia catalog; then\n", + "\n", + "3. Use the `JOIN` operator again to look up each `obj_id` in the `panstarrs1_original_valid` table, which contains the Pan-STARRS photometry data we want.\n", + "\n", + "Let's start with the first step, uploading a table." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing a table for uploading\n", + "\n", + "For each candidate star, we want to find the corresponding row in the `gaiadr2.panstarrs1_best_neighbour` table.\n", + "\n", + "In order to do that, we have to:\n", + "\n", + "1. Write the table in a local file as an XML VOTable, which is a format suitable for transmitting a table over a network.\n", + "\n", + "2. Write an ADQL query that refers to the uploaded table.\n", + "\n", + "3. Change the way we submit the job so it uploads the table before running the query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first step is not too difficult because Astropy provides a function called `writeto` that can write a `Table` in `XML`.\n", + "\n", + "[The documentation of this process is here](https://docs.astropy.org/en/stable/io/votable/).\n", + "\n", + "First we have to convert our Pandas `DataFrame` to an Astropy `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astropy.table import Table\n", + "\n", + "candidate_table = Table.from_pandas(candidate_df)\n", + "type(candidate_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To write the file, we can use `Table.write` with `format='votable'`, [as described here](https://docs.astropy.org/en/stable/io/unified.html#vo-tables)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "table = candidate_table[['source_id']]\n", + "table.write('candidate_df.xml', format='votable', overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we select a single column from the table, `source_id`.\n", + "We could write the entire table to a file, but that would take longer to transmit over the network, and we really only need one column.\n", + "\n", + "This process, taking a structure like a `Table` and translating it into a form that can be transmitted over a network, is called [serialization](https://en.wikipedia.org/wiki/Serialization).\n", + "\n", + "XML is one of the most common serialization formats. One nice feature is that XML data is plain text, as opposed to binary digits, so you can read the file we just wrote:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n" + ] + } + ], + "source": [ + "!head candidate_df.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "XML is a general format, so different XML files contain different kinds of data. In order to read an XML file, it's not enough to know that it's XML; you also have to know the data format, which is called a [schema](https://en.wikipedia.org/wiki/XML_schema).\n", + "\n", + "In this example, the schema is VOTable; notice that one of the first tags in the file specifies the schema, and even includes the URL where you can get its definition.\n", + "\n", + "So this is an example of a self-documenting format.\n", + "\n", + "A drawback of XML is that it tends to be big, which is why we wrote just the `source_id` column rather than the whole table.\n", + "The size of the file is about 750 KB, so that's not too bad." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 396K Oct 19 14:48 candidate_df.xml\r\n" + ] + } + ], + "source": [ + "!ls -lh candidate_df.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir candidate_df.xml\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** There's a gotcha here we want to warn you about. Why do you think we used double brackets to specify the column we wanted? What happens if you use single brackets?\n", + "\n", + "Run these cells to find out." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table = candidate_table[['source_id']]\n", + "type(table)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.column.Column" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "column = candidate_table['source_id']\n", + "type(column)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# writeto(column, 'candidate_df.xml')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uploading a table\n", + "\n", + "The next step is to upload this table to the Gaia server and use it as part of a query.\n", + "\n", + "[Here's the documentation that explains how to run a query with an uploaded table](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html#synchronous-query-on-an-on-the-fly-uploaded-table).\n", + "\n", + "In the spirit of incremental development and testing, let's start with the simplest possible query." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"SELECT *\n", + "FROM tap_upload.candidate_df\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query downloads all rows and all columns from the uploaded table. The name of the table has two parts: `tap_upload` specifies a table that was uploaded using TAP+ (remember that's the name of the protocol we're using to talk to the Gaia server).\n", + "\n", + "And `candidate_df` is the name of the table, which we get to choose (unlike `tap_upload`, which we didn't get to choose).\n", + "\n", + "Here's how we run the query:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job_async(query=query, \n", + " upload_resource='candidate_df.xml', \n", + " upload_table_name='candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`upload_resource` specifies the name of the file we want to upload, which is the file we just wrote.\n", + "\n", + "`upload_table_name` is the name we assign to this table, which is the name we used in the query.\n", + "\n", + "And here are the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=7346\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
635559124339440000
635860218726658176
635674126383965568
635535454774983040
635497276810313600
635614168640132864
635821843194387840
635551706931167104
635518889086133376
635580294233854464
...
612282738058264960
612485911486166656
612386332668697600
612296172717818624
612250375480101760
612394926899159168
612288854091187712
612428870024913152
612256418500423168
612429144902815104
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "------------------\n", + "635559124339440000\n", + "635860218726658176\n", + "635674126383965568\n", + "635535454774983040\n", + "635497276810313600\n", + "635614168640132864\n", + "635821843194387840\n", + "635551706931167104\n", + "635518889086133376\n", + "635580294233854464\n", + " ...\n", + "612282738058264960\n", + "612485911486166656\n", + "612386332668697600\n", + "612296172717818624\n", + "612250375480101760\n", + "612394926899159168\n", + "612288854091187712\n", + "612428870024913152\n", + "612256418500423168\n", + "612429144902815104" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If things go according to plan, the result should contain the same rows and columns as the uploaded table." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7346, 7346)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(candidate_table), len(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set(candidate_table['source_id']) == set(results['source_id'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we uploaded a table and then downloaded it again, so that's not too useful.\n", + "\n", + "But now that we can upload a table, we can join it with other tables on the Gaia server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joining with an uploaded table\n", + "\n", + "Here's the first example of a query that contains a `JOIN` clause." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT *\n", + "FROM gaiadr2.panstarrs1_best_neighbour as best\n", + "JOIN tap_upload.candidate_df as candidate_df\n", + "ON best.source_id = candidate_df.source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's break that down one clause at a time:\n", + "\n", + "* `SELECT *` means we will download all columns from both tables.\n", + "\n", + "* `FROM gaiadr2.panstarrs1_best_neighbour as best` means that we'll get the columns from the Pan-STARRS best neighbor table, which we'll refer to using the short name `best`.\n", + "\n", + "* `JOIN tap_upload.candidate_df as candidate_df` means that we'll also get columns from the uploaded table, which we'll refer to using the short name `candidate_df`.\n", + "\n", + "* `ON best.source_id = candidate_df.source_id` specifies that we will use `source_id ` to match up the rows from the two tables.\n", + "\n", + "Here's the [documentation of the best neighbor table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_crossmatches/ssec_dm_panstarrs1_best_neighbour.html).\n", + "\n", + "Let's run the query:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "job1 = Gaia.launch_job_async(query=query1, \n", + " upload_resource='candidate_df.xml', \n", + " upload_table_name='candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And get the results." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3724\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2
arcsec
int64int64float64int32int16int16int16int64
6358602187266581761309113851876713490.0536670358954670841015635860218726658176
6356741263839655681308313884284887200.0388102681415775161015635674126383965568
6355354547749830401306313783776573690.0343230288289910761015635535454774983040
6354972768103136001308113804456319300.047202554132500061015635497276810313600
6356141686401328641305713959221401350.0203041897099641431015635614168640132864
6355986079743697921303413920912795130.0365246268534030541015635598607974369792
6357376618354965761310013993335021360.0366268278207166061015635737661835496576
6358509458927486721320113986549341470.0211787423933783961015635850945892748672
6356005321197136641304213922858936230.045188209150430151015635600532119713664
........................
6122417812491246081297513437559955610.042357158300018151015612241781249124608
6123321473614430721301413414585387770.022652498590129771015612332147361443072
6124267440168024321305213468524656560.032476530099618431015612426744016802432
6123317393403417601301113412177938390.0360642408180257351015612331739340341760
6122827380582649601297413404459335190.0252932373534968981015612282738058264960
6123863326686976001303513545702197740.020103160014030861015612386332668697600
6122961727178186241296913380061687800.0512642120258362051015612296172717818624
6122503754801017601297413464758974640.0317837403475309051015612250375480101760
6123949268991591681305813551997517950.040191748305466981015612394926899159168
6122564185004231681299313490752973100.0092427896695131561015612256418500423168
" + ], + "text/plain": [ + "\n", + " source_id original_ext_source_id ... source_id_2 \n", + " ... \n", + " int64 int64 ... int64 \n", + "------------------ ---------------------- ... ------------------\n", + "635860218726658176 130911385187671349 ... 635860218726658176\n", + "635674126383965568 130831388428488720 ... 635674126383965568\n", + "635535454774983040 130631378377657369 ... 635535454774983040\n", + "635497276810313600 130811380445631930 ... 635497276810313600\n", + "635614168640132864 130571395922140135 ... 635614168640132864\n", + "635598607974369792 130341392091279513 ... 635598607974369792\n", + "635737661835496576 131001399333502136 ... 635737661835496576\n", + "635850945892748672 132011398654934147 ... 635850945892748672\n", + "635600532119713664 130421392285893623 ... 635600532119713664\n", + " ... ... ... ...\n", + "612241781249124608 129751343755995561 ... 612241781249124608\n", + "612332147361443072 130141341458538777 ... 612332147361443072\n", + "612426744016802432 130521346852465656 ... 612426744016802432\n", + "612331739340341760 130111341217793839 ... 612331739340341760\n", + "612282738058264960 129741340445933519 ... 612282738058264960\n", + "612386332668697600 130351354570219774 ... 612386332668697600\n", + "612296172717818624 129691338006168780 ... 612296172717818624\n", + "612250375480101760 129741346475897464 ... 612250375480101760\n", + "612394926899159168 130581355199751795 ... 612394926899159168\n", + "612256418500423168 129931349075297310 ... 612256418500423168" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This table contains all of the columns from the best neighbor table, plus the single column from the uploaded table." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['source_id',\n", + " 'original_ext_source_id',\n", + " 'angular_distance',\n", + " 'number_of_neighbours',\n", + " 'number_of_mates',\n", + " 'best_neighbour_multiplicity',\n", + " 'gaia_astrometric_params',\n", + " 'source_id_2']" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1.colnames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because one of the column names appears in both tables, the second instance of `source_id` has been appended with the suffix `_2`.\n", + "\n", + "The length of the results table is about 2000, which means we were not able to find matches for all stars in the list of candidate_df." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3724" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get more information about the matching process, we can inspect `best_neighbour_multiplicity`, which indicates for each star in Gaia how many stars in Pan-STARRS are equally likely matches.\n", + "\n", + "For this kind of data exploration, we'll convert a column from the table to a Pandas `Series` so we can use `value_counts`, which counts the number of times each value appears in a `Series`, like a histogram." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 3724\n", + "dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "nn = pd.Series(results1['best_neighbour_multiplicity'])\n", + "nn.value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result shows that `1` is the only value in the `Series`, appearing xxx times.\n", + "\n", + "That means that in every case where a match was found, the matching algorithm identified a single neighbor as the most likely match.\n", + "\n", + "Similarly, `number_of_mates` indicates the number of other stars in Gaia that match with the same star in Pan-STARRS." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 3724\n", + "dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nm = pd.Series(results1['number_of_mates'])\n", + "nm.value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this set of candidate_df, almost all of the stars we've selected from Pan-STARRS are only matched with a single star in the Gaia catalog.\n", + "\n", + "**Detail** The table also contains `number_of_neighbors` which is the number of stars in Pan-STARRS that match in terms of position, before using other critieria to choose the most likely match." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting the photometry data\n", + "\n", + "The most important column in `results1` is `original_ext_source_id` which is the `obj_id` we will use to look up the likely matches in Pan-STARRS to get photometry data.\n", + "\n", + "The process is similar to what we just did to look up the matches. We will:\n", + "\n", + "1. Make a table that contains `source_id` and `original_ext_source_id`.\n", + "\n", + "2. Write the table to an XML VOTable file.\n", + "\n", + "3. Write a query that joins the uploaded table with `gaiadr2.panstarrs1_original_valid` and selects the photometry data we want.\n", + "\n", + "4. Run the query using the uploaded table.\n", + "\n", + "Since we've done everything here before, we'll do these steps as an exercise.\n", + "\n", + "**Exercise:** Select `source_id` and `original_ext_source_id` from `results1` and write the resulting table as a file named `external.xml`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "table = results1[['source_id', 'original_ext_source_id']]\n", + "table.write('external.xml', format='votable', overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use `!head` to confirm that the file exists and contains an XML VOTable." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + "
\r\n", + " \r\n", + " \r\n", + " Unique Gaia source identifier\r\n", + " \r\n" + ] + } + ], + "source": [ + "!head external.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of the Pan-STARRS table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_external_catalogues/ssec_dm_panstarrs1_original_valid.html) and make note of `obj_id`, which contains the object IDs we'll use to find the rows we want.\n", + "\n", + "Write a query that uses each value of `original_ext_source_id` from the uploaded table to find a row in `gaiadr2.panstarrs1_original_valid` with the same value in `obj_id`, and select all columns from both tables.\n", + "\n", + "Suggestion: Develop and test your query incrementally. For example:\n", + "\n", + "1. Write a query that downloads all columns from the uploaded table. Test to make sure we can read the uploaded table.\n", + "\n", + "2. Write a query that downloads the first 10 rows from `gaiadr2.panstarrs1_original_valid`. Test to make sure we can access Pan-STARRS data.\n", + "\n", + "3. Write a query that joins the two tables and selects all columns. Test that the join works as expected.\n", + "\n", + "\n", + "As a bonus exercise, write a query that joins the two tables and selects just the columns we need:\n", + "\n", + "* `source_id` from the uploaded table\n", + "\n", + "* `g_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid`\n", + "\n", + "* `i_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid`\n", + "\n", + "Hint: When you select a column from a join, you have to specify which table the column is in." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT *\n", + "FROM tap_upload.external as external\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT TOP 10 *\n", + "FROM gaiadr2.panstarrs1_original_valid\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT *\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query2 = \"\"\"SELECT\n", + "external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT\n", + "external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag\n", + "FROM gaiadr2.panstarrs1_original_valid as ps\n", + "JOIN tap_upload.external as external\n", + "ON ps.obj_id = external.original_ext_source_id\n", + "\n" + ] + } + ], + "source": [ + "print(query2)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query=query2, \n", + " upload_resource='external.xml', \n", + " upload_table_name='external')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3724\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idg_mean_psf_magi_mean_psf_mag
mag
int64float64float64
63586021872665817617.897800445556617.5174007415771
63567412638396556819.287300109863317.6781005859375
63553545477498304016.923799514770516.478099822998
63549727681031360019.924200057983418.3339996337891
63561416864013286416.151599884033214.6662998199463
63559860797436979216.522399902343816.1375007629395
63573766183549657614.503299713134813.9849004745483
63585094589274867216.517499923706116.0450000762939
63560053211971366420.450599670410219.5177001953125
.........
61224178124912460820.234399795532218.6518001556396
61233214736144307221.384899139404320.3076000213623
61242674401680243217.828100204467817.4281005859375
61233173934034176021.865699768066419.5223007202148
61228273805826496022.515199661254919.9743995666504
61238633266869760019.379299163818417.9923000335693
61229617271781862417.494400024414116.926700592041
61225037548010176015.333000183105514.6280002593994
61239492689915916816.441400527954115.8212003707886
61225641850042316820.871599197387719.9612007141113
" + ], + "text/plain": [ + "\n", + " source_id g_mean_psf_mag i_mean_psf_mag \n", + " mag \n", + " int64 float64 float64 \n", + "------------------ ---------------- ----------------\n", + "635860218726658176 17.8978004455566 17.5174007415771\n", + "635674126383965568 19.2873001098633 17.6781005859375\n", + "635535454774983040 16.9237995147705 16.478099822998\n", + "635497276810313600 19.9242000579834 18.3339996337891\n", + "635614168640132864 16.1515998840332 14.6662998199463\n", + "635598607974369792 16.5223999023438 16.1375007629395\n", + "635737661835496576 14.5032997131348 13.9849004745483\n", + "635850945892748672 16.5174999237061 16.0450000762939\n", + "635600532119713664 20.4505996704102 19.5177001953125\n", + " ... ... ...\n", + "612241781249124608 20.2343997955322 18.6518001556396\n", + "612332147361443072 21.3848991394043 20.3076000213623\n", + "612426744016802432 17.8281002044678 17.4281005859375\n", + "612331739340341760 21.8656997680664 19.5223007202148\n", + "612282738058264960 22.5151996612549 19.9743995666504\n", + "612386332668697600 19.3792991638184 17.9923000335693\n", + "612296172717818624 17.4944000244141 16.926700592041\n", + "612250375480101760 15.3330001831055 14.6280002593994\n", + "612394926899159168 16.4414005279541 15.8212003707886\n", + "612256418500423168 20.8715991973877 19.9612007141113" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Challenge exercise**\n", + "\n", + "Do both joins in one query.\n", + "\n", + "There's an [example here](https://github.com/smoh/Getting-started-with-Gaia/blob/master/gaia-adql-snippets.md) you could start with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Write the data\n", + "\n", + "Since we have the data in an Astropy `Table`, let's store it in a FITS file." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_photo.fits'\n", + "results2.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can check that the file exists, and see how big it is." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 96K Oct 19 14:49 gd1_photo.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_photo.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At around 175 KB, it is smaller than some of the other files we've been working with.\n", + "\n", + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_photo.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we used database `JOIN` operations to select photometry data for the stars we've identified as candidates to be in GD-1.\n", + "\n", + "In the next notebook, we'll use this data for a second round of selection, identifying stars that have photometry data consistent with GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practice\n", + "\n", + "* Use `JOIN` operations to combine data from multiple tables in a databased, using some kind of identifier to match up records from one table with records from another.\n", + "\n", + "* This is another example of a practice we saw in the previous notebook, moving the computation to the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_build/jupyter_execute/05_join.py b/_build/jupyter_execute/05_join.py new file mode 100644 index 0000000..8f23dd3 --- /dev/null +++ b/_build/jupyter_execute/05_join.py @@ -0,0 +1,564 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 5 +# +# This is the fifth in a series of notebooks related to astronomy data. +# +# As a continuing example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# Picking up where we left off, the next step in the analysis is to select candidate stars based on photometry. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion: +# +# +# +# In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. +# +# By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars. + +# ## Outline +# +# Here are the steps in this notebook: +# +# 1. We'll reload the candidate stars we identified in the previous notebook. +# +# 2. Then we'll run a query on the Gaia server that uploads the table of candidates and uses a `JOIN` operation to select photometry data for the candidate stars. +# +# 3. We'll write the results to a file for use in the next notebook. +# +# After completing this lesson, you should be able to +# +# * Upload a table to the Gaia server. +# +# * Write ADQL queries involving `JOIN` operations. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia python-wget') + + +# ## Reloading the data +# +# The following cell downloads the data from the previous notebook. + +# In[2]: + + +import os +from wget import download + +filename = 'gd1_candidates.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# And we can read it back. + +# In[3]: + + +import pandas as pd + +candidate_df = pd.read_hdf(filename, 'candidate_df') + + +# `candidate_df` is the Pandas DataFrame that contains results from the query in the previous notebook, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame. + +# In[4]: + + +import matplotlib.pyplot as plt + +x = candidate_df['phi1'] +y = candidate_df['phi2'] + +plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3) + +plt.xlabel('ra (degree GD1)') +plt.ylabel('dec (degree GD1)'); + + +# This is the same figure we saw at the end of the previous notebook. GD-1 is visible against the background stars, but we will be able to see it more clearly after selecting based on photometry data. + +# ## Getting photometry data +# +# The Gaia dataset contains some photometry data, including the variable `bp_rp`, which we used in the original query to select stars with BP - RP color between -0.75 and 2. +# +# Selecting stars with `bp-rp` less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. +# +# Now, to select stars with the age and metal richness we expect in GD-1, we will use `g - i` color and apparent `g`-band magnitude, which are available from the Pan-STARRS survey. + +# Conveniently, the Gaia server provides data from Pan-STARRS as a table in the same database we have been using, so we can access it by making ADQL queries. +# +# In general, looking up a star from the Gaia catalog and finding the corresponding star in the Pan-STARRS catalog is not easy. This kind of cross matching is not always possible, because a star might appear in one catalog and not the other. And even when both stars are present, there might not be a clear one-to-one relationship between stars in the two catalogs. +# +# Fortunately, smart people have worked on this problem, and the Gaia database includes cross-matching tables that suggest a best neighbor in the Pan-STARRS catalog for many stars in the Gaia catalog. +# +# [This document describes the cross matching process](https://gea.esac.esa.int/archive/documentation/GDR2/Catalogue_consolidation/chap_cu9val_cu9val/ssec_cu9xma/sssec_cu9xma_extcat.html). Briefly, it uses a cone search to find possible matches in approximately the right position, then uses attributes like color and magnitude to choose pairs of stars most likely to be identical. + +# So the hard part of cross-matching has been done for us. However, using the results is a little tricky. +# +# But, it is also an opportunity to learn about one of the most important tools for working with databases: "joining" tables. +# +# In general, a "join" is an operation where you match up records from one table with records from another table using as a "key" a piece of information that is common to both tables, usually some kind of ID code. +# +# In this example: +# +# * Stars in the Gaia dataset are identified by `source_id`. +# +# * Stars in the Pan-STARRS dataset are identified by `obj_id`. + +# For each candidate star we have selected so far, we have the `source_id`; the goal is to find the `obj_id` for the same star (we hope) in the Pan-STARRS catalog. +# +# To do that we will: +# +# 1. Make a table that contains the `source_id` for each candidate star and upload the table to the Gaia server; +# +# 2. Use the `JOIN` operator to look up each `source_id` in the `gaiadr2.panstarrs1_best_neighbour` table, which contains the `obj_id` of the best match for each star in the Gaia catalog; then +# +# 3. Use the `JOIN` operator again to look up each `obj_id` in the `panstarrs1_original_valid` table, which contains the Pan-STARRS photometry data we want. +# +# Let's start with the first step, uploading a table. + +# ## Preparing a table for uploading +# +# For each candidate star, we want to find the corresponding row in the `gaiadr2.panstarrs1_best_neighbour` table. +# +# In order to do that, we have to: +# +# 1. Write the table in a local file as an XML VOTable, which is a format suitable for transmitting a table over a network. +# +# 2. Write an ADQL query that refers to the uploaded table. +# +# 3. Change the way we submit the job so it uploads the table before running the query. + +# The first step is not too difficult because Astropy provides a function called `writeto` that can write a `Table` in `XML`. +# +# [The documentation of this process is here](https://docs.astropy.org/en/stable/io/votable/). +# +# First we have to convert our Pandas `DataFrame` to an Astropy `Table`. + +# In[5]: + + +from astropy.table import Table + +candidate_table = Table.from_pandas(candidate_df) +type(candidate_table) + + +# To write the file, we can use `Table.write` with `format='votable'`, [as described here](https://docs.astropy.org/en/stable/io/unified.html#vo-tables). + +# In[6]: + + +table = candidate_table[['source_id']] +table.write('candidate_df.xml', format='votable', overwrite=True) + + +# Notice that we select a single column from the table, `source_id`. +# We could write the entire table to a file, but that would take longer to transmit over the network, and we really only need one column. +# +# This process, taking a structure like a `Table` and translating it into a form that can be transmitted over a network, is called [serialization](https://en.wikipedia.org/wiki/Serialization). +# +# XML is one of the most common serialization formats. One nice feature is that XML data is plain text, as opposed to binary digits, so you can read the file we just wrote: + +# In[7]: + + +get_ipython().system('head candidate_df.xml') + + +# XML is a general format, so different XML files contain different kinds of data. In order to read an XML file, it's not enough to know that it's XML; you also have to know the data format, which is called a [schema](https://en.wikipedia.org/wiki/XML_schema). +# +# In this example, the schema is VOTable; notice that one of the first tags in the file specifies the schema, and even includes the URL where you can get its definition. +# +# So this is an example of a self-documenting format. +# +# A drawback of XML is that it tends to be big, which is why we wrote just the `source_id` column rather than the whole table. +# The size of the file is about 750 KB, so that's not too bad. + +# In[8]: + + +get_ipython().system('ls -lh candidate_df.xml') + + +# If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir candidate_df.xml +# ``` + +# **Exercise:** There's a gotcha here we want to warn you about. Why do you think we used double brackets to specify the column we wanted? What happens if you use single brackets? +# +# Run these cells to find out. + +# In[9]: + + +table = candidate_table[['source_id']] +type(table) + + +# In[10]: + + +column = candidate_table['source_id'] +type(column) + + +# In[11]: + + +# writeto(column, 'candidate_df.xml') + + +# ## Uploading a table +# +# The next step is to upload this table to the Gaia server and use it as part of a query. +# +# [Here's the documentation that explains how to run a query with an uploaded table](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html#synchronous-query-on-an-on-the-fly-uploaded-table). +# +# In the spirit of incremental development and testing, let's start with the simplest possible query. + +# In[12]: + + +query = """SELECT * +FROM tap_upload.candidate_df +""" + + +# This query downloads all rows and all columns from the uploaded table. The name of the table has two parts: `tap_upload` specifies a table that was uploaded using TAP+ (remember that's the name of the protocol we're using to talk to the Gaia server). +# +# And `candidate_df` is the name of the table, which we get to choose (unlike `tap_upload`, which we didn't get to choose). +# +# Here's how we run the query: + +# In[13]: + + +from astroquery.gaia import Gaia + +job = Gaia.launch_job_async(query=query, + upload_resource='candidate_df.xml', + upload_table_name='candidate_df') + + +# `upload_resource` specifies the name of the file we want to upload, which is the file we just wrote. +# +# `upload_table_name` is the name we assign to this table, which is the name we used in the query. +# +# And here are the results: + +# In[14]: + + +results = job.get_results() +results + + +# If things go according to plan, the result should contain the same rows and columns as the uploaded table. + +# In[15]: + + +len(candidate_table), len(results) + + +# In[16]: + + +set(candidate_table['source_id']) == set(results['source_id']) + + +# In this example, we uploaded a table and then downloaded it again, so that's not too useful. +# +# But now that we can upload a table, we can join it with other tables on the Gaia server. + +# ## Joining with an uploaded table +# +# Here's the first example of a query that contains a `JOIN` clause. + +# In[17]: + + +query1 = """SELECT * +FROM gaiadr2.panstarrs1_best_neighbour as best +JOIN tap_upload.candidate_df as candidate_df +ON best.source_id = candidate_df.source_id +""" + + +# Let's break that down one clause at a time: +# +# * `SELECT *` means we will download all columns from both tables. +# +# * `FROM gaiadr2.panstarrs1_best_neighbour as best` means that we'll get the columns from the Pan-STARRS best neighbor table, which we'll refer to using the short name `best`. +# +# * `JOIN tap_upload.candidate_df as candidate_df` means that we'll also get columns from the uploaded table, which we'll refer to using the short name `candidate_df`. +# +# * `ON best.source_id = candidate_df.source_id` specifies that we will use `source_id ` to match up the rows from the two tables. +# +# Here's the [documentation of the best neighbor table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_crossmatches/ssec_dm_panstarrs1_best_neighbour.html). +# +# Let's run the query: + +# In[18]: + + +job1 = Gaia.launch_job_async(query=query1, + upload_resource='candidate_df.xml', + upload_table_name='candidate_df') + + +# And get the results. + +# In[19]: + + +results1 = job1.get_results() +results1 + + +# This table contains all of the columns from the best neighbor table, plus the single column from the uploaded table. + +# In[20]: + + +results1.colnames + + +# Because one of the column names appears in both tables, the second instance of `source_id` has been appended with the suffix `_2`. +# +# The length of the results table is about 2000, which means we were not able to find matches for all stars in the list of candidate_df. + +# In[21]: + + +len(results1) + + +# To get more information about the matching process, we can inspect `best_neighbour_multiplicity`, which indicates for each star in Gaia how many stars in Pan-STARRS are equally likely matches. +# +# For this kind of data exploration, we'll convert a column from the table to a Pandas `Series` so we can use `value_counts`, which counts the number of times each value appears in a `Series`, like a histogram. + +# In[22]: + + +import pandas as pd + +nn = pd.Series(results1['best_neighbour_multiplicity']) +nn.value_counts() + + +# The result shows that `1` is the only value in the `Series`, appearing xxx times. +# +# That means that in every case where a match was found, the matching algorithm identified a single neighbor as the most likely match. +# +# Similarly, `number_of_mates` indicates the number of other stars in Gaia that match with the same star in Pan-STARRS. + +# In[23]: + + +nm = pd.Series(results1['number_of_mates']) +nm.value_counts() + + +# For this set of candidate_df, almost all of the stars we've selected from Pan-STARRS are only matched with a single star in the Gaia catalog. +# +# **Detail** The table also contains `number_of_neighbors` which is the number of stars in Pan-STARRS that match in terms of position, before using other critieria to choose the most likely match. + +# ## Getting the photometry data +# +# The most important column in `results1` is `original_ext_source_id` which is the `obj_id` we will use to look up the likely matches in Pan-STARRS to get photometry data. +# +# The process is similar to what we just did to look up the matches. We will: +# +# 1. Make a table that contains `source_id` and `original_ext_source_id`. +# +# 2. Write the table to an XML VOTable file. +# +# 3. Write a query that joins the uploaded table with `gaiadr2.panstarrs1_original_valid` and selects the photometry data we want. +# +# 4. Run the query using the uploaded table. +# +# Since we've done everything here before, we'll do these steps as an exercise. +# +# **Exercise:** Select `source_id` and `original_ext_source_id` from `results1` and write the resulting table as a file named `external.xml`. + +# In[24]: + + +# Solution + +table = results1[['source_id', 'original_ext_source_id']] +table.write('external.xml', format='votable', overwrite=True) + + +# Use `!head` to confirm that the file exists and contains an XML VOTable. + +# In[25]: + + +get_ipython().system('head external.xml') + + +# **Exercise:** Read [the documentation of the Pan-STARRS table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_external_catalogues/ssec_dm_panstarrs1_original_valid.html) and make note of `obj_id`, which contains the object IDs we'll use to find the rows we want. +# +# Write a query that uses each value of `original_ext_source_id` from the uploaded table to find a row in `gaiadr2.panstarrs1_original_valid` with the same value in `obj_id`, and select all columns from both tables. +# +# Suggestion: Develop and test your query incrementally. For example: +# +# 1. Write a query that downloads all columns from the uploaded table. Test to make sure we can read the uploaded table. +# +# 2. Write a query that downloads the first 10 rows from `gaiadr2.panstarrs1_original_valid`. Test to make sure we can access Pan-STARRS data. +# +# 3. Write a query that joins the two tables and selects all columns. Test that the join works as expected. +# +# +# As a bonus exercise, write a query that joins the two tables and selects just the columns we need: +# +# * `source_id` from the uploaded table +# +# * `g_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid` +# +# * `i_mean_psf_mag` from `gaiadr2.panstarrs1_original_valid` +# +# Hint: When you select a column from a join, you have to specify which table the column is in. + +# In[26]: + + +# Solution + +query2 = """SELECT * +FROM tap_upload.external as external +""" + + +# In[27]: + + +# Solution + +query2 = """SELECT TOP 10 * +FROM gaiadr2.panstarrs1_original_valid +""" + + +# In[28]: + + +# Solution + +query2 = """SELECT * +FROM gaiadr2.panstarrs1_original_valid as ps +JOIN tap_upload.external as external +ON ps.obj_id = external.original_ext_source_id +""" + + +# In[29]: + + +# Solution + +query2 = """SELECT +external.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag +FROM gaiadr2.panstarrs1_original_valid as ps +JOIN tap_upload.external as external +ON ps.obj_id = external.original_ext_source_id +""" + + +# In[30]: + + +print(query2) + + +# In[31]: + + +job2 = Gaia.launch_job_async(query=query2, + upload_resource='external.xml', + upload_table_name='external') + + +# In[32]: + + +results2 = job2.get_results() +results2 + + +# **Challenge exercise** +# +# Do both joins in one query. +# +# There's an [example here](https://github.com/smoh/Getting-started-with-Gaia/blob/master/gaia-adql-snippets.md) you could start with. + +# ## Write the data +# +# Since we have the data in an Astropy `Table`, let's store it in a FITS file. + +# In[33]: + + +filename = 'gd1_photo.fits' +results2.write(filename, overwrite=True) + + +# We can check that the file exists, and see how big it is. + +# In[34]: + + +get_ipython().system('ls -lh gd1_photo.fits') + + +# At around 175 KB, it is smaller than some of the other files we've been working with. +# +# If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_photo.fits +# ``` + +# ## Summary +# +# In this notebook, we used database `JOIN` operations to select photometry data for the stars we've identified as candidates to be in GD-1. +# +# In the next notebook, we'll use this data for a second round of selection, identifying stars that have photometry data consistent with GD-1. + +# ## Best practice +# +# * Use `JOIN` operations to combine data from multiple tables in a databased, using some kind of identifier to match up records from one table with records from another. +# +# * This is another example of a practice we saw in the previous notebook, moving the computation to the data. + +# In[ ]: + + + + diff --git a/_build/jupyter_execute/05_join_9_0.png b/_build/jupyter_execute/05_join_9_0.png new file mode 100644 index 0000000..eb6cc8c Binary files /dev/null and b/_build/jupyter_execute/05_join_9_0.png differ diff --git a/_build/jupyter_execute/06_photo.ipynb b/_build/jupyter_execute/06_photo.ipynb new file mode 100644 index 0000000..960a67a --- /dev/null +++ b/_build/jupyter_execute/06_photo.ipynb @@ -0,0 +1,1384 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 6\n", + "\n", + "This is the sixth in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the previous lesson we downloaded photometry data from Pan-STARRS, which is available from the same server we've been using to get Gaia data. \n", + "\n", + "The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion:\n", + "\n", + "\n", + "\n", + "In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. \n", + "\n", + "By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. We'll reload the data from the previous notebook and make a color-magnitude diagram.\n", + "\n", + "2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect.\n", + "\n", + "3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Matplotlib to specify a `Polygon` and determine which points fall inside it.\n", + "\n", + "* Use Pandas to merge data from multiple `DataFrames`, much like a database `JOIN` operation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reload the data\n", + "\n", + "The following cell downloads the photometry data we created in the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_photo.fits'\n", + "filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(filepath+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can read the data back into an Astropy `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from astropy.table import Table\n", + "\n", + "photo_table = Table.read(filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting photometry data\n", + "\n", + "Now that we have photometry data from Pan-STARRS, we can replicate the [color-magnitude diagram](https://en.wikipedia.org/wiki/Galaxy_color%E2%80%93magnitude_diagram) from the original paper:\n", + "\n", + "\n", + "\n", + "The y-axis shows the apparent magnitude of each source with the [g filter](https://en.wikipedia.org/wiki/Photometric_system).\n", + "\n", + "The x-axis shows the difference in apparent magnitude between the g and i filters, which indicates color.\n", + "\n", + "Stars with lower values of (g-i) are brighter in g-band than in i-band, compared to other stars, which means they are bluer.\n", + "\n", + "Stars in the lower-left quadrant of this diagram are less bright and less metallic than the others, which means they are [likely to be older](http://spiff.rit.edu/classes/ladder/lectures/ordinary_stars/ordinary.html).\n", + "\n", + "Since we expect the stars in GD-1 to be older than the background stars, the stars in the lower-left are more likely to be in GD-1." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_cmd(table):\n", + " \"\"\"Plot a color magnitude diagram.\n", + " \n", + " table: Table or DataFrame with photometry data\n", + " \"\"\"\n", + " y = table['g_mean_psf_mag']\n", + " x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlim([0, 1.5])\n", + " plt.ylim([14, 22])\n", + " plt.gca().invert_yaxis()\n", + "\n", + " plt.ylabel('$g_0$')\n", + " plt.xlabel('$(g-i)_0$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`plot_cmd` uses a new function, `invert_yaxis`, to invert the `y` axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness.\n", + "\n", + "`invert_yaxis` is a little different from the other functions we've used. You can't call it like this:\n", + "\n", + "```\n", + "plt.invert_yaxis() # doesn't work\n", + "```\n", + "\n", + "You have to call it like this:\n", + "\n", + "```\n", + "plt.gca().invert_yaxis() # works\n", + "```\n", + "\n", + "`gca` stands for \"get current axis\". It returns an object that represents the axes of the current figure, and that object provides `invert_yaxis`.\n", + "\n", + "**In case anyone asks:** The most likely reason for this inconsistency in the interface is that `invert_yaxis` is a lesser-used function, so it's not made available at the top level of the interface." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/06_photo_12_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don't have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD-1.\n", + "\n", + "The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD-1 or not.\n", + "\n", + "As a simplification, we'll choose a boundary by eye that seems to contain the overdense region." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Drawing a polygon\n", + "\n", + "Matplotlib provides a function called `ginput` that lets us click on the figure and make a list of coordinates.\n", + "\n", + "It's a little tricky to use `ginput` in a Jupyter notebook. \n", + "Before calling `plt.ginput` we have to tell Matplotlib to use `TkAgg` to draw the figure in a new window.\n", + "\n", + "When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib as mpl\n", + "\n", + "if IN_COLAB:\n", + " coords = None\n", + "else:\n", + " mpl.use('TkAgg')\n", + " plot_cmd(photo_table)\n", + " coords = plt.ginput(10)\n", + " mpl.use('agg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The argument to `ginput` is the number of times the user has to click on the figure.\n", + "\n", + "The result from `ginput` is a list of coordinate pairs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0.2150537634408602, 17.548197203826344),\n", + " (0.3897849462365591, 18.94628403237675),\n", + " (0.5376344086021505, 19.902869757174393),\n", + " (0.7034050179211468, 20.601913171449596),\n", + " (0.8288530465949819, 21.300956585724798),\n", + " (0.6630824372759856, 21.52170713760118),\n", + " (0.4301075268817204, 20.785871964679913),\n", + " (0.27329749103942647, 19.71891096394408),\n", + " (0.17473118279569888, 18.688741721854306),\n", + " (0.17473118279569888, 17.95290654893304)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coords" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If `ginput` doesn't work for you, you could use the following coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "if coords is None:\n", + " coords = [(0.2, 17.5), \n", + " (0.2, 19.5), \n", + " (0.65, 22),\n", + " (0.75, 21),\n", + " (0.4, 19),\n", + " (0.4, 17.5)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of `x` coordinates and a sequence of `y` coordinates. The NumPy function `transpose` does what we want. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([0.21505376, 0.38978495, 0.53763441, 0.70340502, 0.82885305,\n", + " 0.66308244, 0.43010753, 0.27329749, 0.17473118, 0.17473118]),\n", + " array([17.5481972 , 18.94628403, 19.90286976, 20.60191317, 21.30095659,\n", + " 21.52170714, 20.78587196, 19.71891096, 18.68874172, 17.95290655]))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "xs, ys = np.transpose(coords)\n", + "xs, ys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To display the polygon, we'll draw the figure again and use `plt.plot` to draw the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/06_photo_23_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)\n", + "plt.plot(xs, ys);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again.\n", + "\n", + "If you want a polygon with more points (or fewer), you can change the argument to `ginput`.\n", + "\n", + "The polygon does not have to be \"closed\". When we use this polygon in the next section, the last and first points will be connected by a straight line.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Which points are in the polygon?\n", + "\n", + "Matplotlib provides a `Path` object that we can use to check which points fall in the polygon we selected.\n", + "\n", + "Here's how we make a `Path` using a list of coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Path(array([[ 0.21505376, 17.5481972 ],\n", + " [ 0.38978495, 18.94628403],\n", + " [ 0.53763441, 19.90286976],\n", + " [ 0.70340502, 20.60191317],\n", + " [ 0.82885305, 21.30095659],\n", + " [ 0.66308244, 21.52170714],\n", + " [ 0.43010753, 20.78587196],\n", + " [ 0.27329749, 19.71891096],\n", + " [ 0.17473118, 18.68874172],\n", + " [ 0.17473118, 17.95290655]]), None)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from matplotlib.path import Path\n", + "\n", + "path = Path(coords)\n", + "path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Path` provides `contains_points`, which figures out which points are inside the polygon.\n", + "\n", + "To test it, we'll create a list with two points, one inside the polygon and one outside." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "points = [(0.4, 20), \n", + " (0.4, 30)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can make sure `contains_points` does what we expect." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, False])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside = path.contains_points(points)\n", + "inside" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an array of Boolean values.\n", + "\n", + "We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reloading the data\n", + "\n", + "Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(filepath+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`candidate_df` is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Merging photometry data\n", + "\n", + "Before we select stars based on photometry data, we have to solve two problems:\n", + "\n", + "1. We only have Pan-STARRS data for some stars in `candidate_df`.\n", + "\n", + "2. Even for the stars where we have Pan-STARRS data in `photo_table`, some photometry data is missing.\n", + "\n", + "We will solve these problems in two step:\n", + "\n", + "1. We'll merge the data from `candidate_df` and `photo_table` into a single Pandas `DataFrame`.\n", + "\n", + "2. We'll use Pandas functions to deal with missing data.\n", + "\n", + "`candidate_df` is already a `DataFrame`, but `results` is an Astropy `Table`. Let's convert it to Pandas:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id\n", + "g_mean_psf_mag\n", + "i_mean_psf_mag\n" + ] + } + ], + "source": [ + "photo_df = photo_table.to_pandas()\n", + "\n", + "for colname in photo_df.columns:\n", + " print(colname)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we want to combine `candidate_df` and `photo_df` into a single table, using `source_id` to match up the rows.\n", + "\n", + "You might recognize this task; it's the same as the JOIN operation in ADQL/SQL.\n", + "\n", + "Pandas provides a function called `merge` that does what we want. Here's how we use it." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocityphi1phi2pm_phi1pm_phi2g_mean_psf_magi_mean_psf_mag
0635559124339440000137.58671719.196544-3.770522-12.4904820.7913930.271754NaN-59.630489-1.216485-7.361363-0.592633NaNNaN
1635860218726658176138.51870719.092339-5.941679-11.3464090.3074560.199466NaN-59.247330-2.016078-7.5271261.74877917.897817.517401
2635674126383965568138.84287419.031798-3.897001-12.7027800.7794630.223692NaN-59.133391-2.306901-7.560608-0.74180019.287317.678101
3635535454774983040137.83775218.864007-4.335041-14.4923090.3145140.102775NaN-59.785300-1.594569-9.357536-1.21849216.923816.478100
4635497276810313600138.04451619.009471-7.172931-12.2914990.4254040.337689NaN-59.557744-1.682147-9.0008312.33440719.924218.334000
\n", + "" + ], + "text/plain": [ + " source_id ra dec pmra pmdec parallax \\\n", + "0 635559124339440000 137.586717 19.196544 -3.770522 -12.490482 0.791393 \n", + "1 635860218726658176 138.518707 19.092339 -5.941679 -11.346409 0.307456 \n", + "2 635674126383965568 138.842874 19.031798 -3.897001 -12.702780 0.779463 \n", + "3 635535454774983040 137.837752 18.864007 -4.335041 -14.492309 0.314514 \n", + "4 635497276810313600 138.044516 19.009471 -7.172931 -12.291499 0.425404 \n", + "\n", + " parallax_error radial_velocity phi1 phi2 pm_phi1 pm_phi2 \\\n", + "0 0.271754 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 0.199466 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 0.223692 NaN -59.133391 -2.306901 -7.560608 -0.741800 \n", + "3 0.102775 NaN -59.785300 -1.594569 -9.357536 -1.218492 \n", + "4 0.337689 NaN -59.557744 -1.682147 -9.000831 2.334407 \n", + "\n", + " g_mean_psf_mag i_mean_psf_mag \n", + "0 NaN NaN \n", + "1 17.8978 17.517401 \n", + "2 19.2873 17.678101 \n", + "3 16.9238 16.478100 \n", + "4 19.9242 18.334000 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged = pd.merge(candidate_df, \n", + " photo_df, \n", + " on='source_id', \n", + " how='left')\n", + "merged.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first argument is the \"left\" table, the second argument is the \"right\" table, and the keyword argument `on='source_id'` specifies a column to use to match up the rows.\n", + "\n", + "The argument `how='left'` means that the result should have all rows from the left table, even if some of them don't match up with a row in the right table.\n", + "\n", + "If you are interested in the other options for `how`, you can [read the documentation of `merge`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html).\n", + "\n", + "You can also do different types of join in ADQL/SQL; [you can read about that here](https://www.w3schools.com/sql/sql_join.asp).\n", + "\n", + "The result is a `DataFrame` that contains the same number of rows as `candidate_df`. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(7346, 3724, 7346)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(candidate_df), len(photo_df), len(merged)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And all columns from both tables." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id\n", + "ra\n", + "dec\n", + "pmra\n", + "pmdec\n", + "parallax\n", + "parallax_error\n", + "radial_velocity\n", + "phi1\n", + "phi2\n", + "pm_phi1\n", + "pm_phi2\n", + "g_mean_psf_mag\n", + "i_mean_psf_mag\n" + ] + } + ], + "source": [ + "for colname in merged.columns:\n", + " print(colname)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Detail** You might notice that Pandas also provides a function called `join`; it does almost the same thing, but the interface is slightly different. We think `merge` is a little easier to use, so that's what we chose. It's also more consistent with JOIN in SQL, so if you learn how to use `pd.merge`, you are also learning how to use SQL JOIN.\n", + "\n", + "Also, someone might ask why we have to use Pandas to do this join; why didn't we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Missing data\n", + "\n", + "Let's add columns to the merged table for magnitude and color." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "merged['mag'] = merged['g_mean_psf_mag']\n", + "merged['color'] = merged['g_mean_psf_mag'] - merged['i_mean_psf_mag']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These columns contain the special value `NaN` where we are missing data.\n", + "\n", + "We can use `notnull` to see which rows contain value data, that is, not null values." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 True\n", + "2 True\n", + "3 True\n", + "4 True\n", + " ... \n", + "7341 True\n", + "7342 False\n", + "7343 False\n", + "7344 True\n", + "7345 False\n", + "Name: color, Length: 7346, dtype: bool" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged['color'].notnull()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And `sum` to count the number of valid values." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3724" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged['color'].notnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For scientific purposes, it's not obvious what we should do with candidate stars if we don't have photometry data. Should we give them the benefit of the doubt or leave them out?\n", + "\n", + "In part the answer depends on the goal: are we trying to identify more stars that might be in GD-1, or a smaller set of stars that have higher probability?\n", + "\n", + "In the next section, we'll leave them out, but you can experiment with the alternative." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting based on photometry\n", + "\n", + "Now let's see how many of these points are inside the polygon we chose.\n", + "\n", + "We can use a list of column names to select `color` and `mag`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
colormag
0NaNNaN
10.380417.8978
21.609219.2873
30.445716.9238
41.590219.9242
\n", + "
" + ], + "text/plain": [ + " color mag\n", + "0 NaN NaN\n", + "1 0.3804 17.8978\n", + "2 1.6092 19.2873\n", + "3 0.4457 16.9238\n", + "4 1.5902 19.9242" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "points = merged[['color', 'mag']]\n", + "points.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `DataFrame` that can be treated as a sequence of coordinates, so we can pass it to `contains_points`:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([False, False, False, ..., False, False, False])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside = path.contains_points(points)\n", + "inside" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a Boolean array. We can use `sum` to see how many stars fall in the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "496" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inside.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `inside` as a mask to select stars that fall inside the polygon." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "selected = merged[inside]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's make a color-magnitude plot one more time, highlighting the selected stars with green `x` marks." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/06_photo_61_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(photo_table)\n", + "plt.plot(xs, ys)\n", + "\n", + "plt.plot(selected['color'], selected['mag'], 'gx');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD-1.\n", + "\n", + "Finally, we can plot the coordinates of the selected stars:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/06_photo_63_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,2.5))\n", + "\n", + "x = selected['phi1']\n", + "y = selected['phi2']\n", + "\n", + "plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)\n", + "\n", + "plt.xlabel('ra (degree GD1)')\n", + "plt.ylabel('dec (degree GD1)')\n", + "\n", + "plt.axis('equal');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example includes two new Matplotlib commands:\n", + "\n", + "* `figure` creates the figure. In previous examples, we didn't have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like `figsize`, which sets the size of the figure.\n", + "\n", + "* `axis` with the parameter `equal` sets up the axes so a unit is the same size along the `x` and `y` axes.\n", + "\n", + "In an example like this, where `x` and `y` represent coordinates in space, equal axes ensures that the distance between points is represented accurately. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Write the data\n", + "\n", + "Let's write the merged DataFrame to a file." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_merged.hdf5'\n", + "\n", + "merged.to_hdf(filename, 'merged')\n", + "selected.to_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 2.0M Oct 19 17:21 gd1_merged.hdf5\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_merged.hdf5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_merged.hdf5\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save the polygon\n", + "\n", + "[Reproducibile research](https://en.wikipedia.org/wiki/Reproducibility#Reproducible_research) is \"the idea that ... the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research.\"\n", + "\n", + "This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis.\n", + "\n", + "However, when we used `ginput` to define a polygon by hand, we introduced a non-reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline.\n", + "\n", + "Since `coords` is a NumPy array, we can't use `to_hdf` to save it in a file. But we can convert it to a Pandas `DataFrame` and save that.\n", + "\n", + "As an alternative, we could use [PyTables](http://www.pytables.org/index.html), which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let's take advantage of Pandas." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "coords_df = pd.DataFrame(coords)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_polygon.hdf5'\n", + "coords_df.to_hdf(filename, 'coords_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can read it back like this." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "coords2_df = pd.read_hdf(filename, 'coords_df')\n", + "coords2 = coords2_df.to_numpy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And verify that the data we read back is the same." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.all(coords2 == coords)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan-STARRS.\n", + "\n", + "We drew a color-magnitude diagram and used it to identify stars we think are likely to be in GD-1.\n", + "\n", + "Then we used a Pandas `merge` operation to combine the data into a single `DataFrame`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you want to perform something like a database `JOIN` operation with data that is in a Pandas `DataFrame`, you can use the `join` or `merge` function. In many cases, `merge` is easier to use because the arguments are more like SQL.\n", + "\n", + "* Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes.\n", + "\n", + "* Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it's not just for making figures.\n", + "\n", + "* Be sure to record every element of the data analysis pipeline that would be needed to replicate the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/06_photo.py b/_build/jupyter_execute/06_photo.py new file mode 100644 index 0000000..ad2d8a7 --- /dev/null +++ b/_build/jupyter_execute/06_photo.py @@ -0,0 +1,569 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 6 +# +# This is the sixth in a series of notebooks related to astronomy data. +# +# As a continuing example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the previous lesson we downloaded photometry data from Pan-STARRS, which is available from the same server we've been using to get Gaia data. +# +# The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color-magnitude diagram for the stars selected based on proper motion: +# +# +# +# In red is a theoretical isochrone, showing where we expect the stars in GD-1 to fall based on the metallicity and age of their original globular cluster. +# +# By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from younger background stars. + +# ## Outline +# +# Here are the steps in this notebook: +# +# 1. We'll reload the data from the previous notebook and make a color-magnitude diagram. +# +# 2. Then we'll specify a polygon in the diagram that contains stars with the photometry we expect. +# +# 3. Then we'll merge the photometry data with the list of candidate stars, storing the result in a Pandas `DataFrame`. +# +# After completing this lesson, you should be able to +# +# * Use Matplotlib to specify a `Polygon` and determine which points fall inside it. +# +# * Use Pandas to merge data from multiple `DataFrames`, much like a database `JOIN` operation. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia python-wget') + + +# ## Reload the data +# +# The following cell downloads the photometry data we created in the previous notebook. + +# In[2]: + + +import os +from wget import download + +filename = 'gd1_photo.fits' +filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(filepath+filename)) + + +# Now we can read the data back into an Astropy `Table`. + +# In[3]: + + +from astropy.table import Table + +photo_table = Table.read(filename) + + +# ## Plotting photometry data +# +# Now that we have photometry data from Pan-STARRS, we can replicate the [color-magnitude diagram](https://en.wikipedia.org/wiki/Galaxy_color%E2%80%93magnitude_diagram) from the original paper: +# +# +# +# The y-axis shows the apparent magnitude of each source with the [g filter](https://en.wikipedia.org/wiki/Photometric_system). +# +# The x-axis shows the difference in apparent magnitude between the g and i filters, which indicates color. +# +# Stars with lower values of (g-i) are brighter in g-band than in i-band, compared to other stars, which means they are bluer. +# +# Stars in the lower-left quadrant of this diagram are less bright and less metallic than the others, which means they are [likely to be older](http://spiff.rit.edu/classes/ladder/lectures/ordinary_stars/ordinary.html). +# +# Since we expect the stars in GD-1 to be older than the background stars, the stars in the lower-left are more likely to be in GD-1. + +# In[4]: + + +import matplotlib.pyplot as plt + +def plot_cmd(table): + """Plot a color magnitude diagram. + + table: Table or DataFrame with photometry data + """ + y = table['g_mean_psf_mag'] + x = table['g_mean_psf_mag'] - table['i_mean_psf_mag'] + + plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3) + + plt.xlim([0, 1.5]) + plt.ylim([14, 22]) + plt.gca().invert_yaxis() + + plt.ylabel('$g_0$') + plt.xlabel('$(g-i)_0$') + + +# `plot_cmd` uses a new function, `invert_yaxis`, to invert the `y` axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness. +# +# `invert_yaxis` is a little different from the other functions we've used. You can't call it like this: +# +# ``` +# plt.invert_yaxis() # doesn't work +# ``` +# +# You have to call it like this: +# +# ``` +# plt.gca().invert_yaxis() # works +# ``` +# +# `gca` stands for "get current axis". It returns an object that represents the axes of the current figure, and that object provides `invert_yaxis`. +# +# **In case anyone asks:** The most likely reason for this inconsistency in the interface is that `invert_yaxis` is a lesser-used function, so it's not made available at the top level of the interface. + +# Here's what the results look like. + +# In[5]: + + +plot_cmd(photo_table) + + +# Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don't have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD-1. +# +# The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD-1 or not. +# +# As a simplification, we'll choose a boundary by eye that seems to contain the overdense region. + +# ## Drawing a polygon +# +# Matplotlib provides a function called `ginput` that lets us click on the figure and make a list of coordinates. +# +# It's a little tricky to use `ginput` in a Jupyter notebook. +# Before calling `plt.ginput` we have to tell Matplotlib to use `TkAgg` to draw the figure in a new window. +# +# When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click. + +# In[6]: + + +import matplotlib as mpl + +if IN_COLAB: + coords = None +else: + mpl.use('TkAgg') + plot_cmd(photo_table) + coords = plt.ginput(10) + mpl.use('agg') + + +# The argument to `ginput` is the number of times the user has to click on the figure. +# +# The result from `ginput` is a list of coordinate pairs. + +# In[7]: + + +coords + + +# If `ginput` doesn't work for you, you could use the following coordinates. + +# In[8]: + + +if coords is None: + coords = [(0.2, 17.5), + (0.2, 19.5), + (0.65, 22), + (0.75, 21), + (0.4, 19), + (0.4, 17.5)] + + +# The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of `x` coordinates and a sequence of `y` coordinates. The NumPy function `transpose` does what we want. + +# In[9]: + + +import numpy as np + +xs, ys = np.transpose(coords) +xs, ys + + +# To display the polygon, we'll draw the figure again and use `plt.plot` to draw the polygon. + +# In[10]: + + +plot_cmd(photo_table) +plt.plot(xs, ys); + + +# If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again. +# +# If you want a polygon with more points (or fewer), you can change the argument to `ginput`. +# +# The polygon does not have to be "closed". When we use this polygon in the next section, the last and first points will be connected by a straight line. +# + +# ## Which points are in the polygon? +# +# Matplotlib provides a `Path` object that we can use to check which points fall in the polygon we selected. +# +# Here's how we make a `Path` using a list of coordinates. + +# In[11]: + + +from matplotlib.path import Path + +path = Path(coords) +path + + +# `Path` provides `contains_points`, which figures out which points are inside the polygon. +# +# To test it, we'll create a list with two points, one inside the polygon and one outside. + +# In[12]: + + +points = [(0.4, 20), + (0.4, 30)] + + +# Now we can make sure `contains_points` does what we expect. + +# In[13]: + + +inside = path.contains_points(points) +inside + + +# The result is an array of Boolean values. +# +# We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning. + +# ## Reloading the data +# +# Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it: +# +# + +# In[14]: + + +import os +from wget import download + +filename = 'gd1_candidates.hdf5' +filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(filepath+filename)) + + +# In[15]: + + +import pandas as pd + +candidate_df = pd.read_hdf(filename, 'candidate_df') + + +# `candidate_df` is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD-1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame. + +# ## Merging photometry data +# +# Before we select stars based on photometry data, we have to solve two problems: +# +# 1. We only have Pan-STARRS data for some stars in `candidate_df`. +# +# 2. Even for the stars where we have Pan-STARRS data in `photo_table`, some photometry data is missing. +# +# We will solve these problems in two step: +# +# 1. We'll merge the data from `candidate_df` and `photo_table` into a single Pandas `DataFrame`. +# +# 2. We'll use Pandas functions to deal with missing data. +# +# `candidate_df` is already a `DataFrame`, but `results` is an Astropy `Table`. Let's convert it to Pandas: + +# In[16]: + + +photo_df = photo_table.to_pandas() + +for colname in photo_df.columns: + print(colname) + + +# Now we want to combine `candidate_df` and `photo_df` into a single table, using `source_id` to match up the rows. +# +# You might recognize this task; it's the same as the JOIN operation in ADQL/SQL. +# +# Pandas provides a function called `merge` that does what we want. Here's how we use it. + +# In[17]: + + +merged = pd.merge(candidate_df, + photo_df, + on='source_id', + how='left') +merged.head() + + +# The first argument is the "left" table, the second argument is the "right" table, and the keyword argument `on='source_id'` specifies a column to use to match up the rows. +# +# The argument `how='left'` means that the result should have all rows from the left table, even if some of them don't match up with a row in the right table. +# +# If you are interested in the other options for `how`, you can [read the documentation of `merge`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html). +# +# You can also do different types of join in ADQL/SQL; [you can read about that here](https://www.w3schools.com/sql/sql_join.asp). +# +# The result is a `DataFrame` that contains the same number of rows as `candidate_df`. + +# In[18]: + + +len(candidate_df), len(photo_df), len(merged) + + +# And all columns from both tables. + +# In[19]: + + +for colname in merged.columns: + print(colname) + + +# **Detail** You might notice that Pandas also provides a function called `join`; it does almost the same thing, but the interface is slightly different. We think `merge` is a little easier to use, so that's what we chose. It's also more consistent with JOIN in SQL, so if you learn how to use `pd.merge`, you are also learning how to use SQL JOIN. +# +# Also, someone might ask why we have to use Pandas to do this join; why didn't we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server. + +# ## Missing data +# +# Let's add columns to the merged table for magnitude and color. + +# In[20]: + + +merged['mag'] = merged['g_mean_psf_mag'] +merged['color'] = merged['g_mean_psf_mag'] - merged['i_mean_psf_mag'] + + +# These columns contain the special value `NaN` where we are missing data. +# +# We can use `notnull` to see which rows contain value data, that is, not null values. + +# In[21]: + + +merged['color'].notnull() + + +# And `sum` to count the number of valid values. + +# In[22]: + + +merged['color'].notnull().sum() + + +# For scientific purposes, it's not obvious what we should do with candidate stars if we don't have photometry data. Should we give them the benefit of the doubt or leave them out? +# +# In part the answer depends on the goal: are we trying to identify more stars that might be in GD-1, or a smaller set of stars that have higher probability? +# +# In the next section, we'll leave them out, but you can experiment with the alternative. + +# ## Selecting based on photometry +# +# Now let's see how many of these points are inside the polygon we chose. +# +# We can use a list of column names to select `color` and `mag`. + +# In[23]: + + +points = merged[['color', 'mag']] +points.head() + + +# The result is a `DataFrame` that can be treated as a sequence of coordinates, so we can pass it to `contains_points`: + +# In[24]: + + +inside = path.contains_points(points) +inside + + +# The result is a Boolean array. We can use `sum` to see how many stars fall in the polygon. + +# In[25]: + + +inside.sum() + + +# Now we can use `inside` as a mask to select stars that fall inside the polygon. + +# In[26]: + + +selected = merged[inside] + + +# Let's make a color-magnitude plot one more time, highlighting the selected stars with green `x` marks. + +# In[27]: + + +plot_cmd(photo_table) +plt.plot(xs, ys) + +plt.plot(selected['color'], selected['mag'], 'gx'); + + +# It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD-1. +# +# Finally, we can plot the coordinates of the selected stars: + +# In[28]: + + +plt.figure(figsize=(10,2.5)) + +x = selected['phi1'] +y = selected['phi2'] + +plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9) + +plt.xlabel('ra (degree GD1)') +plt.ylabel('dec (degree GD1)') + +plt.axis('equal'); + + +# This example includes two new Matplotlib commands: +# +# * `figure` creates the figure. In previous examples, we didn't have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like `figsize`, which sets the size of the figure. +# +# * `axis` with the parameter `equal` sets up the axes so a unit is the same size along the `x` and `y` axes. +# +# In an example like this, where `x` and `y` represent coordinates in space, equal axes ensures that the distance between points is represented accurately. + +# ## Write the data +# +# Let's write the merged DataFrame to a file. + +# In[29]: + + +filename = 'gd1_merged.hdf5' + +merged.to_hdf(filename, 'merged') +selected.to_hdf(filename, 'selected') + + +# In[30]: + + +get_ipython().system('ls -lh gd1_merged.hdf5') + + +# If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_merged.hdf5 +# ``` + +# ## Save the polygon +# +# [Reproducibile research](https://en.wikipedia.org/wiki/Reproducibility#Reproducible_research) is "the idea that ... the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research." +# +# This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis. +# +# However, when we used `ginput` to define a polygon by hand, we introduced a non-reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline. +# +# Since `coords` is a NumPy array, we can't use `to_hdf` to save it in a file. But we can convert it to a Pandas `DataFrame` and save that. +# +# As an alternative, we could use [PyTables](http://www.pytables.org/index.html), which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let's take advantage of Pandas. + +# In[31]: + + +coords_df = pd.DataFrame(coords) + + +# In[32]: + + +filename = 'gd1_polygon.hdf5' +coords_df.to_hdf(filename, 'coords_df') + + +# We can read it back like this. + +# In[33]: + + +coords2_df = pd.read_hdf(filename, 'coords_df') +coords2 = coords2_df.to_numpy() + + +# And verify that the data we read back is the same. + +# In[34]: + + +np.all(coords2 == coords) + + +# ## Summary +# +# In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan-STARRS. +# +# We drew a color-magnitude diagram and used it to identify stars we think are likely to be in GD-1. +# +# Then we used a Pandas `merge` operation to combine the data into a single `DataFrame`. + +# ## Best practices +# +# * If you want to perform something like a database `JOIN` operation with data that is in a Pandas `DataFrame`, you can use the `join` or `merge` function. In many cases, `merge` is easier to use because the arguments are more like SQL. +# +# * Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes. +# +# * Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it's not just for making figures. +# +# * Be sure to record every element of the data analysis pipeline that would be needed to replicate the results. + +# In[ ]: + + + + diff --git a/_build/jupyter_execute/06_photo_12_0.png b/_build/jupyter_execute/06_photo_12_0.png new file mode 100644 index 0000000..f5b87d1 Binary files /dev/null and b/_build/jupyter_execute/06_photo_12_0.png differ diff --git a/_build/jupyter_execute/06_photo_23_0.png b/_build/jupyter_execute/06_photo_23_0.png new file mode 100644 index 0000000..7a3e394 Binary files /dev/null and b/_build/jupyter_execute/06_photo_23_0.png differ diff --git a/_build/jupyter_execute/06_photo_61_0.png b/_build/jupyter_execute/06_photo_61_0.png new file mode 100644 index 0000000..af7b03d Binary files /dev/null and b/_build/jupyter_execute/06_photo_61_0.png differ diff --git a/_build/jupyter_execute/06_photo_63_0.png b/_build/jupyter_execute/06_photo_63_0.png new file mode 100644 index 0000000..a2d1875 Binary files /dev/null and b/_build/jupyter_execute/06_photo_63_0.png differ diff --git a/_build/jupyter_execute/07_plot.ipynb b/_build/jupyter_execute/07_plot.ipynb new file mode 100644 index 0000000..af3572a --- /dev/null +++ b/_build/jupyter_execute/07_plot.ipynb @@ -0,0 +1,1197 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 7\n", + "\n", + "This is the seventh in a series of notebooks related to astronomy data.\n", + "\n", + "As a continuing example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the previous notebook we selected photometry data from Pan-STARRS and used it to identify stars we think are likely to be in GD-1\n", + "\n", + "In this notebook, we'll take the results from previous lessons and use them to make a figure that tells a compelling scientific story." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outline\n", + "\n", + "Here are the steps in this notebook:\n", + "\n", + "1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly.\n", + "\n", + "2. The we'll see several ways to customize figures to make them more appealing and effective.\n", + "\n", + "3. Finally, we'll see how to make a figure with multiple panels or subplots.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Design a figure that tells a compelling story.\n", + "\n", + "* Use Matplotlib features to customize the appearance of figures.\n", + "\n", + "* Generate a figure with multiple subplots." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia python-wget" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Making Figures That Tell a Story\n", + "\n", + "So far the figure we've made have been \"quick and dirty\". Mostly we have used Matplotlib's default style, although we have adjusted a few parameters, like `markersize` and `alpha`, to improve legibility.\n", + "\n", + "Now that the analysis is done, it's time to think more about:\n", + "\n", + "1. Making professional-looking figures that are ready for publication, and\n", + "\n", + "2. Making figures that communicate a scientific result clearly and compellingly.\n", + "\n", + "Not necessarily in that order." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start by reviewing Figure 1 from the original paper. We've seen the individual panels, but now let's look at the whole thing, along with the caption:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Think about the following questions:\n", + "\n", + "1. What is the primary scientific result of this work?\n", + "\n", + "2. What story is this figure telling?\n", + "\n", + "3. In the design of this figure, can you identify 1-2 choices the authors made that you think are effective? Think about big-picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface.\n", + "\n", + "4. Can you identify 1-2 elements that could be improved, or that you might have done differently?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some topics that might come up in this discussion:\n", + "\n", + "1. The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD-1 in \"unprecedented detail\".\n", + "\n", + "2. The figure documents the selection process as a sequence of steps. Reading right-to-left, top-to-bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result.\n", + "\n", + "3. It's mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned.\n", + "\n", + "4. Since the panels represent a sequence, it might be better to arrange them left-to-right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting GD-1\n", + "\n", + "Let's start with the panel in the lower left. The following cell reloads the data." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_merged.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "selected = pd.read_hdf(filename, 'selected')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_second_selection(df):\n", + " x = df['phi1']\n", + " y = df['phi2']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)\n", + "\n", + " plt.xlabel('$\\phi_1$ [deg]')\n", + " plt.ylabel('$\\phi_2$ [deg]')\n", + " plt.title('Proper motion + photometry selection', fontsize='medium')\n", + "\n", + " plt.axis('equal')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_13_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,2.5))\n", + "plot_second_selection(selected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Annotations\n", + "\n", + "The figure in the paper uses three other features to present the results more clearly and compellingly:\n", + "\n", + "* A vertical dashed line to distinguish the previously undetected region of GD-1,\n", + "\n", + "* A label that identifies the new region, and\n", + "\n", + "* Several annotations that combine text and arrows to identify features of GD-1.\n", + "\n", + "As an exercise, choose any or all of these features and add them to the figure:\n", + "\n", + "* To draw vertical lines, see [`plt.vlines`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.vlines.html) and [`plt.axvline`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.axvline.html#matplotlib.pyplot.axvline).\n", + "\n", + "* To add text, see [`plt.text`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.text.html).\n", + "\n", + "* To add an annotation with text and an arrow, see [plt.annotate]().\n", + "\n", + "And here is some [additional information about text and arrows](https://matplotlib.org/3.3.1/tutorials/text/annotations.html#plotting-guide-annotation)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# plt.axvline(-55, ls='--', color='gray', \n", + "# alpha=0.4, dashes=(6,4), lw=2)\n", + "# plt.text(-60, 5.5, 'Previously\\nundetected', \n", + "# fontsize='small', ha='right', va='top');\n", + "\n", + "# arrowprops=dict(color='gray', shrink=0.05, width=1.5, \n", + "# headwidth=6, headlength=8, alpha=0.4)\n", + "\n", + "# plt.annotate('Spur', xy=(-33, 2), xytext=(-35, 5.5),\n", + "# arrowprops=arrowprops,\n", + "# fontsize='small')\n", + "\n", + "# plt.annotate('Gap', xy=(-22, -1), xytext=(-25, -5.5),\n", + "# arrowprops=arrowprops,\n", + "# fontsize='small')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Customization\n", + "\n", + "Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties.\n", + "\n", + "There are several ways to override these defaults and customize your figures:\n", + "\n", + "* To customize only the current figure, you can call functions like `tick_params`, which we'll demonstrate below.\n", + "\n", + "* To customize all figures in a notebook, you use `rcParams`.\n", + "\n", + "* To override more than a few defaults at the same time, you can use a style sheet." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes.\n", + "\n", + "To change this behavior, you can use `gca()` to get the current axes and `tick_params` to change the settings.\n", + "\n", + "Here's how you can put the ticks on the inside of the figure:\n", + "\n", + "```\n", + "plt.gca().tick_params(direction='in')\n", + "```\n", + "\n", + "**Exercise:** Read the documentation of [`tick_params`](https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.tick_params.html) and use it to put ticks on the top and right sides of the axes." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# plt.gca().tick_params(top=True, right=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## rcParams\n", + "\n", + "If you want to make a customization that applies to all figures in a notebook, you can use `rcParams`.\n", + "\n", + "Here's an example that reads the current font size from `rcParams`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10.0" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plt.rcParams['font.size']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And sets it to a new value:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['font.size'] = 14" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Plot the previous figure again, and see what font sizes have changed. Look up any other element of `rcParams`, change its value, and check the effect on the figure." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you find yourself making the same customizations in several notebooks, you can put changes to `rcParams` in a `matplotlibrc` file, [which you can read about here](https://matplotlib.org/3.3.1/tutorials/introductory/customizing.html#customizing-with-matplotlibrc-files)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Style sheets\n", + "\n", + "The `matplotlibrc` file is read when you import Matplotlib, so it is not easy to switch from one set of options to another.\n", + "\n", + "The solution to this problem is style sheets, [which you can read about here](https://matplotlib.org/3.1.1/tutorials/introductory/customizing.html).\n", + "\n", + "Matplotlib provides a set of predefined style sheets, or you can make your own.\n", + "\n", + "The following cell displays a list of style sheets installed on your system." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Solarize_Light2',\n", + " '_classic_test_patch',\n", + " 'bmh',\n", + " 'classic',\n", + " 'dark_background',\n", + " 'fast',\n", + " 'fivethirtyeight',\n", + " 'ggplot',\n", + " 'grayscale',\n", + " 'seaborn',\n", + " 'seaborn-bright',\n", + " 'seaborn-colorblind',\n", + " 'seaborn-dark',\n", + " 'seaborn-dark-palette',\n", + " 'seaborn-darkgrid',\n", + " 'seaborn-deep',\n", + " 'seaborn-muted',\n", + " 'seaborn-notebook',\n", + " 'seaborn-paper',\n", + " 'seaborn-pastel',\n", + " 'seaborn-poster',\n", + " 'seaborn-talk',\n", + " 'seaborn-ticks',\n", + " 'seaborn-white',\n", + " 'seaborn-whitegrid',\n", + " 'tableau-colorblind10']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plt.style.available" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `seaborn-paper`, `seaborn-talk` and `seaborn-poster` are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters.\n", + "\n", + "To use any of these style sheets, run `plt.style.use` like this:\n", + "\n", + "```\n", + "plt.style.use('fivethirtyeight')\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The style sheet you choose will affect the appearance of all figures you plot after calling `use`, unless you override any of the options or call `use` again.\n", + "\n", + "**Exercise:** Choose one of the styles on the list and select it by calling `use`. Then go back and plot one of the figures above and see what effect it has." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you can't find a style sheet that's exactly what you want, you can make your own. This repository includes a style sheet called `az-paper-twocol.mplstyle`, with customizations chosen by Azalee Bostroem for publication in astronomy journals.\n", + "\n", + "The following cell downloads the style sheet." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'az-paper-twocol.mplstyle'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can use it like this:\n", + "\n", + "```\n", + "plt.style.use('./az-paper-twocol.mplstyle')\n", + "```\n", + "\n", + "The prefix `./` tells Matplotlib to look for the file in the current directory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command:\n", + "\n", + "```\n", + "import matplotlib as mpl\n", + "\n", + "mpl.get_configdir()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LaTeX fonts\n", + "\n", + "When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses [`mathtext`](https://matplotlib.org/3.1.0/tutorials/text/mathtext.html) to typeset them. `mathtext` uses the same syntax as LaTeX, but it provides only a subset of its features.\n", + "\n", + "If you need features that are not provided by `mathtext`, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX.\n", + "\n", + "In `matplotlibrc` or in a style sheet, you can add the following line:\n", + "\n", + "```\n", + "text.usetex : true\n", + "```\n", + "\n", + "Or in a notebook you can run the following code.\n", + "\n", + "```\n", + "plt.rcParams['text.usetex'] = True\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['text.usetex'] = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you go back and draw the figure again, you should see the difference.\n", + "\n", + "If you get an error message like\n", + "\n", + "```\n", + "LaTeX Error: File `type1cm.sty' not found.\n", + "```\n", + "\n", + "You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages `texlive-latex-extra` or `cm-super` might be what you need. [See here for more help with this](https://stackoverflow.com/questions/11354149/python-unable-to-render-tex-in-matplotlib).\n", + "\n", + "In case you are curious, `cm` stands for [Computer Modern](https://en.wikipedia.org/wiki/Computer_Modern), the font LaTeX uses to typeset math." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multiple panels\n", + "\n", + "So far we've been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as \"subplots\".\n", + "\n", + "Confusingly, Matplotlib provides *three* functions for making figures like this: `subplot`, `subplots`, and `subplot2grid`.\n", + "\n", + "* [`subplot`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot.html) is simple and similar to MATLAB, so if you are familiar with that interface, you might like `subplot`\n", + "\n", + "* [`subplots`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplots.html) is more object-oriented, which some people prefer.\n", + "\n", + "* [`subplot2grid`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html) is most convenient if you want to control the relative sizes of the subplots. \n", + "\n", + "So we'll use `subplot2grid`.\n", + "\n", + "All of these functions are easier to use if we put the code that generates each panel in a function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upper right\n", + "\n", + "To make the panel in the upper right, we have to reload `centerline`." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_dataframe.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "centerline = pd.read_hdf(filename, 'centerline')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And define the coordinates of the rectangle we selected." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "pm1_min = -8.9\n", + "pm1_max = -6.9\n", + "pm2_min = -2.2\n", + "pm2_max = 1.0\n", + "\n", + "pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max]\n", + "pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To plot this rectangle, we'll use a feature we have not seen before: `Polygon`, which is provided by Matplotlib.\n", + "\n", + "To create a `Polygon`, we have to put the coordinates in an array with `x` values in the first column and `y` values in the second column. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-8.9, -2.2],\n", + " [-8.9, 1. ],\n", + " [-6.9, 1. ],\n", + " [-6.9, -2.2]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "vertices = np.transpose([pm1_rect, pm2_rect])\n", + "vertices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function takes a `DataFrame` as a parameter, plots the proper motion for each star, and adds a shaded `Polygon` to show the region we selected." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib.patches import Polygon\n", + "\n", + "def plot_proper_motion(df):\n", + " pm1 = df['pm_phi1']\n", + " pm2 = df['pm_phi2']\n", + "\n", + " plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)\n", + " \n", + " poly = Polygon(vertices, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + " plt.gca().add_patch(poly)\n", + " \n", + " plt.xlabel('$\\mu_{\\phi_1} [\\mathrm{mas~yr}^{-1}]$')\n", + " plt.ylabel('$\\mu_{\\phi_2} [\\mathrm{mas~yr}^{-1}]$')\n", + "\n", + " plt.xlim(-12, 8)\n", + " plt.ylim(-10, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that `add_patch` is like `invert_yaxis`; in order to call it, we have to use `gca` to get the current axes.\n", + "\n", + "Here's what the new version of the figure looks like. We've changed the labels on the axes to be consistent with the paper." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_50_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.rcParams['text.usetex'] = False\n", + "plt.style.use('default')\n", + "\n", + "plot_proper_motion(centerline)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upper left\n", + "\n", + "Now let's work on the panel in the upper left. We have to reload `candidates`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "filename = 'gd1_candidates.hdf5'\n", + "\n", + "candidate_df = pd.read_hdf(filename, 'candidate_df')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a function that takes a `DataFrame` of candidate stars and plots their positions in GD-1 coordindates. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_first_selection(df):\n", + " x = df['phi1']\n", + " y = df['phi2']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlabel('$\\phi_1$ [deg]')\n", + " plt.ylabel('$\\phi_2$ [deg]')\n", + " plt.title('Proper motion selection', fontsize='medium')\n", + "\n", + " plt.axis('equal')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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ii984Qu44YYb4PP58A//8A946qmnJqvIhBBCCJlieCzLsia7EFOZnp4epKSkoLu7m5okQggh5DIh0vV7Sp0aI4QQQgiZSCgIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRqoSBECCGEkKiFghAhhBBCohYKQoQQQgiJWigIEUIIISRquWwFoW3btuH6669HQkICUlNTHa/xeDwhfz/84Q8ntqCEEEIImbLETnYBLpRAIID169ejrKwML7zwgut1O3bswG233ab+nZKSMhHFI4QQQshlwGUrCH3zm98EAPz4xz8Oe11qaiqys7MnoESEEEIIudy4bE1jkbJ161ZkZGTgmmuuwQ9/+EOMjIyEvX5oaAg9PT22P0IIIYRcmVy2GqFI+Na3voVbbrkFPp8Pf/jDH3Dffffh1KlTePjhh11/8/jjjyttEyGEEEKubKaURujRRx91dHDW/yorKyO+38MPP4yysjIUFxfjvvvuw2OPPYYnn3wy7G8eeughdHd3q7+mpqaLrRYhhBBCpihTSiO0detWbNiwIew18+bNu+D7X3fddejp6cGHH36IWbNmOV4THx+P+Pj4C34GIYQQQi4fppQglJGRgYyMjEt2/+rqakyfPt31uD0hhBBCoospJQidD42Njejs7ERjYyOCwSBqamoAAEVFRUhKSsJvf/tb+P1+lJWVwefzoaKiAl//+tfxj//4j9T4EEIIIQTAZSwIfeMb38BLL72k/l1SUgIAqKiowJo1azBt2jR8//vfx5e//GWMjIygsLAQjz32GP7pn/5psopMCCGEkCmGx7Isa7ILMZXp6elBSkoKuru7MWPGjMkuDiGEEEIiINL1e0qdGiOEEEIImUgoCBFCCCEkaqEgRAghhJCohYIQIYQQQqIWCkKEEEIIiVooCBFCCCEk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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_57_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_first_selection(candidate_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lower right\n", + "\n", + "For the figure in the lower right, we need to reload the merged `DataFrame`, which contains data from Gaia and photometry data from Pan-STARRS." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "filename = 'gd1_merged.hdf5'\n", + "\n", + "merged = pd.read_hdf(filename, 'merged')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the previous notebook, here's the function that plots the color-magnitude diagram." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_cmd(table):\n", + " \"\"\"Plot a color magnitude diagram.\n", + " \n", + " table: Table or DataFrame with photometry data\n", + " \"\"\"\n", + " y = table['g_mean_psf_mag']\n", + " x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']\n", + "\n", + " plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)\n", + "\n", + " plt.xlim([0, 1.5])\n", + " plt.ylim([14, 22])\n", + " plt.gca().invert_yaxis()\n", + "\n", + " plt.ylabel('$g_0$')\n", + " plt.xlabel('$(g-i)_0$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_63_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_cmd(merged)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add a few lines to `plot_cmd` to show the Polygon we selected as a shaded area. \n", + "\n", + "Run these cells to get the polygon coordinates we saved in the previous notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "filename = 'gd1_polygon.hdf5'\n", + "path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'\n", + "\n", + "if not os.path.exists(filename):\n", + " print(download(path+filename))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.21505376, 17.5481972 ],\n", + " [ 0.38978495, 18.94628403],\n", + " [ 0.53763441, 19.90286976],\n", + " [ 0.70340502, 20.60191317],\n", + " [ 0.82885305, 21.30095659],\n", + " [ 0.66308244, 21.52170714],\n", + " [ 0.43010753, 20.78587196],\n", + " [ 0.27329749, 19.71891096],\n", + " [ 0.17473118, 18.68874172],\n", + " [ 0.17473118, 17.95290655]])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coords_df = pd.read_hdf(filename, 'coords_df')\n", + "coords = coords_df.to_numpy()\n", + "coords" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "#poly = Polygon(coords, closed=True, \n", + "# facecolor='C1', alpha=0.4)\n", + "#plt.gca().add_patch(poly)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subplots\n", + "\n", + "Now we're ready to put it all together. To make a figure with four subplots, we'll use `subplot2grid`, [which requires two arguments](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html):\n", + "\n", + "* `shape`, which is a tuple with the number of rows and columns in the grid, and\n", + "\n", + "* `loc`, which is a tuple identifying the location in the grid we're about to fill.\n", + "\n", + "In this example, `shape` is `(2, 2)` to create two rows and two columns.\n", + "\n", + "For the first panel, `loc` is `(0, 0)`, which indicates row 0 and column 0, which is the upper-left panel.\n", + "\n", + "Here's how we use it to draw the four panels." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TU147rnn8O9///u0xnXHHXego6MDP/7xj9HQ0ID/+7//w0MPPYR7770XYWGnvg7Jyck4dOgQTpw4gZ6eHvj9/mltdyb86Ec/gsPhwDe/+U0cPnwYra2t2L59O7773e9S4ybUeCYjMzMTl112GX7+85/jm9/8JqRS6YTrfvzxx/jf//1fVFZWor29Ha+//jr8fj8WLFgAhUKB++67D/fccw9ee+01HD9+HCaTCc899xxee+21kPv7+c9/jgMHDuBHP/oRKisr0dzcjA8//BA//vGP6bnceuut+O53v4sPPvgAbW1t2LVrF9555x0Apwx9gUCAjz/+GN3d3XC5XOOOkZ6ejuuuuw6bN2/Gvn37UFVVhW9961swGo247rrrpjXvDAaDMWeZlcy+c0ioqlg+wYUChPb2du7aa6/lIiMjOYVCwd14442czWYbt93zzz/PxcXFcREREdzGjRs5h8MRsJ9//vOfXEFBAScWizm1Ws2tWLGCe++99ziO+2/RgclkmvI8EFTkEGrbUInmzz//PJeamsqFh4dz8+fP515//fWA/X744YdcWloaJxKJuKSkpJBz4vP5uEceeYQzGo1ceHg4l5+fT4sPJhpLX18fB4ArKyub8tz453i6xROPPPII9/Wvf52TyWRcbGzsuEKU4HnjOI5TqVTcli1b6N+7du3iFi1axInFYk6v13M///nPA6p5Gxsbucsuu4yTSqUBY5xqu1BFDklJSdxTTz016Ribmpq466+/nouKiuKkUimXkZHB3X333bRQI9R4JioyILz88ssBxT8TsXfvXm7lypWcWq3mpFIpl5eXx7399tv0c7/fzz3zzDPcggULuPDwcE6r1XLr16/ndu/ezXFc6Hvw8OHD3Nq1azm5XM5FRkZyeXl5AcU4brebu+eeeziDwcCJxWIuLS2Ne+WVV+jnjz76KKfX6zmBQMDdeuutIefW4XBwmzZt4lQqFSeVSrn169fTqm2OO1U8oVKpAs71/fff5+bgTx6DwWAEIOA4lnQyHR5++GF88MEHqKysnO2hXLIkJyfj7rvvvmS6MJwNjz32GN566y3U1NTM9lAYDAaDcR5hoVgGYw7hcrlw5MgRPPvssyELGBgMBoMxt2GGHYMxh7jzzjuxfPlyrFy5Et/97ndnezgMBoPBOM+wUCyDwWAwGAzGHIF57BgMBuMCY8+ePbjm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61vfwu9///sJXaOrqwvxeDzN7aHVarF48WL6+6FDhzA0NISrrroKKpWK/vz+979HV1cXuru7MTw8jBUrVtBzNBpN2hgMBoORD9FoFIWFhfT3EydOYPv27Xj00UfTjpPL5YKJZI899hjNvs/1k8vb0d7enjWmQqEAAEQiESQSCTzwwAN49913sW/fPvzsZz9DIBCY7C0zZogzG2XOYADYtWsXUqkUGhoa0NnZiWg0ioaGBpw8eRK9vb249NJLAQBr1qzB9u3bJ3QNjuPGPCaVSgEA3nrrLZjN5rR9crkcfr8fACASicY9NoPBYPApKytDX18f/X3//v2QyWSoq6tLO+7w4cO4/fbbs86/77778IUvfGHUa+TKtt2/fz+uu+66tG1EuOn1euzZswd1dXX038Grr74a77zzDv75n/95zPtizD6YsGOcceLxOABgaGgI7e3tqKiogE6nw7PPPoulS5eioaFh0teoqalBQUEBdu3aBYvFAgDo6+vD0aNHcfnllwMAli5dCrlcDofDQbfxKSkpQUFBAfbs2YP58+cDAAYGBnDs2DHB4xkMBiMXjY2NeOWVV+jvEokEiUQCQ0ND1JL33nvvCbpNgRFhWFZWNu7rDgwM4MSJE1ljHjx4EBUVFSgrK8P27dvT/ritqKiAy+Ua97UYswMm7BhnnIsvvhhSqRSPP/44wuEwzjvvPDz33HN49tlnsW3btim5hkqlwle/+lV897vfhU6nQ3l5Ob73ve9BLP4k+kCtVuPf/u3f8O1vfxupVAqXXXYZBgYGsHPnTqhUKtx+++24/fbb8d3vfhdarRYGgwE//OEPIRaLs6x4DAaDMRrNzc14+OGH0dfXh9LSUixfvhwFBQX47ne/i29/+9s4dOgQzbafij9uCfv374dEIsmyDL7//vtYt24dAGEvBPs3bu7ChB3jjGOxWPDSSy/h3//93+F2uyGVShGJRPD222+nxbNNlp///OcIh8O47rrroFar8Z3vfAfBYDDtmP/3//4fDAYDnnjiCXR3d6OkpAQXXHABHnnkEQDAM888g3vuuQef+cxnUFxcjAcffBAnT55Mi5VhMBiMsaivr0dTUxP+93//F3fffTdMJhNeeuklPPTQQ3j55Zexbt06/Mu//At++9vfQqvVTtl19+/fj9raWsjlcrptaGgImzZtwjvvvANgJJGCb6FzOp246KKLpmwOjDMMx2DMIKWlpdymTZty7t+2bRv3uc99bsxxLr/8cu5f//Vfp25iOQiHw5xGo+FeeOGFrH0ARr0XBoNxbvPWW29xS5Ys4ZLJZNa+ZDLJrVq1inv44YenfR6//OUvuauuuor+Pjw8zNXU1HBOp5MbGBjgampquN7e3mmfB2N6YBY7xozhdDrR19eH+vp6wf3Nzc3Yt28fBgcHUVFRgU2bNuHCCy/MOd5zzz2HF154AR999FHOMcdLW1sbOjs7sWLFCgSDQTz++OMAgOuvv54ec88996TFzjAYDIYQV199NY4dOwaXy4Wenh74fD40Njait7cXP//5z3HixAls2rRp2udRUFCAX/ziF/R3qVSKp59+GmvWrEEqlcKDDz4InU437fNgTA8ijmMpfoyZ4W9/+xtuvvlmhEKhScdzuFwuRKNRACOu3qmqAdXW1oavfe1rOHLkCGQyGZYvX45nnnkmTTh6vV7ac9FkMtG2PQwGg5GLjRs34qGHHoLL5UJ5eTnWrl2L9evXo7y8fKanxpjjMGHHYDAYDAaDcZbAChQzGAwGg8FgnCUwYcdgMBgMBoNxlsCEHYPBYDAYDMZZAhN2DAaDwWAwGGcJTNgxGAwGg8FgnCUwYcdgMBgMBoNxlsCEHYPBYDAYDMZZAhN2DAaDwWAwGGcJTNgxGAwGg8FgnCUwYcdgMBgMBoNxlvD/A8CcBOTPOA/kAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_69_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "shape = (2, 2)\n", + "plt.subplot2grid(shape, (0, 0))\n", + "plot_first_selection(candidate_df)\n", + "\n", + "plt.subplot2grid(shape, (0, 1))\n", + "plot_proper_motion(centerline)\n", + "\n", + "plt.subplot2grid(shape, (1, 0))\n", + "plot_second_selection(selected)\n", + "\n", + "plt.subplot2grid(shape, (1, 1))\n", + "plot_cmd(merged)\n", + "poly = Polygon(coords, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + "plt.gca().add_patch(poly)\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use [`plt.tight_layout`](https://matplotlib.org/3.3.1/tutorials/intermediate/tight_layout_guide.html) at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don't overlap.\n", + "\n", + "**Exercise:** See what happens if you leave out `tight_layout`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adjusting proportions\n", + "\n", + "In the previous figure, the panels are all the same size. To get a better view of GD-1, we'd like to stretch the panels on the left and compress the ones on the right.\n", + "\n", + "To do that, we'll use the `colspan` argument to make a panel that spans multiple columns in the grid.\n", + "\n", + "In the following example, `shape` is `(2, 4)`, which means 2 rows and 4 columns.\n", + "\n", + "The panels on the left span three columns, so they are three times wider than the panels on the right.\n", + "\n", + "At the same time, we use `figsize` to adjust the aspect ratio of the whole figure." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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R4+ira0N2dnZ/Lz6+nqcPn0aiYmJAIA9e/YgKCgIs2bNQnx8PEwmE2pqanDzzTeP7AMFSHZ2Nnbv3o3bbruNH/vqq688niE4OBhut9trGREREUhMTMTu3btx0UUXeZSzcOHCc6qfnDCXmprqVcskx969ewf9zTRfgTBnzhxs2rTJQyD46quvoNPpeP3UavWgNgrkuuFw3nnnYdOmTUhLS4NKJf/pkKuPL+666y7MnTsXr7zyCnp7e3Hdddf5PF+lUmHFihVYsWIFnnzySURFReHzzz/HypUrodFoUF9fH7Dm7bzzzkNFRYXX8Tdv3jz09/dj586dWLFixaDf1Wo1APh83jlz5qCvrw/79u3DkiVLAADNzc04ceKEx7tOEARBECMNmWsSxCRixYoVyM3Nxc0334xDhw5h//79uO2227Bs2TIPc7iQkBDcfvvtOHz4ML744gvcd999uOGGG2A0GgEMRKl87rnn8NJLL+HEiRMoLy/Hxo0b8cILL4zJczz88MN488038ec//xlVVVV44YUXsHnzZo/0EWlpafjss89gs9nQ0tLitZznn38e7777Lo4fP45HH30UpaWl+MEPfjAmz+GLL7/8Er/61a9w4sQJ/PGPf8S//vWvIdXrnnvuQUNDA77//e/j2LFj+Pe//40nn3wSDzzwAIKCBqbutLQ07Nu3D6dOnUJTUxP6+/sDum44fO9734PD4cCNN96I/fv3o6amBtu2bcO3v/1tLujI1ccX2dnZuOCCC/CjH/0IN954I0JDQ72e+/HHH+P3v/89SktLUVdXh7fffhv9/f2YPXs2dDodHnroIdx///146623cPLkSZSUlOCPf/wj3nrrLdnyfvSjH2HPnj343ve+h9LSUlRVVeHDDz/E97//ff4st99+O7797W/jgw8+QG1tLXbs2IF//vOfAAaEfoVCgY8//hh2ux2dnZ2D7jFz5kxcffXVWL9+PXbv3o3Dhw/jlltugclkwtVXXx1QuxMEQRDEcCAhjyAmESxBeHR0NC666CKsWLECGRkZePfddz3Oy8zMxHXXXYfLLrsMq1at4toSxl133YXXX38db775JubNm4dly5bhzTffRHp6+pg8xzXXXIOXXnoJv/71r5GTk4NXX30VGzduxPLly/k5v/3tb/Hpp58iOTkZ+fn5suXcd999ePDBB/Hggw9i3rx5+OST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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "filenames": { + "image/png": "/home/downey/AstronomicalData/_build/jupyter_execute/07_plot_72_0.png" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(9, 4.5))\n", + "\n", + "shape = (2, 4)\n", + "plt.subplot2grid(shape, (0, 0), colspan=3)\n", + "plot_first_selection(candidate_df)\n", + "\n", + "plt.subplot2grid(shape, (0, 3))\n", + "plot_proper_motion(centerline)\n", + "\n", + "plt.subplot2grid(shape, (1, 0), colspan=3)\n", + "plot_second_selection(selected)\n", + "\n", + "plt.subplot2grid(shape, (1, 3))\n", + "plot_cmd(merged)\n", + "poly = Polygon(coords, closed=True, \n", + " facecolor='C1', alpha=0.4)\n", + "plt.gca().add_patch(poly)\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking more and more like the figure in the paper.\n", + "\n", + "**Exercise:** In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we reverse-engineered the figure we've been replicating, identifying elements that seem effective and others that could be improved.\n", + "\n", + "We explored features Matplotlib provides for adding annotations to figures -- including text, lines, arrows, and polygons -- and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* The most effective figures focus on telling a single story clearly and compellingly.\n", + "\n", + "* Consider using annotations to guide the readers attention to the most important elements of a figure.\n", + "\n", + "* The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults.\n", + "\n", + "* If you find yourself making the same customizations on several projects, you might want to create your own style sheet." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/07_plot.py b/_build/jupyter_execute/07_plot.py new file mode 100644 index 0000000..f8a7447 --- /dev/null +++ b/_build/jupyter_execute/07_plot.py @@ -0,0 +1,691 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Chapter 7 +# +# This is the seventh in a series of notebooks related to astronomy data. +# +# As a continuing example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the previous notebook we selected photometry data from Pan-STARRS and used it to identify stars we think are likely to be in GD-1 +# +# In this notebook, we'll take the results from previous lessons and use them to make a figure that tells a compelling scientific story. + +# ## Outline +# +# Here are the steps in this notebook: +# +# 1. Starting with the figure from the previous notebook, we'll add annotations to present the results more clearly. +# +# 2. The we'll see several ways to customize figures to make them more appealing and effective. +# +# 3. Finally, we'll see how to make a figure with multiple panels or subplots. +# +# After completing this lesson, you should be able to +# +# * Design a figure that tells a compelling story. +# +# * Use Matplotlib features to customize the appearance of figures. +# +# * Generate a figure with multiple subplots. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia python-wget') + + +# ## Making Figures That Tell a Story +# +# So far the figure we've made have been "quick and dirty". Mostly we have used Matplotlib's default style, although we have adjusted a few parameters, like `markersize` and `alpha`, to improve legibility. +# +# Now that the analysis is done, it's time to think more about: +# +# 1. Making professional-looking figures that are ready for publication, and +# +# 2. Making figures that communicate a scientific result clearly and compellingly. +# +# Not necessarily in that order. + +# Let's start by reviewing Figure 1 from the original paper. We've seen the individual panels, but now let's look at the whole thing, along with the caption: +# +# + +# **Exercise:** Think about the following questions: +# +# 1. What is the primary scientific result of this work? +# +# 2. What story is this figure telling? +# +# 3. In the design of this figure, can you identify 1-2 choices the authors made that you think are effective? Think about big-picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface. +# +# 4. Can you identify 1-2 elements that could be improved, or that you might have done differently? + +# Some topics that might come up in this discussion: +# +# 1. The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD-1 in "unprecedented detail". +# +# 2. The figure documents the selection process as a sequence of steps. Reading right-to-left, top-to-bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result. +# +# 3. It's mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned. +# +# 4. Since the panels represent a sequence, it might be better to arrange them left-to-right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left). + +# ## Plotting GD-1 +# +# Let's start with the panel in the lower left. The following cell reloads the data. + +# In[2]: + + +import os +from wget import download + +filename = 'gd1_merged.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# In[3]: + + +import pandas as pd + +selected = pd.read_hdf(filename, 'selected') + + +# In[4]: + + +import matplotlib.pyplot as plt + +def plot_second_selection(df): + x = df['phi1'] + y = df['phi2'] + + plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9) + + plt.xlabel('$\phi_1$ [deg]') + plt.ylabel('$\phi_2$ [deg]') + plt.title('Proper motion + photometry selection', fontsize='medium') + + plt.axis('equal') + + +# And here's what it looks like. + +# In[5]: + + +plt.figure(figsize=(10,2.5)) +plot_second_selection(selected) + + +# ## Annotations +# +# The figure in the paper uses three other features to present the results more clearly and compellingly: +# +# * A vertical dashed line to distinguish the previously undetected region of GD-1, +# +# * A label that identifies the new region, and +# +# * Several annotations that combine text and arrows to identify features of GD-1. +# +# As an exercise, choose any or all of these features and add them to the figure: +# +# * To draw vertical lines, see [`plt.vlines`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.vlines.html) and [`plt.axvline`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.axvline.html#matplotlib.pyplot.axvline). +# +# * To add text, see [`plt.text`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.text.html). +# +# * To add an annotation with text and an arrow, see [plt.annotate](). +# +# And here is some [additional information about text and arrows](https://matplotlib.org/3.3.1/tutorials/text/annotations.html#plotting-guide-annotation). + +# In[6]: + + +# Solution + +# plt.axvline(-55, ls='--', color='gray', +# alpha=0.4, dashes=(6,4), lw=2) +# plt.text(-60, 5.5, 'Previously\nundetected', +# fontsize='small', ha='right', va='top'); + +# arrowprops=dict(color='gray', shrink=0.05, width=1.5, +# headwidth=6, headlength=8, alpha=0.4) + +# plt.annotate('Spur', xy=(-33, 2), xytext=(-35, 5.5), +# arrowprops=arrowprops, +# fontsize='small') + +# plt.annotate('Gap', xy=(-22, -1), xytext=(-25, -5.5), +# arrowprops=arrowprops, +# fontsize='small') + + +# ## Customization +# +# Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties. +# +# There are several ways to override these defaults and customize your figures: +# +# * To customize only the current figure, you can call functions like `tick_params`, which we'll demonstrate below. +# +# * To customize all figures in a notebook, you use `rcParams`. +# +# * To override more than a few defaults at the same time, you can use a style sheet. + +# As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes. +# +# To change this behavior, you can use `gca()` to get the current axes and `tick_params` to change the settings. +# +# Here's how you can put the ticks on the inside of the figure: +# +# ``` +# plt.gca().tick_params(direction='in') +# ``` +# +# **Exercise:** Read the documentation of [`tick_params`](https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.tick_params.html) and use it to put ticks on the top and right sides of the axes. + +# In[7]: + + +# Solution + +# plt.gca().tick_params(top=True, right=True) + + +# ## rcParams +# +# If you want to make a customization that applies to all figures in a notebook, you can use `rcParams`. +# +# Here's an example that reads the current font size from `rcParams`: + +# In[8]: + + +plt.rcParams['font.size'] + + +# And sets it to a new value: + +# In[9]: + + +plt.rcParams['font.size'] = 14 + + +# **Exercise:** Plot the previous figure again, and see what font sizes have changed. Look up any other element of `rcParams`, change its value, and check the effect on the figure. + +# If you find yourself making the same customizations in several notebooks, you can put changes to `rcParams` in a `matplotlibrc` file, [which you can read about here](https://matplotlib.org/3.3.1/tutorials/introductory/customizing.html#customizing-with-matplotlibrc-files). + +# ## Style sheets +# +# The `matplotlibrc` file is read when you import Matplotlib, so it is not easy to switch from one set of options to another. +# +# The solution to this problem is style sheets, [which you can read about here](https://matplotlib.org/3.1.1/tutorials/introductory/customizing.html). +# +# Matplotlib provides a set of predefined style sheets, or you can make your own. +# +# The following cell displays a list of style sheets installed on your system. + +# In[10]: + + +plt.style.available + + +# Note that `seaborn-paper`, `seaborn-talk` and `seaborn-poster` are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters. +# +# To use any of these style sheets, run `plt.style.use` like this: +# +# ``` +# plt.style.use('fivethirtyeight') +# ``` + +# In[ ]: + + + + + +# The style sheet you choose will affect the appearance of all figures you plot after calling `use`, unless you override any of the options or call `use` again. +# +# **Exercise:** Choose one of the styles on the list and select it by calling `use`. Then go back and plot one of the figures above and see what effect it has. + +# If you can't find a style sheet that's exactly what you want, you can make your own. This repository includes a style sheet called `az-paper-twocol.mplstyle`, with customizations chosen by Azalee Bostroem for publication in astronomy journals. +# +# The following cell downloads the style sheet. + +# In[11]: + + +import os + +filename = 'az-paper-twocol.mplstyle' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# You can use it like this: +# +# ``` +# plt.style.use('./az-paper-twocol.mplstyle') +# ``` +# +# The prefix `./` tells Matplotlib to look for the file in the current directory. + +# In[ ]: + + + + + +# As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command: +# +# ``` +# import matplotlib as mpl +# +# mpl.get_configdir() +# ``` + +# In[ ]: + + + + + +# ## LaTeX fonts +# +# When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses [`mathtext`](https://matplotlib.org/3.1.0/tutorials/text/mathtext.html) to typeset them. `mathtext` uses the same syntax as LaTeX, but it provides only a subset of its features. +# +# If you need features that are not provided by `mathtext`, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX. +# +# In `matplotlibrc` or in a style sheet, you can add the following line: +# +# ``` +# text.usetex : true +# ``` +# +# Or in a notebook you can run the following code. +# +# ``` +# plt.rcParams['text.usetex'] = True +# ``` + +# In[12]: + + +plt.rcParams['text.usetex'] = True + + +# If you go back and draw the figure again, you should see the difference. +# +# If you get an error message like +# +# ``` +# LaTeX Error: File `type1cm.sty' not found. +# ``` +# +# You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages `texlive-latex-extra` or `cm-super` might be what you need. [See here for more help with this](https://stackoverflow.com/questions/11354149/python-unable-to-render-tex-in-matplotlib). +# +# In case you are curious, `cm` stands for [Computer Modern](https://en.wikipedia.org/wiki/Computer_Modern), the font LaTeX uses to typeset math. + +# ## Multiple panels +# +# So far we've been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as "subplots". +# +# Confusingly, Matplotlib provides *three* functions for making figures like this: `subplot`, `subplots`, and `subplot2grid`. +# +# * [`subplot`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot.html) is simple and similar to MATLAB, so if you are familiar with that interface, you might like `subplot` +# +# * [`subplots`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplots.html) is more object-oriented, which some people prefer. +# +# * [`subplot2grid`](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html) is most convenient if you want to control the relative sizes of the subplots. +# +# So we'll use `subplot2grid`. +# +# All of these functions are easier to use if we put the code that generates each panel in a function. + +# ## Upper right +# +# To make the panel in the upper right, we have to reload `centerline`. + +# In[13]: + + +import os + +filename = 'gd1_dataframe.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# In[14]: + + +import pandas as pd + +centerline = pd.read_hdf(filename, 'centerline') + + +# And define the coordinates of the rectangle we selected. + +# In[15]: + + +pm1_min = -8.9 +pm1_max = -6.9 +pm2_min = -2.2 +pm2_max = 1.0 + +pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max] +pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min] + + +# To plot this rectangle, we'll use a feature we have not seen before: `Polygon`, which is provided by Matplotlib. +# +# To create a `Polygon`, we have to put the coordinates in an array with `x` values in the first column and `y` values in the second column. + +# In[16]: + + +import numpy as np + +vertices = np.transpose([pm1_rect, pm2_rect]) +vertices + + +# The following function takes a `DataFrame` as a parameter, plots the proper motion for each star, and adds a shaded `Polygon` to show the region we selected. + +# In[17]: + + +from matplotlib.patches import Polygon + +def plot_proper_motion(df): + pm1 = df['pm_phi1'] + pm2 = df['pm_phi2'] + + plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3) + + poly = Polygon(vertices, closed=True, + facecolor='C1', alpha=0.4) + plt.gca().add_patch(poly) + + plt.xlabel('$\mu_{\phi_1} [\mathrm{mas~yr}^{-1}]$') + plt.ylabel('$\mu_{\phi_2} [\mathrm{mas~yr}^{-1}]$') + + plt.xlim(-12, 8) + plt.ylim(-10, 10) + + +# Notice that `add_patch` is like `invert_yaxis`; in order to call it, we have to use `gca` to get the current axes. +# +# Here's what the new version of the figure looks like. We've changed the labels on the axes to be consistent with the paper. + +# In[18]: + + +plt.rcParams['text.usetex'] = False +plt.style.use('default') + +plot_proper_motion(centerline) + + +# ## Upper left +# +# Now let's work on the panel in the upper left. We have to reload `candidates`. + +# In[19]: + + +import os + +filename = 'gd1_candidates.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# In[20]: + + +import pandas as pd + +filename = 'gd1_candidates.hdf5' + +candidate_df = pd.read_hdf(filename, 'candidate_df') + + +# Here's a function that takes a `DataFrame` of candidate stars and plots their positions in GD-1 coordindates. + +# In[21]: + + +def plot_first_selection(df): + x = df['phi1'] + y = df['phi2'] + + plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3) + + plt.xlabel('$\phi_1$ [deg]') + plt.ylabel('$\phi_2$ [deg]') + plt.title('Proper motion selection', fontsize='medium') + + plt.axis('equal') + + +# And here's what it looks like. + +# In[22]: + + +plot_first_selection(candidate_df) + + +# ## Lower right +# +# For the figure in the lower right, we need to reload the merged `DataFrame`, which contains data from Gaia and photometry data from Pan-STARRS. + +# In[23]: + + +import pandas as pd + +filename = 'gd1_merged.hdf5' + +merged = pd.read_hdf(filename, 'merged') + + +# From the previous notebook, here's the function that plots the color-magnitude diagram. + +# In[24]: + + +import matplotlib.pyplot as plt + +def plot_cmd(table): + """Plot a color magnitude diagram. + + table: Table or DataFrame with photometry data + """ + y = table['g_mean_psf_mag'] + x = table['g_mean_psf_mag'] - table['i_mean_psf_mag'] + + plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3) + + plt.xlim([0, 1.5]) + plt.ylim([14, 22]) + plt.gca().invert_yaxis() + + plt.ylabel('$g_0$') + plt.xlabel('$(g-i)_0$') + + +# And here's what it looks like. + +# In[25]: + + +plot_cmd(merged) + + +# **Exercise:** Add a few lines to `plot_cmd` to show the Polygon we selected as a shaded area. +# +# Run these cells to get the polygon coordinates we saved in the previous notebook. + +# In[26]: + + +import os + +filename = 'gd1_polygon.hdf5' +path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/' + +if not os.path.exists(filename): + print(download(path+filename)) + + +# In[27]: + + +coords_df = pd.read_hdf(filename, 'coords_df') +coords = coords_df.to_numpy() +coords + + +# In[28]: + + +# Solution + +#poly = Polygon(coords, closed=True, +# facecolor='C1', alpha=0.4) +#plt.gca().add_patch(poly) + + +# ## Subplots +# +# Now we're ready to put it all together. To make a figure with four subplots, we'll use `subplot2grid`, [which requires two arguments](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.subplot2grid.html): +# +# * `shape`, which is a tuple with the number of rows and columns in the grid, and +# +# * `loc`, which is a tuple identifying the location in the grid we're about to fill. +# +# In this example, `shape` is `(2, 2)` to create two rows and two columns. +# +# For the first panel, `loc` is `(0, 0)`, which indicates row 0 and column 0, which is the upper-left panel. +# +# Here's how we use it to draw the four panels. + +# In[29]: + + +shape = (2, 2) +plt.subplot2grid(shape, (0, 0)) +plot_first_selection(candidate_df) + +plt.subplot2grid(shape, (0, 1)) +plot_proper_motion(centerline) + +plt.subplot2grid(shape, (1, 0)) +plot_second_selection(selected) + +plt.subplot2grid(shape, (1, 1)) +plot_cmd(merged) +poly = Polygon(coords, closed=True, + facecolor='C1', alpha=0.4) +plt.gca().add_patch(poly) + +plt.tight_layout() + + +# We use [`plt.tight_layout`](https://matplotlib.org/3.3.1/tutorials/intermediate/tight_layout_guide.html) at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don't overlap. +# +# **Exercise:** See what happens if you leave out `tight_layout`. + +# ## Adjusting proportions +# +# In the previous figure, the panels are all the same size. To get a better view of GD-1, we'd like to stretch the panels on the left and compress the ones on the right. +# +# To do that, we'll use the `colspan` argument to make a panel that spans multiple columns in the grid. +# +# In the following example, `shape` is `(2, 4)`, which means 2 rows and 4 columns. +# +# The panels on the left span three columns, so they are three times wider than the panels on the right. +# +# At the same time, we use `figsize` to adjust the aspect ratio of the whole figure. + +# In[30]: + + +plt.figure(figsize=(9, 4.5)) + +shape = (2, 4) +plt.subplot2grid(shape, (0, 0), colspan=3) +plot_first_selection(candidate_df) + +plt.subplot2grid(shape, (0, 3)) +plot_proper_motion(centerline) + +plt.subplot2grid(shape, (1, 0), colspan=3) +plot_second_selection(selected) + +plt.subplot2grid(shape, (1, 3)) +plot_cmd(merged) +poly = Polygon(coords, closed=True, + facecolor='C1', alpha=0.4) +plt.gca().add_patch(poly) + +plt.tight_layout() + + +# This is looking more and more like the figure in the paper. +# +# **Exercise:** In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2? + +# ## Summary +# +# In this notebook, we reverse-engineered the figure we've been replicating, identifying elements that seem effective and others that could be improved. +# +# We explored features Matplotlib provides for adding annotations to figures -- including text, lines, arrows, and polygons -- and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels. + +# ## Best practices +# +# * The most effective figures focus on telling a single story clearly and compellingly. +# +# * Consider using annotations to guide the readers attention to the most important elements of a figure. +# +# * The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults. +# +# * If you find yourself making the same customizations on several projects, you might want to create your own style sheet. + +# In[ ]: + + + + diff --git a/_build/jupyter_execute/07_plot_13_0.png b/_build/jupyter_execute/07_plot_13_0.png new file mode 100644 index 0000000..bdd9b77 Binary files /dev/null and b/_build/jupyter_execute/07_plot_13_0.png differ diff --git a/_build/jupyter_execute/07_plot_50_0.png b/_build/jupyter_execute/07_plot_50_0.png new file mode 100644 index 0000000..280dca5 Binary files /dev/null and b/_build/jupyter_execute/07_plot_50_0.png differ diff --git a/_build/jupyter_execute/07_plot_57_0.png b/_build/jupyter_execute/07_plot_57_0.png new file mode 100644 index 0000000..02032fc Binary files /dev/null and b/_build/jupyter_execute/07_plot_57_0.png differ diff --git a/_build/jupyter_execute/07_plot_63_0.png b/_build/jupyter_execute/07_plot_63_0.png new file mode 100644 index 0000000..aafb115 Binary files /dev/null and b/_build/jupyter_execute/07_plot_63_0.png differ diff --git a/_build/jupyter_execute/07_plot_69_0.png b/_build/jupyter_execute/07_plot_69_0.png new file mode 100644 index 0000000..6f91966 Binary files /dev/null and b/_build/jupyter_execute/07_plot_69_0.png differ diff --git a/_build/jupyter_execute/07_plot_72_0.png b/_build/jupyter_execute/07_plot_72_0.png new file mode 100644 index 0000000..830a165 Binary files /dev/null and b/_build/jupyter_execute/07_plot_72_0.png differ diff --git a/_build/jupyter_execute/AstronomicalData/01_query.ipynb b/_build/jupyter_execute/AstronomicalData/01_query.ipynb new file mode 100644 index 0000000..a1e5c7b --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/01_query.ipynb @@ -0,0 +1,1642 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lesson 1\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Optional detail \n", + "\n", + "> Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones:\n", + "\n", + "| Symbol | Operation\n", + "|--------| :---\n", + "| `>` | greater than\n", + "| `<` | less than\n", + "| `>=` | greater than or equal\n", + "| `<=` | less than or equal\n", + "| `=` | equal\n", + "| `!=` or `<>` | not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/AstronomicalData/01_query.py b/_build/jupyter_execute/AstronomicalData/01_query.py new file mode 100644 index 0000000..e9d667c --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/01_query.py @@ -0,0 +1,605 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Lesson 1 + +# ## Introduction +# +# This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include: +# +# * Writing queries that select and download data from a database. +# +# * Using data stored in an Astropy `Table` or Pandas `DataFrame`. +# +# * Working with coordinates and other quantities with units. +# +# * Storing data in various formats. +# +# * Performing database join operations that combine data from multiple tables. +# +# * Visualizing data and preparing publication-quality figures. + +# As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# As the abstract explains, "Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1." +# +# GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is "an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces." + +# [This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications: +# +# * "The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way." +# +# * "They also are being used as exquisitely sensitive scales to measure the galaxy's mass." +# +# * "... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature." + +# ## Prerequisites +# +# This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop. +# +# We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases. +# +# We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +# ## Data +# +# The datasets we will work with are: +# +# * [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is "a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision", and +# +# * [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources. +# +# Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +# One of the goals of this workshop is to provide tools for working with large datasets. + +# ## Lesson 1 +# +# The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database: +# +# 1. First we'll make a connection to the Gaia server, +# +# 2. We will explore information about the database and the tables it contains, +# +# 3. We will write a query and send it to the server, and finally +# +# 4. We will download the response from the server. +# +# After completing this lesson, you should be able to +# +# * Compose a basic query in ADQL. +# +# * Use queries to explore a database and its tables. +# +# * Use queries to download data. +# +# * Develop, test, and debug a query incrementally. + +# ## Query Language +# +# In order to select data from a database, you have to compose a query, which is like a program written in a "query language". +# The query language we'll use is ADQL, which stands for "Astronomical Data Query Language". +# +# ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL. +# +# [The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html). +# But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook). + +# ## Installing libraries +# +# The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/). +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Connecting to Gaia +# +# Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html). +# +# We can connect to the Gaia database like this: + +# In[2]: + + +from astroquery.gaia import Gaia + + +# #### Optional detail +# +# > Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for "Table Access Protocol". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections. + +# ## Databases and Tables +# +# What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL: +# +# * A database is a collection of one or more named tables. +# +# * Each table is a 2-D array with one or more named columns of data. +# +# We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the "metadata", not the data itself. + +# In[3]: + + +tables = Gaia.load_tables(only_names=True) + + +# In[4]: + + +for table in (tables): + print(table.get_qualified_name()) + + +# So that's a lot of tables. The ones we'll use are: +# +# * `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2), +# +# * `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and +# +# * `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS. +# +# We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. + +# In[5]: + + +meta = Gaia.load_table('gaiadr2.gaia_source') +meta + + +# Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents. +# +# To see the metadata, we have to print the object. + +# In[6]: + + +print(meta) + + +# Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`. +# +# **Exercise:** Go back and try +# +# ``` +# meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source') +# ``` +# +# What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out? + +# ## Columns +# +# The following loop prints the names of the columns in the table. + +# In[7]: + + +for column in meta.columns: + print(column.name) + + +# You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +# To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). +# +# If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness). + +# **Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names? +# +# Hint: Remember the gotcha we mentioned earlier. + +# In[8]: + + +# Solution + +meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid') +print(meta2) + + +# In[9]: + + +# Solution + +for column in meta2.columns: + print(column.name) + + +# ## Writing queries +# +# By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want. +# +# A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL. +# +# Here's an example of an ADQL query. + +# In[10]: + + +query1 = """SELECT +TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source""" + + +# **Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read. +# +# The words in uppercase are ADQL keywords: +# +# * `SELECT` indicates that we are selecting data (as opposed to adding or modifying data). +# +# * `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data. +# +# * `FROM` specifies which table we want data from. +# +# The third line is a list of column names, indicating which columns we want. +# +# In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive. + +# To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`: + +# In[11]: + + +job1 = Gaia.launch_job(query1) +job1 + + +# The result is an object that represents the job running on a Gaia server. +# +# If you print it, it displays metadata for the forthcoming table. + +# In[12]: + + +print(job1) + + +# Don't worry about `Results: None`. That does not actually mean there are no results. +# +# However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this: + +# In[13]: + + +results1 = job1.get_results() +type(results1) + + +# **Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*. + +# The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except: +# +# * SQL databases are stored on disk drives, so they are persistent; that is, they "survive" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook). +# +# * SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL. +# +# Jupyter knows how to display the contents of a `Table`. + +# In[14]: + + +results1 + + +# Each column has a name, units, and a data type. +# +# For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part. +# +# This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery. + +# **Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type? + +# ## Asynchronous queries +# +# `launch_job` asks the server to run the job "synchronously", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run "asynchronously", which mean they might take longer to get started. +# +# If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later. +# +# The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results. +# +# For anonymous users, files are kept for three days. +# +# As an example, let's try a query that's similar to `query1`, with two changes: +# +# * It selects the first 3000 rows, so it is bigger than we should run synchronously. +# +# * It uses a new keyword, `WHERE`. + +# In[15]: + + +query2 = """SELECT TOP 3000 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 +""" + + +# A `WHERE` clause indicates which rows we want; in this case, the query selects only rows "where" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1. +# +# `WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database. +# +# We use `launch_job_async` to submit an asynchronous query. + +# In[16]: + + +job2 = Gaia.launch_job_async(query2) +print(job2) + + +# And here are the results. + +# In[17]: + + +results2 = job2.get_results() +results2 + + +# You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), "Negative parallaxes are caused by errors in the observations." Negative parallaxes have "no physical meaning," but they can be a "useful diagnostic on the quality of the astrometric solution." +# +# Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate. + +# **Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. +# +# The query should fail, but notice that you don't get much useful debugging information. +# +# For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help: +# +# * Whenever possible, start with a working query, either an example you find online or a query you have used in the past. +# +# * Make small changes and test each change before you continue. +# +# * While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. +# +# * Launching test queries synchronously might make them start faster, too. + +# ## Operators +# +# In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp); here are the most common ones: +# +# | Symbol | Operation +# |--------| :--- +# | `>` | greater than +# | `<` | less than +# | `>=` | greater than or equal +# | `<=` | less than or equal +# | `=` | equal +# | `!=` or `<>` | not equal +# +# Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`. +# Be careful to keep your Python out of your ADQL! +# +# You can combine comparisons using the logical operators: +# +# * AND: true if both comparisons are true +# * OR: true if either or both comparisons are true +# +# Finally, you can use `NOT` to invert the result of a comparison. + +# **Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`. +# +# You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). + +# In[18]: + + +# Solution + +# This is what most people will probably do + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp > -0.75 AND bp_rp < 2 +""" + + +# In[19]: + + +# Solution + +# But if someone notices the BETWEEN operator, +# they might do this + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog. +# +# Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + +# ## Cleaning up +# +# Asynchronous jobs have a `jobid`. + +# In[20]: + + +job1.jobid, job2.jobid + + +# Which you can use to remove the job from the server. + +# In[21]: + + +Gaia.remove_jobs([job2.jobid]) + + +# If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself. + +# ## Formatting queries +# +# So far the queries have been string "literals", meaning that the entire string is part of the program. +# But writing queries yourself can be slow, repetitive, and error-prone. +# +# It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp). +# +# As an example, we'll divide the previous query into two parts; a list of column names and a "base" for the query that contains everything except the column names. +# +# Here's the list of columns we'll select. + +# In[22]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# And here's the base; it's a string that contains at least one format specifier in curly brackets (braces). + +# In[23]: + + +query3_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide. +# +# To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`. + +# In[24]: + + +query3 = query3_base.format(columns=columns) + + +# The result is a string with line breaks. If you display it, the line breaks appear as `\n`. + +# In[25]: + + +query3 + + +# But if you print it, the line breaks appear as... line breaks. + +# In[26]: + + +print(query3) + + +# Notice that the format specifier has been replaced with the value of `columns`. +# +# Let's run it and see if it works: + +# In[27]: + + +job3 = Gaia.launch_job(query3) +print(job3) + + +# In[28]: + + +results3 = job3.get_results() +results3 + + +# Good so far. + +# **Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input. +# +# Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide. + +# In[29]: + + +# Solution + +query4_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < {max_parallax} AND +bp_rp BETWEEN -0.75 AND 2 +""" + + +# In[30]: + + +# Solution + +query4 = query4_base.format(columns=columns, + max_parallax=0.5) +print(query) + + +# **Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. +# +# The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions. +# +# A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section. +# +# What do you think of this choice? Are there alternatives you prefer? + +# ## Summary +# +# This notebook demonstrates the following steps: +# +# 1. Making a connection to the Gaia server, +# +# 2. Exploring information about the database and the tables it contains, +# +# 3. Writing a query and sending it to the server, and finally +# +# 4. Downloading the response from the server as an Astropy `Table`. + +# ## Best practices +# +# * If you can't download an entire dataset (or it's not practical) use queries to select the data you need. +# +# * Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data. +# +# * If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously. +# +# * ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should. +# +# * ADQL and SQL don't require you to break a query into multiple lines, but you should. +# + +# Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect. +# +# There are a few things you can do to mitigate these problems: +# +# * Make each section of the notebook self-contained. Try not to use the same variable name in more than one section. +# +# * Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase. diff --git a/_build/jupyter_execute/AstronomicalData/02_coords.ipynb b/_build/jupyter_execute/AstronomicalData/02_coords.ipynb new file mode 100644 index 0000000..40537ed --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/02_coords.ipynb @@ -0,0 +1,1970 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 2\n", + "\n", + "This is the second in a series of lessons related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1603114980658O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201019094300.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 19 09:43 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try:\n", + "\n", + "```\n", + "!dir gd1_results.fits\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/AstronomicalData/02_coords.py b/_build/jupyter_execute/AstronomicalData/02_coords.py new file mode 100644 index 0000000..090c014 --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/02_coords.py @@ -0,0 +1,411 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Lesson 2 +# +# This is the second in a series of lessons related to astronomy data. +# +# As a running example, we are replicating parts of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server. +# +# In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be. + +# We'll start with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. +# +# Then, to select stars in the vicinity of GD-1, we'll: +# +# * Use `Quantity` objects to represent measurements with units. +# +# * Use the `Gala` library to convert coordinates from one frame to another. +# +# * Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. +# +# * Submit a query and download the results. +# +# * Store the results in a FITS file. +# +# After completing this lesson, you should be able to +# +# * Use Python string formatting to compose more complex ADQL queries. +# +# * Work with coordinates and other quantities that have units. +# +# * Download the results of a query and store them in a file. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Selecting a region + +# One of the most common ways to restrict a query is to select stars in a particular region of the sky. +# +# For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects "all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg)." + +# In[2]: + + +query = """ +SELECT +TOP 10 source_id +FROM gaiadr2.gaia_source +WHERE 1=CONTAINS( + POINT(ra, dec), + CIRCLE(266.41683, -29.00781, 0.08333333)) +""" + + +# This query uses three keywords that are specific to ADQL (not SQL): +# +# * `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination. +# +# * `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees. +# +# * `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise. +# +# Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12). +# +# A query like this is called a cone search because it selects stars in a cone. +# +# Here's how we run it. + +# In[3]: + + +from astroquery.gaia import Gaia + +job = Gaia.launch_job(query) +result = job.get_results() +result + + +# **Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be. +# +# An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them. +# +# In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched? + +# ## Getting GD-1 Data +# +# From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1: +# +# + +# Along the axis of right ascension ($\phi_1$) the figure extends from -100 to 20 degrees. +# +# Along the axis of declination ($\phi_2$) the figure extends from about -8 to 4 degrees. +# +# Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so +# +# * That would be difficult to work with, +# +# * As anonymous users, we are limited to 3 million rows in a single query, and +# +# * While we are developing and testing code, it will be faster to work with a smaller dataset. +# +# So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# But first we let's see how to represent quantities with units like degrees. + +# ## Working with coordinates +# +# Coordinates are physical quantities, which means that they have two parts, a value and a unit. +# +# For example, the coordinate $30^{\circ}$ has value 30 and its units are degrees. +# +# Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure). +# +# Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters. +# +# To use Astropy units, we import them like this: + +# In[4]: + + +import astropy.units as u + +u + + +# `u` is an object that contains most common units and all SI units. +# +# You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/). + +# In[5]: + + +dir(u) + + +# To create a quantity, we multiply a value by a unit. + +# In[6]: + + +coord = 30 * u.deg +type(coord) + + +# The result is a `Quantity` object. +# +# Jupyter knows how to display `Quantities` like this: + +# In[7]: + + +coord + + +# ## Selecting a rectangle +# +# Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# We'll define variables to contain these limits. + +# In[8]: + + +phi1_min = -55 +phi1_max = -45 +phi2_min = -8 +phi2_max = 4 + + +# To represent a rectangle, we'll use two lists of coordinates and multiply by their units. + +# In[9]: + + +phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg +phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg + + +# `phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. +# +# But they are in "[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)" +# +# In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/). + +# In[10]: + + +import gala.coordinates as gc + +corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect) +type(corners) + + +# We can display the result like this: + +# In[11]: + + +corners + + +# Now we can use `transform_to` to convert to ICRS coordinates. + +# In[12]: + + +import astropy.coordinates as coord + +corners_icrs = corners.transform_to(coord.ICRS) +type(corners_icrs) + + +# The result is an `ICRS` object. + +# In[13]: + + +corners_icrs + + +# Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon. + +# ## Selecting a polygon +# +# In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example: +# +# ``` +# """ +# POLYGON(143.65, 20.98, +# 134.46, 26.39, +# 140.58, 34.85, +# 150.16, 29.01) +# """ +# ``` + +# `corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points. + +# In[14]: + + +for point in corners_icrs: + print(point) + + +# From that, we can select the coordinates `ra` and `dec`: + +# In[15]: + + +for point in corners_icrs: + print(point.ra, point.dec) + + +# The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number. + +# In[16]: + + +for point in corners_icrs: + print(point.ra.value, point.dec.value) + + +# We can use string `format` to convert these numbers to strings. + +# In[17]: + + +point_base = "{point.ra.value}, {point.dec.value}" + +t = [point_base.format(point=point) + for point in corners_icrs] +t + + +# The result is a list of strings, which we can join into a single string using `join`. + +# In[18]: + + +point_list = ', '.join(t) +point_list + + +# Notice that we invoke `join` on a string and pass the list as an argument. +# +# Before we can assemble the query, we need `columns` again (as we saw in the previous notebook). + +# In[19]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# Here's the base for the query, with format specifiers for `columns` and `point_list`. + +# In[20]: + + +query_base = """SELECT {columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON({point_list})) +""" + + +# And here's the result: + +# In[21]: + + +query = query_base.format(columns=columns, + point_list=point_list) +print(query) + + +# As always, we should take a minute to proof-read the query before we launch it. +# +# The result will be bigger than our previous queries, so it will take a little longer. + +# In[22]: + + +job = Gaia.launch_job_async(query) +print(job) + + +# Here are the results. + +# In[23]: + + +results = job.get_results() +len(results) + + +# There are more than 100,000 stars in this polygon, but that's a manageable size to work with. + +# ## Saving results +# +# This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it. +# +# Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again. +# +# Astropy `Table` objects provide `write`, which writes the table to disk. + +# In[24]: + + +filename = 'gd1_results.fits' +results.write(filename, overwrite=True) + + +# Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table. +# +# If the file already exists, the `overwrite` argument causes it to be overwritten. +# +# To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form. + +# In[25]: + + +get_ipython().system('ls -lh gd1_results.fits') + + +# The file is about 8.6 MB. If you are using Windows, `ls` might not work; in that case, try: +# +# ``` +# !dir gd1_results.fits +# ``` + +# ## Summary +# +# In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file. +# +# In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1. + +# ## Best practices +# +# * For measurements with units, use `Quantity` objects that represent units explicitly and check for errors. +# +# * Use the `format` function to compose queries; it is often faster and less error-prone. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again. diff --git a/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.ipynb b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.ipynb new file mode 100644 index 0000000..94813e9 --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.ipynb @@ -0,0 +1,1640 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include:\n", + "\n", + "* Writing queries that select and download data from a database.\n", + "\n", + "* Using data stored in an Astropy `Table` or Pandas `DataFrame`.\n", + "\n", + "* Working with coordinates and other quantities with units.\n", + "\n", + "* Storing data in various formats.\n", + "\n", + "* Performing database join operations that combine data from multiple tables.\n", + "\n", + "* Visualizing data and preparing publication-quality figures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a running example, we will replicate part of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "As the abstract explains, \"Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1.\"\n", + "\n", + "GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is \"an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications:\n", + "\n", + "* \"The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way.\"\n", + "\n", + "* \"They also are being used as exquisitely sensitive scales to measure the galaxy's mass.\"\n", + "\n", + "* \"... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop.\n", + "\n", + "We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases.\n", + "\n", + "We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "The datasets we will work with are:\n", + " \n", + "* [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is \"a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision\", and\n", + "\n", + "* [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources.\n", + "\n", + "Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset.\n", + "One of the goals of this workshop is to provide tools for working with large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lesson 1\n", + "\n", + "The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database:\n", + "\n", + "1. First we'll make a connection to the Gaia server,\n", + "\n", + "2. We will explore information about the database and the tables it contains,\n", + "\n", + "3. We will write a query and send it to the server, and finally\n", + "\n", + "4. We will download the response from the server.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Compose a basic query in ADQL.\n", + "\n", + "* Use queries to explore a database and its tables.\n", + "\n", + "* Use queries to download data.\n", + "\n", + "* Develop, test, and debug a query incrementally." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query Language\n", + "\n", + "In order to select data from a database, you have to compose a query, which is like a program written in a \"query language\".\n", + "The query language we'll use is ADQL, which stands for \"Astronomical Data Query Language\".\n", + "\n", + "ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL.\n", + "\n", + "[The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html).\n", + "But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/).\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connecting to Gaia\n", + "\n", + "Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html).\n", + "\n", + "We can connect to the Gaia database like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Optional detail \n", + "\n", + "> Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for \"Table Access Protocol\". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Databases and Tables\n", + "\n", + "What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL:\n", + "\n", + "* A database is a collection of one or more named tables.\n", + "\n", + "* Each table is a 2-D array with one or more named columns of data.\n", + "\n", + "We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the \"metadata\", not the data itself." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Retrieving tables... [astroquery.utils.tap.core]\n", + "INFO: Parsing tables... [astroquery.utils.tap.core]\n", + "INFO: Done. [astroquery.utils.tap.core]\n" + ] + } + ], + "source": [ + "tables = Gaia.load_tables(only_names=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "external.external.apassdr9\n", + "external.external.gaiadr2_geometric_distance\n", + "external.external.galex_ais\n", + "external.external.ravedr5_com\n", + "external.external.ravedr5_dr5\n", + "external.external.ravedr5_gra\n", + "external.external.ravedr5_on\n", + "external.external.sdssdr13_photoprimary\n", + "external.external.skymapperdr1_master\n", + "external.external.tmass_xsc\n", + "public.public.hipparcos\n", + "public.public.hipparcos_newreduction\n", + "public.public.hubble_sc\n", + "public.public.igsl_source\n", + "public.public.igsl_source_catalog_ids\n", + "public.public.tycho2\n", + "public.public.dual\n", + "tap_config.tap_config.coord_sys\n", + "tap_config.tap_config.properties\n", + "tap_schema.tap_schema.columns\n", + "tap_schema.tap_schema.key_columns\n", + "tap_schema.tap_schema.keys\n", + "tap_schema.tap_schema.schemas\n", + "tap_schema.tap_schema.tables\n", + "gaiadr1.gaiadr1.aux_qso_icrf2_match\n", + "gaiadr1.gaiadr1.ext_phot_zero_point\n", + "gaiadr1.gaiadr1.allwise_best_neighbour\n", + "gaiadr1.gaiadr1.allwise_neighbourhood\n", + "gaiadr1.gaiadr1.gsc23_best_neighbour\n", + "gaiadr1.gaiadr1.gsc23_neighbourhood\n", + "gaiadr1.gaiadr1.ppmxl_best_neighbour\n", + "gaiadr1.gaiadr1.ppmxl_neighbourhood\n", + "gaiadr1.gaiadr1.sdss_dr9_best_neighbour\n", + "gaiadr1.gaiadr1.sdss_dr9_neighbourhood\n", + "gaiadr1.gaiadr1.tmass_best_neighbour\n", + "gaiadr1.gaiadr1.tmass_neighbourhood\n", + "gaiadr1.gaiadr1.ucac4_best_neighbour\n", + "gaiadr1.gaiadr1.ucac4_neighbourhood\n", + "gaiadr1.gaiadr1.urat1_best_neighbour\n", + "gaiadr1.gaiadr1.urat1_neighbourhood\n", + "gaiadr1.gaiadr1.cepheid\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov\n", + "gaiadr1.gaiadr1.phot_variable_time_series_gfov_statistical_parameters\n", + "gaiadr1.gaiadr1.rrlyrae\n", + "gaiadr1.gaiadr1.variable_summary\n", + "gaiadr1.gaiadr1.allwise_original_valid\n", + "gaiadr1.gaiadr1.gsc23_original_valid\n", + "gaiadr1.gaiadr1.ppmxl_original_valid\n", + "gaiadr1.gaiadr1.sdssdr9_original_valid\n", + "gaiadr1.gaiadr1.tmass_original_valid\n", + "gaiadr1.gaiadr1.ucac4_original_valid\n", + "gaiadr1.gaiadr1.urat1_original_valid\n", + "gaiadr1.gaiadr1.gaia_source\n", + "gaiadr1.gaiadr1.tgas_source\n", + "gaiadr2.gaiadr2.aux_allwise_agn_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_iers_gdr2_cross_id\n", + "gaiadr2.gaiadr2.aux_sso_orbit_residuals\n", + "gaiadr2.gaiadr2.aux_sso_orbits\n", + "gaiadr2.gaiadr2.dr1_neighbourhood\n", + "gaiadr2.gaiadr2.allwise_best_neighbour\n", + "gaiadr2.gaiadr2.allwise_neighbourhood\n", + "gaiadr2.gaiadr2.apassdr9_best_neighbour\n", + "gaiadr2.gaiadr2.apassdr9_neighbourhood\n", + "gaiadr2.gaiadr2.gsc23_best_neighbour\n", + "gaiadr2.gaiadr2.gsc23_neighbourhood\n", + "gaiadr2.gaiadr2.hipparcos2_best_neighbour\n", + "gaiadr2.gaiadr2.hipparcos2_neighbourhood\n", + "gaiadr2.gaiadr2.panstarrs1_best_neighbour\n", + "gaiadr2.gaiadr2.panstarrs1_neighbourhood\n", + "gaiadr2.gaiadr2.ppmxl_best_neighbour\n", + "gaiadr2.gaiadr2.ppmxl_neighbourhood\n", + "gaiadr2.gaiadr2.ravedr5_best_neighbour\n", + "gaiadr2.gaiadr2.ravedr5_neighbourhood\n", + "gaiadr2.gaiadr2.sdssdr9_best_neighbour\n", + "gaiadr2.gaiadr2.sdssdr9_neighbourhood\n", + "gaiadr2.gaiadr2.tmass_best_neighbour\n", + "gaiadr2.gaiadr2.tmass_neighbourhood\n", + "gaiadr2.gaiadr2.tycho2_best_neighbour\n", + "gaiadr2.gaiadr2.tycho2_neighbourhood\n", + "gaiadr2.gaiadr2.urat1_best_neighbour\n", + "gaiadr2.gaiadr2.urat1_neighbourhood\n", + "gaiadr2.gaiadr2.sso_observation\n", + "gaiadr2.gaiadr2.sso_source\n", + "gaiadr2.gaiadr2.vari_cepheid\n", + "gaiadr2.gaiadr2.vari_classifier_class_definition\n", + "gaiadr2.gaiadr2.vari_classifier_definition\n", + "gaiadr2.gaiadr2.vari_classifier_result\n", + "gaiadr2.gaiadr2.vari_long_period_variable\n", + "gaiadr2.gaiadr2.vari_rotation_modulation\n", + "gaiadr2.gaiadr2.vari_rrlyrae\n", + "gaiadr2.gaiadr2.vari_short_timescale\n", + "gaiadr2.gaiadr2.vari_time_series_statistics\n", + "gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "gaiadr2.gaiadr2.gaia_source\n", + "gaiadr2.gaiadr2.ruwe\n" + ] + } + ], + "source": [ + "for table in (tables):\n", + " print(table.get_qualified_name())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So that's a lot of tables. The ones we'll use are:\n", + "\n", + "* `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2),\n", + "\n", + "* `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and\n", + "\n", + "* `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS.\n", + "\n", + "We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.gaia_source'\n", + "Parsing table 'gaiadr2.gaia_source'...\n", + "Done.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "meta = Gaia.load_table('gaiadr2.gaia_source')\n", + "meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents.\n", + "\n", + "To see the metadata, we have to print the object." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TAP Table name: gaiadr2.gaiadr2.gaia_source\n", + "Description: This table has an entry for every Gaia observed source as listed in the\n", + "Main Database accumulating catalogue version from which the catalogue\n", + "release has been generated. It contains the basic source parameters,\n", + "that is only final data (no epoch data) and no spectra (neither final\n", + "nor epoch).\n", + "Num. columns: 96\n" + ] + } + ], + "source": [ + "print(meta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`.\n", + "\n", + "**Exercise:** Go back and try\n", + "\n", + "```\n", + "meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source')\n", + "```\n", + "\n", + "What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Columns\n", + "\n", + "The following loop prints the names of the columns in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "solution_id\n", + "designation\n", + "source_id\n", + "random_index\n", + "ref_epoch\n", + "ra\n", + "ra_error\n", + "dec\n", + "dec_error\n", + "parallax\n", + "parallax_error\n", + "parallax_over_error\n", + "pmra\n", + "pmra_error\n", + "pmdec\n", + "pmdec_error\n", + "ra_dec_corr\n", + "ra_parallax_corr\n", + "ra_pmra_corr\n", + "ra_pmdec_corr\n", + "dec_parallax_corr\n", + "dec_pmra_corr\n", + "dec_pmdec_corr\n", + "parallax_pmra_corr\n", + "parallax_pmdec_corr\n", + "pmra_pmdec_corr\n", + "astrometric_n_obs_al\n", + "astrometric_n_obs_ac\n", + "astrometric_n_good_obs_al\n", + "astrometric_n_bad_obs_al\n", + "astrometric_gof_al\n", + "astrometric_chi2_al\n", + "astrometric_excess_noise\n", + "astrometric_excess_noise_sig\n", + "astrometric_params_solved\n", + "astrometric_primary_flag\n", + "astrometric_weight_al\n", + "astrometric_pseudo_colour\n", + "astrometric_pseudo_colour_error\n", + "mean_varpi_factor_al\n", + "astrometric_matched_observations\n", + "visibility_periods_used\n", + "astrometric_sigma5d_max\n", + "frame_rotator_object_type\n", + "matched_observations\n", + "duplicated_source\n", + "phot_g_n_obs\n", + "phot_g_mean_flux\n", + "phot_g_mean_flux_error\n", + "phot_g_mean_flux_over_error\n", + "phot_g_mean_mag\n", + "phot_bp_n_obs\n", + "phot_bp_mean_flux\n", + "phot_bp_mean_flux_error\n", + "phot_bp_mean_flux_over_error\n", + "phot_bp_mean_mag\n", + "phot_rp_n_obs\n", + "phot_rp_mean_flux\n", + "phot_rp_mean_flux_error\n", + "phot_rp_mean_flux_over_error\n", + "phot_rp_mean_mag\n", + "phot_bp_rp_excess_factor\n", + "phot_proc_mode\n", + "bp_rp\n", + "bp_g\n", + "g_rp\n", + "radial_velocity\n", + "radial_velocity_error\n", + "rv_nb_transits\n", + "rv_template_teff\n", + "rv_template_logg\n", + "rv_template_fe_h\n", + "phot_variable_flag\n", + "l\n", + "b\n", + "ecl_lon\n", + "ecl_lat\n", + "priam_flags\n", + "teff_val\n", + "teff_percentile_lower\n", + "teff_percentile_upper\n", + "a_g_val\n", + "a_g_percentile_lower\n", + "a_g_percentile_upper\n", + "e_bp_min_rp_val\n", + "e_bp_min_rp_percentile_lower\n", + "e_bp_min_rp_percentile_upper\n", + "flame_flags\n", + "radius_val\n", + "radius_percentile_lower\n", + "radius_percentile_upper\n", + "lum_val\n", + "lum_percentile_lower\n", + "lum_percentile_upper\n", + "datalink_url\n", + "epoch_photometry_url\n" + ] + } + ], + "source": [ + "for column in meta.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess.\n", + "To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html).\n", + "\n", + "If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names?\n", + "\n", + "Hint: Remember the gotcha we mentioned earlier." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Retrieving table 'gaiadr2.panstarrs1_original_valid'\n", + "Parsing table 'gaiadr2.panstarrs1_original_valid'...\n", + "Done.\n", + "TAP Table name: gaiadr2.gaiadr2.panstarrs1_original_valid\n", + "Description: The Panoramic Survey Telescope and Rapid Response System (Pan-STARRS) is\n", + "a system for wide-field astronomical imaging developed and operated by\n", + "the Institute for Astronomy at the University of Hawaii. Pan-STARRS1\n", + "(PS1) is the first part of Pan-STARRS to be completed and is the basis\n", + "for Data Release 1 (DR1). The PS1 survey used a 1.8 meter telescope and\n", + "its 1.4 Gigapixel camera to image the sky in five broadband filters (g,\n", + "r, i, z, y).\n", + "\n", + "The current table contains a filtered subsample of the 10 723 304 629\n", + "entries listed in the original ObjectThin table.\n", + "We used only ObjectThin and MeanObject tables to extract\n", + "panstarrs1OriginalValid table, this means that objects detected only in\n", + "stack images are not included here. The main reason for us to avoid the\n", + "use of objects detected in stack images is that their astrometry is not\n", + "as good as the mean objects astrometry: “The stack positions (raStack,\n", + "decStack) have considerably larger systematic astrometric errors than\n", + "the mean epoch positions (raMean, decMean).” The astrometry for the\n", + "MeanObject positions uses Gaia DR1 as a reference catalog, while the\n", + "stack positions use 2MASS as a reference catalog.\n", + "\n", + "In details, we filtered out all objects where:\n", + "\n", + "- nDetections = 1\n", + "\n", + "- no good quality data in Pan-STARRS, objInfoFlag 33554432 not set\n", + "\n", + "- mean astrometry could not be measured, objInfoFlag 524288 set\n", + "\n", + "- stack position used for mean astrometry, objInfoFlag 1048576 set\n", + "\n", + "- error on all magnitudes equal to 0 or to -999;\n", + "\n", + "- all magnitudes set to -999;\n", + "\n", + "- error on RA or DEC greater than 1 arcsec.\n", + "\n", + "The number of objects in panstarrs1OriginalValid is 2 264 263 282.\n", + "\n", + "The panstarrs1OriginalValid table contains only a subset of the columns\n", + "available in the combined ObjectThin and MeanObject tables. A\n", + "description of the original ObjectThin and MeanObjects tables can be\n", + "found at:\n", + "https://outerspace.stsci.edu/display/PANSTARRS/PS1+Database+object+and+detection+tables\n", + "\n", + "Download:\n", + "http://mastweb.stsci.edu/ps1casjobs/home.aspx\n", + "Documentation:\n", + "https://outerspace.stsci.edu/display/PANSTARRS\n", + "http://pswww.ifa.hawaii.edu/pswww/\n", + "References:\n", + "The Pan-STARRS1 Surveys, Chambers, K.C., et al. 2016, arXiv:1612.05560\n", + "Pan-STARRS Data Processing System, Magnier, E. A., et al. 2016,\n", + "arXiv:1612.05240\n", + "Pan-STARRS Pixel Processing: Detrending, Warping, Stacking, Waters, C.\n", + "Z., et al. 2016, arXiv:1612.05245\n", + "Pan-STARRS Pixel Analysis: Source Detection and Characterization,\n", + "Magnier, E. A., et al. 2016, arXiv:1612.05244\n", + "Pan-STARRS Photometric and Astrometric Calibration, Magnier, E. A., et\n", + "al. 2016, arXiv:1612.05242\n", + "The Pan-STARRS1 Database and Data Products, Flewelling, H. A., et al.\n", + "2016, arXiv:1612.05243\n", + "\n", + "Catalogue curator:\n", + "SSDC - ASI Space Science Data Center\n", + "https://www.ssdc.asi.it/\n", + "Num. columns: 26\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid')\n", + "print(meta2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "obj_name\n", + "obj_id\n", + "ra\n", + "dec\n", + "ra_error\n", + "dec_error\n", + "epoch_mean\n", + "g_mean_psf_mag\n", + "g_mean_psf_mag_error\n", + "g_flags\n", + "r_mean_psf_mag\n", + "r_mean_psf_mag_error\n", + "r_flags\n", + "i_mean_psf_mag\n", + "i_mean_psf_mag_error\n", + "i_flags\n", + "z_mean_psf_mag\n", + "z_mean_psf_mag_error\n", + "z_flags\n", + "y_mean_psf_mag\n", + "y_mean_psf_mag_error\n", + "y_flags\n", + "n_detections\n", + "zone_id\n", + "obj_info_flag\n", + "quality_flag\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "for column in meta2.columns:\n", + " print(column.name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing queries\n", + "\n", + "By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want.\n", + "\n", + "A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL.\n", + "\n", + "Here's an example of an ADQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "query1 = \"\"\"SELECT \n", + "TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax \n", + "FROM gaiadr2.gaia_source\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read.\n", + "\n", + "The words in uppercase are ADQL keywords:\n", + "\n", + "* `SELECT` indicates that we are selecting data (as opposed to adding or modifying data).\n", + "\n", + "* `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data.\n", + "\n", + "* `FROM` specifies which table we want data from.\n", + "\n", + "The third line is a list of column names, indicating which columns we want. \n", + "\n", + "In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1 = Gaia.launch_job(query1)\n", + "job1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an object that represents the job running on a Gaia server.\n", + "\n", + "If you print it, it displays metadata for the forthcoming table." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090721.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "print(job1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't worry about `Results: None`. That does not actually mean there are no results.\n", + "\n", + "However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.table.table.Table" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1 = job1.get_results()\n", + "type(results1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except:\n", + "\n", + "* SQL databases are stored on disk drives, so they are persistent; that is, they \"survive\" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook).\n", + "\n", + "* SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL.\n", + "\n", + "Jupyter knows how to display the contents of a `Table`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307550606271623682015.5281.267623626829920.5585239223461581.1422630184554958
45307468443413159682015.5281.137043174954120.3778523888981841.0092247424630945
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958\n", + "4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column has a name, units, and a data type.\n", + "\n", + "For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part.\n", + "\n", + "This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Asynchronous queries\n", + "\n", + "`launch_job` asks the server to run the job \"synchronously\", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run \"asynchronously\", which mean they might take longer to get started.\n", + "\n", + "If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later.\n", + "\n", + "The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results.\n", + "\n", + "For anonymous users, files are kept for three days.\n", + "\n", + "As an example, let's try a query that's similar to `query1`, with two changes:\n", + "\n", + "* It selects the first 3000 rows, so it is bigger than we should run synchronously.\n", + "\n", + "* It uses a new keyword, `WHERE`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"\"\"SELECT TOP 3000\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `WHERE` clause indicates which rows we want; in this case, the query selects only rows \"where\" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1.\n", + "\n", + "`WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database.\n", + "\n", + "We use `launch_job_async` to submit an asynchronous query." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description \n", + "--------- ------- ---- ------------------------------------------------------------------\n", + "source_id int64 Unique source identifier (unique within a particular Data Release)\n", + "ref_epoch float64 yr Reference epoch\n", + " ra float64 deg Right ascension\n", + " dec float64 deg Declination\n", + " parallax float64 mas Parallax\n", + "Jobid: 1601903242219O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090722.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job2 = Gaia.launch_job_async(query2)\n", + "print(job2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=3000\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idref_epochradecparallax
yrdegdegmas
int64float64float64float64float64
45307383617937696002015.5281.5672536244872520.406821174303780.9785380604519425
45307526511350812162015.5281.086156535525720.5233504963518460.2674800612552977
45307433439514055682015.5281.3711441829917720.474147574053124-0.43911323550176806
45307684566150264322015.5281.872092143634720.31829694530366-0.06900136127674149
45307635131191372802015.5281.921180886411620.209568295785240.1266016679823622
45307363646185392642015.5281.491347561327420.3465790413276930.3894019486060072
45307359523051777282015.5281.408554916570420.3110309037199280.2041189982608354
45307512810560226562015.5281.058532837763820.4603095562147530.10294642821734962
45307409387744093442015.5281.376256953641620.4361400589412060.9242670062090182
...............
44677109150118026242015.5269.96809693073471.14290850381608820.42361471245557913
44677065513286795522015.5270.0331645898811.05657473236899270.922888231734588
44677122550373000962015.5270.77247179230470.6581664892880896-2.669179465293931
44677350011817617922015.5270.36286062483080.89470793235991240.6117399163086398
44677371014219166722015.5270.51108346614440.9806225910160181-0.39818224846127004
44677075477573274882015.5269.887462805949271.02127599401369620.7741412301054209
44677327720945730562015.5270.559971827601260.9037072088489417-1.7920417800164183
44677323554910877442015.5270.67307907024910.9197224705139885-0.3464446494840354
44677170997669445122015.5270.576671731208250.7262776590095680.05443955111134051
44677190582657812482015.5270.72480529715140.82055519217827850.3733943917490343
" + ], + "text/plain": [ + "\n", + " source_id ref_epoch ... dec parallax \n", + " yr ... deg mas \n", + " int64 float64 ... float64 float64 \n", + "------------------- --------- ... ------------------ --------------------\n", + "4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425\n", + "4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977\n", + "4530743343951405568 2015.5 ... 20.474147574053124 -0.43911323550176806\n", + "4530768456615026432 2015.5 ... 20.31829694530366 -0.06900136127674149\n", + "4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622\n", + "4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072\n", + "4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354\n", + "4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962\n", + "4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182\n", + " ... ... ... ... ...\n", + "4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913\n", + "4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588\n", + "4467712255037300096 2015.5 ... 0.6581664892880896 -2.669179465293931\n", + "4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398\n", + "4467737101421916672 2015.5 ... 0.9806225910160181 -0.39818224846127004\n", + "4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209\n", + "4467732772094573056 2015.5 ... 0.9037072088489417 -1.7920417800164183\n", + "4467732355491087744 2015.5 ... 0.9197224705139885 -0.3464446494840354\n", + "4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051\n", + "4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results2 = job2.get_results()\n", + "results2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), \"Negative parallaxes are caused by errors in the observations.\" Negative parallaxes have \"no physical meaning,\" but they can be a \"useful diagnostic on the quality of the astrometric solution.\"\n", + "\n", + "Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. \n", + "\n", + "The query should fail, but notice that you don't get much useful debugging information. \n", + "\n", + "For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help:\n", + "\n", + "* Whenever possible, start with a working query, either an example you find online or a query you have used in the past.\n", + "\n", + "* Make small changes and test each change before you continue.\n", + "\n", + "* While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. \n", + "\n", + "* Launching test queries synchronously might make them start faster, too." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operators\n", + "\n", + "In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp):\n", + "\n", + "* `>`: greater than\n", + "* `<`: less than\n", + "* `>=`: greater than or equal\n", + "* `<=`: less than or equal\n", + "* `=`: equal\n", + "* `!=` or `<>`: not equal\n", + "\n", + "Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`.\n", + "Be careful to keep your Python out of your ADQL!\n", + "\n", + "You can combine comparisons using the logical operators:\n", + "\n", + "* AND: true if both comparisons are true\n", + "* OR: true if either or both comparisons are true\n", + "\n", + "Finally, you can use `NOT` to invert the result of a comparison. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`.\n", + "\n", + "You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# This is what most people will probably do\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp > -0.75 AND bp_rp < 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "# But if someone notices the BETWEEN operator, \n", + "# they might do this\n", + "\n", + "query = \"\"\"SELECT TOP 10\n", + "source_id, ref_epoch, ra, dec, parallax\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1 \n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog.\n", + "\n", + "Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning up\n", + "\n", + "Asynchronous jobs have a `jobid`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, '1601903242219O')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job1.jobid, job2.jobid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which you can use to remove the job from the server." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed jobs: '['1601903242219O']'.\n" + ] + } + ], + "source": [ + "Gaia.remove_jobs([job2.jobid])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting queries\n", + "\n", + "So far the queries have been string \"literals\", meaning that the entire string is part of the program.\n", + "But writing queries yourself can be slow, repetitive, and error-prone.\n", + "\n", + "It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp).\n", + "\n", + "As an example, we'll divide the previous query into two parts; a list of column names and a \"base\" for the query that contains everything except the column names.\n", + "\n", + "Here's the list of columns we'll select. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the base; it's a string that contains at least one format specifier in curly brackets (braces)." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "query3_base = \"\"\"SELECT TOP 10 \n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide.\n", + "\n", + "To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "query3 = query3_base.format(columns=columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a string with line breaks. If you display it, the line breaks appear as `\\n`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'SELECT TOP 10 \\nsource_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\\nFROM gaiadr2.gaia_source\\nWHERE parallax < 1\\n AND bp_rp BETWEEN -0.75 AND 2\\n'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you print it, the line breaks appear as... line breaks." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10 \n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "print(query3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the format specifier has been replaced with the value of `columns`.\n", + "\n", + "Let's run it and see if it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "
\n", + " name dtype unit description n_bad\n", + "--------------- ------- -------- ------------------------------------------------------------------ -----\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 10\n", + "Jobid: None\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: sync_20201005090726.xml.gz\n", + "Results: None\n" + ] + } + ], + "source": [ + "job3 = Gaia.launch_job(query3)\n", + "print(job3)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_idradecpmrapmdecparallaxparallax_errorradial_velocity
degdegmas / yrmas / yrmasmaskm / s
int64float64float64float64float64float64float64float64
4467710915011802624269.96809693073471.14290850381608822.0233280236600626-2.56924278755102660.423614712455579130.470352406647465--
4467706551328679552270.0331645898811.0565747323689927-3.414829591355289-3.84372158574957370.9228882317345880.927008559859825--
4467712255037300096270.77247179230470.6581664892880896-3.5620173752896025-6.595792323153987-2.6691794652939310.9719742773203504--
4467735001181761792270.36286062483080.89470793235991242.13070799264892050.88267277109107120.61173991630863980.509812721702093--
4467737101421916672270.51108346614440.98062259101601810.17532366511560785-5.113270239706202-0.398182248461270040.7549581886719651--
4467707547757327488269.887462805949271.0212759940136962-2.6382230817672987-3.7077765320492870.77414123010542090.3022057897812064--
4467732355491087744270.67307907024910.9197224705139885-2.2735991502653037-11.864952855984358-0.34644464948403540.4937921513912002--
4467717099766944512270.576671731208250.726277659009568-3.4598362614808367-4.6014268933659210.054439551111340510.8867339293525688--
4467719058265781248270.72480529715140.8205551921782785-3.255079498426542-9.2492850691110850.37339439174903430.390952370410666--
4467722326741572352270.874312918885040.85955659758691580.106963983518598261.2035993780158853-0.118509434328643730.1660452431882023--
" + ], + "text/plain": [ + "\n", + " source_id ra ... parallax_error radial_velocity\n", + " deg ... mas km / s \n", + " int64 float64 ... float64 float64 \n", + "------------------- ------------------ ... ------------------ ---------------\n", + "4467710915011802624 269.9680969307347 ... 0.470352406647465 --\n", + "4467706551328679552 270.033164589881 ... 0.927008559859825 --\n", + "4467712255037300096 270.7724717923047 ... 0.9719742773203504 --\n", + "4467735001181761792 270.3628606248308 ... 0.509812721702093 --\n", + "4467737101421916672 270.5110834661444 ... 0.7549581886719651 --\n", + "4467707547757327488 269.88746280594927 ... 0.3022057897812064 --\n", + "4467732355491087744 270.6730790702491 ... 0.4937921513912002 --\n", + "4467717099766944512 270.57667173120825 ... 0.8867339293525688 --\n", + "4467719058265781248 270.7248052971514 ... 0.390952370410666 --\n", + "4467722326741572352 270.87431291888504 ... 0.1660452431882023 --" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results3 = job3.get_results()\n", + "results3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good so far." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input.\n", + "\n", + "Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "query4_base = \"\"\"SELECT TOP 10\n", + "{columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < {max_parallax} AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT TOP 10\n", + "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 0.5 AND \n", + "bp_rp BETWEEN -0.75 AND 2\n", + "\n" + ] + } + ], + "source": [ + "# Solution\n", + "\n", + "query4 = query4_base.format(columns=columns,\n", + " max_parallax=0.5)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. \n", + "\n", + "The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions.\n", + "\n", + "A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section.\n", + "\n", + "What do you think of this choice? Are there alternatives you prefer?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "This notebook demonstrates the following steps:\n", + "\n", + "1. Making a connection to the Gaia server,\n", + "\n", + "2. Exploring information about the database and the tables it contains,\n", + "\n", + "3. Writing a query and sending it to the server, and finally\n", + "\n", + "4. Downloading the response from the server as an Astropy `Table`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* If you can't download an entire dataset (or it's not practical) use queries to select the data you need.\n", + "\n", + "* Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data.\n", + "\n", + "* If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously.\n", + "\n", + "* ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should.\n", + "\n", + "* ADQL and SQL don't require you to break a query into multiple lines, but you should.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect.\n", + "\n", + "There are a few things you can do to mitigate these problems:\n", + "\n", + "* Make each section of the notebook self-contained. Try not to use the same variable name in more than one section.\n", + "\n", + "* Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.py b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.py new file mode 100644 index 0000000..4d0736c --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/01_query.py @@ -0,0 +1,603 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Lesson 1 + +# ## Introduction +# +# This workshop is an introduction to tools and practices for working with astronomical data. Topics covered include: +# +# * Writing queries that select and download data from a database. +# +# * Using data stored in an Astropy `Table` or Pandas `DataFrame`. +# +# * Working with coordinates and other quantities with units. +# +# * Storing data in various formats. +# +# * Performing database join operations that combine data from multiple tables. +# +# * Visualizing data and preparing publication-quality figures. + +# As a running example, we will replicate part of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# As the abstract explains, "Using data from the Gaia second data release combined with Pan-STARRS photometry, we present a sample of highly-probable members of the longest cold stream in the Milky Way, GD-1." +# +# GD-1 is a [stellar stream](https://en.wikipedia.org/wiki/List_of_stellar_streams), which is "an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces." + +# [This article in *Science* magazine](https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter) explains some of the background, including the process that led to the paper and an discussion of the scientific implications: +# +# * "The streams are particularly useful for ... galactic archaeology --- rewinding the cosmic clock to reconstruct the assembly of the Milky Way." +# +# * "They also are being used as exquisitely sensitive scales to measure the galaxy's mass." +# +# * "... the streams are well-positioned to reveal the presence of dark matter ... because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature." + +# ## Prerequisites +# +# This workshop is meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python for this workshop. +# +# We assume that you have some familiarity with operating systems, like the ability to use a command-line interface. But we don't assume you have any prior experience with databases. +# +# We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we'll use. + +# ## Data +# +# The datasets we will work with are: +# +# * [Gaia](https://en.wikipedia.org/wiki/Gaia_(spacecraft)), which is "a space observatory of the European Space Agency (ESA), launched in 2013 ... designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision", and +# +# * [Pan-STARRS](https://en.wikipedia.org/wiki/Pan-STARRS), The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources. +# +# Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +# One of the goals of this workshop is to provide tools for working with large datasets. + +# ## Lesson 1 +# +# The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database: +# +# 1. First we'll make a connection to the Gaia server, +# +# 2. We will explore information about the database and the tables it contains, +# +# 3. We will write a query and send it to the server, and finally +# +# 4. We will download the response from the server. +# +# After completing this lesson, you should be able to +# +# * Compose a basic query in ADQL. +# +# * Use queries to explore a database and its tables. +# +# * Use queries to download data. +# +# * Develop, test, and debug a query incrementally. + +# ## Query Language +# +# In order to select data from a database, you have to compose a query, which is like a program written in a "query language". +# The query language we'll use is ADQL, which stands for "Astronomical Data Query Language". +# +# ADQL is a dialect of [SQL](https://en.wikipedia.org/wiki/SQL) (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL. +# +# [The reference manual for ADQL is here](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html). +# But you might find it easier to learn from [this ADQL Cookbook](https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook). + +# ## Installing libraries +# +# The library we'll use to get Gaia data is [Astroquery](https://astroquery.readthedocs.io/en/latest/). +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Connecting to Gaia +# +# Astroquery provides `Gaia`, which is an [object that represents a connection to the Gaia database](https://astroquery.readthedocs.io/en/latest/gaia/gaia.html). +# +# We can connect to the Gaia database like this: + +# In[2]: + + +from astroquery.gaia import Gaia + + +# #### Optional detail +# +# > Running this import statement has the effect of creating a [TAP+](http://www.ivoa.net/documents/TAP/) connection; TAP stands for "Table Access Protocol". It is a network protocol for sending queries to the database and getting back the results. We're not sure why it seems to create two connections. + +# ## Databases and Tables +# +# What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL: +# +# * A database is a collection of one or more named tables. +# +# * Each table is a 2-D array with one or more named columns of data. +# +# We can use `Gaia.load_tables` to get the names of the tables in the Gaia database. With the option `only_names=True`, it loads information about the tables, called the "metadata", not the data itself. + +# In[3]: + + +tables = Gaia.load_tables(only_names=True) + + +# In[4]: + + +for table in (tables): + print(table.get_qualified_name()) + + +# So that's a lot of tables. The ones we'll use are: +# +# * `gaiadr2.gaia_source`, which contains Gaia data from [data release 2](https://www.cosmos.esa.int/web/gaia/data-release-2), +# +# * `gaiadr2.panstarrs1_original_valid`, which contains the photometry data we'll use from PanSTARRS, and +# +# * `gaiadr2.panstarrs1_best_neighbour`, which we'll use to cross-match each star observed by Gaia with the same star observed by PanSTARRS. +# +# We can use `load_table` (not `load_tables`) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. + +# In[5]: + + +meta = Gaia.load_table('gaiadr2.gaia_source') +meta + + +# Jupyter shows that the result is an object of type `TapTableMeta`, but it does not display the contents. +# +# To see the metadata, we have to print the object. + +# In[6]: + + +print(meta) + + +# Notice one gotcha: in the list of table names, this table appears as `gaiadr2.gaiadr2.gaia_source`, but when we load the metadata, we refer to it as `gaiadr2.gaia_source`. +# +# **Exercise:** Go back and try +# +# ``` +# meta = Gaia.load_table('gaiadr2.gaiadr2.gaia_source') +# ``` +# +# What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out? + +# ## Columns +# +# The following loop prints the names of the columns in the table. + +# In[7]: + + +for column in meta.columns: + print(column.name) + + +# You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +# To find out what the columns mean, [read the documentation](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). +# +# If you want to know what can go wrong when you don't read the documentation, [you might like this article](https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness). + +# **Exercise:** One of the other tables we'll use is `gaiadr2.gaiadr2.panstarrs1_original_valid`. Use `load_table` to get the metadata for this table. How many columns are there and what are their names? +# +# Hint: Remember the gotcha we mentioned earlier. + +# In[8]: + + +# Solution + +meta2 = Gaia.load_table('gaiadr2.panstarrs1_original_valid') +print(meta2) + + +# In[9]: + + +# Solution + +for column in meta2.columns: + print(column.name) + + +# ## Writing queries +# +# By now you might be wondering how we actually download the data. With tables this big, you generally don't. Instead, you use queries to select only the data you want. +# +# A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL. +# +# Here's an example of an ADQL query. + +# In[10]: + + +query1 = """SELECT +TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source""" + + +# **Python note:** We use a [triple-quoted string](https://docs.python.org/3/tutorial/introduction.html#strings) here so we can include line breaks in the query, which makes it easier to read. +# +# The words in uppercase are ADQL keywords: +# +# * `SELECT` indicates that we are selecting data (as opposed to adding or modifying data). +# +# * `TOP` indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data. +# +# * `FROM` specifies which table we want data from. +# +# The third line is a list of column names, indicating which columns we want. +# +# In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case-sensitive. + +# To run this query, we use the `Gaia` object, which represents our connection to the Gaia database, and invoke `launch_job`: + +# In[11]: + + +job1 = Gaia.launch_job(query1) +job1 + + +# The result is an object that represents the job running on a Gaia server. +# +# If you print it, it displays metadata for the forthcoming table. + +# In[12]: + + +print(job1) + + +# Don't worry about `Results: None`. That does not actually mean there are no results. +# +# However, `Phase: COMPLETED` indicates that the job is complete, so we can get the results like this: + +# In[13]: + + +results1 = job1.get_results() +type(results1) + + +# **Optional detail:** Why is `table` repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It's like the Linnean name for gorilla, which is *Gorilla Gorilla Gorilla*. + +# The result is an [Astropy Table](https://docs.astropy.org/en/stable/table/), which is similar to a table in an SQL database except: +# +# * SQL databases are stored on disk drives, so they are persistent; that is, they "survive" even if you turn off the computer. An Astropy `Table` is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook). +# +# * SQL databases are designed to process queries. An Astropy `Table` can perform some query-like operations, like selecting columns and rows. But these operations use Python syntax, not SQL. +# +# Jupyter knows how to display the contents of a `Table`. + +# In[14]: + + +results1 + + +# Each column has a name, units, and a data type. +# +# For example, the units of `ra` and `dec` are degrees, and their data type is `float64`, which is a 64-bit floating-point number, used to store measurements with a fraction part. +# +# This information comes from the Gaia database, and has been stored in the Astropy `Table` by Astroquery. + +# **Exercise:** Read [the documentation of this table](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html) and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type? + +# ## Asynchronous queries +# +# `launch_job` asks the server to run the job "synchronously", which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run "asynchronously", which mean they might take longer to get started. +# +# If you are not sure how many rows a query will return, you can use the SQL command `COUNT` to find out how many rows are in the result without actually returning them. We'll see an example of this later. +# +# The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results. +# +# For anonymous users, files are kept for three days. +# +# As an example, let's try a query that's similar to `query1`, with two changes: +# +# * It selects the first 3000 rows, so it is bigger than we should run synchronously. +# +# * It uses a new keyword, `WHERE`. + +# In[15]: + + +query2 = """SELECT TOP 3000 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 +""" + + +# A `WHERE` clause indicates which rows we want; in this case, the query selects only rows "where" `parallax` is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We'll use this clause to exclude nearby stars that are unlikely to be part of GD-1. +# +# `WHERE` is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database. +# +# We use `launch_job_async` to submit an asynchronous query. + +# In[16]: + + +job2 = Gaia.launch_job_async(query2) +print(job2) + + +# And here are the results. + +# In[17]: + + +results2 = job2.get_results() +results2 + + +# You might notice that some values of `parallax` are negative. As [this FAQ explains](https://www.cosmos.esa.int/web/gaia/archive-tips#negative%20parallax), "Negative parallaxes are caused by errors in the observations." Negative parallaxes have "no physical meaning," but they can be a "useful diagnostic on the quality of the astrometric solution." +# +# Later we will see an example where we use `parallax` and `parallax_error` to identify stars where the distance estimate is likely to be inaccurate. + +# **Exercise:** The clauses in a query have to be in the right order. Go back and change the order of the clauses in `query2` and run it again. +# +# The query should fail, but notice that you don't get much useful debugging information. +# +# For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help: +# +# * Whenever possible, start with a working query, either an example you find online or a query you have used in the past. +# +# * Make small changes and test each change before you continue. +# +# * While you are debugging, use `TOP` to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. +# +# * Launching test queries synchronously might make them start faster, too. + +# ## Operators +# +# In a `WHERE` clause, you can use any of the [SQL comparison operators](https://www.w3schools.com/sql/sql_operators.asp): +# +# * `>`: greater than +# * `<`: less than +# * `>=`: greater than or equal +# * `<=`: less than or equal +# * `=`: equal +# * `!=` or `<>`: not equal +# +# Most of these are the same as Python, but some are not. In particular, notice that the equality operator is `=`, not `==`. +# Be careful to keep your Python out of your ADQL! +# +# You can combine comparisons using the logical operators: +# +# * AND: true if both comparisons are true +# * OR: true if either or both comparisons are true +# +# Finally, you can use `NOT` to invert the result of a comparison. + +# **Exercise:** [Read about SQL operators here](https://www.w3schools.com/sql/sql_operators.asp) and then modify the previous query to select rows where `bp_rp` is between `-0.75` and `2`. +# +# You can [read about this variable here](https://gea.esac.esa.int/archive/documentation/GDR2/Gaia_archive/chap_datamodel/sec_dm_main_tables/ssec_dm_gaia_source.html). + +# In[18]: + + +# Solution + +# This is what most people will probably do + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp > -0.75 AND bp_rp < 2 +""" + + +# In[19]: + + +# Solution + +# But if someone notices the BETWEEN operator, +# they might do this + +query = """SELECT TOP 10 +source_id, ref_epoch, ra, dec, parallax +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This [Hertzsprung-Russell diagram](https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram) shows the BP-RP color and luminosity of stars in the Gaia catalog. +# +# Selecting stars with `bp-rp` less than 2 excludes many [class M dwarf stars](https://xkcd.com/2360/), which are low temperature, low luminosity. A star like that at GD-1's distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + +# ## Cleaning up +# +# Asynchronous jobs have a `jobid`. + +# In[20]: + + +job1.jobid, job2.jobid + + +# Which you can use to remove the job from the server. + +# In[21]: + + +Gaia.remove_jobs([job2.jobid]) + + +# If you don't remove it job from the server, it will be removed eventually, so don't feel too bad if you don't clean up after yourself. + +# ## Formatting queries +# +# So far the queries have been string "literals", meaning that the entire string is part of the program. +# But writing queries yourself can be slow, repetitive, and error-prone. +# +# It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the [string `format` method](https://www.w3schools.com/python/ref_string_format.asp). +# +# As an example, we'll divide the previous query into two parts; a list of column names and a "base" for the query that contains everything except the column names. +# +# Here's the list of columns we'll select. + +# In[22]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# And here's the base; it's a string that contains at least one format specifier in curly brackets (braces). + +# In[23]: + + +query3_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 +""" + + +# This base query contains one format specifier, `{columns}`, which is a placeholder for the list of column names we will provide. +# +# To assemble the query, we invoke `format` on the base string and provide a keyword argument that assigns a value to `columns`. + +# In[24]: + + +query3 = query3_base.format(columns=columns) + + +# The result is a string with line breaks. If you display it, the line breaks appear as `\n`. + +# In[25]: + + +query3 + + +# But if you print it, the line breaks appear as... line breaks. + +# In[26]: + + +print(query3) + + +# Notice that the format specifier has been replaced with the value of `columns`. +# +# Let's run it and see if it works: + +# In[27]: + + +job3 = Gaia.launch_job(query3) +print(job3) + + +# In[28]: + + +results3 = job3.get_results() +results3 + + +# Good so far. + +# **Exercise:** This query always selects sources with `parallax` less than 1. But suppose you want to take that upper bound as an input. +# +# Modify `query3_base` to replace `1` with a format specifier like `{max_parallax}`. Now, when you call `format`, add a keyword argument that assigns a value to `max_parallax`, and confirm that the format specifier gets replaced with the value you provide. + +# In[29]: + + +# Solution + +query4_base = """SELECT TOP 10 +{columns} +FROM gaiadr2.gaia_source +WHERE parallax < {max_parallax} AND +bp_rp BETWEEN -0.75 AND 2 +""" + + +# In[30]: + + +# Solution + +query4 = query4_base.format(columns=columns, + max_parallax=0.5) +print(query) + + +# **Style note:** You might notice that the variable names in this notebook are numbered, like `query1`, `query2`, etc. +# +# The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it's less likely that you will get unexpected interactions. +# +# A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section. +# +# What do you think of this choice? Are there alternatives you prefer? + +# ## Summary +# +# This notebook demonstrates the following steps: +# +# 1. Making a connection to the Gaia server, +# +# 2. Exploring information about the database and the tables it contains, +# +# 3. Writing a query and sending it to the server, and finally +# +# 4. Downloading the response from the server as an Astropy `Table`. + +# ## Best practices +# +# * If you can't download an entire dataset (or it's not practical) use queries to select the data you need. +# +# * Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Use ADQL features like `TOP` and `COUNT` to test before you run a query that might return a lot of data. +# +# * If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn't seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously. +# +# * ADQL and SQL are not case-sensitive, so you don't have to capitalize the keywords, but you should. +# +# * ADQL and SQL don't require you to break a query into multiple lines, but you should. +# + +# Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don't have the values you expect. +# +# There are a few things you can do to mitigate these problems: +# +# * Make each section of the notebook self-contained. Try not to use the same variable name in more than one section. +# +# * Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase. diff --git a/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.ipynb b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.ipynb new file mode 100644 index 0000000..7707176 --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.ipynb @@ -0,0 +1,1966 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lesson 2\n", + "\n", + "This is the second in a series of lessons related to astronomy data.\n", + "\n", + "As a running example, we are replicating parts of the analysis in a recent paper, \"[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)\" by Adrian M. Price-Whelan and Ana Bonaca.\n", + "\n", + "In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server.\n", + "\n", + "In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with an example that does a \"cone search\"; that is, it selects stars that appear in a circular region of the sky.\n", + "\n", + "Then, to select stars in the vicinity of GD-1, we'll:\n", + "\n", + "* Use `Quantity` objects to represent measurements with units.\n", + "\n", + "* Use the `Gala` library to convert coordinates from one frame to another.\n", + "\n", + "* Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region.\n", + "\n", + "* Submit a query and download the results.\n", + "\n", + "* Store the results in a FITS file.\n", + "\n", + "After completing this lesson, you should be able to\n", + "\n", + "* Use Python string formatting to compose more complex ADQL queries.\n", + "\n", + "* Work with coordinates and other quantities that have units.\n", + "\n", + "* Download the results of a query and store them in a file." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing libraries\n", + "\n", + "If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use.\n", + "\n", + "If you are running this notebook on your own computer, you might have to install these libraries yourself. \n", + "\n", + "If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.\n", + "\n", + "TODO: Add a link to the instructions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a region" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the most common ways to restrict a query is to select stars in a particular region of the sky.\n", + "\n", + "For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects \"all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg).\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT \n", + "TOP 10 source_id\n", + "FROM gaiadr2.gaia_source\n", + "WHERE 1=CONTAINS(\n", + " POINT(ra, dec),\n", + " CIRCLE(266.41683, -29.00781, 0.08333333))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This query uses three keywords that are specific to ADQL (not SQL):\n", + "\n", + "* `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination.\n", + "\n", + "* `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees.\n", + "\n", + "* `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise.\n", + "\n", + "Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12).\n", + "\n", + "A query like this is called a cone search because it selects stars in a cone.\n", + "\n", + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=10\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
source_id
int64
4057468321929794432
4057468287575835392
4057482027171038976
4057470349160630656
4057470039924301696
4057469868125641984
4057468351995073024
4057469661959554560
4057470520960672640
4057470555320409600
" + ], + "text/plain": [ + "\n", + " source_id \n", + " int64 \n", + "-------------------\n", + "4057468321929794432\n", + "4057468287575835392\n", + "4057482027171038976\n", + "4057470349160630656\n", + "4057470039924301696\n", + "4057469868125641984\n", + "4057468351995073024\n", + "4057469661959554560\n", + "4057470520960672640\n", + "4057470555320409600" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from astroquery.gaia import Gaia\n", + "\n", + "job = Gaia.launch_job(query)\n", + "result = job.get_results()\n", + "result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be.\n", + "\n", + "An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them.\n", + "\n", + "In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting GD-1 Data\n", + "\n", + "From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Along the axis of right ascension ($\\phi_1$) the figure extends from -100 to 20 degrees.\n", + "\n", + "Along the axis of declination ($\\phi_2$) the figure extends from about -8 to 4 degrees.\n", + "\n", + "Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so\n", + "\n", + "* That would be difficult to work with,\n", + "\n", + "* As anonymous users, we are limited to 3 million rows in a single query, and\n", + "\n", + "* While we are developing and testing code, it will be faster to work with a smaller dataset.\n", + "\n", + "So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "But first we let's see how to represent quantities with units like degrees." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with coordinates\n", + "\n", + "Coordinates are physical quantities, which means that they have two parts, a value and a unit.\n", + "\n", + "For example, the coordinate $30^{\\circ}$ has value 30 and its units are degrees.\n", + "\n", + "Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure).\n", + "\n", + "Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters.\n", + "\n", + "To use Astropy units, we import them like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.units as u\n", + "\n", + "u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`u` is an object that contains most common units and all SI units.\n", + "\n", + "You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['A',\n", + " 'AA',\n", + " 'AB',\n", + " 'ABflux',\n", + " 'ABmag',\n", + " 'AU',\n", + " 'Angstrom',\n", + " 'B',\n", + " 'Ba',\n", + " 'Barye',\n", + " 'Bi',\n", + " 'Biot',\n", + " 'Bol',\n", + " 'Bq',\n", + " 'C',\n", + " 'Celsius',\n", + " 'Ci',\n", + " 'CompositeUnit',\n", + " 'D',\n", + " 'Da',\n", + " 'Dalton',\n", + " 'Debye',\n", + " 'Decibel',\n", + " 'DecibelUnit',\n", + " 'Dex',\n", + " 'DexUnit',\n", + " 'EA',\n", + " 'EAU',\n", + " 'EB',\n", + " 'EBa',\n", + " 'EC',\n", + " 'ED',\n", + " 'EF',\n", + " 'EG',\n", + " 'EGal',\n", + " 'EH',\n", + " 'EHz',\n", + " 'EJ',\n", + " 'EJy',\n", + " 'EK',\n", + " 'EL',\n", + " 'EN',\n", + " 'EOhm',\n", + " 'EP',\n", + " 'EPa',\n", + " 'ER',\n", + " 'ERy',\n", + " 'ES',\n", + " 'ESt',\n", + " 'ET',\n", + " 'EV',\n", + " 'EW',\n", + " 'EWb',\n", + " 'Ea',\n", + " 'Eadu',\n", + " 'Earcmin',\n", + " 'Earcsec',\n", + " 'Eau',\n", + " 'Eb',\n", + " 'Ebarn',\n", + " 'Ebeam',\n", + " 'Ebin',\n", + " 'Ebit',\n", + " 'Ebyte',\n", + " 'Ecd',\n", + " 'Echan',\n", + " 'Ecount',\n", + " 'Ect',\n", + " 'Ed',\n", + " 'Edeg',\n", + " 'Edyn',\n", + " 'EeV',\n", + " 'Eerg',\n", + " 'Eg',\n", + " 'Eh',\n", + " 'EiB',\n", + " 'Eib',\n", + " 'Eibit',\n", + " 'Eibyte',\n", + " 'Ek',\n", + " 'El',\n", + " 'Elm',\n", + " 'Elx',\n", + " 'Elyr',\n", + " 'Em',\n", + " 'Emag',\n", + " 'Emin',\n", + " 'Emol',\n", + " 'Eohm',\n", + " 'Epc',\n", + " 'Eph',\n", + " 'Ephoton',\n", + " 'Epix',\n", + " 'Epixel',\n", + " 'Erad',\n", + " 'Es',\n", + " 'Esr',\n", + " 'Eu',\n", + " 'Evox',\n", + " 'Evoxel',\n", + " 'Eyr',\n", + " 'F',\n", + " 'Farad',\n", + " 'Fr',\n", + " 'Franklin',\n", + " 'FunctionQuantity',\n", + " 'FunctionUnitBase',\n", + " 'G',\n", + " 'GA',\n", + " 'GAU',\n", + " 'GB',\n", + " 'GBa',\n", + " 'GC',\n", + " 'GD',\n", + " 'GF',\n", + " 'GG',\n", + " 'GGal',\n", + " 'GH',\n", + " 'GHz',\n", + " 'GJ',\n", + " 'GJy',\n", + " 'GK',\n", + " 'GL',\n", + " 'GN',\n", + " 'GOhm',\n", + " 'GP',\n", + " 'GPa',\n", + " 'GR',\n", + " 'GRy',\n", + " 'GS',\n", + " 'GSt',\n", + " 'GT',\n", + " 'GV',\n", + " 'GW',\n", + " 'GWb',\n", + " 'Ga',\n", + " 'Gadu',\n", + " 'Gal',\n", + " 'Garcmin',\n", + " 'Garcsec',\n", + " 'Gau',\n", + " 'Gauss',\n", + " 'Gb',\n", + " 'Gbarn',\n", + " 'Gbeam',\n", + " 'Gbin',\n", + " 'Gbit',\n", + " 'Gbyte',\n", + " 'Gcd',\n", + " 'Gchan',\n", + " 'Gcount',\n", + " 'Gct',\n", + " 'Gd',\n", + " 'Gdeg',\n", + " 'Gdyn',\n", + " 'GeV',\n", + " 'Gerg',\n", + " 'Gg',\n", + " 'Gh',\n", + " 'GiB',\n", + " 'Gib',\n", + " 'Gibit',\n", + " 'Gibyte',\n", + " 'Gk',\n", + " 'Gl',\n", + " 'Glm',\n", + " 'Glx',\n", + " 'Glyr',\n", + " 'Gm',\n", + " 'Gmag',\n", + " 'Gmin',\n", + " 'Gmol',\n", + " 'Gohm',\n", + " 'Gpc',\n", + " 'Gph',\n", + " 'Gphoton',\n", + " 'Gpix',\n", + " 'Gpixel',\n", + " 'Grad',\n", + " 'Gs',\n", + " 'Gsr',\n", + " 'Gu',\n", + " 'Gvox',\n", + " 'Gvoxel',\n", + " 'Gyr',\n", + " 'H',\n", + " 'Henry',\n", + " 'Hertz',\n", + " 'Hz',\n", + " 'IrreducibleUnit',\n", + " 'J',\n", + " 'Jansky',\n", + " 'Joule',\n", + " 'Jy',\n", + " 'K',\n", + " 'Kayser',\n", + " 'Kelvin',\n", + " 'KiB',\n", + " 'Kib',\n", + " 'Kibit',\n", + " 'Kibyte',\n", + " 'L',\n", + " 'L_bol',\n", + " 'L_sun',\n", + " 'LogQuantity',\n", + " 'LogUnit',\n", + " 'Lsun',\n", + " 'MA',\n", + " 'MAU',\n", + " 'MB',\n", + " 'MBa',\n", + " 'MC',\n", + " 'MD',\n", + " 'MF',\n", + " 'MG',\n", + " 'MGal',\n", + " 'MH',\n", + " 'MHz',\n", + " 'MJ',\n", + " 'MJy',\n", + " 'MK',\n", + " 'ML',\n", + " 'MN',\n", + " 'MOhm',\n", + " 'MP',\n", + " 'MPa',\n", + " 'MR',\n", + " 'MRy',\n", + " 'MS',\n", + " 'MSt',\n", + " 'MT',\n", + " 'MV',\n", + " 'MW',\n", + " 'MWb',\n", + " 'M_bol',\n", + " 'M_e',\n", + " 'M_earth',\n", + " 'M_jup',\n", + " 'M_jupiter',\n", + " 'M_p',\n", + " 'M_sun',\n", + " 'Ma',\n", + " 'Madu',\n", + " 'MagUnit',\n", + " 'Magnitude',\n", + " 'Marcmin',\n", + " 'Marcsec',\n", + " 'Mau',\n", + " 'Mb',\n", + " 'Mbarn',\n", + " 'Mbeam',\n", + " 'Mbin',\n", + " 'Mbit',\n", + " 'Mbyte',\n", + " 'Mcd',\n", + " 'Mchan',\n", + " 'Mcount',\n", + " 'Mct',\n", + " 'Md',\n", + " 'Mdeg',\n", + " 'Mdyn',\n", + " 'MeV',\n", + " 'Mearth',\n", + " 'Merg',\n", + " 'Mg',\n", + " 'Mh',\n", + " 'MiB',\n", + " 'Mib',\n", + " 'Mibit',\n", + " 'Mibyte',\n", + " 'Mjup',\n", + " 'Mjupiter',\n", + " 'Mk',\n", + " 'Ml',\n", + " 'Mlm',\n", + " 'Mlx',\n", + " 'Mlyr',\n", + " 'Mm',\n", + " 'Mmag',\n", + " 'Mmin',\n", + " 'Mmol',\n", + " 'Mohm',\n", + " 'Mpc',\n", + " 'Mph',\n", + " 'Mphoton',\n", + " 'Mpix',\n", + " 'Mpixel',\n", + " 'Mrad',\n", + " 'Ms',\n", + " 'Msr',\n", + " 'Msun',\n", + " 'Mu',\n", + " 'Mvox',\n", + " 'Mvoxel',\n", + " 'Myr',\n", + " 'N',\n", + " 'NamedUnit',\n", + " 'Newton',\n", + " 'Ohm',\n", + " 'P',\n", + " 'PA',\n", + " 'PAU',\n", + " 'PB',\n", + " 'PBa',\n", + " 'PC',\n", + " 'PD',\n", + " 'PF',\n", + " 'PG',\n", + " 'PGal',\n", + " 'PH',\n", + " 'PHz',\n", + " 'PJ',\n", + " 'PJy',\n", + " 'PK',\n", + " 'PL',\n", + " 'PN',\n", + " 'POhm',\n", + " 'PP',\n", + " 'PPa',\n", + " 'PR',\n", + " 'PRy',\n", + " 'PS',\n", + " 'PSt',\n", + " 'PT',\n", + " 'PV',\n", + " 'PW',\n", + " 'PWb',\n", + " 'Pa',\n", + " 'Padu',\n", + " 'Parcmin',\n", + " 'Parcsec',\n", + " 'Pascal',\n", + " 'Pau',\n", + " 'Pb',\n", + " 'Pbarn',\n", + " 'Pbeam',\n", + " 'Pbin',\n", + " 'Pbit',\n", + " 'Pbyte',\n", + " 'Pcd',\n", + " 'Pchan',\n", + " 'Pcount',\n", + " 'Pct',\n", + " 'Pd',\n", + " 'Pdeg',\n", + " 'Pdyn',\n", + " 'PeV',\n", + " 'Perg',\n", + " 'Pg',\n", + " 'Ph',\n", + " 'PiB',\n", + " 'Pib',\n", + " 'Pibit',\n", + " 'Pibyte',\n", + " 'Pk',\n", + " 'Pl',\n", + " 'Plm',\n", + " 'Plx',\n", + " 'Plyr',\n", + " 'Pm',\n", + " 'Pmag',\n", + " 'Pmin',\n", + " 'Pmol',\n", + " 'Pohm',\n", + " 'Ppc',\n", + " 'Pph',\n", + " 'Pphoton',\n", + " 'Ppix',\n", + " 'Ppixel',\n", + " 'Prad',\n", + " 'PrefixUnit',\n", + " 'Ps',\n", + " 'Psr',\n", + " 'Pu',\n", + " 'Pvox',\n", + " 'Pvoxel',\n", + " 'Pyr',\n", + " 'Quantity',\n", + " 'QuantityInfo',\n", + " 'QuantityInfoBase',\n", + " 'R',\n", + " 'R_earth',\n", + " 'R_jup',\n", + " 'R_jupiter',\n", + " 'R_sun',\n", + " 'Rayleigh',\n", + " 'Rearth',\n", + " 'Rjup',\n", + " 'Rjupiter',\n", + " 'Rsun',\n", + " 'Ry',\n", + " 'S',\n", + " 'ST',\n", + " 'STflux',\n", + " 'STmag',\n", + " 'Siemens',\n", + " 'SpecificTypeQuantity',\n", + " 'St',\n", + " 'Sun',\n", + " 'T',\n", + " 'TA',\n", + " 'TAU',\n", + " 'TB',\n", + " 'TBa',\n", + " 'TC',\n", + " 'TD',\n", + " 'TF',\n", + " 'TG',\n", + " 'TGal',\n", + " 'TH',\n", + " 'THz',\n", + " 'TJ',\n", + " 'TJy',\n", + " 'TK',\n", + " 'TL',\n", + " 'TN',\n", + " 'TOhm',\n", + " 'TP',\n", + " 'TPa',\n", + " 'TR',\n", + " 'TRy',\n", + " 'TS',\n", + " 'TSt',\n", + " 'TT',\n", + " 'TV',\n", + " 'TW',\n", + " 'TWb',\n", + " 'Ta',\n", + " 'Tadu',\n", + " 'Tarcmin',\n", + " 'Tarcsec',\n", + " 'Tau',\n", + " 'Tb',\n", + " 'Tbarn',\n", + " 'Tbeam',\n", + " 'Tbin',\n", + " 'Tbit',\n", + " 'Tbyte',\n", + " 'Tcd',\n", + " 'Tchan',\n", + " 'Tcount',\n", + " 'Tct',\n", + " 'Td',\n", + " 'Tdeg',\n", + " 'Tdyn',\n", + " 'TeV',\n", + " 'Terg',\n", + " 'Tesla',\n", + " 'Tg',\n", + " 'Th',\n", + " 'TiB',\n", + " 'Tib',\n", + " 'Tibit',\n", + " 'Tibyte',\n", + " 'Tk',\n", + " 'Tl',\n", + " 'Tlm',\n", + " 'Tlx',\n", + " 'Tlyr',\n", + " 'Tm',\n", + " 'Tmag',\n", + " 'Tmin',\n", + " 'Tmol',\n", + " 'Tohm',\n", + " 'Tpc',\n", + " 'Tph',\n", + " 'Tphoton',\n", + " 'Tpix',\n", + " 'Tpixel',\n", + " 'Trad',\n", + " 'Ts',\n", + " 'Tsr',\n", + " 'Tu',\n", + " 'Tvox',\n", + " 'Tvoxel',\n", + " 'Tyr',\n", + " 'Unit',\n", + " 'UnitBase',\n", + " 'UnitConversionError',\n", + " 'UnitTypeError',\n", + " 'UnitsError',\n", + " 'UnitsWarning',\n", + " 'UnrecognizedUnit',\n", + " 'V',\n", + " 'Volt',\n", + " 'W',\n", + " 'Watt',\n", + " 'Wb',\n", + " 'Weber',\n", + " 'YA',\n", + " 'YAU',\n", + " 'YB',\n", + " 'YBa',\n", + " 'YC',\n", + " 'YD',\n", + " 'YF',\n", + " 'YG',\n", + " 'YGal',\n", + " 'YH',\n", + " 'YHz',\n", + " 'YJ',\n", + " 'YJy',\n", + " 'YK',\n", + " 'YL',\n", + " 'YN',\n", + " 'YOhm',\n", + " 'YP',\n", + " 'YPa',\n", + " 'YR',\n", + " 'YRy',\n", + " 'YS',\n", + " 'YSt',\n", + " 'YT',\n", + " 'YV',\n", + " 'YW',\n", + " 'YWb',\n", + " 'Ya',\n", + " 'Yadu',\n", + " 'Yarcmin',\n", + " 'Yarcsec',\n", + " 'Yau',\n", + " 'Yb',\n", + " 'Ybarn',\n", + " 'Ybeam',\n", + " 'Ybin',\n", + " 'Ybit',\n", + " 'Ybyte',\n", + " 'Ycd',\n", + " 'Ychan',\n", + " 'Ycount',\n", + " 'Yct',\n", + " 'Yd',\n", + " 'Ydeg',\n", + " 'Ydyn',\n", + " 'YeV',\n", + " 'Yerg',\n", + " 'Yg',\n", + " 'Yh',\n", + " 'Yk',\n", + " 'Yl',\n", + " 'Ylm',\n", + " 'Ylx',\n", + " 'Ylyr',\n", + " 'Ym',\n", + " 'Ymag',\n", + " 'Ymin',\n", + " 'Ymol',\n", + " 'Yohm',\n", + " 'Ypc',\n", + " 'Yph',\n", + " 'Yphoton',\n", + " 'Ypix',\n", + " 'Ypixel',\n", + " 'Yrad',\n", + " 'Ys',\n", + " 'Ysr',\n", + " 'Yu',\n", + " 'Yvox',\n", + " 'Yvoxel',\n", + " 'Yyr',\n", + " 'ZA',\n", + " 'ZAU',\n", + " 'ZB',\n", + " 'ZBa',\n", + " 'ZC',\n", + " 'ZD',\n", + " 'ZF',\n", + " 'ZG',\n", + " 'ZGal',\n", + " 'ZH',\n", + " 'ZHz',\n", + " 'ZJ',\n", + " 'ZJy',\n", + " 'ZK',\n", + " 'ZL',\n", + " 'ZN',\n", + " 'ZOhm',\n", + " 'ZP',\n", + " 'ZPa',\n", + " 'ZR',\n", + " 'ZRy',\n", + " 'ZS',\n", + " 'ZSt',\n", + " 'ZT',\n", + " 'ZV',\n", + " 'ZW',\n", + " 'ZWb',\n", + " 'Za',\n", + " 'Zadu',\n", + " 'Zarcmin',\n", + " 'Zarcsec',\n", + " 'Zau',\n", + " 'Zb',\n", + " 'Zbarn',\n", + " 'Zbeam',\n", + " 'Zbin',\n", + " 'Zbit',\n", + " 'Zbyte',\n", + " 'Zcd',\n", + " 'Zchan',\n", + " 'Zcount',\n", + " 'Zct',\n", + " 'Zd',\n", + " 'Zdeg',\n", + " 'Zdyn',\n", + " 'ZeV',\n", + " 'Zerg',\n", + " 'Zg',\n", + " 'Zh',\n", + " 'Zk',\n", + " 'Zl',\n", + " 'Zlm',\n", + " 'Zlx',\n", + " 'Zlyr',\n", + " 'Zm',\n", + " 'Zmag',\n", + " 'Zmin',\n", + " 'Zmol',\n", + " 'Zohm',\n", + " 'Zpc',\n", + " 'Zph',\n", + " 'Zphoton',\n", + " 'Zpix',\n", + " 'Zpixel',\n", + " 'Zrad',\n", + " 'Zs',\n", + " 'Zsr',\n", + " 'Zu',\n", + " 'Zvox',\n", + " 'Zvoxel',\n", + " 'Zyr',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__path__',\n", + " '__spec__',\n", + " 'a',\n", + " 'aA',\n", + " 'aAU',\n", + " 'aB',\n", + " 'aBa',\n", + " 'aC',\n", + " 'aD',\n", + " 'aF',\n", + " 'aG',\n", + " 'aGal',\n", + " 'aH',\n", + " 'aHz',\n", + " 'aJ',\n", + " 'aJy',\n", + " 'aK',\n", + " 'aL',\n", + " 'aN',\n", + " 'aOhm',\n", + " 'aP',\n", + " 'aPa',\n", + " 'aR',\n", + " 'aRy',\n", + " 'aS',\n", + " 'aSt',\n", + " 'aT',\n", + " 'aV',\n", + " 'aW',\n", + " 'aWb',\n", + " 'aa',\n", + " 'aadu',\n", + " 'aarcmin',\n", + " 'aarcsec',\n", + " 'aau',\n", + " 'ab',\n", + " 'abA',\n", + " 'abC',\n", + " 'abampere',\n", + " 'abarn',\n", + " 'abcoulomb',\n", + " 'abeam',\n", + " 'abin',\n", + " 'abit',\n", + " 'abyte',\n", + " 'acd',\n", + " 'achan',\n", + " 'acount',\n", + " 'act',\n", + " 'ad',\n", + " 'add_enabled_equivalencies',\n", + " 'add_enabled_units',\n", + " 'adeg',\n", + " 'adu',\n", + " 'adyn',\n", + " 'aeV',\n", + " 'aerg',\n", + " 'ag',\n", + " 'ah',\n", + " 'ak',\n", + " 'al',\n", + " 'allclose',\n", + " 'alm',\n", + " 'alx',\n", + " 'alyr',\n", + " 'am',\n", + " 'amag',\n", + " 'amin',\n", + " 'amol',\n", + " 'amp',\n", + " 'ampere',\n", + " 'angstrom',\n", + " 'annum',\n", + " 'aohm',\n", + " 'apc',\n", + " 'aph',\n", + " 'aphoton',\n", + " 'apix',\n", + " 'apixel',\n", + " 'arad',\n", + " 'arcmin',\n", + " 'arcminute',\n", + " 'arcsec',\n", + " 'arcsecond',\n", + " 'asr',\n", + " 'astronomical_unit',\n", + " 'astrophys',\n", + " 'attoBarye',\n", + " 'attoDa',\n", + " 'attoDalton',\n", + " 'attoDebye',\n", + " 'attoFarad',\n", + " 'attoGauss',\n", + " 'attoHenry',\n", + " 'attoHertz',\n", + " 'attoJansky',\n", + " 'attoJoule',\n", + " 'attoKayser',\n", + " 'attoKelvin',\n", + " 'attoNewton',\n", + " 'attoOhm',\n", + " 'attoPascal',\n", + " 'attoRayleigh',\n", + " 'attoSiemens',\n", + " 'attoTesla',\n", + " 'attoVolt',\n", + " 'attoWatt',\n", + " 'attoWeber',\n", + " 'attoamp',\n", + " 'attoampere',\n", + " 'attoannum',\n", + " 'attoarcminute',\n", + " 'attoarcsecond',\n", + " 'attoastronomical_unit',\n", + " 'attobarn',\n", + " 'attobarye',\n", + " 'attobit',\n", + " 'attobyte',\n", + " 'attocandela',\n", + " 'attocoulomb',\n", + " 'attocount',\n", + " 'attoday',\n", + " 'attodebye',\n", + " 'attodegree',\n", + " 'attodyne',\n", + " 'attoelectronvolt',\n", + " 'attofarad',\n", + " 'attogal',\n", + " 'attogauss',\n", + " 'attogram',\n", + " 'attohenry',\n", + " 'attohertz',\n", + " 'attohour',\n", + " 'attohr',\n", + " 'attojansky',\n", + " 'attojoule',\n", + " 'attokayser',\n", + " 'attolightyear',\n", + " 'attoliter',\n", + " 'attolumen',\n", + " 'attolux',\n", + " 'attometer',\n", + " 'attominute',\n", + " 'attomole',\n", + " 'attonewton',\n", + " 'attoparsec',\n", + " 'attopascal',\n", + " 'attophoton',\n", + " 'attopixel',\n", + " 'attopoise',\n", + " 'attoradian',\n", + " 'attorayleigh',\n", + " 'attorydberg',\n", + " 'attosecond',\n", + " 'attosiemens',\n", + " 'attosteradian',\n", + " 'attostokes',\n", + " 'attotesla',\n", + " 'attovolt',\n", + " 'attovoxel',\n", + " 'attowatt',\n", + " 'attoweber',\n", + " 'attoyear',\n", + " 'au',\n", + " 'avox',\n", + " 'avoxel',\n", + " 'ayr',\n", + " 'b',\n", + " 'bar',\n", + " 'barn',\n", + " 'barye',\n", + " 'beam',\n", + " 'beam_angular_area',\n", + " 'becquerel',\n", + " 'bin',\n", + " 'binary_prefixes',\n", + " 'bit',\n", + " 'bol',\n", + " 'brightness_temperature',\n", + " 'byte',\n", + " 'cA',\n", + " 'cAU',\n", + " 'cB',\n", + " 'cBa',\n", + " 'cC',\n", + " 'cD',\n", + " 'cF',\n", + " 'cG',\n", + " 'cGal',\n", + " 'cH',\n", + " 'cHz',\n", + " 'cJ',\n", + " 'cJy',\n", + " 'cK',\n", + " 'cL',\n", + " 'cN',\n", + " 'cOhm',\n", + " 'cP',\n", + " 'cPa',\n", + " 'cR',\n", + " 'cRy',\n", + " 'cS',\n", + " 'cSt',\n", + " 'cT',\n", + " 'cV',\n", + " 'cW',\n", + " 'cWb',\n", + " 'ca',\n", + " 'cadu',\n", + " 'candela',\n", + " 'carcmin',\n", + " 'carcsec',\n", + " 'cau',\n", + " 'cb',\n", + " 'cbarn',\n", + " 'cbeam',\n", + " 'cbin',\n", + " 'cbit',\n", + " 'cbyte',\n", + " 'ccd',\n", + " 'cchan',\n", + " 'ccount',\n", + " 'cct',\n", + " 'cd',\n", + " 'cdeg',\n", + " 'cdyn',\n", + " 'ceV',\n", + " 'centiBarye',\n", + " 'centiDa',\n", + " 'centiDalton',\n", + " 'centiDebye',\n", + " 'centiFarad',\n", + " 'centiGauss',\n", + " 'centiHenry',\n", + " 'centiHertz',\n", + " 'centiJansky',\n", + " 'centiJoule',\n", + " 'centiKayser',\n", + " 'centiKelvin',\n", + " 'centiNewton',\n", + " 'centiOhm',\n", + " 'centiPascal',\n", + " 'centiRayleigh',\n", + " 'centiSiemens',\n", + " 'centiTesla',\n", + " 'centiVolt',\n", + " 'centiWatt',\n", + " 'centiWeber',\n", + " 'centiamp',\n", + " 'centiampere',\n", + " 'centiannum',\n", + " 'centiarcminute',\n", + " 'centiarcsecond',\n", + " 'centiastronomical_unit',\n", + " 'centibarn',\n", + " 'centibarye',\n", + " 'centibit',\n", + " 'centibyte',\n", + " 'centicandela',\n", + " 'centicoulomb',\n", + " 'centicount',\n", + " 'centiday',\n", + " 'centidebye',\n", + " 'centidegree',\n", + " 'centidyne',\n", + " 'centielectronvolt',\n", + " 'centifarad',\n", + " 'centigal',\n", + " 'centigauss',\n", + " 'centigram',\n", + " 'centihenry',\n", + " 'centihertz',\n", + " 'centihour',\n", + " 'centihr',\n", + " 'centijansky',\n", + " 'centijoule',\n", + " 'centikayser',\n", + " 'centilightyear',\n", + " 'centiliter',\n", + " 'centilumen',\n", + " 'centilux',\n", + " 'centimeter',\n", + " 'centiminute',\n", + " 'centimole',\n", + " 'centinewton',\n", + " 'centiparsec',\n", + " 'centipascal',\n", + " 'centiphoton',\n", + " 'centipixel',\n", + " 'centipoise',\n", + " 'centiradian',\n", + " 'centirayleigh',\n", + " 'centirydberg',\n", + " 'centisecond',\n", + " 'centisiemens',\n", + " 'centisteradian',\n", + " 'centistokes',\n", + " 'centitesla',\n", + " 'centivolt',\n", + " 'centivoxel',\n", + " 'centiwatt',\n", + " 'centiweber',\n", + " 'centiyear',\n", + " 'cerg',\n", + " 'cg',\n", + " 'cgs',\n", + " 'ch',\n", + " 'chan',\n", + " 'ck',\n", + " 'cl',\n", + " 'clm',\n", + " 'clx',\n", + " 'clyr',\n", + " 'cm',\n", + " 'cmag',\n", + " 'cmin',\n", + " 'cmol',\n", + " 'cohm',\n", + " 'core',\n", + " 'coulomb',\n", + " 'count',\n", + " 'cpc',\n", + " 'cph',\n", + " 'cphoton',\n", + " 'cpix',\n", + " 'cpixel',\n", + " 'crad',\n", + " 'cs',\n", + " 'csr',\n", + " 'ct',\n", + " 'cu',\n", + " 'curie',\n", + " 'cvox',\n", + " 'cvoxel',\n", + " 'cy',\n", + " 'cycle',\n", + " 'cyr',\n", + " 'd',\n", + " 'dA',\n", + " 'dAU',\n", + " 'dB',\n", + " 'dBa',\n", + " 'dC',\n", + " 'dD',\n", + " 'dF',\n", + " 'dG',\n", + " 'dGal',\n", + " 'dH',\n", + " 'dHz',\n", + " 'dJ',\n", + " 'dJy',\n", + " 'dK',\n", + " 'dL',\n", + " 'dN',\n", + " 'dOhm',\n", + " 'dP',\n", + " 'dPa',\n", + " 'dR',\n", + " 'dRy',\n", + " 'dS',\n", + " 'dSt',\n", + " 'dT',\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create a quantity, we multiply a value by a unit." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.units.quantity.Quantity" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord = 30 * u.deg\n", + "type(coord)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `Quantity` object.\n", + "\n", + "Jupyter knows how to display `Quantities` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$30 \\; \\mathrm{{}^{\\circ}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a rectangle\n", + "\n", + "Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination.\n", + "\n", + "We'll define variables to contain these limits." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_min = -55\n", + "phi1_max = -45\n", + "phi2_min = -8\n", + "phi2_max = 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To represent a rectangle, we'll use two lists of coordinates and multiply by their units." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg\n", + "phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. \n", + "\n", + "But they are in \"[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)\"\n", + "\n", + "In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gala.coordinates.gd1.GD1Koposov10" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gala.coordinates as gc\n", + "\n", + "corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect)\n", + "type(corners)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can display the result like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `transform_to` to convert to ICRS coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "astropy.coordinates.builtin_frames.icrs.ICRS" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "\n", + "corners_icrs = corners.transform_to(coord.ICRS)\n", + "type(corners_icrs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `ICRS` object." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "corners_icrs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a polygon\n", + "\n", + "In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example:\n", + "\n", + "```\n", + "\"\"\"\n", + "POLYGON(143.65, 20.98, \n", + " 134.46, 26.39, \n", + " 140.58, 34.85, \n", + " 150.16, 29.01)\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From that, we can select the coordinates `ra` and `dec`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146d16m31.1993s 19d15m42.8754s\n", + "135d25m17.902s 25d52m38.594s\n", + "141d36m09.5337s 34d18m17.3891s\n", + "152d49m00.1576s 27d08m10.0051s\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra, point.dec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146.27533313607782 19.261909820533692\n", + "135.42163944306296 25.87738722767213\n", + "141.60264825107333 34.304830296257144\n", + "152.81671044675923 27.136112541397996\n" + ] + } + ], + "source": [ + "for point in corners_icrs:\n", + " print(point.ra.value, point.dec.value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use string `format` to convert these numbers to strings." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['146.27533313607782, 19.261909820533692',\n", + " '135.42163944306296, 25.87738722767213',\n", + " '141.60264825107333, 34.304830296257144',\n", + " '152.81671044675923, 27.136112541397996']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_base = \"{point.ra.value}, {point.dec.value}\"\n", + "\n", + "t = [point_base.format(point=point)\n", + " for point in corners_icrs]\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a list of strings, which we can join into a single string using `join`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "point_list = ', '.join(t)\n", + "point_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that we invoke `join` on a string and pass the list as an argument.\n", + "\n", + "Before we can assemble the query, we need `columns` again (as we saw in the previous notebook)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the base for the query, with format specifiers for `columns` and `point_list`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "query_base = \"\"\"SELECT {columns}\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON({point_list}))\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "FROM gaiadr2.gaia_source\n", + "WHERE parallax < 1\n", + " AND bp_rp BETWEEN -0.75 AND 2 \n", + " AND 1 = CONTAINS(POINT(ra, dec), \n", + " POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996))\n", + "\n" + ] + } + ], + "source": [ + "query = query_base.format(columns=columns, \n", + " point_list=point_list)\n", + "print(query)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should take a minute to proof-read the query before we launch it.\n", + "\n", + "The result will be bigger than our previous queries, so it will take a little longer." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n", + "
\n", + " name dtype unit description n_bad \n", + "--------------- ------- -------- ------------------------------------------------------------------ ------\n", + " source_id int64 Unique source identifier (unique within a particular Data Release) 0\n", + " ra float64 deg Right ascension 0\n", + " dec float64 deg Declination 0\n", + " pmra float64 mas / yr Proper motion in right ascension direction 0\n", + " pmdec float64 mas / yr Proper motion in declination direction 0\n", + " parallax float64 mas Parallax 0\n", + " parallax_error float64 mas Standard error of parallax 0\n", + "radial_velocity float64 km / s Radial velocity 139374\n", + "Jobid: 1601903357321O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201005090917.vot\n", + "Results: None\n" + ] + } + ], + "source": [ + "job = Gaia.launch_job_async(query)\n", + "print(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "140340" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = job.get_results()\n", + "len(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are more than 100,000 stars in this polygon, but that's a manageable size to work with." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving results\n", + "\n", + "This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it.\n", + "\n", + "Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again.\n", + "\n", + "Astropy `Table` objects provide `write`, which writes the table to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_results.fits'\n", + "results.write(filename, overwrite=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table.\n", + "\n", + "If the file already exists, the `overwrite` argument causes it to be overwritten.\n", + "\n", + "To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 8.6M Oct 5 09:09 gd1_results.fits\r\n" + ] + } + ], + "source": [ + "!ls -lh gd1_results.fits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file is about 8.6 MB." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file.\n", + "\n", + "In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Best practices\n", + "\n", + "* For measurements with units, use `Quantity` objects that represent units explicitly and check for errors.\n", + "\n", + "* Use the `format` function to compose queries; it is often faster and less error-prone.\n", + "\n", + "* Develop queries incrementally: start with something simple, test it, and add a little bit at a time.\n", + "\n", + "* Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.py b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.py new file mode 100644 index 0000000..7e0d02e --- /dev/null +++ b/_build/jupyter_execute/AstronomicalData/_build/jupyter_execute/02_coords.py @@ -0,0 +1,407 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Lesson 2 +# +# This is the second in a series of lessons related to astronomy data. +# +# As a running example, we are replicating parts of the analysis in a recent paper, "[Off the beaten path: Gaia reveals GD-1 stars outside of the main stream](https://arxiv.org/abs/1805.00425)" by Adrian M. Price-Whelan and Ana Bonaca. +# +# In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server. +# +# In this notebook, we'll pick up where we left off and write a query to select stars from the region of the sky where we expect GD-1 to be. + +# We'll start with an example that does a "cone search"; that is, it selects stars that appear in a circular region of the sky. +# +# Then, to select stars in the vicinity of GD-1, we'll: +# +# * Use `Quantity` objects to represent measurements with units. +# +# * Use the `Gala` library to convert coordinates from one frame to another. +# +# * Use the ADQL keywords `POLYGON`, `CONTAINS`, and `POINT` to select stars that fall within a polygonal region. +# +# * Submit a query and download the results. +# +# * Store the results in a FITS file. +# +# After completing this lesson, you should be able to +# +# * Use Python string formatting to compose more complex ADQL queries. +# +# * Work with coordinates and other quantities that have units. +# +# * Download the results of a query and store them in a file. + +# ## Installing libraries +# +# If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we'll use. +# +# If you are running this notebook on your own computer, you might have to install these libraries yourself. +# +# If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. +# +# TODO: Add a link to the instructions. +# + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# ## Selecting a region + +# One of the most common ways to restrict a query is to select stars in a particular region of the sky. +# +# For example, here's a query from the [Gaia archive documentation](https://gea.esac.esa.int/archive-help/adql/examples/index.html) that selects "all the objects ... in a circular region centered at (266.41683, -29.00781) with a search radius of 5 arcmin (0.08333 deg)." + +# In[2]: + + +query = """ +SELECT +TOP 10 source_id +FROM gaiadr2.gaia_source +WHERE 1=CONTAINS( + POINT(ra, dec), + CIRCLE(266.41683, -29.00781, 0.08333333)) +""" + + +# This query uses three keywords that are specific to ADQL (not SQL): +# +# * `POINT`: a location in [ICRS coordinates](https://en.wikipedia.org/wiki/International_Celestial_Reference_System), specified in degrees of right ascension and declination. +# +# * `CIRCLE`: a circle where the first two values are the coordinates of the center and the third is the radius in degrees. +# +# * `CONTAINS`: a function that returns `1` if a `POINT` is contained in a shape and `0` otherwise. +# +# Here is the [documentation of `CONTAINS`](http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html#tth_sEc4.2.12). +# +# A query like this is called a cone search because it selects stars in a cone. +# +# Here's how we run it. + +# In[3]: + + +from astroquery.gaia import Gaia + +job = Gaia.launch_job(query) +result = job.get_results() +result + + +# **Exercise:** When you are debugging queries like this, you can use `TOP` to limit the size of the results, but then you still don't know how big the results will be. +# +# An alternative is to use `COUNT`, which asks for the number of rows that would be selected, but it does not return them. +# +# In the previous query, replace `TOP 10 source_id` with `COUNT(source_id)` and run the query again. How many stars has Gaia identified in the cone we searched? + +# ## Getting GD-1 Data +# +# From the Price-Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD-1: +# +# + +# Along the axis of right ascension ($\phi_1$) the figure extends from -100 to 20 degrees. +# +# Along the axis of declination ($\phi_2$) the figure extends from about -8 to 4 degrees. +# +# Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so +# +# * That would be difficult to work with, +# +# * As anonymous users, we are limited to 3 million rows in a single query, and +# +# * While we are developing and testing code, it will be faster to work with a smaller dataset. +# +# So we'll start by selecting stars in a smaller rectangle, from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# But first we let's see how to represent quantities with units like degrees. + +# ## Working with coordinates +# +# Coordinates are physical quantities, which means that they have two parts, a value and a unit. +# +# For example, the coordinate $30^{\circ}$ has value 30 and its units are degrees. +# +# Until recently, most scientific computation was done with values only; units were left out of the program altogether, [often with disastrous results](https://en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure). +# +# Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters. +# +# To use Astropy units, we import them like this: + +# In[4]: + + +import astropy.units as u + +u + + +# `u` is an object that contains most common units and all SI units. +# +# You can use `dir` to list them, but you should also [read the documentation](https://docs.astropy.org/en/stable/units/). + +# In[5]: + + +dir(u) + + +# To create a quantity, we multiply a value by a unit. + +# In[6]: + + +coord = 30 * u.deg +type(coord) + + +# The result is a `Quantity` object. +# +# Jupyter knows how to display `Quantities` like this: + +# In[7]: + + +coord + + +# ## Selecting a rectangle +# +# Now we'll select a rectangle from -55 to -45 degrees right ascension and -8 to 4 degrees of declination. +# +# We'll define variables to contain these limits. + +# In[8]: + + +phi1_min = -55 +phi1_max = -45 +phi2_min = -8 +phi2_max = 4 + + +# To represent a rectangle, we'll use two lists of coordinates and multiply by their units. + +# In[9]: + + +phi1_rect = [phi1_min, phi1_min, phi1_max, phi1_max] * u.deg +phi2_rect = [phi2_min, phi2_max, phi2_max, phi2_min] * u.deg + + +# `phi1_rect` and `phi2_rect` represent the coordinates of the corners of a rectangle. +# +# But they are in "[a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream](https://gala-astro.readthedocs.io/en/latest/_modules/gala/coordinates/gd1.html)" +# +# In order to use them in a Gaia query, we have to convert them to [International Celestial Reference System](https://en.wikipedia.org/wiki/International_Celestial_Reference_System) (ICRS) coordinates. We can do that by storing the coordinates in a `GD1Koposov10` object provided by [Gala](https://gala-astro.readthedocs.io/en/latest/coordinates/). + +# In[10]: + + +import gala.coordinates as gc + +corners = gc.GD1Koposov10(phi1=phi1_rect, phi2=phi2_rect) +type(corners) + + +# We can display the result like this: + +# In[11]: + + +corners + + +# Now we can use `transform_to` to convert to ICRS coordinates. + +# In[12]: + + +import astropy.coordinates as coord + +corners_icrs = corners.transform_to(coord.ICRS) +type(corners_icrs) + + +# The result is an `ICRS` object. + +# In[13]: + + +corners_icrs + + +# Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon. + +# ## Selecting a polygon +# +# In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma-separated list of coordinates, as in this example: +# +# ``` +# """ +# POLYGON(143.65, 20.98, +# 134.46, 26.39, +# 140.58, 34.85, +# 150.16, 29.01) +# """ +# ``` + +# `corners_icrs` behaves like a list, so we can use a `for` loop to iterate through the points. + +# In[14]: + + +for point in corners_icrs: + print(point) + + +# From that, we can select the coordinates `ra` and `dec`: + +# In[15]: + + +for point in corners_icrs: + print(point.ra, point.dec) + + +# The results are quantities with units, but if we select the `value` part, we get a dimensionless floating-point number. + +# In[16]: + + +for point in corners_icrs: + print(point.ra.value, point.dec.value) + + +# We can use string `format` to convert these numbers to strings. + +# In[17]: + + +point_base = "{point.ra.value}, {point.dec.value}" + +t = [point_base.format(point=point) + for point in corners_icrs] +t + + +# The result is a list of strings, which we can join into a single string using `join`. + +# In[18]: + + +point_list = ', '.join(t) +point_list + + +# Notice that we invoke `join` on a string and pass the list as an argument. +# +# Before we can assemble the query, we need `columns` again (as we saw in the previous notebook). + +# In[19]: + + +columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity' + + +# Here's the base for the query, with format specifiers for `columns` and `point_list`. + +# In[20]: + + +query_base = """SELECT {columns} +FROM gaiadr2.gaia_source +WHERE parallax < 1 + AND bp_rp BETWEEN -0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON({point_list})) +""" + + +# And here's the result: + +# In[21]: + + +query = query_base.format(columns=columns, + point_list=point_list) +print(query) + + +# As always, we should take a minute to proof-read the query before we launch it. +# +# The result will be bigger than our previous queries, so it will take a little longer. + +# In[22]: + + +job = Gaia.launch_job_async(query) +print(job) + + +# Here are the results. + +# In[23]: + + +results = job.get_results() +len(results) + + +# There are more than 100,000 stars in this polygon, but that's a manageable size to work with. + +# ## Saving results +# +# This is the set of stars we'll work with in the next step. But since we have a substantial dataset now, this is a good time to save it. +# +# Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again. +# +# Astropy `Table` objects provide `write`, which writes the table to disk. + +# In[24]: + + +filename = 'gd1_results.fits' +results.write(filename, overwrite=True) + + +# Because the filename ends with `fits`, the table is written in the [FITS format](https://en.wikipedia.org/wiki/FITS), which preserves the metadata associated with the table. +# +# If the file already exists, the `overwrite` argument causes it to be overwritten. +# +# To see how big the file is, we can use `ls` with the `-lh` option, which prints information about the file including its size in human-readable form. + +# In[25]: + + +get_ipython().system('ls -lh gd1_results.fits') + + +# The file is about 8.6 MB. + +# ## Summary +# +# In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file. +# +# In the next notebook, we'll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD-1. + +# ## Best practices +# +# * For measurements with units, use `Quantity` objects that represent units explicitly and check for errors. +# +# * Use the `format` function to compose queries; it is often faster and less error-prone. +# +# * Develop queries incrementally: start with something simple, test it, and add a little bit at a time. +# +# * Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don't have to run the query again. diff --git a/_build/jupyter_execute/last_resort.ipynb b/_build/jupyter_execute/last_resort.ipynb new file mode 100644 index 0000000..bcd74a2 --- /dev/null +++ b/_build/jupyter_execute/last_resort.ipynb @@ -0,0 +1,72 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Notebook of Last Resort" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are not able to get everything installed that we need for the workshop, you have the option of running this notebook on Colab.\n", + "\n", + "Before you get started, you probably want to press the Save button!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# If we're running on Colab, install libraries\n", + "\n", + "import sys\n", + "IN_COLAB = 'google.colab' in sys.modules\n", + "\n", + "if IN_COLAB:\n", + " !pip install astroquery astro-gala pyia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That should be everything you need. Now you can type code and run it in the following cells." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/_build/jupyter_execute/last_resort.py b/_build/jupyter_execute/last_resort.py new file mode 100644 index 0000000..936977a --- /dev/null +++ b/_build/jupyter_execute/last_resort.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # The Notebook of Last Resort + +# If you are not able to get everything installed that we need for the workshop, you have the option of running this notebook on Colab. +# +# Before you get started, you probably want to press the Save button! + +# In[1]: + + +# If we're running on Colab, install libraries + +import sys +IN_COLAB = 'google.colab' in sys.modules + +if IN_COLAB: + get_ipython().system('pip install astroquery astro-gala pyia') + + +# That should be everything you need. Now you can type code and run it in the following cells. diff --git a/_build/jupyter_execute/test_setup.ipynb b/_build/jupyter_execute/test_setup.ipynb new file mode 100644 index 0000000..088e685 --- /dev/null +++ b/_build/jupyter_execute/test_setup.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Astronomical Data in Python\n", + "\n", + "This notebook imports the libraries we need for the workshop.\n", + "\n", + "If any of them are missing, you'll get an error message.\n", + "\n", + "If you don't get any error messages, you are all set." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from wget import download" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.path import Path\n", + "from matplotlib.patches import Polygon" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import astropy.coordinates as coord\n", + "import astropy.units as u\n", + "from astropy.table import Table" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import gala.coordinates as gc\n", + "from pyia import GaiaData" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: gea.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n", + "Created TAP+ (v1.2.1) - Connection:\n", + "\tHost: geadata.esac.esa.int\n", + "\tUse HTTPS: True\n", + "\tPort: 443\n", + "\tSSL Port: 443\n" + ] + } + ], + "source": [ + "# Note: running this import statement opens a connection\n", + "# to a Gaia server, so it will fail if you are not connected\n", + "# to the internet.\n", + "\n", + "from astroquery.gaia import Gaia" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "During the workshop, we might put some code on Slack and ask you to cut and paste it into the notebook.\n", + "\n", + "If you are on a Mac, you might encounter a problem: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/_build/jupyter_execute/test_setup.py b/_build/jupyter_execute/test_setup.py new file mode 100644 index 0000000..89b6bfb --- /dev/null +++ b/_build/jupyter_execute/test_setup.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Astronomical Data in Python +# +# This notebook imports the libraries we need for the workshop. +# +# If any of them are missing, you'll get an error message. +# +# If you don't get any error messages, you are all set. + +# In[7]: + + +from wget import download + + +# In[1]: + + +import pandas as pd +import numpy as np + + +# In[2]: + + +import matplotlib as mpl +import matplotlib.pyplot as plt +from matplotlib.path import Path +from matplotlib.patches import Polygon + + +# In[3]: + + +import astropy.coordinates as coord +import astropy.units as u +from astropy.table import Table + + +# In[4]: + + +import gala.coordinates as gc +from pyia import GaiaData + + +# In[5]: + + +# Note: running this import statement opens a connection +# to a Gaia server, so it will fail if you are not connected +# to the internet. + +from astroquery.gaia import Gaia + + +# During the workshop, we might put some code on Slack and ask you to cut and paste it into the notebook. +# +# If you are on a Mac, you might encounter a problem: + +# In[ ]: + + + + diff --git a/_build/latex/03_motion_28_0.png b/_build/latex/03_motion_28_0.png new file mode 100644 index 0000000..87f7d6a Binary files /dev/null and b/_build/latex/03_motion_28_0.png differ diff --git a/_build/latex/03_motion_45_0.png b/_build/latex/03_motion_45_0.png new file mode 100644 index 0000000..f3e40e9 Binary files /dev/null and b/_build/latex/03_motion_45_0.png differ diff --git a/_build/latex/03_motion_79_0.png b/_build/latex/03_motion_79_0.png new file mode 100644 index 0000000..f228c2e Binary files /dev/null and b/_build/latex/03_motion_79_0.png differ diff --git a/_build/latex/03_motion_81_0.png b/_build/latex/03_motion_81_0.png new file mode 100644 index 0000000..291881d Binary files /dev/null and b/_build/latex/03_motion_81_0.png differ diff --git a/_build/latex/03_motion_88_0.png b/_build/latex/03_motion_88_0.png new file mode 100644 index 0000000..5c20d6b Binary files /dev/null and b/_build/latex/03_motion_88_0.png differ diff --git a/_build/latex/03_motion_98_0.png b/_build/latex/03_motion_98_0.png new file mode 100644 index 0000000..0691cd2 Binary files /dev/null and b/_build/latex/03_motion_98_0.png differ diff --git a/_build/latex/04_select_11_0.png b/_build/latex/04_select_11_0.png new file mode 100644 index 0000000..82d2aab Binary files /dev/null and b/_build/latex/04_select_11_0.png differ diff --git a/_build/latex/04_select_13_0.png b/_build/latex/04_select_13_0.png new file mode 100644 index 0000000..6b70416 Binary files /dev/null and b/_build/latex/04_select_13_0.png differ diff --git a/_build/latex/04_select_25_0.png b/_build/latex/04_select_25_0.png new file mode 100644 index 0000000..da56759 Binary files /dev/null and b/_build/latex/04_select_25_0.png differ diff --git a/_build/latex/04_select_51_0.png b/_build/latex/04_select_51_0.png new file mode 100644 index 0000000..4bd920c Binary files /dev/null and b/_build/latex/04_select_51_0.png differ diff --git a/_build/latex/04_select_57_0.png b/_build/latex/04_select_57_0.png new file mode 100644 index 0000000..351b276 Binary files /dev/null and b/_build/latex/04_select_57_0.png differ diff --git a/_build/latex/05_join_9_0.png b/_build/latex/05_join_9_0.png new file mode 100644 index 0000000..eb6cc8c Binary files /dev/null and b/_build/latex/05_join_9_0.png differ diff --git a/_build/latex/06_photo_12_0.png b/_build/latex/06_photo_12_0.png new file mode 100644 index 0000000..f5b87d1 Binary files /dev/null and b/_build/latex/06_photo_12_0.png differ diff --git a/_build/latex/06_photo_23_0.png b/_build/latex/06_photo_23_0.png new file mode 100644 index 0000000..7a3e394 Binary files /dev/null and b/_build/latex/06_photo_23_0.png differ diff --git a/_build/latex/06_photo_61_0.png b/_build/latex/06_photo_61_0.png new file mode 100644 index 0000000..af7b03d Binary files /dev/null and b/_build/latex/06_photo_61_0.png differ diff --git a/_build/latex/06_photo_63_0.png b/_build/latex/06_photo_63_0.png new file mode 100644 index 0000000..a2d1875 Binary files /dev/null and b/_build/latex/06_photo_63_0.png differ diff --git a/_build/latex/07_plot_13_0.png b/_build/latex/07_plot_13_0.png new file mode 100644 index 0000000..bdd9b77 Binary files /dev/null and b/_build/latex/07_plot_13_0.png differ diff --git a/_build/latex/07_plot_50_0.png b/_build/latex/07_plot_50_0.png new file mode 100644 index 0000000..280dca5 Binary files /dev/null and b/_build/latex/07_plot_50_0.png differ diff --git a/_build/latex/07_plot_57_0.png b/_build/latex/07_plot_57_0.png new file mode 100644 index 0000000..02032fc Binary files /dev/null and b/_build/latex/07_plot_57_0.png differ diff --git a/_build/latex/07_plot_63_0.png b/_build/latex/07_plot_63_0.png new file mode 100644 index 0000000..aafb115 Binary files /dev/null and b/_build/latex/07_plot_63_0.png differ diff --git a/_build/latex/07_plot_69_0.png b/_build/latex/07_plot_69_0.png new file mode 100644 index 0000000..6f91966 Binary files /dev/null and b/_build/latex/07_plot_69_0.png differ diff --git a/_build/latex/07_plot_72_0.png b/_build/latex/07_plot_72_0.png new file mode 100644 index 0000000..830a165 Binary files /dev/null and b/_build/latex/07_plot_72_0.png differ diff --git a/_build/latex/LICRcyr2utf8.xdy b/_build/latex/LICRcyr2utf8.xdy new file mode 100644 index 0000000..a9ca1c8 --- /dev/null +++ b/_build/latex/LICRcyr2utf8.xdy @@ -0,0 +1,101 @@ +;; -*- coding: utf-8; mode: Lisp; -*- +;; style file for xindy +;; filename: LICRcyr2utf8.xdy +;; description: style file for xindy which maps back LaTeX Internal +;; Character Representation of Cyrillic to utf-8 +;; usage: for use with pdflatex produced .idx files. +;; Contributed by the Sphinx team, July 2018. +(merge-rule "\IeC {\'\CYRG }" "Ѓ" :string) +(merge-rule "\IeC {\'\CYRK }" "Ќ" :string) +(merge-rule "\IeC {\'\cyrg }" "ѓ" :string) +(merge-rule "\IeC {\'\cyrk }" "ќ" :string) +(merge-rule "\IeC {\CYRA }" "А" :string) +(merge-rule "\IeC {\CYRB }" "Б" :string) +(merge-rule "\IeC {\CYRC }" "Ц" :string) +(merge-rule "\IeC {\CYRCH }" "Ч" :string) +(merge-rule "\IeC {\CYRD }" "Д" :string) +(merge-rule "\IeC {\CYRDJE }" "Ђ" :string) +(merge-rule "\IeC {\CYRDZE }" "Ѕ" :string) +(merge-rule "\IeC {\CYRDZHE }" "Џ" :string) +(merge-rule "\IeC {\CYRE }" "Е" :string) +(merge-rule "\IeC {\CYREREV }" "Э" :string) +(merge-rule "\IeC {\CYRERY }" "Ы" :string) +(merge-rule "\IeC {\CYRF }" "Ф" :string) +(merge-rule "\IeC {\CYRG }" "Г" :string) +(merge-rule "\IeC {\CYRGUP }" "Ґ" :string) +(merge-rule "\IeC {\CYRH }" "Х" :string) +(merge-rule "\IeC {\CYRHRDSN }" "Ъ" :string) +(merge-rule "\IeC {\CYRI }" "И" :string) +(merge-rule "\IeC {\CYRIE }" "Є" :string) +(merge-rule "\IeC {\CYRII }" "І" :string) +(merge-rule "\IeC {\CYRISHRT }" "Й" :string) +(merge-rule "\IeC {\CYRJE }" "Ј" :string) +(merge-rule "\IeC {\CYRK }" "К" :string) +(merge-rule "\IeC {\CYRL }" "Л" :string) +(merge-rule "\IeC {\CYRLJE }" "Љ" :string) +(merge-rule "\IeC {\CYRM }" "М" :string) +(merge-rule "\IeC {\CYRN }" "Н" :string) +(merge-rule "\IeC {\CYRNJE }" "Њ" :string) +(merge-rule "\IeC {\CYRO }" "О" :string) +(merge-rule "\IeC {\CYRP }" "П" :string) +(merge-rule "\IeC {\CYRR }" "Р" :string) +(merge-rule "\IeC {\CYRS }" "С" :string) +(merge-rule "\IeC {\CYRSFTSN }" "Ь" :string) +(merge-rule "\IeC {\CYRSH }" "Ш" :string) +(merge-rule "\IeC {\CYRSHCH }" "Щ" :string) +(merge-rule "\IeC {\CYRT }" "Т" :string) +(merge-rule "\IeC {\CYRTSHE }" "Ћ" :string) +(merge-rule "\IeC {\CYRU }" "У" :string) +(merge-rule "\IeC {\CYRUSHRT }" "Ў" :string) +(merge-rule "\IeC {\CYRV }" "В" :string) +(merge-rule "\IeC {\CYRYA }" "Я" :string) +(merge-rule "\IeC {\CYRYI }" "Ї" :string) +(merge-rule "\IeC {\CYRYO }" "Ё" :string) +(merge-rule "\IeC {\CYRYU }" "Ю" :string) +(merge-rule "\IeC {\CYRZ }" "З" :string) +(merge-rule "\IeC {\CYRZH }" "Ж" :string) +(merge-rule "\IeC {\cyra }" "а" :string) +(merge-rule "\IeC {\cyrb }" "б" :string) +(merge-rule "\IeC {\cyrc }" "ц" :string) +(merge-rule "\IeC {\cyrch }" "ч" :string) +(merge-rule "\IeC {\cyrd }" "д" :string) +(merge-rule "\IeC {\cyrdje }" "ђ" :string) +(merge-rule "\IeC {\cyrdze }" "ѕ" :string) +(merge-rule "\IeC {\cyrdzhe }" "џ" :string) +(merge-rule "\IeC {\cyre }" "е" :string) +(merge-rule "\IeC {\cyrerev }" "э" :string) +(merge-rule "\IeC {\cyrery }" "ы" :string) +(merge-rule "\IeC {\cyrf }" "ф" :string) +(merge-rule "\IeC {\cyrg }" "г" :string) +(merge-rule "\IeC {\cyrgup }" "ґ" :string) +(merge-rule "\IeC {\cyrh }" "х" :string) +(merge-rule "\IeC {\cyrhrdsn }" "ъ" :string) +(merge-rule "\IeC {\cyri }" "и" :string) +(merge-rule "\IeC {\cyrie }" "є" :string) +(merge-rule "\IeC {\cyrii }" "і" :string) +(merge-rule "\IeC {\cyrishrt }" "й" :string) +(merge-rule "\IeC {\cyrje }" "ј" :string) +(merge-rule "\IeC {\cyrk }" "к" :string) +(merge-rule "\IeC {\cyrl }" "л" :string) +(merge-rule "\IeC {\cyrlje }" "љ" :string) +(merge-rule "\IeC {\cyrm }" "м" :string) +(merge-rule "\IeC {\cyrn }" "н" :string) +(merge-rule "\IeC {\cyrnje }" "њ" :string) +(merge-rule "\IeC {\cyro }" "о" :string) +(merge-rule "\IeC {\cyrp }" "п" :string) +(merge-rule "\IeC {\cyrr }" "р" :string) +(merge-rule "\IeC {\cyrs }" "с" :string) +(merge-rule "\IeC {\cyrsftsn }" "ь" :string) +(merge-rule "\IeC {\cyrsh }" "ш" :string) +(merge-rule "\IeC {\cyrshch }" "щ" :string) +(merge-rule "\IeC {\cyrt }" "т" :string) +(merge-rule "\IeC {\cyrtshe }" "ћ" :string) +(merge-rule "\IeC {\cyru }" "у" :string) +(merge-rule "\IeC {\cyrushrt }" "ў" :string) +(merge-rule "\IeC {\cyrv }" "в" :string) +(merge-rule "\IeC {\cyrya }" "я" :string) +(merge-rule "\IeC {\cyryi }" "ї" :string) +(merge-rule "\IeC {\cyryo }" "ё" :string) +(merge-rule "\IeC {\cyryu }" "ю" :string) +(merge-rule "\IeC {\cyrz }" "з" :string) +(merge-rule "\IeC {\cyrzh }" "ж" :string) diff --git a/_build/latex/LICRlatin2utf8.xdy b/_build/latex/LICRlatin2utf8.xdy new file mode 100644 index 0000000..31c80f9 --- /dev/null +++ b/_build/latex/LICRlatin2utf8.xdy @@ -0,0 +1,239 @@ +;; style file for xindy +;; filename: LICRlatin2utf8.xdy +;; description: style file for xindy which maps back LaTeX Internal +;; Character Representation of letters (as arising in .idx index +;; file) to UTF-8 encoding for correct sorting by xindy. +;; usage: for use with the pdflatex engine, +;; *not* for use with xelatex or lualatex. +;; +;; This is based upon xindy's distributed file tex/inputenc/utf8.xdy. +;; The modifications include: +;; +;; - Updates for compatibility with current LaTeX macro encoding. +;; +;; - Systematic usage of the \IeC {...} mark-up, because mark-up in +;; tex/inputenc/utf8.xdy was using it on seemingly random basis, and +;; Sphinx coercing of xindy usability for both Latin and Cyrillic scripts +;; with pdflatex requires its systematic presence here. +;; +;; - Support for some extra letters: Ÿ, Ŋ, ŋ, Œ, œ, IJ, ij, ȷ and ẞ. +;; +;; Indeed Sphinx needs to support for pdflatex engine all Unicode letters +;; available in TeX T1 font encoding. The above letters are found in +;; that encoding but not in the Latin1, 2, 3 charsets which are those +;; covered by original tex/inputenc/utf8.xdy. +;; +;; - There is a problem that ȷ is not supported out-of-the box by LaTeX +;; with inputenc, one must add explicitely +;; \DeclareUnicodeCharacter{0237}{\j} +;; to preamble of LaTeX document. However this character is not supported +;; by the TeX "times" font used by default by Sphinx for pdflatex engine. +;; +;; **Update**: since LaTeX 2018/12/01, the \j as well as \SS, \k{} and +;; \.{} need no extra user declaration anymore. +;; +;; - ẞ needs \DeclareUnicodeCharacter{1E9E}{\SS} (but ß needs no extra set-up). +;; +;; - U+02DB (˛) and U+02D9 (˙) are also not supported by inputenc +;; out of the box and require +;; \DeclareUnicodeCharacter{02DB}{\k{}} +;; \DeclareUnicodeCharacter{02D9}{\.{}} +;; to be added to preamble. +;; +;; - U+0127 ħ and U+0126 Ħ are absent from TeX T1+TS1 font encodings. +;; +;; - Characters Ŋ and ŋ are not supported by TeX font "times" used by +;; default by Sphinx for pdflatex engine but they are supported by +;; some TeX fonts, in particular by the default LaTeX font for T1 +;; encoding. +;; +;; - " and ~ must be escaped as ~" and resp. ~~ in xindy merge rules. +;; +;; Contributed by the Sphinx team, July 2018. +;; +;; See sphinx.xdy for superior figures, as they are escaped by LaTeX writer. +(merge-rule "\IeC {\textonesuperior }" "¹" :string) +(merge-rule "\IeC {\texttwosuperior }" "²" :string) +(merge-rule "\IeC {\textthreesuperior }" "³" :string) +(merge-rule "\IeC {\'a}" "á" :string) +(merge-rule "\IeC {\'A}" "Á" :string) +(merge-rule "\IeC {\`a}" "à" :string) +(merge-rule "\IeC {\`A}" "À" :string) +(merge-rule "\IeC {\^a}" "â" :string) +(merge-rule "\IeC {\^A}" "Â" :string) +(merge-rule "\IeC {\~"a}" "ä" :string) +(merge-rule "\IeC {\~"A}" "Ä" :string) +(merge-rule "\IeC {\~~a}" "ã" :string) +(merge-rule "\IeC {\~~A}" "Ã" :string) +(merge-rule "\IeC {\c c}" "ç" :string) +(merge-rule "\IeC {\c C}" "Ç" :string) +(merge-rule "\IeC {\'c}" "ć" :string) +(merge-rule "\IeC {\'C}" "Ć" :string) +(merge-rule "\IeC {\^c}" "ĉ" :string) +(merge-rule "\IeC {\^C}" "Ĉ" :string) +(merge-rule "\IeC {\.c}" "ċ" :string) +(merge-rule "\IeC {\.C}" "Ċ" :string) +(merge-rule "\IeC {\c s}" "ş" :string) +(merge-rule "\IeC {\c S}" "Ş" :string) +(merge-rule "\IeC {\c t}" "ţ" :string) +(merge-rule "\IeC {\c T}" "Ţ" :string) +(merge-rule "\IeC {\-}" "­" :string); soft hyphen +(merge-rule "\IeC {\textdiv }" "÷" :string) +(merge-rule "\IeC {\'e}" "é" :string) +(merge-rule "\IeC {\'E}" "É" :string) +(merge-rule "\IeC {\`e}" "è" :string) +(merge-rule "\IeC {\`E}" "È" :string) +(merge-rule "\IeC {\^e}" "ê" :string) +(merge-rule "\IeC {\^E}" "Ê" :string) +(merge-rule "\IeC {\~"e}" "ë" :string) +(merge-rule "\IeC {\~"E}" "Ë" :string) +(merge-rule "\IeC {\^g}" "ĝ" :string) +(merge-rule "\IeC {\^G}" "Ĝ" :string) +(merge-rule "\IeC {\.g}" "ġ" :string) +(merge-rule "\IeC {\.G}" "Ġ" :string) +(merge-rule "\IeC {\^h}" "ĥ" :string) +(merge-rule "\IeC {\^H}" "Ĥ" :string) +(merge-rule "\IeC {\H o}" "ő" :string) +(merge-rule "\IeC {\H O}" "Ő" :string) +(merge-rule "\IeC {\textacutedbl }" "˝" :string) +(merge-rule "\IeC {\H u}" "ű" :string) +(merge-rule "\IeC {\H U}" "Ű" :string) +(merge-rule "\IeC {\ae }" "æ" :string) +(merge-rule "\IeC {\AE }" "Æ" :string) +(merge-rule "\IeC {\textcopyright }" "©" :string) +(merge-rule "\IeC {\c \ }" "¸" :string) +(merge-rule "\IeC {\dh }" "ð" :string) +(merge-rule "\IeC {\DH }" "Ð" :string) +(merge-rule "\IeC {\dj }" "đ" :string) +(merge-rule "\IeC {\DJ }" "Đ" :string) +(merge-rule "\IeC {\guillemotleft }" "«" :string) +(merge-rule "\IeC {\guillemotright }" "»" :string) +(merge-rule "\IeC {\'\i }" "í" :string) +(merge-rule "\IeC {\`\i }" "ì" :string) +(merge-rule "\IeC {\^\i }" "î" :string) +(merge-rule "\IeC {\~"\i }" "ï" :string) +(merge-rule "\IeC {\i }" "ı" :string) +(merge-rule "\IeC {\^\j }" "ĵ" :string) +(merge-rule "\IeC {\k {}}" "˛" :string) +(merge-rule "\IeC {\l }" "ł" :string) +(merge-rule "\IeC {\L }" "Ł" :string) +(merge-rule "\IeC {\nobreakspace }" " " :string) +(merge-rule "\IeC {\o }" "ø" :string) +(merge-rule "\IeC {\O }" "Ø" :string) +(merge-rule "\IeC {\textsterling }" "£" :string) +(merge-rule "\IeC {\textparagraph }" "¶" :string) +(merge-rule "\IeC {\ss }" "ß" :string) +(merge-rule "\IeC {\textsection }" "§" :string) +(merge-rule "\IeC {\textbrokenbar }" "¦" :string) +(merge-rule "\IeC {\textcent }" "¢" :string) +(merge-rule "\IeC {\textcurrency }" "¤" :string) +(merge-rule "\IeC {\textdegree }" "°" :string) +(merge-rule "\IeC {\textexclamdown }" "¡" :string) +(merge-rule "\IeC {\texthbar }" "ħ" :string) +(merge-rule "\IeC {\textHbar }" "Ħ" :string) +(merge-rule "\IeC {\textonehalf }" "½" :string) +(merge-rule "\IeC {\textonequarter }" "¼" :string) +(merge-rule "\IeC {\textordfeminine }" "ª" :string) +(merge-rule "\IeC {\textordmasculine }" "º" :string) +(merge-rule "\IeC {\textperiodcentered }" "·" :string) +(merge-rule "\IeC {\textquestiondown }" "¿" :string) +(merge-rule "\IeC {\textregistered }" "®" :string) +(merge-rule "\IeC {\textthreequarters }" "¾" :string) +(merge-rule "\IeC {\textyen }" "¥" :string) +(merge-rule "\IeC {\th }" "þ" :string) +(merge-rule "\IeC {\TH }" "Þ" :string) +(merge-rule "\IeC {\'I}" "Í" :string) +(merge-rule "\IeC {\`I}" "Ì" :string) +(merge-rule "\IeC {\^I}" "Î" :string) +(merge-rule "\IeC {\~"I}" "Ï" :string) +(merge-rule "\IeC {\.I}" "İ" :string) +(merge-rule "\IeC {\^J}" "Ĵ" :string) +(merge-rule "\IeC {\k a}" "ą" :string) +(merge-rule "\IeC {\k A}" "Ą" :string) +(merge-rule "\IeC {\k e}" "ę" :string) +(merge-rule "\IeC {\k E}" "Ę" :string) +(merge-rule "\IeC {\'l}" "ĺ" :string) +(merge-rule "\IeC {\'L}" "Ĺ" :string) +(merge-rule "\IeC {\textlnot }" "¬" :string) +(merge-rule "\IeC {\textmu }" "µ" :string) +(merge-rule "\IeC {\'n}" "ń" :string) +(merge-rule "\IeC {\'N}" "Ń" :string) +(merge-rule "\IeC {\~~n}" "ñ" :string) +(merge-rule "\IeC {\~~N}" "Ñ" :string) +(merge-rule "\IeC {\'o}" "ó" :string) +(merge-rule "\IeC {\'O}" "Ó" :string) +(merge-rule "\IeC {\`o}" "ò" :string) +(merge-rule "\IeC {\`O}" "Ò" :string) +(merge-rule "\IeC {\^o}" "ô" :string) +(merge-rule "\IeC {\^O}" "Ô" :string) +(merge-rule "\IeC {\~"o}" "ö" :string) +(merge-rule "\IeC {\~"O}" "Ö" :string) +(merge-rule "\IeC {\~~o}" "õ" :string) +(merge-rule "\IeC {\~~O}" "Õ" :string) +(merge-rule "\IeC {\textpm }" "±" :string) +(merge-rule "\IeC {\r a}" "å" :string) +(merge-rule "\IeC {\r A}" "Å" :string) +(merge-rule "\IeC {\'r}" "ŕ" :string) +(merge-rule "\IeC {\'R}" "Ŕ" :string) +(merge-rule "\IeC {\r u}" "ů" :string) +(merge-rule "\IeC {\r U}" "Ů" :string) +(merge-rule "\IeC {\'s}" "ś" :string) +(merge-rule "\IeC {\'S}" "Ś" :string) +(merge-rule "\IeC {\^s}" "ŝ" :string) +(merge-rule "\IeC {\^S}" "Ŝ" :string) +(merge-rule "\IeC {\textasciidieresis }" "¨" :string) +(merge-rule "\IeC {\textasciimacron }" "¯" :string) +(merge-rule "\IeC {\.{}}" "˙" :string) +(merge-rule "\IeC {\textasciiacute }" "´" :string) +(merge-rule "\IeC {\texttimes }" "×" :string) +(merge-rule "\IeC {\u a}" "ă" :string) +(merge-rule "\IeC {\u A}" "Ă" :string) +(merge-rule "\IeC {\u g}" "ğ" :string) +(merge-rule "\IeC {\u G}" "Ğ" :string) +(merge-rule "\IeC {\textasciibreve }" "˘" :string) +(merge-rule "\IeC {\'u}" "ú" :string) +(merge-rule "\IeC {\'U}" "Ú" :string) +(merge-rule "\IeC {\`u}" "ù" :string) +(merge-rule "\IeC {\`U}" "Ù" :string) +(merge-rule "\IeC {\^u}" "û" :string) +(merge-rule "\IeC {\^U}" "Û" :string) +(merge-rule "\IeC {\~"u}" "ü" :string) +(merge-rule "\IeC {\~"U}" "Ü" :string) +(merge-rule "\IeC {\u u}" "ŭ" :string) +(merge-rule "\IeC {\u U}" "Ŭ" :string) +(merge-rule "\IeC {\v c}" "č" :string) +(merge-rule "\IeC {\v C}" "Č" :string) +(merge-rule "\IeC {\v d}" "ď" :string) +(merge-rule "\IeC {\v D}" "Ď" :string) +(merge-rule "\IeC {\v e}" "ě" :string) +(merge-rule "\IeC {\v E}" "Ě" :string) +(merge-rule "\IeC {\v l}" "ľ" :string) +(merge-rule "\IeC {\v L}" "Ľ" :string) +(merge-rule "\IeC {\v n}" "ň" :string) +(merge-rule "\IeC {\v N}" "Ň" :string) +(merge-rule "\IeC {\v r}" "ř" :string) +(merge-rule "\IeC {\v R}" "Ř" :string) +(merge-rule "\IeC {\v s}" "š" :string) +(merge-rule "\IeC {\v S}" "Š" :string) +(merge-rule "\IeC {\textasciicaron }" "ˇ" :string) +(merge-rule "\IeC {\v t}" "ť" :string) +(merge-rule "\IeC {\v T}" "Ť" :string) +(merge-rule "\IeC {\v z}" "ž" :string) +(merge-rule "\IeC {\v Z}" "Ž" :string) +(merge-rule "\IeC {\'y}" "ý" :string) +(merge-rule "\IeC {\'Y}" "Ý" :string) +(merge-rule "\IeC {\~"y}" "ÿ" :string) +(merge-rule "\IeC {\'z}" "ź" :string) +(merge-rule "\IeC {\'Z}" "Ź" :string) +(merge-rule "\IeC {\.z}" "ż" :string) +(merge-rule "\IeC {\.Z}" "Ż" :string) +;; letters not in Latin1, 2, 3 but available in TeX T1 font encoding +(merge-rule "\IeC {\~"Y}" "Ÿ" :string) +(merge-rule "\IeC {\NG }" "Ŋ" :string) +(merge-rule "\IeC {\ng }" "ŋ" :string) +(merge-rule "\IeC {\OE }" "Œ" :string) +(merge-rule "\IeC {\oe }" "œ" :string) +(merge-rule "\IeC {\IJ }" "IJ" :string) +(merge-rule "\IeC {\ij }" "ij" :string) +(merge-rule "\IeC {\j }" "ȷ" :string) +(merge-rule "\IeC {\SS }" "ẞ" :string) diff --git a/_build/latex/LatinRules.xdy b/_build/latex/LatinRules.xdy new file mode 100644 index 0000000..99f14a2 --- /dev/null +++ b/_build/latex/LatinRules.xdy @@ -0,0 +1,607 @@ +;; style file for xindy +;; filename: LatinRules.xdy +;; +;; It is based upon xindy's files lang/general/utf8.xdy and +;; lang/general/utf8-lang.xdy which implement +;; "a general sorting order for Western European languages" +;; +;; The aim for Sphinx is to be able to index in a Cyrillic document +;; also terms using the Latin alphabets, inclusive of letters +;; with diacritics. To this effect the xindy rules from lang/general +;; got manually re-coded to avoid collisions with the encoding +;; done by xindy for sorting words in Cyrillic languages, which was +;; observed not to use bytes with octal encoding 0o266 or higher. +;; +;; So here we use only 0o266 or higher bytes. +;; (Ŋ, ŋ, IJ, and ij are absent from +;; lang/general/utf8.xdy and not included here) +;; Contributed by the Sphinx team, 2018. + +(define-letter-group "A" :prefixes ("")) +(define-letter-group "B" :after "A" :prefixes ("")) +(define-letter-group "C" :after "B" :prefixes ("")) +(define-letter-group "D" :after "C" :prefixes ("")) +(define-letter-group "E" :after "D" :prefixes ("")) +(define-letter-group "F" :after "E" :prefixes ("")) +(define-letter-group "G" :after "F" :prefixes ("")) +(define-letter-group "H" :after "G" :prefixes ("")) +(define-letter-group "I" :after "H" :prefixes ("")) +(define-letter-group "J" :after "I" :prefixes ("")) +(define-letter-group "K" :after "J" :prefixes ("")) +(define-letter-group "L" :after "K" :prefixes ("")) +(define-letter-group "M" :after "L" :prefixes ("")) +(define-letter-group "N" :after "M" :prefixes ("")) +(define-letter-group "O" :after "N" :prefixes ("")) +(define-letter-group "P" :after "O" :prefixes ("")) +(define-letter-group "Q" :after "P" :prefixes ("")) +(define-letter-group "R" :after "Q" :prefixes ("")) +(define-letter-group "S" :after "R" :prefixes ("")) +(define-letter-group "T" :after "S" :prefixes ("")) +(define-letter-group "U" :after "T" :prefixes ("")) +(define-letter-group "V" :after "U" :prefixes ("")) +(define-letter-group "W" :after "V" :prefixes ("")) +(define-letter-group "X" :after "W" :prefixes ("")) +(define-letter-group "Y" :after "X" :prefixes ("")) +(define-letter-group "Z" :after "Y" :prefixes ("")) + +(define-rule-set "sphinx-xy-alphabetize" + + :rules (("À" "" :string) + ("Ă" "" :string) + ("â" "" :string) + ("Ä" "" :string) + ("à" "" :string) + ("Å" "" :string) + ("Ã" "" :string) + ("Á" "" :string) + ("á" "" :string) + ("ã" "" :string) + ("Â" "" :string) + ("ă" "" :string) + ("å" "" :string) + ("ą" "" :string) + ("ä" "" :string) + ("Ą" "" :string) + ("æ" "" :string) + ("Æ" "" :string) + ("ć" "" :string) + ("ĉ" "" :string) + ("ç" "" :string) + ("Č" "" :string) + ("č" "" :string) + ("Ĉ" "" :string) + ("Ç" "" :string) + ("Ć" "" :string) + ("ď" "" :string) + ("Đ" "" :string) + ("Ď" "" :string) + ("đ" "" :string) + ("ê" "" :string) + ("Ę" "" :string) + ("Ě" "" :string) + ("ë" "" :string) + ("ě" "" :string) + ("é" "" :string) + ("È" "" :string) + ("Ë" "" :string) + ("É" "" :string) + ("è" "" :string) + ("Ê" "" :string) + ("ę" "" :string) + ("ĝ" "" :string) + ("ğ" "" :string) + ("Ğ" "" :string) + ("Ĝ" "" :string) + ("ĥ" "" :string) + ("Ĥ" "" :string) + ("Ï" "" :string) + ("Í" "" :string) + ("ï" "" :string) + ("Î" "" :string) + ("î" "" :string) + ("ı" "" :string) + ("İ" "" :string) + ("í" "" :string) + ("Ì" "" :string) + ("ì" "" :string) + ("Ĵ" "" :string) + ("ĵ" "" :string) + ("ł" "" :string) + ("Ł" "" :string) + ("ľ" "" :string) + ("Ľ" "" :string) + ("ń" "" :string) + ("Ń" "" :string) + ("ñ" "" :string) + ("ň" "" :string) + ("Ñ" "" :string) + ("Ň" "" :string) + ("Õ" "" :string) + ("Ő" "" :string) + ("ó" "" :string) + ("ö" "" :string) + ("ô" "" :string) + ("ő" "" :string) + ("Ø" "" :string) + ("Ö" "" :string) + ("õ" "" :string) + ("Ô" "" :string) + ("ø" "" :string) + ("Ó" "" :string) + ("Ò" "" :string) + ("ò" "" :string) + ("œ" "ĺ" :string) + ("Œ" "ĺ" :string) + ("Ř" "" :string) + ("ř" "" :string) + ("Ŕ" "" :string) + ("ŕ" "" :string) + ("ŝ" "" :string) + ("Ś" "" :string) + ("ș" "" :string) + ("ş" "" :string) + ("Ŝ" "" :string) + ("ś" "" :string) + ("Ș" "" :string) + ("š" "" :string) + ("Ş" "" :string) + ("Š" "" :string) + ("ß" "" :string) + ("Ț" "" :string) + ("Ť" "" :string) + ("ț" "" :string) + ("ť" "" :string) + ("û" "" :string) + ("ŭ" "" :string) + ("ů" "" :string) + ("ű" "" :string) + ("ù" "" :string) + ("Ŭ" "" :string) + ("Ù" "" :string) + ("Ű" "" :string) + ("Ü" "" :string) + ("Ů" "" :string) + ("ú" "" :string) + ("Ú" "" :string) + ("Û" "" :string) + ("ü" "" :string) + ("ÿ" "" :string) + ("Ý" "" :string) + ("Ÿ" "" :string) + ("ý" "" :string) + ("Ż" "" :string) + ("Ž" "" :string) + ("Ź" "" :string) + ("ž" "" :string) + ("ż" "" :string) + ("ź" "" :string) + ("a" "" :string) + ("A" "" :string) + ("b" "" :string) + ("B" "" :string) + ("c" "" :string) + ("C" "" :string) + ("d" "" :string) + ("D" "" :string) + ("e" "" :string) + ("E" "" :string) + ("F" "" :string) + ("f" "" :string) + ("G" "" :string) + ("g" "" :string) + ("H" "" :string) + ("h" "" :string) + ("i" "" :string) + ("I" "" :string) + ("J" "" :string) + ("j" "" :string) + ("K" "" :string) + ("k" "" :string) + ("L" "" :string) + ("l" "" :string) + ("M" "" :string) + ("m" "" :string) + ("n" "" :string) + ("N" "" :string) + ("O" "" :string) + ("o" "" :string) + ("p" "" :string) + ("P" "" :string) + ("Q" "" :string) + ("q" "" :string) + ("r" "" :string) + ("R" "" :string) + ("S" "" :string) + ("s" "" :string) + ("t" "" :string) + ("T" "" :string) + ("u" "" :string) + ("U" "" :string) + ("v" "" :string) + ("V" "" :string) + ("W" "" :string) + ("w" "" :string) + ("x" "" :string) + ("X" "" :string) + ("Y" "" :string) + ("y" "" :string) + ("z" "" :string) + ("Z" "" :string) + )) + +(define-rule-set "sphinx-xy-resolve-diacritics" + + :rules (("Ĥ" "" :string) + ("ó" "" :string) + ("ľ" "" :string) + ("Ř" "" :string) + ("ĝ" "" :string) + ("ď" "" :string) + ("Ě" "" :string) + ("ĥ" "" :string) + ("Č" "" :string) + ("Ĵ" "" :string) + ("ě" "" :string) + ("ž" "" :string) + ("Ď" "" :string) + ("ř" "" :string) + ("Ž" "" :string) + ("ı" "" :string) + ("Ť" "" :string) + ("á" "" :string) + ("č" "" :string) + ("Á" "" :string) + ("ň" "" :string) + ("Š" "" :string) + ("Ň" "" :string) + ("ĵ" "" :string) + ("ť" "" :string) + ("Ó" "" :string) + ("ý" "" :string) + ("Ĝ" "" :string) + ("Ú" "" :string) + ("Ľ" "" :string) + ("š" "" :string) + ("Ý" "" :string) + ("ú" "" :string) + ("Ś" "" :string) + ("ć" "" :string) + ("Ł" "" :string) + ("ł" "" :string) + ("ń" "" :string) + ("À" "" :string) + ("Ź" "" :string) + ("à" "" :string) + ("Ń" "" :string) + ("Đ" "" :string) + ("ÿ" "" :string) + ("ś" "" :string) + ("Ğ" "" :string) + ("ğ" "" :string) + ("Ù" "" :string) + ("İ" "" :string) + ("đ" "" :string) + ("ù" "" :string) + ("Ț" "" :string) + ("é" "" :string) + ("ŕ" "" :string) + ("Ć" "" :string) + ("ț" "" :string) + ("ò" "" :string) + ("ź" "" :string) + ("Ò" "" :string) + ("Ÿ" "" :string) + ("Ŕ" "" :string) + ("É" "" :string) + ("ĉ" "" :string) + ("ô" "" :string) + ("Í" "" :string) + ("ŝ" "" :string) + ("Ż" "" :string) + ("Ă" "" :string) + ("Ŝ" "" :string) + ("ñ" "" :string) + ("ŭ" "" :string) + ("í" "" :string) + ("È" "" :string) + ("Ô" "" :string) + ("Ŭ" "" :string) + ("ż" "" :string) + ("Ñ" "" :string) + ("è" "" :string) + ("Ĉ" "" :string) + ("ă" "" :string) + ("â" "" :string) + ("û" "" :string) + ("ê" "" :string) + ("Õ" "" :string) + ("õ" "" :string) + ("ș" "" :string) + ("ç" "" :string) + ("Â" "" :string) + ("Ê" "" :string) + ("Û" "" :string) + ("Ç" "" :string) + ("ì" "" :string) + ("Ì" "" :string) + ("Ș" "" :string) + ("ö" "" :string) + ("Ö" "" :string) + ("ş" "" :string) + ("ů" "" :string) + ("ë" "" :string) + ("ã" "" :string) + ("î" "" :string) + ("Î" "" :string) + ("Ã" "" :string) + ("Ş" "" :string) + ("Ů" "" :string) + ("Ë" "" :string) + ("ï" "" :string) + ("Ő" "" :string) + ("Ï" "" :string) + ("Ę" "" :string) + ("ő" "" :string) + ("Ü" "" :string) + ("Å" "" :string) + ("ü" "" :string) + ("ę" "" :string) + ("å" "" :string) + ("Ä" "" :string) + ("ű" "" :string) + ("Ø" "" :string) + ("ø" "" :string) + ("Ű" "" :string) + ("ä" "" :string) + ("Ą" "" :string) + ("ą" "" :string) + ("œ" "" :string) + ("ß" "" :string) + ("Æ" "" :string) + ("Œ" "" :string) + ("æ" "" :string) + ("e" "" :string) + ("t" "" :string) + ("L" "" :string) + ("Y" "" :string) + ("J" "" :string) + ("a" "" :string) + ("p" "" :string) + ("u" "" :string) + ("j" "" :string) + ("b" "" :string) + ("G" "" :string) + ("U" "" :string) + ("F" "" :string) + ("H" "" :string) + ("i" "" :string) + ("z" "" :string) + ("c" "" :string) + ("l" "" :string) + ("A" "" :string) + ("Q" "" :string) + ("w" "" :string) + ("D" "" :string) + ("R" "" :string) + ("d" "" :string) + ("s" "" :string) + ("r" "" :string) + ("k" "" :string) + ("v" "" :string) + ("m" "" :string) + ("P" "" :string) + ("y" "" :string) + ("K" "" :string) + ("q" "" :string) + ("S" "" :string) + ("I" "" :string) + ("C" "" :string) + ("M" "" :string) + ("Z" "" :string) + ("T" "" :string) + ("W" "" :string) + ("B" "" :string) + ("h" "" :string) + ("x" "" :string) + ("X" "" :string) + ("f" "" :string) + ("E" "" :string) + ("V" "" :string) + ("N" "" :string) + ("O" "" :string) + ("o" "" :string) + ("g" "" :string) + ("n" "" :string) + )) + +(define-rule-set "sphinx-xy-resolve-case" + + :rules (("Ú" "8" :string) + ("Ÿ" "8" :string) + ("Ç" "8" :string) + ("Ĉ" "8" :string) + ("Ŕ" "8" :string) + ("Ľ" "8" :string) + ("Ů" "8" :string) + ("Ý" "8" :string) + ("É" "8" :string) + ("Ë" "8" :string) + ("Ș" "8" :string) + ("Ì" "8" :string) + ("Ê" "8" :string) + ("Ň" "8" :string) + ("Ą" "8" :string) + ("Š" "8" :string) + ("Û" "8" :string) + ("Ş" "8" :string) + ("Ć" "8" :string) + ("Ò" "8" :string) + ("Ĝ" "8" :string) + ("Ñ" "8" :string) + ("Ó" "8" :string) + ("Î" "8" :string) + ("Á" "8" :string) + ("Ã" "8" :string) + ("Ț" "8" :string) + ("Å" "8" :string) + ("Ğ" "8" :string) + ("Ü" "8" :string) + ("È" "8" :string) + ("Ô" "8" :string) + ("İ" "8" :string) + ("Ű" "8" :string) + ("Ù" "8" :string) + ("Ŭ" "8" :string) + ("Â" "8" :string) + ("Ť" "8" :string) + ("Ń" "8" :string) + ("Ď" "8" :string) + ("Ź" "8" :string) + ("Ž" "8" :string) + ("Đ" "8" :string) + ("Ŝ" "8" :string) + ("Č" "8" :string) + ("Ĵ" "8" :string) + ("Ö" "8" :string) + ("Ø" "8" :string) + ("Ż" "8" :string) + ("Ł" "8" :string) + ("Ă" "8" :string) + ("Ě" "8" :string) + ("Ő" "8" :string) + ("Õ" "8" :string) + ("Ę" "8" :string) + ("Ï" "8" :string) + ("À" "8" :string) + ("Ĥ" "8" :string) + ("Ä" "8" :string) + ("Ś" "8" :string) + ("Ř" "8" :string) + ("Í" "8" :string) + ("Œ" "89" :string) + ("Æ" "89" :string) + ("ì" "9" :string) + ("è" "9" :string) + ("ą" "9" :string) + ("š" "9" :string) + ("ú" "9" :string) + ("å" "9" :string) + ("ă" "9" :string) + ("ę" "9" :string) + ("ü" "9" :string) + ("ź" "9" :string) + ("ò" "9" :string) + ("ť" "9" :string) + ("ț" "9" :string) + ("ĵ" "9" :string) + ("ŕ" "9" :string) + ("ż" "9" :string) + ("ä" "9" :string) + ("ý" "9" :string) + ("ù" "9" :string) + ("á" "9" :string) + ("é" "9" :string) + ("č" "9" :string) + ("ň" "9" :string) + ("ś" "9" :string) + ("ø" "9" :string) + ("í" "9" :string) + ("đ" "9" :string) + ("ı" "9" :string) + ("ğ" "9" :string) + ("î" "9" :string) + ("ã" "9" :string) + ("à" "9" :string) + ("ř" "9" :string) + ("ő" "9" :string) + ("ů" "9" :string) + ("ș" "9" :string) + ("ÿ" "9" :string) + ("ë" "9" :string) + ("ŭ" "9" :string) + ("ç" "9" :string) + ("ű" "9" :string) + ("ñ" "9" :string) + ("õ" "9" :string) + ("ě" "9" :string) + ("ş" "9" :string) + ("ž" "9" :string) + ("ĝ" "9" :string) + ("ŝ" "9" :string) + ("ń" "9" :string) + ("û" "9" :string) + ("ł" "9" :string) + ("ď" "9" :string) + ("ĥ" "9" :string) + ("ê" "9" :string) + ("ô" "9" :string) + ("ĉ" "9" :string) + ("â" "9" :string) + ("ć" "9" :string) + ("ï" "9" :string) + ("ö" "9" :string) + ("ľ" "9" :string) + ("ó" "9" :string) + ("æ" "99" :string) + ("ß" "99" :string) + ("œ" "99" :string) + ("N" "8" :string) + ("V" "8" :string) + ("O" "8" :string) + ("X" "8" :string) + ("E" "8" :string) + ("P" "8" :string) + ("K" "8" :string) + ("T" "8" :string) + ("Z" "8" :string) + ("M" "8" :string) + ("C" "8" :string) + ("I" "8" :string) + ("S" "8" :string) + ("B" "8" :string) + ("W" "8" :string) + ("D" "8" :string) + ("R" "8" :string) + ("H" "8" :string) + ("F" "8" :string) + ("Q" "8" :string) + ("A" "8" :string) + ("G" "8" :string) + ("U" "8" :string) + ("J" "8" :string) + ("Y" "8" :string) + ("L" "8" :string) + ("o" "9" :string) + ("n" "9" :string) + ("g" "9" :string) + ("x" "9" :string) + ("f" "9" :string) + ("y" "9" :string) + ("q" "9" :string) + ("h" "9" :string) + ("w" "9" :string) + ("s" "9" :string) + ("d" "9" :string) + ("v" "9" :string) + ("k" "9" :string) + ("r" "9" :string) + ("m" "9" :string) + ("z" "9" :string) + ("c" "9" :string) + ("i" "9" :string) + ("l" "9" :string) + ("b" "9" :string) + ("j" "9" :string) + ("a" "9" :string) + ("p" "9" :string) + ("u" "9" :string) + ("t" "9" :string) + ("e" "9" :string) + )) + +(use-rule-set :run 0 + :rule-set ("sphinx-xy-alphabetize")) +(use-rule-set :run 1 + :rule-set ("sphinx-xy-resolve-diacritics")) +(use-rule-set :run 2 + :rule-set ("sphinx-xy-resolve-case")) diff --git a/_build/latex/Makefile b/_build/latex/Makefile new file mode 100644 index 0000000..e4653f2 --- /dev/null +++ b/_build/latex/Makefile @@ -0,0 +1,64 @@ +# Makefile for Sphinx LaTeX output + +ALLDOCS = $(basename $(wildcard *.tex)) +ALLPDF = $(addsuffix .pdf,$(ALLDOCS)) +ALLDVI = $(addsuffix .dvi,$(ALLDOCS)) +ALLXDV = +ALLPS = $(addsuffix .ps,$(ALLDOCS)) + +# Prefix for archive names +ARCHIVEPREFIX = +# Additional LaTeX options (passed via variables in latexmkrc/latexmkjarc file) +export LATEXOPTS ?= +# Additional latexmk options +LATEXMKOPTS ?= +# format: pdf or dvi (used only by archive targets) +FMT = pdf + +LATEX = latexmk -dvi +PDFLATEX = latexmk -pdf -dvi- -ps- + + +%.dvi: %.tex FORCE_MAKE + $(LATEX) $(LATEXMKOPTS) '$<' + +%.ps: %.dvi + dvips '$<' + +%.pdf: %.tex FORCE_MAKE + $(PDFLATEX) $(LATEXMKOPTS) '$<' + +all: $(ALLPDF) + +all-dvi: $(ALLDVI) + +all-ps: $(ALLPS) + +all-pdf: $(ALLPDF) + +zip: all-$(FMT) + mkdir $(ARCHIVEPREFIX)docs-$(FMT) + cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT) + zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT) + rm -r $(ARCHIVEPREFIX)docs-$(FMT) + +tar: all-$(FMT) + mkdir $(ARCHIVEPREFIX)docs-$(FMT) + cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT) + tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT) + rm -r $(ARCHIVEPREFIX)docs-$(FMT) + +gz: tar + gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz + +bz2: tar + bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +xz: tar + xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +clean: + rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) $(ALLXDV) *.fls *.fdb_latexmk + +.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz +.PHONY: FORCE_MAKE \ No newline at end of file diff --git a/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css b/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css new file mode 100644 index 0000000..fc14abc --- /dev/null +++ b/_build/latex/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css @@ -0,0 +1 @@ +details.dropdown .summary-title{padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.dropdown:hover{cursor:pointer}details.dropdown .summary-content{cursor:default}details.dropdown summary{list-style:none;padding:1em}details.dropdown summary .octicon.no-title{vertical-align:middle}details.dropdown[open] summary .octicon.no-title{visibility:hidden}details.dropdown summary::-webkit-details-marker{display:none}details.dropdown summary:focus{outline:none}details.dropdown summary:hover .summary-up svg,details.dropdown summary:hover .summary-down svg{opacity:1}details.dropdown .summary-up svg,details.dropdown .summary-down svg{display:block;opacity:.6}details.dropdown .summary-up,details.dropdown .summary-down{pointer-events:none;position:absolute;right:1em;top:.75em}details.dropdown[open] .summary-down{visibility:hidden}details.dropdown:not([open]) .summary-up{visibility:hidden}details.dropdown.fade-in[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out;animation:panels-fade-in .5s ease-in-out}details.dropdown.fade-in-slide-down[open] summary~*{-moz-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;-webkit-animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out;animation:panels-fade-in .5s ease-in-out, panels-slide-down .5s ease-in-out}@keyframes panels-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes panels-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.octicon{display:inline-block;fill:currentColor;vertical-align:text-top}.tabbed-content{box-shadow:0 -.0625rem var(--tabs-color-overline),0 .0625rem var(--tabs-color-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.tabbed-content>:first-child{margin-top:0 !important}.tabbed-content>:last-child{margin-bottom:0 !important}.tabbed-content>.tabbed-set{margin:0}.tabbed-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.tabbed-set>input{opacity:0;position:absolute}.tabbed-set>input:checked+label{border-color:var(--tabs-color-label-active);color:var(--tabs-color-label-active)}.tabbed-set>input:checked+label+.tabbed-content{display:block}.tabbed-set>input:focus+label{outline-style:auto}.tabbed-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.tabbed-set>label{border-bottom:.125rem solid transparent;color:var(--tabs-color-label-inactive);cursor:pointer;font-size:var(--tabs-size-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .tabbed-set>label:hover{color:var(--tabs-color-label-active)} diff --git a/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css b/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css new file mode 100644 index 0000000..adc6166 --- /dev/null +++ b/_build/latex/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css @@ -0,0 +1,7 @@ +:root { +--tabs-color-label-active: hsla(231, 99%, 66%, 1); +--tabs-color-label-inactive: rgba(178, 206, 245, 0.62); +--tabs-color-overline: rgb(207, 236, 238); +--tabs-color-underline: rgb(207, 236, 238); +--tabs-size-label: 1rem; +} \ No newline at end of file diff --git a/_build/latex/book.aux b/_build/latex/book.aux new file mode 100644 index 0000000..f572a9f --- /dev/null +++ b/_build/latex/book.aux @@ -0,0 +1,240 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\newlabel{README::doc}{{}{1}{}{section*.2}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Chapter 1}{5}{chapter.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{01_query:chapter-1}{{1}{5}{Chapter 1}{chapter.1}{}} +\newlabel{01_query::doc}{{1}{5}{Chapter 1}{chapter.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.1}Data}{5}{section.1.1}} +\newlabel{01_query:data}{{1.1}{5}{Data}{section.1.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.2}Prerequisites}{6}{section.1.2}} +\newlabel{01_query:prerequisites}{{1.2}{6}{Prerequisites}{section.1.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.3}Outline}{6}{section.1.3}} +\newlabel{01_query:outline}{{1.3}{6}{Outline}{section.1.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.4}Query Language}{6}{section.1.4}} +\newlabel{01_query:query-language}{{1.4}{6}{Query Language}{section.1.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.5}Installing libraries}{7}{section.1.5}} +\newlabel{01_query:installing-libraries}{{1.5}{7}{Installing libraries}{section.1.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.6}Connecting to Gaia}{7}{section.1.6}} +\newlabel{01_query:connecting-to-gaia}{{1.6}{7}{Connecting to Gaia}{section.1.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.7}Databases and Tables}{7}{section.1.7}} +\newlabel{01_query:databases-and-tables}{{1.7}{7}{Databases and Tables}{section.1.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.8}Columns}{10}{section.1.8}} +\newlabel{01_query:columns}{{1.8}{10}{Columns}{section.1.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.9}Writing queries}{13}{section.1.9}} +\newlabel{01_query:writing-queries}{{1.9}{13}{Writing queries}{section.1.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.10}Asynchronous queries}{15}{section.1.10}} +\newlabel{01_query:asynchronous-queries}{{1.10}{15}{Asynchronous queries}{section.1.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.11}Operators}{17}{section.1.11}} +\newlabel{01_query:operators}{{1.11}{17}{Operators}{section.1.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.12}Cleaning up}{18}{section.1.12}} +\newlabel{01_query:cleaning-up}{{1.12}{18}{Cleaning up}{section.1.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.13}Formatting queries}{18}{section.1.13}} +\newlabel{01_query:formatting-queries}{{1.13}{18}{Formatting queries}{section.1.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.14}Summary}{21}{section.1.14}} +\newlabel{01_query:summary}{{1.14}{21}{Summary}{section.1.14}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.15}Best practices}{21}{section.1.15}} +\newlabel{01_query:best-practices}{{1.15}{21}{Best practices}{section.1.15}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {2}Chapter 2}{23}{chapter.2}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{02_coords:chapter-2}{{2}{23}{Chapter 2}{chapter.2}{}} +\newlabel{02_coords::doc}{{2}{23}{Chapter 2}{chapter.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.1}Outline}{23}{section.2.1}} +\newlabel{02_coords:outline}{{2.1}{23}{Outline}{section.2.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.2}Installing libraries}{23}{section.2.2}} +\newlabel{02_coords:installing-libraries}{{2.2}{23}{Installing libraries}{section.2.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.3}Selecting a region}{24}{section.2.3}} +\newlabel{02_coords:selecting-a-region}{{2.3}{24}{Selecting a region}{section.2.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.4}Getting GD\sphinxhyphen {}1 Data}{25}{section.2.4}} +\newlabel{02_coords:getting-gd-1-data}{{2.4}{25}{Getting GD\sphinxhyphen {}1 Data}{section.2.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.5}Working with coordinates}{25}{section.2.5}} +\newlabel{02_coords:working-with-coordinates}{{2.5}{25}{Working with coordinates}{section.2.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.6}Selecting a rectangle}{44}{section.2.6}} +\newlabel{02_coords:selecting-a-rectangle}{{2.6}{44}{Selecting a rectangle}{section.2.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.7}Selecting a polygon}{45}{section.2.7}} +\newlabel{02_coords:selecting-a-polygon}{{2.7}{45}{Selecting a polygon}{section.2.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.8}Saving results}{47}{section.2.8}} +\newlabel{02_coords:saving-results}{{2.8}{47}{Saving results}{section.2.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.9}Summary}{48}{section.2.9}} +\newlabel{02_coords:summary}{{2.9}{48}{Summary}{section.2.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.10}Best practices}{48}{section.2.10}} +\newlabel{02_coords:best-practices}{{2.10}{48}{Best practices}{section.2.10}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {3}Chapter 3}{49}{chapter.3}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{03_motion:chapter-3}{{3}{49}{Chapter 3}{chapter.3}{}} +\newlabel{03_motion::doc}{{3}{49}{Chapter 3}{chapter.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}Outline}{49}{section.3.1}} +\newlabel{03_motion:outline}{{3.1}{49}{Outline}{section.3.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}Installing libraries}{50}{section.3.2}} +\newlabel{03_motion:installing-libraries}{{3.2}{50}{Installing libraries}{section.3.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}Reload the data}{50}{section.3.3}} +\newlabel{03_motion:reload-the-data}{{3.3}{50}{Reload the data}{section.3.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}Selecting rows and columns}{51}{section.3.4}} +\newlabel{03_motion:selecting-rows-and-columns}{{3.4}{51}{Selecting rows and columns}{section.3.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.5}Scatter plot}{53}{section.3.5}} +\newlabel{03_motion:scatter-plot}{{3.5}{53}{Scatter plot}{section.3.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.6}Transform back}{54}{section.3.6}} +\newlabel{03_motion:transform-back}{{3.6}{54}{Transform back}{section.3.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.7}Pandas DataFrame}{57}{section.3.7}} +\newlabel{03_motion:pandas-dataframe}{{3.7}{57}{Pandas DataFrame}{section.3.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.8}Plot proper motion}{58}{section.3.8}} +\newlabel{03_motion:plot-proper-motion}{{3.8}{58}{Plot proper motion}{section.3.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.9}Selecting the centerline}{58}{section.3.9}} +\newlabel{03_motion:selecting-the-centerline}{{3.9}{58}{Selecting the centerline}{section.3.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.10}Filtering based on proper motion}{61}{section.3.10}} +\newlabel{03_motion:filtering-based-on-proper-motion}{{3.10}{61}{Filtering based on proper motion}{section.3.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.11}Saving the DataFrame}{63}{section.3.11}} +\newlabel{03_motion:saving-the-dataframe}{{3.11}{63}{Saving the DataFrame}{section.3.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.12}Summary}{65}{section.3.12}} +\newlabel{03_motion:summary}{{3.12}{65}{Summary}{section.3.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.13}Best practices}{65}{section.3.13}} +\newlabel{03_motion:best-practices}{{3.13}{65}{Best practices}{section.3.13}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {4}Chapter 4}{67}{chapter.4}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{04_select:chapter-4}{{4}{67}{Chapter 4}{chapter.4}{}} +\newlabel{04_select::doc}{{4}{67}{Chapter 4}{chapter.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}Outline}{67}{section.4.1}} +\newlabel{04_select:outline}{{4.1}{67}{Outline}{section.4.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}Installing libraries}{67}{section.4.2}} +\newlabel{04_select:installing-libraries}{{4.2}{67}{Installing libraries}{section.4.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.3}Reload the data}{68}{section.4.3}} +\newlabel{04_select:reload-the-data}{{4.3}{68}{Reload the data}{section.4.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}Selection by proper motion}{68}{section.4.4}} +\newlabel{04_select:selection-by-proper-motion}{{4.4}{68}{Selection by proper motion}{section.4.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.5}Selecting the region}{73}{section.4.5}} +\newlabel{04_select:selecting-the-region}{{4.5}{73}{Selecting the region}{section.4.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.6}Assemble the query}{74}{section.4.6}} +\newlabel{04_select:assemble-the-query}{{4.6}{74}{Assemble the query}{section.4.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.7}Plotting one more time}{76}{section.4.7}} +\newlabel{04_select:plotting-one-more-time}{{4.7}{76}{Plotting one more time}{section.4.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.8}Saving the DataFrame}{78}{section.4.8}} +\newlabel{04_select:saving-the-dataframe}{{4.8}{78}{Saving the DataFrame}{section.4.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.9}CSV}{79}{section.4.9}} +\newlabel{04_select:csv}{{4.9}{79}{CSV}{section.4.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.10}Summary}{80}{section.4.10}} +\newlabel{04_select:summary}{{4.10}{80}{Summary}{section.4.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.11}Best practices}{80}{section.4.11}} +\newlabel{04_select:best-practices}{{4.11}{80}{Best practices}{section.4.11}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {5}Chapter 5}{81}{chapter.5}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{05_join:chapter-5}{{5}{81}{Chapter 5}{chapter.5}{}} +\newlabel{05_join::doc}{{5}{81}{Chapter 5}{chapter.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}Outline}{81}{section.5.1}} +\newlabel{05_join:outline}{{5.1}{81}{Outline}{section.5.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}Installing libraries}{81}{section.5.2}} +\newlabel{05_join:installing-libraries}{{5.2}{81}{Installing libraries}{section.5.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.3}Reloading the data}{82}{section.5.3}} +\newlabel{05_join:reloading-the-data}{{5.3}{82}{Reloading the data}{section.5.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.4}Getting photometry data}{83}{section.5.4}} +\newlabel{05_join:getting-photometry-data}{{5.4}{83}{Getting photometry data}{section.5.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.5}Preparing a table for uploading}{84}{section.5.5}} +\newlabel{05_join:preparing-a-table-for-uploading}{{5.5}{84}{Preparing a table for uploading}{section.5.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.6}Uploading a table}{86}{section.5.6}} +\newlabel{05_join:uploading-a-table}{{5.6}{86}{Uploading a table}{section.5.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.7}Joining with an uploaded table}{87}{section.5.7}} +\newlabel{05_join:joining-with-an-uploaded-table}{{5.7}{87}{Joining with an uploaded table}{section.5.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.8}Getting the photometry data}{89}{section.5.8}} +\newlabel{05_join:getting-the-photometry-data}{{5.8}{89}{Getting the photometry data}{section.5.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.9}Write the data}{92}{section.5.9}} +\newlabel{05_join:write-the-data}{{5.9}{92}{Write the data}{section.5.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.10}Summary}{92}{section.5.10}} +\newlabel{05_join:summary}{{5.10}{92}{Summary}{section.5.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.11}Best practice}{92}{section.5.11}} +\newlabel{05_join:best-practice}{{5.11}{92}{Best practice}{section.5.11}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {6}Chapter 6}{93}{chapter.6}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{06_photo:chapter-6}{{6}{93}{Chapter 6}{chapter.6}{}} +\newlabel{06_photo::doc}{{6}{93}{Chapter 6}{chapter.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.1}Outline}{93}{section.6.1}} +\newlabel{06_photo:outline}{{6.1}{93}{Outline}{section.6.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}Installing libraries}{93}{section.6.2}} +\newlabel{06_photo:installing-libraries}{{6.2}{93}{Installing libraries}{section.6.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.3}Reload the data}{94}{section.6.3}} +\newlabel{06_photo:reload-the-data}{{6.3}{94}{Reload the data}{section.6.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.4}Plotting photometry data}{94}{section.6.4}} +\newlabel{06_photo:plotting-photometry-data}{{6.4}{94}{Plotting photometry data}{section.6.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.5}Drawing a polygon}{96}{section.6.5}} +\newlabel{06_photo:drawing-a-polygon}{{6.5}{96}{Drawing a polygon}{section.6.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.6}Which points are in the polygon?}{98}{section.6.6}} +\newlabel{06_photo:which-points-are-in-the-polygon}{{6.6}{98}{Which points are in the polygon?}{section.6.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.7}Reloading the data}{98}{section.6.7}} +\newlabel{06_photo:reloading-the-data}{{6.7}{98}{Reloading the data}{section.6.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.8}Merging photometry data}{99}{section.6.8}} +\newlabel{06_photo:merging-photometry-data}{{6.8}{99}{Merging photometry data}{section.6.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.9}Missing data}{101}{section.6.9}} +\newlabel{06_photo:missing-data}{{6.9}{101}{Missing data}{section.6.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.10}Selecting based on photometry}{101}{section.6.10}} +\newlabel{06_photo:selecting-based-on-photometry}{{6.10}{101}{Selecting based on photometry}{section.6.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.11}Write the data}{103}{section.6.11}} +\newlabel{06_photo:write-the-data}{{6.11}{103}{Write the data}{section.6.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.12}Save the polygon}{104}{section.6.12}} +\newlabel{06_photo:save-the-polygon}{{6.12}{104}{Save the polygon}{section.6.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.13}Summary}{104}{section.6.13}} +\newlabel{06_photo:summary}{{6.13}{104}{Summary}{section.6.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.14}Best practices}{104}{section.6.14}} +\newlabel{06_photo:best-practices}{{6.14}{104}{Best practices}{section.6.14}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {7}Chapter 7}{107}{chapter.7}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{07_plot:chapter-7}{{7}{107}{Chapter 7}{chapter.7}{}} +\newlabel{07_plot::doc}{{7}{107}{Chapter 7}{chapter.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.1}Outline}{107}{section.7.1}} +\newlabel{07_plot:outline}{{7.1}{107}{Outline}{section.7.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.2}Installing libraries}{107}{section.7.2}} +\newlabel{07_plot:installing-libraries}{{7.2}{107}{Installing libraries}{section.7.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.3}Making Figures That Tell a Story}{108}{section.7.3}} +\newlabel{07_plot:making-figures-that-tell-a-story}{{7.3}{108}{Making Figures That Tell a Story}{section.7.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.4}Plotting GD\sphinxhyphen {}1}{109}{section.7.4}} +\newlabel{07_plot:plotting-gd-1}{{7.4}{109}{Plotting GD\sphinxhyphen {}1}{section.7.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.5}Annotations}{110}{section.7.5}} +\newlabel{07_plot:annotations}{{7.5}{110}{Annotations}{section.7.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.6}Customization}{110}{section.7.6}} +\newlabel{07_plot:customization}{{7.6}{110}{Customization}{section.7.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.7}rcParams}{111}{section.7.7}} +\newlabel{07_plot:rcparams}{{7.7}{111}{rcParams}{section.7.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.8}Style sheets}{111}{section.7.8}} +\newlabel{07_plot:style-sheets}{{7.8}{111}{Style sheets}{section.7.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.9}LaTeX fonts}{113}{section.7.9}} +\newlabel{07_plot:latex-fonts}{{7.9}{113}{LaTeX fonts}{section.7.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.10}Multiple panels}{113}{section.7.10}} +\newlabel{07_plot:multiple-panels}{{7.10}{113}{Multiple panels}{section.7.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.11}Upper right}{114}{section.7.11}} +\newlabel{07_plot:upper-right}{{7.11}{114}{Upper right}{section.7.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.12}Upper left}{116}{section.7.12}} +\newlabel{07_plot:upper-left}{{7.12}{116}{Upper left}{section.7.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.13}Lower right}{117}{section.7.13}} +\newlabel{07_plot:lower-right}{{7.13}{117}{Lower right}{section.7.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.14}Subplots}{119}{section.7.14}} +\newlabel{07_plot:subplots}{{7.14}{119}{Subplots}{section.7.14}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.15}Adjusting proportions}{120}{section.7.15}} +\newlabel{07_plot:adjusting-proportions}{{7.15}{120}{Adjusting proportions}{section.7.15}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.16}Summary}{121}{section.7.16}} +\newlabel{07_plot:summary}{{7.16}{121}{Summary}{section.7.16}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.17}Best practices}{122}{section.7.17}} +\newlabel{07_plot:best-practices}{{7.17}{122}{Best practices}{section.7.17}{}} diff --git a/_build/latex/book.fdb_latexmk b/_build/latex/book.fdb_latexmk new file mode 100644 index 0000000..d6bc1a0 --- /dev/null +++ b/_build/latex/book.fdb_latexmk @@ -0,0 +1,203 @@ +# Fdb version 3 +["makeindex book.idx"] 1604515967 "book.idx" "book.ind" "book" 1604516036 + "book.idx" 1604516034 0 d41d8cd98f00b204e9800998ecf8427e "" + (generated) + "book.ilg" + "book.ind" +["pdflatex"] 1604516034 "book.tex" "book.pdf" "book" 1604516036 + "/etc/texmf/web2c/texmf.cnf" 1566257850 475 c0e671620eb5563b2130f56340a5fde8 "" + "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" + "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1272929888 3287 e6b82fe08f5336d4d5ebc73fb1152e87 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm" 1136768653 1292 3059476c50a24578715759f22652f3d0 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm" 1136768653 1384 87406e4336af44af883a035f17f319d9 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8c.tfm" 1136768653 1268 8bd405dc5751cfed76cb6fb2db78cb50 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm" 1136768653 1292 bd42be2f344128bff6d35d98474adfe3 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm" 1136768653 1384 4632f5e54900a7dadbb83f555bc61e56 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8c.tfm" 1136768653 1344 dab2eee300fafcab19064bcc62d66daa "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8r.tfm" 1136768653 1544 4fb84cf2931ec523c2c6a08d939088ba "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8t.tfm" 1136768653 1596 04a657f277f0401ba37d66e716627ac4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm" 1136768653 4484 b828043cbd581d289d955903c1339981 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm" 1136768653 6628 34c39492c0adc454c1c199922bba8363 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm" 1136768653 6880 fe6c7967f27585f6fa9876f3af14edd2 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm" 1136768653 4712 9ef4d7d106579d4b136e1529e1a4533c "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm" 1136768653 7040 b2bd27e2bfe6f6948cbc3239cae7444f "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm" 1136768653 4524 6bce29db5bc272ba5f332261583fee9c "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm" 1136768653 6880 f19b8995b61c334d78fc734065f6b4d4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm" 1136768653 1352 fa28a7e6d323c65ce7d13d5342ff6be2 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm" 1136768653 4408 25b74d011a4c66b7f212c0cc3c90061b "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm" 1136768653 6672 e3ab9e37e925f3045c9005e6d1473d56 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm" 1136768653 4640 532ca3305aad10cc01d769f3f91f1029 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm" 1136768653 6944 94c55ad86e6ea2826f78ba2240d50df9 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1246382020 916 f87d7c45f9c908e672703b83b72241a3 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1246382020 924 9904cf1d39e9767e7a3622f2a125a565 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1246382020 928 2dc8d444221b7a635bb58038579b861a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1246382020 908 2921f8a10601f252058503cc6570e581 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1246382020 940 75ac932a52f80982a9f8ea75d03a34cf "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1246382020 940 228d6584342e91276bf566bcf9716b83 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm" 1136768653 992 662f679a0b3d2d53c1b94050fdaa3f50 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm" 1136768653 1524 4414a8315f39513458b80dfc63bff03a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1136768653 1288 655e228510b4c2a1abe905c368440826 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm" 1136768653 1292 296a67155bdbfc32aa9c636f21e91433 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1136768653 1124 6c73e740cf17375f03eec0ee63599741 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb" 1248133631 36299 5f9df58c2139e7edcf37c8fca4bd384d "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb" 1248133631 37912 77d683123f92148345f3fc36a38d9ab1 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1248133631 35752 024fb6c41858982481f6968b5fc26508 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb" 1248133631 32762 224316ccc9ad3ca0423a14971cfa7fc1 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb" 1248133631 32915 7bf7720c61a5b3a7ff25b0964421c9b6 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb" 1248133631 32716 08e384dc442464e7285e891af9f45947 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb" 1136849748 50493 4ed1f7e9eba8f1f3e1ec25195460190d "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb" 1136849748 45758 19968a0990191524e34e1994d4a31cb6 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrro8a.pfb" 1136849748 44404 ea3d9c0311883914133975dd62a9185c "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb" 1136849748 35941 f27169cc74234d5bd5e4cca5abafaabb "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb" 1136849748 44648 23115b2a545ebfe2c526c3ca99db8b95 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb" 1136849748 44729 811d6c62865936705a31c797a1d5dada "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb" 1136849748 46026 6dab18b61c907687b520c72847215a68 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb" 1136849748 45458 a3faba884469519614ca56ba5f6b1de1 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf" 1136768653 2184 5d20c8b00cd914e50251116c274e2d0b "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8c.vf" 1136768653 3552 6a7911d0b338a7c32cbfc3a9e985ccca "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf" 1136768653 2184 8475af1b9cfa983db5f46f5ed4b8f9f7 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrro8c.vf" 1136768653 3560 a297982f0907d62e9886d9e2666bf30b "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrro8t.vf" 1136768653 2280 d7cd083c724c9449e1d12731253966f7 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf" 1136768653 2340 0efed6a948c3c37d870e4e7ddb85c7c3 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf" 1136768653 2344 44ff28c9ef2fc97180cd884f900fee71 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf" 1136768653 2340 df9c920cc5688ebbf16a93f45ce7bdd3 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf" 1136768653 3556 8a9a6dcbcd146ef985683f677f4758a6 "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf" 1136768653 2348 91706c542228501c410c266421fbe30c "" + "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf" 1136768653 2328 6cd7df782b09b29cfc4d93e55b6b9a59 "" + "/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii" 1337017135 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf" 1367878877 6963 2e0cb3d93aa64508bdb0db58ae900d97 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def" 1456440043 50112 f44490c2cb959606ae206a8f9f3f70e2 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1456440043 13499 cfeb1da37929c37eb2a356b8abd63f74 "" + "/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty" 1284331290 1458 43ab4710dc82f3edeabecd0d099626b2 "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty" 1335995445 7612 c47308d923ec19888707b0f1792b326a "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty" 1303254447 8237 52810bdb4db2270e717422560a104aea "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty" 1338332114 189108 8b3553a56c83ff61acecb36b75d817e2 "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty" 1338332114 70752 45fa392800e07da61fa13446ad46b34d "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty" 1303254447 7324 11d14f318d865f420e692d4e6c9c18c3 "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty" 1303254447 7140 ece2cc23d9f20e1f53975ac167f42d3e "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty" 1335995445 6797 68c89f65e01894df882dd523d3fc0a8f "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty" 1335995445 8253 3bdedc8409aa5d290a2339be6f09af03 "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty" 1335995445 14040 8de9f47fabc4ca3bd69b6d795e32751c "" + "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty" 1335995445 18425 775b341047ce304520cc7c11ca41392e "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1456875012 2210 5c54ab129b848a5071554186d0168766 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1456875012 4160 c115536cf8d4ff25aa8c1c9bc4ecb79a "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1457045335 81928 0154df1c78a3ed620f585b10d4169d63 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1456875012 3867 f0be3ac1db1ca657e6117507a2a8d69b "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1456875012 2431 fe3078ec12fc30287f568596f8e0b948 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1454284088 3140 977eaf314c97ac67b8675753fb15f67f "" + "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1454284088 4572 634fcdf7e9df867d6d54f84638930408 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1454284088 5619 b1e63522e111972696a4db609d2b915f "" + "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1454284088 1940 c559b92ca91f1b2a0e60d836d4973f41 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu" 1454284088 2006 ed35f065eb949f203d1b6acd2bc1dcb8 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu" 1454284088 3183 76313d3584eba6cfdb7421aa6c69c2dd "" + "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1454284088 23767 af7a57d94b487b22fe88f921af1af1a4 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1454284088 9179 4cd3c5f593e63512893b8ac0123f1bd7 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def" 1454284088 9927 925418b4e40d02671b4728df100ec5ef "" + "/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu" 1454284088 10900 d4e94223e6330199a3b8e8abe87fe6e1 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1454284088 16155 3b0b2cc7c05e0ccf8c3ce5da21d4bccb "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd" 1454284088 2217 d274654bda1292013bdf48d5f720a495 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def" 1454284088 7767 aa88823823f5e767d79ea1166ab1ae74 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu" 1454284088 4921 a866f1ba34e2e7c3c432f93fbf17e82b "" + "/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def" 1454284088 7786 ea3c60942da10fcdcdb0bcbd1671de4e "" + "/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 "" + "/usr/share/texlive/texmf-dist/tex/latex/carlisle/remreset.sty" 1137109962 1096 6a75275ca00e32428c6f059d2f618ea7 "" + "/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1215522782 2883 427a7f7cb58418a0394dbd85c80668f6 "" + "/usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 "" + "/usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 "" + "/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty" 1438639395 41547 7860e623236f5f726a4099bbb7dd89fb "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1160175134 20521 e5d13d98d57bd53d4fed3aa61bd29c86 "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1274829816 45360 a0833d32f1b541964596b02870342d5a "" + "/usr/share/texlive/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d "" + "/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f "" + "/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 "" + "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1284422013 40502 e003406220954b0716679d7928aedd8a "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1454284088 14337 b66dff1d80f6c21e70858a2b3c2d327d "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1428932888 8125 557ab9f1bfa80d369fb45a914aa8a3b4 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1428932888 2594 d18d5e19aa8239cf867fa670c556d2e9 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1454284088 3980 0a268fbfda01e381fa95821ab13b6aee "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1352416072 51837 247bd8424b3835ef78c236dc1e0b4aef "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1352416072 231792 5fc9dc7dd667e773a766ecc63bba7f4b "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1351899753 12847 25b617d63258c4f72870c883493a3cf8 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1352416072 14005 155ac8fad2e5dd7c2cdd130fabd96633 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1352416072 122263 ec12fdd2044f1507e5ae92ee7a5bbfae "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg" 1254097189 802 7b8c8d72c24d795ed7720e4dfd29bff3 "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg" 1278958963 3563 d35e897cae3b8c6848f6677b73370b54 "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg" 1254097189 235 6031e5765137be07eed51a510b2b8fb7 "" + "/usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 "" + "/usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap" 1215649417 2370 3b1f71b14b974f07cef532db09ae9ee0 "" + "/usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap" 1215649417 3001 252c8ca42b06a22cb1a11c0e47790c6e "" + "/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty" 1303254447 3834 707ef09f31d7d2ea47ba89974755dfe0 "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty" 1303254447 12029 04d7fdf76e0464c23b5aa3a727952d7c "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty" 1335995445 7075 bd0c34fbf1ae8fd1debd2a554e41b2d5 "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1335995445 3720 f909bdc3fac6af505c1f55366aa4d44c "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty" 1335995445 22417 c74ff4af6a1aa2b65d1924020edbbe11 "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty" 1303254447 9581 1158efc648bc09d5064db5703c882159 "" + "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1285887441 2763 02a40cc5a32805c41d919cfbdba7e99a "" + "/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def" 1306616590 55368 3c8a0d99822330f2dfabc0dfb09ce897 "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd" 1137110629 798 d5895e9edc628f2be019beb2c0ec66df "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd" 1137110629 1488 9a55ac1cde6b4798a7f56844bb75a553 "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd" 1137110629 774 61d7da1e9f9e74989b196d147e623736 "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1pcr.fd" 1137110629 643 92c451bb86386a4e36a174603ddb5a13 "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd" 1137110629 619 96f56dc5d1ef1fe1121f1cfeec70ee0c "" + "/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b "" + "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1458167616 37376 24e8897adf60e0b032f1eda26754a8cf "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1454284088 13285 f3f53a6ffbd47ead3faa66a5e2be19b7 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1454284088 12083 80916157594a8e4354985aaefae4f367 "" + "/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e "" + "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" + "/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 "" + "/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 "" + "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1169481954 55224 a43bab84e0ac5e6efcaf9a98bde73a94 "" + "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1503343927 31343 93828589fb0cea665e553ee5a17ad2d4 "" + "/usr/share/texmf/web2c/texmf.cnf" 1503343927 31343 93828589fb0cea665e553ee5a17ad2d4 "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1600206330 1719496 6b7fd46a8676697f880ce137c2386d64 "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1584547848 853565 d268c773abb4805f67909c272f4c960e "" + "03_motion_28_0.png" 1604503096 9782 135e2c81e9d03f816874c3e93ad6c8b4 "" + "03_motion_45_0.png" 1604503096 115356 d240601d6d45df57a1b772ae0fb2adb6 "" + "03_motion_79_0.png" 1604503096 15658 d3a07e79abb1445d8b4de4cd06c6e48f "" + "03_motion_81_0.png" 1604503096 81181 716055955c6e3dbcd7eecba7f94adc7a "" + "03_motion_88_0.png" 1604503096 81640 4915b221307529ed062e78c06849ca6e "" + "03_motion_98_0.png" 1604503096 15355 0c844473b881b531ee78d795072b9970 "" + "04_select_11_0.png" 1604503096 83720 723fe109788f857ac23ebdcca3c43dc5 "" + "04_select_13_0.png" 1604503096 82339 5a250dc5d6975a127d5d6b304ec64b69 "" + "04_select_25_0.png" 1604503096 80696 9b8e0c7c39e1663401de28ab91220a14 "" + "04_select_51_0.png" 1604503096 36708 a2db546aa146492cbe3717a75dda1bcf "" + "04_select_57_0.png" 1604503096 40126 b85e93439162ff09874205bfae8f79dc "" + "05_join_9_0.png" 1604503097 32869 716e6a205ea1fe01c78b443c60687b81 "" + "06_photo_12_0.png" 1604503097 20526 f452f270180103eb0971636effcee453 "" + "06_photo_23_0.png" 1604503097 24092 fb19dc7012832f450b5cc278c7bdbc1e "" + "06_photo_61_0.png" 1604503097 32706 5560b0430a0c00d08aca34b9a8f24455 "" + "06_photo_63_0.png" 1604503097 10093 6dcb8dbf0e871a280006a1ef40806d2f "" + "07_plot_13_0.png" 1604503097 10598 7563183225943acd62bb3cb3c8bb2842 "" + "07_plot_50_0.png" 1604503097 153493 f8086324ceef7621cfcf8536d2275fd4 "" + "07_plot_57_0.png" 1604503097 63671 52610ffdb835324be17904718b4ddaf1 "" + "07_plot_63_0.png" 1604503097 35250 f9aaa364d659f62a626e6a4e44a51266 "" + "07_plot_69_0.png" 1604503097 143652 ed93d013c601154c60b83bfe20d75da0 "" + "07_plot_72_0.png" 1604503097 151315 2417121bd5f5f40d44c3095e6d1f46f7 "" + "book.aux" 1604516036 18896 8eff98ee4e402d0572a0d9476d50768e "" + "book.ind" 1604515967 0 d41d8cd98f00b204e9800998ecf8427e "makeindex book.idx" + "book.out" 1604516036 13201 126b950382961cfea7266e4ae07d15a9 "" + "book.tex" 1604516032 335936 32126259268f1cb63a5eb7e2d65214bf "" + "book.toc" 1604516036 7478 9399838d119dd72c7a7fc719b62a7512 "" + "footnotehyper-sphinx.sty" 1601912409 8888 1bbd7bdeae8c8bed1d10d551bddb1cc9 "" + "sphinx.sty" 1601912409 82155 76e1169ffc917b7b0448ff4c656bfb06 "" + "sphinxhighlight.sty" 1604516030 8137 38a433148fcb7611515a989ff1750dd5 "" + "sphinxmanual.cls" 1601912409 4236 124cd90deb92742b5d3922bfc2cd70c0 "" + "sphinxmessages.sty" 1604516032 745 3f5fcd6cdd7964ed608767954a8ced6f "" + "sphinxmulticell.sty" 1601912409 14606 0b6edc2b1a83546ed92026d1f6a311b5 "" + (generated) + "book.aux" + "book.pdf" + "book.out" + "book.log" + "book.toc" + "book.idx" diff --git a/_build/latex/book.fls b/_build/latex/book.fls new file mode 100644 index 0000000..1f09e7e --- /dev/null +++ b/_build/latex/book.fls @@ -0,0 +1,428 @@ +PWD /home/downey/AstronomicalData/_build/latex +INPUT /etc/texmf/web2c/texmf.cnf +INPUT /usr/share/texmf/web2c/texmf.cnf +INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf +INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt +INPUT book.tex +OUTPUT book.log +INPUT sphinxmanual.cls +INPUT sphinxmanual.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap +OUTPUT book.pdf +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty +INPUT sphinx.sty +INPUT sphinx.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu +INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT sphinxmulticell.sty +INPUT sphinxmulticell.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +INPUT footnotehyper-sphinx.sty +INPUT footnotehyper-sphinx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/remreset.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/remreset.sty +INPUT sphinxhighlight.sty +INPUT sphinxhighlight.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty +INPUT sphinxmessages.sty +INPUT sphinxmessages.sty +OUTPUT book.idx +INPUT book.aux +INPUT book.aux +OUTPUT book.aux +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +INPUT book.out +INPUT book.out +INPUT book.out +INPUT book.out +INPUT ./book.out +INPUT ./book.out +OUTPUT book.out +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap +INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap +INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm +INPUT book.toc +INPUT book.toc +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm +OUTPUT book.toc +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8t.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1pcr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1pcr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8c.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8c.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrro8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrro8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrro8c.vf +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8c.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm +INPUT 03_motion_28_0.png +INPUT ./03_motion_28_0.png +INPUT ./03_motion_28_0.png +INPUT 03_motion_28_0.png +INPUT ./03_motion_28_0.png +INPUT 03_motion_45_0.png +INPUT ./03_motion_45_0.png +INPUT ./03_motion_45_0.png +INPUT 03_motion_45_0.png +INPUT ./03_motion_45_0.png +INPUT 03_motion_79_0.png +INPUT ./03_motion_79_0.png +INPUT ./03_motion_79_0.png +INPUT 03_motion_79_0.png +INPUT ./03_motion_79_0.png +INPUT 03_motion_81_0.png +INPUT ./03_motion_81_0.png +INPUT ./03_motion_81_0.png +INPUT 03_motion_81_0.png +INPUT ./03_motion_81_0.png +INPUT 03_motion_88_0.png +INPUT ./03_motion_88_0.png +INPUT ./03_motion_88_0.png +INPUT 03_motion_88_0.png +INPUT ./03_motion_88_0.png +INPUT 03_motion_98_0.png +INPUT ./03_motion_98_0.png +INPUT ./03_motion_98_0.png +INPUT 03_motion_98_0.png +INPUT ./03_motion_98_0.png +INPUT 04_select_11_0.png +INPUT ./04_select_11_0.png +INPUT ./04_select_11_0.png +INPUT 04_select_11_0.png +INPUT ./04_select_11_0.png +INPUT 04_select_13_0.png +INPUT ./04_select_13_0.png +INPUT ./04_select_13_0.png +INPUT 04_select_13_0.png +INPUT ./04_select_13_0.png +INPUT 04_select_25_0.png +INPUT ./04_select_25_0.png +INPUT ./04_select_25_0.png +INPUT 04_select_25_0.png +INPUT ./04_select_25_0.png +INPUT 04_select_51_0.png +INPUT ./04_select_51_0.png +INPUT ./04_select_51_0.png +INPUT 04_select_51_0.png +INPUT ./04_select_51_0.png +INPUT 04_select_57_0.png +INPUT ./04_select_57_0.png +INPUT ./04_select_57_0.png +INPUT 04_select_57_0.png +INPUT ./04_select_57_0.png +INPUT 05_join_9_0.png +INPUT ./05_join_9_0.png +INPUT ./05_join_9_0.png +INPUT 05_join_9_0.png +INPUT ./05_join_9_0.png +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8c.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8c.vf +INPUT 06_photo_12_0.png +INPUT ./06_photo_12_0.png +INPUT ./06_photo_12_0.png +INPUT 06_photo_12_0.png +INPUT ./06_photo_12_0.png +INPUT 06_photo_23_0.png +INPUT ./06_photo_23_0.png +INPUT ./06_photo_23_0.png +INPUT 06_photo_23_0.png +INPUT ./06_photo_23_0.png +INPUT 06_photo_61_0.png +INPUT ./06_photo_61_0.png +INPUT ./06_photo_61_0.png +INPUT 06_photo_61_0.png +INPUT ./06_photo_61_0.png +INPUT 06_photo_63_0.png +INPUT ./06_photo_63_0.png +INPUT ./06_photo_63_0.png +INPUT 06_photo_63_0.png +INPUT ./06_photo_63_0.png +INPUT 07_plot_13_0.png +INPUT ./07_plot_13_0.png +INPUT ./07_plot_13_0.png +INPUT 07_plot_13_0.png +INPUT ./07_plot_13_0.png +INPUT 07_plot_50_0.png +INPUT ./07_plot_50_0.png +INPUT ./07_plot_50_0.png +INPUT 07_plot_50_0.png +INPUT ./07_plot_50_0.png +INPUT 07_plot_57_0.png +INPUT ./07_plot_57_0.png +INPUT ./07_plot_57_0.png +INPUT 07_plot_57_0.png +INPUT ./07_plot_57_0.png +INPUT 07_plot_63_0.png +INPUT ./07_plot_63_0.png +INPUT ./07_plot_63_0.png +INPUT 07_plot_63_0.png +INPUT ./07_plot_63_0.png +INPUT 07_plot_69_0.png +INPUT ./07_plot_69_0.png +INPUT ./07_plot_69_0.png +INPUT 07_plot_69_0.png +INPUT ./07_plot_69_0.png +INPUT 07_plot_72_0.png +INPUT ./07_plot_72_0.png +INPUT ./07_plot_72_0.png +INPUT 07_plot_72_0.png +INPUT ./07_plot_72_0.png +INPUT book.ind +INPUT book.ind +INPUT book.aux +INPUT ./book.out +INPUT ./book.out +INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy5.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrro8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb diff --git a/_build/latex/book.idx b/_build/latex/book.idx new file mode 100644 index 0000000..e69de29 diff --git a/_build/latex/book.ilg b/_build/latex/book.ilg new file mode 100644 index 0000000..04a719a --- /dev/null +++ b/_build/latex/book.ilg @@ -0,0 +1,5 @@ +This is makeindex, version 2.15 [TeX Live 2015] (kpathsea + Thai support). +Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored). +Scanning input file book.idx...done (0 entries accepted, 0 rejected). +Nothing written in book.ind. +Transcript written in book.ilg. diff --git a/_build/latex/book.ind b/_build/latex/book.ind new file mode 100644 index 0000000..e69de29 diff --git a/_build/latex/book.out b/_build/latex/book.out new file mode 100644 index 0000000..ec2b3f8 --- /dev/null +++ b/_build/latex/book.out @@ -0,0 +1,98 @@ +\BOOKMARK [0][-]{chapter.1}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0001}{}% 1 +\BOOKMARK [1][-]{section.1.1}{\376\377\000D\000a\000t\000a}{chapter.1}% 2 +\BOOKMARK [1][-]{section.1.2}{\376\377\000P\000r\000e\000r\000e\000q\000u\000i\000s\000i\000t\000e\000s}{chapter.1}% 3 +\BOOKMARK [1][-]{section.1.3}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.1}% 4 +\BOOKMARK [1][-]{section.1.4}{\376\377\000Q\000u\000e\000r\000y\000\040\000L\000a\000n\000g\000u\000a\000g\000e}{chapter.1}% 5 +\BOOKMARK [1][-]{section.1.5}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.1}% 6 +\BOOKMARK [1][-]{section.1.6}{\376\377\000C\000o\000n\000n\000e\000c\000t\000i\000n\000g\000\040\000t\000o\000\040\000G\000a\000i\000a}{chapter.1}% 7 +\BOOKMARK [1][-]{section.1.7}{\376\377\000D\000a\000t\000a\000b\000a\000s\000e\000s\000\040\000a\000n\000d\000\040\000T\000a\000b\000l\000e\000s}{chapter.1}% 8 +\BOOKMARK [1][-]{section.1.8}{\376\377\000C\000o\000l\000u\000m\000n\000s}{chapter.1}% 9 +\BOOKMARK [1][-]{section.1.9}{\376\377\000W\000r\000i\000t\000i\000n\000g\000\040\000q\000u\000e\000r\000i\000e\000s}{chapter.1}% 10 +\BOOKMARK [1][-]{section.1.10}{\376\377\000A\000s\000y\000n\000c\000h\000r\000o\000n\000o\000u\000s\000\040\000q\000u\000e\000r\000i\000e\000s}{chapter.1}% 11 +\BOOKMARK [1][-]{section.1.11}{\376\377\000O\000p\000e\000r\000a\000t\000o\000r\000s}{chapter.1}% 12 +\BOOKMARK [1][-]{section.1.12}{\376\377\000C\000l\000e\000a\000n\000i\000n\000g\000\040\000u\000p}{chapter.1}% 13 +\BOOKMARK [1][-]{section.1.13}{\376\377\000F\000o\000r\000m\000a\000t\000t\000i\000n\000g\000\040\000q\000u\000e\000r\000i\000e\000s}{chapter.1}% 14 +\BOOKMARK [1][-]{section.1.14}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.1}% 15 +\BOOKMARK [1][-]{section.1.15}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.1}% 16 +\BOOKMARK [0][-]{chapter.2}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0002}{}% 17 +\BOOKMARK [1][-]{section.2.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.2}% 18 +\BOOKMARK [1][-]{section.2.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.2}% 19 +\BOOKMARK [1][-]{section.2.3}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000a\000\040\000r\000e\000g\000i\000o\000n}{chapter.2}% 20 +\BOOKMARK [1][-]{section.2.4}{\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000G\000D\000-\0001\000\040\000D\000a\000t\000a}{chapter.2}% 21 +\BOOKMARK [1][-]{section.2.5}{\376\377\000W\000o\000r\000k\000i\000n\000g\000\040\000w\000i\000t\000h\000\040\000c\000o\000o\000r\000d\000i\000n\000a\000t\000e\000s}{chapter.2}% 22 +\BOOKMARK [1][-]{section.2.6}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000a\000\040\000r\000e\000c\000t\000a\000n\000g\000l\000e}{chapter.2}% 23 +\BOOKMARK [1][-]{section.2.7}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000a\000\040\000p\000o\000l\000y\000g\000o\000n}{chapter.2}% 24 +\BOOKMARK [1][-]{section.2.8}{\376\377\000S\000a\000v\000i\000n\000g\000\040\000r\000e\000s\000u\000l\000t\000s}{chapter.2}% 25 +\BOOKMARK [1][-]{section.2.9}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.2}% 26 +\BOOKMARK [1][-]{section.2.10}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.2}% 27 +\BOOKMARK [0][-]{chapter.3}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0003}{}% 28 +\BOOKMARK [1][-]{section.3.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.3}% 29 +\BOOKMARK [1][-]{section.3.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.3}% 30 +\BOOKMARK [1][-]{section.3.3}{\376\377\000R\000e\000l\000o\000a\000d\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.3}% 31 +\BOOKMARK [1][-]{section.3.4}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s}{chapter.3}% 32 +\BOOKMARK [1][-]{section.3.5}{\376\377\000S\000c\000a\000t\000t\000e\000r\000\040\000p\000l\000o\000t}{chapter.3}% 33 +\BOOKMARK [1][-]{section.3.6}{\376\377\000T\000r\000a\000n\000s\000f\000o\000r\000m\000\040\000b\000a\000c\000k}{chapter.3}% 34 +\BOOKMARK [1][-]{section.3.7}{\376\377\000P\000a\000n\000d\000a\000s\000\040\000D\000a\000t\000a\000F\000r\000a\000m\000e}{chapter.3}% 35 +\BOOKMARK [1][-]{section.3.8}{\376\377\000P\000l\000o\000t\000\040\000p\000r\000o\000p\000e\000r\000\040\000m\000o\000t\000i\000o\000n}{chapter.3}% 36 +\BOOKMARK [1][-]{section.3.9}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000c\000e\000n\000t\000e\000r\000l\000i\000n\000e}{chapter.3}% 37 +\BOOKMARK [1][-]{section.3.10}{\376\377\000F\000i\000l\000t\000e\000r\000i\000n\000g\000\040\000b\000a\000s\000e\000d\000\040\000o\000n\000\040\000p\000r\000o\000p\000e\000r\000\040\000m\000o\000t\000i\000o\000n}{chapter.3}% 38 +\BOOKMARK [1][-]{section.3.11}{\376\377\000S\000a\000v\000i\000n\000g\000\040\000t\000h\000e\000\040\000D\000a\000t\000a\000F\000r\000a\000m\000e}{chapter.3}% 39 +\BOOKMARK [1][-]{section.3.12}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.3}% 40 +\BOOKMARK [1][-]{section.3.13}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.3}% 41 +\BOOKMARK [0][-]{chapter.4}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0004}{}% 42 +\BOOKMARK [1][-]{section.4.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.4}% 43 +\BOOKMARK [1][-]{section.4.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.4}% 44 +\BOOKMARK [1][-]{section.4.3}{\376\377\000R\000e\000l\000o\000a\000d\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.4}% 45 +\BOOKMARK [1][-]{section.4.4}{\376\377\000S\000e\000l\000e\000c\000t\000i\000o\000n\000\040\000b\000y\000\040\000p\000r\000o\000p\000e\000r\000\040\000m\000o\000t\000i\000o\000n}{chapter.4}% 46 +\BOOKMARK [1][-]{section.4.5}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000r\000e\000g\000i\000o\000n}{chapter.4}% 47 +\BOOKMARK [1][-]{section.4.6}{\376\377\000A\000s\000s\000e\000m\000b\000l\000e\000\040\000t\000h\000e\000\040\000q\000u\000e\000r\000y}{chapter.4}% 48 +\BOOKMARK [1][-]{section.4.7}{\376\377\000P\000l\000o\000t\000t\000i\000n\000g\000\040\000o\000n\000e\000\040\000m\000o\000r\000e\000\040\000t\000i\000m\000e}{chapter.4}% 49 +\BOOKMARK [1][-]{section.4.8}{\376\377\000S\000a\000v\000i\000n\000g\000\040\000t\000h\000e\000\040\000D\000a\000t\000a\000F\000r\000a\000m\000e}{chapter.4}% 50 +\BOOKMARK [1][-]{section.4.9}{\376\377\000C\000S\000V}{chapter.4}% 51 +\BOOKMARK [1][-]{section.4.10}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.4}% 52 +\BOOKMARK [1][-]{section.4.11}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.4}% 53 +\BOOKMARK [0][-]{chapter.5}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0005}{}% 54 +\BOOKMARK [1][-]{section.5.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.5}% 55 +\BOOKMARK [1][-]{section.5.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.5}% 56 +\BOOKMARK [1][-]{section.5.3}{\376\377\000R\000e\000l\000o\000a\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.5}% 57 +\BOOKMARK [1][-]{section.5.4}{\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000p\000h\000o\000t\000o\000m\000e\000t\000r\000y\000\040\000d\000a\000t\000a}{chapter.5}% 58 +\BOOKMARK [1][-]{section.5.5}{\376\377\000P\000r\000e\000p\000a\000r\000i\000n\000g\000\040\000a\000\040\000t\000a\000b\000l\000e\000\040\000f\000o\000r\000\040\000u\000p\000l\000o\000a\000d\000i\000n\000g}{chapter.5}% 59 +\BOOKMARK [1][-]{section.5.6}{\376\377\000U\000p\000l\000o\000a\000d\000i\000n\000g\000\040\000a\000\040\000t\000a\000b\000l\000e}{chapter.5}% 60 +\BOOKMARK [1][-]{section.5.7}{\376\377\000J\000o\000i\000n\000i\000n\000g\000\040\000w\000i\000t\000h\000\040\000a\000n\000\040\000u\000p\000l\000o\000a\000d\000e\000d\000\040\000t\000a\000b\000l\000e}{chapter.5}% 61 +\BOOKMARK [1][-]{section.5.8}{\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000p\000h\000o\000t\000o\000m\000e\000t\000r\000y\000\040\000d\000a\000t\000a}{chapter.5}% 62 +\BOOKMARK [1][-]{section.5.9}{\376\377\000W\000r\000i\000t\000e\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.5}% 63 +\BOOKMARK [1][-]{section.5.10}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.5}% 64 +\BOOKMARK [1][-]{section.5.11}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e}{chapter.5}% 65 +\BOOKMARK [0][-]{chapter.6}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0006}{}% 66 +\BOOKMARK [1][-]{section.6.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.6}% 67 +\BOOKMARK [1][-]{section.6.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.6}% 68 +\BOOKMARK [1][-]{section.6.3}{\376\377\000R\000e\000l\000o\000a\000d\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.6}% 69 +\BOOKMARK [1][-]{section.6.4}{\376\377\000P\000l\000o\000t\000t\000i\000n\000g\000\040\000p\000h\000o\000t\000o\000m\000e\000t\000r\000y\000\040\000d\000a\000t\000a}{chapter.6}% 70 +\BOOKMARK [1][-]{section.6.5}{\376\377\000D\000r\000a\000w\000i\000n\000g\000\040\000a\000\040\000p\000o\000l\000y\000g\000o\000n}{chapter.6}% 71 +\BOOKMARK [1][-]{section.6.6}{\376\377\000W\000h\000i\000c\000h\000\040\000p\000o\000i\000n\000t\000s\000\040\000a\000r\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000p\000o\000l\000y\000g\000o\000n\000?}{chapter.6}% 72 +\BOOKMARK [1][-]{section.6.7}{\376\377\000R\000e\000l\000o\000a\000d\000i\000n\000g\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.6}% 73 +\BOOKMARK [1][-]{section.6.8}{\376\377\000M\000e\000r\000g\000i\000n\000g\000\040\000p\000h\000o\000t\000o\000m\000e\000t\000r\000y\000\040\000d\000a\000t\000a}{chapter.6}% 74 +\BOOKMARK [1][-]{section.6.9}{\376\377\000M\000i\000s\000s\000i\000n\000g\000\040\000d\000a\000t\000a}{chapter.6}% 75 +\BOOKMARK [1][-]{section.6.10}{\376\377\000S\000e\000l\000e\000c\000t\000i\000n\000g\000\040\000b\000a\000s\000e\000d\000\040\000o\000n\000\040\000p\000h\000o\000t\000o\000m\000e\000t\000r\000y}{chapter.6}% 76 +\BOOKMARK [1][-]{section.6.11}{\376\377\000W\000r\000i\000t\000e\000\040\000t\000h\000e\000\040\000d\000a\000t\000a}{chapter.6}% 77 +\BOOKMARK [1][-]{section.6.12}{\376\377\000S\000a\000v\000e\000\040\000t\000h\000e\000\040\000p\000o\000l\000y\000g\000o\000n}{chapter.6}% 78 +\BOOKMARK [1][-]{section.6.13}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.6}% 79 +\BOOKMARK [1][-]{section.6.14}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.6}% 80 +\BOOKMARK [0][-]{chapter.7}{\376\377\000C\000h\000a\000p\000t\000e\000r\000\040\0007}{}% 81 +\BOOKMARK [1][-]{section.7.1}{\376\377\000O\000u\000t\000l\000i\000n\000e}{chapter.7}% 82 +\BOOKMARK [1][-]{section.7.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{chapter.7}% 83 +\BOOKMARK [1][-]{section.7.3}{\376\377\000M\000a\000k\000i\000n\000g\000\040\000F\000i\000g\000u\000r\000e\000s\000\040\000T\000h\000a\000t\000\040\000T\000e\000l\000l\000\040\000a\000\040\000S\000t\000o\000r\000y}{chapter.7}% 84 +\BOOKMARK [1][-]{section.7.4}{\376\377\000P\000l\000o\000t\000t\000i\000n\000g\000\040\000G\000D\000-\0001}{chapter.7}% 85 +\BOOKMARK [1][-]{section.7.5}{\376\377\000A\000n\000n\000o\000t\000a\000t\000i\000o\000n\000s}{chapter.7}% 86 +\BOOKMARK [1][-]{section.7.6}{\376\377\000C\000u\000s\000t\000o\000m\000i\000z\000a\000t\000i\000o\000n}{chapter.7}% 87 +\BOOKMARK [1][-]{section.7.7}{\376\377\000r\000c\000P\000a\000r\000a\000m\000s}{chapter.7}% 88 +\BOOKMARK [1][-]{section.7.8}{\376\377\000S\000t\000y\000l\000e\000\040\000s\000h\000e\000e\000t\000s}{chapter.7}% 89 +\BOOKMARK [1][-]{section.7.9}{\376\377\000L\000a\000T\000e\000X\000\040\000f\000o\000n\000t\000s}{chapter.7}% 90 +\BOOKMARK [1][-]{section.7.10}{\376\377\000M\000u\000l\000t\000i\000p\000l\000e\000\040\000p\000a\000n\000e\000l\000s}{chapter.7}% 91 +\BOOKMARK [1][-]{section.7.11}{\376\377\000U\000p\000p\000e\000r\000\040\000r\000i\000g\000h\000t}{chapter.7}% 92 +\BOOKMARK [1][-]{section.7.12}{\376\377\000U\000p\000p\000e\000r\000\040\000l\000e\000f\000t}{chapter.7}% 93 +\BOOKMARK [1][-]{section.7.13}{\376\377\000L\000o\000w\000e\000r\000\040\000r\000i\000g\000h\000t}{chapter.7}% 94 +\BOOKMARK [1][-]{section.7.14}{\376\377\000S\000u\000b\000p\000l\000o\000t\000s}{chapter.7}% 95 +\BOOKMARK [1][-]{section.7.15}{\376\377\000A\000d\000j\000u\000s\000t\000i\000n\000g\000\040\000p\000r\000o\000p\000o\000r\000t\000i\000o\000n\000s}{chapter.7}% 96 +\BOOKMARK [1][-]{section.7.16}{\376\377\000S\000u\000m\000m\000a\000r\000y}{chapter.7}% 97 +\BOOKMARK [1][-]{section.7.17}{\376\377\000B\000e\000s\000t\000\040\000p\000r\000a\000c\000t\000i\000c\000e\000s}{chapter.7}% 98 diff --git a/_build/latex/book.pdf b/_build/latex/book.pdf new file mode 100644 index 0000000..a5df9c9 Binary files /dev/null and b/_build/latex/book.pdf differ diff --git a/_build/latex/book.tex b/_build/latex/book.tex new file mode 100644 index 0000000..3bcb107 --- /dev/null +++ b/_build/latex/book.tex @@ -0,0 +1,6779 @@ +%% Generated by Sphinx. +\def\sphinxdocclass{report} +\documentclass[letterpaper,10pt,english]{sphinxmanual} +\ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen +\fi \sphinxpxdimen=.75bp\relax + +\PassOptionsToPackage{warn}{textcomp} +\usepackage[utf8]{inputenc} +\ifdefined\DeclareUnicodeCharacter +% support both utf8 and utf8x syntaxes + \ifdefined\DeclareUnicodeCharacterAsOptional + \def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}} + \else + \let\sphinxDUC\DeclareUnicodeCharacter + \fi + \sphinxDUC{00A0}{\nobreakspace} + \sphinxDUC{2500}{\sphinxunichar{2500}} + \sphinxDUC{2502}{\sphinxunichar{2502}} + \sphinxDUC{2514}{\sphinxunichar{2514}} + \sphinxDUC{251C}{\sphinxunichar{251C}} + \sphinxDUC{2572}{\textbackslash} +\fi +\usepackage{cmap} +\usepackage[T1]{fontenc} +\usepackage{amsmath,amssymb,amstext} +\usepackage{babel} + + + +\usepackage{times} +\expandafter\ifx\csname T@LGR\endcsname\relax +\else +% LGR was declared as font encoding + \substitutefont{LGR}{\rmdefault}{cmr} + \substitutefont{LGR}{\sfdefault}{cmss} + \substitutefont{LGR}{\ttdefault}{cmtt} +\fi +\expandafter\ifx\csname T@X2\endcsname\relax + \expandafter\ifx\csname T@T2A\endcsname\relax + \else + % T2A was declared as font encoding + \substitutefont{T2A}{\rmdefault}{cmr} + \substitutefont{T2A}{\sfdefault}{cmss} + \substitutefont{T2A}{\ttdefault}{cmtt} + \fi +\else +% X2 was declared as font encoding + \substitutefont{X2}{\rmdefault}{cmr} + \substitutefont{X2}{\sfdefault}{cmss} + \substitutefont{X2}{\ttdefault}{cmtt} +\fi + + +\usepackage[Bjarne]{fncychap} +\usepackage[,numfigreset=1,mathnumfig]{sphinx} + +\fvset{fontsize=\small} +\usepackage{geometry} + + +% Include hyperref last. +\usepackage{hyperref} +% Fix anchor placement for figures with captions. +\usepackage{hypcap}% it must be loaded after hyperref. +% Set up styles of URL: it should be placed after hyperref. +\urlstyle{same} + + +\usepackage{sphinxmessages} + + + + +\title{Astronomical Data in Python} +\date{Nov 04, 2020} +\release{} +\author{Allen B.\@{} Downey} +\newcommand{\sphinxlogo}{\vbox{}} +\renewcommand{\releasename}{} +\makeindex +\begin{document} + +\pagestyle{empty} +\sphinxmaketitle +\pagestyle{plain} +\sphinxtableofcontents +\pagestyle{normal} +\phantomsection\label{\detokenize{README::doc}} + + +\sphinxstyleemphasis{Astronomical Data in Python} is an introduction to tools and practices for working with astronomical data. Topics covered include: +\begin{itemize} +\item {} +Writing queries that select and download data from a database. + +\item {} +Using data stored in an Astropy \sphinxcode{\sphinxupquote{Table}} or Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\item {} +Working with coordinates and other quantities with units. + +\item {} +Storing data in various formats. + +\item {} +Performing database join operations that combine data from multiple tables. + +\item {} +Visualizing data and preparing publication\sphinxhyphen{}quality figures. + +\end{itemize} + +As a running example, we will replicate part of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +This material was developed in collaboration with \sphinxhref{https://carpentries.org/}{The Carpentries} and the Astronomy Curriculum Development Committee, and supported by funding from the American Institute of Physics through the American Astronomical Society. + +I am grateful for contributions from the members of the committee \textendash{} Azalee Bostroem, Rodolfo Montez, and Phil Rosenfield \textendash{} and from Erin Becker, Brett Morris and Adrian Price\sphinxhyphen{}Whelan. + +The original format of this material is a series of Jupyter notebooks. Using the +links below, you can read the notebooks on NBViewer or run them on Colab. If you +want to run the notebooks in your own environment, you can download them from +this repository and follow the instructions below to set up your environment. + +This material is also available in the form of \sphinxhref{https://datacarpentry.github.io/astronomy-python}{Carpentries lessons}, but you should be +aware that these versions might diverge in the future. + +\sphinxstylestrong{Prerequisites} + +This material should be accessible to people familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, that should be enough. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use. + +\sphinxstylestrong{Notebook 1} + +This notebook demonstrates the following steps: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Making a connection to the Gaia server, + +\item {} +Exploring information about the database and the tables it contains, + +\item {} +Writing a query and sending it to the server, and finally + +\item {} +Downloading the response from the server as an Astropy \sphinxcode{\sphinxupquote{Table}}. + +\end{enumerate} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/01\_query.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/01\_query.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 2} + +This notebook starts with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky. + +Then, to select stars in the vicinity of GD\sphinxhyphen{}1, we: +\begin{itemize} +\item {} +Use \sphinxcode{\sphinxupquote{Quantity}} objects to represent measurements with units. + +\item {} +Use the \sphinxcode{\sphinxupquote{Gala}} library to convert coordinates from one frame to another. + +\item {} +Use the ADQL keywords \sphinxcode{\sphinxupquote{POLYGON}}, \sphinxcode{\sphinxupquote{CONTAINS}}, and \sphinxcode{\sphinxupquote{POINT}} to select stars that fall within a polygonal region. + +\item {} +Submit a query and download the results. + +\item {} +Store the results in a FITS file. + +\end{itemize} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/02\_coords.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/02\_coords.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 3} + +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll read back the results from the previous notebook, which we saved in a FITS file. + +\item {} +Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD\sphinxhyphen{}1. + +\item {} +We’ll put those results into a Pandas \sphinxcode{\sphinxupquote{DataFrame}}, which we’ll use to select stars near the centerline of GD\sphinxhyphen{}1. + +\item {} +Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD\sphinxhyphen{}1. + +\item {} +Finally, we’ll select and plot the stars whose proper motion is in that region. + +\end{enumerate} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/03\_motion.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/03\_motion.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 4} + +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Using data from the previous notebook, we’ll identify the values of proper motion for stars likely to be in GD\sphinxhyphen{}1. + +\item {} +Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. + +\item {} +We’ll also see how to write the results to a CSV file. + +\end{enumerate} + +That will make it possible to search a bigger region of the sky in a single query. + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/04\_select.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/04\_select.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 5} + +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll reload the candidate stars we identified in the previous notebook. + +\item {} +Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a \sphinxcode{\sphinxupquote{JOIN}} operation to select photometry data for the candidate stars. + +\item {} +We’ll write the results to a file for use in the next notebook. + +\end{enumerate} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/05\_join.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/05\_join.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 6} + +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll reload the data from the previous notebook and make a color\sphinxhyphen{}magnitude diagram. + +\item {} +Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect. + +\item {} +Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\end{enumerate} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/06\_photo.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/06\_photo.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Notebook 7} + +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly. + +\item {} +The we’ll see several ways to customize figures to make them more appealing and effective. + +\item {} +Finally, we’ll see how to make a figure with multiple panels or subplots. + +\end{enumerate} + +Press this button to run this notebook on Colab: + +\sphinxhref{https://colab.research.google.com/github/AllenDowney/AstronomicalData/blob/main/07\_plot.ipynb}{} + +\sphinxhref{https://nbviewer.jupyter.org/github/AllenDowney/AstronomicalData/blob/main/07\_plot.ipynb}{or click here to read it on NBViewer} + +\sphinxstylestrong{Installation instructions} + +Coming soon. + + +\chapter{Chapter 1} +\label{\detokenize{01_query:chapter-1}}\label{\detokenize{01_query::doc}} +\sphinxstyleemphasis{Astronomical Data in Python} is an introduction to tools and practices for working with astronomical data. Topics covered include: +\begin{itemize} +\item {} +Writing queries that select and download data from a database. + +\item {} +Using data stored in an Astropy \sphinxcode{\sphinxupquote{Table}} or Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\item {} +Working with coordinates and other quantities with units. + +\item {} +Storing data in various formats. + +\item {} +Performing database join operations that combine data from multiple tables. + +\item {} +Visualizing data and preparing publication\sphinxhyphen{}quality figures. + +\end{itemize} + +As a running example, we will replicate part of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +As the abstract explains, “Using data from the Gaia second data release combined with Pan\sphinxhyphen{}STARRS photometry, we present a sample of highly\sphinxhyphen{}probable members of the longest cold stream in the Milky Way, GD\sphinxhyphen{}1.” + +GD\sphinxhyphen{}1 is a \sphinxhref{https://en.wikipedia.org/wiki/List\_of\_stellar\_streams}{stellar stream}, which is “an association of stars orbiting a galaxy that was once a globular cluster or dwarf galaxy that has now been torn apart and stretched out along its orbit by tidal forces.” + +\sphinxhref{https://www.sciencemag.org/news/2018/10/streams-stars-reveal-galaxy-s-violent-history-and-perhaps-its-unseen-dark-matter}{This article in \sphinxstyleemphasis{Science} magazine} explains some of the background, including the process that led to the paper and an discussion of the scientific implications: +\begin{itemize} +\item {} +“The streams are particularly useful for … galactic archaeology — rewinding the cosmic clock to reconstruct the assembly of the Milky Way.” + +\item {} +“They also are being used as exquisitely sensitive scales to measure the galaxy’s mass.” + +\item {} +“… the streams are well\sphinxhyphen{}positioned to reveal the presence of dark matter … because the streams are so fragile, theorists say, collisions with marauding clumps of dark matter could leave telltale scars, potential clues to its nature.” + +\end{itemize} + + +\section{Data} +\label{\detokenize{01_query:data}} +The datasets we will work with are: +\begin{itemize} +\item {} +\sphinxhref{https://en.wikipedia.org/wiki/Gaia\_(spacecraft)}{Gaia}, which is “a space observatory of the European Space Agency (ESA), launched in 2013 … designed for astrometry: measuring the positions, distances and motions of stars with unprecedented precision”, and + +\item {} +\sphinxhref{https://en.wikipedia.org/wiki/Pan-STARRS}{Pan\sphinxhyphen{}STARRS}, The Panoramic Survey Telescope and Rapid Response System, which is a survey designed to monitor the sky for transient objects, producing a catalog with accurate astronometry and photometry of detected sources. + +\end{itemize} + +Both of these datasets are very large, which can make them challenging to work with. It might not be possible, or practical, to download the entire dataset. +One of the goals of this workshop is to provide tools for working with large datasets. + + +\section{Prerequisites} +\label{\detokenize{01_query:prerequisites}} +These notebooks are meant for people who are familiar with basic Python, but not necessarily the libraries we will use, like Astropy or Pandas. If you are familiar with Python lists and dictionaries, and you know how to write a function that takes parameters and returns a value, you know enough Python to get started. + +We assume that you have some familiarity with operating systems, like the ability to use a command\sphinxhyphen{}line interface. But we don’t assume you have any prior experience with databases. + +We assume that you are familiar with astronomy at the undergraduate level, but we will not assume specialized knowledge of the datasets or analysis methods we’ll use. + + +\section{Outline} +\label{\detokenize{01_query:outline}} +The first lesson demonstrates the steps for selecting and downloading data from the Gaia Database: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +First we’ll make a connection to the Gaia server, + +\item {} +We will explore information about the database and the tables it contains, + +\item {} +We will write a query and send it to the server, and finally + +\item {} +We will download the response from the server. + +\end{enumerate} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Compose a basic query in ADQL. + +\item {} +Use queries to explore a database and its tables. + +\item {} +Use queries to download data. + +\item {} +Develop, test, and debug a query incrementally. + +\end{itemize} + + +\section{Query Language} +\label{\detokenize{01_query:query-language}} +In order to select data from a database, you have to compose a query, which is like a program written in a “query language”. +The query language we’ll use is ADQL, which stands for “Astronomical Data Query Language”. + +ADQL is a dialect of \sphinxhref{https://en.wikipedia.org/wiki/SQL}{SQL} (Structured Query Language), which is by far the most commonly used query language. Almost everything you will learn about ADQL also works in SQL. + +\sphinxhref{http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html}{The reference manual for ADQL is here}. +But you might find it easier to learn from \sphinxhref{https://www.gaia.ac.uk/data/gaia-data-release-1/adql-cookbook}{this ADQL Cookbook}. + + +\section{Installing libraries} +\label{\detokenize{01_query:installing-libraries}} +The library we’ll use to get Gaia data is \sphinxhref{https://astroquery.readthedocs.io/en/latest/}{Astroquery}. + +If you are running this notebook on Colab, you can run the following cell to install Astroquery and the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia +\end{sphinxVerbatim} + + +\section{Connecting to Gaia} +\label{\detokenize{01_query:connecting-to-gaia}} +Astroquery provides \sphinxcode{\sphinxupquote{Gaia}}, which is an \sphinxhref{https://astroquery.readthedocs.io/en/latest/gaia/gaia.html}{object that represents a connection to the Gaia database}. + +We can connect to the Gaia database like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astroquery}\PYG{n+nn}{.}\PYG{n+nn}{gaia} \PYG{k+kn}{import} \PYG{n}{Gaia} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: gea.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: geadata.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +\end{sphinxVerbatim} + +Running this import statement has the effect of creating a \sphinxhref{http://www.ivoa.net/documents/TAP/}{TAP+} connection; TAP stands for “Table Access Protocol”. It is a network protocol for sending queries to the database and getting back the results. We’re not sure why it seems to create two connections. + + +\section{Databases and Tables} +\label{\detokenize{01_query:databases-and-tables}} +What is a database, anyway? Most generally, it can be any collection of data, but when we are talking about ADQL or SQL: +\begin{itemize} +\item {} +A database is a collection of one or more named tables. + +\item {} +Each table is a 2\sphinxhyphen{}D array with one or more named columns of data. + +\end{itemize} + +We can use \sphinxcode{\sphinxupquote{Gaia.load\_tables}} to get the names of the tables in the Gaia database. With the option \sphinxcode{\sphinxupquote{only\_names=True}}, it loads information about the tables, called the “metadata”, not the data itself. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{tables} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{load\PYGZus{}tables}\PYG{p}{(}\PYG{n}{only\PYGZus{}names}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +INFO: Retrieving tables... [astroquery.utils.tap.core] +INFO: Parsing tables... [astroquery.utils.tap.core] +INFO: Done. [astroquery.utils.tap.core] +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{table} \PYG{o+ow}{in} \PYG{p}{(}\PYG{n}{tables}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{table}\PYG{o}{.}\PYG{n}{get\PYGZus{}qualified\PYGZus{}name}\PYG{p}{(}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +external.external.apassdr9 +external.external.gaiadr2\PYGZus{}geometric\PYGZus{}distance +external.external.galex\PYGZus{}ais +external.external.ravedr5\PYGZus{}com +external.external.ravedr5\PYGZus{}dr5 +external.external.ravedr5\PYGZus{}gra +external.external.ravedr5\PYGZus{}on +external.external.sdssdr13\PYGZus{}photoprimary +external.external.skymapperdr1\PYGZus{}master +external.external.tmass\PYGZus{}xsc +public.public.hipparcos +public.public.hipparcos\PYGZus{}newreduction +public.public.hubble\PYGZus{}sc +public.public.igsl\PYGZus{}source +public.public.igsl\PYGZus{}source\PYGZus{}catalog\PYGZus{}ids +public.public.tycho2 +public.public.dual +tap\PYGZus{}config.tap\PYGZus{}config.coord\PYGZus{}sys +tap\PYGZus{}config.tap\PYGZus{}config.properties +tap\PYGZus{}schema.tap\PYGZus{}schema.columns +tap\PYGZus{}schema.tap\PYGZus{}schema.key\PYGZus{}columns +tap\PYGZus{}schema.tap\PYGZus{}schema.keys +tap\PYGZus{}schema.tap\PYGZus{}schema.schemas +tap\PYGZus{}schema.tap\PYGZus{}schema.tables +gaiadr1.gaiadr1.aux\PYGZus{}qso\PYGZus{}icrf2\PYGZus{}match +gaiadr1.gaiadr1.ext\PYGZus{}phot\PYGZus{}zero\PYGZus{}point +gaiadr1.gaiadr1.allwise\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.allwise\PYGZus{}neighbourhood +gaiadr1.gaiadr1.gsc23\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.gsc23\PYGZus{}neighbourhood +gaiadr1.gaiadr1.ppmxl\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.ppmxl\PYGZus{}neighbourhood +gaiadr1.gaiadr1.sdss\PYGZus{}dr9\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.sdss\PYGZus{}dr9\PYGZus{}neighbourhood +gaiadr1.gaiadr1.tmass\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.tmass\PYGZus{}neighbourhood +gaiadr1.gaiadr1.ucac4\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.ucac4\PYGZus{}neighbourhood +gaiadr1.gaiadr1.urat1\PYGZus{}best\PYGZus{}neighbour +gaiadr1.gaiadr1.urat1\PYGZus{}neighbourhood +gaiadr1.gaiadr1.cepheid +gaiadr1.gaiadr1.phot\PYGZus{}variable\PYGZus{}time\PYGZus{}series\PYGZus{}gfov +gaiadr1.gaiadr1.phot\PYGZus{}variable\PYGZus{}time\PYGZus{}series\PYGZus{}gfov\PYGZus{}statistical\PYGZus{}parameters +gaiadr1.gaiadr1.rrlyrae +gaiadr1.gaiadr1.variable\PYGZus{}summary +gaiadr1.gaiadr1.allwise\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.gsc23\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.ppmxl\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.sdssdr9\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.tmass\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.ucac4\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.urat1\PYGZus{}original\PYGZus{}valid +gaiadr1.gaiadr1.gaia\PYGZus{}source +gaiadr1.gaiadr1.tgas\PYGZus{}source +gaiadr2.gaiadr2.aux\PYGZus{}allwise\PYGZus{}agn\PYGZus{}gdr2\PYGZus{}cross\PYGZus{}id +gaiadr2.gaiadr2.aux\PYGZus{}iers\PYGZus{}gdr2\PYGZus{}cross\PYGZus{}id +gaiadr2.gaiadr2.aux\PYGZus{}sso\PYGZus{}orbit\PYGZus{}residuals +gaiadr2.gaiadr2.aux\PYGZus{}sso\PYGZus{}orbits +gaiadr2.gaiadr2.dr1\PYGZus{}neighbourhood +gaiadr2.gaiadr2.allwise\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.allwise\PYGZus{}neighbourhood +gaiadr2.gaiadr2.apassdr9\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.apassdr9\PYGZus{}neighbourhood +gaiadr2.gaiadr2.gsc23\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.gsc23\PYGZus{}neighbourhood +gaiadr2.gaiadr2.hipparcos2\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.hipparcos2\PYGZus{}neighbourhood +gaiadr2.gaiadr2.panstarrs1\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.panstarrs1\PYGZus{}neighbourhood +gaiadr2.gaiadr2.ppmxl\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.ppmxl\PYGZus{}neighbourhood +gaiadr2.gaiadr2.ravedr5\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.ravedr5\PYGZus{}neighbourhood +gaiadr2.gaiadr2.sdssdr9\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.sdssdr9\PYGZus{}neighbourhood +gaiadr2.gaiadr2.tmass\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.tmass\PYGZus{}neighbourhood +gaiadr2.gaiadr2.tycho2\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.tycho2\PYGZus{}neighbourhood +gaiadr2.gaiadr2.urat1\PYGZus{}best\PYGZus{}neighbour +gaiadr2.gaiadr2.urat1\PYGZus{}neighbourhood +gaiadr2.gaiadr2.sso\PYGZus{}observation +gaiadr2.gaiadr2.sso\PYGZus{}source +gaiadr2.gaiadr2.vari\PYGZus{}cepheid +gaiadr2.gaiadr2.vari\PYGZus{}classifier\PYGZus{}class\PYGZus{}definition +gaiadr2.gaiadr2.vari\PYGZus{}classifier\PYGZus{}definition +gaiadr2.gaiadr2.vari\PYGZus{}classifier\PYGZus{}result +gaiadr2.gaiadr2.vari\PYGZus{}long\PYGZus{}period\PYGZus{}variable +gaiadr2.gaiadr2.vari\PYGZus{}rotation\PYGZus{}modulation +gaiadr2.gaiadr2.vari\PYGZus{}rrlyrae +gaiadr2.gaiadr2.vari\PYGZus{}short\PYGZus{}timescale +gaiadr2.gaiadr2.vari\PYGZus{}time\PYGZus{}series\PYGZus{}statistics +gaiadr2.gaiadr2.panstarrs1\PYGZus{}original\PYGZus{}valid +gaiadr2.gaiadr2.gaia\PYGZus{}source +gaiadr2.gaiadr2.ruwe +\end{sphinxVerbatim} + +So that’s a lot of tables. The ones we’ll use are: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{gaiadr2.gaia\_source}}, which contains Gaia data from \sphinxhref{https://www.cosmos.esa.int/web/gaia/data-release-2}{data release 2}, + +\item {} +\sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}}, which contains the photometry data we’ll use from PanSTARRS, and + +\item {} +\sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_best\_neighbour}}, which we’ll use to cross\sphinxhyphen{}match each star observed by Gaia with the same star observed by PanSTARRS. + +\end{itemize} + +We can use \sphinxcode{\sphinxupquote{load\_table}} (not \sphinxcode{\sphinxupquote{load\_tables}}) to get the metadata for a single table. The name of this function is misleading, because it only downloads metadata. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{meta} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{load\PYGZus{}table}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gaiadr2.gaia\PYGZus{}source}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{meta} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Retrieving table \PYGZsq{}gaiadr2.gaia\PYGZus{}source\PYGZsq{} +Parsing table \PYGZsq{}gaiadr2.gaia\PYGZus{}source\PYGZsq{}... +Done. +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}astroquery.utils.tap.model.taptable.TapTableMeta at 0x7f922376e0a0\PYGZgt{} +\end{sphinxVerbatim} + +Jupyter shows that the result is an object of type \sphinxcode{\sphinxupquote{TapTableMeta}}, but it does not display the contents. + +To see the metadata, we have to print the object. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{meta}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +TAP Table name: gaiadr2.gaiadr2.gaia\PYGZus{}source +Description: This table has an entry for every Gaia observed source as listed in the +Main Database accumulating catalogue version from which the catalogue +release has been generated. It contains the basic source parameters, +that is only final data (no epoch data) and no spectra (neither final +nor epoch). +Num. columns: 96 +\end{sphinxVerbatim} + +Notice one gotcha: in the list of table names, this table appears as \sphinxcode{\sphinxupquote{gaiadr2.gaiadr2.gaia\_source}}, but when we load the metadata, we refer to it as \sphinxcode{\sphinxupquote{gaiadr2.gaia\_source}}. + +\sphinxstylestrong{Exercise:} Go back and try + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{meta} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{load\PYGZus{}table}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gaiadr2.gaiadr2.gaia\PYGZus{}source}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +What happens? Is the error message helpful? If you had not made this error deliberately, would you have been able to figure it out? + + +\section{Columns} +\label{\detokenize{01_query:columns}} +The following loop prints the names of the columns in the table. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{column} \PYG{o+ow}{in} \PYG{n}{meta}\PYG{o}{.}\PYG{n}{columns}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{column}\PYG{o}{.}\PYG{n}{name}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +solution\PYGZus{}id +designation +source\PYGZus{}id +random\PYGZus{}index +ref\PYGZus{}epoch +ra +ra\PYGZus{}error +dec +dec\PYGZus{}error +parallax +parallax\PYGZus{}error +parallax\PYGZus{}over\PYGZus{}error +pmra +pmra\PYGZus{}error +pmdec +pmdec\PYGZus{}error +ra\PYGZus{}dec\PYGZus{}corr +ra\PYGZus{}parallax\PYGZus{}corr +ra\PYGZus{}pmra\PYGZus{}corr +ra\PYGZus{}pmdec\PYGZus{}corr +dec\PYGZus{}parallax\PYGZus{}corr +dec\PYGZus{}pmra\PYGZus{}corr +dec\PYGZus{}pmdec\PYGZus{}corr +parallax\PYGZus{}pmra\PYGZus{}corr +parallax\PYGZus{}pmdec\PYGZus{}corr +pmra\PYGZus{}pmdec\PYGZus{}corr +astrometric\PYGZus{}n\PYGZus{}obs\PYGZus{}al +astrometric\PYGZus{}n\PYGZus{}obs\PYGZus{}ac +astrometric\PYGZus{}n\PYGZus{}good\PYGZus{}obs\PYGZus{}al +astrometric\PYGZus{}n\PYGZus{}bad\PYGZus{}obs\PYGZus{}al +astrometric\PYGZus{}gof\PYGZus{}al +astrometric\PYGZus{}chi2\PYGZus{}al +astrometric\PYGZus{}excess\PYGZus{}noise +astrometric\PYGZus{}excess\PYGZus{}noise\PYGZus{}sig +astrometric\PYGZus{}params\PYGZus{}solved +astrometric\PYGZus{}primary\PYGZus{}flag +astrometric\PYGZus{}weight\PYGZus{}al +astrometric\PYGZus{}pseudo\PYGZus{}colour +astrometric\PYGZus{}pseudo\PYGZus{}colour\PYGZus{}error +mean\PYGZus{}varpi\PYGZus{}factor\PYGZus{}al +astrometric\PYGZus{}matched\PYGZus{}observations +visibility\PYGZus{}periods\PYGZus{}used +astrometric\PYGZus{}sigma5d\PYGZus{}max +frame\PYGZus{}rotator\PYGZus{}object\PYGZus{}type +matched\PYGZus{}observations +duplicated\PYGZus{}source +phot\PYGZus{}g\PYGZus{}n\PYGZus{}obs +phot\PYGZus{}g\PYGZus{}mean\PYGZus{}flux +phot\PYGZus{}g\PYGZus{}mean\PYGZus{}flux\PYGZus{}error +phot\PYGZus{}g\PYGZus{}mean\PYGZus{}flux\PYGZus{}over\PYGZus{}error +phot\PYGZus{}g\PYGZus{}mean\PYGZus{}mag +phot\PYGZus{}bp\PYGZus{}n\PYGZus{}obs +phot\PYGZus{}bp\PYGZus{}mean\PYGZus{}flux +phot\PYGZus{}bp\PYGZus{}mean\PYGZus{}flux\PYGZus{}error +phot\PYGZus{}bp\PYGZus{}mean\PYGZus{}flux\PYGZus{}over\PYGZus{}error +phot\PYGZus{}bp\PYGZus{}mean\PYGZus{}mag +phot\PYGZus{}rp\PYGZus{}n\PYGZus{}obs +phot\PYGZus{}rp\PYGZus{}mean\PYGZus{}flux +phot\PYGZus{}rp\PYGZus{}mean\PYGZus{}flux\PYGZus{}error +phot\PYGZus{}rp\PYGZus{}mean\PYGZus{}flux\PYGZus{}over\PYGZus{}error +phot\PYGZus{}rp\PYGZus{}mean\PYGZus{}mag +phot\PYGZus{}bp\PYGZus{}rp\PYGZus{}excess\PYGZus{}factor +phot\PYGZus{}proc\PYGZus{}mode +bp\PYGZus{}rp +bp\PYGZus{}g +g\PYGZus{}rp +radial\PYGZus{}velocity +radial\PYGZus{}velocity\PYGZus{}error +rv\PYGZus{}nb\PYGZus{}transits +rv\PYGZus{}template\PYGZus{}teff +rv\PYGZus{}template\PYGZus{}logg +rv\PYGZus{}template\PYGZus{}fe\PYGZus{}h +phot\PYGZus{}variable\PYGZus{}flag +l +b +ecl\PYGZus{}lon +ecl\PYGZus{}lat +priam\PYGZus{}flags +teff\PYGZus{}val +teff\PYGZus{}percentile\PYGZus{}lower +teff\PYGZus{}percentile\PYGZus{}upper +a\PYGZus{}g\PYGZus{}val +a\PYGZus{}g\PYGZus{}percentile\PYGZus{}lower +a\PYGZus{}g\PYGZus{}percentile\PYGZus{}upper +e\PYGZus{}bp\PYGZus{}min\PYGZus{}rp\PYGZus{}val +e\PYGZus{}bp\PYGZus{}min\PYGZus{}rp\PYGZus{}percentile\PYGZus{}lower +e\PYGZus{}bp\PYGZus{}min\PYGZus{}rp\PYGZus{}percentile\PYGZus{}upper +flame\PYGZus{}flags +radius\PYGZus{}val +radius\PYGZus{}percentile\PYGZus{}lower +radius\PYGZus{}percentile\PYGZus{}upper +lum\PYGZus{}val +lum\PYGZus{}percentile\PYGZus{}lower +lum\PYGZus{}percentile\PYGZus{}upper +datalink\PYGZus{}url +epoch\PYGZus{}photometry\PYGZus{}url +\end{sphinxVerbatim} + +You can probably guess what many of these columns are by looking at the names, but you should resist the temptation to guess. +To find out what the columns mean, \sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Gaia\_archive/chap\_datamodel/sec\_dm\_main\_tables/ssec\_dm\_gaia\_source.html}{read the documentation}. + +If you want to know what can go wrong when you don’t read the documentation, \sphinxhref{https://www.vox.com/future-perfect/2019/6/4/18650969/married-women-miserable-fake-paul-dolan-happiness}{you might like this article}. + +\sphinxstylestrong{Exercise:} One of the other tables we’ll use is \sphinxcode{\sphinxupquote{gaiadr2.gaiadr2.panstarrs1\_original\_valid}}. Use \sphinxcode{\sphinxupquote{load\_table}} to get the metadata for this table. How many columns are there and what are their names? + +Hint: Remember the gotcha we mentioned earlier. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{k}{for} \PYG{n}{column} \PYG{o+ow}{in} \PYG{n}{meta2}\PYG{o}{.}\PYG{n}{columns}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{column}\PYG{o}{.}\PYG{n}{name}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +obj\PYGZus{}name +obj\PYGZus{}id +ra +dec +ra\PYGZus{}error +dec\PYGZus{}error +epoch\PYGZus{}mean +g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag\PYGZus{}error +g\PYGZus{}flags +r\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +r\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag\PYGZus{}error +r\PYGZus{}flags +i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag\PYGZus{}error +i\PYGZus{}flags +z\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +z\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag\PYGZus{}error +z\PYGZus{}flags +y\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +y\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag\PYGZus{}error +y\PYGZus{}flags +n\PYGZus{}detections +zone\PYGZus{}id +obj\PYGZus{}info\PYGZus{}flag +quality\PYGZus{}flag +\end{sphinxVerbatim} + + +\section{Writing queries} +\label{\detokenize{01_query:writing-queries}} +By now you might be wondering how we actually download the data. With tables this big, you generally don’t. Instead, you use queries to select only the data you want. + +A query is a string written in a query language like SQL; for the Gaia database, the query language is a dialect of SQL called ADQL. + +Here’s an example of an ADQL query. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query1} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT } +\PYG{l+s+s2}{TOP 10} +\PYG{l+s+s2}{source\PYGZus{}id, ref\PYGZus{}epoch, ra, dec, parallax } +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source}\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\sphinxstylestrong{Python note:} We use a \sphinxhref{https://docs.python.org/3/tutorial/introduction.html\#strings}{triple\sphinxhyphen{}quoted string} here so we can include line breaks in the query, which makes it easier to read. + +The words in uppercase are ADQL keywords: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{SELECT}} indicates that we are selecting data (as opposed to adding or modifying data). + +\item {} +\sphinxcode{\sphinxupquote{TOP}} indicates that we only want the first 10 rows of the table, which is useful for testing a query before asking for all of the data. + +\item {} +\sphinxcode{\sphinxupquote{FROM}} specifies which table we want data from. + +\end{itemize} + +The third line is a list of column names, indicating which columns we want. + +In this example, the keywords are capitalized and the column names are lowercase. This is a common style, but it is not required. ADQL and SQL are not case\sphinxhyphen{}sensitive. + +To run this query, we use the \sphinxcode{\sphinxupquote{Gaia}} object, which represents our connection to the Gaia database, and invoke \sphinxcode{\sphinxupquote{launch\_job}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job1} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job}\PYG{p}{(}\PYG{n}{query1}\PYG{p}{)} +\PYG{n}{job1} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}astroquery.utils.tap.model.job.Job at 0x7f9222e9cb20\PYGZgt{} +\end{sphinxVerbatim} + +The result is an object that represents the job running on a Gaia server. + +If you print it, it displays metadata for the forthcoming table. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{job1}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=10\PYGZgt{} + name dtype unit description +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) +ref\PYGZus{}epoch float64 yr Reference epoch + ra float64 deg Right ascension + dec float64 deg Declination + parallax float64 mas Parallax +Jobid: None +Phase: COMPLETED +Owner: None +Output file: sync\PYGZus{}20201005090721.xml.gz +Results: None +\end{sphinxVerbatim} + +Don’t worry about \sphinxcode{\sphinxupquote{Results: None}}. That does not actually mean there are no results. + +However, \sphinxcode{\sphinxupquote{Phase: COMPLETED}} indicates that the job is complete, so we can get the results like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results1} \PYG{o}{=} \PYG{n}{job1}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{results1}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.table.Table +\end{sphinxVerbatim} + +\sphinxstylestrong{Optional detail:} Why is \sphinxcode{\sphinxupquote{table}} repeated three times? The first is the name of the module, the second is the name of the submodule, and the third is the name of the class. Most of the time we only care about the last one. It’s like the Linnean name for gorilla, which is \sphinxstyleemphasis{Gorilla Gorilla Gorilla}. + +The result is an \sphinxhref{https://docs.astropy.org/en/stable/table/}{Astropy Table}, which is similar to a table in an SQL database except: +\begin{itemize} +\item {} +SQL databases are stored on disk drives, so they are persistent; that is, they “survive” even if you turn off the computer. An Astropy \sphinxcode{\sphinxupquote{Table}} is stored in memory; it disappears when you turn off the computer (or shut down this Jupyter notebook). + +\item {} +SQL databases are designed to process queries. An Astropy \sphinxcode{\sphinxupquote{Table}} can perform some query\sphinxhyphen{}like operations, like selecting columns and rows. But these operations use Python syntax, not SQL. + +\end{itemize} + +Jupyter knows how to display the contents of a \sphinxcode{\sphinxupquote{Table}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results1} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=10\PYGZgt{} + source\PYGZus{}id ref\PYGZus{}epoch ... dec parallax + yr ... deg mas + int64 float64 ... float64 float64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} ... \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425 +4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977 +4530743343951405568 2015.5 ... 20.474147574053124 \PYGZhy{}0.43911323550176806 +4530755060627162368 2015.5 ... 20.558523922346158 1.1422630184554958 +4530746844341315968 2015.5 ... 20.377852388898184 1.0092247424630945 +4530768456615026432 2015.5 ... 20.31829694530366 \PYGZhy{}0.06900136127674149 +4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622 +4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072 +4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354 +4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962 +\end{sphinxVerbatim} + +Each column has a name, units, and a data type. + +For example, the units of \sphinxcode{\sphinxupquote{ra}} and \sphinxcode{\sphinxupquote{dec}} are degrees, and their data type is \sphinxcode{\sphinxupquote{float64}}, which is a 64\sphinxhyphen{}bit floating\sphinxhyphen{}point number, used to store measurements with a fraction part. + +This information comes from the Gaia database, and has been stored in the Astropy \sphinxcode{\sphinxupquote{Table}} by Astroquery. + +\sphinxstylestrong{Exercise:} Read \sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Gaia\_archive/chap\_datamodel/sec\_dm\_main\_tables/ssec\_dm\_gaia\_source.html}{the documentation of this table} and choose a column that looks interesting to you. Add the column name to the query and run it again. What are the units of the column you selected? What is its data type? + + +\section{Asynchronous queries} +\label{\detokenize{01_query:asynchronous-queries}} +\sphinxcode{\sphinxupquote{launch\_job}} asks the server to run the job “synchronously”, which normally means it runs immediately. But synchronous jobs are limited to 2000 rows. For queries that return more rows, you should run “asynchronously”, which mean they might take longer to get started. + +If you are not sure how many rows a query will return, you can use the SQL command \sphinxcode{\sphinxupquote{COUNT}} to find out how many rows are in the result without actually returning them. We’ll see an example of this later. + +The results of an asynchronous query are stored in a file on the server, so you can start a query and come back later to get the results. + +For anonymous users, files are kept for three days. + +As an example, let’s try a query that’s similar to \sphinxcode{\sphinxupquote{query1}}, with two changes: +\begin{itemize} +\item {} +It selects the first 3000 rows, so it is bigger than we should run synchronously. + +\item {} +It uses a new keyword, \sphinxcode{\sphinxupquote{WHERE}}. + +\end{itemize} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query2} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 3000} +\PYG{l+s+s2}{source\PYGZus{}id, ref\PYGZus{}epoch, ra, dec, parallax} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +A \sphinxcode{\sphinxupquote{WHERE}} clause indicates which rows we want; in this case, the query selects only rows “where” \sphinxcode{\sphinxupquote{parallax}} is less than 1. This has the effect of selecting stars with relatively low parallax, which are farther away. We’ll use this clause to exclude nearby stars that are unlikely to be part of GD\sphinxhyphen{}1. + +\sphinxcode{\sphinxupquote{WHERE}} is one of the most common clauses in ADQL/SQL, and one of the most useful, because it allows us to select only the rows we need from the database. + +We use \sphinxcode{\sphinxupquote{launch\_job\_async}} to submit an asynchronous query. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job2} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query2}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{job2}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +INFO: Query finished. [astroquery.utils.tap.core] +\PYGZlt{}Table length=3000\PYGZgt{} + name dtype unit description +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) +ref\PYGZus{}epoch float64 yr Reference epoch + ra float64 deg Right ascension + dec float64 deg Declination + parallax float64 mas Parallax +Jobid: 1601903242219O +Phase: COMPLETED +Owner: None +Output file: async\PYGZus{}20201005090722.vot +Results: None +\end{sphinxVerbatim} + +And here are the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results2} \PYG{o}{=} \PYG{n}{job2}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{results2} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=3000\PYGZgt{} + source\PYGZus{}id ref\PYGZus{}epoch ... dec parallax + yr ... deg mas + int64 float64 ... float64 float64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} ... \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +4530738361793769600 2015.5 ... 20.40682117430378 0.9785380604519425 +4530752651135081216 2015.5 ... 20.523350496351846 0.2674800612552977 +4530743343951405568 2015.5 ... 20.474147574053124 \PYGZhy{}0.43911323550176806 +4530768456615026432 2015.5 ... 20.31829694530366 \PYGZhy{}0.06900136127674149 +4530763513119137280 2015.5 ... 20.20956829578524 0.1266016679823622 +4530736364618539264 2015.5 ... 20.346579041327693 0.3894019486060072 +4530735952305177728 2015.5 ... 20.311030903719928 0.2041189982608354 +4530751281056022656 2015.5 ... 20.460309556214753 0.10294642821734962 +4530740938774409344 2015.5 ... 20.436140058941206 0.9242670062090182 + ... ... ... ... ... +4467710915011802624 2015.5 ... 1.1429085038160882 0.42361471245557913 +4467706551328679552 2015.5 ... 1.0565747323689927 0.922888231734588 +4467712255037300096 2015.5 ... 0.6581664892880896 \PYGZhy{}2.669179465293931 +4467735001181761792 2015.5 ... 0.8947079323599124 0.6117399163086398 +4467737101421916672 2015.5 ... 0.9806225910160181 \PYGZhy{}0.39818224846127004 +4467707547757327488 2015.5 ... 1.0212759940136962 0.7741412301054209 +4467732772094573056 2015.5 ... 0.9037072088489417 \PYGZhy{}1.7920417800164183 +4467732355491087744 2015.5 ... 0.9197224705139885 \PYGZhy{}0.3464446494840354 +4467717099766944512 2015.5 ... 0.726277659009568 0.05443955111134051 +4467719058265781248 2015.5 ... 0.8205551921782785 0.3733943917490343 +\end{sphinxVerbatim} + +You might notice that some values of \sphinxcode{\sphinxupquote{parallax}} are negative. As \sphinxhref{https://www.cosmos.esa.int/web/gaia/archive-tips\#negative\%20parallax}{this FAQ explains}, “Negative parallaxes are caused by errors in the observations.” Negative parallaxes have “no physical meaning,” but they can be a “useful diagnostic on the quality of the astrometric solution.” + +Later we will see an example where we use \sphinxcode{\sphinxupquote{parallax}} and \sphinxcode{\sphinxupquote{parallax\_error}} to identify stars where the distance estimate is likely to be inaccurate. + +\sphinxstylestrong{Exercise:} The clauses in a query have to be in the right order. Go back and change the order of the clauses in \sphinxcode{\sphinxupquote{query2}} and run it again. + +The query should fail, but notice that you don’t get much useful debugging information. + +For this reason, developing and debugging ADQL queries can be really hard. A few suggestions that might help: +\begin{itemize} +\item {} +Whenever possible, start with a working query, either an example you find online or a query you have used in the past. + +\item {} +Make small changes and test each change before you continue. + +\item {} +While you are debugging, use \sphinxcode{\sphinxupquote{TOP}} to limit the number of rows in the result. That will make each attempt run faster, which reduces your testing time. + +\item {} +Launching test queries synchronously might make them start faster, too. + +\end{itemize} + + +\section{Operators} +\label{\detokenize{01_query:operators}} +In a \sphinxcode{\sphinxupquote{WHERE}} clause, you can use any of the \sphinxhref{https://www.w3schools.com/sql/sql\_operators.asp}{SQL comparison operators}; here are the most common ones: + + +\begin{savenotes}\sphinxattablestart +\centering +\begin{tabulary}{\linewidth}[t]{|T|T|} +\hline +\sphinxstyletheadfamily +Symbol +&\sphinxstyletheadfamily +Operation +\\ +\hline +\sphinxcode{\sphinxupquote{\textgreater{}}} +& +greater than +\\ +\hline +\sphinxcode{\sphinxupquote{\textless{}}} +& +less than +\\ +\hline +\sphinxcode{\sphinxupquote{\textgreater{}=}} +& +greater than or equal +\\ +\hline +\sphinxcode{\sphinxupquote{\textless{}=}} +& +less than or equal +\\ +\hline +\sphinxcode{\sphinxupquote{=}} +& +equal +\\ +\hline +\sphinxcode{\sphinxupquote{!=}} or \sphinxcode{\sphinxupquote{\textless{}\textgreater{}}} +& +not equal +\\ +\hline +\end{tabulary} +\par +\sphinxattableend\end{savenotes} + +Most of these are the same as Python, but some are not. In particular, notice that the equality operator is \sphinxcode{\sphinxupquote{=}}, not \sphinxcode{\sphinxupquote{==}}. +Be careful to keep your Python out of your ADQL! + +You can combine comparisons using the logical operators: +\begin{itemize} +\item {} +AND: true if both comparisons are true + +\item {} +OR: true if either or both comparisons are true + +\end{itemize} + +Finally, you can use \sphinxcode{\sphinxupquote{NOT}} to invert the result of a comparison. + +\sphinxstylestrong{Exercise:} \sphinxhref{https://www.w3schools.com/sql/sql\_operators.asp}{Read about SQL operators here} and then modify the previous query to select rows where \sphinxcode{\sphinxupquote{bp\_rp}} is between \sphinxcode{\sphinxupquote{\sphinxhyphen{}0.75}} and \sphinxcode{\sphinxupquote{2}}. + +You can \sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Gaia\_archive/chap\_datamodel/sec\_dm\_main\_tables/ssec\_dm\_gaia\_source.html}{read about this variable here}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{c+c1}{\PYGZsh{} This is what most people will probably do} + +\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 10} +\PYG{l+s+s2}{source\PYGZus{}id, ref\PYGZus{}epoch, ra, dec, parallax} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1 } +\PYG{l+s+s2}{ AND bp\PYGZus{}rp \PYGZgt{} \PYGZhy{}0.75 AND bp\PYGZus{}rp \PYGZlt{} 2} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{c+c1}{\PYGZsh{} But if someone notices the BETWEEN operator, } +\PYG{c+c1}{\PYGZsh{} they might do this} + +\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 10} +\PYG{l+s+s2}{source\PYGZus{}id, ref\PYGZus{}epoch, ra, dec, parallax} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1 } +\PYG{l+s+s2}{ AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +This \sphinxhref{https://sci.esa.int/web/gaia/-/60198-gaia-hertzsprung-russell-diagram}{Hertzsprung\sphinxhyphen{}Russell diagram} shows the BP\sphinxhyphen{}RP color and luminosity of stars in the Gaia catalog. + +Selecting stars with \sphinxcode{\sphinxupquote{bp\sphinxhyphen{}rp}} less than 2 excludes many \sphinxhref{https://xkcd.com/2360/}{class M dwarf stars}, which are low temperature, low luminosity. A star like that at GD\sphinxhyphen{}1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + + +\section{Cleaning up} +\label{\detokenize{01_query:cleaning-up}} +Asynchronous jobs have a \sphinxcode{\sphinxupquote{jobid}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job1}\PYG{o}{.}\PYG{n}{jobid}\PYG{p}{,} \PYG{n}{job2}\PYG{o}{.}\PYG{n}{jobid} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(None, \PYGZsq{}1601903242219O\PYGZsq{}) +\end{sphinxVerbatim} + +Which you can use to remove the job from the server. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{remove\PYGZus{}jobs}\PYG{p}{(}\PYG{p}{[}\PYG{n}{job2}\PYG{o}{.}\PYG{n}{jobid}\PYG{p}{]}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Removed jobs: \PYGZsq{}[\PYGZsq{}1601903242219O\PYGZsq{}]\PYGZsq{}. +\end{sphinxVerbatim} + +If you don’t remove it job from the server, it will be removed eventually, so don’t feel too bad if you don’t clean up after yourself. + + +\section{Formatting queries} +\label{\detokenize{01_query:formatting-queries}} +So far the queries have been string “literals”, meaning that the entire string is part of the program. +But writing queries yourself can be slow, repetitive, and error\sphinxhyphen{}prone. + +It is often a good idea to write Python code that assembles a query for you. One useful tool for that is the \sphinxhref{https://www.w3schools.com/python/ref\_string\_format.asp}{string \sphinxcode{\sphinxupquote{format}} method}. + +As an example, we’ll divide the previous query into two parts; a list of column names and a “base” for the query that contains everything except the column names. + +Here’s the list of columns we’ll select. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{columns} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity}\PYG{l+s+s1}{\PYGZsq{}} +\end{sphinxVerbatim} + +And here’s the base; it’s a string that contains at least one format specifier in curly brackets (braces). + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query3\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 10 } +\PYG{l+s+si}{\PYGZob{}columns\PYGZcb{}} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1} +\PYG{l+s+s2}{ AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +This base query contains one format specifier, \sphinxcode{\sphinxupquote{\{columns\}}}, which is a placeholder for the list of column names we will provide. + +To assemble the query, we invoke \sphinxcode{\sphinxupquote{format}} on the base string and provide a keyword argument that assigns a value to \sphinxcode{\sphinxupquote{columns}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query3} \PYG{o}{=} \PYG{n}{query3\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{columns}\PYG{o}{=}\PYG{n}{columns}\PYG{p}{)} +\end{sphinxVerbatim} + +The result is a string with line breaks. If you display it, the line breaks appear as \sphinxcode{\sphinxupquote{\textbackslash{}n}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query3} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZsq{}SELECT TOP 10 \PYGZbs{}nsource\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity\PYGZbs{}nFROM gaiadr2.gaia\PYGZus{}source\PYGZbs{}nWHERE parallax \PYGZlt{} 1\PYGZbs{}n AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2\PYGZbs{}n\PYGZsq{} +\end{sphinxVerbatim} + +But if you print it, the line breaks appear as… line breaks. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{query3}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +SELECT TOP 10 +source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity +FROM gaiadr2.gaia\PYGZus{}source +WHERE parallax \PYGZlt{} 1 + AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 +\end{sphinxVerbatim} + +Notice that the format specifier has been replaced with the value of \sphinxcode{\sphinxupquote{columns}}. + +Let’s run it and see if it works: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job3} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job}\PYG{p}{(}\PYG{n}{query3}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{job3}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=10\PYGZgt{} + name dtype unit description n\PYGZus{}bad +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} + source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) 0 + ra float64 deg Right ascension 0 + dec float64 deg Declination 0 + pmra float64 mas / yr Proper motion in right ascension direction 0 + pmdec float64 mas / yr Proper motion in declination direction 0 + parallax float64 mas Parallax 0 + parallax\PYGZus{}error float64 mas Standard error of parallax 0 +radial\PYGZus{}velocity float64 km / s Radial velocity 10 +Jobid: None +Phase: COMPLETED +Owner: None +Output file: sync\PYGZus{}20201005090726.xml.gz +Results: None +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results3} \PYG{o}{=} \PYG{n}{job3}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{results3} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=10\PYGZgt{} + source\PYGZus{}id ra ... parallax\PYGZus{}error radial\PYGZus{}velocity + deg ... mas km / s + int64 float64 ... float64 float64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} ... \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +4467710915011802624 269.9680969307347 ... 0.470352406647465 \PYGZhy{}\PYGZhy{} +4467706551328679552 270.033164589881 ... 0.927008559859825 \PYGZhy{}\PYGZhy{} +4467712255037300096 270.7724717923047 ... 0.9719742773203504 \PYGZhy{}\PYGZhy{} +4467735001181761792 270.3628606248308 ... 0.509812721702093 \PYGZhy{}\PYGZhy{} +4467737101421916672 270.5110834661444 ... 0.7549581886719651 \PYGZhy{}\PYGZhy{} +4467707547757327488 269.88746280594927 ... 0.3022057897812064 \PYGZhy{}\PYGZhy{} +4467732355491087744 270.6730790702491 ... 0.4937921513912002 \PYGZhy{}\PYGZhy{} +4467717099766944512 270.57667173120825 ... 0.8867339293525688 \PYGZhy{}\PYGZhy{} +4467719058265781248 270.7248052971514 ... 0.390952370410666 \PYGZhy{}\PYGZhy{} +4467722326741572352 270.87431291888504 ... 0.1660452431882023 \PYGZhy{}\PYGZhy{} +\end{sphinxVerbatim} + +Good so far. + +\sphinxstylestrong{Exercise:} This query always selects sources with \sphinxcode{\sphinxupquote{parallax}} less than 1. But suppose you want to take that upper bound as an input. + +Modify \sphinxcode{\sphinxupquote{query3\_base}} to replace \sphinxcode{\sphinxupquote{1}} with a format specifier like \sphinxcode{\sphinxupquote{\{max\_parallax\}}}. Now, when you call \sphinxcode{\sphinxupquote{format}}, add a keyword argument that assigns a value to \sphinxcode{\sphinxupquote{max\_parallax}}, and confirm that the format specifier gets replaced with the value you provide. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query4\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 10} +\PYG{l+s+si}{\PYGZob{}columns\PYGZcb{}} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} }\PYG{l+s+si}{\PYGZob{}max\PYGZus{}parallax\PYGZcb{}}\PYG{l+s+s2}{ AND } +\PYG{l+s+s2}{bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query4} \PYG{o}{=} \PYG{n}{query4\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{columns}\PYG{o}{=}\PYG{n}{columns}\PYG{p}{,} + \PYG{n}{max\PYGZus{}parallax}\PYG{o}{=}\PYG{l+m+mf}{0.5}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +SELECT TOP 10 +source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity +FROM gaiadr2.gaia\PYGZus{}source +WHERE parallax \PYGZlt{} 0.5 AND +bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 +\end{sphinxVerbatim} + +\sphinxstylestrong{Style note:} You might notice that the variable names in this notebook are numbered, like \sphinxcode{\sphinxupquote{query1}}, \sphinxcode{\sphinxupquote{query2}}, etc. + +The advantage of this style is that it isolates each section of the notebook from the others, so if you go back and run the cells out of order, it’s less likely that you will get unexpected interactions. + +A drawback of this style is that it can be a nuisance to update the notebook if you add, remove, or reorder a section. + +What do you think of this choice? Are there alternatives you prefer? + + +\section{Summary} +\label{\detokenize{01_query:summary}} +This notebook demonstrates the following steps: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Making a connection to the Gaia server, + +\item {} +Exploring information about the database and the tables it contains, + +\item {} +Writing a query and sending it to the server, and finally + +\item {} +Downloading the response from the server as an Astropy \sphinxcode{\sphinxupquote{Table}}. + +\end{enumerate} + + +\section{Best practices} +\label{\detokenize{01_query:best-practices}}\begin{itemize} +\item {} +If you can’t download an entire dataset (or it’s not practical) use queries to select the data you need. + +\item {} +Read the metadata and the documentation to make sure you understand the tables, their columns, and what they mean. + +\item {} +Develop queries incrementally: start with something simple, test it, and add a little bit at a time. + +\item {} +Use ADQL features like \sphinxcode{\sphinxupquote{TOP}} and \sphinxcode{\sphinxupquote{COUNT}} to test before you run a query that might return a lot of data. + +\item {} +If you know your query will return fewer than 3000 rows, you can run it synchronously, which might complete faster (but it doesn’t seem to make much difference). If it might return more than 3000 rows, you should run it asynchronously. + +\item {} +ADQL and SQL are not case\sphinxhyphen{}sensitive, so you don’t have to capitalize the keywords, but you should. + +\item {} +ADQL and SQL don’t require you to break a query into multiple lines, but you should. + +\end{itemize} + +Jupyter notebooks can be good for developing and testing code, but they have some drawbacks. In particular, if you run the cells out of order, you might find that variables don’t have the values you expect. + +There are a few things you can do to mitigate these problems: +\begin{itemize} +\item {} +Make each section of the notebook self\sphinxhyphen{}contained. Try not to use the same variable name in more than one section. + +\item {} +Keep notebooks short. Look for places where you can break your analysis into phases with one notebook per phase. + +\end{itemize} + + +\chapter{Chapter 2} +\label{\detokenize{02_coords:chapter-2}}\label{\detokenize{02_coords::doc}} +This is the second in a series of notebooks related to astronomy data. + +As a running example, we are replicating parts of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +In the first notebook, we wrote ADQL queries and used them to select and download data from the Gaia server. + +In this notebook, we’ll pick up where we left off and write a query to select stars from the region of the sky where we expect GD\sphinxhyphen{}1 to be. + + +\section{Outline} +\label{\detokenize{02_coords:outline}} +We’ll start with an example that does a “cone search”; that is, it selects stars that appear in a circular region of the sky. + +Then, to select stars in the vicinity of GD\sphinxhyphen{}1, we’ll: +\begin{itemize} +\item {} +Use \sphinxcode{\sphinxupquote{Quantity}} objects to represent measurements with units. + +\item {} +Use the \sphinxcode{\sphinxupquote{Gala}} library to convert coordinates from one frame to another. + +\item {} +Use the ADQL keywords \sphinxcode{\sphinxupquote{POLYGON}}, \sphinxcode{\sphinxupquote{CONTAINS}}, and \sphinxcode{\sphinxupquote{POINT}} to select stars that fall within a polygonal region. + +\item {} +Submit a query and download the results. + +\item {} +Store the results in a FITS file. + +\end{itemize} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Use Python string formatting to compose more complex ADQL queries. + +\item {} +Work with coordinates and other quantities that have units. + +\item {} +Download the results of a query and store them in a file. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{02_coords:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia +\end{sphinxVerbatim} + + +\section{Selecting a region} +\label{\detokenize{02_coords:selecting-a-region}} +One of the most common ways to restrict a query is to select stars in a particular region of the sky. + +For example, here’s a query from the \sphinxhref{https://gea.esac.esa.int/archive-help/adql/examples/index.html}{Gaia archive documentation} that selects “all the objects … in a circular region centered at (266.41683, \sphinxhyphen{}29.00781) with a search radius of 5 arcmin (0.08333 deg).” + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\PYG{l+s+s2}{SELECT } +\PYG{l+s+s2}{TOP 10 source\PYGZus{}id} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE 1=CONTAINS(} +\PYG{l+s+s2}{ POINT(ra, dec),} +\PYG{l+s+s2}{ CIRCLE(266.41683, \PYGZhy{}29.00781, 0.08333333))} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +This query uses three keywords that are specific to ADQL (not SQL): +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{POINT}}: a location in \sphinxhref{https://en.wikipedia.org/wiki/International\_Celestial\_Reference\_System}{ICRS coordinates}, specified in degrees of right ascension and declination. + +\item {} +\sphinxcode{\sphinxupquote{CIRCLE}}: a circle where the first two values are the coordinates of the center and the third is the radius in degrees. + +\item {} +\sphinxcode{\sphinxupquote{CONTAINS}}: a function that returns \sphinxcode{\sphinxupquote{1}} if a \sphinxcode{\sphinxupquote{POINT}} is contained in a shape and \sphinxcode{\sphinxupquote{0}} otherwise. + +\end{itemize} + +Here is the \sphinxhref{http://www.ivoa.net/documents/ADQL/20180112/PR-ADQL-2.1-20180112.html\#tth\_sEc4.2.12}{documentation of \sphinxcode{\sphinxupquote{CONTAINS}}}. + +A query like this is called a cone search because it selects stars in a cone. + +Here’s how we run it. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astroquery}\PYG{n+nn}{.}\PYG{n+nn}{gaia} \PYG{k+kn}{import} \PYG{n}{Gaia} + +\PYG{n}{job} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\PYG{n}{result} \PYG{o}{=} \PYG{n}{job}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{result} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: gea.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: geadata.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=10\PYGZgt{} + source\PYGZus{}id + int64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +4057468321929794432 +4057468287575835392 +4057482027171038976 +4057470349160630656 +4057470039924301696 +4057469868125641984 +4057468351995073024 +4057469661959554560 +4057470520960672640 +4057470555320409600 +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} When you are debugging queries like this, you can use \sphinxcode{\sphinxupquote{TOP}} to limit the size of the results, but then you still don’t know how big the results will be. + +An alternative is to use \sphinxcode{\sphinxupquote{COUNT}}, which asks for the number of rows that would be selected, but it does not return them. + +In the previous query, replace \sphinxcode{\sphinxupquote{TOP 10 source\_id}} with \sphinxcode{\sphinxupquote{COUNT(source\_id)}} and run the query again. How many stars has Gaia identified in the cone we searched? + + +\section{Getting GD\sphinxhyphen{}1 Data} +\label{\detokenize{02_coords:getting-gd-1-data}} +From the Price\sphinxhyphen{}Whelan and Bonaca paper, we will try to reproduce Figure 1, which includes this representation of stars likely to belong to GD\sphinxhyphen{}1: + + + +Along the axis of right ascension (\(\phi_1\)) the figure extends from \sphinxhyphen{}100 to 20 degrees. + +Along the axis of declination (\(\phi_2\)) the figure extends from about \sphinxhyphen{}8 to 4 degrees. + +Ideally, we would select all stars from this rectangle, but there are more than 10 million of them, so +\begin{itemize} +\item {} +That would be difficult to work with, + +\item {} +As anonymous users, we are limited to 3 million rows in a single query, and + +\item {} +While we are developing and testing code, it will be faster to work with a smaller dataset. + +\end{itemize} + +So we’ll start by selecting stars in a smaller rectangle, from \sphinxhyphen{}55 to \sphinxhyphen{}45 degrees right ascension and \sphinxhyphen{}8 to 4 degrees of declination. + +But first we let’s see how to represent quantities with units like degrees. + + +\section{Working with coordinates} +\label{\detokenize{02_coords:working-with-coordinates}} +Coordinates are physical quantities, which means that they have two parts, a value and a unit. + +For example, the coordinate \(30^{\circ}\) has value 30 and its units are degrees. + +Until recently, most scientific computation was done with values only; units were left out of the program altogether, \sphinxhref{https://en.wikipedia.org/wiki/Mars\_Climate\_Orbiter\#Cause\_of\_failure}{often with disastrous results}. + +Astropy provides tools for including units explicitly in computations, which makes it possible to detect errors before they cause disasters. + +To use Astropy units, we import them like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{units} \PYG{k}{as} \PYG{n+nn}{u} + +\PYG{n}{u} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}module \PYGZsq{}astropy.units\PYGZsq{} from \PYGZsq{}/home/downey/anaconda3/envs/AstronomicalData/lib/python3.8/site\PYGZhy{}packages/astropy/units/\PYGZus{}\PYGZus{}init\PYGZus{}\PYGZus{}.py\PYGZsq{}\PYGZgt{} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{u}} is an object that contains most common units and all SI units. + +You can use \sphinxcode{\sphinxupquote{dir}} to list them, but you should also \sphinxhref{https://docs.astropy.org/en/stable/units/}{read the documentation}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{dir}\PYG{p}{(}\PYG{n}{u}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}A\PYGZsq{}, + \PYGZsq{}AA\PYGZsq{}, + \PYGZsq{}AB\PYGZsq{}, + \PYGZsq{}ABflux\PYGZsq{}, + \PYGZsq{}ABmag\PYGZsq{}, + \PYGZsq{}AU\PYGZsq{}, + \PYGZsq{}Angstrom\PYGZsq{}, + \PYGZsq{}B\PYGZsq{}, + \PYGZsq{}Ba\PYGZsq{}, + \PYGZsq{}Barye\PYGZsq{}, + \PYGZsq{}Bi\PYGZsq{}, + \PYGZsq{}Biot\PYGZsq{}, + \PYGZsq{}Bol\PYGZsq{}, + \PYGZsq{}Bq\PYGZsq{}, + \PYGZsq{}C\PYGZsq{}, + \PYGZsq{}Celsius\PYGZsq{}, + \PYGZsq{}Ci\PYGZsq{}, + \PYGZsq{}CompositeUnit\PYGZsq{}, + \PYGZsq{}D\PYGZsq{}, + \PYGZsq{}Da\PYGZsq{}, + \PYGZsq{}Dalton\PYGZsq{}, + \PYGZsq{}Debye\PYGZsq{}, + \PYGZsq{}Decibel\PYGZsq{}, + \PYGZsq{}DecibelUnit\PYGZsq{}, + \PYGZsq{}Dex\PYGZsq{}, + \PYGZsq{}DexUnit\PYGZsq{}, + \PYGZsq{}EA\PYGZsq{}, + \PYGZsq{}EAU\PYGZsq{}, + \PYGZsq{}EB\PYGZsq{}, + \PYGZsq{}EBa\PYGZsq{}, + \PYGZsq{}EC\PYGZsq{}, + \PYGZsq{}ED\PYGZsq{}, + \PYGZsq{}EF\PYGZsq{}, + \PYGZsq{}EG\PYGZsq{}, + \PYGZsq{}EGal\PYGZsq{}, + \PYGZsq{}EH\PYGZsq{}, + \PYGZsq{}EHz\PYGZsq{}, + \PYGZsq{}EJ\PYGZsq{}, + \PYGZsq{}EJy\PYGZsq{}, + \PYGZsq{}EK\PYGZsq{}, + \PYGZsq{}EL\PYGZsq{}, + \PYGZsq{}EN\PYGZsq{}, + \PYGZsq{}EOhm\PYGZsq{}, + \PYGZsq{}EP\PYGZsq{}, + \PYGZsq{}EPa\PYGZsq{}, + \PYGZsq{}ER\PYGZsq{}, + \PYGZsq{}ERy\PYGZsq{}, + \PYGZsq{}ES\PYGZsq{}, + \PYGZsq{}ESt\PYGZsq{}, + \PYGZsq{}ET\PYGZsq{}, + \PYGZsq{}EV\PYGZsq{}, + \PYGZsq{}EW\PYGZsq{}, + \PYGZsq{}EWb\PYGZsq{}, + \PYGZsq{}Ea\PYGZsq{}, + \PYGZsq{}Eadu\PYGZsq{}, + \PYGZsq{}Earcmin\PYGZsq{}, + \PYGZsq{}Earcsec\PYGZsq{}, + \PYGZsq{}Eau\PYGZsq{}, + \PYGZsq{}Eb\PYGZsq{}, + \PYGZsq{}Ebarn\PYGZsq{}, + \PYGZsq{}Ebeam\PYGZsq{}, + \PYGZsq{}Ebin\PYGZsq{}, + \PYGZsq{}Ebit\PYGZsq{}, + \PYGZsq{}Ebyte\PYGZsq{}, + \PYGZsq{}Ecd\PYGZsq{}, + \PYGZsq{}Echan\PYGZsq{}, + \PYGZsq{}Ecount\PYGZsq{}, + \PYGZsq{}Ect\PYGZsq{}, + \PYGZsq{}Ed\PYGZsq{}, + \PYGZsq{}Edeg\PYGZsq{}, + \PYGZsq{}Edyn\PYGZsq{}, + \PYGZsq{}EeV\PYGZsq{}, + \PYGZsq{}Eerg\PYGZsq{}, + \PYGZsq{}Eg\PYGZsq{}, + \PYGZsq{}Eh\PYGZsq{}, + \PYGZsq{}EiB\PYGZsq{}, + \PYGZsq{}Eib\PYGZsq{}, + \PYGZsq{}Eibit\PYGZsq{}, + \PYGZsq{}Eibyte\PYGZsq{}, + \PYGZsq{}Ek\PYGZsq{}, + \PYGZsq{}El\PYGZsq{}, + \PYGZsq{}Elm\PYGZsq{}, + \PYGZsq{}Elx\PYGZsq{}, + \PYGZsq{}Elyr\PYGZsq{}, + \PYGZsq{}Em\PYGZsq{}, + \PYGZsq{}Emag\PYGZsq{}, + \PYGZsq{}Emin\PYGZsq{}, + \PYGZsq{}Emol\PYGZsq{}, + \PYGZsq{}Eohm\PYGZsq{}, + \PYGZsq{}Epc\PYGZsq{}, + \PYGZsq{}Eph\PYGZsq{}, + \PYGZsq{}Ephoton\PYGZsq{}, + \PYGZsq{}Epix\PYGZsq{}, + \PYGZsq{}Epixel\PYGZsq{}, + \PYGZsq{}Erad\PYGZsq{}, + \PYGZsq{}Es\PYGZsq{}, + \PYGZsq{}Esr\PYGZsq{}, + \PYGZsq{}Eu\PYGZsq{}, + \PYGZsq{}Evox\PYGZsq{}, + \PYGZsq{}Evoxel\PYGZsq{}, + \PYGZsq{}Eyr\PYGZsq{}, + \PYGZsq{}F\PYGZsq{}, + \PYGZsq{}Farad\PYGZsq{}, + \PYGZsq{}Fr\PYGZsq{}, + \PYGZsq{}Franklin\PYGZsq{}, + \PYGZsq{}FunctionQuantity\PYGZsq{}, + \PYGZsq{}FunctionUnitBase\PYGZsq{}, + \PYGZsq{}G\PYGZsq{}, + \PYGZsq{}GA\PYGZsq{}, + \PYGZsq{}GAU\PYGZsq{}, + \PYGZsq{}GB\PYGZsq{}, + \PYGZsq{}GBa\PYGZsq{}, + \PYGZsq{}GC\PYGZsq{}, + \PYGZsq{}GD\PYGZsq{}, + \PYGZsq{}GF\PYGZsq{}, + \PYGZsq{}GG\PYGZsq{}, + \PYGZsq{}GGal\PYGZsq{}, + \PYGZsq{}GH\PYGZsq{}, + \PYGZsq{}GHz\PYGZsq{}, + \PYGZsq{}GJ\PYGZsq{}, + \PYGZsq{}GJy\PYGZsq{}, + \PYGZsq{}GK\PYGZsq{}, + \PYGZsq{}GL\PYGZsq{}, + \PYGZsq{}GN\PYGZsq{}, + \PYGZsq{}GOhm\PYGZsq{}, + \PYGZsq{}GP\PYGZsq{}, + \PYGZsq{}GPa\PYGZsq{}, + \PYGZsq{}GR\PYGZsq{}, + \PYGZsq{}GRy\PYGZsq{}, + \PYGZsq{}GS\PYGZsq{}, + \PYGZsq{}GSt\PYGZsq{}, + \PYGZsq{}GT\PYGZsq{}, + \PYGZsq{}GV\PYGZsq{}, + \PYGZsq{}GW\PYGZsq{}, + \PYGZsq{}GWb\PYGZsq{}, + \PYGZsq{}Ga\PYGZsq{}, + \PYGZsq{}Gadu\PYGZsq{}, + \PYGZsq{}Gal\PYGZsq{}, + \PYGZsq{}Garcmin\PYGZsq{}, + \PYGZsq{}Garcsec\PYGZsq{}, + \PYGZsq{}Gau\PYGZsq{}, + \PYGZsq{}Gauss\PYGZsq{}, + \PYGZsq{}Gb\PYGZsq{}, + \PYGZsq{}Gbarn\PYGZsq{}, + \PYGZsq{}Gbeam\PYGZsq{}, + \PYGZsq{}Gbin\PYGZsq{}, + \PYGZsq{}Gbit\PYGZsq{}, + \PYGZsq{}Gbyte\PYGZsq{}, + \PYGZsq{}Gcd\PYGZsq{}, + \PYGZsq{}Gchan\PYGZsq{}, + \PYGZsq{}Gcount\PYGZsq{}, + \PYGZsq{}Gct\PYGZsq{}, + \PYGZsq{}Gd\PYGZsq{}, + \PYGZsq{}Gdeg\PYGZsq{}, + \PYGZsq{}Gdyn\PYGZsq{}, + \PYGZsq{}GeV\PYGZsq{}, + \PYGZsq{}Gerg\PYGZsq{}, + \PYGZsq{}Gg\PYGZsq{}, + \PYGZsq{}Gh\PYGZsq{}, + \PYGZsq{}GiB\PYGZsq{}, + \PYGZsq{}Gib\PYGZsq{}, + \PYGZsq{}Gibit\PYGZsq{}, + \PYGZsq{}Gibyte\PYGZsq{}, + \PYGZsq{}Gk\PYGZsq{}, + \PYGZsq{}Gl\PYGZsq{}, + \PYGZsq{}Glm\PYGZsq{}, + \PYGZsq{}Glx\PYGZsq{}, + \PYGZsq{}Glyr\PYGZsq{}, + \PYGZsq{}Gm\PYGZsq{}, + \PYGZsq{}Gmag\PYGZsq{}, + \PYGZsq{}Gmin\PYGZsq{}, + \PYGZsq{}Gmol\PYGZsq{}, + \PYGZsq{}Gohm\PYGZsq{}, + \PYGZsq{}Gpc\PYGZsq{}, + \PYGZsq{}Gph\PYGZsq{}, + \PYGZsq{}Gphoton\PYGZsq{}, + \PYGZsq{}Gpix\PYGZsq{}, + \PYGZsq{}Gpixel\PYGZsq{}, + \PYGZsq{}Grad\PYGZsq{}, + \PYGZsq{}Gs\PYGZsq{}, + \PYGZsq{}Gsr\PYGZsq{}, + \PYGZsq{}Gu\PYGZsq{}, + \PYGZsq{}Gvox\PYGZsq{}, + \PYGZsq{}Gvoxel\PYGZsq{}, + \PYGZsq{}Gyr\PYGZsq{}, + \PYGZsq{}H\PYGZsq{}, + \PYGZsq{}Henry\PYGZsq{}, + \PYGZsq{}Hertz\PYGZsq{}, + \PYGZsq{}Hz\PYGZsq{}, + \PYGZsq{}IrreducibleUnit\PYGZsq{}, + \PYGZsq{}J\PYGZsq{}, + \PYGZsq{}Jansky\PYGZsq{}, + \PYGZsq{}Joule\PYGZsq{}, + \PYGZsq{}Jy\PYGZsq{}, + \PYGZsq{}K\PYGZsq{}, + \PYGZsq{}Kayser\PYGZsq{}, + \PYGZsq{}Kelvin\PYGZsq{}, + \PYGZsq{}KiB\PYGZsq{}, + \PYGZsq{}Kib\PYGZsq{}, + \PYGZsq{}Kibit\PYGZsq{}, + \PYGZsq{}Kibyte\PYGZsq{}, + \PYGZsq{}L\PYGZsq{}, + \PYGZsq{}L\PYGZus{}bol\PYGZsq{}, + \PYGZsq{}L\PYGZus{}sun\PYGZsq{}, + \PYGZsq{}LogQuantity\PYGZsq{}, + \PYGZsq{}LogUnit\PYGZsq{}, + \PYGZsq{}Lsun\PYGZsq{}, + \PYGZsq{}MA\PYGZsq{}, + \PYGZsq{}MAU\PYGZsq{}, + \PYGZsq{}MB\PYGZsq{}, + \PYGZsq{}MBa\PYGZsq{}, + \PYGZsq{}MC\PYGZsq{}, + \PYGZsq{}MD\PYGZsq{}, + \PYGZsq{}MF\PYGZsq{}, + \PYGZsq{}MG\PYGZsq{}, + \PYGZsq{}MGal\PYGZsq{}, + \PYGZsq{}MH\PYGZsq{}, + \PYGZsq{}MHz\PYGZsq{}, + \PYGZsq{}MJ\PYGZsq{}, + \PYGZsq{}MJy\PYGZsq{}, + \PYGZsq{}MK\PYGZsq{}, + \PYGZsq{}ML\PYGZsq{}, + \PYGZsq{}MN\PYGZsq{}, + \PYGZsq{}MOhm\PYGZsq{}, + \PYGZsq{}MP\PYGZsq{}, + \PYGZsq{}MPa\PYGZsq{}, + \PYGZsq{}MR\PYGZsq{}, + \PYGZsq{}MRy\PYGZsq{}, + \PYGZsq{}MS\PYGZsq{}, + \PYGZsq{}MSt\PYGZsq{}, + \PYGZsq{}MT\PYGZsq{}, + \PYGZsq{}MV\PYGZsq{}, + \PYGZsq{}MW\PYGZsq{}, + \PYGZsq{}MWb\PYGZsq{}, + \PYGZsq{}M\PYGZus{}bol\PYGZsq{}, + \PYGZsq{}M\PYGZus{}e\PYGZsq{}, + \PYGZsq{}M\PYGZus{}earth\PYGZsq{}, + \PYGZsq{}M\PYGZus{}jup\PYGZsq{}, + \PYGZsq{}M\PYGZus{}jupiter\PYGZsq{}, + \PYGZsq{}M\PYGZus{}p\PYGZsq{}, + \PYGZsq{}M\PYGZus{}sun\PYGZsq{}, + \PYGZsq{}Ma\PYGZsq{}, + \PYGZsq{}Madu\PYGZsq{}, + \PYGZsq{}MagUnit\PYGZsq{}, + \PYGZsq{}Magnitude\PYGZsq{}, + \PYGZsq{}Marcmin\PYGZsq{}, + \PYGZsq{}Marcsec\PYGZsq{}, + \PYGZsq{}Mau\PYGZsq{}, + \PYGZsq{}Mb\PYGZsq{}, + \PYGZsq{}Mbarn\PYGZsq{}, + \PYGZsq{}Mbeam\PYGZsq{}, + \PYGZsq{}Mbin\PYGZsq{}, + \PYGZsq{}Mbit\PYGZsq{}, + \PYGZsq{}Mbyte\PYGZsq{}, + \PYGZsq{}Mcd\PYGZsq{}, + \PYGZsq{}Mchan\PYGZsq{}, + \PYGZsq{}Mcount\PYGZsq{}, + \PYGZsq{}Mct\PYGZsq{}, + \PYGZsq{}Md\PYGZsq{}, + \PYGZsq{}Mdeg\PYGZsq{}, + \PYGZsq{}Mdyn\PYGZsq{}, + \PYGZsq{}MeV\PYGZsq{}, + \PYGZsq{}Mearth\PYGZsq{}, + \PYGZsq{}Merg\PYGZsq{}, + \PYGZsq{}Mg\PYGZsq{}, + \PYGZsq{}Mh\PYGZsq{}, + \PYGZsq{}MiB\PYGZsq{}, + \PYGZsq{}Mib\PYGZsq{}, + \PYGZsq{}Mibit\PYGZsq{}, + \PYGZsq{}Mibyte\PYGZsq{}, + \PYGZsq{}Mjup\PYGZsq{}, + \PYGZsq{}Mjupiter\PYGZsq{}, + \PYGZsq{}Mk\PYGZsq{}, + \PYGZsq{}Ml\PYGZsq{}, + \PYGZsq{}Mlm\PYGZsq{}, + \PYGZsq{}Mlx\PYGZsq{}, + \PYGZsq{}Mlyr\PYGZsq{}, + \PYGZsq{}Mm\PYGZsq{}, + \PYGZsq{}Mmag\PYGZsq{}, + \PYGZsq{}Mmin\PYGZsq{}, + \PYGZsq{}Mmol\PYGZsq{}, + \PYGZsq{}Mohm\PYGZsq{}, + \PYGZsq{}Mpc\PYGZsq{}, + \PYGZsq{}Mph\PYGZsq{}, + \PYGZsq{}Mphoton\PYGZsq{}, + \PYGZsq{}Mpix\PYGZsq{}, + \PYGZsq{}Mpixel\PYGZsq{}, + \PYGZsq{}Mrad\PYGZsq{}, + \PYGZsq{}Ms\PYGZsq{}, + \PYGZsq{}Msr\PYGZsq{}, + \PYGZsq{}Msun\PYGZsq{}, + \PYGZsq{}Mu\PYGZsq{}, + \PYGZsq{}Mvox\PYGZsq{}, + \PYGZsq{}Mvoxel\PYGZsq{}, + \PYGZsq{}Myr\PYGZsq{}, + \PYGZsq{}N\PYGZsq{}, + \PYGZsq{}NamedUnit\PYGZsq{}, + \PYGZsq{}Newton\PYGZsq{}, + \PYGZsq{}Ohm\PYGZsq{}, + \PYGZsq{}P\PYGZsq{}, + \PYGZsq{}PA\PYGZsq{}, + \PYGZsq{}PAU\PYGZsq{}, + \PYGZsq{}PB\PYGZsq{}, + \PYGZsq{}PBa\PYGZsq{}, + \PYGZsq{}PC\PYGZsq{}, + \PYGZsq{}PD\PYGZsq{}, + \PYGZsq{}PF\PYGZsq{}, + \PYGZsq{}PG\PYGZsq{}, + \PYGZsq{}PGal\PYGZsq{}, + \PYGZsq{}PH\PYGZsq{}, + \PYGZsq{}PHz\PYGZsq{}, + \PYGZsq{}PJ\PYGZsq{}, + \PYGZsq{}PJy\PYGZsq{}, + \PYGZsq{}PK\PYGZsq{}, + \PYGZsq{}PL\PYGZsq{}, + \PYGZsq{}PN\PYGZsq{}, + \PYGZsq{}POhm\PYGZsq{}, + \PYGZsq{}PP\PYGZsq{}, + \PYGZsq{}PPa\PYGZsq{}, + \PYGZsq{}PR\PYGZsq{}, + \PYGZsq{}PRy\PYGZsq{}, + \PYGZsq{}PS\PYGZsq{}, + \PYGZsq{}PSt\PYGZsq{}, + \PYGZsq{}PT\PYGZsq{}, + \PYGZsq{}PV\PYGZsq{}, + \PYGZsq{}PW\PYGZsq{}, + \PYGZsq{}PWb\PYGZsq{}, + \PYGZsq{}Pa\PYGZsq{}, + \PYGZsq{}Padu\PYGZsq{}, + \PYGZsq{}Parcmin\PYGZsq{}, + \PYGZsq{}Parcsec\PYGZsq{}, + \PYGZsq{}Pascal\PYGZsq{}, + \PYGZsq{}Pau\PYGZsq{}, + \PYGZsq{}Pb\PYGZsq{}, + \PYGZsq{}Pbarn\PYGZsq{}, + \PYGZsq{}Pbeam\PYGZsq{}, + \PYGZsq{}Pbin\PYGZsq{}, + \PYGZsq{}Pbit\PYGZsq{}, + \PYGZsq{}Pbyte\PYGZsq{}, + \PYGZsq{}Pcd\PYGZsq{}, + \PYGZsq{}Pchan\PYGZsq{}, + \PYGZsq{}Pcount\PYGZsq{}, + \PYGZsq{}Pct\PYGZsq{}, + \PYGZsq{}Pd\PYGZsq{}, + \PYGZsq{}Pdeg\PYGZsq{}, + \PYGZsq{}Pdyn\PYGZsq{}, + \PYGZsq{}PeV\PYGZsq{}, + \PYGZsq{}Perg\PYGZsq{}, + \PYGZsq{}Pg\PYGZsq{}, + \PYGZsq{}Ph\PYGZsq{}, + \PYGZsq{}PiB\PYGZsq{}, + \PYGZsq{}Pib\PYGZsq{}, + \PYGZsq{}Pibit\PYGZsq{}, + \PYGZsq{}Pibyte\PYGZsq{}, + \PYGZsq{}Pk\PYGZsq{}, + \PYGZsq{}Pl\PYGZsq{}, + \PYGZsq{}Plm\PYGZsq{}, + \PYGZsq{}Plx\PYGZsq{}, + \PYGZsq{}Plyr\PYGZsq{}, + \PYGZsq{}Pm\PYGZsq{}, + \PYGZsq{}Pmag\PYGZsq{}, + \PYGZsq{}Pmin\PYGZsq{}, + \PYGZsq{}Pmol\PYGZsq{}, + \PYGZsq{}Pohm\PYGZsq{}, + \PYGZsq{}Ppc\PYGZsq{}, + \PYGZsq{}Pph\PYGZsq{}, + \PYGZsq{}Pphoton\PYGZsq{}, + \PYGZsq{}Ppix\PYGZsq{}, + \PYGZsq{}Ppixel\PYGZsq{}, + \PYGZsq{}Prad\PYGZsq{}, + \PYGZsq{}PrefixUnit\PYGZsq{}, + \PYGZsq{}Ps\PYGZsq{}, + \PYGZsq{}Psr\PYGZsq{}, + \PYGZsq{}Pu\PYGZsq{}, + \PYGZsq{}Pvox\PYGZsq{}, + \PYGZsq{}Pvoxel\PYGZsq{}, + \PYGZsq{}Pyr\PYGZsq{}, + \PYGZsq{}Quantity\PYGZsq{}, + \PYGZsq{}QuantityInfo\PYGZsq{}, + \PYGZsq{}QuantityInfoBase\PYGZsq{}, + \PYGZsq{}R\PYGZsq{}, + \PYGZsq{}R\PYGZus{}earth\PYGZsq{}, + \PYGZsq{}R\PYGZus{}jup\PYGZsq{}, + \PYGZsq{}R\PYGZus{}jupiter\PYGZsq{}, + \PYGZsq{}R\PYGZus{}sun\PYGZsq{}, + \PYGZsq{}Rayleigh\PYGZsq{}, + \PYGZsq{}Rearth\PYGZsq{}, + \PYGZsq{}Rjup\PYGZsq{}, + \PYGZsq{}Rjupiter\PYGZsq{}, + \PYGZsq{}Rsun\PYGZsq{}, + \PYGZsq{}Ry\PYGZsq{}, + \PYGZsq{}S\PYGZsq{}, + \PYGZsq{}ST\PYGZsq{}, + \PYGZsq{}STflux\PYGZsq{}, + \PYGZsq{}STmag\PYGZsq{}, + \PYGZsq{}Siemens\PYGZsq{}, + \PYGZsq{}SpecificTypeQuantity\PYGZsq{}, + \PYGZsq{}St\PYGZsq{}, + \PYGZsq{}Sun\PYGZsq{}, + \PYGZsq{}T\PYGZsq{}, + \PYGZsq{}TA\PYGZsq{}, + \PYGZsq{}TAU\PYGZsq{}, + \PYGZsq{}TB\PYGZsq{}, + \PYGZsq{}TBa\PYGZsq{}, + \PYGZsq{}TC\PYGZsq{}, + \PYGZsq{}TD\PYGZsq{}, + \PYGZsq{}TF\PYGZsq{}, + \PYGZsq{}TG\PYGZsq{}, + \PYGZsq{}TGal\PYGZsq{}, + \PYGZsq{}TH\PYGZsq{}, + \PYGZsq{}THz\PYGZsq{}, + \PYGZsq{}TJ\PYGZsq{}, + \PYGZsq{}TJy\PYGZsq{}, + \PYGZsq{}TK\PYGZsq{}, + \PYGZsq{}TL\PYGZsq{}, + \PYGZsq{}TN\PYGZsq{}, + \PYGZsq{}TOhm\PYGZsq{}, + \PYGZsq{}TP\PYGZsq{}, + \PYGZsq{}TPa\PYGZsq{}, + \PYGZsq{}TR\PYGZsq{}, + \PYGZsq{}TRy\PYGZsq{}, + \PYGZsq{}TS\PYGZsq{}, + \PYGZsq{}TSt\PYGZsq{}, + \PYGZsq{}TT\PYGZsq{}, + \PYGZsq{}TV\PYGZsq{}, + \PYGZsq{}TW\PYGZsq{}, + \PYGZsq{}TWb\PYGZsq{}, + \PYGZsq{}Ta\PYGZsq{}, + \PYGZsq{}Tadu\PYGZsq{}, + \PYGZsq{}Tarcmin\PYGZsq{}, + \PYGZsq{}Tarcsec\PYGZsq{}, + \PYGZsq{}Tau\PYGZsq{}, + \PYGZsq{}Tb\PYGZsq{}, + \PYGZsq{}Tbarn\PYGZsq{}, + \PYGZsq{}Tbeam\PYGZsq{}, + \PYGZsq{}Tbin\PYGZsq{}, + \PYGZsq{}Tbit\PYGZsq{}, + \PYGZsq{}Tbyte\PYGZsq{}, + \PYGZsq{}Tcd\PYGZsq{}, + \PYGZsq{}Tchan\PYGZsq{}, + \PYGZsq{}Tcount\PYGZsq{}, + \PYGZsq{}Tct\PYGZsq{}, + \PYGZsq{}Td\PYGZsq{}, + \PYGZsq{}Tdeg\PYGZsq{}, + \PYGZsq{}Tdyn\PYGZsq{}, + \PYGZsq{}TeV\PYGZsq{}, + \PYGZsq{}Terg\PYGZsq{}, + \PYGZsq{}Tesla\PYGZsq{}, + \PYGZsq{}Tg\PYGZsq{}, + \PYGZsq{}Th\PYGZsq{}, + \PYGZsq{}TiB\PYGZsq{}, + \PYGZsq{}Tib\PYGZsq{}, + \PYGZsq{}Tibit\PYGZsq{}, + \PYGZsq{}Tibyte\PYGZsq{}, + \PYGZsq{}Tk\PYGZsq{}, + \PYGZsq{}Tl\PYGZsq{}, + \PYGZsq{}Tlm\PYGZsq{}, + \PYGZsq{}Tlx\PYGZsq{}, + \PYGZsq{}Tlyr\PYGZsq{}, + \PYGZsq{}Tm\PYGZsq{}, + \PYGZsq{}Tmag\PYGZsq{}, + \PYGZsq{}Tmin\PYGZsq{}, + \PYGZsq{}Tmol\PYGZsq{}, + \PYGZsq{}Tohm\PYGZsq{}, + \PYGZsq{}Tpc\PYGZsq{}, + \PYGZsq{}Tph\PYGZsq{}, + \PYGZsq{}Tphoton\PYGZsq{}, + \PYGZsq{}Tpix\PYGZsq{}, + \PYGZsq{}Tpixel\PYGZsq{}, + \PYGZsq{}Trad\PYGZsq{}, + \PYGZsq{}Ts\PYGZsq{}, + \PYGZsq{}Tsr\PYGZsq{}, + \PYGZsq{}Tu\PYGZsq{}, + \PYGZsq{}Tvox\PYGZsq{}, + \PYGZsq{}Tvoxel\PYGZsq{}, + \PYGZsq{}Tyr\PYGZsq{}, + \PYGZsq{}Unit\PYGZsq{}, + \PYGZsq{}UnitBase\PYGZsq{}, + \PYGZsq{}UnitConversionError\PYGZsq{}, + \PYGZsq{}UnitTypeError\PYGZsq{}, + \PYGZsq{}UnitsError\PYGZsq{}, + \PYGZsq{}UnitsWarning\PYGZsq{}, + \PYGZsq{}UnrecognizedUnit\PYGZsq{}, + \PYGZsq{}V\PYGZsq{}, + \PYGZsq{}Volt\PYGZsq{}, + \PYGZsq{}W\PYGZsq{}, + \PYGZsq{}Watt\PYGZsq{}, + \PYGZsq{}Wb\PYGZsq{}, + \PYGZsq{}Weber\PYGZsq{}, + \PYGZsq{}YA\PYGZsq{}, + \PYGZsq{}YAU\PYGZsq{}, + \PYGZsq{}YB\PYGZsq{}, + \PYGZsq{}YBa\PYGZsq{}, + \PYGZsq{}YC\PYGZsq{}, + \PYGZsq{}YD\PYGZsq{}, + \PYGZsq{}YF\PYGZsq{}, + \PYGZsq{}YG\PYGZsq{}, + \PYGZsq{}YGal\PYGZsq{}, + \PYGZsq{}YH\PYGZsq{}, + \PYGZsq{}YHz\PYGZsq{}, + \PYGZsq{}YJ\PYGZsq{}, + \PYGZsq{}YJy\PYGZsq{}, + \PYGZsq{}YK\PYGZsq{}, + \PYGZsq{}YL\PYGZsq{}, + \PYGZsq{}YN\PYGZsq{}, + \PYGZsq{}YOhm\PYGZsq{}, + \PYGZsq{}YP\PYGZsq{}, + \PYGZsq{}YPa\PYGZsq{}, + \PYGZsq{}YR\PYGZsq{}, + \PYGZsq{}YRy\PYGZsq{}, + \PYGZsq{}YS\PYGZsq{}, + \PYGZsq{}YSt\PYGZsq{}, + \PYGZsq{}YT\PYGZsq{}, + \PYGZsq{}YV\PYGZsq{}, + \PYGZsq{}YW\PYGZsq{}, + \PYGZsq{}YWb\PYGZsq{}, + \PYGZsq{}Ya\PYGZsq{}, + \PYGZsq{}Yadu\PYGZsq{}, + \PYGZsq{}Yarcmin\PYGZsq{}, + \PYGZsq{}Yarcsec\PYGZsq{}, + \PYGZsq{}Yau\PYGZsq{}, + \PYGZsq{}Yb\PYGZsq{}, + \PYGZsq{}Ybarn\PYGZsq{}, + \PYGZsq{}Ybeam\PYGZsq{}, + \PYGZsq{}Ybin\PYGZsq{}, + \PYGZsq{}Ybit\PYGZsq{}, + \PYGZsq{}Ybyte\PYGZsq{}, + \PYGZsq{}Ycd\PYGZsq{}, + \PYGZsq{}Ychan\PYGZsq{}, + \PYGZsq{}Ycount\PYGZsq{}, + \PYGZsq{}Yct\PYGZsq{}, + \PYGZsq{}Yd\PYGZsq{}, + \PYGZsq{}Ydeg\PYGZsq{}, + \PYGZsq{}Ydyn\PYGZsq{}, + \PYGZsq{}YeV\PYGZsq{}, + \PYGZsq{}Yerg\PYGZsq{}, + \PYGZsq{}Yg\PYGZsq{}, + \PYGZsq{}Yh\PYGZsq{}, + \PYGZsq{}Yk\PYGZsq{}, + \PYGZsq{}Yl\PYGZsq{}, + \PYGZsq{}Ylm\PYGZsq{}, + \PYGZsq{}Ylx\PYGZsq{}, + \PYGZsq{}Ylyr\PYGZsq{}, + \PYGZsq{}Ym\PYGZsq{}, + \PYGZsq{}Ymag\PYGZsq{}, + \PYGZsq{}Ymin\PYGZsq{}, + \PYGZsq{}Ymol\PYGZsq{}, + \PYGZsq{}Yohm\PYGZsq{}, + \PYGZsq{}Ypc\PYGZsq{}, + \PYGZsq{}Yph\PYGZsq{}, + \PYGZsq{}Yphoton\PYGZsq{}, + \PYGZsq{}Ypix\PYGZsq{}, + \PYGZsq{}Ypixel\PYGZsq{}, + \PYGZsq{}Yrad\PYGZsq{}, + \PYGZsq{}Ys\PYGZsq{}, + \PYGZsq{}Ysr\PYGZsq{}, + \PYGZsq{}Yu\PYGZsq{}, + \PYGZsq{}Yvox\PYGZsq{}, + \PYGZsq{}Yvoxel\PYGZsq{}, + \PYGZsq{}Yyr\PYGZsq{}, + \PYGZsq{}ZA\PYGZsq{}, + \PYGZsq{}ZAU\PYGZsq{}, + \PYGZsq{}ZB\PYGZsq{}, + \PYGZsq{}ZBa\PYGZsq{}, + \PYGZsq{}ZC\PYGZsq{}, + \PYGZsq{}ZD\PYGZsq{}, + \PYGZsq{}ZF\PYGZsq{}, + \PYGZsq{}ZG\PYGZsq{}, + \PYGZsq{}ZGal\PYGZsq{}, + \PYGZsq{}ZH\PYGZsq{}, + \PYGZsq{}ZHz\PYGZsq{}, + \PYGZsq{}ZJ\PYGZsq{}, + \PYGZsq{}ZJy\PYGZsq{}, + \PYGZsq{}ZK\PYGZsq{}, + \PYGZsq{}ZL\PYGZsq{}, + \PYGZsq{}ZN\PYGZsq{}, + \PYGZsq{}ZOhm\PYGZsq{}, + \PYGZsq{}ZP\PYGZsq{}, + \PYGZsq{}ZPa\PYGZsq{}, + \PYGZsq{}ZR\PYGZsq{}, + \PYGZsq{}ZRy\PYGZsq{}, + \PYGZsq{}ZS\PYGZsq{}, + \PYGZsq{}ZSt\PYGZsq{}, + \PYGZsq{}ZT\PYGZsq{}, + \PYGZsq{}ZV\PYGZsq{}, + \PYGZsq{}ZW\PYGZsq{}, + \PYGZsq{}ZWb\PYGZsq{}, + \PYGZsq{}Za\PYGZsq{}, + \PYGZsq{}Zadu\PYGZsq{}, + \PYGZsq{}Zarcmin\PYGZsq{}, + \PYGZsq{}Zarcsec\PYGZsq{}, + \PYGZsq{}Zau\PYGZsq{}, + \PYGZsq{}Zb\PYGZsq{}, + \PYGZsq{}Zbarn\PYGZsq{}, + \PYGZsq{}Zbeam\PYGZsq{}, + \PYGZsq{}Zbin\PYGZsq{}, + \PYGZsq{}Zbit\PYGZsq{}, + \PYGZsq{}Zbyte\PYGZsq{}, + \PYGZsq{}Zcd\PYGZsq{}, + \PYGZsq{}Zchan\PYGZsq{}, + \PYGZsq{}Zcount\PYGZsq{}, + \PYGZsq{}Zct\PYGZsq{}, + \PYGZsq{}Zd\PYGZsq{}, + \PYGZsq{}Zdeg\PYGZsq{}, + \PYGZsq{}Zdyn\PYGZsq{}, + \PYGZsq{}ZeV\PYGZsq{}, + \PYGZsq{}Zerg\PYGZsq{}, + \PYGZsq{}Zg\PYGZsq{}, + \PYGZsq{}Zh\PYGZsq{}, + \PYGZsq{}Zk\PYGZsq{}, + \PYGZsq{}Zl\PYGZsq{}, + \PYGZsq{}Zlm\PYGZsq{}, + \PYGZsq{}Zlx\PYGZsq{}, + \PYGZsq{}Zlyr\PYGZsq{}, + \PYGZsq{}Zm\PYGZsq{}, + \PYGZsq{}Zmag\PYGZsq{}, + \PYGZsq{}Zmin\PYGZsq{}, + \PYGZsq{}Zmol\PYGZsq{}, + \PYGZsq{}Zohm\PYGZsq{}, + \PYGZsq{}Zpc\PYGZsq{}, + \PYGZsq{}Zph\PYGZsq{}, + \PYGZsq{}Zphoton\PYGZsq{}, + \PYGZsq{}Zpix\PYGZsq{}, + \PYGZsq{}Zpixel\PYGZsq{}, + \PYGZsq{}Zrad\PYGZsq{}, + \PYGZsq{}Zs\PYGZsq{}, + \PYGZsq{}Zsr\PYGZsq{}, + \PYGZsq{}Zu\PYGZsq{}, + \PYGZsq{}Zvox\PYGZsq{}, + \PYGZsq{}Zvoxel\PYGZsq{}, + \PYGZsq{}Zyr\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}builtins\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}cached\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}doc\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}file\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}loader\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}name\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}package\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}path\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}\PYGZus{}\PYGZus{}spec\PYGZus{}\PYGZus{}\PYGZsq{}, + \PYGZsq{}a\PYGZsq{}, + \PYGZsq{}aA\PYGZsq{}, + \PYGZsq{}aAU\PYGZsq{}, + \PYGZsq{}aB\PYGZsq{}, + \PYGZsq{}aBa\PYGZsq{}, + \PYGZsq{}aC\PYGZsq{}, + \PYGZsq{}aD\PYGZsq{}, + \PYGZsq{}aF\PYGZsq{}, + \PYGZsq{}aG\PYGZsq{}, + \PYGZsq{}aGal\PYGZsq{}, + \PYGZsq{}aH\PYGZsq{}, + \PYGZsq{}aHz\PYGZsq{}, + \PYGZsq{}aJ\PYGZsq{}, + \PYGZsq{}aJy\PYGZsq{}, + \PYGZsq{}aK\PYGZsq{}, + \PYGZsq{}aL\PYGZsq{}, + \PYGZsq{}aN\PYGZsq{}, + \PYGZsq{}aOhm\PYGZsq{}, + \PYGZsq{}aP\PYGZsq{}, + \PYGZsq{}aPa\PYGZsq{}, + \PYGZsq{}aR\PYGZsq{}, + \PYGZsq{}aRy\PYGZsq{}, + \PYGZsq{}aS\PYGZsq{}, + \PYGZsq{}aSt\PYGZsq{}, + \PYGZsq{}aT\PYGZsq{}, + \PYGZsq{}aV\PYGZsq{}, + \PYGZsq{}aW\PYGZsq{}, + \PYGZsq{}aWb\PYGZsq{}, + \PYGZsq{}aa\PYGZsq{}, + \PYGZsq{}aadu\PYGZsq{}, + \PYGZsq{}aarcmin\PYGZsq{}, + \PYGZsq{}aarcsec\PYGZsq{}, + \PYGZsq{}aau\PYGZsq{}, + \PYGZsq{}ab\PYGZsq{}, + \PYGZsq{}abA\PYGZsq{}, + \PYGZsq{}abC\PYGZsq{}, + \PYGZsq{}abampere\PYGZsq{}, + \PYGZsq{}abarn\PYGZsq{}, + \PYGZsq{}abcoulomb\PYGZsq{}, + \PYGZsq{}abeam\PYGZsq{}, + \PYGZsq{}abin\PYGZsq{}, + \PYGZsq{}abit\PYGZsq{}, + \PYGZsq{}abyte\PYGZsq{}, + \PYGZsq{}acd\PYGZsq{}, + \PYGZsq{}achan\PYGZsq{}, + \PYGZsq{}acount\PYGZsq{}, + \PYGZsq{}act\PYGZsq{}, + \PYGZsq{}ad\PYGZsq{}, + \PYGZsq{}add\PYGZus{}enabled\PYGZus{}equivalencies\PYGZsq{}, + \PYGZsq{}add\PYGZus{}enabled\PYGZus{}units\PYGZsq{}, + \PYGZsq{}adeg\PYGZsq{}, + \PYGZsq{}adu\PYGZsq{}, + \PYGZsq{}adyn\PYGZsq{}, + \PYGZsq{}aeV\PYGZsq{}, + \PYGZsq{}aerg\PYGZsq{}, + \PYGZsq{}ag\PYGZsq{}, + \PYGZsq{}ah\PYGZsq{}, + \PYGZsq{}ak\PYGZsq{}, + \PYGZsq{}al\PYGZsq{}, + \PYGZsq{}allclose\PYGZsq{}, + \PYGZsq{}alm\PYGZsq{}, + \PYGZsq{}alx\PYGZsq{}, + \PYGZsq{}alyr\PYGZsq{}, + \PYGZsq{}am\PYGZsq{}, + \PYGZsq{}amag\PYGZsq{}, + \PYGZsq{}amin\PYGZsq{}, + \PYGZsq{}amol\PYGZsq{}, + \PYGZsq{}amp\PYGZsq{}, + \PYGZsq{}ampere\PYGZsq{}, + \PYGZsq{}angstrom\PYGZsq{}, + \PYGZsq{}annum\PYGZsq{}, + \PYGZsq{}aohm\PYGZsq{}, + \PYGZsq{}apc\PYGZsq{}, + \PYGZsq{}aph\PYGZsq{}, + \PYGZsq{}aphoton\PYGZsq{}, + \PYGZsq{}apix\PYGZsq{}, + \PYGZsq{}apixel\PYGZsq{}, + \PYGZsq{}arad\PYGZsq{}, + \PYGZsq{}arcmin\PYGZsq{}, + \PYGZsq{}arcminute\PYGZsq{}, + \PYGZsq{}arcsec\PYGZsq{}, + \PYGZsq{}arcsecond\PYGZsq{}, + \PYGZsq{}asr\PYGZsq{}, + \PYGZsq{}astronomical\PYGZus{}unit\PYGZsq{}, + \PYGZsq{}astrophys\PYGZsq{}, + \PYGZsq{}attoBarye\PYGZsq{}, + \PYGZsq{}attoDa\PYGZsq{}, + \PYGZsq{}attoDalton\PYGZsq{}, + \PYGZsq{}attoDebye\PYGZsq{}, + \PYGZsq{}attoFarad\PYGZsq{}, + \PYGZsq{}attoGauss\PYGZsq{}, + \PYGZsq{}attoHenry\PYGZsq{}, + \PYGZsq{}attoHertz\PYGZsq{}, + \PYGZsq{}attoJansky\PYGZsq{}, + \PYGZsq{}attoJoule\PYGZsq{}, + \PYGZsq{}attoKayser\PYGZsq{}, + \PYGZsq{}attoKelvin\PYGZsq{}, + \PYGZsq{}attoNewton\PYGZsq{}, + \PYGZsq{}attoOhm\PYGZsq{}, + \PYGZsq{}attoPascal\PYGZsq{}, + \PYGZsq{}attoRayleigh\PYGZsq{}, + \PYGZsq{}attoSiemens\PYGZsq{}, + \PYGZsq{}attoTesla\PYGZsq{}, + \PYGZsq{}attoVolt\PYGZsq{}, + \PYGZsq{}attoWatt\PYGZsq{}, + \PYGZsq{}attoWeber\PYGZsq{}, + \PYGZsq{}attoamp\PYGZsq{}, + \PYGZsq{}attoampere\PYGZsq{}, + \PYGZsq{}attoannum\PYGZsq{}, + \PYGZsq{}attoarcminute\PYGZsq{}, + \PYGZsq{}attoarcsecond\PYGZsq{}, + \PYGZsq{}attoastronomical\PYGZus{}unit\PYGZsq{}, + \PYGZsq{}attobarn\PYGZsq{}, + \PYGZsq{}attobarye\PYGZsq{}, + \PYGZsq{}attobit\PYGZsq{}, + \PYGZsq{}attobyte\PYGZsq{}, + \PYGZsq{}attocandela\PYGZsq{}, + \PYGZsq{}attocoulomb\PYGZsq{}, + \PYGZsq{}attocount\PYGZsq{}, + \PYGZsq{}attoday\PYGZsq{}, + \PYGZsq{}attodebye\PYGZsq{}, + \PYGZsq{}attodegree\PYGZsq{}, + \PYGZsq{}attodyne\PYGZsq{}, + \PYGZsq{}attoelectronvolt\PYGZsq{}, + \PYGZsq{}attofarad\PYGZsq{}, + \PYGZsq{}attogal\PYGZsq{}, + \PYGZsq{}attogauss\PYGZsq{}, + \PYGZsq{}attogram\PYGZsq{}, + \PYGZsq{}attohenry\PYGZsq{}, + \PYGZsq{}attohertz\PYGZsq{}, + \PYGZsq{}attohour\PYGZsq{}, + \PYGZsq{}attohr\PYGZsq{}, + \PYGZsq{}attojansky\PYGZsq{}, + \PYGZsq{}attojoule\PYGZsq{}, + \PYGZsq{}attokayser\PYGZsq{}, + \PYGZsq{}attolightyear\PYGZsq{}, + \PYGZsq{}attoliter\PYGZsq{}, + \PYGZsq{}attolumen\PYGZsq{}, + \PYGZsq{}attolux\PYGZsq{}, + \PYGZsq{}attometer\PYGZsq{}, + \PYGZsq{}attominute\PYGZsq{}, + \PYGZsq{}attomole\PYGZsq{}, + \PYGZsq{}attonewton\PYGZsq{}, + \PYGZsq{}attoparsec\PYGZsq{}, + \PYGZsq{}attopascal\PYGZsq{}, + \PYGZsq{}attophoton\PYGZsq{}, + \PYGZsq{}attopixel\PYGZsq{}, + \PYGZsq{}attopoise\PYGZsq{}, + \PYGZsq{}attoradian\PYGZsq{}, + \PYGZsq{}attorayleigh\PYGZsq{}, + \PYGZsq{}attorydberg\PYGZsq{}, + \PYGZsq{}attosecond\PYGZsq{}, + \PYGZsq{}attosiemens\PYGZsq{}, + \PYGZsq{}attosteradian\PYGZsq{}, + \PYGZsq{}attostokes\PYGZsq{}, + \PYGZsq{}attotesla\PYGZsq{}, + \PYGZsq{}attovolt\PYGZsq{}, + \PYGZsq{}attovoxel\PYGZsq{}, + \PYGZsq{}attowatt\PYGZsq{}, + \PYGZsq{}attoweber\PYGZsq{}, + \PYGZsq{}attoyear\PYGZsq{}, + \PYGZsq{}au\PYGZsq{}, + \PYGZsq{}avox\PYGZsq{}, + \PYGZsq{}avoxel\PYGZsq{}, + \PYGZsq{}ayr\PYGZsq{}, + \PYGZsq{}b\PYGZsq{}, + \PYGZsq{}bar\PYGZsq{}, + \PYGZsq{}barn\PYGZsq{}, + \PYGZsq{}barye\PYGZsq{}, + \PYGZsq{}beam\PYGZsq{}, + \PYGZsq{}beam\PYGZus{}angular\PYGZus{}area\PYGZsq{}, + \PYGZsq{}becquerel\PYGZsq{}, + \PYGZsq{}bin\PYGZsq{}, + \PYGZsq{}binary\PYGZus{}prefixes\PYGZsq{}, + \PYGZsq{}bit\PYGZsq{}, + \PYGZsq{}bol\PYGZsq{}, + \PYGZsq{}brightness\PYGZus{}temperature\PYGZsq{}, + \PYGZsq{}byte\PYGZsq{}, + \PYGZsq{}cA\PYGZsq{}, + \PYGZsq{}cAU\PYGZsq{}, + \PYGZsq{}cB\PYGZsq{}, + \PYGZsq{}cBa\PYGZsq{}, + \PYGZsq{}cC\PYGZsq{}, + \PYGZsq{}cD\PYGZsq{}, + \PYGZsq{}cF\PYGZsq{}, + \PYGZsq{}cG\PYGZsq{}, + \PYGZsq{}cGal\PYGZsq{}, + \PYGZsq{}cH\PYGZsq{}, + \PYGZsq{}cHz\PYGZsq{}, + \PYGZsq{}cJ\PYGZsq{}, + \PYGZsq{}cJy\PYGZsq{}, + \PYGZsq{}cK\PYGZsq{}, + \PYGZsq{}cL\PYGZsq{}, + \PYGZsq{}cN\PYGZsq{}, + \PYGZsq{}cOhm\PYGZsq{}, + \PYGZsq{}cP\PYGZsq{}, + \PYGZsq{}cPa\PYGZsq{}, + \PYGZsq{}cR\PYGZsq{}, + \PYGZsq{}cRy\PYGZsq{}, + \PYGZsq{}cS\PYGZsq{}, + \PYGZsq{}cSt\PYGZsq{}, + \PYGZsq{}cT\PYGZsq{}, + \PYGZsq{}cV\PYGZsq{}, + \PYGZsq{}cW\PYGZsq{}, + \PYGZsq{}cWb\PYGZsq{}, + \PYGZsq{}ca\PYGZsq{}, + \PYGZsq{}cadu\PYGZsq{}, + \PYGZsq{}candela\PYGZsq{}, + \PYGZsq{}carcmin\PYGZsq{}, + \PYGZsq{}carcsec\PYGZsq{}, + \PYGZsq{}cau\PYGZsq{}, + \PYGZsq{}cb\PYGZsq{}, + \PYGZsq{}cbarn\PYGZsq{}, + \PYGZsq{}cbeam\PYGZsq{}, + \PYGZsq{}cbin\PYGZsq{}, + \PYGZsq{}cbit\PYGZsq{}, + \PYGZsq{}cbyte\PYGZsq{}, + \PYGZsq{}ccd\PYGZsq{}, + \PYGZsq{}cchan\PYGZsq{}, + \PYGZsq{}ccount\PYGZsq{}, + \PYGZsq{}cct\PYGZsq{}, + \PYGZsq{}cd\PYGZsq{}, + \PYGZsq{}cdeg\PYGZsq{}, + \PYGZsq{}cdyn\PYGZsq{}, + \PYGZsq{}ceV\PYGZsq{}, + \PYGZsq{}centiBarye\PYGZsq{}, + \PYGZsq{}centiDa\PYGZsq{}, + \PYGZsq{}centiDalton\PYGZsq{}, + \PYGZsq{}centiDebye\PYGZsq{}, + \PYGZsq{}centiFarad\PYGZsq{}, + \PYGZsq{}centiGauss\PYGZsq{}, + \PYGZsq{}centiHenry\PYGZsq{}, + \PYGZsq{}centiHertz\PYGZsq{}, + \PYGZsq{}centiJansky\PYGZsq{}, + \PYGZsq{}centiJoule\PYGZsq{}, + \PYGZsq{}centiKayser\PYGZsq{}, + \PYGZsq{}centiKelvin\PYGZsq{}, + \PYGZsq{}centiNewton\PYGZsq{}, + \PYGZsq{}centiOhm\PYGZsq{}, + \PYGZsq{}centiPascal\PYGZsq{}, + \PYGZsq{}centiRayleigh\PYGZsq{}, + \PYGZsq{}centiSiemens\PYGZsq{}, + \PYGZsq{}centiTesla\PYGZsq{}, + \PYGZsq{}centiVolt\PYGZsq{}, + \PYGZsq{}centiWatt\PYGZsq{}, + \PYGZsq{}centiWeber\PYGZsq{}, + \PYGZsq{}centiamp\PYGZsq{}, + \PYGZsq{}centiampere\PYGZsq{}, + \PYGZsq{}centiannum\PYGZsq{}, + \PYGZsq{}centiarcminute\PYGZsq{}, + \PYGZsq{}centiarcsecond\PYGZsq{}, + \PYGZsq{}centiastronomical\PYGZus{}unit\PYGZsq{}, + \PYGZsq{}centibarn\PYGZsq{}, + \PYGZsq{}centibarye\PYGZsq{}, + \PYGZsq{}centibit\PYGZsq{}, + \PYGZsq{}centibyte\PYGZsq{}, + \PYGZsq{}centicandela\PYGZsq{}, + \PYGZsq{}centicoulomb\PYGZsq{}, + \PYGZsq{}centicount\PYGZsq{}, + \PYGZsq{}centiday\PYGZsq{}, + \PYGZsq{}centidebye\PYGZsq{}, + \PYGZsq{}centidegree\PYGZsq{}, + \PYGZsq{}centidyne\PYGZsq{}, + \PYGZsq{}centielectronvolt\PYGZsq{}, + \PYGZsq{}centifarad\PYGZsq{}, + \PYGZsq{}centigal\PYGZsq{}, + \PYGZsq{}centigauss\PYGZsq{}, + \PYGZsq{}centigram\PYGZsq{}, + \PYGZsq{}centihenry\PYGZsq{}, + \PYGZsq{}centihertz\PYGZsq{}, + \PYGZsq{}centihour\PYGZsq{}, + \PYGZsq{}centihr\PYGZsq{}, + \PYGZsq{}centijansky\PYGZsq{}, + \PYGZsq{}centijoule\PYGZsq{}, + \PYGZsq{}centikayser\PYGZsq{}, + \PYGZsq{}centilightyear\PYGZsq{}, + \PYGZsq{}centiliter\PYGZsq{}, + \PYGZsq{}centilumen\PYGZsq{}, + \PYGZsq{}centilux\PYGZsq{}, + \PYGZsq{}centimeter\PYGZsq{}, + \PYGZsq{}centiminute\PYGZsq{}, + \PYGZsq{}centimole\PYGZsq{}, + \PYGZsq{}centinewton\PYGZsq{}, + \PYGZsq{}centiparsec\PYGZsq{}, + \PYGZsq{}centipascal\PYGZsq{}, + \PYGZsq{}centiphoton\PYGZsq{}, + \PYGZsq{}centipixel\PYGZsq{}, + \PYGZsq{}centipoise\PYGZsq{}, + \PYGZsq{}centiradian\PYGZsq{}, + \PYGZsq{}centirayleigh\PYGZsq{}, + \PYGZsq{}centirydberg\PYGZsq{}, + \PYGZsq{}centisecond\PYGZsq{}, + \PYGZsq{}centisiemens\PYGZsq{}, + \PYGZsq{}centisteradian\PYGZsq{}, + \PYGZsq{}centistokes\PYGZsq{}, + \PYGZsq{}centitesla\PYGZsq{}, + \PYGZsq{}centivolt\PYGZsq{}, + \PYGZsq{}centivoxel\PYGZsq{}, + \PYGZsq{}centiwatt\PYGZsq{}, + \PYGZsq{}centiweber\PYGZsq{}, + \PYGZsq{}centiyear\PYGZsq{}, + \PYGZsq{}cerg\PYGZsq{}, + \PYGZsq{}cg\PYGZsq{}, + \PYGZsq{}cgs\PYGZsq{}, + \PYGZsq{}ch\PYGZsq{}, + \PYGZsq{}chan\PYGZsq{}, + \PYGZsq{}ck\PYGZsq{}, + \PYGZsq{}cl\PYGZsq{}, + \PYGZsq{}clm\PYGZsq{}, + \PYGZsq{}clx\PYGZsq{}, + \PYGZsq{}clyr\PYGZsq{}, + \PYGZsq{}cm\PYGZsq{}, + \PYGZsq{}cmag\PYGZsq{}, + \PYGZsq{}cmin\PYGZsq{}, + \PYGZsq{}cmol\PYGZsq{}, + \PYGZsq{}cohm\PYGZsq{}, + \PYGZsq{}core\PYGZsq{}, + \PYGZsq{}coulomb\PYGZsq{}, + \PYGZsq{}count\PYGZsq{}, + \PYGZsq{}cpc\PYGZsq{}, + \PYGZsq{}cph\PYGZsq{}, + \PYGZsq{}cphoton\PYGZsq{}, + \PYGZsq{}cpix\PYGZsq{}, + \PYGZsq{}cpixel\PYGZsq{}, + \PYGZsq{}crad\PYGZsq{}, + \PYGZsq{}cs\PYGZsq{}, + \PYGZsq{}csr\PYGZsq{}, + \PYGZsq{}ct\PYGZsq{}, + \PYGZsq{}cu\PYGZsq{}, + \PYGZsq{}curie\PYGZsq{}, + \PYGZsq{}cvox\PYGZsq{}, + \PYGZsq{}cvoxel\PYGZsq{}, + \PYGZsq{}cy\PYGZsq{}, + \PYGZsq{}cycle\PYGZsq{}, + \PYGZsq{}cyr\PYGZsq{}, + \PYGZsq{}d\PYGZsq{}, + \PYGZsq{}dA\PYGZsq{}, + \PYGZsq{}dAU\PYGZsq{}, + \PYGZsq{}dB\PYGZsq{}, + \PYGZsq{}dBa\PYGZsq{}, + \PYGZsq{}dC\PYGZsq{}, + \PYGZsq{}dD\PYGZsq{}, + \PYGZsq{}dF\PYGZsq{}, + \PYGZsq{}dG\PYGZsq{}, + \PYGZsq{}dGal\PYGZsq{}, + \PYGZsq{}dH\PYGZsq{}, + \PYGZsq{}dHz\PYGZsq{}, + \PYGZsq{}dJ\PYGZsq{}, + \PYGZsq{}dJy\PYGZsq{}, + \PYGZsq{}dK\PYGZsq{}, + \PYGZsq{}dL\PYGZsq{}, + \PYGZsq{}dN\PYGZsq{}, + \PYGZsq{}dOhm\PYGZsq{}, + \PYGZsq{}dP\PYGZsq{}, + \PYGZsq{}dPa\PYGZsq{}, + \PYGZsq{}dR\PYGZsq{}, + \PYGZsq{}dRy\PYGZsq{}, + \PYGZsq{}dS\PYGZsq{}, + \PYGZsq{}dSt\PYGZsq{}, + \PYGZsq{}dT\PYGZsq{}, + ...] +\end{sphinxVerbatim} + +To create a quantity, we multiply a value by a unit. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coord} \PYG{o}{=} \PYG{l+m+mi}{30} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{coord}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.units.quantity.Quantity +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{Quantity}} object. + +Jupyter knows how to display \sphinxcode{\sphinxupquote{Quantities}} like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coord} +\end{sphinxVerbatim} +\begin{equation*} +\begin{split}30 \; \mathrm{{}^{\circ}}\end{split} +\end{equation*} + +\section{Selecting a rectangle} +\label{\detokenize{02_coords:selecting-a-rectangle}} +Now we’ll select a rectangle from \sphinxhyphen{}55 to \sphinxhyphen{}45 degrees right ascension and \sphinxhyphen{}8 to 4 degrees of declination. + +We’ll define variables to contain these limits. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{55} +\PYG{n}{phi1\PYGZus{}max} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{45} +\PYG{n}{phi2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{8} +\PYG{n}{phi2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mi}{4} +\end{sphinxVerbatim} + +To represent a rectangle, we’ll use two lists of coordinates and multiply by their units. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{phi1\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}max}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\PYG{n}{phi2\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{phi2\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{phi1\_rect}} and \sphinxcode{\sphinxupquote{phi2\_rect}} represent the coordinates of the corners of a rectangle. + +But they are in “\sphinxhref{https://gala-astro.readthedocs.io/en/latest/\_modules/gala/coordinates/gd1.html}{a Heliocentric spherical coordinate system defined by the orbit of the GD1 stream}” + +In order to use them in a Gaia query, we have to convert them to \sphinxhref{https://en.wikipedia.org/wiki/International\_Celestial\_Reference\_System}{International Celestial Reference System} (ICRS) coordinates. We can do that by storing the coordinates in a \sphinxcode{\sphinxupquote{GD1Koposov10}} object provided by \sphinxhref{https://gala-astro.readthedocs.io/en/latest/coordinates/}{Gala}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{gala}\PYG{n+nn}{.}\PYG{n+nn}{coordinates} \PYG{k}{as} \PYG{n+nn}{gc} + +\PYG{n}{corners} \PYG{o}{=} \PYG{n}{gc}\PYG{o}{.}\PYG{n}{GD1Koposov10}\PYG{p}{(}\PYG{n}{phi1}\PYG{o}{=}\PYG{n}{phi1\PYGZus{}rect}\PYG{p}{,} \PYG{n}{phi2}\PYG{o}{=}\PYG{n}{phi2\PYGZus{}rect}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{corners}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +gala.coordinates.gd1.GD1Koposov10 +\end{sphinxVerbatim} + +We can display the result like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{corners} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}GD1Koposov10 Coordinate: (phi1, phi2) in deg + [(\PYGZhy{}55., \PYGZhy{}8.), (\PYGZhy{}55., 4.), (\PYGZhy{}45., 4.), (\PYGZhy{}45., \PYGZhy{}8.)]\PYGZgt{} +\end{sphinxVerbatim} + +Now we can use \sphinxcode{\sphinxupquote{transform\_to}} to convert to ICRS coordinates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{coordinates} \PYG{k}{as} \PYG{n+nn}{coord} + +\PYG{n}{corners\PYGZus{}icrs} \PYG{o}{=} \PYG{n}{corners}\PYG{o}{.}\PYG{n}{transform\PYGZus{}to}\PYG{p}{(}\PYG{n}{coord}\PYG{o}{.}\PYG{n}{ICRS}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{corners\PYGZus{}icrs}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.coordinates.builtin\PYGZus{}frames.icrs.ICRS +\end{sphinxVerbatim} + +The result is an \sphinxcode{\sphinxupquote{ICRS}} object. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{corners\PYGZus{}icrs} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}ICRS Coordinate: (ra, dec) in deg + [(146.27533314, 19.26190982), (135.42163944, 25.87738723), + (141.60264825, 34.3048303 ), (152.81671045, 27.13611254)]\PYGZgt{} +\end{sphinxVerbatim} + +Notice that a rectangle in one coordinate system is not necessarily a rectangle in another. In this example, the result is a polygon. + + +\section{Selecting a polygon} +\label{\detokenize{02_coords:selecting-a-polygon}} +In order to use this polygon as part of an ADQL query, we have to convert it to a string with a comma\sphinxhyphen{}separated list of coordinates, as in this example: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\PYG{l+s+sd}{POLYGON(143.65, 20.98, } +\PYG{l+s+sd}{ 134.46, 26.39, } +\PYG{l+s+sd}{ 140.58, 34.85, } +\PYG{l+s+sd}{ 150.16, 29.01)} +\PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{corners\_icrs}} behaves like a list, so we can use a \sphinxcode{\sphinxupquote{for}} loop to iterate through the points. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{point} \PYG{o+ow}{in} \PYG{n}{corners\PYGZus{}icrs}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{point}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}ICRS Coordinate: (ra, dec) in deg + (146.27533314, 19.26190982)\PYGZgt{} +\PYGZlt{}ICRS Coordinate: (ra, dec) in deg + (135.42163944, 25.87738723)\PYGZgt{} +\PYGZlt{}ICRS Coordinate: (ra, dec) in deg + (141.60264825, 34.3048303)\PYGZgt{} +\PYGZlt{}ICRS Coordinate: (ra, dec) in deg + (152.81671045, 27.13611254)\PYGZgt{} +\end{sphinxVerbatim} + +From that, we can select the coordinates \sphinxcode{\sphinxupquote{ra}} and \sphinxcode{\sphinxupquote{dec}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{point} \PYG{o+ow}{in} \PYG{n}{corners\PYGZus{}icrs}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{point}\PYG{o}{.}\PYG{n}{ra}\PYG{p}{,} \PYG{n}{point}\PYG{o}{.}\PYG{n}{dec}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +146d16m31.1993s 19d15m42.8754s +135d25m17.902s 25d52m38.594s +141d36m09.5337s 34d18m17.3891s +152d49m00.1576s 27d08m10.0051s +\end{sphinxVerbatim} + +The results are quantities with units, but if we select the \sphinxcode{\sphinxupquote{value}} part, we get a dimensionless floating\sphinxhyphen{}point number. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{point} \PYG{o+ow}{in} \PYG{n}{corners\PYGZus{}icrs}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{point}\PYG{o}{.}\PYG{n}{ra}\PYG{o}{.}\PYG{n}{value}\PYG{p}{,} \PYG{n}{point}\PYG{o}{.}\PYG{n}{dec}\PYG{o}{.}\PYG{n}{value}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +146.27533313607782 19.261909820533692 +135.42163944306296 25.87738722767213 +141.60264825107333 34.304830296257144 +152.81671044675923 27.136112541397996 +\end{sphinxVerbatim} + +We can use string \sphinxcode{\sphinxupquote{format}} to convert these numbers to strings. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{point\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+si}{\PYGZob{}point.ra.value\PYGZcb{}}\PYG{l+s+s2}{, }\PYG{l+s+si}{\PYGZob{}point.dec.value\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}} + +\PYG{n}{t} \PYG{o}{=} \PYG{p}{[}\PYG{n}{point\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{point}\PYG{o}{=}\PYG{n}{point}\PYG{p}{)} + \PYG{k}{for} \PYG{n}{point} \PYG{o+ow}{in} \PYG{n}{corners\PYGZus{}icrs}\PYG{p}{]} +\PYG{n}{t} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}146.27533313607782, 19.261909820533692\PYGZsq{}, + \PYGZsq{}135.42163944306296, 25.87738722767213\PYGZsq{}, + \PYGZsq{}141.60264825107333, 34.304830296257144\PYGZsq{}, + \PYGZsq{}152.81671044675923, 27.136112541397996\PYGZsq{}] +\end{sphinxVerbatim} + +The result is a list of strings, which we can join into a single string using \sphinxcode{\sphinxupquote{join}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{point\PYGZus{}list} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{, }\PYG{l+s+s1}{\PYGZsq{}}\PYG{o}{.}\PYG{n}{join}\PYG{p}{(}\PYG{n}{t}\PYG{p}{)} +\PYG{n}{point\PYGZus{}list} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZsq{}146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996\PYGZsq{} +\end{sphinxVerbatim} + +Notice that we invoke \sphinxcode{\sphinxupquote{join}} on a string and pass the list as an argument. + +Before we can assemble the query, we need \sphinxcode{\sphinxupquote{columns}} again (as we saw in the previous notebook). + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{columns} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity}\PYG{l+s+s1}{\PYGZsq{}} +\end{sphinxVerbatim} + +Here’s the base for the query, with format specifiers for \sphinxcode{\sphinxupquote{columns}} and \sphinxcode{\sphinxupquote{point\_list}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT }\PYG{l+s+si}{\PYGZob{}columns\PYGZcb{}} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1} +\PYG{l+s+s2}{ AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 } +\PYG{l+s+s2}{ AND 1 = CONTAINS(POINT(ra, dec), } +\PYG{l+s+s2}{ POLYGON(}\PYG{l+s+si}{\PYGZob{}point\PYGZus{}list\PYGZcb{}}\PYG{l+s+s2}{))} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +And here’s the result: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query} \PYG{o}{=} \PYG{n}{query\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{columns}\PYG{o}{=}\PYG{n}{columns}\PYG{p}{,} + \PYG{n}{point\PYGZus{}list}\PYG{o}{=}\PYG{n}{point\PYGZus{}list}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +SELECT source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity +FROM gaiadr2.gaia\PYGZus{}source +WHERE parallax \PYGZlt{} 1 + AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON(146.27533313607782, 19.261909820533692, 135.42163944306296, 25.87738722767213, 141.60264825107333, 34.304830296257144, 152.81671044675923, 27.136112541397996)) +\end{sphinxVerbatim} + +As always, we should take a minute to proof\sphinxhyphen{}read the query before we launch it. + +The result will be bigger than our previous queries, so it will take a little longer. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{job}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +INFO: Query finished. [astroquery.utils.tap.core] +\PYGZlt{}Table length=140340\PYGZgt{} + name dtype unit description n\PYGZus{}bad +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} + source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) 0 + ra float64 deg Right ascension 0 + dec float64 deg Declination 0 + pmra float64 mas / yr Proper motion in right ascension direction 0 + pmdec float64 mas / yr Proper motion in declination direction 0 + parallax float64 mas Parallax 0 + parallax\PYGZus{}error float64 mas Standard error of parallax 0 +radial\PYGZus{}velocity float64 km / s Radial velocity 139374 +Jobid: 1603114980658O +Phase: COMPLETED +Owner: None +Output file: async\PYGZus{}20201019094300.vot +Results: None +\end{sphinxVerbatim} + +Here are the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results} \PYG{o}{=} \PYG{n}{job}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{results}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +140340 +\end{sphinxVerbatim} + +There are more than 100,000 stars in this polygon, but that’s a manageable size to work with. + + +\section{Saving results} +\label{\detokenize{02_coords:saving-results}} +This is the set of stars we’ll work with in the next step. But since we have a substantial dataset now, this is a good time to save it. + +Storing the data in a file means we can shut down this notebook and pick up where we left off without running the previous query again. + +Astropy \sphinxcode{\sphinxupquote{Table}} objects provide \sphinxcode{\sphinxupquote{write}}, which writes the table to disk. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}results.fits}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{results}\PYG{o}{.}\PYG{n}{write}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{n}{overwrite}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\end{sphinxVerbatim} + +Because the filename ends with \sphinxcode{\sphinxupquote{fits}}, the table is written in the \sphinxhref{https://en.wikipedia.org/wiki/FITS}{FITS format}, which preserves the metadata associated with the table. + +If the file already exists, the \sphinxcode{\sphinxupquote{overwrite}} argument causes it to be overwritten. + +To see how big the file is, we can use \sphinxcode{\sphinxupquote{ls}} with the \sphinxcode{\sphinxupquote{\sphinxhyphen{}lh}} option, which prints information about the file including its size in human\sphinxhyphen{}readable form. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}results.fits +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 8.6M Oct 19 09:43 gd1\PYGZus{}results.fits +\end{sphinxVerbatim} + +The file is about 8.6 MB. If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir gd1\PYGZus{}results.fits +\end{sphinxVerbatim} + + +\section{Summary} +\label{\detokenize{02_coords:summary}} +In this notebook, we composed more complex queries to select stars within a polygonal region of the sky. Then we downloaded the results and saved them in a FITS file. + +In the next notebook, we’ll reload the data from this file and replicate the next step in the analysis, using proper motion to identify stars likely to be in GD\sphinxhyphen{}1. + + +\section{Best practices} +\label{\detokenize{02_coords:best-practices}}\begin{itemize} +\item {} +For measurements with units, use \sphinxcode{\sphinxupquote{Quantity}} objects that represent units explicitly and check for errors. + +\item {} +Use the \sphinxcode{\sphinxupquote{format}} function to compose queries; it is often faster and less error\sphinxhyphen{}prone. + +\item {} +Develop queries incrementally: start with something simple, test it, and add a little bit at a time. + +\item {} +Once you have a query working, save the data in a local file. If you shut down the notebook and come back to it later, you can reload the file; you don’t have to run the query again. + +\end{itemize} + + +\chapter{Chapter 3} +\label{\detokenize{03_motion:chapter-3}}\label{\detokenize{03_motion::doc}} +This is the third in a series of notebooks related to astronomy data. + +As a running example, we are replicating parts of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server. + +In the second lesson, we wrote a query to select stars from the region of the sky where we expect GD\sphinxhyphen{}1 to be, and saved the results in a FITS file. + +Now we’ll read that data back and implement the next step in the analysis, identifying stars with the proper motion we expect for GD\sphinxhyphen{}1. + + +\section{Outline} +\label{\detokenize{03_motion:outline}} +Here are the steps in this lesson: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll read back the results from the previous lesson, which we saved in a FITS file. + +\item {} +Then we’ll transform the coordinates and proper motion data from ICRS back to the coordinate frame of GD\sphinxhyphen{}1. + +\item {} +We’ll put those results into a Pandas \sphinxcode{\sphinxupquote{DataFrame}}, which we’ll use to select stars near the centerline of GD\sphinxhyphen{}1. + +\item {} +Plotting the proper motion of those stars, we’ll identify a region of proper motion for stars that are likely to be in GD\sphinxhyphen{}1. + +\item {} +Finally, we’ll select and plot the stars whose proper motion is in that region. + +\end{enumerate} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Select rows and columns from an Astropy \sphinxcode{\sphinxupquote{Table}}. + +\item {} +Use Matplotlib to make a scatter plot. + +\item {} +Use Gala to transform coordinates. + +\item {} +Make a Pandas \sphinxcode{\sphinxupquote{DataFrame}} and use a Boolean \sphinxcode{\sphinxupquote{Series}} to select rows. + +\item {} +Save a \sphinxcode{\sphinxupquote{DataFrame}} in an HDF5 file. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{03_motion:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia python\PYGZhy{}wget +\end{sphinxVerbatim} + + +\section{Reload the data} +\label{\detokenize{03_motion:reload-the-data}} +In the previous lesson, we ran a query on the Gaia server and downloaded data for roughly 100,000 stars. We saved the data in a FITS file so that now, picking up where we left off, we can read the data from a local file rather than running the query again. + +If you ran the previous lesson successfully, you should already have a file called \sphinxcode{\sphinxupquote{gd1\_results.fits}} that contains the data we downloaded. + +If not, you can run the following cell, which downloads the data from our repository. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}results.fits}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +Now here’s how we can read the data from the file back into an Astropy \sphinxcode{\sphinxupquote{Table}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{table} \PYG{k+kn}{import} \PYG{n}{Table} + +\PYG{n}{results} \PYG{o}{=} \PYG{n}{Table}\PYG{o}{.}\PYG{n}{read}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)} +\end{sphinxVerbatim} + +The result is an Astropy \sphinxcode{\sphinxupquote{Table}}. + +We can use \sphinxcode{\sphinxupquote{info}} to refresh our memory of the contents. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{o}{.}\PYG{n}{info} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=140340\PYGZgt{} + name dtype unit description +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} + source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) + ra float64 deg Right ascension + dec float64 deg Declination + pmra float64 mas / yr Proper motion in right ascension direction + pmdec float64 mas / yr Proper motion in declination direction + parallax float64 mas Parallax + parallax\PYGZus{}error float64 mas Standard error of parallax +radial\PYGZus{}velocity float64 km / s Radial velocity +\end{sphinxVerbatim} + + +\section{Selecting rows and columns} +\label{\detokenize{03_motion:selecting-rows-and-columns}} +In this section we’ll see operations for selecting columns and rows from an Astropy \sphinxcode{\sphinxupquote{Table}}. You can find more information about these operations in the \sphinxhref{https://docs.astropy.org/en/stable/table/access\_table.html}{Astropy documentation}. + +We can get the names of the columns like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{o}{.}\PYG{n}{colnames} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}source\PYGZus{}id\PYGZsq{}, + \PYGZsq{}ra\PYGZsq{}, + \PYGZsq{}dec\PYGZsq{}, + \PYGZsq{}pmra\PYGZsq{}, + \PYGZsq{}pmdec\PYGZsq{}, + \PYGZsq{}parallax\PYGZsq{}, + \PYGZsq{}parallax\PYGZus{}error\PYGZsq{}, + \PYGZsq{}radial\PYGZus{}velocity\PYGZsq{}] +\end{sphinxVerbatim} + +And select an individual column like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Column name=\PYGZsq{}ra\PYGZsq{} dtype=\PYGZsq{}float64\PYGZsq{} unit=\PYGZsq{}deg\PYGZsq{} description=\PYGZsq{}Right ascension\PYGZsq{} length=140340\PYGZgt{} +142.48301935991023 +142.25452941346344 +142.64528557468074 +142.57739430926034 +142.58913564478618 +141.81762228999614 +143.18339801317677 + 142.9347319464589 +142.26769745823267 +142.89551292869012 + 142.2780935768316 +142.06138786534987 + ... +143.05456487172972 + 144.0436496516182 +144.06566578919313 +144.13177563215973 +143.77696341662764 + 142.945956347594 +142.97282480557786 + 143.4166017695258 +143.64484588686904 +143.41554585481808 + 143.6908739159247 + 143.7702681295401 +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{Column}} object that contains the data, and also the data type, units, and name of the column. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.column.Column +\end{sphinxVerbatim} + +The rows in the \sphinxcode{\sphinxupquote{Table}} are numbered from 0 to \sphinxcode{\sphinxupquote{n\sphinxhyphen{}1}}, where \sphinxcode{\sphinxupquote{n}} is the number of rows. We can select the first row like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Row index=0\PYGZgt{} + source\PYGZus{}id ra dec pmra pmdec parallax parallax\PYGZus{}error radial\PYGZus{}velocity + deg deg mas / yr mas / yr mas mas km / s + int64 float64 float64 float64 float64 float64 float64 float64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +637987125186749568 142.48301935991023 21.75771616932985 \PYGZhy{}2.5168384683875766 2.941813096629439 \PYGZhy{}0.2573448962333354 0.823720794509811 1e+20 +\end{sphinxVerbatim} + +As you might have guessed, the result is a \sphinxcode{\sphinxupquote{Row}} object. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{results}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.row.Row +\end{sphinxVerbatim} + +Notice that the bracket operator selects both columns and rows. You might wonder how it knows which to select. + +If the expression in brackets is a string, it selects a column; if the expression is an integer, it selects a row. + +If you apply the bracket operator twice, you can select a column and then an element from the column. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +142.48301935991023 +\end{sphinxVerbatim} + +Or you can select a row and then an element from the row. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +142.48301935991023 +\end{sphinxVerbatim} + +You get the same result either way. + + +\section{Scatter plot} +\label{\detokenize{03_motion:scatter-plot}} +To see what the results look like, we’ll use a scatter plot. The library we’ll use is \sphinxhref{https://matplotlib.org/}{Matplotlib}, which is the most widely\sphinxhyphen{}used plotting library for Python. + +The Matplotlib interface is based on MATLAB (hence the name), so if you know MATLAB, some of it will be familiar. + +We’ll import like this. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} +\end{sphinxVerbatim} + +Pyplot part of the Matplotlib library. It is conventional to import it using the shortened name \sphinxcode{\sphinxupquote{plt}}. + +Pyplot provides two functions that can make scatterplots, \sphinxhref{https://matplotlib.org/3.3.0/api/\_as\_gen/matplotlib.pyplot.scatter.html}{plt.scatter} and \sphinxhref{https://matplotlib.org/api/\_as\_gen/matplotlib.pyplot.plot.html}{plt.plot}. +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{scatter}} is more versatile; for example, you can make every point in a scatter plot a different color. + +\item {} +\sphinxcode{\sphinxupquote{plot}} is more limited, but for simple cases, it can be substantially faster. + +\end{itemize} + +Jake Vanderplas explains these differences in \sphinxhref{https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html}{The Python Data Science Handbook} + +Since we are plotting more than 100,000 points and they are all the same size and color, we’ll use \sphinxcode{\sphinxupquote{plot}}. + +Here’s a scatter plot with right ascension on the x\sphinxhyphen{}axis and declination on the y\sphinxhyphen{}axis, both ICRS coordinates in degrees. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{x} \PYG{o}{=} \PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{y} \PYG{o}{=} \PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree ICRS)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree ICRS)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_28_0}.png} + +The arguments to \sphinxcode{\sphinxupquote{plt.plot}} are \sphinxcode{\sphinxupquote{x}}, \sphinxcode{\sphinxupquote{y}}, and a string that specifies the style. In this case, the letters \sphinxcode{\sphinxupquote{ko}} indicate that we want a black, round marker (\sphinxcode{\sphinxupquote{k}} is for black because \sphinxcode{\sphinxupquote{b}} is for blue). + +The functions \sphinxcode{\sphinxupquote{xlabel}} and \sphinxcode{\sphinxupquote{ylabel}} put labels on the axes. + +This scatter plot has a problem. It is “\sphinxhref{https://python-graph-gallery.com/134-how-to-avoid-overplotting-with-python/}{overplotted}”, which means that there are so many overlapping points, we can’t distinguish between high and low density areas. + +To fix this, we can provide optional arguments to control the size and transparency of the points. + +\sphinxstylestrong{Exercise:} In the call to \sphinxcode{\sphinxupquote{plt.plot}}, add the keyword argument \sphinxcode{\sphinxupquote{markersize=0.1}} to make the markers smaller. + +Then add the argument \sphinxcode{\sphinxupquote{alpha=0.1}} to make the markers nearly transparent. + +Adjust these arguments until you think the figure shows the data most clearly. + +Note: Once you have made these changes, you might notice that the figure shows stripes with lower density of stars. These stripes are caused by the way Gaia scans the sky, which \sphinxhref{https://www.cosmos.esa.int/web/gaia/scanning-law}{you can read about here}. The dataset we are using, \sphinxhref{https://www.cosmos.esa.int/web/gaia/dr2}{Gaia Data Release 2}, covers 22 months of observations; during this time, some parts of the sky were scanned more than others. + + +\section{Transform back} +\label{\detokenize{03_motion:transform-back}} +Remember that we selected data from a rectangle of coordinates in the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame, then transformed them to ICRS when we constructed the query. +The coordinates in \sphinxcode{\sphinxupquote{results}} are in ICRS. + +To plot them, we will transform them back to the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame; that way, the axes of the figure are aligned with the GD\sphinxhyphen{}1, which will make it easy to select stars near the centerline of the stream. + +To do that, we’ll put the results into a \sphinxcode{\sphinxupquote{GaiaData}} object, provided by the \sphinxhref{https://pyia.readthedocs.io/en/latest/api/pyia.GaiaData.html}{pyia library}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{pyia} \PYG{k+kn}{import} \PYG{n}{GaiaData} + +\PYG{n}{gaia\PYGZus{}data} \PYG{o}{=} \PYG{n}{GaiaData}\PYG{p}{(}\PYG{n}{results}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{gaia\PYGZus{}data}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +pyia.data.GaiaData +\end{sphinxVerbatim} + +Now we can extract sky coordinates from the \sphinxcode{\sphinxupquote{GaiaData}} object, like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{units} \PYG{k}{as} \PYG{n+nn}{u} + +\PYG{n}{skycoord} \PYG{o}{=} \PYG{n}{gaia\PYGZus{}data}\PYG{o}{.}\PYG{n}{get\PYGZus{}skycoord}\PYG{p}{(} + \PYG{n}{distance}\PYG{o}{=}\PYG{l+m+mi}{8}\PYG{o}{*}\PYG{n}{u}\PYG{o}{.}\PYG{n}{kpc}\PYG{p}{,} + \PYG{n}{radial\PYGZus{}velocity}\PYG{o}{=}\PYG{l+m+mi}{0}\PYG{o}{*}\PYG{n}{u}\PYG{o}{.}\PYG{n}{km}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{s}\PYG{p}{)} +\end{sphinxVerbatim} + +We provide \sphinxcode{\sphinxupquote{distance}} and \sphinxcode{\sphinxupquote{radial\_velocity}} to prepare the data for reflex correction, which we explain below. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{skycoord}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.coordinates.sky\PYGZus{}coordinate.SkyCoord +\end{sphinxVerbatim} + +The result is an Astropy \sphinxcode{\sphinxupquote{SkyCoord}} object (\sphinxhref{https://docs.astropy.org/en/stable/api/astropy.coordinates.SkyCoord.html\#astropy.coordinates.SkyCoord}{documentation here}), which provides \sphinxcode{\sphinxupquote{transform\_to}}, so we can transform the coordinates to other frames. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{gala}\PYG{n+nn}{.}\PYG{n+nn}{coordinates} \PYG{k}{as} \PYG{n+nn}{gc} + +\PYG{n}{transformed} \PYG{o}{=} \PYG{n}{skycoord}\PYG{o}{.}\PYG{n}{transform\PYGZus{}to}\PYG{p}{(}\PYG{n}{gc}\PYG{o}{.}\PYG{n}{GD1Koposov10}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{transformed}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.coordinates.sky\PYGZus{}coordinate.SkyCoord +\end{sphinxVerbatim} + +The result is another \sphinxcode{\sphinxupquote{SkyCoord}} object, now in the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame. + +The next step is to correct the proper motion measurements from Gaia for reflex due to the motion of our solar system around the Galactic center. + +When we created \sphinxcode{\sphinxupquote{skycoord}}, we provided \sphinxcode{\sphinxupquote{distance}} and \sphinxcode{\sphinxupquote{radial\_velocity}} as arguments, which means we ignore the measurements provided by Gaia and replace them with these fixed values. + +That might seem like a strange thing to do, but here’s the motivation: +\begin{itemize} +\item {} +Because the stars in GD\sphinxhyphen{}1 are so far away, the distance estimates we get from Gaia, which are based on parallax, are not very precise. So we replace them with our current best estimate of the mean distance to GD\sphinxhyphen{}1, about 8 kpc. See \sphinxhref{https://ui.adsabs.harvard.edu/abs/2010ApJ...712..260K/abstract}{Koposov, Rix, and Hogg, 2010}. + +\item {} +For the other stars in the table, this distance estimate will be inaccurate, so reflex correction will not be correct. But that should have only a small effect on our ability to identify stars with the proper motion we expect for GD\sphinxhyphen{}1. + +\item {} +The measurement of radial velocity has no effect on the correction for proper motion; the value we provide is arbitrary, but we have to provide a value to avoid errors in the reflex correction calculation. + +\end{itemize} + +We are grateful to Adrian Price\sphinxhyphen{}Whelen for his help explaining this step in the analysis. + +With this preparation, we can use \sphinxcode{\sphinxupquote{reflex\_correct}} from Gala (\sphinxhref{https://gala-astro.readthedocs.io/en/latest/api/gala.coordinates.reflex\_correct.html}{documentation here}) to correct for solar reflex motion. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{gd1\PYGZus{}coord} \PYG{o}{=} \PYG{n}{gc}\PYG{o}{.}\PYG{n}{reflex\PYGZus{}correct}\PYG{p}{(}\PYG{n}{transformed}\PYG{p}{)} + +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{gd1\PYGZus{}coord}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.coordinates.sky\PYGZus{}coordinate.SkyCoord +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{SkyCoord}} object that contains +\begin{itemize} +\item {} +The transformed coordinates as attributes named \sphinxcode{\sphinxupquote{phi1}} and \sphinxcode{\sphinxupquote{phi2}}, which represent right ascension and declination in the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame. + +\item {} +The transformed and corrected proper motions as \sphinxcode{\sphinxupquote{pm\_phi1\_cosphi2}} and \sphinxcode{\sphinxupquote{pm\_phi2}}. + +\end{itemize} + +We can select the coordinates like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{phi1} +\PYG{n}{phi2} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{phi2} +\end{sphinxVerbatim} + +And plot them like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{phi1}\PYG{p}{,} \PYG{n}{phi2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.1}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.2}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_45_0}.png} + +Remember that we started with a rectangle in GD\sphinxhyphen{}1 coordinates. When transformed to ICRS, it’s a non\sphinxhyphen{}rectangular polygon. Now that we have transformed back to GD\sphinxhyphen{}1 coordinates, it’s a rectangle again. + + +\section{Pandas DataFrame} +\label{\detokenize{03_motion:pandas-dataframe}} +At this point we have three objects containing different subsets of the data. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{results}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.table.Table +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{gaia\PYGZus{}data}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +pyia.data.GaiaData +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{gd1\PYGZus{}coord}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.coordinates.sky\PYGZus{}coordinate.SkyCoord +\end{sphinxVerbatim} + +On one hand, this makes sense, since each object provides different capabilities. But working with three different object types can be awkward. + +It will be more convenient to choose one object and get all of the data into it. We’ll use a Pandas DataFrame, for two reasons: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +It provides capabilities that are pretty much a superset of the other data structures, so it’s the all\sphinxhyphen{}in\sphinxhyphen{}one solution. + +\item {} +Pandas is a general\sphinxhyphen{}purpose tool that is useful in many domains, especially data science. If you are going to develop expertise in one tool, Pandas is a good choice. + +\end{enumerate} + +However, compared to an Astropy \sphinxcode{\sphinxupquote{Table}}, Pandas has one big drawback: it does not keep the metadata associated with the table, including the units for the columns. + +It’s easy to convert a \sphinxcode{\sphinxupquote{Table}} to a Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{df} \PYG{o}{=} \PYG{n}{results}\PYG{o}{.}\PYG{n}{to\PYGZus{}pandas}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{df}\PYG{o}{.}\PYG{n}{shape} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(140340, 8) +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{DataFrame}} provides \sphinxcode{\sphinxupquote{shape}}, which shows the number of rows and columns. + +It also provides \sphinxcode{\sphinxupquote{head}}, which displays the first few rows. It is useful for spot\sphinxhyphen{}checking large results as you go along. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{df}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] + source\PYGZus{}id ra dec pmra pmdec parallax \PYGZbs{} +0 637987125186749568 142.483019 21.757716 \PYGZhy{}2.516838 2.941813 \PYGZhy{}0.257345 +1 638285195917112960 142.254529 22.476168 2.662702 \PYGZhy{}12.165984 0.422728 +2 638073505568978688 142.645286 22.166932 18.306747 \PYGZhy{}7.950660 0.103640 +3 638086386175786752 142.577394 22.227920 0.987786 \PYGZhy{}2.584105 \PYGZhy{}0.857327 +4 638049655615392384 142.589136 22.110783 0.244439 \PYGZhy{}4.941079 0.099625 + + parallax\PYGZus{}error radial\PYGZus{}velocity +0 0.823721 1.000000e+20 +1 0.297472 1.000000e+20 +2 0.544584 1.000000e+20 +3 1.059607 1.000000e+20 +4 0.486224 1.000000e+20 +\end{sphinxVerbatim} + +Python detail: \sphinxcode{\sphinxupquote{shape}} is an attribute, so we can display it’s value without calling it as a function; \sphinxcode{\sphinxupquote{head}} is a function, so we need the parentheses. + +Now we can extract the columns we want from \sphinxcode{\sphinxupquote{gd1\_coord}} and add them as columns in the \sphinxcode{\sphinxupquote{DataFrame}}. \sphinxcode{\sphinxupquote{phi1}} and \sphinxcode{\sphinxupquote{phi2}} contain the transformed coordinates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{phi1} +\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{phi2} +\PYG{n}{df}\PYG{o}{.}\PYG{n}{shape} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(140340, 10) +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{pm\_phi1\_cosphi2}} and \sphinxcode{\sphinxupquote{pm\_phi2}} contain the components of proper motion in the transformed frame. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{pm\PYGZus{}phi1\PYGZus{}cosphi2} +\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{gd1\PYGZus{}coord}\PYG{o}{.}\PYG{n}{pm\PYGZus{}phi2} +\PYG{n}{df}\PYG{o}{.}\PYG{n}{shape} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(140340, 12) +\end{sphinxVerbatim} + +\sphinxstylestrong{Detail:} If you notice that \sphinxcode{\sphinxupquote{SkyCoord}} has an attribute called \sphinxcode{\sphinxupquote{proper\_motion}}, you might wonder why we are not using it. + +We could have: \sphinxcode{\sphinxupquote{proper\_motion}} contains the same data as \sphinxcode{\sphinxupquote{pm\_phi1\_cosphi2}} and \sphinxcode{\sphinxupquote{pm\_phi2}}, but in a different format. + + +\section{Plot proper motion} +\label{\detokenize{03_motion:plot-proper-motion}} +Now we are ready to replicate one of the panels in Figure 1 of the Price\sphinxhyphen{}Whelan and Bonaca paper, the one that shows the components of proper motion as a scatter plot: + + + +In this figure, the shaded area is a high\sphinxhyphen{}density region of stars with the proper motion we expect for stars in GD\sphinxhyphen{}1. +\begin{itemize} +\item {} +Due to the nature of tidal streams, we expect the proper motion for most stars to be along the axis of the stream; that is, we expect motion in the direction of \sphinxcode{\sphinxupquote{phi2}} to be near 0. + +\item {} +In the direction of \sphinxcode{\sphinxupquote{phi1}}, we don’t have a prior expectation for proper motion, except that it should form a cluster at a non\sphinxhyphen{}zero value. + +\end{itemize} + +To locate this cluster, we’ll select stars near the centerline of GD\sphinxhyphen{}1 and plot their proper motion. + + +\section{Selecting the centerline} +\label{\detokenize{03_motion:selecting-the-centerline}} +As we can see in the following figure, many stars in GD\sphinxhyphen{}1 are less than 1 degree of declination from the line \sphinxcode{\sphinxupquote{phi2=0}}. + + + +If we select stars near this line, they are more likely to be in GD\sphinxhyphen{}1. + +We’ll start by selecting the \sphinxcode{\sphinxupquote{phi2}} column from the \sphinxcode{\sphinxupquote{DataFrame}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi2} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{phi2}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +pandas.core.series.Series +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{Series}}, which is the structure Pandas uses to represent columns. + +We can use a comparison operator, \sphinxcode{\sphinxupquote{\textgreater{}}}, to compare the values in a \sphinxcode{\sphinxupquote{Series}} to a constant. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{1.0} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\PYG{n}{phi2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mf}{1.0} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} + +\PYG{n}{mask} \PYG{o}{=} \PYG{p}{(}\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZgt{}} \PYG{n}{phi2\PYGZus{}min}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{mask}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +pandas.core.series.Series +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{mask}\PYG{o}{.}\PYG{n}{dtype} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +dtype(\PYGZsq{}bool\PYGZsq{}) +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{Series}} of Boolean values, that is, \sphinxcode{\sphinxupquote{True}} and \sphinxcode{\sphinxupquote{False}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{mask}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +0 False +1 False +2 False +3 False +4 False +Name: phi2, dtype: bool +\end{sphinxVerbatim} + +A Boolean \sphinxcode{\sphinxupquote{Series}} is sometimes called a “mask” because we can use it to mask out some of the rows in a \sphinxcode{\sphinxupquote{DataFrame}} and select the rest, like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{selected} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{n}{mask}\PYG{p}{]} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +pandas.core.frame.DataFrame +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{selected}} is a \sphinxcode{\sphinxupquote{DataFrame}} that contains only the rows from \sphinxcode{\sphinxupquote{df}} that correspond to \sphinxcode{\sphinxupquote{True}} values in \sphinxcode{\sphinxupquote{mask}}. + +The previous mask selects all stars where \sphinxcode{\sphinxupquote{phi2}} exceeds \sphinxcode{\sphinxupquote{phi2\_min}}; now we’ll select stars where \sphinxcode{\sphinxupquote{phi2}} falls between \sphinxcode{\sphinxupquote{phi2\_min}} and \sphinxcode{\sphinxupquote{phi2\_max}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi\PYGZus{}mask} \PYG{o}{=} \PYG{p}{(}\PYG{p}{(}\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZgt{}} \PYG{n}{phi2\PYGZus{}min}\PYG{p}{)} \PYG{o}{\PYGZam{}} + \PYG{p}{(}\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZlt{}} \PYG{n}{phi2\PYGZus{}max}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +The \sphinxcode{\sphinxupquote{\&}} operator computes “logical AND”, which means the result is true where elements from both Boolean \sphinxcode{\sphinxupquote{Series}} are true. + +The sum of a Boolean \sphinxcode{\sphinxupquote{Series}} is the number of \sphinxcode{\sphinxupquote{True}} values, so we can use \sphinxcode{\sphinxupquote{sum}} to see how many stars are in the selected region. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi\PYGZus{}mask}\PYG{o}{.}\PYG{n}{sum}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +25084 +\end{sphinxVerbatim} + +And we can use \sphinxcode{\sphinxupquote{phi1\_mask}} to select stars near the centerline, which are more likely to be in GD\sphinxhyphen{}1. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{centerline} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{n}{phi\PYGZus{}mask}\PYG{p}{]} +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{centerline}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +25084 +\end{sphinxVerbatim} + +Here’s a scatter plot of proper motion for the selected stars. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.1}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.1}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_79_0}.png} + +Looking at these results, we see a large cluster around (0, 0), and a smaller cluster near (0, \sphinxhyphen{}10). + +We can use \sphinxcode{\sphinxupquote{xlim}} and \sphinxcode{\sphinxupquote{ylim}} to set the limits on the axes and zoom in on the region near (0, 0). + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{12}\PYG{p}{,} \PYG{l+m+mi}{8}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{10}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_81_0}.png} + +Now we can see the smaller cluster more clearly. + +You might notice that our figure is less dense than the one in the paper. That’s because we started with a set of stars from a relatively small region. The figure in the paper is based on a region about 10 times bigger. + +In the next lesson we’ll go back and select stars from a larger region. But first we’ll use the proper motion data to identify stars likely to be in GD\sphinxhyphen{}1. + + +\section{Filtering based on proper motion} +\label{\detokenize{03_motion:filtering-based-on-proper-motion}} +The next step is to select stars in the “overdense” region of proper motion, which are candidates to be in GD\sphinxhyphen{}1. + +In the original paper, Price\sphinxhyphen{}Whelan and Bonaca used a polygon to cover this region, as shown in this figure. + + + +We’ll use a simple rectangle for now, but in a later lesson we’ll see how to select a polygonal region as well. + +Here are bounds on proper motion we chose by eye, + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{8.9} +\PYG{n}{pm1\PYGZus{}max} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{6.9} +\PYG{n}{pm2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{2.2} +\PYG{n}{pm2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mf}{1.0} +\end{sphinxVerbatim} + +To draw these bounds, we’ll make two lists containing the coordinates of the corners of the rectangle. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{mas}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{yr} +\PYG{n}{pm2\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{mas}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{yr} +\end{sphinxVerbatim} + +Here’s what the plot looks like with the bounds we chose. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1\PYGZus{}rect}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}rect}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZhy{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{12}\PYG{p}{,} \PYG{l+m+mi}{8}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{10}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_88_0}.png} + +To select rows that fall within these bounds, we’ll use the following function, which uses Pandas operators to make a mask that selects rows where \sphinxcode{\sphinxupquote{series}} falls between \sphinxcode{\sphinxupquote{low}} and \sphinxcode{\sphinxupquote{high}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{def} \PYG{n+nf}{between}\PYG{p}{(}\PYG{n}{series}\PYG{p}{,} \PYG{n}{low}\PYG{p}{,} \PYG{n}{high}\PYG{p}{)}\PYG{p}{:} + \PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}Make a Boolean Series.} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ series: Pandas Series} +\PYG{l+s+sd}{ low: lower bound} +\PYG{l+s+sd}{ high: upper bound} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ returns: Boolean Series} +\PYG{l+s+sd}{ \PYGZdq{}\PYGZdq{}\PYGZdq{}} + \PYG{k}{return} \PYG{p}{(}\PYG{n}{series} \PYG{o}{\PYGZgt{}} \PYG{n}{low}\PYG{p}{)} \PYG{o}{\PYGZam{}} \PYG{p}{(}\PYG{n}{series} \PYG{o}{\PYGZlt{}} \PYG{n}{high}\PYG{p}{)} +\end{sphinxVerbatim} + +The following mask select stars with proper motion in the region we chose. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm\PYGZus{}mask} \PYG{o}{=} \PYG{p}{(}\PYG{n}{between}\PYG{p}{(}\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{)} \PYG{o}{\PYGZam{}} + \PYG{n}{between}\PYG{p}{(}\PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +Again, the sum of a Boolean series is the number of \sphinxcode{\sphinxupquote{True}} values. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm\PYGZus{}mask}\PYG{o}{.}\PYG{n}{sum}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +1049 +\end{sphinxVerbatim} + +Now we can use this mask to select rows from \sphinxcode{\sphinxupquote{df}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{selected} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{n}{pm\PYGZus{}mask}\PYG{p}{]} +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +1049 +\end{sphinxVerbatim} + +These are the stars we think are likely to be in GD\sphinxhyphen{}1. Let’s see what they look like, plotting their coordinates (not their proper motion). + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{phi2} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{phi1}\PYG{p}{,} \PYG{n}{phi2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.5}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.5}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{03_motion_98_0}.png} + +Now that’s starting to look like a tidal stream! + + +\section{Saving the DataFrame} +\label{\detokenize{03_motion:saving-the-dataframe}} +At this point we have run a successful query and cleaned up the results; this is a good time to save the data. + +To save a Pandas \sphinxcode{\sphinxupquote{DataFrame}}, one option is to convert it to an Astropy \sphinxcode{\sphinxupquote{Table}}, like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{selected\PYGZus{}table} \PYG{o}{=} \PYG{n}{Table}\PYG{o}{.}\PYG{n}{from\PYGZus{}pandas}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{selected\PYGZus{}table}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.table.Table +\end{sphinxVerbatim} + +Then we could write the \sphinxcode{\sphinxupquote{Table}} to a FITS file, as we did in the previous lesson. + +But Pandas provides functions to write DataFrames in other formats; to see what they are \sphinxhref{https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html}{find the functions here that begin with \sphinxcode{\sphinxupquote{to\_}}}. + +One of the best options is HDF5, which is Version 5 of \sphinxhref{https://en.wikipedia.org/wiki/Hierarchical\_Data\_Format}{Hierarchical Data Format}. + +HDF5 is a binary format, so files are small and fast to read and write (like FITS, but unlike XML). + +An HDF5 file is similar to an SQL database in the sense that it can contain more than one table, although in HDF5 vocabulary, a table is called a Dataset. (\sphinxhref{https://www.stsci.edu/itt/review/dhb\_2011/Intro/intro\_ch23.html}{Multi\sphinxhyphen{}extension FITS files} can also contain more than one table.) + +And HDF5 stores the metadata associated with the table, including column names, row labels, and data types (like FITS). + +Finally, HDF5 is a cross\sphinxhyphen{}language standard, so if you write an HDF5 file with Pandas, you can read it back with many other software tools (more than FITS). + +Before we write the HDF5, let’s delete the old one, if it exists. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}rm \PYGZhy{}f gd1\PYGZus{}dataframe.hdf5 +\end{sphinxVerbatim} + +We can write a Pandas \sphinxcode{\sphinxupquote{DataFrame}} to an HDF5 file like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}dataframe.hdf5}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{n}{df}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +Because an HDF5 file can contain more than one Dataset, we have to provide a name, or “key”, that identifies the Dataset in the file. + +We could use any string as the key, but in this example I use the variable name \sphinxcode{\sphinxupquote{df}}. + +\sphinxstylestrong{Exercise:} We’re going to need \sphinxcode{\sphinxupquote{centerline}} and \sphinxcode{\sphinxupquote{selected}} later as well. Write a line or two of code to add it as a second Dataset in the HDF5 file. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{centerline}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{centerline}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{selected}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{selected}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\sphinxstylestrong{Detail:} Reading and writing HDF5 tables requires a library called \sphinxcode{\sphinxupquote{PyTables}} that is not always installed with Pandas. You can install it with pip like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pip} \PYG{n}{install} \PYG{n}{tables} +\end{sphinxVerbatim} + +If you install it using Conda, the name of the package is \sphinxcode{\sphinxupquote{pytables}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{conda} \PYG{n}{install} \PYG{n}{pytables} +\end{sphinxVerbatim} + +We can use \sphinxcode{\sphinxupquote{ls}} to confirm that the file exists and check the size: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}dataframe.hdf5 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 17M Oct 19 12:05 gd1\PYGZus{}dataframe.hdf5 +\end{sphinxVerbatim} + +If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir gd1\PYGZus{}dataframe.hdf5 +\end{sphinxVerbatim} + +We can read the file back like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{read\PYGZus{}back\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{read\PYGZus{}back\PYGZus{}df}\PYG{o}{.}\PYG{n}{shape} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(140340, 12) +\end{sphinxVerbatim} + +Pandas can write a variety of other formats, \sphinxhref{https://pandas.pydata.org/pandas-docs/stable/user\_guide/io.html}{which you can read about here}. + + +\section{Summary} +\label{\detokenize{03_motion:summary}} +In this lesson, we re\sphinxhyphen{}loaded the Gaia data we saved from a previous query. + +We transformed the coordinates and proper motion from ICRS to a frame aligned with GD\sphinxhyphen{}1, and stored the results in a Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +Then we replicated the selection process from the Price\sphinxhyphen{}Whelan and Bonaca paper: +\begin{itemize} +\item {} +We selected stars near the centerline of GD\sphinxhyphen{}1 and made a scatter plot of their proper motion. + +\item {} +We identified a region of proper motion that contains stars likely to be in GD\sphinxhyphen{}1. + +\item {} +We used a Boolean \sphinxcode{\sphinxupquote{Series}} as a mask to select stars whose proper motion is in that region. + +\end{itemize} + +So far, we have used data from a relatively small region of the sky. In the next lesson, we’ll write a query that selects stars based on proper motion, which will allow us to explore a larger region. + + +\section{Best practices} +\label{\detokenize{03_motion:best-practices}}\begin{itemize} +\item {} +When you make a scatter plot, adjust the size of the markers and their transparency so the figure is not overplotted; otherwise it can misrepresent the data badly. + +\item {} +For simple scatter plots in Matplotlib, \sphinxcode{\sphinxupquote{plot}} is faster than \sphinxcode{\sphinxupquote{scatter}}. + +\item {} +An Astropy \sphinxcode{\sphinxupquote{Table}} and a Pandas \sphinxcode{\sphinxupquote{DataFrame}} are similar in many ways and they provide many of the same functions. They have pros and cons, but for many projects, either one would be a reasonable choice. + +\end{itemize} + + +\chapter{Chapter 4} +\label{\detokenize{04_select:chapter-4}}\label{\detokenize{04_select::doc}} +This is the fourth in a series of notebooks related to astronomy data. + +As a running example, we are replicating parts of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +In the first lesson, we wrote ADQL queries and used them to select and download data from the Gaia server. + +In the second lesson, we write a query to select stars from the region of the sky where we expect GD\sphinxhyphen{}1 to be, and save the results in a FITS file. + +In the third lesson, we read that data back and identified stars with the proper motion we expect for GD\sphinxhyphen{}1. + + +\section{Outline} +\label{\detokenize{04_select:outline}} +Here are the steps in this lesson: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Using data from the previous lesson, we’ll identify the values of proper motion for stars likely to be in GD\sphinxhyphen{}1. + +\item {} +Then we’ll compose an ADQL query that selects stars based on proper motion, so we can download only the data we need. + +\item {} +We’ll also see how to write the results to a CSV file. + +\end{enumerate} + +That will make it possible to search a bigger region of the sky in a single query. + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Convert proper motion between frames. + +\item {} +Write an ADQL query that selects based on proper motion. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{04_select:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia python\PYGZhy{}wget +\end{sphinxVerbatim} + + +\section{Reload the data} +\label{\detokenize{04_select:reload-the-data}} +The following cells download the data from the previous lesson, if necessary, and load it into a Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}dataframe.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{centerline} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{centerline}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{selected} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{selected}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + + +\section{Selection by proper motion} +\label{\detokenize{04_select:selection-by-proper-motion}} +At this point we have downloaded data for a relatively large number of stars (more than 100,000) and selected a relatively small number (around 1000). + +It would be more efficient to use ADQL to select only the stars we need. That would also make it possible to download data covering a larger region of the sky. + +However, the selection we did was based on proper motion in the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame. In order to do the same selection in ADQL, we have to work with proper motions in ICRS. + +As a reminder, here’s the rectangle we selected based on proper motion in the \sphinxcode{\sphinxupquote{GD1Koposov10}} frame. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{8.9} +\PYG{n}{pm1\PYGZus{}max} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{6.9} +\PYG{n}{pm2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{2.2} +\PYG{n}{pm2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mf}{1.0} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{units} \PYG{k}{as} \PYG{n+nn}{u} + +\PYG{n}{pm1\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{mas}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{yr} +\PYG{n}{pm2\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{mas}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{yr} +\end{sphinxVerbatim} + +The following figure shows: +\begin{itemize} +\item {} +Proper motion for the stars we selected along the center line of GD\sphinxhyphen{}1, + +\item {} +The rectangle we selected, and + +\item {} +The stars inside the rectangle highlighted in green. + +\end{itemize} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} + +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gx}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1\PYGZus{}rect}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}rect}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZhy{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (GD1 frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{12}\PYG{p}{,} \PYG{l+m+mi}{8}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{10}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{04_select_11_0}.png} + +Now we’ll make the same plot using proper motions in the ICRS frame, which are stored in columns \sphinxcode{\sphinxupquote{pmra}} and \sphinxcode{\sphinxupquote{pmdec}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmdec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmdec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gx}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (ICRS frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (ICRS frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{p}{[}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{]}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{p}{[}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{20}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{]}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{04_select_13_0}.png} + +The proper motions of the selected stars are more spread out in this frame, which is why it was preferable to do the selection in the GD\sphinxhyphen{}1 frame. + +But now we can define a polygon that encloses the proper motions of these stars in ICRS, +and use the polygon as a selection criterion in an ADQL query. + +SciPy provides a function that computes the \sphinxhref{https://en.wikipedia.org/wiki/Convex\_hull}{convex hull} of a set of points, which is the smallest convex polygon that contains all of the points. + +To use it, I’ll select columns \sphinxcode{\sphinxupquote{pmra}} and \sphinxcode{\sphinxupquote{pmdec}} and convert them to a NumPy array. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} + +\PYG{n}{points} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmdec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{]}\PYG{o}{.}\PYG{n}{to\PYGZus{}numpy}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{points}\PYG{o}{.}\PYG{n}{shape} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(1049, 2) +\end{sphinxVerbatim} + +We’ll pass the points to \sphinxcode{\sphinxupquote{ConvexHull}}, which returns an object that contains the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{scipy}\PYG{n+nn}{.}\PYG{n+nn}{spatial} \PYG{k+kn}{import} \PYG{n}{ConvexHull} + +\PYG{n}{hull} \PYG{o}{=} \PYG{n}{ConvexHull}\PYG{p}{(}\PYG{n}{points}\PYG{p}{)} +\PYG{n}{hull} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}scipy.spatial.qhull.ConvexHull at 0x7f446b1e8bb0\PYGZgt{} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{hull.vertices}} contains the indices of the points that fall on the perimeter of the hull. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{hull}\PYG{o}{.}\PYG{n}{vertices} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([ 692, 873, 141, 303, 42, 622, 45, 83, 127, 182, 1006, + 971, 967, 1001, 969, 940], dtype=int32) +\end{sphinxVerbatim} + +We can use them as an index into the original array to select the corresponding rows. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm\PYGZus{}vertices} \PYG{o}{=} \PYG{n}{points}\PYG{p}{[}\PYG{n}{hull}\PYG{o}{.}\PYG{n}{vertices}\PYG{p}{]} +\PYG{n}{pm\PYGZus{}vertices} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([[ \PYGZhy{}4.05037121, \PYGZhy{}14.75623261], + [ \PYGZhy{}3.41981085, \PYGZhy{}14.72365546], + [ \PYGZhy{}3.03521988, \PYGZhy{}14.44357135], + [ \PYGZhy{}2.26847919, \PYGZhy{}13.7140236 ], + [ \PYGZhy{}2.61172203, \PYGZhy{}13.24797471], + [ \PYGZhy{}2.73471401, \PYGZhy{}13.09054471], + [ \PYGZhy{}3.19923146, \PYGZhy{}12.5942653 ], + [ \PYGZhy{}3.34082546, \PYGZhy{}12.47611926], + [ \PYGZhy{}5.67489413, \PYGZhy{}11.16083338], + [ \PYGZhy{}5.95159272, \PYGZhy{}11.10547884], + [ \PYGZhy{}6.42394023, \PYGZhy{}11.05981295], + [ \PYGZhy{}7.09631023, \PYGZhy{}11.95187806], + [ \PYGZhy{}7.30641519, \PYGZhy{}12.24559977], + [ \PYGZhy{}7.04016696, \PYGZhy{}12.88580702], + [ \PYGZhy{}6.00347705, \PYGZhy{}13.75912098], + [ \PYGZhy{}4.42442296, \PYGZhy{}14.74641176]]) +\end{sphinxVerbatim} + +To plot the resulting polygon, we have to pull out the x and y coordinates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pmra\PYGZus{}poly}\PYG{p}{,} \PYG{n}{pmdec\PYGZus{}poly} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{transpose}\PYG{p}{(}\PYG{n}{pm\PYGZus{}vertices}\PYG{p}{)} +\end{sphinxVerbatim} + +The following figure shows proper motion in ICRS again, along with the convex hull we just computed. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{centerline}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmdec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{pm1} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{pm2} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pmdec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gx}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pmra\PYGZus{}poly}\PYG{p}{,} \PYG{n}{pmdec\PYGZus{}poly}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi1 (ICRS frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion phi2 (ICRS frame)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{p}{[}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{]}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{p}{[}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{20}\PYG{p}{,} \PYG{l+m+mi}{5}\PYG{p}{]}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{04_select_25_0}.png} + +To use \sphinxcode{\sphinxupquote{pm\_vertices}} as part of an ADQL query, we have to convert it to a string. + +We’ll use \sphinxcode{\sphinxupquote{flatten}} to convert from a 2\sphinxhyphen{}D array to a 1\sphinxhyphen{}D array, and \sphinxcode{\sphinxupquote{str}} to convert each element to a string. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{t} \PYG{o}{=} \PYG{p}{[}\PYG{n+nb}{str}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)} \PYG{k}{for} \PYG{n}{x} \PYG{o+ow}{in} \PYG{n}{pm\PYGZus{}vertices}\PYG{o}{.}\PYG{n}{flatten}\PYG{p}{(}\PYG{p}{)}\PYG{p}{]} +\PYG{n}{t} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}\PYGZhy{}4.050371212154984\PYGZsq{}, + \PYGZsq{}\PYGZhy{}14.75623260987968\PYGZsq{}, + \PYGZsq{}\PYGZhy{}3.4198108491382455\PYGZsq{}, + \PYGZsq{}\PYGZhy{}14.723655456335619\PYGZsq{}, + \PYGZsq{}\PYGZhy{}3.035219883740934\PYGZsq{}, + \PYGZsq{}\PYGZhy{}14.443571352854612\PYGZsq{}, + \PYGZsq{}\PYGZhy{}2.268479190206636\PYGZsq{}, + \PYGZsq{}\PYGZhy{}13.714023598831554\PYGZsq{}, + \PYGZsq{}\PYGZhy{}2.611722027231764\PYGZsq{}, + \PYGZsq{}\PYGZhy{}13.247974712069263\PYGZsq{}, + \PYGZsq{}\PYGZhy{}2.7347140078529106\PYGZsq{}, + \PYGZsq{}\PYGZhy{}13.090544709622938\PYGZsq{}, + \PYGZsq{}\PYGZhy{}3.199231461993783\PYGZsq{}, + \PYGZsq{}\PYGZhy{}12.594265302440828\PYGZsq{}, + \PYGZsq{}\PYGZhy{}3.34082545787549\PYGZsq{}, + \PYGZsq{}\PYGZhy{}12.476119260818695\PYGZsq{}, + \PYGZsq{}\PYGZhy{}5.674894125178565\PYGZsq{}, + \PYGZsq{}\PYGZhy{}11.160833381392624\PYGZsq{}, + \PYGZsq{}\PYGZhy{}5.95159272432137\PYGZsq{}, + \PYGZsq{}\PYGZhy{}11.105478836426514\PYGZsq{}, + \PYGZsq{}\PYGZhy{}6.423940229776128\PYGZsq{}, + \PYGZsq{}\PYGZhy{}11.05981294804957\PYGZsq{}, + \PYGZsq{}\PYGZhy{}7.096310230579248\PYGZsq{}, + \PYGZsq{}\PYGZhy{}11.951878058650085\PYGZsq{}, + \PYGZsq{}\PYGZhy{}7.306415190921692\PYGZsq{}, + \PYGZsq{}\PYGZhy{}12.245599765990594\PYGZsq{}, + \PYGZsq{}\PYGZhy{}7.040166963232815\PYGZsq{}, + \PYGZsq{}\PYGZhy{}12.885807024935527\PYGZsq{}, + \PYGZsq{}\PYGZhy{}6.0034770546523735\PYGZsq{}, + \PYGZsq{}\PYGZhy{}13.759120984106968\PYGZsq{}, + \PYGZsq{}\PYGZhy{}4.42442296194263\PYGZsq{}, + \PYGZsq{}\PYGZhy{}14.7464117578883\PYGZsq{}] +\end{sphinxVerbatim} + +Now \sphinxcode{\sphinxupquote{t}} is a list of strings; we can use \sphinxcode{\sphinxupquote{join}} to make a single string with commas between the elements. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm\PYGZus{}point\PYGZus{}list} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{, }\PYG{l+s+s1}{\PYGZsq{}}\PYG{o}{.}\PYG{n}{join}\PYG{p}{(}\PYG{n}{t}\PYG{p}{)} +\PYG{n}{pm\PYGZus{}point\PYGZus{}list} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZsq{}\PYGZhy{}4.050371212154984, \PYGZhy{}14.75623260987968, \PYGZhy{}3.4198108491382455, \PYGZhy{}14.723655456335619, \PYGZhy{}3.035219883740934, \PYGZhy{}14.443571352854612, \PYGZhy{}2.268479190206636, \PYGZhy{}13.714023598831554, \PYGZhy{}2.611722027231764, \PYGZhy{}13.247974712069263, \PYGZhy{}2.7347140078529106, \PYGZhy{}13.090544709622938, \PYGZhy{}3.199231461993783, \PYGZhy{}12.594265302440828, \PYGZhy{}3.34082545787549, \PYGZhy{}12.476119260818695, \PYGZhy{}5.674894125178565, \PYGZhy{}11.160833381392624, \PYGZhy{}5.95159272432137, \PYGZhy{}11.105478836426514, \PYGZhy{}6.423940229776128, \PYGZhy{}11.05981294804957, \PYGZhy{}7.096310230579248, \PYGZhy{}11.951878058650085, \PYGZhy{}7.306415190921692, \PYGZhy{}12.245599765990594, \PYGZhy{}7.040166963232815, \PYGZhy{}12.885807024935527, \PYGZhy{}6.0034770546523735, \PYGZhy{}13.759120984106968, \PYGZhy{}4.42442296194263, \PYGZhy{}14.7464117578883\PYGZsq{} +\end{sphinxVerbatim} + + +\section{Selecting the region} +\label{\detokenize{04_select:selecting-the-region}} +Let’s review how we got to this point. +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We made an ADQL query to the Gaia server to get data for stars in the vicinity of GD\sphinxhyphen{}1. + +\item {} +We transformed to \sphinxcode{\sphinxupquote{GD1}} coordinates so we could select stars along the centerline of GD\sphinxhyphen{}1. + +\item {} +We plotted the proper motion of the centerline stars to identify the bounds of the overdense region. + +\item {} +We made a mask that selects stars whose proper motion is in the overdense region. + +\end{enumerate} + +The problem is that we downloaded data for more than 100,000 stars and selected only about 1000 of them. + +It will be more efficient if we select on proper motion as part of the query. That will allow us to work with a larger region of the sky in a single query, and download less unneeded data. + +This query will select on the following conditions: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{parallax \textless{} 1}} + +\item {} +\sphinxcode{\sphinxupquote{bp\_rp BETWEEN \sphinxhyphen{}0.75 AND 2}} + +\item {} +Coordinates within a rectangle in the GD\sphinxhyphen{}1 frame, transformed to ICRS. + +\item {} +Proper motion with the polygon we just computed. + +\end{itemize} + +The first three conditions are the same as in the previous query. Only the last one is new. + +Here’s the rectangle in the GD\sphinxhyphen{}1 frame we’ll select. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{70} +\PYG{n}{phi1\PYGZus{}max} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{20} +\PYG{n}{phi2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{5} +\PYG{n}{phi2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mi}{5} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{phi1\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{phi1\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi1\PYGZus{}max}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\PYG{n}{phi2\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{phi2\PYGZus{}min}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}max}\PYG{p}{,} \PYG{n}{phi2\PYGZus{}min}\PYG{p}{]} \PYG{o}{*} \PYG{n}{u}\PYG{o}{.}\PYG{n}{deg} +\end{sphinxVerbatim} + +Here’s how we transform it to ICRS, as we saw in the previous lesson. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{gala}\PYG{n+nn}{.}\PYG{n+nn}{coordinates} \PYG{k}{as} \PYG{n+nn}{gc} +\PYG{k+kn}{import} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{coordinates} \PYG{k}{as} \PYG{n+nn}{coord} + +\PYG{n}{corners} \PYG{o}{=} \PYG{n}{gc}\PYG{o}{.}\PYG{n}{GD1Koposov10}\PYG{p}{(}\PYG{n}{phi1}\PYG{o}{=}\PYG{n}{phi1\PYGZus{}rect}\PYG{p}{,} \PYG{n}{phi2}\PYG{o}{=}\PYG{n}{phi2\PYGZus{}rect}\PYG{p}{)} +\PYG{n}{corners\PYGZus{}icrs} \PYG{o}{=} \PYG{n}{corners}\PYG{o}{.}\PYG{n}{transform\PYGZus{}to}\PYG{p}{(}\PYG{n}{coord}\PYG{o}{.}\PYG{n}{ICRS}\PYG{p}{)} +\end{sphinxVerbatim} + +To use \sphinxcode{\sphinxupquote{corners\_icrs}} as part of an ADQL query, we have to convert it to a string. Here’s how we do that, as we saw in the previous lesson. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{point\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+si}{\PYGZob{}point.ra.value\PYGZcb{}}\PYG{l+s+s2}{, }\PYG{l+s+si}{\PYGZob{}point.dec.value\PYGZcb{}}\PYG{l+s+s2}{\PYGZdq{}} + +\PYG{n}{t} \PYG{o}{=} \PYG{p}{[}\PYG{n}{point\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{point}\PYG{o}{=}\PYG{n}{point}\PYG{p}{)} + \PYG{k}{for} \PYG{n}{point} \PYG{o+ow}{in} \PYG{n}{corners\PYGZus{}icrs}\PYG{p}{]} + +\PYG{n}{point\PYGZus{}list} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{, }\PYG{l+s+s1}{\PYGZsq{}}\PYG{o}{.}\PYG{n}{join}\PYG{p}{(}\PYG{n}{t}\PYG{p}{)} +\PYG{n}{point\PYGZus{}list} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZsq{}135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258\PYGZsq{} +\end{sphinxVerbatim} + +Now we have everything we need to assemble the query. + + +\section{Assemble the query} +\label{\detokenize{04_select:assemble-the-query}} +Here’s the base string we used for the query in the previous lesson. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT } +\PYG{l+s+si}{\PYGZob{}columns\PYGZcb{}} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1} +\PYG{l+s+s2}{ AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 } +\PYG{l+s+s2}{ AND 1 = CONTAINS(POINT(ra, dec), } +\PYG{l+s+s2}{ POLYGON(}\PYG{l+s+si}{\PYGZob{}point\PYGZus{}list\PYGZcb{}}\PYG{l+s+s2}{))} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} Modify \sphinxcode{\sphinxupquote{query\_base}} by adding a new clause to select stars whose coordinates of proper motion, \sphinxcode{\sphinxupquote{pmra}} and \sphinxcode{\sphinxupquote{pmdec}}, fall within the polygon defined by \sphinxcode{\sphinxupquote{pm\_point\_list}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query\PYGZus{}base} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT } +\PYG{l+s+si}{\PYGZob{}columns\PYGZcb{}} +\PYG{l+s+s2}{FROM gaiadr2.gaia\PYGZus{}source} +\PYG{l+s+s2}{WHERE parallax \PYGZlt{} 1} +\PYG{l+s+s2}{ AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 } +\PYG{l+s+s2}{ AND 1 = CONTAINS(POINT(ra, dec), } +\PYG{l+s+s2}{ POLYGON(}\PYG{l+s+si}{\PYGZob{}point\PYGZus{}list\PYGZcb{}}\PYG{l+s+s2}{))} +\PYG{l+s+s2}{ AND 1 = CONTAINS(POINT(pmra, pmdec),} +\PYG{l+s+s2}{ POLYGON(}\PYG{l+s+si}{\PYGZob{}pm\PYGZus{}point\PYGZus{}list\PYGZcb{}}\PYG{l+s+s2}{))} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +Here again are the columns we want to select. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{columns} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity}\PYG{l+s+s1}{\PYGZsq{}} +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} Use \sphinxcode{\sphinxupquote{format}} to format \sphinxcode{\sphinxupquote{query\_base}} and define \sphinxcode{\sphinxupquote{query}}, filling in the values of \sphinxcode{\sphinxupquote{columns}}, \sphinxcode{\sphinxupquote{point\_list}}, and \sphinxcode{\sphinxupquote{pm\_point\_list}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query} \PYG{o}{=} \PYG{n}{query\PYGZus{}base}\PYG{o}{.}\PYG{n}{format}\PYG{p}{(}\PYG{n}{columns}\PYG{o}{=}\PYG{n}{columns}\PYG{p}{,} + \PYG{n}{point\PYGZus{}list}\PYG{o}{=}\PYG{n}{point\PYGZus{}list}\PYG{p}{,} + \PYG{n}{pm\PYGZus{}point\PYGZus{}list}\PYG{o}{=}\PYG{n}{pm\PYGZus{}point\PYGZus{}list}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +SELECT +source\PYGZus{}id, ra, dec, pmra, pmdec, parallax, parallax\PYGZus{}error, radial\PYGZus{}velocity +FROM gaiadr2.gaia\PYGZus{}source +WHERE parallax \PYGZlt{} 1 + AND bp\PYGZus{}rp BETWEEN \PYGZhy{}0.75 AND 2 + AND 1 = CONTAINS(POINT(ra, dec), + POLYGON(135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258)) + AND 1 = CONTAINS(POINT(pmra, pmdec), + POLYGON(\PYGZhy{}4.050371212154984, \PYGZhy{}14.75623260987968, \PYGZhy{}3.4198108491382455, \PYGZhy{}14.723655456335619, \PYGZhy{}3.035219883740934, \PYGZhy{}14.443571352854612, \PYGZhy{}2.268479190206636, \PYGZhy{}13.714023598831554, \PYGZhy{}2.611722027231764, \PYGZhy{}13.247974712069263, \PYGZhy{}2.7347140078529106, \PYGZhy{}13.090544709622938, \PYGZhy{}3.199231461993783, \PYGZhy{}12.594265302440828, \PYGZhy{}3.34082545787549, \PYGZhy{}12.476119260818695, \PYGZhy{}5.674894125178565, \PYGZhy{}11.160833381392624, \PYGZhy{}5.95159272432137, \PYGZhy{}11.105478836426514, \PYGZhy{}6.423940229776128, \PYGZhy{}11.05981294804957, \PYGZhy{}7.096310230579248, \PYGZhy{}11.951878058650085, \PYGZhy{}7.306415190921692, \PYGZhy{}12.245599765990594, \PYGZhy{}7.040166963232815, \PYGZhy{}12.885807024935527, \PYGZhy{}6.0034770546523735, \PYGZhy{}13.759120984106968, \PYGZhy{}4.42442296194263, \PYGZhy{}14.7464117578883)) +\end{sphinxVerbatim} + +Here’s how we run it. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astroquery}\PYG{n+nn}{.}\PYG{n+nn}{gaia} \PYG{k+kn}{import} \PYG{n}{Gaia} + +\PYG{n}{job} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query}\PYG{p}{)} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{job}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: gea.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: geadata.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +INFO: Query finished. [astroquery.utils.tap.core] +\PYGZlt{}Table length=7346\PYGZgt{} + name dtype unit description n\PYGZus{}bad +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} + source\PYGZus{}id int64 Unique source identifier (unique within a particular Data Release) 0 + ra float64 deg Right ascension 0 + dec float64 deg Declination 0 + pmra float64 mas / yr Proper motion in right ascension direction 0 + pmdec float64 mas / yr Proper motion in declination direction 0 + parallax float64 mas Parallax 0 + parallax\PYGZus{}error float64 mas Standard error of parallax 0 +radial\PYGZus{}velocity float64 km / s Radial velocity 7295 +Jobid: 1603132746237O +Phase: COMPLETED +Owner: None +Output file: async\PYGZus{}20201019143906.vot +Results: None +\end{sphinxVerbatim} + +And get the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{candidate\PYGZus{}table} \PYG{o}{=} \PYG{n}{job}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}table}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +7346 +\end{sphinxVerbatim} + + +\section{Plotting one more time} +\label{\detokenize{04_select:plotting-one-more-time}} +Let’s see what the results look like. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{x} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{y} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree ICRS)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree ICRS)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{04_select_51_0}.png} + +Here we can see why it was useful to transform these coordinates. In ICRS, it is more difficult to identity the stars near the centerline of GD\sphinxhyphen{}1. + +So, before we move on to the next step, let’s collect the code we used to transform the coordinates and make a Pandas \sphinxcode{\sphinxupquote{DataFrame}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{pyia} \PYG{k+kn}{import} \PYG{n}{GaiaData} + +\PYG{k}{def} \PYG{n+nf}{make\PYGZus{}dataframe}\PYG{p}{(}\PYG{n}{table}\PYG{p}{)}\PYG{p}{:} + \PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}Transform coordinates from ICRS to GD\PYGZhy{}1 frame.} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ table: Astropy Table} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ returns: Pandas DataFrame} +\PYG{l+s+sd}{ \PYGZdq{}\PYGZdq{}\PYGZdq{}} + \PYG{n}{gaia\PYGZus{}data} \PYG{o}{=} \PYG{n}{GaiaData}\PYG{p}{(}\PYG{n}{table}\PYG{p}{)} + + \PYG{n}{c\PYGZus{}sky} \PYG{o}{=} \PYG{n}{gaia\PYGZus{}data}\PYG{o}{.}\PYG{n}{get\PYGZus{}skycoord}\PYG{p}{(}\PYG{n}{distance}\PYG{o}{=}\PYG{l+m+mi}{8}\PYG{o}{*}\PYG{n}{u}\PYG{o}{.}\PYG{n}{kpc}\PYG{p}{,} + \PYG{n}{radial\PYGZus{}velocity}\PYG{o}{=}\PYG{l+m+mi}{0}\PYG{o}{*}\PYG{n}{u}\PYG{o}{.}\PYG{n}{km}\PYG{o}{/}\PYG{n}{u}\PYG{o}{.}\PYG{n}{s}\PYG{p}{)} + \PYG{n}{c\PYGZus{}gd1} \PYG{o}{=} \PYG{n}{gc}\PYG{o}{.}\PYG{n}{reflex\PYGZus{}correct}\PYG{p}{(} + \PYG{n}{c\PYGZus{}sky}\PYG{o}{.}\PYG{n}{transform\PYGZus{}to}\PYG{p}{(}\PYG{n}{gc}\PYG{o}{.}\PYG{n}{GD1Koposov10}\PYG{p}{)}\PYG{p}{)} + + \PYG{n}{df} \PYG{o}{=} \PYG{n}{table}\PYG{o}{.}\PYG{n}{to\PYGZus{}pandas}\PYG{p}{(}\PYG{p}{)} + \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{c\PYGZus{}gd1}\PYG{o}{.}\PYG{n}{phi1} + \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{c\PYGZus{}gd1}\PYG{o}{.}\PYG{n}{phi2} + \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{c\PYGZus{}gd1}\PYG{o}{.}\PYG{n}{pm\PYGZus{}phi1\PYGZus{}cosphi2} + \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{c\PYGZus{}gd1}\PYG{o}{.}\PYG{n}{pm\PYGZus{}phi2} + \PYG{k}{return} \PYG{n}{df} +\end{sphinxVerbatim} + +Here’s how we can use this function: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{candidate\PYGZus{}df} \PYG{o}{=} \PYG{n}{make\PYGZus{}dataframe}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}table}\PYG{p}{)} +\end{sphinxVerbatim} + +And let’s see the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{x} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{y} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.5}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.5}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{04_select_57_0}.png} + +We’re starting to see GD\sphinxhyphen{}1 more clearly. + +We can compare this figure with one of these panels in Figure 1 from the original paper: + + + + + +The top panel shows stars selected based on proper motion only, so it is comparable to our figure (although notice that it covers a wider region). + +In the next lesson, we will use photometry data from Pan\sphinxhyphen{}STARRS to do a second round of filtering, and see if we can replicate the bottom panel. + +We’ll also learn how to add annotations like the ones in the figure from the paper, and customize the style of the figure to present the results clearly and compellingly. + + +\section{Saving the DataFrame} +\label{\detokenize{04_select:saving-the-dataframe}} +Let’s save this \sphinxcode{\sphinxupquote{DataFrame}} so we can pick up where we left off without running this query again. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}rm \PYGZhy{}f gd1\PYGZus{}candidates.hdf5 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.hdf5}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{n}{candidate\PYGZus{}df}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +We can use \sphinxcode{\sphinxupquote{ls}} to confirm that the file exists and check the size: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}candidates.hdf5 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 756K Oct 19 14:39 gd1\PYGZus{}candidates.hdf5 +\end{sphinxVerbatim} + +If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir gd1\PYGZus{}candidates.hdf5 +\end{sphinxVerbatim} + + +\section{CSV} +\label{\detokenize{04_select:csv}} +Pandas can write a variety of other formats, \sphinxhref{https://pandas.pydata.org/pandas-docs/stable/user\_guide/io.html}{which you can read about here}. + +We won’t cover all of them, but one other important one is \sphinxhref{https://en.wikipedia.org/wiki/Comma-separated\_values}{CSV}, which stands for “comma\sphinxhyphen{}separated values”. + +CSV is a plain\sphinxhyphen{}text format with minimal formatting requirements, so it can be read and written by pretty much any tool that works with data. In that sense, it is the “least common denominator” of data formats. + +However, it has an important limitation: some information about the data gets lost in translation, notably the data types. If you read a CSV file from someone else, you might need some additional information to make sure you are getting it right. + +Also, CSV files tend to be big, and slow to read and write. + +With those caveats, here’s how to write one: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{candidate\PYGZus{}df}\PYG{o}{.}\PYG{n}{to\PYGZus{}csv}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.csv}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +We can check the file size like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}candidates.csv +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 1.6M Oct 19 14:39 gd1\PYGZus{}candidates.csv +\end{sphinxVerbatim} + +The CSV file about 2 times bigger than the HDF5 file (so that’s not that bad, really). + +We can see the first few lines like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}head \PYGZhy{}3 gd1\PYGZus{}candidates.csv +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +,source\PYGZus{}id,ra,dec,pmra,pmdec,parallax,parallax\PYGZus{}error,radial\PYGZus{}velocity,phi1,phi2,pm\PYGZus{}phi1,pm\PYGZus{}phi2 +0,635559124339440000,137.58671691646745,19.1965441084838,\PYGZhy{}3.770521900009566,\PYGZhy{}12.490481778113859,0.7913934419894347,0.2717538145759051,,\PYGZhy{}59.63048941944396,\PYGZhy{}1.21648525150429,\PYGZhy{}7.361362712556612,\PYGZhy{}0.5926328820420083 +1,635860218726658176,138.5187065217173,19.09233926905897,\PYGZhy{}5.941679495793577,\PYGZhy{}11.346409129876392,0.30745551377348623,0.19946557779138105,,\PYGZhy{}59.247329893833296,\PYGZhy{}2.0160784008206476,\PYGZhy{}7.527126084599517,1.7487794924398758 +\end{sphinxVerbatim} + +The CSV file contains the names of the columns, but not the data types. + +We can read the CSV file back like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{read\PYGZus{}back\PYGZus{}csv} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}csv}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.csv}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +Let’s compare the first few rows of \sphinxcode{\sphinxupquote{candidate\_df}} and \sphinxcode{\sphinxupquote{read\_back\_csv}} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{candidate\PYGZus{}df}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{l+m+mi}{3}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] + source\PYGZus{}id ra dec pmra pmdec parallax \PYGZbs{} +0 635559124339440000 137.586717 19.196544 \PYGZhy{}3.770522 \PYGZhy{}12.490482 0.791393 +1 635860218726658176 138.518707 19.092339 \PYGZhy{}5.941679 \PYGZhy{}11.346409 0.307456 +2 635674126383965568 138.842874 19.031798 \PYGZhy{}3.897001 \PYGZhy{}12.702780 0.779463 + + parallax\PYGZus{}error radial\PYGZus{}velocity phi1 phi2 pm\PYGZus{}phi1 pm\PYGZus{}phi2 +0 0.271754 NaN \PYGZhy{}59.630489 \PYGZhy{}1.216485 \PYGZhy{}7.361363 \PYGZhy{}0.592633 +1 0.199466 NaN \PYGZhy{}59.247330 \PYGZhy{}2.016078 \PYGZhy{}7.527126 1.748779 +2 0.223692 NaN \PYGZhy{}59.133391 \PYGZhy{}2.306901 \PYGZhy{}7.560608 \PYGZhy{}0.741800 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{read\PYGZus{}back\PYGZus{}csv}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{l+m+mi}{3}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] + Unnamed: 0 source\PYGZus{}id ra dec pmra pmdec \PYGZbs{} +0 0 635559124339440000 137.586717 19.196544 \PYGZhy{}3.770522 \PYGZhy{}12.490482 +1 1 635860218726658176 138.518707 19.092339 \PYGZhy{}5.941679 \PYGZhy{}11.346409 +2 2 635674126383965568 138.842874 19.031798 \PYGZhy{}3.897001 \PYGZhy{}12.702780 + + parallax parallax\PYGZus{}error radial\PYGZus{}velocity phi1 phi2 pm\PYGZus{}phi1 \PYGZbs{} +0 0.791393 0.271754 NaN \PYGZhy{}59.630489 \PYGZhy{}1.216485 \PYGZhy{}7.361363 +1 0.307456 0.199466 NaN \PYGZhy{}59.247330 \PYGZhy{}2.016078 \PYGZhy{}7.527126 +2 0.779463 0.223692 NaN \PYGZhy{}59.133391 \PYGZhy{}2.306901 \PYGZhy{}7.560608 + + pm\PYGZus{}phi2 +0 \PYGZhy{}0.592633 +1 1.748779 +2 \PYGZhy{}0.741800 +\end{sphinxVerbatim} + +Notice that the index in \sphinxcode{\sphinxupquote{candidate\_df}} has become an unnamed column in \sphinxcode{\sphinxupquote{read\_back\_csv}}. The Pandas functions for writing and reading CSV files provide options to avoid that problem, but this is an example of the kind of thing that can go wrong with CSV files. + + +\section{Summary} +\label{\detokenize{04_select:summary}} +In the previous lesson we downloaded data for a large number of stars and then selected a small fraction of them based on proper motion. + +In this lesson, we improved this process by writing a more complex query that uses the database to select stars based on proper motion. This process requires more computation on the Gaia server, but then we’re able to either: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Search the same region and download less data, or + +\item {} +Search a larger region while still downloading a manageable amount of data. + +\end{enumerate} + +In the next lesson, we’ll learn about the databased \sphinxcode{\sphinxupquote{JOIN}} operation and use it to download photometry data from Pan\sphinxhyphen{}STARRS. + + +\section{Best practices} +\label{\detokenize{04_select:best-practices}}\begin{itemize} +\item {} +When possible, “move the computation to the data”; that is, do as much of the work as possible on the database server before downloading the data. + +\item {} +For most applications, saving data in FITS or HDF5 is better than CSV. FITS and HDF5 are binary formats, so the files are usually smaller, and they store metadata, so you don’t lose anything when you read the file back. + +\item {} +On the other hand, CSV is a “least common denominator” format; that is, it can be read by practically any application that works with data. + +\end{itemize} + + +\chapter{Chapter 5} +\label{\detokenize{05_join:chapter-5}}\label{\detokenize{05_join::doc}} +This is the fifth in a series of notebooks related to astronomy data. + +As a continuing example, we will replicate part of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +Picking up where we left off, the next step in the analysis is to select candidate stars based on photometry. The following figure from the paper is a color\sphinxhyphen{}magnitude diagram for the stars selected based on proper motion: + + + +In red is a theoretical isochrone, showing where we expect the stars in GD\sphinxhyphen{}1 to fall based on the metallicity and age of their original globular cluster. + +By selecting stars in the shaded area, we can further distinguish the main sequence of GD\sphinxhyphen{}1 from younger background stars. + + +\section{Outline} +\label{\detokenize{05_join:outline}} +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll reload the candidate stars we identified in the previous notebook. + +\item {} +Then we’ll run a query on the Gaia server that uploads the table of candidates and uses a \sphinxcode{\sphinxupquote{JOIN}} operation to select photometry data for the candidate stars. + +\item {} +We’ll write the results to a file for use in the next notebook. + +\end{enumerate} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Upload a table to the Gaia server. + +\item {} +Write ADQL queries involving \sphinxcode{\sphinxupquote{JOIN}} operations. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{05_join:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia python\PYGZhy{}wget +\end{sphinxVerbatim} + + +\section{Reloading the data} +\label{\detokenize{05_join:reloading-the-data}} +The following cell downloads the data from the previous notebook. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +And we can read it back. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{candidate\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{candidate\_df}} is the Pandas DataFrame that contains results from the query in the previous notebook, which selects stars likely to be in GD\sphinxhyphen{}1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} + +\PYG{n}{x} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{y} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{05_join_9_0}.png} + +This is the same figure we saw at the end of the previous notebook. GD\sphinxhyphen{}1 is visible against the background stars, but we will be able to see it more clearly after selecting based on photometry data. + + +\section{Getting photometry data} +\label{\detokenize{05_join:getting-photometry-data}} +The Gaia dataset contains some photometry data, including the variable \sphinxcode{\sphinxupquote{bp\_rp}}, which we used in the original query to select stars with BP \sphinxhyphen{} RP color between \sphinxhyphen{}0.75 and 2. + +Selecting stars with \sphinxcode{\sphinxupquote{bp\sphinxhyphen{}rp}} less than 2 excludes many class M dwarf stars, which are low temperature, low luminosity. A star like that at GD\sphinxhyphen{}1’s distance would be hard to detect, so if it is detected, it it more likely to be in the foreground. + +Now, to select stars with the age and metal richness we expect in GD\sphinxhyphen{}1, we will use \sphinxcode{\sphinxupquote{g \sphinxhyphen{} i}} color and apparent \sphinxcode{\sphinxupquote{g}}\sphinxhyphen{}band magnitude, which are available from the Pan\sphinxhyphen{}STARRS survey. + +Conveniently, the Gaia server provides data from Pan\sphinxhyphen{}STARRS as a table in the same database we have been using, so we can access it by making ADQL queries. + +In general, looking up a star from the Gaia catalog and finding the corresponding star in the Pan\sphinxhyphen{}STARRS catalog is not easy. This kind of cross matching is not always possible, because a star might appear in one catalog and not the other. And even when both stars are present, there might not be a clear one\sphinxhyphen{}to\sphinxhyphen{}one relationship between stars in the two catalogs. + +Fortunately, smart people have worked on this problem, and the Gaia database includes cross\sphinxhyphen{}matching tables that suggest a best neighbor in the Pan\sphinxhyphen{}STARRS catalog for many stars in the Gaia catalog. + +\sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Catalogue\_consolidation/chap\_cu9val\_cu9val/ssec\_cu9xma/sssec\_cu9xma\_extcat.html}{This document describes the cross matching process}. Briefly, it uses a cone search to find possible matches in approximately the right position, then uses attributes like color and magnitude to choose pairs of stars most likely to be identical. + +So the hard part of cross\sphinxhyphen{}matching has been done for us. However, using the results is a little tricky. + +But, it is also an opportunity to learn about one of the most important tools for working with databases: “joining” tables. + +In general, a “join” is an operation where you match up records from one table with records from another table using as a “key” a piece of information that is common to both tables, usually some kind of ID code. + +In this example: +\begin{itemize} +\item {} +Stars in the Gaia dataset are identified by \sphinxcode{\sphinxupquote{source\_id}}. + +\item {} +Stars in the Pan\sphinxhyphen{}STARRS dataset are identified by \sphinxcode{\sphinxupquote{obj\_id}}. + +\end{itemize} + +For each candidate star we have selected so far, we have the \sphinxcode{\sphinxupquote{source\_id}}; the goal is to find the \sphinxcode{\sphinxupquote{obj\_id}} for the same star (we hope) in the Pan\sphinxhyphen{}STARRS catalog. + +To do that we will: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Make a table that contains the \sphinxcode{\sphinxupquote{source\_id}} for each candidate star and upload the table to the Gaia server; + +\item {} +Use the \sphinxcode{\sphinxupquote{JOIN}} operator to look up each \sphinxcode{\sphinxupquote{source\_id}} in the \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_best\_neighbour}} table, which contains the \sphinxcode{\sphinxupquote{obj\_id}} of the best match for each star in the Gaia catalog; then + +\item {} +Use the \sphinxcode{\sphinxupquote{JOIN}} operator again to look up each \sphinxcode{\sphinxupquote{obj\_id}} in the \sphinxcode{\sphinxupquote{panstarrs1\_original\_valid}} table, which contains the Pan\sphinxhyphen{}STARRS photometry data we want. + +\end{enumerate} + +Let’s start with the first step, uploading a table. + + +\section{Preparing a table for uploading} +\label{\detokenize{05_join:preparing-a-table-for-uploading}} +For each candidate star, we want to find the corresponding row in the \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_best\_neighbour}} table. + +In order to do that, we have to: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Write the table in a local file as an XML VOTable, which is a format suitable for transmitting a table over a network. + +\item {} +Write an ADQL query that refers to the uploaded table. + +\item {} +Change the way we submit the job so it uploads the table before running the query. + +\end{enumerate} + +The first step is not too difficult because Astropy provides a function called \sphinxcode{\sphinxupquote{writeto}} that can write a \sphinxcode{\sphinxupquote{Table}} in \sphinxcode{\sphinxupquote{XML}}. + +\sphinxhref{https://docs.astropy.org/en/stable/io/votable/}{The documentation of this process is here}. + +First we have to convert our Pandas \sphinxcode{\sphinxupquote{DataFrame}} to an Astropy \sphinxcode{\sphinxupquote{Table}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{table} \PYG{k+kn}{import} \PYG{n}{Table} + +\PYG{n}{candidate\PYGZus{}table} \PYG{o}{=} \PYG{n}{Table}\PYG{o}{.}\PYG{n}{from\PYGZus{}pandas}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{)} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}table}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.table.Table +\end{sphinxVerbatim} + +To write the file, we can use \sphinxcode{\sphinxupquote{Table.write}} with \sphinxcode{\sphinxupquote{format=\textquotesingle{}votable\textquotesingle{}}}, \sphinxhref{https://docs.astropy.org/en/stable/io/unified.html\#vo-tables}{as described here}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{table} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{]} +\PYG{n}{table}\PYG{o}{.}\PYG{n}{write}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df.xml}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n+nb}{format}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{votable}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{overwrite}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\end{sphinxVerbatim} + +Notice that we select a single column from the table, \sphinxcode{\sphinxupquote{source\_id}}. +We could write the entire table to a file, but that would take longer to transmit over the network, and we really only need one column. + +This process, taking a structure like a \sphinxcode{\sphinxupquote{Table}} and translating it into a form that can be transmitted over a network, is called \sphinxhref{https://en.wikipedia.org/wiki/Serialization}{serialization}. + +XML is one of the most common serialization formats. One nice feature is that XML data is plain text, as opposed to binary digits, so you can read the file we just wrote: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}head candidate\PYGZus{}df.xml +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}?xml version=\PYGZdq{}1.0\PYGZdq{} encoding=\PYGZdq{}utf\PYGZhy{}8\PYGZdq{}?\PYGZgt{} +\PYGZlt{}!\PYGZhy{}\PYGZhy{} Produced with astropy.io.votable version 4.0.1.post1 + http://www.astropy.org/ \PYGZhy{}\PYGZhy{}\PYGZgt{} +\PYGZlt{}VOTABLE version=\PYGZdq{}1.4\PYGZdq{} xmlns=\PYGZdq{}http://www.ivoa.net/xml/VOTable/v1.4\PYGZdq{} xmlns:xsi=\PYGZdq{}http://www.w3.org/2001/XMLSchema\PYGZhy{}instance\PYGZdq{} xsi:noNamespaceSchemaLocation=\PYGZdq{}http://www.ivoa.net/xml/VOTable/v1.4\PYGZdq{}\PYGZgt{} + \PYGZlt{}RESOURCE type=\PYGZdq{}results\PYGZdq{}\PYGZgt{} + \PYGZlt{}TABLE\PYGZgt{} + \PYGZlt{}FIELD ID=\PYGZdq{}source\PYGZus{}id\PYGZdq{} datatype=\PYGZdq{}long\PYGZdq{} name=\PYGZdq{}source\PYGZus{}id\PYGZdq{}/\PYGZgt{} + \PYGZlt{}DATA\PYGZgt{} + \PYGZlt{}TABLEDATA\PYGZgt{} + \PYGZlt{}TR\PYGZgt{} +\end{sphinxVerbatim} + +XML is a general format, so different XML files contain different kinds of data. In order to read an XML file, it’s not enough to know that it’s XML; you also have to know the data format, which is called a \sphinxhref{https://en.wikipedia.org/wiki/XML\_schema}{schema}. + +In this example, the schema is VOTable; notice that one of the first tags in the file specifies the schema, and even includes the URL where you can get its definition. + +So this is an example of a self\sphinxhyphen{}documenting format. + +A drawback of XML is that it tends to be big, which is why we wrote just the \sphinxcode{\sphinxupquote{source\_id}} column rather than the whole table. +The size of the file is about 750 KB, so that’s not too bad. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh candidate\PYGZus{}df.xml +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 396K Oct 19 14:48 candidate\PYGZus{}df.xml +\end{sphinxVerbatim} + +If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir candidate\PYGZus{}df.xml +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} There’s a gotcha here we want to warn you about. Why do you think we used double brackets to specify the column we wanted? What happens if you use single brackets? + +Run these cells to find out. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{table} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{]} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{table}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.table.Table +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{column} \PYG{o}{=} \PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n+nb}{type}\PYG{p}{(}\PYG{n}{column}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +astropy.table.column.Column +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} writeto(column, \PYGZsq{}candidate\PYGZus{}df.xml\PYGZsq{})} +\end{sphinxVerbatim} + + +\section{Uploading a table} +\label{\detokenize{05_join:uploading-a-table}} +The next step is to upload this table to the Gaia server and use it as part of a query. + +\sphinxhref{https://astroquery.readthedocs.io/en/latest/gaia/gaia.html\#synchronous-query-on-an-on-the-fly-uploaded-table}{Here’s the documentation that explains how to run a query with an uploaded table}. + +In the spirit of incremental development and testing, let’s start with the simplest possible query. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT *} +\PYG{l+s+s2}{FROM tap\PYGZus{}upload.candidate\PYGZus{}df} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +This query downloads all rows and all columns from the uploaded table. The name of the table has two parts: \sphinxcode{\sphinxupquote{tap\_upload}} specifies a table that was uploaded using TAP+ (remember that’s the name of the protocol we’re using to talk to the Gaia server). + +And \sphinxcode{\sphinxupquote{candidate\_df}} is the name of the table, which we get to choose (unlike \sphinxcode{\sphinxupquote{tap\_upload}}, which we didn’t get to choose). + +Here’s how we run the query: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astroquery}\PYG{n+nn}{.}\PYG{n+nn}{gaia} \PYG{k+kn}{import} \PYG{n}{Gaia} + +\PYG{n}{job} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query}\PYG{o}{=}\PYG{n}{query}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}resource}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df.xml}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}table\PYGZus{}name}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: gea.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +Created TAP+ (v1.2.1) \PYGZhy{} Connection: + Host: geadata.esac.esa.int + Use HTTPS: True + Port: 443 + SSL Port: 443 +INFO: Query finished. [astroquery.utils.tap.core] +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{upload\_resource}} specifies the name of the file we want to upload, which is the file we just wrote. + +\sphinxcode{\sphinxupquote{upload\_table\_name}} is the name we assign to this table, which is the name we used in the query. + +And here are the results: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results} \PYG{o}{=} \PYG{n}{job}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{results} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=7346\PYGZgt{} + source\PYGZus{}id + int64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +635559124339440000 +635860218726658176 +635674126383965568 +635535454774983040 +635497276810313600 +635614168640132864 +635821843194387840 +635551706931167104 +635518889086133376 +635580294233854464 + ... +612282738058264960 +612485911486166656 +612386332668697600 +612296172717818624 +612250375480101760 +612394926899159168 +612288854091187712 +612428870024913152 +612256418500423168 +612429144902815104 +\end{sphinxVerbatim} + +If things go according to plan, the result should contain the same rows and columns as the uploaded table. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}table}\PYG{p}{)}\PYG{p}{,} \PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{results}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(7346, 7346) +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{set}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} \PYG{o}{==} \PYG{n+nb}{set}\PYG{p}{(}\PYG{n}{results}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +True +\end{sphinxVerbatim} + +In this example, we uploaded a table and then downloaded it again, so that’s not too useful. + +But now that we can upload a table, we can join it with other tables on the Gaia server. + + +\section{Joining with an uploaded table} +\label{\detokenize{05_join:joining-with-an-uploaded-table}} +Here’s the first example of a query that contains a \sphinxcode{\sphinxupquote{JOIN}} clause. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{query1} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT *} +\PYG{l+s+s2}{FROM gaiadr2.panstarrs1\PYGZus{}best\PYGZus{}neighbour as best} +\PYG{l+s+s2}{JOIN tap\PYGZus{}upload.candidate\PYGZus{}df as candidate\PYGZus{}df} +\PYG{l+s+s2}{ON best.source\PYGZus{}id = candidate\PYGZus{}df.source\PYGZus{}id} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +Let’s break that down one clause at a time: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{SELECT *}} means we will download all columns from both tables. + +\item {} +\sphinxcode{\sphinxupquote{FROM gaiadr2.panstarrs1\_best\_neighbour as best}} means that we’ll get the columns from the Pan\sphinxhyphen{}STARRS best neighbor table, which we’ll refer to using the short name \sphinxcode{\sphinxupquote{best}}. + +\item {} +\sphinxcode{\sphinxupquote{JOIN tap\_upload.candidate\_df as candidate\_df}} means that we’ll also get columns from the uploaded table, which we’ll refer to using the short name \sphinxcode{\sphinxupquote{candidate\_df}}. + +\item {} +\sphinxcode{\sphinxupquote{ON best.source\_id = candidate\_df.source\_id}} specifies that we will use \sphinxcode{\sphinxupquote{source\_id }} to match up the rows from the two tables. + +\end{itemize} + +Here’s the \sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Gaia\_archive/chap\_datamodel/sec\_dm\_crossmatches/ssec\_dm\_panstarrs1\_best\_neighbour.html}{documentation of the best neighbor table}. + +Let’s run the query: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job1} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query}\PYG{o}{=}\PYG{n}{query1}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}resource}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df.xml}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}table\PYGZus{}name}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +INFO: Query finished. [astroquery.utils.tap.core] +\end{sphinxVerbatim} + +And get the results. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results1} \PYG{o}{=} \PYG{n}{job1}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{results1} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=3724\PYGZgt{} + source\PYGZus{}id original\PYGZus{}ext\PYGZus{}source\PYGZus{}id ... source\PYGZus{}id\PYGZus{}2 + ... + int64 int64 ... int64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} ... \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +635860218726658176 130911385187671349 ... 635860218726658176 +635674126383965568 130831388428488720 ... 635674126383965568 +635535454774983040 130631378377657369 ... 635535454774983040 +635497276810313600 130811380445631930 ... 635497276810313600 +635614168640132864 130571395922140135 ... 635614168640132864 +635598607974369792 130341392091279513 ... 635598607974369792 +635737661835496576 131001399333502136 ... 635737661835496576 +635850945892748672 132011398654934147 ... 635850945892748672 +635600532119713664 130421392285893623 ... 635600532119713664 + ... ... ... ... +612241781249124608 129751343755995561 ... 612241781249124608 +612332147361443072 130141341458538777 ... 612332147361443072 +612426744016802432 130521346852465656 ... 612426744016802432 +612331739340341760 130111341217793839 ... 612331739340341760 +612282738058264960 129741340445933519 ... 612282738058264960 +612386332668697600 130351354570219774 ... 612386332668697600 +612296172717818624 129691338006168780 ... 612296172717818624 +612250375480101760 129741346475897464 ... 612250375480101760 +612394926899159168 130581355199751795 ... 612394926899159168 +612256418500423168 129931349075297310 ... 612256418500423168 +\end{sphinxVerbatim} + +This table contains all of the columns from the best neighbor table, plus the single column from the uploaded table. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results1}\PYG{o}{.}\PYG{n}{colnames} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}source\PYGZus{}id\PYGZsq{}, + \PYGZsq{}original\PYGZus{}ext\PYGZus{}source\PYGZus{}id\PYGZsq{}, + \PYGZsq{}angular\PYGZus{}distance\PYGZsq{}, + \PYGZsq{}number\PYGZus{}of\PYGZus{}neighbours\PYGZsq{}, + \PYGZsq{}number\PYGZus{}of\PYGZus{}mates\PYGZsq{}, + \PYGZsq{}best\PYGZus{}neighbour\PYGZus{}multiplicity\PYGZsq{}, + \PYGZsq{}gaia\PYGZus{}astrometric\PYGZus{}params\PYGZsq{}, + \PYGZsq{}source\PYGZus{}id\PYGZus{}2\PYGZsq{}] +\end{sphinxVerbatim} + +Because one of the column names appears in both tables, the second instance of \sphinxcode{\sphinxupquote{source\_id}} has been appended with the suffix \sphinxcode{\sphinxupquote{\_2}}. + +The length of the results table is about 2000, which means we were not able to find matches for all stars in the list of candidate\_df. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{results1}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +3724 +\end{sphinxVerbatim} + +To get more information about the matching process, we can inspect \sphinxcode{\sphinxupquote{best\_neighbour\_multiplicity}}, which indicates for each star in Gaia how many stars in Pan\sphinxhyphen{}STARRS are equally likely matches. + +For this kind of data exploration, we’ll convert a column from the table to a Pandas \sphinxcode{\sphinxupquote{Series}} so we can use \sphinxcode{\sphinxupquote{value\_counts}}, which counts the number of times each value appears in a \sphinxcode{\sphinxupquote{Series}}, like a histogram. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{nn} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{Series}\PYG{p}{(}\PYG{n}{results1}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{best\PYGZus{}neighbour\PYGZus{}multiplicity}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} +\PYG{n}{nn}\PYG{o}{.}\PYG{n}{value\PYGZus{}counts}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +1 3724 +dtype: int64 +\end{sphinxVerbatim} + +The result shows that \sphinxcode{\sphinxupquote{1}} is the only value in the \sphinxcode{\sphinxupquote{Series}}, appearing xxx times. + +That means that in every case where a match was found, the matching algorithm identified a single neighbor as the most likely match. + +Similarly, \sphinxcode{\sphinxupquote{number\_of\_mates}} indicates the number of other stars in Gaia that match with the same star in Pan\sphinxhyphen{}STARRS. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{nm} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{Series}\PYG{p}{(}\PYG{n}{results1}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{number\PYGZus{}of\PYGZus{}mates}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{)} +\PYG{n}{nm}\PYG{o}{.}\PYG{n}{value\PYGZus{}counts}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +0 3724 +dtype: int64 +\end{sphinxVerbatim} + +For this set of candidate\_df, almost all of the stars we’ve selected from Pan\sphinxhyphen{}STARRS are only matched with a single star in the Gaia catalog. + +\sphinxstylestrong{Detail} The table also contains \sphinxcode{\sphinxupquote{number\_of\_neighbors}} which is the number of stars in Pan\sphinxhyphen{}STARRS that match in terms of position, before using other critieria to choose the most likely match. + + +\section{Getting the photometry data} +\label{\detokenize{05_join:getting-the-photometry-data}} +The most important column in \sphinxcode{\sphinxupquote{results1}} is \sphinxcode{\sphinxupquote{original\_ext\_source\_id}} which is the \sphinxcode{\sphinxupquote{obj\_id}} we will use to look up the likely matches in Pan\sphinxhyphen{}STARRS to get photometry data. + +The process is similar to what we just did to look up the matches. We will: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Make a table that contains \sphinxcode{\sphinxupquote{source\_id}} and \sphinxcode{\sphinxupquote{original\_ext\_source\_id}}. + +\item {} +Write the table to an XML VOTable file. + +\item {} +Write a query that joins the uploaded table with \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}} and selects the photometry data we want. + +\item {} +Run the query using the uploaded table. + +\end{enumerate} + +Since we’ve done everything here before, we’ll do these steps as an exercise. + +\sphinxstylestrong{Exercise:} Select \sphinxcode{\sphinxupquote{source\_id}} and \sphinxcode{\sphinxupquote{original\_ext\_source\_id}} from \sphinxcode{\sphinxupquote{results1}} and write the resulting table as a file named \sphinxcode{\sphinxupquote{external.xml}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{table} \PYG{o}{=} \PYG{n}{results1}\PYG{p}{[}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{original\PYGZus{}ext\PYGZus{}source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{]} +\PYG{n}{table}\PYG{o}{.}\PYG{n}{write}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{external.xml}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n+nb}{format}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{votable}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{overwrite}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\end{sphinxVerbatim} + +Use \sphinxcode{\sphinxupquote{!head}} to confirm that the file exists and contains an XML VOTable. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}head external.xml +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}?xml version=\PYGZdq{}1.0\PYGZdq{} encoding=\PYGZdq{}utf\PYGZhy{}8\PYGZdq{}?\PYGZgt{} +\PYGZlt{}!\PYGZhy{}\PYGZhy{} Produced with astropy.io.votable version 4.0.1.post1 + http://www.astropy.org/ \PYGZhy{}\PYGZhy{}\PYGZgt{} +\PYGZlt{}VOTABLE version=\PYGZdq{}1.4\PYGZdq{} xmlns=\PYGZdq{}http://www.ivoa.net/xml/VOTable/v1.4\PYGZdq{} xmlns:xsi=\PYGZdq{}http://www.w3.org/2001/XMLSchema\PYGZhy{}instance\PYGZdq{} xsi:noNamespaceSchemaLocation=\PYGZdq{}http://www.ivoa.net/xml/VOTable/v1.4\PYGZdq{}\PYGZgt{} + \PYGZlt{}RESOURCE type=\PYGZdq{}results\PYGZdq{}\PYGZgt{} + \PYGZlt{}TABLE\PYGZgt{} + \PYGZlt{}FIELD ID=\PYGZdq{}source\PYGZus{}id\PYGZdq{} datatype=\PYGZdq{}long\PYGZdq{} name=\PYGZdq{}source\PYGZus{}id\PYGZdq{} ucd=\PYGZdq{}meta.id;meta.main\PYGZdq{}\PYGZgt{} + \PYGZlt{}DESCRIPTION\PYGZgt{} + Unique Gaia source identifier + \PYGZlt{}/DESCRIPTION\PYGZgt{} +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} Read \sphinxhref{https://gea.esac.esa.int/archive/documentation/GDR2/Gaia\_archive/chap\_datamodel/sec\_dm\_external\_catalogues/ssec\_dm\_panstarrs1\_original\_valid.html}{the documentation of the Pan\sphinxhyphen{}STARRS table} and make note of \sphinxcode{\sphinxupquote{obj\_id}}, which contains the object IDs we’ll use to find the rows we want. + +Write a query that uses each value of \sphinxcode{\sphinxupquote{original\_ext\_source\_id}} from the uploaded table to find a row in \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}} with the same value in \sphinxcode{\sphinxupquote{obj\_id}}, and select all columns from both tables. + +Suggestion: Develop and test your query incrementally. For example: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Write a query that downloads all columns from the uploaded table. Test to make sure we can read the uploaded table. + +\item {} +Write a query that downloads the first 10 rows from \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}}. Test to make sure we can access Pan\sphinxhyphen{}STARRS data. + +\item {} +Write a query that joins the two tables and selects all columns. Test that the join works as expected. + +\end{enumerate} + +As a bonus exercise, write a query that joins the two tables and selects just the columns we need: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{source\_id}} from the uploaded table + +\item {} +\sphinxcode{\sphinxupquote{g\_mean\_psf\_mag}} from \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}} + +\item {} +\sphinxcode{\sphinxupquote{i\_mean\_psf\_mag}} from \sphinxcode{\sphinxupquote{gaiadr2.panstarrs1\_original\_valid}} + +\end{itemize} + +Hint: When you select a column from a join, you have to specify which table the column is in. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query2} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT *} +\PYG{l+s+s2}{FROM tap\PYGZus{}upload.external as external} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query2} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT TOP 10 *} +\PYG{l+s+s2}{FROM gaiadr2.panstarrs1\PYGZus{}original\PYGZus{}valid} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query2} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT *} +\PYG{l+s+s2}{FROM gaiadr2.panstarrs1\PYGZus{}original\PYGZus{}valid as ps} +\PYG{l+s+s2}{JOIN tap\PYGZus{}upload.external as external} +\PYG{l+s+s2}{ON ps.obj\PYGZus{}id = external.original\PYGZus{}ext\PYGZus{}source\PYGZus{}id} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{n}{query2} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}}\PYG{l+s+s2}{SELECT} +\PYG{l+s+s2}{external.source\PYGZus{}id, ps.g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag, ps.i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag} +\PYG{l+s+s2}{FROM gaiadr2.panstarrs1\PYGZus{}original\PYGZus{}valid as ps} +\PYG{l+s+s2}{JOIN tap\PYGZus{}upload.external as external} +\PYG{l+s+s2}{ON ps.obj\PYGZus{}id = external.original\PYGZus{}ext\PYGZus{}source\PYGZus{}id} +\PYG{l+s+s2}{\PYGZdq{}\PYGZdq{}\PYGZdq{}} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{query2}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +SELECT +external.source\PYGZus{}id, ps.g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag, ps.i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +FROM gaiadr2.panstarrs1\PYGZus{}original\PYGZus{}valid as ps +JOIN tap\PYGZus{}upload.external as external +ON ps.obj\PYGZus{}id = external.original\PYGZus{}ext\PYGZus{}source\PYGZus{}id +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{job2} \PYG{o}{=} \PYG{n}{Gaia}\PYG{o}{.}\PYG{n}{launch\PYGZus{}job\PYGZus{}async}\PYG{p}{(}\PYG{n}{query}\PYG{o}{=}\PYG{n}{query2}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}resource}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{external.xml}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} + \PYG{n}{upload\PYGZus{}table\PYGZus{}name}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{external}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +INFO: Query finished. [astroquery.utils.tap.core] +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{results2} \PYG{o}{=} \PYG{n}{job2}\PYG{o}{.}\PYG{n}{get\PYGZus{}results}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{results2} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZlt{}Table length=3724\PYGZgt{} + source\PYGZus{}id g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag + mag + int64 float64 float64 +\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} +635860218726658176 17.8978004455566 17.5174007415771 +635674126383965568 19.2873001098633 17.6781005859375 +635535454774983040 16.9237995147705 16.478099822998 +635497276810313600 19.9242000579834 18.3339996337891 +635614168640132864 16.1515998840332 14.6662998199463 +635598607974369792 16.5223999023438 16.1375007629395 +635737661835496576 14.5032997131348 13.9849004745483 +635850945892748672 16.5174999237061 16.0450000762939 +635600532119713664 20.4505996704102 19.5177001953125 + ... ... ... +612241781249124608 20.2343997955322 18.6518001556396 +612332147361443072 21.3848991394043 20.3076000213623 +612426744016802432 17.8281002044678 17.4281005859375 +612331739340341760 21.8656997680664 19.5223007202148 +612282738058264960 22.5151996612549 19.9743995666504 +612386332668697600 19.3792991638184 17.9923000335693 +612296172717818624 17.4944000244141 16.926700592041 +612250375480101760 15.3330001831055 14.6280002593994 +612394926899159168 16.4414005279541 15.8212003707886 +612256418500423168 20.8715991973877 19.9612007141113 +\end{sphinxVerbatim} + +\sphinxstylestrong{Challenge exercise} + +Do both joins in one query. + +There’s an \sphinxhref{https://github.com/smoh/Getting-started-with-Gaia/blob/master/gaia-adql-snippets.md}{example here} you could start with. + + +\section{Write the data} +\label{\detokenize{05_join:write-the-data}} +Since we have the data in an Astropy \sphinxcode{\sphinxupquote{Table}}, let’s store it in a FITS file. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}photo.fits}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{results2}\PYG{o}{.}\PYG{n}{write}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{n}{overwrite}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\end{sphinxVerbatim} + +We can check that the file exists, and see how big it is. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}photo.fits +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 96K Oct 19 14:49 gd1\PYGZus{}photo.fits +\end{sphinxVerbatim} + +At around 175 KB, it is smaller than some of the other files we’ve been working with. + +If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir gd1\PYGZus{}photo.fits +\end{sphinxVerbatim} + + +\section{Summary} +\label{\detokenize{05_join:summary}} +In this notebook, we used database \sphinxcode{\sphinxupquote{JOIN}} operations to select photometry data for the stars we’ve identified as candidates to be in GD\sphinxhyphen{}1. + +In the next notebook, we’ll use this data for a second round of selection, identifying stars that have photometry data consistent with GD\sphinxhyphen{}1. + + +\section{Best practice} +\label{\detokenize{05_join:best-practice}}\begin{itemize} +\item {} +Use \sphinxcode{\sphinxupquote{JOIN}} operations to combine data from multiple tables in a databased, using some kind of identifier to match up records from one table with records from another. + +\item {} +This is another example of a practice we saw in the previous notebook, moving the computation to the data. + +\end{itemize} + + +\chapter{Chapter 6} +\label{\detokenize{06_photo:chapter-6}}\label{\detokenize{06_photo::doc}} +This is the sixth in a series of notebooks related to astronomy data. + +As a continuing example, we will replicate part of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +In the previous lesson we downloaded photometry data from Pan\sphinxhyphen{}STARRS, which is available from the same server we’ve been using to get Gaia data. + +The next step in the analysis is to select candidate stars based on the photometry data. The following figure from the paper is a color\sphinxhyphen{}magnitude diagram for the stars selected based on proper motion: + + + +In red is a theoretical isochrone, showing where we expect the stars in GD\sphinxhyphen{}1 to fall based on the metallicity and age of their original globular cluster. + +By selecting stars in the shaded area, we can further distinguish the main sequence of GD\sphinxhyphen{}1 from younger background stars. + + +\section{Outline} +\label{\detokenize{06_photo:outline}} +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll reload the data from the previous notebook and make a color\sphinxhyphen{}magnitude diagram. + +\item {} +Then we’ll specify a polygon in the diagram that contains stars with the photometry we expect. + +\item {} +Then we’ll merge the photometry data with the list of candidate stars, storing the result in a Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\end{enumerate} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Use Matplotlib to specify a \sphinxcode{\sphinxupquote{Polygon}} and determine which points fall inside it. + +\item {} +Use Pandas to merge data from multiple \sphinxcode{\sphinxupquote{DataFrames}}, much like a database \sphinxcode{\sphinxupquote{JOIN}} operation. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{06_photo:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia python\PYGZhy{}wget +\end{sphinxVerbatim} + + +\section{Reload the data} +\label{\detokenize{06_photo:reload-the-data}} +The following cell downloads the photometry data we created in the previous notebook. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}photo.fits}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{filepath} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{filepath}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +Now we can read the data back into an Astropy \sphinxcode{\sphinxupquote{Table}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{astropy}\PYG{n+nn}{.}\PYG{n+nn}{table} \PYG{k+kn}{import} \PYG{n}{Table} + +\PYG{n}{photo\PYGZus{}table} \PYG{o}{=} \PYG{n}{Table}\PYG{o}{.}\PYG{n}{read}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)} +\end{sphinxVerbatim} + + +\section{Plotting photometry data} +\label{\detokenize{06_photo:plotting-photometry-data}} +Now that we have photometry data from Pan\sphinxhyphen{}STARRS, we can replicate the \sphinxhref{https://en.wikipedia.org/wiki/Galaxy\_color\%E2\%80\%93magnitude\_diagram}{color\sphinxhyphen{}magnitude diagram} from the original paper: + + + +The y\sphinxhyphen{}axis shows the apparent magnitude of each source with the \sphinxhref{https://en.wikipedia.org/wiki/Photometric\_system}{g filter}. + +The x\sphinxhyphen{}axis shows the difference in apparent magnitude between the g and i filters, which indicates color. + +Stars with lower values of (g\sphinxhyphen{}i) are brighter in g\sphinxhyphen{}band than in i\sphinxhyphen{}band, compared to other stars, which means they are bluer. + +Stars in the lower\sphinxhyphen{}left quadrant of this diagram are less bright and less metallic than the others, which means they are \sphinxhref{http://spiff.rit.edu/classes/ladder/lectures/ordinary\_stars/ordinary.html}{likely to be older}. + +Since we expect the stars in GD\sphinxhyphen{}1 to be older than the background stars, the stars in the lower\sphinxhyphen{}left are more likely to be in GD\sphinxhyphen{}1. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} + +\PYG{k}{def} \PYG{n+nf}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{table}\PYG{p}{)}\PYG{p}{:} + \PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}Plot a color magnitude diagram.} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ table: Table or DataFrame with photometry data} +\PYG{l+s+sd}{ \PYGZdq{}\PYGZdq{}\PYGZdq{}} + \PYG{n}{y} \PYG{o}{=} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + \PYG{n}{x} \PYG{o}{=} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mf}{1.5}\PYG{p}{]}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mi}{14}\PYG{p}{,} \PYG{l+m+mi}{22}\PYG{p}{]}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{invert\PYGZus{}yaxis}\PYG{p}{(}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}g\PYGZus{}0\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}(g\PYGZhy{}i)\PYGZus{}0\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{plot\_cmd}} uses a new function, \sphinxcode{\sphinxupquote{invert\_yaxis}}, to invert the \sphinxcode{\sphinxupquote{y}} axis, which is conventional when plotting magnitudes, since lower magnitude indicates higher brightness. + +\sphinxcode{\sphinxupquote{invert\_yaxis}} is a little different from the other functions we’ve used. You can’t call it like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{invert\PYGZus{}yaxis}\PYG{p}{(}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} doesn\PYGZsq{}t work} +\end{sphinxVerbatim} + +You have to call it like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{invert\PYGZus{}yaxis}\PYG{p}{(}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} works} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{gca}} stands for “get current axis”. It returns an object that represents the axes of the current figure, and that object provides \sphinxcode{\sphinxupquote{invert\_yaxis}}. + +\sphinxstylestrong{In case anyone asks:} The most likely reason for this inconsistency in the interface is that \sphinxcode{\sphinxupquote{invert\_yaxis}} is a lesser\sphinxhyphen{}used function, so it’s not made available at the top level of the interface. + +Here’s what the results look like. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{photo\PYGZus{}table}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{06_photo_12_0}.png} + +Our figure does not look exactly like the one in the paper because we are working with a smaller region of the sky, so we don’t have as many stars. But we can see an overdense region in the lower left that contains stars with the photometry we expect for GD\sphinxhyphen{}1. + +The authors of the original paper derive a detailed polygon that defines a boundary between stars that are likely to be in GD\sphinxhyphen{}1 or not. + +As a simplification, we’ll choose a boundary by eye that seems to contain the overdense region. + + +\section{Drawing a polygon} +\label{\detokenize{06_photo:drawing-a-polygon}} +Matplotlib provides a function called \sphinxcode{\sphinxupquote{ginput}} that lets us click on the figure and make a list of coordinates. + +It’s a little tricky to use \sphinxcode{\sphinxupquote{ginput}} in a Jupyter notebook.Before calling \sphinxcode{\sphinxupquote{plt.ginput}} we have to tell Matplotlib to use \sphinxcode{\sphinxupquote{TkAgg}} to draw the figure in a new window. + +When you run the following cell, a figure should appear in a new window. Click on it 10 times to draw a polygon around the overdense area. A red cross should appear where you click. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib} \PYG{k}{as} \PYG{n+nn}{mpl} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{n}{coords} \PYG{o}{=} \PYG{k+kc}{None} +\PYG{k}{else}\PYG{p}{:} + \PYG{n}{mpl}\PYG{o}{.}\PYG{n}{use}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{TkAgg}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{photo\PYGZus{}table}\PYG{p}{)} + \PYG{n}{coords} \PYG{o}{=} \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ginput}\PYG{p}{(}\PYG{l+m+mi}{10}\PYG{p}{)} + \PYG{n}{mpl}\PYG{o}{.}\PYG{n}{use}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{agg}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +The argument to \sphinxcode{\sphinxupquote{ginput}} is the number of times the user has to click on the figure. + +The result from \sphinxcode{\sphinxupquote{ginput}} is a list of coordinate pairs. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coords} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[(0.2150537634408602, 17.548197203826344), + (0.3897849462365591, 18.94628403237675), + (0.5376344086021505, 19.902869757174393), + (0.7034050179211468, 20.601913171449596), + (0.8288530465949819, 21.300956585724798), + (0.6630824372759856, 21.52170713760118), + (0.4301075268817204, 20.785871964679913), + (0.27329749103942647, 19.71891096394408), + (0.17473118279569888, 18.688741721854306), + (0.17473118279569888, 17.95290654893304)] +\end{sphinxVerbatim} + +If \sphinxcode{\sphinxupquote{ginput}} doesn’t work for you, you could use the following coordinates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{if} \PYG{n}{coords} \PYG{o+ow}{is} \PYG{k+kc}{None}\PYG{p}{:} + \PYG{n}{coords} \PYG{o}{=} \PYG{p}{[}\PYG{p}{(}\PYG{l+m+mf}{0.2}\PYG{p}{,} \PYG{l+m+mf}{17.5}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.2}\PYG{p}{,} \PYG{l+m+mf}{19.5}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.65}\PYG{p}{,} \PYG{l+m+mi}{22}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.75}\PYG{p}{,} \PYG{l+m+mi}{21}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.4}\PYG{p}{,} \PYG{l+m+mi}{19}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.4}\PYG{p}{,} \PYG{l+m+mf}{17.5}\PYG{p}{)}\PYG{p}{]} +\end{sphinxVerbatim} + +The next step is to convert the coordinates to a format we can use to plot them, which is a sequence of \sphinxcode{\sphinxupquote{x}} coordinates and a sequence of \sphinxcode{\sphinxupquote{y}} coordinates. The NumPy function \sphinxcode{\sphinxupquote{transpose}} does what we want. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} + +\PYG{n}{xs}\PYG{p}{,} \PYG{n}{ys} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{transpose}\PYG{p}{(}\PYG{n}{coords}\PYG{p}{)} +\PYG{n}{xs}\PYG{p}{,} \PYG{n}{ys} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(array([0.21505376, 0.38978495, 0.53763441, 0.70340502, 0.82885305, + 0.66308244, 0.43010753, 0.27329749, 0.17473118, 0.17473118]), + array([17.5481972 , 18.94628403, 19.90286976, 20.60191317, 21.30095659, + 21.52170714, 20.78587196, 19.71891096, 18.68874172, 17.95290655])) +\end{sphinxVerbatim} + +To display the polygon, we’ll draw the figure again and use \sphinxcode{\sphinxupquote{plt.plot}} to draw the polygon. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{photo\PYGZus{}table}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{xs}\PYG{p}{,} \PYG{n}{ys}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{06_photo_23_0}.png} + +If it looks like your polygon does a good job surrounding the overdense area, go on to the next section. Otherwise you can try again. + +If you want a polygon with more points (or fewer), you can change the argument to \sphinxcode{\sphinxupquote{ginput}}. + +The polygon does not have to be “closed”. When we use this polygon in the next section, the last and first points will be connected by a straight line. + + +\section{Which points are in the polygon?} +\label{\detokenize{06_photo:which-points-are-in-the-polygon}} +Matplotlib provides a \sphinxcode{\sphinxupquote{Path}} object that we can use to check which points fall in the polygon we selected. + +Here’s how we make a \sphinxcode{\sphinxupquote{Path}} using a list of coordinates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{path} \PYG{k+kn}{import} \PYG{n}{Path} + +\PYG{n}{path} \PYG{o}{=} \PYG{n}{Path}\PYG{p}{(}\PYG{n}{coords}\PYG{p}{)} +\PYG{n}{path} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Path(array([[ 0.21505376, 17.5481972 ], + [ 0.38978495, 18.94628403], + [ 0.53763441, 19.90286976], + [ 0.70340502, 20.60191317], + [ 0.82885305, 21.30095659], + [ 0.66308244, 21.52170714], + [ 0.43010753, 20.78587196], + [ 0.27329749, 19.71891096], + [ 0.17473118, 18.68874172], + [ 0.17473118, 17.95290655]]), None) +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{Path}} provides \sphinxcode{\sphinxupquote{contains\_points}}, which figures out which points are inside the polygon. + +To test it, we’ll create a list with two points, one inside the polygon and one outside. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{points} \PYG{o}{=} \PYG{p}{[}\PYG{p}{(}\PYG{l+m+mf}{0.4}\PYG{p}{,} \PYG{l+m+mi}{20}\PYG{p}{)}\PYG{p}{,} + \PYG{p}{(}\PYG{l+m+mf}{0.4}\PYG{p}{,} \PYG{l+m+mi}{30}\PYG{p}{)}\PYG{p}{]} +\end{sphinxVerbatim} + +Now we can make sure \sphinxcode{\sphinxupquote{contains\_points}} does what we expect. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{inside} \PYG{o}{=} \PYG{n}{path}\PYG{o}{.}\PYG{n}{contains\PYGZus{}points}\PYG{p}{(}\PYG{n}{points}\PYG{p}{)} +\PYG{n}{inside} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([ True, False]) +\end{sphinxVerbatim} + +The result is an array of Boolean values. + +We are almost ready to select stars whose photometry data falls in this polygon. But first we need to do some data cleaning. + + +\section{Reloading the data} +\label{\detokenize{06_photo:reloading-the-data}} +Now we need to combine the photometry data with the list of candidate stars we identified in a previous notebook. The following cell downloads it: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{filepath} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{filepath}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{candidate\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\sphinxcode{\sphinxupquote{candidate\_df}} is the Pandas DataFrame that contains the results from Notebook XX, which selects stars likely to be in GD\sphinxhyphen{}1 based on proper motion. It also includes position and proper motion transformed to the ICRS frame. + + +\section{Merging photometry data} +\label{\detokenize{06_photo:merging-photometry-data}} +Before we select stars based on photometry data, we have to solve two problems: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We only have Pan\sphinxhyphen{}STARRS data for some stars in \sphinxcode{\sphinxupquote{candidate\_df}}. + +\item {} +Even for the stars where we have Pan\sphinxhyphen{}STARRS data in \sphinxcode{\sphinxupquote{photo\_table}}, some photometry data is missing. + +\end{enumerate} + +We will solve these problems in two step: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +We’ll merge the data from \sphinxcode{\sphinxupquote{candidate\_df}} and \sphinxcode{\sphinxupquote{photo\_table}} into a single Pandas \sphinxcode{\sphinxupquote{DataFrame}}. + +\item {} +We’ll use Pandas functions to deal with missing data. + +\end{enumerate} + +\sphinxcode{\sphinxupquote{candidate\_df}} is already a \sphinxcode{\sphinxupquote{DataFrame}}, but \sphinxcode{\sphinxupquote{results}} is an Astropy \sphinxcode{\sphinxupquote{Table}}. Let’s convert it to Pandas: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{photo\PYGZus{}df} \PYG{o}{=} \PYG{n}{photo\PYGZus{}table}\PYG{o}{.}\PYG{n}{to\PYGZus{}pandas}\PYG{p}{(}\PYG{p}{)} + +\PYG{k}{for} \PYG{n}{colname} \PYG{o+ow}{in} \PYG{n}{photo\PYGZus{}df}\PYG{o}{.}\PYG{n}{columns}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{colname}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +source\PYGZus{}id +g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +\end{sphinxVerbatim} + +Now we want to combine \sphinxcode{\sphinxupquote{candidate\_df}} and \sphinxcode{\sphinxupquote{photo\_df}} into a single table, using \sphinxcode{\sphinxupquote{source\_id}} to match up the rows. + +You might recognize this task; it’s the same as the JOIN operation in ADQL/SQL. + +Pandas provides a function called \sphinxcode{\sphinxupquote{merge}} that does what we want. Here’s how we use it. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{merged} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{merge}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{,} + \PYG{n}{photo\PYGZus{}df}\PYG{p}{,} + \PYG{n}{on}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{source\PYGZus{}id}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} + \PYG{n}{how}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{left}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{merged}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] + source\PYGZus{}id ra dec pmra pmdec parallax \PYGZbs{} +0 635559124339440000 137.586717 19.196544 \PYGZhy{}3.770522 \PYGZhy{}12.490482 0.791393 +1 635860218726658176 138.518707 19.092339 \PYGZhy{}5.941679 \PYGZhy{}11.346409 0.307456 +2 635674126383965568 138.842874 19.031798 \PYGZhy{}3.897001 \PYGZhy{}12.702780 0.779463 +3 635535454774983040 137.837752 18.864007 \PYGZhy{}4.335041 \PYGZhy{}14.492309 0.314514 +4 635497276810313600 138.044516 19.009471 \PYGZhy{}7.172931 \PYGZhy{}12.291499 0.425404 + + parallax\PYGZus{}error radial\PYGZus{}velocity phi1 phi2 pm\PYGZus{}phi1 pm\PYGZus{}phi2 \PYGZbs{} +0 0.271754 NaN \PYGZhy{}59.630489 \PYGZhy{}1.216485 \PYGZhy{}7.361363 \PYGZhy{}0.592633 +1 0.199466 NaN \PYGZhy{}59.247330 \PYGZhy{}2.016078 \PYGZhy{}7.527126 1.748779 +2 0.223692 NaN \PYGZhy{}59.133391 \PYGZhy{}2.306901 \PYGZhy{}7.560608 \PYGZhy{}0.741800 +3 0.102775 NaN \PYGZhy{}59.785300 \PYGZhy{}1.594569 \PYGZhy{}9.357536 \PYGZhy{}1.218492 +4 0.337689 NaN \PYGZhy{}59.557744 \PYGZhy{}1.682147 \PYGZhy{}9.000831 2.334407 + + g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +0 NaN NaN +1 17.8978 17.517401 +2 19.2873 17.678101 +3 16.9238 16.478100 +4 19.9242 18.334000 +\end{sphinxVerbatim} + +The first argument is the “left” table, the second argument is the “right” table, and the keyword argument \sphinxcode{\sphinxupquote{on=\textquotesingle{}source\_id\textquotesingle{}}} specifies a column to use to match up the rows. + +The argument \sphinxcode{\sphinxupquote{how=\textquotesingle{}left\textquotesingle{}}} means that the result should have all rows from the left table, even if some of them don’t match up with a row in the right table. + +If you are interested in the other options for \sphinxcode{\sphinxupquote{how}}, you can \sphinxhref{https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html}{read the documentation of \sphinxcode{\sphinxupquote{merge}}}. + +You can also do different types of join in ADQL/SQL; \sphinxhref{https://www.w3schools.com/sql/sql\_join.asp}{you can read about that here}. + +The result is a \sphinxcode{\sphinxupquote{DataFrame}} that contains the same number of rows as \sphinxcode{\sphinxupquote{candidate\_df}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{)}\PYG{p}{,} \PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{photo\PYGZus{}df}\PYG{p}{)}\PYG{p}{,} \PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{merged}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +(7346, 3724, 7346) +\end{sphinxVerbatim} + +And all columns from both tables. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{for} \PYG{n}{colname} \PYG{o+ow}{in} \PYG{n}{merged}\PYG{o}{.}\PYG{n}{columns}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{colname}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +source\PYGZus{}id +ra +dec +pmra +pmdec +parallax +parallax\PYGZus{}error +radial\PYGZus{}velocity +phi1 +phi2 +pm\PYGZus{}phi1 +pm\PYGZus{}phi2 +g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag +\end{sphinxVerbatim} + +\sphinxstylestrong{Detail} You might notice that Pandas also provides a function called \sphinxcode{\sphinxupquote{join}}; it does almost the same thing, but the interface is slightly different. We think \sphinxcode{\sphinxupquote{merge}} is a little easier to use, so that’s what we chose. It’s also more consistent with JOIN in SQL, so if you learn how to use \sphinxcode{\sphinxupquote{pd.merge}}, you are also learning how to use SQL JOIN. + +Also, someone might ask why we have to use Pandas to do this join; why didn’t we do it in ADQL. The answer is that we could have done that, but since we already have the data we need, we should probably do the computation locally rather than make another round trip to the Gaia server. + + +\section{Missing data} +\label{\detokenize{06_photo:missing-data}} +Let’s add columns to the merged table for magnitude and color. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{color}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\end{sphinxVerbatim} + +These columns contain the special value \sphinxcode{\sphinxupquote{NaN}} where we are missing data. + +We can use \sphinxcode{\sphinxupquote{notnull}} to see which rows contain value data, that is, not null values. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{color}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{o}{.}\PYG{n}{notnull}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +0 False +1 True +2 True +3 True +4 True + ... +7341 True +7342 False +7343 False +7344 True +7345 False +Name: color, Length: 7346, dtype: bool +\end{sphinxVerbatim} + +And \sphinxcode{\sphinxupquote{sum}} to count the number of valid values. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{merged}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{color}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{o}{.}\PYG{n}{notnull}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{sum}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +3724 +\end{sphinxVerbatim} + +For scientific purposes, it’s not obvious what we should do with candidate stars if we don’t have photometry data. Should we give them the benefit of the doubt or leave them out? + +In part the answer depends on the goal: are we trying to identify more stars that might be in GD\sphinxhyphen{}1, or a smaller set of stars that have higher probability? + +In the next section, we’ll leave them out, but you can experiment with the alternative. + + +\section{Selecting based on photometry} +\label{\detokenize{06_photo:selecting-based-on-photometry}} +Now let’s see how many of these points are inside the polygon we chose. + +We can use a list of column names to select \sphinxcode{\sphinxupquote{color}} and \sphinxcode{\sphinxupquote{mag}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{points} \PYG{o}{=} \PYG{n}{merged}\PYG{p}{[}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{color}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{]} +\PYG{n}{points}\PYG{o}{.}\PYG{n}{head}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] + color mag +0 NaN NaN +1 0.3804 17.8978 +2 1.6092 19.2873 +3 0.4457 16.9238 +4 1.5902 19.9242 +\end{sphinxVerbatim} + +The result is a \sphinxcode{\sphinxupquote{DataFrame}} that can be treated as a sequence of coordinates, so we can pass it to \sphinxcode{\sphinxupquote{contains\_points}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{inside} \PYG{o}{=} \PYG{n}{path}\PYG{o}{.}\PYG{n}{contains\PYGZus{}points}\PYG{p}{(}\PYG{n}{points}\PYG{p}{)} +\PYG{n}{inside} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([False, False, False, ..., False, False, False]) +\end{sphinxVerbatim} + +The result is a Boolean array. We can use \sphinxcode{\sphinxupquote{sum}} to see how many stars fall in the polygon. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{inside}\PYG{o}{.}\PYG{n}{sum}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +496 +\end{sphinxVerbatim} + +Now we can use \sphinxcode{\sphinxupquote{inside}} as a mask to select stars that fall inside the polygon. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{selected} \PYG{o}{=} \PYG{n}{merged}\PYG{p}{[}\PYG{n}{inside}\PYG{p}{]} +\end{sphinxVerbatim} + +Let’s make a color\sphinxhyphen{}magnitude plot one more time, highlighting the selected stars with green \sphinxcode{\sphinxupquote{x}} marks. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{photo\PYGZus{}table}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{xs}\PYG{p}{,} \PYG{n}{ys}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{color}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gx}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{06_photo_61_0}.png} + +It looks like the selected stars are, in fact, inside the polygon, which means they have photometry data consistent with GD\sphinxhyphen{}1. + +Finally, we can plot the coordinates of the selected stars: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{figure}\PYG{p}{(}\PYG{n}{figsize}\PYG{o}{=}\PYG{p}{(}\PYG{l+m+mi}{10}\PYG{p}{,}\PYG{l+m+mf}{2.5}\PYG{p}{)}\PYG{p}{)} + +\PYG{n}{x} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\PYG{n}{y} \PYG{o}{=} \PYG{n}{selected}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.7}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.9}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ra (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{dec (degree GD1)}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{axis}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{equal}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{06_photo_63_0}.png} + +This example includes two new Matplotlib commands: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{figure}} creates the figure. In previous examples, we didn’t have to use this function; the figure was created automatically. But when we call it explicitly, we can provide arguments like \sphinxcode{\sphinxupquote{figsize}}, which sets the size of the figure. + +\item {} +\sphinxcode{\sphinxupquote{axis}} with the parameter \sphinxcode{\sphinxupquote{equal}} sets up the axes so a unit is the same size along the \sphinxcode{\sphinxupquote{x}} and \sphinxcode{\sphinxupquote{y}} axes. + +\end{itemize} + +In an example like this, where \sphinxcode{\sphinxupquote{x}} and \sphinxcode{\sphinxupquote{y}} represent coordinates in space, equal axes ensures that the distance between points is represented accurately. + + +\section{Write the data} +\label{\detokenize{06_photo:write-the-data}} +Let’s write the merged DataFrame to a file. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}merged.hdf5}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{n}{merged}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{merged}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{selected}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{selected}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{o}{!}ls \PYGZhy{}lh gd1\PYGZus{}merged.hdf5 +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYGZhy{}rw\PYGZhy{}rw\PYGZhy{}r\PYGZhy{}\PYGZhy{} 1 downey downey 2.0M Oct 19 17:21 gd1\PYGZus{}merged.hdf5 +\end{sphinxVerbatim} + +If you are using Windows, \sphinxcode{\sphinxupquote{ls}} might not work; in that case, try: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +!dir gd1\PYGZus{}merged.hdf5 +\end{sphinxVerbatim} + + +\section{Save the polygon} +\label{\detokenize{06_photo:save-the-polygon}} +\sphinxhref{https://en.wikipedia.org/wiki/Reproducibility\#Reproducible\_research}{Reproducibile research} is “the idea that … the full computational environment used to produce the results in the paper such as the code, data, etc. can be used to reproduce the results and create new work based on the research.” + +This Jupyter notebook is an example of reproducible research because it contains all of the code needed to reproduce the results, including the database queries that download the data and and analysis. + +However, when we used \sphinxcode{\sphinxupquote{ginput}} to define a polygon by hand, we introduced a non\sphinxhyphen{}reproducible element to the analysis. If someone running this notebook chooses a different polygon, they will get different results. So it is important to record the polygon we chose as part of the data analysis pipeline. + +Since \sphinxcode{\sphinxupquote{coords}} is a NumPy array, we can’t use \sphinxcode{\sphinxupquote{to\_hdf}} to save it in a file. But we can convert it to a Pandas \sphinxcode{\sphinxupquote{DataFrame}} and save that. + +As an alternative, we could use \sphinxhref{http://www.pytables.org/index.html}{PyTables}, which is the library Pandas uses to read and write files. It is a powerful library, but not easy to use directly. So let’s take advantage of Pandas. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coords\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{DataFrame}\PYG{p}{(}\PYG{n}{coords}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}polygon.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{coords\PYGZus{}df}\PYG{o}{.}\PYG{n}{to\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{coords\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +We can read it back like this. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coords2\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{coords\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{coords2} \PYG{o}{=} \PYG{n}{coords2\PYGZus{}df}\PYG{o}{.}\PYG{n}{to\PYGZus{}numpy}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +And verify that the data we read back is the same. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{np}\PYG{o}{.}\PYG{n}{all}\PYG{p}{(}\PYG{n}{coords2} \PYG{o}{==} \PYG{n}{coords}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +True +\end{sphinxVerbatim} + + +\section{Summary} +\label{\detokenize{06_photo:summary}} +In this notebook, we worked with two datasets: the list of candidate stars from Gaia and the photometry data from Pan\sphinxhyphen{}STARRS. + +We drew a color\sphinxhyphen{}magnitude diagram and used it to identify stars we think are likely to be in GD\sphinxhyphen{}1. + +Then we used a Pandas \sphinxcode{\sphinxupquote{merge}} operation to combine the data into a single \sphinxcode{\sphinxupquote{DataFrame}}. + + +\section{Best practices} +\label{\detokenize{06_photo:best-practices}}\begin{itemize} +\item {} +If you want to perform something like a database \sphinxcode{\sphinxupquote{JOIN}} operation with data that is in a Pandas \sphinxcode{\sphinxupquote{DataFrame}}, you can use the \sphinxcode{\sphinxupquote{join}} or \sphinxcode{\sphinxupquote{merge}} function. In many cases, \sphinxcode{\sphinxupquote{merge}} is easier to use because the arguments are more like SQL. + +\item {} +Use Matplotlib options to control the size and aspect ratio of figures to make them easier to interpret. In this example, we scaled the axes so the size of a degree is equal along both axes. + +\item {} +Matplotlib also provides operations for working with points, polygons, and other geometric entities, so it’s not just for making figures. + +\item {} +Be sure to record every element of the data analysis pipeline that would be needed to replicate the results. + +\end{itemize} + + +\chapter{Chapter 7} +\label{\detokenize{07_plot:chapter-7}}\label{\detokenize{07_plot::doc}} +This is the seventh in a series of notebooks related to astronomy data. + +As a continuing example, we will replicate part of the analysis in a recent paper, “\sphinxhref{https://arxiv.org/abs/1805.00425}{Off the beaten path: Gaia reveals GD\sphinxhyphen{}1 stars outside of the main stream}” by Adrian M. Price\sphinxhyphen{}Whelan and Ana Bonaca. + +In the previous notebook we selected photometry data from Pan\sphinxhyphen{}STARRS and used it to identify stars we think are likely to be in GD\sphinxhyphen{}1 + +In this notebook, we’ll take the results from previous lessons and use them to make a figure that tells a compelling scientific story. + + +\section{Outline} +\label{\detokenize{07_plot:outline}} +Here are the steps in this notebook: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly. + +\item {} +The we’ll see several ways to customize figures to make them more appealing and effective. + +\item {} +Finally, we’ll see how to make a figure with multiple panels or subplots. + +\end{enumerate} + +After completing this lesson, you should be able to +\begin{itemize} +\item {} +Design a figure that tells a compelling story. + +\item {} +Use Matplotlib features to customize the appearance of figures. + +\item {} +Generate a figure with multiple subplots. + +\end{itemize} + + +\section{Installing libraries} +\label{\detokenize{07_plot:installing-libraries}} +If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use. + +If you are running this notebook on your own computer, you might have to install these libraries yourself. + +If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions. + +TODO: Add a link to the instructions. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} If we\PYGZsq{}re running on Colab, install libraries} + +\PYG{k+kn}{import} \PYG{n+nn}{sys} +\PYG{n}{IN\PYGZus{}COLAB} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{google.colab}\PYG{l+s+s1}{\PYGZsq{}} \PYG{o+ow}{in} \PYG{n}{sys}\PYG{o}{.}\PYG{n}{modules} + +\PYG{k}{if} \PYG{n}{IN\PYGZus{}COLAB}\PYG{p}{:} + \PYG{o}{!}pip install astroquery astro\PYGZhy{}gala pyia python\PYGZhy{}wget +\end{sphinxVerbatim} + + +\section{Making Figures That Tell a Story} +\label{\detokenize{07_plot:making-figures-that-tell-a-story}} +So far the figure we’ve made have been “quick and dirty”. Mostly we have used Matplotlib’s default style, although we have adjusted a few parameters, like \sphinxcode{\sphinxupquote{markersize}} and \sphinxcode{\sphinxupquote{alpha}}, to improve legibility. + +Now that the analysis is done, it’s time to think more about: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +Making professional\sphinxhyphen{}looking figures that are ready for publication, and + +\item {} +Making figures that communicate a scientific result clearly and compellingly. + +\end{enumerate} + +Not necessarily in that order. + +Let’s start by reviewing Figure 1 from the original paper. We’ve seen the individual panels, but now let’s look at the whole thing, along with the caption: + + + +\sphinxstylestrong{Exercise:} Think about the following questions: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +What is the primary scientific result of this work? + +\item {} +What story is this figure telling? + +\item {} +In the design of this figure, can you identify 1\sphinxhyphen{}2 choices the authors made that you think are effective? Think about big\sphinxhyphen{}picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface. + +\item {} +Can you identify 1\sphinxhyphen{}2 elements that could be improved, or that you might have done differently? + +\end{enumerate} + +Some topics that might come up in this discussion: +\begin{enumerate} +\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}% +\item {} +The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD\sphinxhyphen{}1 in “unprecedented detail”. + +\item {} +The figure documents the selection process as a sequence of steps. Reading right\sphinxhyphen{}to\sphinxhyphen{}left, top\sphinxhyphen{}to\sphinxhyphen{}bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result. + +\item {} +It’s mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned. + +\item {} +Since the panels represent a sequence, it might be better to arrange them left\sphinxhyphen{}to\sphinxhyphen{}right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left). + +\end{enumerate} + + +\section{Plotting GD\sphinxhyphen{}1} +\label{\detokenize{07_plot:plotting-gd-1}} +Let’s start with the panel in the lower left. The following cell reloads the data. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} +\PYG{k+kn}{from} \PYG{n+nn}{wget} \PYG{k+kn}{import} \PYG{n}{download} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}merged.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{selected} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{selected}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} + +\PYG{k}{def} \PYG{n+nf}{plot\PYGZus{}second\PYGZus{}selection}\PYG{p}{(}\PYG{n}{df}\PYG{p}{)}\PYG{p}{:} + \PYG{n}{x} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + \PYG{n}{y} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.7}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.9}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}1\PYGZdl{} [deg]}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}2\PYGZdl{} [deg]}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{title}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion + photometry selection}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{fontsize}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{medium}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{axis}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{equal}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +And here’s what it looks like. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{figure}\PYG{p}{(}\PYG{n}{figsize}\PYG{o}{=}\PYG{p}{(}\PYG{l+m+mi}{10}\PYG{p}{,}\PYG{l+m+mf}{2.5}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}second\PYGZus{}selection}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_13_0}.png} + + +\section{Annotations} +\label{\detokenize{07_plot:annotations}} +The figure in the paper uses three other features to present the results more clearly and compellingly: +\begin{itemize} +\item {} +A vertical dashed line to distinguish the previously undetected region of GD\sphinxhyphen{}1, + +\item {} +A label that identifies the new region, and + +\item {} +Several annotations that combine text and arrows to identify features of GD\sphinxhyphen{}1. + +\end{itemize} + +As an exercise, choose any or all of these features and add them to the figure: +\begin{itemize} +\item {} +To draw vertical lines, see \sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.vlines.html}{\sphinxcode{\sphinxupquote{plt.vlines}}} and \sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.axvline.html\#matplotlib.pyplot.axvline}{\sphinxcode{\sphinxupquote{plt.axvline}}}. + +\item {} +To add text, see \sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.text.html}{\sphinxcode{\sphinxupquote{plt.text}}}. + +\item {} +To add an annotation with text and an arrow, see \DUrole{xref,myst}{plt.annotate}. + +\end{itemize} + +And here is some \sphinxhref{https://matplotlib.org/3.3.1/tutorials/text/annotations.html\#plotting-guide-annotation}{additional information about text and arrows}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{c+c1}{\PYGZsh{} plt.axvline(\PYGZhy{}55, ls=\PYGZsq{}\PYGZhy{}\PYGZhy{}\PYGZsq{}, color=\PYGZsq{}gray\PYGZsq{}, } +\PYG{c+c1}{\PYGZsh{} alpha=0.4, dashes=(6,4), lw=2)} +\PYG{c+c1}{\PYGZsh{} plt.text(\PYGZhy{}60, 5.5, \PYGZsq{}Previously\PYGZbs{}nundetected\PYGZsq{}, } +\PYG{c+c1}{\PYGZsh{} fontsize=\PYGZsq{}small\PYGZsq{}, ha=\PYGZsq{}right\PYGZsq{}, va=\PYGZsq{}top\PYGZsq{});} + +\PYG{c+c1}{\PYGZsh{} arrowprops=dict(color=\PYGZsq{}gray\PYGZsq{}, shrink=0.05, width=1.5, } +\PYG{c+c1}{\PYGZsh{} headwidth=6, headlength=8, alpha=0.4)} + +\PYG{c+c1}{\PYGZsh{} plt.annotate(\PYGZsq{}Spur\PYGZsq{}, xy=(\PYGZhy{}33, 2), xytext=(\PYGZhy{}35, 5.5),} +\PYG{c+c1}{\PYGZsh{} arrowprops=arrowprops,} +\PYG{c+c1}{\PYGZsh{} fontsize=\PYGZsq{}small\PYGZsq{})} + +\PYG{c+c1}{\PYGZsh{} plt.annotate(\PYGZsq{}Gap\PYGZsq{}, xy=(\PYGZhy{}22, \PYGZhy{}1), xytext=(\PYGZhy{}25, \PYGZhy{}5.5),} +\PYG{c+c1}{\PYGZsh{} arrowprops=arrowprops,} +\PYG{c+c1}{\PYGZsh{} fontsize=\PYGZsq{}small\PYGZsq{})} +\end{sphinxVerbatim} + + +\section{Customization} +\label{\detokenize{07_plot:customization}} +Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties. + +There are several ways to override these defaults and customize your figures: +\begin{itemize} +\item {} +To customize only the current figure, you can call functions like \sphinxcode{\sphinxupquote{tick\_params}}, which we’ll demonstrate below. + +\item {} +To customize all figures in a notebook, you use \sphinxcode{\sphinxupquote{rcParams}}. + +\item {} +To override more than a few defaults at the same time, you can use a style sheet. + +\end{itemize} + +As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes. + +To change this behavior, you can use \sphinxcode{\sphinxupquote{gca()}} to get the current axes and \sphinxcode{\sphinxupquote{tick\_params}} to change the settings. + +Here’s how you can put the ticks on the inside of the figure: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{tick\PYGZus{}params}\PYG{p}{(}\PYG{n}{direction}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{in}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} Read the documentation of \sphinxhref{https://matplotlib.org/3.1.1/api/\_as\_gen/matplotlib.axes.Axes.tick\_params.html}{\sphinxcode{\sphinxupquote{tick\_params}}} and use it to put ticks on the top and right sides of the axes. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{c+c1}{\PYGZsh{} plt.gca().tick\PYGZus{}params(top=True, right=True)} +\end{sphinxVerbatim} + + +\section{rcParams} +\label{\detokenize{07_plot:rcparams}} +If you want to make a customization that applies to all figures in a notebook, you can use \sphinxcode{\sphinxupquote{rcParams}}. + +Here’s an example that reads the current font size from \sphinxcode{\sphinxupquote{rcParams}}: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{rcParams}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{font.size}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +10.0 +\end{sphinxVerbatim} + +And sets it to a new value: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{rcParams}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{font.size}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{l+m+mi}{14} +\end{sphinxVerbatim} + +\sphinxstylestrong{Exercise:} Plot the previous figure again, and see what font sizes have changed. Look up any other element of \sphinxcode{\sphinxupquote{rcParams}}, change its value, and check the effect on the figure. + +If you find yourself making the same customizations in several notebooks, you can put changes to \sphinxcode{\sphinxupquote{rcParams}} in a \sphinxcode{\sphinxupquote{matplotlibrc}} file, \sphinxhref{https://matplotlib.org/3.3.1/tutorials/introductory/customizing.html\#customizing-with-matplotlibrc-files}{which you can read about here}. + + +\section{Style sheets} +\label{\detokenize{07_plot:style-sheets}} +The \sphinxcode{\sphinxupquote{matplotlibrc}} file is read when you import Matplotlib, so it is not easy to switch from one set of options to another. + +The solution to this problem is style sheets, \sphinxhref{https://matplotlib.org/3.1.1/tutorials/introductory/customizing.html}{which you can read about here}. + +Matplotlib provides a set of predefined style sheets, or you can make your own. + +The following cell displays a list of style sheets installed on your system. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{style}\PYG{o}{.}\PYG{n}{available} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +[\PYGZsq{}Solarize\PYGZus{}Light2\PYGZsq{}, + \PYGZsq{}\PYGZus{}classic\PYGZus{}test\PYGZus{}patch\PYGZsq{}, + \PYGZsq{}bmh\PYGZsq{}, + \PYGZsq{}classic\PYGZsq{}, + \PYGZsq{}dark\PYGZus{}background\PYGZsq{}, + \PYGZsq{}fast\PYGZsq{}, + \PYGZsq{}fivethirtyeight\PYGZsq{}, + \PYGZsq{}ggplot\PYGZsq{}, + \PYGZsq{}grayscale\PYGZsq{}, + \PYGZsq{}seaborn\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}bright\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}colorblind\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}dark\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}dark\PYGZhy{}palette\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}darkgrid\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}deep\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}muted\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}notebook\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}paper\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}pastel\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}poster\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}talk\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}ticks\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}white\PYGZsq{}, + \PYGZsq{}seaborn\PYGZhy{}whitegrid\PYGZsq{}, + \PYGZsq{}tableau\PYGZhy{}colorblind10\PYGZsq{}] +\end{sphinxVerbatim} + +Note that \sphinxcode{\sphinxupquote{seaborn\sphinxhyphen{}paper}}, \sphinxcode{\sphinxupquote{seaborn\sphinxhyphen{}talk}} and \sphinxcode{\sphinxupquote{seaborn\sphinxhyphen{}poster}} are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters. + +To use any of these style sheets, run \sphinxcode{\sphinxupquote{plt.style.use}} like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{style}\PYG{o}{.}\PYG{n}{use}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{fivethirtyeight}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +The style sheet you choose will affect the appearance of all figures you plot after calling \sphinxcode{\sphinxupquote{use}}, unless you override any of the options or call \sphinxcode{\sphinxupquote{use}} again. + +\sphinxstylestrong{Exercise:} Choose one of the styles on the list and select it by calling \sphinxcode{\sphinxupquote{use}}. Then go back and plot one of the figures above and see what effect it has. + +If you can’t find a style sheet that’s exactly what you want, you can make your own. This repository includes a style sheet called \sphinxcode{\sphinxupquote{az\sphinxhyphen{}paper\sphinxhyphen{}twocol.mplstyle}}, with customizations chosen by Azalee Bostroem for publication in astronomy journals. + +The following cell downloads the style sheet. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{az\PYGZhy{}paper\PYGZhy{}twocol.mplstyle}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +You can use it like this: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{style}\PYG{o}{.}\PYG{n}{use}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{./az\PYGZhy{}paper\PYGZhy{}twocol.mplstyle}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +The prefix \sphinxcode{\sphinxupquote{./}} tells Matplotlib to look for the file in the current directory. + +As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib} \PYG{k}{as} \PYG{n+nn}{mpl} + +\PYG{n}{mpl}\PYG{o}{.}\PYG{n}{get\PYGZus{}configdir}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + + +\section{LaTeX fonts} +\label{\detokenize{07_plot:latex-fonts}} +When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses \sphinxhref{https://matplotlib.org/3.1.0/tutorials/text/mathtext.html}{\sphinxcode{\sphinxupquote{mathtext}}} to typeset them. \sphinxcode{\sphinxupquote{mathtext}} uses the same syntax as LaTeX, but it provides only a subset of its features. + +If you need features that are not provided by \sphinxcode{\sphinxupquote{mathtext}}, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX. + +In \sphinxcode{\sphinxupquote{matplotlibrc}} or in a style sheet, you can add the following line: + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{text}\PYG{o}{.}\PYG{n}{usetex} \PYG{p}{:} \PYG{n}{true} +\end{sphinxVerbatim} + +Or in a notebook you can run the following code. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{rcParams}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{text.usetex}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{k+kc}{True} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{rcParams}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{text.usetex}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{k+kc}{True} +\end{sphinxVerbatim} + +If you go back and draw the figure again, you should see the difference. + +If you get an error message like + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +LaTeX Error: File `type1cm.sty\PYGZsq{} not found. +\end{sphinxVerbatim} + +You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages \sphinxcode{\sphinxupquote{texlive\sphinxhyphen{}latex\sphinxhyphen{}extra}} or \sphinxcode{\sphinxupquote{cm\sphinxhyphen{}super}} might be what you need. \sphinxhref{https://stackoverflow.com/questions/11354149/python-unable-to-render-tex-in-matplotlib}{See here for more help with this}. + +In case you are curious, \sphinxcode{\sphinxupquote{cm}} stands for \sphinxhref{https://en.wikipedia.org/wiki/Computer\_Modern}{Computer Modern}, the font LaTeX uses to typeset math. + + +\section{Multiple panels} +\label{\detokenize{07_plot:multiple-panels}} +So far we’ve been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as “subplots”. + +Confusingly, Matplotlib provides \sphinxstyleemphasis{three} functions for making figures like this: \sphinxcode{\sphinxupquote{subplot}}, \sphinxcode{\sphinxupquote{subplots}}, and \sphinxcode{\sphinxupquote{subplot2grid}}. +\begin{itemize} +\item {} +\sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.subplot.html}{\sphinxcode{\sphinxupquote{subplot}}} is simple and similar to MATLAB, so if you are familiar with that interface, you might like \sphinxcode{\sphinxupquote{subplot}} + +\item {} +\sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.subplots.html}{\sphinxcode{\sphinxupquote{subplots}}} is more object\sphinxhyphen{}oriented, which some people prefer. + +\item {} +\sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.subplot2grid.html}{\sphinxcode{\sphinxupquote{subplot2grid}}} is most convenient if you want to control the relative sizes of the subplots. + +\end{itemize} + +So we’ll use \sphinxcode{\sphinxupquote{subplot2grid}}. + +All of these functions are easier to use if we put the code that generates each panel in a function. + + +\section{Upper right} +\label{\detokenize{07_plot:upper-right}} +To make the panel in the upper right, we have to reload \sphinxcode{\sphinxupquote{centerline}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}dataframe.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{centerline} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{centerline}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +And define the coordinates of the rectangle we selected. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{pm1\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{8.9} +\PYG{n}{pm1\PYGZus{}max} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{6.9} +\PYG{n}{pm2\PYGZus{}min} \PYG{o}{=} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{2.2} +\PYG{n}{pm2\PYGZus{}max} \PYG{o}{=} \PYG{l+m+mf}{1.0} + +\PYG{n}{pm1\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm1\PYGZus{}max}\PYG{p}{]} +\PYG{n}{pm2\PYGZus{}rect} \PYG{o}{=} \PYG{p}{[}\PYG{n}{pm2\PYGZus{}min}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}max}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}min}\PYG{p}{]} +\end{sphinxVerbatim} + +To plot this rectangle, we’ll use a feature we have not seen before: \sphinxcode{\sphinxupquote{Polygon}}, which is provided by Matplotlib. + +To create a \sphinxcode{\sphinxupquote{Polygon}}, we have to put the coordinates in an array with \sphinxcode{\sphinxupquote{x}} values in the first column and \sphinxcode{\sphinxupquote{y}} values in the second column. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} + +\PYG{n}{vertices} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{transpose}\PYG{p}{(}\PYG{p}{[}\PYG{n}{pm1\PYGZus{}rect}\PYG{p}{,} \PYG{n}{pm2\PYGZus{}rect}\PYG{p}{]}\PYG{p}{)} +\PYG{n}{vertices} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([[\PYGZhy{}8.9, \PYGZhy{}2.2], + [\PYGZhy{}8.9, 1. ], + [\PYGZhy{}6.9, 1. ], + [\PYGZhy{}6.9, \PYGZhy{}2.2]]) +\end{sphinxVerbatim} + +The following function takes a \sphinxcode{\sphinxupquote{DataFrame}} as a parameter, plots the proper motion for each star, and adds a shaded \sphinxcode{\sphinxupquote{Polygon}} to show the region we selected. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{from} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{patches} \PYG{k+kn}{import} \PYG{n}{Polygon} + +\PYG{k}{def} \PYG{n+nf}{plot\PYGZus{}proper\PYGZus{}motion}\PYG{p}{(}\PYG{n}{df}\PYG{p}{)}\PYG{p}{:} + \PYG{n}{pm1} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + \PYG{n}{pm2} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{pm\PYGZus{}phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{pm1}\PYG{p}{,} \PYG{n}{pm2}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + + \PYG{n}{poly} \PYG{o}{=} \PYG{n}{Polygon}\PYG{p}{(}\PYG{n}{vertices}\PYG{p}{,} \PYG{n}{closed}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{,} + \PYG{n}{facecolor}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{C1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.4}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{add\PYGZus{}patch}\PYG{p}{(}\PYG{n}{poly}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{mu\PYGZus{}}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}1\PYGZcb{} [}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{mathrm}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{mas\PYGZti{}yr\PYGZcb{}\PYGZca{}}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{\PYGZhy{}1\PYGZcb{}]\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{mu\PYGZus{}}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}2\PYGZcb{} [}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{mathrm}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{mas\PYGZti{}yr\PYGZcb{}\PYGZca{}}\PYG{l+s+s1}{\PYGZob{}}\PYG{l+s+s1}{\PYGZhy{}1\PYGZcb{}]\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{12}\PYG{p}{,} \PYG{l+m+mi}{8}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{l+m+mi}{10}\PYG{p}{,} \PYG{l+m+mi}{10}\PYG{p}{)} +\end{sphinxVerbatim} + +Notice that \sphinxcode{\sphinxupquote{add\_patch}} is like \sphinxcode{\sphinxupquote{invert\_yaxis}}; in order to call it, we have to use \sphinxcode{\sphinxupquote{gca}} to get the current axes. + +Here’s what the new version of the figure looks like. We’ve changed the labels on the axes to be consistent with the paper. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{rcParams}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{text.usetex}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{=} \PYG{k+kc}{False} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{style}\PYG{o}{.}\PYG{n}{use}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{default}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{n}{plot\PYGZus{}proper\PYGZus{}motion}\PYG{p}{(}\PYG{n}{centerline}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_50_0}.png} + + +\section{Upper left} +\label{\detokenize{07_plot:upper-left}} +Now let’s work on the panel in the upper left. We have to reload \sphinxcode{\sphinxupquote{candidates}}. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}candidates.hdf5}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{n}{candidate\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{candidate\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +Here’s a function that takes a \sphinxcode{\sphinxupquote{DataFrame}} of candidate stars and plots their positions in GD\sphinxhyphen{}1 coordindates. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k}{def} \PYG{n+nf}{plot\PYGZus{}first\PYGZus{}selection}\PYG{p}{(}\PYG{n}{df}\PYG{p}{)}\PYG{p}{:} + \PYG{n}{x} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + \PYG{n}{y} \PYG{o}{=} \PYG{n}{df}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{phi2}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}1\PYGZdl{} [deg]}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}}\PYG{l+s+s1}{\PYGZbs{}}\PYG{l+s+s1}{phi\PYGZus{}2\PYGZdl{} [deg]}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{title}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Proper motion selection}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{fontsize}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{medium}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{axis}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{equal}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +And here’s what it looks like. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plot\PYGZus{}first\PYGZus{}selection}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_57_0}.png} + + +\section{Lower right} +\label{\detokenize{07_plot:lower-right}} +For the figure in the lower right, we need to reload the merged \sphinxcode{\sphinxupquote{DataFrame}}, which contains data from Gaia and photometry data from Pan\sphinxhyphen{}STARRS. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{pandas} \PYG{k}{as} \PYG{n+nn}{pd} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}merged.hdf5}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{n}{merged} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{merged}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +From the previous notebook, here’s the function that plots the color\sphinxhyphen{}magnitude diagram. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} + +\PYG{k}{def} \PYG{n+nf}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{table}\PYG{p}{)}\PYG{p}{:} + \PYG{l+s+sd}{\PYGZdq{}\PYGZdq{}\PYGZdq{}Plot a color magnitude diagram.} +\PYG{l+s+sd}{ } +\PYG{l+s+sd}{ table: Table or DataFrame with photometry data} +\PYG{l+s+sd}{ \PYGZdq{}\PYGZdq{}\PYGZdq{}} + \PYG{n}{y} \PYG{o}{=} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + \PYG{n}{x} \PYG{o}{=} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{g\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{table}\PYG{p}{[}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{i\PYGZus{}mean\PYGZus{}psf\PYGZus{}mag}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{]} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,} \PYG{n}{y}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{ko}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{markersize}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.3}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlim}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mf}{1.5}\PYG{p}{]}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylim}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mi}{14}\PYG{p}{,} \PYG{l+m+mi}{22}\PYG{p}{]}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{invert\PYGZus{}yaxis}\PYG{p}{(}\PYG{p}{)} + + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{ylabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}g\PYGZus{}0\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \PYG{n}{plt}\PYG{o}{.}\PYG{n}{xlabel}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{\PYGZdl{}(g\PYGZhy{}i)\PYGZus{}0\PYGZdl{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\end{sphinxVerbatim} + +And here’s what it looks like. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{merged}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_63_0}.png} + +\sphinxstylestrong{Exercise:} Add a few lines to \sphinxcode{\sphinxupquote{plot\_cmd}} to show the Polygon we selected as a shaded area. + +Run these cells to get the polygon coordinates we saved in the previous notebook. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import} \PYG{n+nn}{os} + +\PYG{n}{filename} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{gd1\PYGZus{}polygon.hdf5}\PYG{l+s+s1}{\PYGZsq{}} +\PYG{n}{path} \PYG{o}{=} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{https://github.com/AllenDowney/AstronomicalData/raw/main/data/}\PYG{l+s+s1}{\PYGZsq{}} + +\PYG{k}{if} \PYG{o+ow}{not} \PYG{n}{os}\PYG{o}{.}\PYG{n}{path}\PYG{o}{.}\PYG{n}{exists}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{:} + \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{download}\PYG{p}{(}\PYG{n}{path}\PYG{o}{+}\PYG{n}{filename}\PYG{p}{)}\PYG{p}{)} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{coords\PYGZus{}df} \PYG{o}{=} \PYG{n}{pd}\PYG{o}{.}\PYG{n}{read\PYGZus{}hdf}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{coords\PYGZus{}df}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} +\PYG{n}{coords} \PYG{o}{=} \PYG{n}{coords\PYGZus{}df}\PYG{o}{.}\PYG{n}{to\PYGZus{}numpy}\PYG{p}{(}\PYG{p}{)} +\PYG{n}{coords} +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +array([[ 0.21505376, 17.5481972 ], + [ 0.38978495, 18.94628403], + [ 0.53763441, 19.90286976], + [ 0.70340502, 20.60191317], + [ 0.82885305, 21.30095659], + [ 0.66308244, 21.52170714], + [ 0.43010753, 20.78587196], + [ 0.27329749, 19.71891096], + [ 0.17473118, 18.68874172], + [ 0.17473118, 17.95290655]]) +\end{sphinxVerbatim} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Solution} + +\PYG{c+c1}{\PYGZsh{}poly = Polygon(coords, closed=True, } +\PYG{c+c1}{\PYGZsh{} facecolor=\PYGZsq{}C1\PYGZsq{}, alpha=0.4)} +\PYG{c+c1}{\PYGZsh{}plt.gca().add\PYGZus{}patch(poly)} +\end{sphinxVerbatim} + + +\section{Subplots} +\label{\detokenize{07_plot:subplots}} +Now we’re ready to put it all together. To make a figure with four subplots, we’ll use \sphinxcode{\sphinxupquote{subplot2grid}}, \sphinxhref{https://matplotlib.org/3.3.1/api/\_as\_gen/matplotlib.pyplot.subplot2grid.html}{which requires two arguments}: +\begin{itemize} +\item {} +\sphinxcode{\sphinxupquote{shape}}, which is a tuple with the number of rows and columns in the grid, and + +\item {} +\sphinxcode{\sphinxupquote{loc}}, which is a tuple identifying the location in the grid we’re about to fill. + +\end{itemize} + +In this example, \sphinxcode{\sphinxupquote{shape}} is \sphinxcode{\sphinxupquote{(2, 2)}} to create two rows and two columns. + +For the first panel, \sphinxcode{\sphinxupquote{loc}} is \sphinxcode{\sphinxupquote{(0, 0)}}, which indicates row 0 and column 0, which is the upper\sphinxhyphen{}left panel. + +Here’s how we use it to draw the four panels. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{shape} \PYG{o}{=} \PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}first\PYGZus{}selection}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}proper\PYGZus{}motion}\PYG{p}{(}\PYG{n}{centerline}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}second\PYGZus{}selection}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{merged}\PYG{p}{)} +\PYG{n}{poly} \PYG{o}{=} \PYG{n}{Polygon}\PYG{p}{(}\PYG{n}{coords}\PYG{p}{,} \PYG{n}{closed}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{,} + \PYG{n}{facecolor}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{C1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.4}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{add\PYGZus{}patch}\PYG{p}{(}\PYG{n}{poly}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{tight\PYGZus{}layout}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_69_0}.png} + +We use \sphinxhref{https://matplotlib.org/3.3.1/tutorials/intermediate/tight\_layout\_guide.html}{\sphinxcode{\sphinxupquote{plt.tight\_layout}}} at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don’t overlap. + +\sphinxstylestrong{Exercise:} See what happens if you leave out \sphinxcode{\sphinxupquote{tight\_layout}}. + + +\section{Adjusting proportions} +\label{\detokenize{07_plot:adjusting-proportions}} +In the previous figure, the panels are all the same size. To get a better view of GD\sphinxhyphen{}1, we’d like to stretch the panels on the left and compress the ones on the right. + +To do that, we’ll use the \sphinxcode{\sphinxupquote{colspan}} argument to make a panel that spans multiple columns in the grid. + +In the following example, \sphinxcode{\sphinxupquote{shape}} is \sphinxcode{\sphinxupquote{(2, 4)}}, which means 2 rows and 4 columns. + +The panels on the left span three columns, so they are three times wider than the panels on the right. + +At the same time, we use \sphinxcode{\sphinxupquote{figsize}} to adjust the aspect ratio of the whole figure. + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{figure}\PYG{p}{(}\PYG{n}{figsize}\PYG{o}{=}\PYG{p}{(}\PYG{l+m+mi}{9}\PYG{p}{,} \PYG{l+m+mf}{4.5}\PYG{p}{)}\PYG{p}{)} + +\PYG{n}{shape} \PYG{o}{=} \PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{)}\PYG{p}{,} \PYG{n}{colspan}\PYG{o}{=}\PYG{l+m+mi}{3}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}first\PYGZus{}selection}\PYG{p}{(}\PYG{n}{candidate\PYGZus{}df}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}proper\PYGZus{}motion}\PYG{p}{(}\PYG{n}{centerline}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{)}\PYG{p}{,} \PYG{n}{colspan}\PYG{o}{=}\PYG{l+m+mi}{3}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}second\PYGZus{}selection}\PYG{p}{(}\PYG{n}{selected}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{subplot2grid}\PYG{p}{(}\PYG{n}{shape}\PYG{p}{,} \PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{plot\PYGZus{}cmd}\PYG{p}{(}\PYG{n}{merged}\PYG{p}{)} +\PYG{n}{poly} \PYG{o}{=} \PYG{n}{Polygon}\PYG{p}{(}\PYG{n}{coords}\PYG{p}{,} \PYG{n}{closed}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{,} + \PYG{n}{facecolor}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{C1}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{alpha}\PYG{o}{=}\PYG{l+m+mf}{0.4}\PYG{p}{)} +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)}\PYG{o}{.}\PYG{n}{add\PYGZus{}patch}\PYG{p}{(}\PYG{n}{poly}\PYG{p}{)} + +\PYG{n}{plt}\PYG{o}{.}\PYG{n}{tight\PYGZus{}layout}\PYG{p}{(}\PYG{p}{)} +\end{sphinxVerbatim} + +\noindent\sphinxincludegraphics{{07_plot_72_0}.png} + +This is looking more and more like the figure in the paper. + +\sphinxstylestrong{Exercise:} In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2? + + +\section{Summary} +\label{\detokenize{07_plot:summary}} +In this notebook, we reverse\sphinxhyphen{}engineered the figure we’ve been replicating, identifying elements that seem effective and others that could be improved. + +We explored features Matplotlib provides for adding annotations to figures \textendash{} including text, lines, arrows, and polygons \textendash{} and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels. + + +\section{Best practices} +\label{\detokenize{07_plot:best-practices}}\begin{itemize} +\item {} +The most effective figures focus on telling a single story clearly and compellingly. + +\item {} +Consider using annotations to guide the readers attention to the most important elements of a figure. + +\item {} +The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults. + +\item {} +If you find yourself making the same customizations on several projects, you might want to create your own style sheet. + +\end{itemize} + + + + + + + +\renewcommand{\indexname}{Index} +\printindex +\end{document} \ No newline at end of file diff --git a/_build/latex/book.toc b/_build/latex/book.toc new file mode 100644 index 0000000..9a5dd64 --- /dev/null +++ b/_build/latex/book.toc @@ -0,0 +1,99 @@ +\select@language {english} +\contentsline {chapter}{\numberline {1}Chapter 1}{5}{chapter.1} +\contentsline {section}{\numberline {1.1}Data}{5}{section.1.1} +\contentsline {section}{\numberline {1.2}Prerequisites}{6}{section.1.2} +\contentsline {section}{\numberline {1.3}Outline}{6}{section.1.3} +\contentsline {section}{\numberline {1.4}Query Language}{6}{section.1.4} +\contentsline {section}{\numberline {1.5}Installing libraries}{7}{section.1.5} +\contentsline {section}{\numberline {1.6}Connecting to Gaia}{7}{section.1.6} +\contentsline {section}{\numberline {1.7}Databases and Tables}{7}{section.1.7} +\contentsline {section}{\numberline {1.8}Columns}{10}{section.1.8} +\contentsline {section}{\numberline {1.9}Writing queries}{13}{section.1.9} +\contentsline {section}{\numberline {1.10}Asynchronous queries}{15}{section.1.10} +\contentsline {section}{\numberline {1.11}Operators}{17}{section.1.11} +\contentsline {section}{\numberline {1.12}Cleaning up}{18}{section.1.12} +\contentsline {section}{\numberline {1.13}Formatting queries}{18}{section.1.13} +\contentsline {section}{\numberline {1.14}Summary}{21}{section.1.14} +\contentsline {section}{\numberline {1.15}Best practices}{21}{section.1.15} +\contentsline {chapter}{\numberline {2}Chapter 2}{23}{chapter.2} +\contentsline {section}{\numberline {2.1}Outline}{23}{section.2.1} +\contentsline {section}{\numberline {2.2}Installing libraries}{23}{section.2.2} +\contentsline {section}{\numberline {2.3}Selecting a region}{24}{section.2.3} +\contentsline {section}{\numberline {2.4}Getting GD\sphinxhyphen {}1 Data}{25}{section.2.4} +\contentsline {section}{\numberline {2.5}Working with coordinates}{25}{section.2.5} +\contentsline {section}{\numberline {2.6}Selecting a rectangle}{44}{section.2.6} +\contentsline {section}{\numberline {2.7}Selecting a polygon}{45}{section.2.7} +\contentsline {section}{\numberline {2.8}Saving results}{47}{section.2.8} +\contentsline {section}{\numberline {2.9}Summary}{48}{section.2.9} +\contentsline {section}{\numberline {2.10}Best practices}{48}{section.2.10} +\contentsline {chapter}{\numberline {3}Chapter 3}{49}{chapter.3} +\contentsline {section}{\numberline {3.1}Outline}{49}{section.3.1} +\contentsline {section}{\numberline {3.2}Installing libraries}{50}{section.3.2} +\contentsline {section}{\numberline {3.3}Reload the data}{50}{section.3.3} +\contentsline {section}{\numberline {3.4}Selecting rows and columns}{51}{section.3.4} +\contentsline {section}{\numberline {3.5}Scatter plot}{53}{section.3.5} +\contentsline {section}{\numberline {3.6}Transform back}{54}{section.3.6} +\contentsline {section}{\numberline {3.7}Pandas DataFrame}{57}{section.3.7} +\contentsline {section}{\numberline {3.8}Plot proper motion}{58}{section.3.8} +\contentsline {section}{\numberline {3.9}Selecting the centerline}{58}{section.3.9} +\contentsline {section}{\numberline {3.10}Filtering based on proper motion}{61}{section.3.10} +\contentsline {section}{\numberline {3.11}Saving the DataFrame}{63}{section.3.11} +\contentsline {section}{\numberline {3.12}Summary}{65}{section.3.12} +\contentsline {section}{\numberline {3.13}Best practices}{65}{section.3.13} +\contentsline {chapter}{\numberline {4}Chapter 4}{67}{chapter.4} +\contentsline {section}{\numberline {4.1}Outline}{67}{section.4.1} +\contentsline {section}{\numberline {4.2}Installing libraries}{67}{section.4.2} +\contentsline {section}{\numberline {4.3}Reload the data}{68}{section.4.3} +\contentsline {section}{\numberline {4.4}Selection by proper motion}{68}{section.4.4} +\contentsline {section}{\numberline {4.5}Selecting the region}{73}{section.4.5} +\contentsline {section}{\numberline {4.6}Assemble the query}{74}{section.4.6} +\contentsline {section}{\numberline {4.7}Plotting one more time}{76}{section.4.7} +\contentsline {section}{\numberline {4.8}Saving the DataFrame}{78}{section.4.8} +\contentsline {section}{\numberline {4.9}CSV}{79}{section.4.9} +\contentsline {section}{\numberline {4.10}Summary}{80}{section.4.10} +\contentsline {section}{\numberline {4.11}Best practices}{80}{section.4.11} +\contentsline {chapter}{\numberline {5}Chapter 5}{81}{chapter.5} +\contentsline {section}{\numberline {5.1}Outline}{81}{section.5.1} +\contentsline {section}{\numberline {5.2}Installing libraries}{81}{section.5.2} +\contentsline {section}{\numberline {5.3}Reloading the data}{82}{section.5.3} +\contentsline {section}{\numberline {5.4}Getting photometry data}{83}{section.5.4} +\contentsline {section}{\numberline {5.5}Preparing a table for uploading}{84}{section.5.5} +\contentsline {section}{\numberline {5.6}Uploading a table}{86}{section.5.6} +\contentsline {section}{\numberline {5.7}Joining with an uploaded table}{87}{section.5.7} +\contentsline {section}{\numberline {5.8}Getting the photometry data}{89}{section.5.8} +\contentsline {section}{\numberline {5.9}Write the data}{92}{section.5.9} +\contentsline {section}{\numberline {5.10}Summary}{92}{section.5.10} +\contentsline {section}{\numberline {5.11}Best practice}{92}{section.5.11} +\contentsline {chapter}{\numberline {6}Chapter 6}{93}{chapter.6} +\contentsline {section}{\numberline {6.1}Outline}{93}{section.6.1} +\contentsline {section}{\numberline {6.2}Installing libraries}{93}{section.6.2} +\contentsline {section}{\numberline {6.3}Reload the data}{94}{section.6.3} +\contentsline {section}{\numberline {6.4}Plotting photometry data}{94}{section.6.4} +\contentsline {section}{\numberline {6.5}Drawing a polygon}{96}{section.6.5} +\contentsline {section}{\numberline {6.6}Which points are in the polygon?}{98}{section.6.6} +\contentsline {section}{\numberline {6.7}Reloading the data}{98}{section.6.7} +\contentsline {section}{\numberline {6.8}Merging photometry data}{99}{section.6.8} +\contentsline {section}{\numberline {6.9}Missing data}{101}{section.6.9} +\contentsline {section}{\numberline {6.10}Selecting based on photometry}{101}{section.6.10} +\contentsline {section}{\numberline {6.11}Write the data}{103}{section.6.11} +\contentsline {section}{\numberline {6.12}Save the polygon}{104}{section.6.12} +\contentsline {section}{\numberline {6.13}Summary}{104}{section.6.13} +\contentsline {section}{\numberline {6.14}Best practices}{104}{section.6.14} +\contentsline {chapter}{\numberline {7}Chapter 7}{107}{chapter.7} +\contentsline {section}{\numberline {7.1}Outline}{107}{section.7.1} +\contentsline {section}{\numberline {7.2}Installing libraries}{107}{section.7.2} +\contentsline {section}{\numberline {7.3}Making Figures That Tell a Story}{108}{section.7.3} +\contentsline {section}{\numberline {7.4}Plotting GD\sphinxhyphen {}1}{109}{section.7.4} +\contentsline {section}{\numberline {7.5}Annotations}{110}{section.7.5} +\contentsline {section}{\numberline {7.6}Customization}{110}{section.7.6} +\contentsline {section}{\numberline {7.7}rcParams}{111}{section.7.7} +\contentsline {section}{\numberline {7.8}Style sheets}{111}{section.7.8} +\contentsline {section}{\numberline {7.9}LaTeX fonts}{113}{section.7.9} +\contentsline {section}{\numberline {7.10}Multiple panels}{113}{section.7.10} +\contentsline {section}{\numberline {7.11}Upper right}{114}{section.7.11} +\contentsline {section}{\numberline {7.12}Upper left}{116}{section.7.12} +\contentsline {section}{\numberline {7.13}Lower right}{117}{section.7.13} +\contentsline {section}{\numberline {7.14}Subplots}{119}{section.7.14} +\contentsline {section}{\numberline {7.15}Adjusting proportions}{120}{section.7.15} +\contentsline {section}{\numberline {7.16}Summary}{121}{section.7.16} +\contentsline {section}{\numberline {7.17}Best practices}{122}{section.7.17} diff --git a/_build/latex/footnotehyper-sphinx.sty b/_build/latex/footnotehyper-sphinx.sty new file mode 100644 index 0000000..b6692cf --- /dev/null +++ b/_build/latex/footnotehyper-sphinx.sty @@ -0,0 +1,269 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{footnotehyper-sphinx}% + [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)] +%% +%% Package: footnotehyper-sphinx +%% Version: based on footnotehyper.sty 2017/03/07 v1.0 +%% as available at https://www.ctan.org/pkg/footnotehyper +%% License: the one applying to Sphinx +%% +%% Refer to the PDF documentation at https://www.ctan.org/pkg/footnotehyper for +%% the code comments. +%% +%% Differences: +%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up), +%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty, +%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty, +%% 4. macro definition \sphinxfootnotemark, +%% 5. macro definition \sphinxlongtablepatch +%% 6. replaced an \undefined by \@undefined +\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}% +\ProcessOptions\relax +\newbox\FNH@notes +\newdimen\FNH@width +\let\FNH@colwidth\columnwidth +\newif\ifFNH@savingnotes +\AtBeginDocument {% + \let\FNH@latex@footnote \footnote + \let\FNH@latex@footnotetext\footnotetext + \let\FNH@H@@footnotetext \@footnotetext + \newenvironment{savenotes} + {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}% + \let\spewnotes \FNH@spewnotes + \let\footnote \FNH@footnote + \let\footnotetext \FNH@footnotetext + \let\endfootnote \FNH@endfntext + \let\endfootnotetext\FNH@endfntext + \@ifpackageloaded{hyperref} + {\ifHy@hyperfootnotes + \let\FNH@H@@footnotetext\H@@footnotetext + \else + \let\FNH@hyper@fntext\FNH@nohyp@fntext + \fi}% + {\let\FNH@hyper@fntext\FNH@nohyp@fntext}% +}% +\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}% +\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}% +\def\FNH@fntext #1{% + \ifx\ifmeasuring@\@undefined + \expandafter\@secondoftwo\else\expandafter\@firstofone\fi +% these two lines modified for Sphinx (tabulary compatibility): + {\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}% + {\ifx\equation$\expandafter\@gobbletwo\fi #1}%$ +}% +\long\def\FNH@hyper@fntext@i#1{% + \global\setbox\FNH@notes\vbox + {\unvbox\FNH@notes + \FNH@startnote + \@makefntext + {\rule\z@\footnotesep\ignorespaces + \ifHy@nesting\expandafter\ltx@firstoftwo + \else\expandafter\ltx@secondoftwo + \fi + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}% + {\Hy@raisedlink + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}% + {\relax}}% + \let\@currentHref\Hy@footnote@currentHref + \let\@currentlabelname\@empty + #1}% + \@finalstrut\strutbox + }% + \FNH@endnote + }% +}% +\long\def\FNH@nohyp@fntext@i#1{% + \global\setbox\FNH@notes\vbox + {\unvbox\FNH@notes + \FNH@startnote + \@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \FNH@endnote + }% +}% +\def\FNH@startnote{% + \hsize\FNH@colwidth + \interlinepenalty\interfootnotelinepenalty + \reset@font\footnotesize + \floatingpenalty\@MM + \@parboxrestore + \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}% + \color@begingroup +}% +\def\FNH@endnote{\color@endgroup}% +\def\FNH@savenotes{% + \begingroup + \ifFNH@savingnotes\else + \FNH@savingnotestrue + \let\@footnotetext \FNH@hyper@fntext + \let\@mpfootnotetext \FNH@hyper@fntext + \let\H@@mpfootnotetext\FNH@nohyp@fntext + \FNH@width\columnwidth + \let\FNH@colwidth\FNH@width + \global\setbox\FNH@notes\box\voidb@x + \let\FNH@thempfn\thempfn + \let\FNH@mpfn\@mpfn + \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi + \expandafter\def\expandafter\@minipagerestore\expandafter{% + \@minipagerestore + \let\thempfn\FNH@thempfn + \let\@mpfn\FNH@mpfn + }% + \fi +}% +\def\FNH@spewnotes {% + \endgroup + \ifFNH@savingnotes\else + \ifvoid\FNH@notes\else + \begingroup + \let\@makefntext\@empty + \let\@finalstrut\@gobble + \let\rule\@gobbletwo + \FNH@H@@footnotetext{\unvbox\FNH@notes}% + \endgroup + \fi + \fi +}% +\def\FNH@footnote@envname {footnote}% +\def\FNH@footnotetext@envname{footnotetext}% +\def\FNH@footnote{% +% this line added for Sphinx: + \spx@opt@BeforeFootnote + \ifx\@currenvir\FNH@footnote@envname + \expandafter\FNH@footnoteenv + \else + \expandafter\FNH@latex@footnote + \fi +}% +\def\FNH@footnoteenv{% +% this line added for Sphinx (footnotes in parsed literal blocks): + \catcode13=5 \sphinxunactivateextrasandspace + \@ifnextchar[% + \FNH@footnoteenv@i %] + {\stepcounter\@mpfn + \protected@xdef\@thefnmark{\thempfn}% + \@footnotemark + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext}% +}% +\def\FNH@footnoteenv@i[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \@footnotemark + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext +}% +\def\FNH@footnotetext{% + \ifx\@currenvir\FNH@footnotetext@envname + \expandafter\FNH@footnotetextenv + \else + \expandafter\FNH@latex@footnotetext + \fi +}% +\def\FNH@footnotetextenv{% + \@ifnextchar[% + \FNH@footnotetextenv@i %] + {\protected@xdef\@thefnmark{\thempfn}% + \def\FNH@endfntext@fntext{\@footnotetext}% + \FNH@startfntext}% +}% +\def\FNH@footnotetextenv@i[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \ifFNH@savingnotes + \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}% + \else + \def\FNH@endfntext@fntext{\FNH@H@@footnotetext}% + \fi + \FNH@startfntext +}% +\def\FNH@startfntext{% + \setbox\z@\vbox\bgroup + \FNH@startnote + \FNH@prefntext + \rule\z@\footnotesep\ignorespaces +}% +\def\FNH@endfntext {% + \@finalstrut\strutbox + \FNH@postfntext + \FNH@endnote + \egroup + \begingroup + \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo + \FNH@endfntext@fntext {\unvbox\z@}% + \endgroup +}% +\AtBeginDocument{% + \let\FNH@@makefntext\@makefntext + \ifx\@makefntextFB\@undefined + \expandafter\@gobble\else\expandafter\@firstofone\fi + {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else + \let\FNH@@makefntext\@makefntextORI\fi}% + \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}% + \FNH@@@1.2!3?4,\FNH@@@\relax +}% +\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{% + \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi + \FNH@bad@makefntext@alert + {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}% +}% +\def\FNH@check@b #1\relax{% + \expandafter\expandafter\expandafter\FNH@check@c + \expandafter\meaning\expandafter\FNH@prefntext + \meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax +}% +\def\FNH@check@c #11.2!3?4,#2#3\relax{% + \ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert +}% +% slight reformulation for Sphinx +\def\FNH@bad@makefntext@alert{% + \PackageWarningNoLine{footnotehyper-sphinx}% + {Footnotes will be sub-optimal, sorry. This is due to the document class or^^J + some package modifying macro \string\@makefntext.^^J + You can try to report this incompatibility at^^J + https://github.com/sphinx-doc/sphinx with this info:}% + \typeout{\meaning\@makefntext}% + \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty +}% +% this macro from original footnote.sty is not used anymore by Sphinx +% but for simplicity sake let's just keep it as is +\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%] +\def\FNH@msne@i #1{% + \expandafter\let\csname FNH$#1\expandafter\endcsname %$ + \csname #1\endcsname + \expandafter\let\csname endFNH$#1\expandafter\endcsname %$ + \csname end#1\endcsname + \FNH@msne@ii[#1]{FNH$#1}%$ +}% +\def\FNH@msne@ii[#1]#2{% + \expandafter\edef\csname#1\endcsname{% + \noexpand\savenotes + \expandafter\noexpand\csname#2\endcsname + }% + \expandafter\edef\csname end#1\endcsname{% + \expandafter\noexpand\csname end#2\endcsname + \noexpand\expandafter + \noexpand\spewnotes + \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi + }% +}% +% end of footnotehyper 2017/02/16 v0.99 +% some extras for Sphinx : +% \sphinxfootnotemark: usable in section titles and silently removed from TOCs. +\def\sphinxfootnotemark [#1]% + {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote + \protect\footnotemark[#1]\fi}% +\AtBeginDocument{% + % let hyperref less complain + \pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}% + % to obtain hyperlinked footnotes in longtable environment we must replace + % hyperref's patch of longtable's patch of \@footnotetext by our own + \let\LT@p@ftntext\FNH@hyper@fntext + % this *requires* longtable to be used always wrapped in savenotes environment +}% +\endinput +%% +%% End of file `footnotehyper-sphinx.sty'. diff --git a/_build/latex/index.html b/_build/latex/index.html new file mode 100644 index 0000000..fd27117 --- /dev/null +++ b/_build/latex/index.html @@ -0,0 +1,2 @@ + + diff --git a/_build/latex/latexmkjarc b/_build/latex/latexmkjarc new file mode 100644 index 0000000..6e36b19 --- /dev/null +++ b/_build/latex/latexmkjarc @@ -0,0 +1,22 @@ +$latex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; +$dvipdf = 'dvipdfmx %O -o %D %S'; +$makeindex = 'internal mendex %S %B %D'; +sub mendex { + my ($source, $basename, $destination) = @_; + my $dictfile = $basename . ".dic"; + unlink($destination); + system("mendex", "-U", "-f", "-d", $dictfile, "-s", "python.ist", $source); + if ($? > 0) { + print("mendex exited with error code $? (ignored)\n"); + } + if (!-e $destination) { + # create an empty .ind file if nothing + open(FH, ">" . $destination); + close(FH); + } + return 0; +} +add_cus_dep( "glo", "gls", 0, "makeglo" ); +sub makeglo { + return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); +} \ No newline at end of file diff --git a/_build/latex/latexmkrc b/_build/latex/latexmkrc new file mode 100644 index 0000000..bba17fa --- /dev/null +++ b/_build/latex/latexmkrc @@ -0,0 +1,9 @@ +$latex = 'latex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$pdflatex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S'; +$makeindex = 'makeindex -s python.ist %O -o %D %S'; +add_cus_dep( "glo", "gls", 0, "makeglo" ); +sub makeglo { + return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); +} \ No newline at end of file diff --git a/_build/latex/make.bat b/_build/latex/make.bat new file mode 100644 index 0000000..94bda21 --- /dev/null +++ b/_build/latex/make.bat @@ -0,0 +1,31 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +pushd %~dp0 + +set PDFLATEX=latexmk -pdf -dvi- -ps- + +set "LATEXOPTS= " + +if "%1" == "" goto all-pdf + +if "%1" == "all-pdf" ( + :all-pdf + for %%i in (*.tex) do ( + %PDFLATEX% %LATEXMKOPTS% %%i + ) + goto end +) + +if "%1" == "all-pdf-ja" ( + goto all-pdf +) + +if "%1" == "clean" ( + del /q /s *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz *.fls *.fdb_latexmk + goto end +) + +:end +popd \ No newline at end of file diff --git a/_build/latex/python.ist b/_build/latex/python.ist new file mode 100644 index 0000000..70536a6 --- /dev/null +++ b/_build/latex/python.ist @@ -0,0 +1,16 @@ +line_max 100 +headings_flag 1 +heading_prefix " \\bigletter " + +preamble "\\begin{sphinxtheindex} +\\let\\bigletter\\sphinxstyleindexlettergroup +\\let\\spxpagem \\sphinxstyleindexpagemain +\\let\\spxentry \\sphinxstyleindexentry +\\let\\spxextra \\sphinxstyleindexextra + +" + +postamble "\n\n\\end{sphinxtheindex}\n" + +symhead_positive "{\\sphinxsymbolsname}" +numhead_positive "{\\sphinxnumbersname}" diff --git a/_build/latex/sphinx.sty b/_build/latex/sphinx.sty new file mode 100644 index 0000000..a3e91ad --- /dev/null +++ b/_build/latex/sphinx.sty @@ -0,0 +1,1957 @@ +% +% sphinx.sty +% +% Adapted from the old python.sty, mostly written by Fred Drake, +% by Georg Brandl. +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{sphinx}[2019/09/02 v2.3.0 LaTeX package (Sphinx markup)] + +% provides \ltx@ifundefined +% (many packages load ltxcmds: graphicx does for pdftex and lualatex but +% not xelatex, and anyhow kvoptions does, but it may be needed in future to +% use \sphinxdeprecationwarning earlier, and it needs \ltx@ifundefined) +\RequirePackage{ltxcmds} + +%% for deprecation warnings +\newcommand\sphinxdeprecationwarning[4]{% #1 the deprecated macro or name, +% #2 = when deprecated, #3 = when removed, #4 = additional info + \edef\spx@tempa{\detokenize{#1}}% + \ltx@ifundefined{sphinx_depr_\spx@tempa}{% + \global\expandafter\let\csname sphinx_depr_\spx@tempa\endcsname\spx@tempa + \expandafter\AtEndDocument\expandafter{\expandafter\let\expandafter + \sphinxdeprecatedmacro\csname sphinx_depr_\spx@tempa\endcsname + \PackageWarningNoLine{sphinx}{^^J**** SPHINX DEPRECATION WARNING:^^J + \sphinxdeprecatedmacro^^J + \@spaces- is deprecated at Sphinx #2^^J + \@spaces- and removed at Sphinx #3.^^J + #4^^J****}}% + }{% warning already emitted (at end of latex log), don't repeat + }} + + +%% PACKAGES +% +% we delay handling of options to after having loaded packages, because +% of the need to use \definecolor. +\RequirePackage{graphicx} +\@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}} +% for \text macro and \iffirstchoice@ conditional even if amsmath not loaded +\RequirePackage{amstext} +\RequirePackage{textcomp}% "warn" option issued from template +\RequirePackage[nobottomtitles*]{titlesec} +\@ifpackagelater{titlesec}{2016/03/15}% + {\@ifpackagelater{titlesec}{2016/03/21}% + {}% + {\newif\ifsphinx@ttlpatch@ok + \IfFileExists{etoolbox.sty}{% + \RequirePackage{etoolbox}% + \patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}% + {\sphinx@ttlpatch@oktrue}{}% + \ifsphinx@ttlpatch@ok + \patchcmd{\ttlh@hang}{\noindent}{}{}{\sphinx@ttlpatch@okfalse}% + \fi + }{}% + \ifsphinx@ttlpatch@ok + \typeout{^^J Package Sphinx Info: ^^J + **** titlesec 2.10.1 successfully patched for bugfix ****^^J}% + \else + \AtEndDocument{\PackageWarningNoLine{sphinx}{^^J% +******** titlesec 2.10.1 has a bug, (section numbers disappear) ......|^^J% +******** and Sphinx could not patch it, perhaps because your local ...|^^J% +******** copy is already fixed without a changed release date. .......|^^J% +******** If not, you must update titlesec! ...........................|}}% + \fi + }% + }{} +\RequirePackage{tabulary} +% tabulary has a bug with its re-definition of \multicolumn in its first pass +% which is not \long. But now Sphinx does not use LaTeX's \multicolumn but its +% own macro. Hence we don't even need to patch tabulary. See sphinxmulticell.sty +% X or S (Sphinx) may have meanings if some table package is loaded hence +% \X was chosen to avoid possibility of conflict +\newcolumntype{\X}[2]{p{\dimexpr + (\linewidth-\arrayrulewidth)*#1/#2-\tw@\tabcolsep-\arrayrulewidth\relax}} +\newcolumntype{\Y}[1]{p{\dimexpr + #1\dimexpr\linewidth-\arrayrulewidth\relax-\tw@\tabcolsep-\arrayrulewidth\relax}} +% using here T (for Tabulary) feels less of a problem than the X could be +\newcolumntype{T}{J}% +% For tables allowing pagebreaks +\RequirePackage{longtable} +% User interface to set-up whitespace before and after tables: +\newcommand*\sphinxtablepre {0pt}% +\newcommand*\sphinxtablepost{\medskipamount}% +% Space from caption baseline to top of table or frame of literal-block +\newcommand*\sphinxbelowcaptionspace{.5\sphinxbaselineskip}% +% as one can not use \baselineskip from inside longtable (it is zero there) +% we need \sphinxbaselineskip, which defaults to \baselineskip +\def\sphinxbaselineskip{\baselineskip}% +% The following is to ensure that, whether tabular(y) or longtable: +% - if a caption is on top of table: +% a) the space between its last baseline and the top rule of table is +% exactly \sphinxbelowcaptionspace +% b) the space from last baseline of previous text to first baseline of +% caption is exactly \parskip+\baselineskip+ height of a strut. +% c) the caption text will wrap at width \LTcapwidth (4in) +% - make sure this works also if "caption" package is loaded by user +% (with its width or margin option taking place of \LTcapwidth role) +% TODO: obtain same for caption of literal block: a) & c) DONE, b) TO BE DONE +% +% To modify space below such top caption, adjust \sphinxbelowcaptionspace +% To add or remove space above such top caption, adjust \sphinxtablepre: +% notice that \abovecaptionskip, \belowcaptionskip, \LTpre are **ignored** +% A. Table with longtable +\def\sphinxatlongtablestart + {\par + \vskip\parskip + \vskip\dimexpr\sphinxtablepre\relax % adjust vertical position + \vbox{}% get correct baseline from above + \LTpre\z@skip\LTpost\z@skip % set to zero longtable's own skips + \edef\sphinxbaselineskip{\dimexpr\the\dimexpr\baselineskip\relax\relax}% + }% +% Compatibility with caption package +\def\sphinxthelongtablecaptionisattop{% + \spx@ifcaptionpackage{\noalign{\vskip-\belowcaptionskip}}{}% +}% +% Achieves exactly \sphinxbelowcaptionspace below longtable caption +\def\sphinxlongtablecapskipadjust + {\dimexpr-\dp\strutbox + -\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}% + +\sphinxbelowcaptionspace\relax}% +\def\sphinxatlongtableend{\@nobreakfalse % latex3/latex2e#173 + \prevdepth\z@\vskip\sphinxtablepost\relax}% +% B. Table with tabular or tabulary +\def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax}% +\let\sphinxattableend\sphinxatlongtableend +% This is used by tabular and tabulary templates +\newcommand*\sphinxcapstartof[1]{% + \vskip\parskip + \vbox{}% force baselineskip for good positioning by capstart of hyperanchor + % hyperref puts the anchor 6pt above this baseline; in case of caption + % this baseline will be \ht\strutbox above first baseline of caption + \def\@captype{#1}% + \capstart +% move back vertically, as tabular (or its caption) will compensate + \vskip-\baselineskip\vskip-\parskip +}% +\def\sphinxthecaptionisattop{% locate it after \sphinxcapstartof + \spx@ifcaptionpackage + {\caption@setposition{t}% + \vskip\baselineskip\vskip\parskip % undo those from \sphinxcapstartof + \vskip-\belowcaptionskip % anticipate caption package skip + % caption package uses a \vbox, not a \vtop, so "single line" case + % gives different result from "multi-line" without this: + \nointerlineskip + }% + {}% +}% +\def\sphinxthecaptionisatbottom{% (not finalized; for template usage) + \spx@ifcaptionpackage{\caption@setposition{b}}{}% +}% +% The aim of \sphinxcaption is to apply to tabular(y) the maximal width +% of caption as done by longtable +\def\sphinxtablecapwidth{\LTcapwidth}% +\newcommand\sphinxcaption{\@dblarg\spx@caption}% +\long\def\spx@caption[#1]#2{% + \noindent\hb@xt@\linewidth{\hss + \vtop{\@tempdima\dimexpr\sphinxtablecapwidth\relax +% don't exceed linewidth for the caption width + \ifdim\@tempdima>\linewidth\hsize\linewidth\else\hsize\@tempdima\fi +% longtable ignores \abovecaptionskip/\belowcaptionskip, so do the same here + \abovecaptionskip\sphinxabovecaptionskip % \z@skip + \belowcaptionskip\sphinxbelowcaptionskip % \z@skip + \caption[{#1}]% + {\strut\ignorespaces#2\ifhmode\unskip\@finalstrut\strutbox\fi}% + }\hss}% + \par\prevdepth\dp\strutbox +}% +\def\sphinxabovecaptionskip{\z@skip}% Do not use! Flagged for removal +\def\sphinxbelowcaptionskip{\z@skip}% Do not use! Flagged for removal +% This wrapper of \abovecaptionskip is used in sphinxVerbatim for top +% caption, and with another value in sphinxVerbatimintable +% TODO: To unify space above caption of a code-block with the one above +% caption of a table/longtable, \abovecaptionskip must not be used +% This auxiliary will get renamed and receive a different meaning +% in future. +\def\spx@abovecaptionskip{\abovecaptionskip}% +% Achieve \sphinxbelowcaptionspace below a caption located above a tabular +% or a tabulary +\newcommand\sphinxaftertopcaption +{% + \spx@ifcaptionpackage + {\par\prevdepth\dp\strutbox\nobreak\vskip-\abovecaptionskip}{\nobreak}% + \vskip\dimexpr\sphinxbelowcaptionspace\relax + \vskip-\baselineskip\vskip-\parskip +}% +% varwidth is crucial for our handling of general contents in merged cells +\RequirePackage{varwidth} +% but addition of a compatibility patch with hyperref is needed +% (tested with varwidth v 0.92 Mar 2009) +\AtBeginDocument {% + \let\@@vwid@Hy@raisedlink\Hy@raisedlink + \long\def\@vwid@Hy@raisedlink#1{\@vwid@wrap{\@@vwid@Hy@raisedlink{#1}}}% + \edef\@vwid@setup{% + \let\noexpand\Hy@raisedlink\noexpand\@vwid@Hy@raisedlink % HYPERREF ! + \unexpanded\expandafter{\@vwid@setup}}% +}% +% Homemade package to handle merged cells +\RequirePackage{sphinxmulticell} +\RequirePackage{makeidx} +% For framing code-blocks and warning type notices, and shadowing topics +\RequirePackage{framed} +% The xcolor package draws better fcolorboxes around verbatim code +\IfFileExists{xcolor.sty}{ + \RequirePackage{xcolor} +}{ + \RequirePackage{color} +} +% For highlighted code. +\RequirePackage{fancyvrb} +\define@key{FV}{hllines}{\def\sphinx@verbatim@checkifhl##1{\in@{, ##1,}{#1}}} +% sphinxVerbatim must be usable by third party without requiring hllines set-up +\def\sphinxresetverbatimhllines{\def\sphinx@verbatim@checkifhl##1{\in@false}} +\sphinxresetverbatimhllines +% For hyperlinked footnotes in tables; also for gathering footnotes from +% topic and warning blocks. Also to allow code-blocks in footnotes. +\RequirePackage{footnotehyper-sphinx} +% For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code +% for allowing figures in tables. +\RequirePackage{float} +% For floating figures in the text. Better to load after float. +\RequirePackage{wrapfig} +% Separate paragraphs by space by default. +\IfFileExists{parskip-2001-04-09.sty}% since September 2018 TeXLive update +% new parskip.sty, but let it rollback to old one. +% hopefully TeX installation not broken and LaTeX kernel not too old + {\RequirePackage{parskip}[=v1]} +% standard one from 1989. Admittedly \section of article/book gives possibly +% anomalous spacing, but we can't require September 2018 release for some time. + {\RequirePackage{parskip}} +% For parsed-literal blocks. +\RequirePackage{alltt} +% Display "real" single quotes in literal blocks. +\RequirePackage{upquote} +% control caption around literal-block +\RequirePackage{capt-of} +\RequirePackage{needspace} +% LaTeX 2018-04-01 and later provides \@removefromreset +\ltx@ifundefined{@removefromreset} + {\RequirePackage{remreset}} + {}% avoid warning +% to make pdf with correct encoded bookmarks in Japanese +% this should precede the hyperref package +\ifx\kanjiskip\@undefined +% for non-Japanese: make sure bookmarks are ok also with lualatex + \PassOptionsToPackage{pdfencoding=unicode}{hyperref} +\else + \RequirePackage{atbegshi} + \ifx\ucs\@undefined + \ifnum 42146=\euc"A4A2 + \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}} + \else + \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}} + \fi + \else + \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}} + \fi +\fi + +\ifx\@jsc@uplatextrue\@undefined\else + \PassOptionsToPackage{setpagesize=false}{hyperref} +\fi + +% These options can be overriden inside 'hyperref' key +% or by later use of \hypersetup. +\PassOptionsToPackage{colorlinks,breaklinks,% + linkcolor=InnerLinkColor,filecolor=OuterLinkColor,% + menucolor=OuterLinkColor,urlcolor=OuterLinkColor,% + citecolor=InnerLinkColor}{hyperref} + +% stylesheet for highlighting with pygments +\RequirePackage{sphinxhighlight} +% fix baseline increase from Pygments latex formatter in case of error tokens +% and keep \fboxsep's scope local via added braces +\def\PYG@tok@err{% + \def\PYG@bc##1{{\setlength{\fboxsep}{-\fboxrule}% + \fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}% +} +\def\PYG@tok@cs{% + \def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}% + \def\PYG@bc##1{{\setlength{\fboxsep}{0pt}% + \colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}% +}% + + +%% OPTIONS +% +% Handle options via "kvoptions" (later loaded by hyperref anyhow) +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix + +% Sphinx legacy text layout: 1in margins on all four sides +\ifx\@jsc@uplatextrue\@undefined +\DeclareStringOption[1in]{hmargin} +\DeclareStringOption[1in]{vmargin} +\DeclareStringOption[.5in]{marginpar} +\else +% Japanese standard document classes handle \mag in a special way +\DeclareStringOption[\inv@mag in]{hmargin} +\DeclareStringOption[\inv@mag in]{vmargin} +\DeclareStringOption[.5\dimexpr\inv@mag in\relax]{marginpar} +\fi + +\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0} +\DeclareStringOption[-1]{numfigreset} +\DeclareBoolOption[false]{nonumfigreset} +\DeclareBoolOption[false]{mathnumfig} +% \DeclareBoolOption[false]{usespart}% not used +% dimensions, we declare the \dimen registers here. +\newdimen\sphinxverbatimsep +\newdimen\sphinxverbatimborder +\newdimen\sphinxshadowsep +\newdimen\sphinxshadowsize +\newdimen\sphinxshadowrule +% \DeclareStringOption is not convenient for the handling of these dimensions +% because we want to assign the values to the corresponding registers. Even if +% we added the code to the key handler it would be too late for the initial +% set-up and we would need to do initial assignments explicitely. We end up +% using \define@key directly. +% verbatim +\sphinxverbatimsep=\fboxsep + \define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax} +\sphinxverbatimborder=\fboxrule + \define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax} +% topic boxes +\sphinxshadowsep =5pt + \define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax} +\sphinxshadowsize=4pt + \define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax} +\sphinxshadowrule=\fboxrule + \define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax} +% verbatim +\DeclareBoolOption[true]{verbatimwithframe} +\DeclareBoolOption[true]{verbatimwrapslines} +\DeclareBoolOption[true]{verbatimhintsturnover} +\DeclareBoolOption[true]{inlineliteralwraps} +\DeclareStringOption[t]{literalblockcappos} +\DeclareStringOption[r]{verbatimcontinuedalign} +\DeclareStringOption[r]{verbatimcontinuesalign} +% parsed literal +\DeclareBoolOption[true]{parsedliteralwraps} +% \textvisiblespace for compatibility with fontspec+XeTeX/LuaTeX +\DeclareStringOption[\textcolor{red}{\textvisiblespace}]{verbatimvisiblespace} +\DeclareStringOption % must use braces to hide the brackets + [{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]% + {verbatimcontinued} +% notices/admonitions +% the dimensions for notices/admonitions are kept as macros and assigned to +% \spx@notice@border at time of use, hence \DeclareStringOption is ok for this +\newdimen\spx@notice@border +\DeclareStringOption[0.5pt]{noteborder} +\DeclareStringOption[0.5pt]{hintborder} +\DeclareStringOption[0.5pt]{importantborder} +\DeclareStringOption[0.5pt]{tipborder} +\DeclareStringOption[1pt]{warningborder} +\DeclareStringOption[1pt]{cautionborder} +\DeclareStringOption[1pt]{attentionborder} +\DeclareStringOption[1pt]{dangerborder} +\DeclareStringOption[1pt]{errorborder} +% footnotes +\DeclareStringOption[\mbox{ }]{AtStartFootnote} +% we need a public macro name for direct use in latex file +\newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote} +% no such need for this one, as it is used inside other macros +\DeclareStringOption[\leavevmode\unskip]{BeforeFootnote} +% some font styling. +\DeclareStringOption[\sffamily\bfseries]{HeaderFamily} +% colours +% same problems as for dimensions: we want the key handler to use \definecolor. +% first, some colours with no prefix, for backwards compatibility +\newcommand*{\sphinxDeclareColorOption}[2]{% + \definecolor{#1}#2% + \define@key{sphinx}{#1}{\definecolor{#1}##1}% +}% +\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}} +\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}} +\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}} +\sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}} +\sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}} +% now the colours defined with "sphinx" prefix in their names +\newcommand*{\sphinxDeclareSphinxColorOption}[2]{% + % set the initial default + \definecolor{sphinx#1}#2% + % set the key handler. The "value" ##1 must be acceptable by \definecolor. + \define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}% +}% +% Default color chosen to be as in minted.sty LaTeX package! +\sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}} +% admonition boxes, "light" style +\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}} +% admonition boxes, "heavy" style +\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}} + +\DeclareDefaultOption{\@unknownoptionerror} +\ProcessKeyvalOptions* +% don't allow use of maxlistdepth via \sphinxsetup. +\DisableKeyvalOption{sphinx}{maxlistdepth} +\DisableKeyvalOption{sphinx}{numfigreset} +\DisableKeyvalOption{sphinx}{nonumfigreset} +\DisableKeyvalOption{sphinx}{mathnumfig} +% user interface: options can be changed midway in a document! +\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}} + + +%% ALPHANUMERIC LIST ITEMS +\newcommand\sphinxsetlistlabels[5] +{% #1 = style, #2 = enum, #3 = enumnext, #4 = prefix, #5 = suffix + % #2 and #3 are counters used by enumerate environement e.g. enumi, enumii. + % #1 is a macro such as \arabic or \alph + % prefix and suffix are strings (by default empty and a dot). + \@namedef{the#2}{#1{#2}}% + \@namedef{label#2}{#4\@nameuse{the#2}#5}% + \@namedef{p@#3}{\@nameuse{p@#2}#4\@nameuse{the#2}#5}% +}% + + +%% MAXLISTDEPTH +% +% remove LaTeX's cap on nesting depth if 'maxlistdepth' key used. +% This is a hack, which works with the standard classes: it assumes \@toodeep +% is always used in "true" branches: "\if ... \@toodeep \else .. \fi." + +% will force use the "false" branch (if there is one) +\def\spx@toodeep@hack{\fi\iffalse} + +% do nothing if 'maxlistdepth' key not used or if package enumitem loaded. +\ifnum\spx@opt@maxlistdepth=\z@\expandafter\@gobbletwo\fi +\AtBeginDocument{% +\@ifpackageloaded{enumitem}{\remove@to@nnil}{}% + \let\spx@toodeepORI\@toodeep + \def\@toodeep{% + \ifnum\@listdepth<\spx@opt@maxlistdepth\relax + \expandafter\spx@toodeep@hack + \else + \expandafter\spx@toodeepORI + \fi}% +% define all missing \@list... macros + \count@\@ne + \loop + \ltx@ifundefined{@list\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \expandafter\let + \csname @list\romannumeral\the\count@\expandafter\endcsname + \csname @list\romannumeral\the\numexpr\count@-\@ne\endcsname + % workaround 2.6--3.2d babel-french issue (fixed in 3.2e; no change needed) + \ltx@ifundefined{leftmargin\romannumeral\the\count@} + {\expandafter\let + \csname leftmargin\romannumeral\the\count@\expandafter\endcsname + \csname leftmargin\romannumeral\the\numexpr\count@-\@ne\endcsname}{}% + \advance\count@\@ne + \repeat +% define all missing enum... counters and \labelenum... macros and \p@enum.. + \count@\@ne + \loop + \ltx@ifundefined{c@enum\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \newcounter{enum\romannumeral\the\count@}% + \expandafter\def + \csname labelenum\romannumeral\the\count@\expandafter\endcsname + \expandafter + {\csname theenum\romannumeral\the\numexpr\count@\endcsname.}% + \expandafter\def + \csname p@enum\romannumeral\the\count@\expandafter\endcsname + \expandafter + {\csname p@enum\romannumeral\the\numexpr\count@-\@ne\expandafter + \endcsname\csname theenum\romannumeral\the\numexpr\count@-\@ne\endcsname.}% + \advance\count@\@ne + \repeat +% define all missing labelitem... macros + \count@\@ne + \loop + \ltx@ifundefined{labelitem\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \expandafter\let + \csname labelitem\romannumeral\the\count@\expandafter\endcsname + \csname labelitem\romannumeral\the\numexpr\count@-\@ne\endcsname + \advance\count@\@ne + \repeat + \PackageInfo{sphinx}{maximal list depth extended to \spx@opt@maxlistdepth}% +\@gobble\@nnil +} + + +%% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS +% +% fix the double index and bibliography on the table of contents +% in jsclasses (Japanese standard document classes) +\ifx\@jsc@uplatextrue\@undefined\else + \renewenvironment{sphinxtheindex} + {\cleardoublepage\phantomsection + \begin{theindex}} + {\end{theindex}} + + \renewenvironment{sphinxthebibliography}[1] + {\cleardoublepage% \phantomsection % not needed here since TeXLive 2010's hyperref + \begin{thebibliography}{#1}} + {\end{thebibliography}} +\fi + +% disable \@chappos in Appendix in pTeX +\ifx\kanjiskip\@undefined\else + \let\py@OldAppendix=\appendix + \renewcommand{\appendix}{ + \py@OldAppendix + \gdef\@chappos{} + } +\fi + +% make commands known to non-Sphinx document classes +\providecommand*{\sphinxmaketitle}{\maketitle} +\providecommand*{\sphinxtableofcontents}{\tableofcontents} +\ltx@ifundefined{sphinxthebibliography} + {\newenvironment + {sphinxthebibliography}{\begin{thebibliography}}{\end{thebibliography}}% + } + {}% else clause of \ltx@ifundefined +\ltx@ifundefined{sphinxtheindex} + {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}% + {}% else clause of \ltx@ifundefined + +% for usage with xindy: this string gets internationalized in preamble +\newcommand*{\sphinxnonalphabeticalgroupname}{} +% redefined in preamble, headings for makeindex produced index +\newcommand*{\sphinxsymbolsname}{} +\newcommand*{\sphinxnumbersname}{} + +%% COLOR (general) +% +% FIXME: \normalcolor should probably be used in place of \py@NormalColor +% elsewhere, and \py@NormalColor should never be defined. \normalcolor +% switches to the colour from last \color call in preamble. +\def\py@NormalColor{\color{black}} +% FIXME: it is probably better to use \color{TitleColor}, as TitleColor +% can be customized from 'sphinxsetup', and drop usage of \py@TitleColor +\def\py@TitleColor{\color{TitleColor}} +% FIXME: this line should be dropped, as "9" is default anyhow. +\ifdefined\pdfcompresslevel\pdfcompresslevel = 9 \fi + + +%% PAGE STYLING +% +% Style parameters and macros used by most documents here +\raggedbottom +\sloppy +\hbadness = 5000 % don't print trivial gripes + +% Use \pagestyle{normal} as the primary pagestyle for text. +% Redefine the 'normal' header/footer style when using "fancyhdr" package: +\@ifpackageloaded{fancyhdr}{% + \ltx@ifundefined{c@chapter} + {% no \chapter, "howto" (non-Japanese) docclass + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\py@HeaderFamily\thepage}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0pt} + } + % Same as 'plain', this way we can use it in template + % FIXME: shouldn't this have a running header with Name and Release like 'manual'? + \fancypagestyle{normal}{ + \fancyhf{} + \fancyfoot[C]{{\py@HeaderFamily\thepage}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0pt} + } + }% + {% classes with \chapter command + \fancypagestyle{normal}{ + \fancyhf{} + % FIXME: this presupposes "twoside". + % If "oneside" class option, there are warnings in LaTeX log. + \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}} + \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}} + \fancyhead[LE,RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0.4pt} + % define chaptermark with \@chappos when \@chappos is available for Japanese + \ltx@ifundefined{@chappos}{} + {\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}} + } + % Update the plain style so we get the page number & footer line, + % but not a chapter or section title. This is to keep the first + % page of a chapter `clean.' + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.4pt} + } + } + } + {% no fancyhdr: memoir class + % Provide default for 'normal' style simply as an alias of 'plain' style + % This way we can use \pagestyle{normal} in LaTeX template + \def\ps@normal{\ps@plain} + % Users of memoir class are invited to redefine 'normal' style in preamble + } + +% geometry +\ifx\kanjiskip\@undefined + \PassOptionsToPackage{% + hmargin={\unexpanded{\spx@opt@hmargin}},% + vmargin={\unexpanded{\spx@opt@vmargin}},% + marginpar=\unexpanded{\spx@opt@marginpar}} + {geometry} +\else + % set text width for Japanese documents to be integer multiple of 1zw + % and text height to be integer multiple of \baselineskip + % the execution is delayed to \sphinxsetup then geometry.sty + \normalsize\normalfont + \newcommand*\sphinxtextwidthja[1]{% + \if@twocolumn\tw@\fi + \dimexpr + \numexpr\dimexpr\paperwidth-\tw@\dimexpr#1\relax\relax/ + \dimexpr\if@twocolumn\tw@\else\@ne\fi zw\relax + zw\relax}% + \newcommand*\sphinxmarginparwidthja[1]{% + \dimexpr\numexpr\dimexpr#1\relax/\dimexpr1zw\relax zw\relax}% + \newcommand*\sphinxtextlinesja[1]{% + \numexpr\@ne+\dimexpr\paperheight-\topskip-\tw@\dimexpr#1\relax\relax/ + \baselineskip\relax}% + \ifx\@jsc@uplatextrue\@undefined\else + % the way we found in order for the papersize special written by + % geometry in the dvi file to be correct in case of jsbook class + \ifnum\mag=\@m\else % do nothing special if nomag class option or 10pt + \PassOptionsToPackage{truedimen}{geometry}% + \fi + \fi + \PassOptionsToPackage{% + hmarginratio={1:1},% + textwidth=\unexpanded{\sphinxtextwidthja{\spx@opt@hmargin}},% + vmarginratio={1:1},% + lines=\unexpanded{\sphinxtextlinesja{\spx@opt@vmargin}},% + marginpar=\unexpanded{\sphinxmarginparwidthja{\spx@opt@marginpar}},% + footskip=2\baselineskip,% + }{geometry}% + \AtBeginDocument + {% update a dimension used by the jsclasses + \ifx\@jsc@uplatextrue\@undefined\else\fullwidth\textwidth\fi + % for some reason, jreport normalizes all dimensions with \@settopoint + \@ifclassloaded{jreport} + {\@settopoint\textwidth\@settopoint\textheight\@settopoint\marginparwidth} + {}% <-- "false" clause of \@ifclassloaded + }% +\fi + +% fix fncychap's bug which uses prematurely the \textwidth value +\@ifpackagewith{fncychap}{Bjornstrup} + {\AtBeginDocument{\mylen\textwidth\advance\mylen-2\myhi}}% + {}% <-- "false" clause of \@ifpackagewith + + +%% TITLES +% +% Since Sphinx 1.5, users should use HeaderFamily key to 'sphinxsetup' rather +% than defining their own \py@HeaderFamily command (which is still possible). +% Memo: \py@HeaderFamily is also used by \maketitle as defined in +% sphinxmanual.cls/sphinxhowto.cls +\newcommand{\py@HeaderFamily}{\spx@opt@HeaderFamily} + +% This sets up the fancy chapter headings that make the documents look +% at least a little better than the usual LaTeX output. +\@ifpackagewith{fncychap}{Bjarne}{ + \ChNameVar {\raggedleft\normalsize \py@HeaderFamily} + \ChNumVar {\raggedleft\Large \py@HeaderFamily} + \ChTitleVar{\raggedleft\Large \py@HeaderFamily} + % This creates (numbered) chapter heads without the leading \vspace*{}: + \def\@makechapterhead#1{% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \DOCH + \fi + \fi + \interlinepenalty\@M + \if@mainmatter + \DOTI{#1}% + \else% + \DOTIS{#1}% + \fi + }} +}{}% <-- "false" clause of \@ifpackagewith + +% Augment the sectioning commands used to get our own font family in place, +% and reset some internal data items (\titleformat from titlesec package) +\titleformat{\section}{\Large\py@HeaderFamily}% + {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subsection}{\large\py@HeaderFamily}% + {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subsubsection}{\py@HeaderFamily}% + {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} +% By default paragraphs (and subsubsections) will not be numbered because +% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2 +\titleformat{\paragraph}{\py@HeaderFamily}% + {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subparagraph}{\py@HeaderFamily}% + {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} + + +%% GRAPHICS +% +% \sphinxincludegraphics resizes images larger than the TeX \linewidth (which +% is adjusted in indented environments), or taller than a certain maximal +% height (usually \textheight and this is reduced in the environments which use +% framed.sty to avoid infinite loop if image too tall). +% +% In case height or width options are present the rescaling is done +% (since 2.0), in a way keeping the width:height ratio either native from +% image or from the width and height options if both were present. +% +\newdimen\spx@image@maxheight +\AtBeginDocument{\spx@image@maxheight\textheight} + +% box scratch register +\newdimen\spx@image@box +\newcommand*{\sphinxsafeincludegraphics}[2][]{% + % #1 contains possibly width=, height=, but no scale= since 1.8.4 + \setbox\spx@image@box\hbox{\includegraphics[#1,draft]{#2}}% + \in@false % use some handy boolean flag + \ifdim \wd\spx@image@box>\linewidth + \in@true % flag to remember to adjust options and set box dimensions + % compute height which results from rescaling width to \linewidth + % and keep current aspect ratio. multiply-divide in \numexpr uses + % temporarily doubled precision, hence no overflow. (of course we + % assume \ht is not a few sp's below \maxdimen...(about 16384pt). + \edef\spx@image@rescaledheight % with sp units + {\the\numexpr\ht\spx@image@box + *\linewidth/\wd\spx@image@box sp}% + \ifdim\spx@image@rescaledheight>\spx@image@maxheight + % the rescaled height will be too big, so it is height which decides + % the rescaling factor + \def\spx@image@requiredheight{\spx@image@maxheight}% dimen register + \edef\spx@image@requiredwidth % with sp units + {\the\numexpr\wd\spx@image@box + *\spx@image@maxheight/\ht\spx@image@box sp}% + % TODO: decide if this commented-out block could be needed due to + % rounding in numexpr operations going up + % \ifdim\spx@image@requiredwidth>\linewidth + % \def\spx@image@requiredwidth{\linewidth}% dimen register + % \fi + \else + \def\spx@image@requiredwidth{\linewidth}% dimen register + \let\spx@image@requiredheight\spx@image@rescaledheight% sp units + \fi + \else + % width is ok, let's check height + \ifdim\ht\spx@image@box>\spx@image@maxheight + \in@true + \edef\spx@image@requiredwidth % with sp units + {\the\numexpr\wd\spx@image@box + *\spx@image@maxheight/\ht\spx@image@box sp}% + \def\spx@image@requiredheight{\spx@image@maxheight}% dimen register + \fi + \fi % end of check of width and height + \ifin@ + \setbox\spx@image@box + \hbox{\includegraphics + [%#1,% contained only width and/or height and overruled anyhow + width=\spx@image@requiredwidth,height=\spx@image@requiredheight]% + {#2}}% + % \includegraphics does not set box dimensions to the exactly + % requested ones, see https://github.com/latex3/latex2e/issues/112 + \wd\spx@image@box\spx@image@requiredwidth + \ht\spx@image@box\spx@image@requiredheight + \leavevmode\box\spx@image@box + \else + % here we do not modify the options, no need to adjust width and height + % on output, they will be computed exactly as with "draft" option + \setbox\spx@image@box\box\voidb@x % clear memory + \includegraphics[#1]{#2}% + \fi +}% +% Use the "safe" one by default (2.0) +\def\sphinxincludegraphics{\sphinxsafeincludegraphics} + + +%% FIGURE IN TABLE +% +\newenvironment{sphinxfigure-in-table}[1][\linewidth]{% + \def\@captype{figure}% + \sphinxsetvskipsforfigintablecaption + \begin{minipage}{#1}% +}{\end{minipage}} +% store the original \caption macro for usage with figures inside longtable +% and tabulary cells. Make sure we get the final \caption in presence of +% caption package, whether the latter was loaded before or after sphinx. +\AtBeginDocument{% + \let\spx@originalcaption\caption + \@ifpackageloaded{caption} + {\let\spx@ifcaptionpackage\@firstoftwo + \caption@AtBeginDocument*{\let\spx@originalcaption\caption}% +% in presence of caption package, drop our own \sphinxcaption whose aim was to +% ensure same width of caption to all kinds of tables (tabular(y), longtable), +% because caption package has its own width (or margin) option + \def\sphinxcaption{\caption}% + }% + {\let\spx@ifcaptionpackage\@secondoftwo}% +} +% tabulary expands twice contents, we need to prevent double counter stepping +\newcommand*\sphinxfigcaption + {\ifx\equation$%$% this is trick to identify tabulary first pass + \firstchoice@false\else\firstchoice@true\fi + \spx@originalcaption } +\newcommand*\sphinxsetvskipsforfigintablecaption + {\abovecaptionskip\smallskipamount + \belowcaptionskip\smallskipamount} + + +%% CITATIONS +% +\protected\def\sphinxcite{\cite} + +%% FOOTNOTES +% +% Support large numbered footnotes in minipage +% But now obsolete due to systematic use of \savenotes/\spewnotes +% when minipages are in use in the various macro definitions next. +\def\thempfootnote{\arabic{mpfootnote}} + + +%% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS +\ltx@ifundefined{c@chapter} + {\newcounter{literalblock}}% + {\newcounter{literalblock}[chapter]% + \def\theliteralblock{\ifnum\c@chapter>\z@\arabic{chapter}.\fi + \arabic{literalblock}}% + }% +\ifspx@opt@nonumfigreset + \ltx@ifundefined{c@chapter}{}{% + \@removefromreset{figure}{chapter}% + \@removefromreset{table}{chapter}% + \@removefromreset{literalblock}{chapter}% + \ifspx@opt@mathnumfig + \@removefromreset{equation}{chapter}% + \fi + }% + \def\thefigure{\arabic{figure}}% + \def\thetable {\arabic{table}}% + \def\theliteralblock{\arabic{literalblock}}% + \ifspx@opt@mathnumfig + \def\theequation{\arabic{equation}}% + \fi +\else +\let\spx@preAthefigure\@empty +\let\spx@preBthefigure\@empty +% \ifspx@opt@usespart % <-- LaTeX writer could pass such a 'usespart' boolean +% % as sphinx.sty package option +% If document uses \part, (triggered in Sphinx by latex_toplevel_sectioning) +% LaTeX core per default does not reset chapter or section +% counters at each part. +% But if we modify this, we need to redefine \thechapter, \thesection to +% include the part number and this will cause problems in table of contents +% because of too wide numbering. Simplest is to do nothing. +% \fi +\ifnum\spx@opt@numfigreset>0 + \ltx@ifundefined{c@chapter} + {} + {\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}% + \g@addto@macro\spx@preBthefigure{\fi}}% +\fi +\ifnum\spx@opt@numfigreset>1 + \AtBeginDocument{% + \@addtoreset{figure}{section}% + \@addtoreset{table}{section}% + \@addtoreset{literalblock}{section}% + \ifspx@opt@mathnumfig + \@addtoreset{equation}{section}% + \fi% + }% + \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}% + \g@addto@macro\spx@preBthefigure{\fi}% +\fi +\ifnum\spx@opt@numfigreset>2 + \AtBeginDocument{% + \@addtoreset{figure}{subsection}% + \@addtoreset{table}{subsection}% + \@addtoreset{literalblock}{subsection}% + \ifspx@opt@mathnumfig + \@addtoreset{equation}{subsection}% + \fi% + }% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}% + \g@addto@macro\spx@preBthefigure{\fi}% +\fi +\ifnum\spx@opt@numfigreset>3 + \AtBeginDocument{% + \@addtoreset{figure}{subsubsection}% + \@addtoreset{table}{subsubsection}% + \@addtoreset{literalblock}{subsubsection}% + \ifspx@opt@mathnumfig + \@addtoreset{equation}{subsubsection}% + \fi% + }% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}% + \g@addto@macro\spx@preBthefigure{\fi}% +\fi +\ifnum\spx@opt@numfigreset>4 + \AtBeginDocument{% + \@addtoreset{figure}{paragraph}% + \@addtoreset{table}{paragraph}% + \@addtoreset{literalblock}{paragraph}% + \ifspx@opt@mathnumfig + \@addtoreset{equation}{paragraph}% + \fi% + }% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}% + \g@addto@macro\spx@preBthefigure{\fi}% +\fi +\ifnum\spx@opt@numfigreset>5 + \AtBeginDocument{% + \@addtoreset{figure}{subparagraph}% + \@addtoreset{table}{subparagraph}% + \@addtoreset{literalblock}{subparagraph}% + \ifspx@opt@mathnumfig + \@addtoreset{equation}{subparagraph}% + \fi% + }% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}% + \g@addto@macro\spx@preBthefigure{\fi}% +\fi +\expandafter\g@addto@macro +\expandafter\spx@preAthefigure\expandafter{\spx@preBthefigure}% +\let\thefigure\spx@preAthefigure +\let\thetable\spx@preAthefigure +\let\theliteralblock\spx@preAthefigure +\g@addto@macro\thefigure{\arabic{figure}}% +\g@addto@macro\thetable{\arabic{table}}% +\g@addto@macro\theliteralblock{\arabic{literalblock}}% + \ifspx@opt@mathnumfig + \let\theequation\spx@preAthefigure + \g@addto@macro\theequation{\arabic{equation}}% + \fi +\fi + + +%% LITERAL BLOCKS +% +% Based on use of "fancyvrb.sty"'s Verbatim. +% - with framing allowing page breaks ("framed.sty") +% - with breaking of long lines (exploits Pygments mark-up), +% - with possibly of a top caption, non-separable by pagebreak. +% - and usable inside tables or footnotes ("footnotehyper-sphinx"). + +% For extensions which use \OriginalVerbatim and compatibility with Sphinx < +% 1.5, we define and use these when (unmodified) Verbatim will be needed. But +% Sphinx >= 1.5 does not modify the \Verbatim macro anymore. +\let\OriginalVerbatim \Verbatim +\let\endOriginalVerbatim\endVerbatim + +% for captions of literal blocks +% at start of caption title +\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock} +% this will be overwritten in document preamble by Babel translation +\newcommand*{\literalblockname}{Listing } +% file extension needed for \caption's good functioning, the file is created +% only if a \listof{literalblock}{foo} command is encountered, which is +% analogous to \listoffigures, but for the code listings (foo = chosen title.) +\newcommand*{\ext@literalblock}{lol} + +\newif\ifspx@inframed % flag set if we are already in a framed environment +% if forced use of minipage encapsulation is needed (e.g. table cells) +\newif\ifsphinxverbatimwithminipage \sphinxverbatimwithminipagefalse + +% Framing macro for use with framed.sty's \FrameCommand +% - it obeys current indentation, +% - frame is \fboxsep separated from the contents, +% - the contents use the full available text width, +% - #1 = color of frame, #2 = color of background, +% - #3 = above frame, #4 = below frame, #5 = within frame, +% - #3 and #4 must be already typeset boxes; they must issue \normalcolor +% or similar, else, they are under scope of color #1 +\long\def\spx@fcolorbox #1#2#3#4#5{% + \hskip\@totalleftmargin + \hskip-\fboxsep\hskip-\fboxrule + % use of \color@b@x here is compatible with both xcolor.sty and color.sty + \color@b@x {\color{#1}\spx@CustomFBox{#3}{#4}}{\color{#2}}{#5}% + \hskip-\fboxsep\hskip-\fboxrule + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth +}% +% #1 = for material above frame, such as a caption or a "continued" hint +% #2 = for material below frame, such as a caption or "continues on next page" +% #3 = actual contents, which will be typeset with a background color +\long\def\spx@CustomFBox#1#2#3{% + \begingroup + \setbox\@tempboxa\hbox{{#3}}% inner braces to avoid color leaks + \vbox{#1% above frame + % draw frame border _latest_ to avoid pdf viewer issue + \kern\fboxrule + \hbox{\kern\fboxrule + \copy\@tempboxa + \kern-\wd\@tempboxa\kern-\fboxrule + \vrule\@width\fboxrule + \kern\wd\@tempboxa + \vrule\@width\fboxrule}% + \kern-\dimexpr\ht\@tempboxa+\dp\@tempboxa+\fboxrule\relax + \hrule\@height\fboxrule + \kern\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax + \hrule\@height\fboxrule + #2% below frame + }% + \endgroup +}% +\def\spx@fcolorbox@put@c#1{% hide width from framed.sty measuring + \moveright\dimexpr\fboxrule+.5\wd\@tempboxa\hb@xt@\z@{\hss#1\hss}% +}% +\def\spx@fcolorbox@put@r#1{% right align with contents, width hidden + \moveright\dimexpr\fboxrule+\wd\@tempboxa-\fboxsep\hb@xt@\z@{\hss#1}% +}% +\def\spx@fcolorbox@put@l#1{% left align with contents, width hidden + \moveright\dimexpr\fboxrule+\fboxsep\hb@xt@\z@{#1\hss}% +}% +% +\def\sphinxVerbatim@Continued + {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname + {\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}% +\def\sphinxVerbatim@Continues + {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname + {\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}% +\def\sphinxVerbatim@Title + {\spx@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}}% +\let\sphinxVerbatim@Before\@empty +\let\sphinxVerbatim@After\@empty +% Defaults are redefined in document preamble according to language +\newcommand*\literalblockcontinuedname{continued from previous page}% +\newcommand*\literalblockcontinuesname{continues on next page}% +% +\def\spx@verbatimfcolorbox{\spx@fcolorbox{VerbatimBorderColor}{VerbatimColor}}% +\def\sphinxVerbatim@FrameCommand + {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@After}% +\def\sphinxVerbatim@FirstFrameCommand + {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@Continues}% +\def\sphinxVerbatim@MidFrameCommand + {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@Continues}% +\def\sphinxVerbatim@LastFrameCommand + {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@After}% + +% For linebreaks inside Verbatim environment from package fancyvrb. +\newbox\sphinxcontinuationbox +\newbox\sphinxvisiblespacebox +\newcommand*\sphinxafterbreak {\copy\sphinxcontinuationbox} + +% Take advantage of the already applied Pygments mark-up to insert +% potential linebreaks for TeX processing. +% {, <, #, %, $, ' and ": go to next line. +% _, }, ^, &, >, -, ~, and \: stay at end of broken line. +% Use of \textquotesingle for straight quote. +% FIXME: convert this to package options ? +\newcommand*\sphinxbreaksbeforelist {% + \do\PYGZob\{\do\PYGZlt\<\do\PYGZsh\#\do\PYGZpc\%% {, <, #, %, + \do\PYGZdl\$\do\PYGZdq\"% $, " + \def\PYGZsq + {\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% ' +} +\newcommand*\sphinxbreaksafterlist {% + \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &, + \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~ + \do\PYGZbs\\% \ +} +\newcommand*\sphinxbreaksatspecials {% + \def\do##1##2% + {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}% + \sphinxbreaksbeforelist + \def\do##1##2% + {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}% + \sphinxbreaksafterlist +} + +\def\sphinx@verbatim@nolig@list {\do \`}% +% Some characters . , ; ? ! / are neither pygmentized nor "tex-escaped". +% This macro makes them "active" and they will insert potential linebreaks. +% Not compatible with math mode (cf \sphinxunactivateextras). +\newcommand*\sphinxbreaksbeforeactivelist {}% none +\newcommand*\sphinxbreaksafteractivelist {\do\.\do\,\do\;\do\?\do\!\do\/} +\newcommand*\sphinxbreaksviaactive {% + \def\do##1{\lccode`\~`##1% + \lowercase{\def~}{\discretionary{}{\sphinxafterbreak\char`##1}{\char`##1}}% + \catcode`##1\active}% + \sphinxbreaksbeforeactivelist + \def\do##1{\lccode`\~`##1% + \lowercase{\def~}{\discretionary{\char`##1}{\sphinxafterbreak}{\char`##1}}% + \catcode`##1\active}% + \sphinxbreaksafteractivelist + \lccode`\~`\~ +} + +% If the linebreak is at a space, the latter will be displayed as visible +% space at end of first line, and a continuation symbol starts next line. +\def\spx@verbatim@space {% + \nobreak\hskip\z@skip + \discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak} + {\kern\fontdimen2\font}% +}% + +% if the available space on page is less than \literalblockneedspace, insert pagebreak +\newcommand{\sphinxliteralblockneedspace}{5\baselineskip} +\newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip} +% The title (caption) is specified from outside as macro \sphinxVerbatimTitle. +% \sphinxVerbatimTitle is reset to empty after each use of Verbatim. +\newcommand*\sphinxVerbatimTitle {} +% This box to typeset the caption before framed.sty multiple passes for framing. +\newbox\sphinxVerbatim@TitleBox +% This box to measure contents if nested as inner \MakeFramed requires then +% minipage encapsulation but too long contents then break outer \MakeFramed +\newbox\sphinxVerbatim@ContentsBox +% This is a workaround to a "feature" of French lists, when literal block +% follows immediately; usable generally (does only \par then), a priori... +\newcommand*\sphinxvspacefixafterfrenchlists{% + \ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi +} +% Holder macro for labels of literal blocks. Set-up by LaTeX writer. +\newcommand*\sphinxLiteralBlockLabel {} +\newcommand*\sphinxSetupCaptionForVerbatim [1] +{% + \sphinxvspacefixafterfrenchlists + \needspace{\sphinxliteralblockneedspace}% +% insert a \label via \sphinxLiteralBlockLabel +% reset to normal the color for the literal block caption + \def\sphinxVerbatimTitle + {\py@NormalColor\sphinxcaption{\sphinxLiteralBlockLabel #1}}% +} +\newcommand*\sphinxSetupCodeBlockInFootnote {% + \fvset{fontsize=\footnotesize}\let\caption\sphinxfigcaption + \sphinxverbatimwithminipagetrue % reduces vertical spaces + % we counteract (this is in a group) the \@normalsize from \caption + \let\normalsize\footnotesize\let\@parboxrestore\relax + \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}% +} +\newcommand*{\sphinxverbatimsmallskipamount}{\smallskipamount} +% serves to implement line highlighting and line wrapping +\newcommand\sphinxFancyVerbFormatLine[1]{% + \expandafter\sphinx@verbatim@checkifhl\expandafter{\the\FV@CodeLineNo}% + \ifin@ + \sphinxVerbatimHighlightLine{#1}% + \else + \sphinxVerbatimFormatLine{#1}% + \fi +}% +\newcommand\sphinxVerbatimHighlightLine[1]{% + \edef\sphinxrestorefboxsep{\fboxsep\the\fboxsep\relax}% + \fboxsep0pt\relax % cf LaTeX bug graphics/4524 + \colorbox{sphinxVerbatimHighlightColor}% + {\sphinxrestorefboxsep\sphinxVerbatimFormatLine{#1}}% + % no need to restore \fboxsep here, as this ends up in a \hbox from fancyvrb +}% +% \sphinxVerbatimFormatLine will be set locally to one of those two: +\newcommand\sphinxVerbatimFormatLineWrap[1]{% + \hsize\linewidth + \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@ + \doublehyphendemerits\z@\finalhyphendemerits\z@ + \strut #1\strut}% +}% +\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}% +\g@addto@macro\FV@SetupFont{% + \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}% + \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}% +}% +\newenvironment{sphinxVerbatim}{% + % first, let's check if there is a caption + \ifx\sphinxVerbatimTitle\empty + \sphinxvspacefixafterfrenchlists + \parskip\z@skip + \vskip\sphinxverbatimsmallskipamount + % there was no caption. Check if nevertheless a label was set. + \ifx\sphinxLiteralBlockLabel\empty\else + % we require some space to be sure hyperlink target from \phantomsection + % will not be separated from upcoming verbatim by a page break + \needspace{\sphinxliteralblockwithoutcaptionneedspace}% + \phantomsection\sphinxLiteralBlockLabel + \fi + \else + \parskip\z@skip + \if t\spx@opt@literalblockcappos + \vskip\spx@abovecaptionskip + \def\sphinxVerbatim@Before + {\sphinxVerbatim@Title\nointerlineskip + \kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace + % if no frame (code-blocks inside table cells), remove + % the "verbatimsep" whitespace from the top (better visually) + \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi + % caption package adds \abovecaptionskip vspace, remove it + \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}% + \else + \vskip\sphinxverbatimsmallskipamount + \def\sphinxVerbatim@After + {\nointerlineskip\kern\dimexpr\dp\strutbox + \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi + \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax + \sphinxVerbatim@Title}% + \fi + \def\@captype{literalblock}% + \capstart + % \sphinxVerbatimTitle must reset color + \setbox\sphinxVerbatim@TitleBox + \hbox{\begin{minipage}{\linewidth}% + % caption package may detect wrongly if top or bottom, so we help it + \spx@ifcaptionpackage + {\caption@setposition{\spx@opt@literalblockcappos}}{}% + \sphinxVerbatimTitle + \end{minipage}}% + \fi + \global\let\sphinxLiteralBlockLabel\empty + \global\let\sphinxVerbatimTitle\empty + \fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder + \ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi + \let\FrameCommand \sphinxVerbatim@FrameCommand + \let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand + \let\MidFrameCommand \sphinxVerbatim@MidFrameCommand + \let\LastFrameCommand \sphinxVerbatim@LastFrameCommand + \ifspx@opt@verbatimhintsturnover\else + \let\sphinxVerbatim@Continued\@empty + \let\sphinxVerbatim@Continues\@empty + \fi + \ifspx@opt@verbatimwrapslines + % fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes. + % This customization wraps each line from the input in a \vtop, thus + % allowing it to wrap and display on two or more lines in the latex output. + % - The codeline counter will be increased only once. + % - The wrapped material will not break across pages, it is impossible + % to achieve this without extensive rewrite of fancyvrb. + % - The (not used in sphinx) obeytabs option to Verbatim is + % broken by this change (showtabs and tabspace work). + \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap + \let\FV@Space\spx@verbatim@space + % Allow breaks at special characters using \PYG... macros. + \sphinxbreaksatspecials + % Breaks at punctuation characters . , ; ? ! and / (needs catcode activation) + \fvset{codes*=\sphinxbreaksviaactive}% + \else % end of conditional code for wrapping long code lines + \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap + \fi + \let\FancyVerbFormatLine\sphinxFancyVerbFormatLine + \VerbatimEnvironment + % workaround to fancyvrb's check of current list depth + \def\@toodeep {\advance\@listdepth\@ne}% + % The list environment is needed to control perfectly the vertical space. + % Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt. + % - if caption: distance from last text baseline to caption baseline is + % A+(B-F)+\ht\strutbox, A = \abovecaptionskip (default 10pt), B = + % \baselineskip, F is the framed.sty \FrameHeightAdjust macro, default 6pt. + % Formula valid for F < 10pt. + % - distance of baseline of caption to top of frame is like for tables: + % \sphinxbelowcaptionspace (=0.5\baselineskip) + % - if no caption: distance of last text baseline to code frame is S+(B-F), + % with S = \sphinxverbatimtopskip (=\smallskip) + % - and distance from bottom of frame to next text baseline is + % \baselineskip+\parskip. + % The \trivlist is used to avoid possible "too deeply nested" error. + \itemsep \z@skip + \topsep \z@skip + \partopsep \z@skip + % trivlist will set \parsep to \parskip (which itself is set to zero above) + % \leftmargin will be set to zero by trivlist + \rightmargin\z@ + \parindent \z@% becomes \itemindent. Default zero, but perhaps overwritten. + \trivlist\item\relax + \ifspx@inframed\setbox\sphinxVerbatim@ContentsBox\vbox\bgroup + \@setminipage\hsize\linewidth + % use bulk of minipage paragraph shape restores (this is needed + % in indented contexts, at least for some) + \textwidth\hsize \columnwidth\hsize \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \else + \ifsphinxverbatimwithminipage\noindent\begin{minipage}{\linewidth}\fi + \MakeFramed {% adapted over from framed.sty's snugshade environment + \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage + }% + \fi + % For grid placement from \strut's in \FancyVerbFormatLine + \lineskip\z@skip + % active comma should not be overwritten by \@noligs + \ifspx@opt@verbatimwrapslines + \let\verbatim@nolig@list \sphinx@verbatim@nolig@list + \fi + % will fetch its optional arguments if any + \OriginalVerbatim +} +{% + \endOriginalVerbatim + \ifspx@inframed + \egroup % finish \sphinxVerbatim@ContentsBox vbox + \nobreak % update page totals + \ifdim\dimexpr\ht\sphinxVerbatim@ContentsBox+ + \dp\sphinxVerbatim@ContentsBox+ + \ht\sphinxVerbatim@TitleBox+ + \dp\sphinxVerbatim@TitleBox+ + 2\fboxsep+2\fboxrule+ + % try to account for external frame parameters + \FrameSep+\FrameRule+ + % Usage here of 2 baseline distances is empirical. + % In border case where code-block fits barely in remaining space, + % it gets framed and looks good but the outer frame may continue + % on top of next page and give (if no contents after code-block) + % an empty framed line, as testing showed. + 2\baselineskip+ + % now add all to accumulated page totals and compare to \pagegoal + \pagetotal+\pagedepth>\pagegoal + % long contents: do not \MakeFramed. Do make a caption (either before or + % after) if title exists. Continuation hints across pagebreaks dropped. + % FIXME? a bottom caption may end up isolated at top of next page + % (no problem with a top caption, which is default) + \spx@opt@verbatimwithframefalse + \def\sphinxVerbatim@Title{\noindent\box\sphinxVerbatim@TitleBox\par}% + \sphinxVerbatim@Before + \noindent\unvbox\sphinxVerbatim@ContentsBox\par + \sphinxVerbatim@After + \else + % short enough contents: use \MakeFramed. As it is nested, this requires + % minipage encapsulation. + \noindent\begin{minipage}{\linewidth}% + \MakeFramed {% Use it now with the fetched contents + \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage + }% + \unvbox\sphinxVerbatim@ContentsBox + % some of this may be superfluous: + \par\unskip\@minipagefalse\endMakeFramed + \end{minipage}% + \fi + \else % non-nested \MakeFramed + \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade + \ifsphinxverbatimwithminipage\end{minipage}\fi + \fi + \endtrivlist +} +\newenvironment {sphinxVerbatimNoFrame} + {\spx@opt@verbatimwithframefalse + \VerbatimEnvironment + \begin{sphinxVerbatim}} + {\end{sphinxVerbatim}} +\newenvironment {sphinxVerbatimintable} + {% don't use a frame if in a table cell + \spx@opt@verbatimwithframefalse + \sphinxverbatimwithminipagetrue + % the literal block caption uses \sphinxcaption which is wrapper of \caption, + % but \caption must be modified because longtable redefines it to work only + % for the own table caption, and tabulary has multiple passes + \let\caption\sphinxfigcaption + % reduce above caption skip + \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}% + \VerbatimEnvironment + \begin{sphinxVerbatim}} + {\end{sphinxVerbatim}} + + +%% PARSED LITERALS +% allow long lines to wrap like they do in code-blocks + +% this should be kept in sync with definitions in sphinx.util.texescape +\newcommand*\sphinxbreaksattexescapedchars{% + \def\do##1##2% put potential break point before character + {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}% + \do\{\{\do\textless\<\do\#\#\do\%\%\do\$\$% {, <, #, %, $ + \def\do##1##2% put potential break point after character + {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}% + \do\_\_\do\}\}\do\textasciicircum\^\do\&\&% _, }, ^, &, + \do\textgreater\>\do\textasciitilde\~% >, ~ + \do\textbackslash\\% \ +} +\newcommand*\sphinxbreaksviaactiveinparsedliteral{% + \sphinxbreaksviaactive % by default handles . , ; ? ! / + \lccode`\~`\~ % + % update \dospecials as it is used by \url + % but deactivation will already have been done hence this is unneeded: + % \expandafter\def\expandafter\dospecials\expandafter{\dospecials + % \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}% +} +\newcommand*\sphinxbreaksatspaceinparsedliteral{% + \lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~ +} +\newcommand*{\sphinxunactivateextras}{\let\do\@makeother + \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist}% +% the \catcode13=5\relax (deactivate end of input lines) is left to callers +\newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax + \sphinxunactivateextras}% +% now for the modified alltt environment +\newenvironment{sphinxalltt} +{% at start of next line to workaround Emacs/AUCTeX issue with this file +\begin{alltt}% + \ifspx@opt@parsedliteralwraps + \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}% + \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}% + \sphinxbreaksattexescapedchars + \sphinxbreaksviaactiveinparsedliteral + \sphinxbreaksatspaceinparsedliteral +% alltt takes care of the ' as derivative ("prime") in math mode + \everymath\expandafter{\the\everymath\sphinxunactivateextrasandspace + \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }% +% not sure if displayed math (align,...) can end up in parsed-literal, anyway + \everydisplay\expandafter{\the\everydisplay + \catcode13=5 \sphinxunactivateextrasandspace + \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }% + \fi } +{\end{alltt}} + +% Protect \href's first argument in contexts such as sphinxalltt (or +% \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref. +\protected\def\sphinxhref#1#2{{% + \sphinxunactivateextrasandspace % never do \scantokens with active space! +% for the \endlinechar business, https://github.com/latex3/latex2e/issues/286 + \endlinechar\m@ne\everyeof{{\endlinechar13 #2}}% keep catcode regime for #2 + \scantokens{\href{#1}}% normalise it for #1 during \href expansion +}} +% Same for \url. And also \nolinkurl for coherence. +\protected\def\sphinxurl#1{{% + \sphinxunactivateextrasandspace\everyeof{}% (<- precaution for \scantokens) + \endlinechar\m@ne\scantokens{\url{#1}}% +}} +\protected\def\sphinxnolinkurl#1{{% + \sphinxunactivateextrasandspace\everyeof{}% + \endlinechar\m@ne\scantokens{\nolinkurl{#1}}% +}} + + +%% TOPIC AND CONTENTS BOXES +% +% Again based on use of "framed.sty", this allows breakable framed boxes. +\long\def\spx@ShadowFBox#1{% + \leavevmode\begingroup + % first we frame the box #1 + \setbox\@tempboxa + \hbox{\vrule\@width\sphinxshadowrule + \vbox{\hrule\@height\sphinxshadowrule + \kern\sphinxshadowsep + \hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}% + \kern\sphinxshadowsep + \hrule\@height\sphinxshadowrule}% + \vrule\@width\sphinxshadowrule}% + % Now we add the shadow, like \shadowbox from fancybox.sty would do + \dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax + \hbox{\vbox{\offinterlineskip + \hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule + % add shadow on right side + \lower\sphinxshadowsize + \hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}% + }% + \kern-\dimen@ % shift back vertically to bottom of frame + % and add shadow at bottom + \moveright\sphinxshadowsize + \vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}% + }% + % move left by the size of right shadow so shadow adds no width + \kern-\sphinxshadowsize + }% + \endgroup +} + +% use framed.sty to allow page breaks in frame+shadow +% works well inside Lists and Quote-like environments +% produced by ``topic'' directive (or local contents) +% could nest if LaTeX writer authorized it +\newenvironment{sphinxShadowBox} + {\def\FrameCommand {\spx@ShadowFBox }% + \advance\spx@image@maxheight + -\dimexpr2\sphinxshadowrule + +2\sphinxshadowsep + +\sphinxshadowsize + +\baselineskip\relax + % configure framed.sty not to add extra vertical spacing + \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + % the \trivlist will add the vertical spacing on top and bottom which is + % typical of center environment as used in Sphinx <= 1.4.1 + % the \noindent has the effet of an extra blank line on top, to + % imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust + % will put top part of frame on this baseline. + \def\FrameHeightAdjust {\baselineskip}% + % use package footnote to handle footnotes + \savenotes + \trivlist\item\noindent + % use a minipage if we are already inside a framed environment + \ifspx@inframed\begin{minipage}{\linewidth}\fi + \MakeFramed {\spx@inframedtrue + % framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule) + % adjust \hsize to what the contents must use + \advance\hsize-\width + % adjust LaTeX parameters to behave properly in indented/quoted contexts + \FrameRestore + % typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and + % itemize/enumerate are therein typeset more tightly, we want to keep + % that). We copy-paste from LaTeX source code but don't do a real minipage. + \@pboxswfalse + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage + }% + }% + {% insert the "endminipage" code + \par\unskip + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + \endtrivlist + % output the stored footnotes + \spewnotes + } + + +%% NOTICES AND ADMONITIONS +% +% Some are quite plain +% the spx@notice@bordercolor etc are set in the sphinxadmonition environment +\newenvironment{sphinxlightbox}{% + \par + \noindent{\color{spx@notice@bordercolor}% + \rule{\linewidth}{\spx@notice@border}}\par\nobreak + {\parskip\z@skip\noindent}% + } + {% + % counteract previous possible negative skip (French lists!): + % (we can't cancel that any earlier \vskip introduced a potential pagebreak) + \sphinxvspacefixafterfrenchlists + \nobreak\vbox{\noindent\kern\@totalleftmargin + {\color{spx@notice@bordercolor}% + \rule[\dimexpr.4\baselineskip-\spx@notice@border\relax] + {\linewidth}{\spx@notice@border}}\hss}\allowbreak + }% end of sphinxlightbox environment definition +% may be renewenvironment'd by user for complete customization +\newenvironment{sphinxnote}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinxhint}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinximportant}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinxtip}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +% or just use the package options +% these are needed for common handling by notice environment of lightbox +% and heavybox but they are currently not used by lightbox environment +% and there is consequently no corresponding package option +\definecolor{sphinxnoteBgColor}{rgb}{1,1,1} +\definecolor{sphinxhintBgColor}{rgb}{1,1,1} +\definecolor{sphinximportantBgColor}{rgb}{1,1,1} +\definecolor{sphinxtipBgColor}{rgb}{1,1,1} + +% Others get more distinction +% Code adapted from framed.sty's "snugshade" environment. +% Nesting works (inner frames do not allow page breaks). +\newenvironment{sphinxheavybox}{\par + \setlength{\FrameRule}{\spx@notice@border}% + \setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax} + \advance\spx@image@maxheight + -\dimexpr2\FrameRule + +2\FrameSep + +\baselineskip\relax % will happen again if nested, needed indeed! + % configure framed.sty's parameters to obtain same vertical spacing + % as for "light" boxes. We need for this to manually insert parskip glue and + % revert a skip done by framed before the frame. + \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + \vspace{\FrameHeightAdjust} + % copied/adapted from framed.sty's snugshade + \def\FrameCommand##1{\hskip\@totalleftmargin + \fboxsep\FrameSep \fboxrule\FrameRule + \fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}% + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% + \savenotes + % use a minipage if we are already inside a framed environment + \ifspx@inframed + \noindent\begin{minipage}{\linewidth} + \else + % handle case where notice is first thing in a list item (or is quoted) + \if@inlabel + \noindent\par\vspace{-\baselineskip} + \else + \vspace{\parskip} + \fi + \fi + \MakeFramed {\spx@inframedtrue + \advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize + % minipage initialization copied from LaTeX source code. + \@pboxswfalse + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage }% + } + {% + \par\unskip + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + % set footnotes at bottom of page + \spewnotes + % arrange for similar spacing below frame as for "light" boxes. + \vskip .4\baselineskip + }% end of sphinxheavybox environment definition +% may be renewenvironment'd by user for complete customization +\newenvironment{sphinxwarning}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxcaution}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxattention}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxdanger}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxerror}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +% or just use package options + +% the \colorlet of xcolor (if at all loaded) is overkill for our use case +\newcommand{\sphinxcolorlet}[2] + {\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname + \csname\@backslashchar color@#2\endcsname } + +% the main dispatch for all types of notices +\newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading + % can't use #1 directly in definition of end part + \def\spx@noticetype {#1}% + % set parameters of heavybox/lightbox + \sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}% + \sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}% + \spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax + % start specific environment, passing the heading as argument + \begin{sphinx#1}{#2}} + % workaround some LaTeX "feature" of \end command + {\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp} + + +%% PYTHON DOCS MACROS AND ENVIRONMENTS +% (some macros here used by \maketitle in sphinxmanual.cls and sphinxhowto.cls) + +% \moduleauthor{name}{email} +\newcommand{\moduleauthor}[2]{} + +% \sectionauthor{name}{email} +\newcommand{\sectionauthor}[2]{} + +% Allow the release number to be specified independently of the +% \date{}. This allows the date to reflect the document's date and +% release to specify the release that is documented. +% +\newcommand{\py@release}{\releasename\space\version} +\newcommand{\version}{}% part of \py@release, used by title page and headers +% \releaseinfo is used on titlepage (sphinxmanual.cls, sphinxhowto.cls) +\newcommand{\releaseinfo}{} +\newcommand{\setreleaseinfo}[1]{\renewcommand{\releaseinfo}{#1}} +% this is inserted via template and #1=release config variable +\newcommand{\release}[1]{\renewcommand{\version}{#1}} +% this is defined by template to 'releasename' latex_elements key +\newcommand{\releasename}{} +% Fix issue in case release and releasename deliberately left blank +\newcommand{\sphinxheadercomma}{, }% used in fancyhdr header definition +\newcommand{\sphinxifemptyorblank}[1]{% +% test after one expansion of macro #1 if contents is empty or spaces + \if&\expandafter\@firstofone\detokenize\expandafter{#1}&% + \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}% +\AtBeginDocument {% + \sphinxifemptyorblank{\releasename} + {\sphinxifemptyorblank{\version}{\let\sphinxheadercomma\empty}{}} + {}% +}% + +% Allow specification of the author's address separately from the +% author's name. This can be used to format them differently, which +% is a good thing. +% +\newcommand{\py@authoraddress}{} +\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}} + +% {fulllineitems} is the main environment for object descriptions. +% +\newcommand{\py@itemnewline}[1]{% + \kern\labelsep + \@tempdima\linewidth + \advance\@tempdima \labelwidth\makebox[\@tempdima][l]{#1}% + \kern-\labelsep +} + +\newenvironment{fulllineitems}{% + \begin{list}{}{\labelwidth \leftmargin + \rightmargin \z@ \topsep -\parskip \partopsep \parskip + \itemsep -\parsep + \let\makelabel=\py@itemnewline}% +}{\end{list}} + +% Signatures, possibly multi-line +% +\newlength{\py@argswidth} +\newcommand{\py@sigparams}[2]{% + \parbox[t]{\py@argswidth}{#1\sphinxcode{)}#2}} +\newcommand{\pysigline}[1]{\item[{#1}]} +\newcommand{\pysiglinewithargsret}[3]{% + \settowidth{\py@argswidth}{#1\sphinxcode{(}}% + \addtolength{\py@argswidth}{-2\py@argswidth}% + \addtolength{\py@argswidth}{\linewidth}% + \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}}]} +\newcommand{\pysigstartmultiline}{% + \def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}% + \edef\pysigstopmultiline + {\noexpand\leavevmode\parskip\the\parskip\relax\itemsep\the\itemsep\relax}% + \parskip\z@skip\itemsep\z@skip +} + +% Production lists +% +\newenvironment{productionlist}{% +% \def\sphinxoptional##1{{\Large[}##1{\Large]}} + \def\production##1##2{\\\sphinxcode{\sphinxupquote{##1}}&::=&\sphinxcode{\sphinxupquote{##2}}}% + \def\productioncont##1{\\& &\sphinxcode{\sphinxupquote{##1}}}% + \parindent=2em + \indent + \setlength{\LTpre}{0pt}% + \setlength{\LTpost}{0pt}% + \begin{longtable}[l]{lcl} +}{% + \end{longtable} +} + +% Definition lists; requested by AMK for HOWTO documents. Probably useful +% elsewhere as well, so keep in in the general style support. +% +\newenvironment{definitions}{% + \begin{description}% + \def\term##1{\item[{##1}]\mbox{}\\*[0mm]}% +}{% + \end{description}% +} + +%% FROM DOCTUTILS LATEX WRITER +% +% The following is stuff copied from docutils' latex writer. +% +\newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated +\newenvironment{optionlist}[1] +{\begin{list}{} + {\setlength{\labelwidth}{#1} + \setlength{\rightmargin}{1cm} + \setlength{\leftmargin}{\rightmargin} + \addtolength{\leftmargin}{\labelwidth} + \addtolength{\leftmargin}{\labelsep} + \renewcommand{\makelabel}{\optionlistlabel}} +}{\end{list}} + +\newlength{\lineblockindentation} +\setlength{\lineblockindentation}{2.5em} +\newenvironment{lineblock}[1] +{\begin{list}{} + {\setlength{\partopsep}{\parskip} + \addtolength{\partopsep}{\baselineskip} + \topsep0pt\itemsep0.15\baselineskip\parsep0pt + \leftmargin#1\relax} + \raggedright} +{\end{list}} + +% From docutils.writers.latex2e +% inline markup (custom roles) +% \DUrole{#1}{#2} tries \DUrole#1{#2} +\providecommand*{\DUrole}[2]{% + \ifcsname DUrole\detokenize{#1}\endcsname + \csname DUrole\detokenize{#1}\endcsname{#2}% + \else% backwards compatibility: try \docutilsrole#1{#2} + \ifcsname docutilsrole\detokenize{#1}\endcsname + \csname docutilsrole\detokenize{#1}\endcsname{#2}% + \else + #2% + \fi + \fi +} + +\providecommand*{\DUprovidelength}[2]{% + \ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi +} + +\DUprovidelength{\DUlineblockindent}{2.5em} +\ifdefined\DUlineblock\else + \newenvironment{DUlineblock}[1]{% + \list{}{\setlength{\partopsep}{\parskip} + \addtolength{\partopsep}{\baselineskip} + \setlength{\topsep}{0pt} + \setlength{\itemsep}{0.15\baselineskip} + \setlength{\parsep}{0pt} + \setlength{\leftmargin}{#1}} + \raggedright + } + {\endlist} +\fi + +%% TEXT STYLING +% +% to obtain straight quotes we execute \@noligs as patched by upquote, and +% \scantokens is needed in cases where it would be too late for the macro to +% first set catcodes and then fetch its argument. We also make the contents +% breakable at non-escaped . , ; ? ! / using \sphinxbreaksviaactive, +% and also at \ character (which is escaped to \textbackslash{}). +\protected\def\sphinxtextbackslashbreakbefore + {\discretionary{}{\sphinxafterbreak\sphinx@textbackslash}{\sphinx@textbackslash}} +\protected\def\sphinxtextbackslashbreakafter + {\discretionary{\sphinx@textbackslash}{\sphinxafterbreak}{\sphinx@textbackslash}} +\let\sphinxtextbackslash\sphinxtextbackslashbreakafter +% the macro must be protected if it ends up used in moving arguments, +% in 'alltt' \@noligs is done already, and the \scantokens must be avoided. +\protected\def\sphinxupquote#1{{\def\@tempa{alltt}% + \ifx\@tempa\@currenvir\else + \ifspx@opt@inlineliteralwraps + % break at . , ; ? ! / + \sphinxbreaksviaactive + % break also at \ + \let\sphinx@textbackslash\textbackslash + \let\textbackslash\sphinxtextbackslash + % by default, no continuation symbol on next line but may be added + \let\sphinxafterbreak\sphinxafterbreakofinlineliteral + % do not overwrite the comma set-up + \let\verbatim@nolig@list\sphinx@literal@nolig@list + \fi + % fix a space-gobbling issue due to LaTeX's original \do@noligs +% TODO: using \@noligs as patched by upquote.sty is now unneeded because +% either ` and ' are escaped (non-unicode engines) or they don't build +% ligatures (unicode engines). Thus remove this and unify handling of `, <, >, +% ' and - with the characters . , ; ? ! / as handled via +% \sphinxbreaksviaactive. +% Hence \sphinx@do@noligs will be removed, or rather replaced with code +% inserting discretionaries, as they allow a continuation symbol on start of +% next line to achieve common design with code-blocks. + \let\do@noligs\sphinx@do@noligs + \@noligs\endlinechar\m@ne\everyeof{}% (<- in case inside \sphinxhref) + \expandafter\scantokens + \fi {{#1}}}}% extra brace pair to fix end-space gobbling issue... +\def\sphinx@do@noligs #1{\catcode`#1\active\begingroup\lccode`\~`#1\relax + \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1 }}} +\def\sphinx@literal@nolig@list {\do\`\do\<\do\>\do\'\do\-}% +\let\sphinxafterbreakofinlineliteral\empty + +% Some custom font markup commands. +\protected\def\sphinxstrong#1{\textbf{#1}} +\protected\def\sphinxcode#1{\texttt{#1}} +\protected\def\sphinxbfcode#1{\textbf{\sphinxcode{#1}}} +\protected\def\sphinxemail#1{\textsf{#1}} +\protected\def\sphinxtablecontinued#1{\textsf{#1}} +\protected\def\sphinxtitleref#1{\emph{#1}} +\protected\def\sphinxmenuselection#1{\emph{#1}} +\protected\def\sphinxguilabel#1{\emph{#1}} +\protected\def\sphinxkeyboard#1{\sphinxcode{#1}} +\protected\def\sphinxaccelerator#1{\underline{#1}} +\protected\def\sphinxcrossref#1{\emph{#1}} +\protected\def\sphinxtermref#1{\emph{#1}} +% \optional is used for ``[, arg]``, i.e. desc_optional nodes. +\long\protected\def\sphinxoptional#1{% + {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}} + +% additional customizable styling +\def\sphinxstyleindexentry #1{\texttt{#1}} +\def\sphinxstyleindexextra #1{ (\emph{#1})} +\def\sphinxstyleindexpageref #1{, \pageref{#1}} +\def\sphinxstyleindexpagemain#1{\textbf{#1}} +\protected\def\spxentry#1{#1}% will get \let to \sphinxstyleindexentry in index +\protected\def\spxextra#1{#1}% will get \let to \sphinxstyleindexextra in index +\def\sphinxstyleindexlettergroup #1% + {{\Large\sffamily#1}\nopagebreak\vspace{1mm}} +\def\sphinxstyleindexlettergroupDefault #1% + {{\Large\sffamily\sphinxnonalphabeticalgroupname}\nopagebreak\vspace{1mm}} +\protected\def\sphinxstyletopictitle #1{\textbf{#1}\par\medskip} +\let\sphinxstylesidebartitle\sphinxstyletopictitle +\protected\def\sphinxstyleothertitle #1{\textbf{#1}} +\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip} +% \text.. commands do not allow multiple paragraphs +\protected\def\sphinxstyletheadfamily {\sffamily} +\protected\def\sphinxstyleemphasis #1{\emph{#1}} +\protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}} +\protected\def\sphinxstylestrong #1{\textbf{#1}} +\protected\def\sphinxstyleliteralstrong#1{\sphinxbfcode{#1}} +\protected\def\sphinxstyleabbreviation #1{\textsc{#1}} +\protected\def\sphinxstyleliteralintitle#1{\sphinxcode{#1}} +\newcommand*\sphinxstylecodecontinued[1]{\footnotesize(#1)}% +\newcommand*\sphinxstylecodecontinues[1]{\footnotesize(#1)}% +% figure legend comes after caption and may contain arbitrary body elements +\newenvironment{sphinxlegend}{\par\small}{\par} +% reduce hyperref "Token not allowed in a PDF string" warnings on PDF builds +\AtBeginDocument{\pdfstringdefDisableCommands{% +% all "protected" macros possibly ending up in section titles should be here +% TODO: examine if \sphinxhref, \sphinxurl, \sphinnolinkurl should be handled + \let\sphinxstyleemphasis \@firstofone + \let\sphinxstyleliteralemphasis \@firstofone + \let\sphinxstylestrong \@firstofone + \let\sphinxstyleliteralstrong \@firstofone + \let\sphinxstyleabbreviation \@firstofone + \let\sphinxstyleliteralintitle \@firstofone + \let\sphinxupquote \@firstofone + \let\sphinxstrong \@firstofone + \let\sphinxcode \@firstofone + \let\sphinxbfcode \@firstofone + \let\sphinxemail \@firstofone + \let\sphinxcrossref \@firstofone + \let\sphinxtermref \@firstofone + \let\sphinxhyphen\sphinxhyphenforbookmarks +}} + +% Special characters +% +% This definition prevents en-dash and em-dash TeX ligatures. +% +% It inserts a potential breakpoint after the hyphen. This is to keep in sync +% with behavior in code-blocks, parsed and inline literals. For a breakpoint +% before the hyphen use \leavevmode\kern\z@- (within \makeatletter/\makeatother) +\protected\def\sphinxhyphen#1{-\kern\z@} +% The {} from texescape mark-up is kept, else -- gives en-dash in PDF bookmark +\def\sphinxhyphenforbookmarks{-} + +% For curly braces inside \index macro +\def\sphinxleftcurlybrace{\{} +\def\sphinxrightcurlybrace{\}} + +% Declare Unicode characters used by linux tree command to pdflatex utf8/utf8x +\def\spx@bd#1#2{% + \leavevmode + \begingroup + \ifx\spx@bd@height \@undefined\def\spx@bd@height{\baselineskip}\fi + \ifx\spx@bd@width \@undefined\setbox0\hbox{0}\def\spx@bd@width{\wd0 }\fi + \ifx\spx@bd@thickness\@undefined\def\spx@bd@thickness{.6\p@}\fi + \ifx\spx@bd@lower \@undefined\def\spx@bd@lower{\dp\strutbox}\fi + \lower\spx@bd@lower#1{#2}% + \endgroup +}% +\@namedef{sphinx@u2500}% BOX DRAWINGS LIGHT HORIZONTAL + {\spx@bd{\vbox to\spx@bd@height} + {\vss\hrule\@height\spx@bd@thickness + \@width\spx@bd@width\vss}}% +\@namedef{sphinx@u2502}% BOX DRAWINGS LIGHT VERTICAL + {\spx@bd{\hb@xt@\spx@bd@width} + {\hss\vrule\@height\spx@bd@height + \@width \spx@bd@thickness\hss}}% +\@namedef{sphinx@u2514}% BOX DRAWINGS LIGHT UP AND RIGHT + {\spx@bd{\hb@xt@\spx@bd@width} + {\hss\raise.5\spx@bd@height + \hb@xt@\z@{\hss\vrule\@height.5\spx@bd@height + \@width \spx@bd@thickness\hss}% + \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness + \@width.5\spx@bd@width\vss}}}% +\@namedef{sphinx@u251C}% BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {\spx@bd{\hb@xt@\spx@bd@width} + {\hss + \hb@xt@\z@{\hss\vrule\@height\spx@bd@height + \@width \spx@bd@thickness\hss}% + \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness + \@width.5\spx@bd@width\vss}}}% +\protected\def\sphinxunichar#1{\@nameuse{sphinx@u#1}}% + +% Tell TeX about pathological hyphenation cases: +\hyphenation{Base-HTTP-Re-quest-Hand-ler} +\endinput diff --git a/_build/latex/sphinx.xdy b/_build/latex/sphinx.xdy new file mode 100644 index 0000000..edca178 --- /dev/null +++ b/_build/latex/sphinx.xdy @@ -0,0 +1,230 @@ +;;; -*- mode: lisp; coding: utf-8; -*- + +;; Unfortunately xindy is out-of-the-box hyperref-incompatible. This +;; configuration is a workaround, which requires to pass option +;; hyperindex=false to hyperref. +;; textit and emph not currently used, spxpagem replaces former textbf +(define-attributes (("textbf" "textit" "emph" "spxpagem" "default"))) +(markup-locref :open "\textbf{\hyperpage{" :close "}}" :attr "textbf") +(markup-locref :open "\textit{\hyperpage{" :close "}}" :attr "textit") +(markup-locref :open "\emph{\hyperpage{" :close "}}" :attr "emph") +(markup-locref :open "\spxpagem{\hyperpage{" :close "}}" :attr "spxpagem") +(markup-locref :open "\hyperpage{" :close "}" :attr "default") + +(require "numeric-sort.xdy") + +;; xindy base module latex.xdy loads tex.xdy and the latter instructs +;; xindy to ignore **all** TeX macros in .idx entries, except those +;; explicitely described in merge rule. But when after applying all +;; merge rules an empty string results, xindy raises an error: + +;; ERROR: CHAR: index 0 should be less than the length of the string + +;; For example when using pdflatex with utf-8 characters the index +;; file will contain \IeC macros and they will get ignored except if +;; suitable merge rules are loaded early. The texindy script coming +;; with xindy provides this, but only for Latin scripts. The texindy +;; man page says to use rather xelatex or lualatex in case of Cyrillic +;; scripts. + +;; Sphinx contributes LICRcyr2utf8.xdy to provide support for Cyrillic +;; scripts for the pdflatex engine. + +;; Another issue caused by xindy ignoring all TeX macros except those +;; explicitely declared reveals itself when attempting to index ">>>", +;; as the ">" is converted to "\textgreater{}" by Sphinx's LaTeX +;; escaping. + +;; To fix this, Sphinx does **not** use texindy, and does not even +;; load the xindy latex.xdy base module. + +;(require "latex.xdy") + +;; Rather it incorporates some suitable extracts from latex.xdy and +;; tex.xdy with additional Sphinx contributed rules. + +;; But, this means for pdflatex and Latin scripts that the xindy file +;; tex/inputenc/uf8.xdy is not usable because it refers to the macro +;; \IeC only sporadically, and as tex.xdy is not loaded, a rule such as +;; (merge-rule "\'e" "é" :string) +;; does not work, it must be +;; (merge-rule "\IeC {\'e}" "é" :string) +;; So Sphinx contributes LICRlatin2utf8.xdy to mitigate that problem. + +;;;;;;;; extracts from tex.xdy (discarding most original comments): + +;;; +;;; TeX conventions +;;; + +;; Discard leading and trailing white space. Collapse multiple white +;; space characters to blank. + +(merge-rule "^ +" "" :eregexp) +(merge-rule " +$" "" :eregexp) +(merge-rule " +" " " :eregexp) + +;; Handle TeX markup + +(merge-rule "\\([{}$%&#])" "\1" :eregexp) + +;;;;;;;; end of extracts from xindy's tex.xdy + +;;;;;;;; extracts from latex.xdy: + +;; Standard location classes: arabic and roman numbers, and alphabets. + +(define-location-class "arabic-page-numbers" ("arabic-numbers")) +(define-location-class "roman-page-numbers" ("roman-numbers-lowercase")) +(define-location-class "Roman-page-numbers" ("roman-numbers-uppercase")) +(define-location-class "alpha-page-numbers" ("alpha")) +(define-location-class "Alpha-page-numbers" ("ALPHA")) + +;; Output Markup + +(markup-letter-group-list :sep "~n~n \indexspace~n") + +(markup-indexentry :open "~n \item " :depth 0) +(markup-indexentry :open "~n \subitem " :depth 1) +(markup-indexentry :open "~n \subsubitem " :depth 2) + +(markup-locclass-list :open ", " :sep ", ") +(markup-locref-list :sep ", ") + +;;;;;;;; end of extracts from latex.xdy + +;; The LaTeX \index command turns \ into normal character so the TeX macros +;; written to .idx files are not followed by a blank. This is different +;; from non-ascii letters which end up (with pdflatex) as \IeC macros in .idx +;; file, with a blank space after \IeC + +;; Details of the syntax are explained at +;; http://xindy.sourceforge.net/doc/manual-3.html +;; In absence of :string, "xindy uses an auto-detection mechanism to decide, +;; if the pattern is a regular expression or not". But it is not obvious to +;; guess, for example "\\_" is not detected as RE but "\\P\{\}" is, so for +;; being sure we apply the :string switch everywhere and do not use \\ etc... + +;; Go back from sphinx.util.texescape TeX macros to UTF-8 + +(merge-rule "\sphinxleftcurlybrace{}" "{" :string) +(merge-rule "\sphinxrightcurlybrace{}" "}" :string) +(merge-rule "\_" "_" :string) +(merge-rule "{[}" "[" :string) +(merge-rule "{]}" "]" :string) +(merge-rule "\textbackslash{}" "\" :string) ; " for Emacs syntax highlighting +(merge-rule "\textasciitilde{}" "~~" :string); the ~~ escape is needed here +(merge-rule "\textasciicircum{}" "^" :string) +(merge-rule "\sphinxhyphen{}" "-" :string) +(merge-rule "\textquotesingle{}" "'" :string) +(merge-rule "\textasciigrave{}" "`" :string) +(merge-rule "\textless{}" "<" :string) +(merge-rule "\textgreater{}" ">" :string) +(merge-rule "\P{}" "¶" :string) +(merge-rule "\S{}" "§" :string) +(merge-rule "\texteuro{}" "€" :string) +(merge-rule "\(\infty\)" "∞" :string) +(merge-rule "\(\pm\)" "±" :string) +(merge-rule "\(\rightarrow\)" "→" :string) +(merge-rule "\(\checkmark\)" "✓" :string) +(merge-rule "\textendash{}" "–" :string) +(merge-rule "\textbar{}" "|" :string) +(merge-rule "\(\sp{\text{0}}\)" "⁰" :string) +(merge-rule "\(\sp{\text{1}}\)" "¹" :string) +(merge-rule "\(\sp{\text{2}}\)" "²" :string) +(merge-rule "\(\sp{\text{3}}\)" "³" :string) +(merge-rule "\(\sp{\text{4}}\)" "⁴" :string) +(merge-rule "\(\sp{\text{5}}\)" "⁵" :string) +(merge-rule "\(\sp{\text{6}}\)" "⁶" :string) +(merge-rule "\(\sp{\text{7}}\)" "⁷" :string) +(merge-rule "\(\sp{\text{8}}\)" "⁸" :string) +(merge-rule "\(\sp{\text{9}}\)" "⁹" :string) +(merge-rule "\(\sb{\text{0}}\)" "₀" :string) +(merge-rule "\(\sb{\text{1}}\)" "₁" :string) +(merge-rule "\(\sb{\text{2}}\)" "₂" :string) +(merge-rule "\(\sb{\text{3}}\)" "₃" :string) +(merge-rule "\(\sb{\text{4}}\)" "₄" :string) +(merge-rule "\(\sb{\text{5}}\)" "₅" :string) +(merge-rule "\(\sb{\text{6}}\)" "₆" :string) +(merge-rule "\(\sb{\text{7}}\)" "₇" :string) +(merge-rule "\(\sb{\text{8}}\)" "₈" :string) +(merge-rule "\(\sb{\text{9}}\)" "₉" :string) +(merge-rule "\IeC {\textalpha }" "α" :string) +(merge-rule "\IeC {\textbeta }" "β" :string) +(merge-rule "\IeC {\textgamma }" "γ" :string) +(merge-rule "\IeC {\textdelta }" "δ" :string) +(merge-rule "\IeC {\textepsilon }" "ε" :string) +(merge-rule "\IeC {\textzeta }" "ζ" :string) +(merge-rule "\IeC {\texteta }" "η" :string) +(merge-rule "\IeC {\texttheta }" "θ" :string) +(merge-rule "\IeC {\textiota }" "ι" :string) +(merge-rule "\IeC {\textkappa }" "κ" :string) +(merge-rule "\IeC {\textlambda }" "λ" :string) +(merge-rule "\IeC {\textmu }" "μ" :string) +(merge-rule "\IeC {\textnu }" "ν" :string) +(merge-rule "\IeC {\textxi }" "ξ" :string) +(merge-rule "\IeC {\textomicron }" "ο" :string) +(merge-rule "\IeC {\textpi }" "π" :string) +(merge-rule "\IeC {\textrho }" "ρ" :string) +(merge-rule "\IeC {\textsigma }" "σ" :string) +(merge-rule "\IeC {\texttau }" "τ" :string) +(merge-rule "\IeC {\textupsilon }" "υ" :string) +(merge-rule "\IeC {\textphi }" "φ" :string) +(merge-rule "\IeC {\textchi }" "χ" :string) +(merge-rule "\IeC {\textpsi }" "ψ" :string) +(merge-rule "\IeC {\textomega }" "ω" :string) +(merge-rule "\IeC {\textAlpha }" "Α" :string) +(merge-rule "\IeC {\textBeta }" "Β" :string) +(merge-rule "\IeC {\textGamma }" "Γ" :string) +(merge-rule "\IeC {\textDelta }" "Δ" :string) +(merge-rule "\IeC {\textEpsilon }" "Ε" :string) +(merge-rule "\IeC {\textZeta }" "Ζ" :string) +(merge-rule "\IeC {\textEta }" "Η" :string) +(merge-rule "\IeC {\textTheta }" "Θ" :string) +(merge-rule "\IeC {\textIota }" "Ι" :string) +(merge-rule "\IeC {\textKappa }" "Κ" :string) +(merge-rule "\IeC {\textLambda }" "Λ" :string) +(merge-rule "\IeC {\textMu }" "Μ" :string) +(merge-rule "\IeC {\textNu }" "Ν" :string) +(merge-rule "\IeC {\textTheta }" "Θ" :string) +(merge-rule "\IeC {\textIota }" "Ι" :string) +(merge-rule "\IeC {\textKappa }" "Κ" :string) +(merge-rule "\IeC {\textLambda }" "Λ" :string) +(merge-rule "\IeC {\textMu }" "Μ" :string) +(merge-rule "\IeC {\textNu }" "Ν" :string) +(merge-rule "\IeC {\textXi }" "Ξ" :string) +(merge-rule "\IeC {\textOmicron }" "Ο" :string) +(merge-rule "\IeC {\textPi }" "Π" :string) +(merge-rule "\IeC {\textRho }" "Ρ" :string) +(merge-rule "\IeC {\textSigma }" "Σ" :string) +(merge-rule "\IeC {\textTau }" "Τ" :string) +(merge-rule "\IeC {\textUpsilon }" "Υ" :string) +(merge-rule "\IeC {\textPhi }" "Φ" :string) +(merge-rule "\IeC {\textChi }" "Χ" :string) +(merge-rule "\IeC {\textPsi }" "Ψ" :string) +(merge-rule "\IeC {\textOmega }" "Ω" :string) +(merge-rule "\IeC {\textohm }" "Ω" :string) + +;; This xindy module provides some basic support for "see" +(require "makeindex.xdy") + +;; This creates one-letter headings and works fine with utf-8 letters. +;; For Cyrillic with pdflatex works thanks to LICRcyr2utf8.xdy +(require "latin-lettergroups.xdy") + +;; currently we don't (know how to easily) separate "Numbers" from +;; "Symbols" with xindy as is the case with makeindex. +(markup-index :open "\begin{sphinxtheindex} +\let\lettergroup\sphinxstyleindexlettergroup +\let\lettergroupDefault\sphinxstyleindexlettergroupDefault +\let\spxpagem\sphinxstyleindexpagemain +\let\spxentry\sphinxstyleindexentry +\let\spxextra\sphinxstyleindexextra + +" + :close " + +\end{sphinxtheindex} +" + :tree) + diff --git a/_build/latex/sphinxcyrillic.sty b/_build/latex/sphinxcyrillic.sty new file mode 100644 index 0000000..482b4e3 --- /dev/null +++ b/_build/latex/sphinxcyrillic.sty @@ -0,0 +1,55 @@ +%% CYRILLIC IN NON-CYRILLIC DOCUMENTS (pdflatex only) +% +% refs: https://tex.stackexchange.com/q/460271/ +\ProvidesPackage{sphinxcyrillic}% + [2018/11/21 v2.0 support for Cyrillic in non-Cyrillic documents] +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=spx@cyropt@} % use \spx@cyropt@ prefix +\DeclareBoolOption[false]{Xtwo} +\DeclareBoolOption[false]{TtwoA} +\DeclareDefaultOption{\@unknownoptionerror} +\ProcessLocalKeyvalOptions* % ignore class options + +\ifspx@cyropt@Xtwo +% original code by tex.sx user egreg (updated 2019/10/28): +% https://tex.stackexchange.com/a/460325/ +% 159 Cyrillic glyphs as available in X2 TeX 8bit font encoding +% This assumes inputenc loaded with utf8 option, or LaTeX release +% as recent as 2018/04/01 which does it automatically. + \@tfor\next:=% + {Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}% + {К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}% + {Я}{а}{б}{в}{г}{д}{е}{ж}{з}{и}{й}{к}{л}{м}{н}{о}{п}{р}{с}{т}{у}% + {ф}{х}{ц}{ч}{ш}{щ}{ъ}{ы}{ь}{э}{ю}{я}{ё}{ђ}{є}{ѕ}{і}{ј}{љ}{њ}{ћ}% + {ў}{џ}{Ѣ}{ѣ}{Ѫ}{ѫ}{Ѵ}{ѵ}{Ґ}{ґ}{Ғ}{ғ}{Ҕ}{ҕ}{Җ}{җ}{Ҙ}{ҙ}{Қ}{қ}{Ҝ}{ҝ}% + {Ҟ}{ҟ}{Ҡ}{ҡ}{Ң}{ң}{Ҥ}{ҥ}{Ҧ}{ҧ}{Ҩ}{ҩ}{Ҫ}{ҫ}{Ҭ}{ҭ}{Ү}{ү}{Ұ}{ұ}{Ҳ}{ҳ}% + {Ҵ}{ҵ}{Ҷ}{ҷ}{Ҹ}{ҹ}{Һ}{һ}{Ҽ}{ҽ}{Ҿ}{ҿ}{Ӏ}{Ӄ}{ӄ}{Ӆ}{ӆ}{Ӈ}{ӈ}{Ӌ}{ӌ}% + {Ӎ}{ӎ}{Ӕ}{ӕ}{Ә}{ә}{Ӡ}{ӡ}{Ө}{ө}\do + {% + \begingroup\def\IeC{\protect\DeclareTextSymbolDefault}% + \protected@edef\@temp{\endgroup + \@ifl@t@r{\fmtversion}{2019/10/01}{\csname u8:\next\endcsname}{\next}}% + \@temp{X2}% + }% +\else +\ifspx@cyropt@TtwoA +% original code by tex.sx user jfbu: +% https://tex.stackexchange.com/a/460305/ +% 63*2+1=127 Cyrillic glyphs as found in T2A 8bit TeX font-encoding + \@tfor\@tempa:=% + {ae}{a}{b}{chrdsc}{chvcrs}{ch}{c}{dje}{dze}{dzhe}{d}{erev}{ery}{e}% + {f}{ghcrs}{gup}{g}{hdsc}{hrdsn}{h}{ie}{ii}{ishrt}{i}{je}% + {kbeak}{kdsc}{kvcrs}{k}{lje}{l}{m}{ndsc}{ng}{nje}{n}{otld}{o}{p}{r}% + {schwa}{sdsc}{sftsn}{shch}{shha}{sh}{s}{tshe}{t}{ushrt}{u}{v}% + {ya}{yhcrs}{yi}{yo}{yu}{y}{zdsc}{zhdsc}{zh}{z}\do + {% + \expandafter\DeclareTextSymbolDefault\expandafter + {\csname cyr\@tempa\endcsname}{T2A}% + \expandafter\uppercase\expandafter{\expandafter + \def\expandafter\@tempa\expandafter{\@tempa}}% + \expandafter\DeclareTextSymbolDefault\expandafter + {\csname CYR\@tempa\endcsname}{T2A}% + }% + \DeclareTextSymbolDefault{\CYRpalochka}{T2A}% +\fi\fi +\endinput diff --git a/_build/latex/sphinxhighlight.sty b/_build/latex/sphinxhighlight.sty new file mode 100644 index 0000000..1557ce6 --- /dev/null +++ b/_build/latex/sphinxhighlight.sty @@ -0,0 +1,105 @@ +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{sphinxhighlight}[2016/05/29 stylesheet for highlighting with pygments] + + +\makeatletter +\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax% + \let\PYG@ul=\relax \let\PYG@tc=\relax% + \let\PYG@bc=\relax \let\PYG@ff=\relax} +\def\PYG@tok#1{\csname PYG@tok@#1\endcsname} +\def\PYG@toks#1+{\ifx\relax#1\empty\else% + \PYG@tok{#1}\expandafter\PYG@toks\fi} +\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{% + \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}} +\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}} + +\expandafter\def\csname PYG@tok@w\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} +\expandafter\def\csname PYG@tok@c\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@cp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@cs\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}} +\expandafter\def\csname PYG@tok@k\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@kp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@kt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.56,0.13,0.00}{##1}}} +\expandafter\def\csname PYG@tok@o\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PYG@tok@ow\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@nf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}} +\expandafter\def\csname PYG@tok@nc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}} +\expandafter\def\csname PYG@tok@nn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}} +\expandafter\def\csname PYG@tok@ne\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@nv\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@no\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.38,0.68,0.84}{##1}}} +\expandafter\def\csname PYG@tok@nl\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.13,0.44}{##1}}} +\expandafter\def\csname PYG@tok@ni\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.84,0.33,0.22}{##1}}} +\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@nt\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.45}{##1}}} +\expandafter\def\csname PYG@tok@nd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.33,0.33,0.33}{##1}}} +\expandafter\def\csname PYG@tok@s\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sd\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@si\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.44,0.63,0.82}{##1}}} +\expandafter\def\csname PYG@tok@se\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.14,0.33,0.53}{##1}}} +\expandafter\def\csname PYG@tok@ss\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.32,0.47,0.09}{##1}}} +\expandafter\def\csname PYG@tok@sx\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}} +\expandafter\def\csname PYG@tok@m\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@gh\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PYG@tok@gu\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} +\expandafter\def\csname PYG@tok@gd\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} +\expandafter\def\csname PYG@tok@gi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} +\expandafter\def\csname PYG@tok@gr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} +\expandafter\def\csname PYG@tok@ge\endcsname{\let\PYG@it=\textit} +\expandafter\def\csname PYG@tok@gs\endcsname{\let\PYG@bf=\textbf} +\expandafter\def\csname PYG@tok@gp\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}} +\expandafter\def\csname PYG@tok@go\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.20,0.20,0.20}{##1}}} +\expandafter\def\csname PYG@tok@gt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} +\expandafter\def\csname PYG@tok@err\endcsname{\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} +\expandafter\def\csname PYG@tok@kc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@kd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@kn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@kr\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@bp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@fm\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}} +\expandafter\def\csname PYG@tok@vc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@vg\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@vi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@vm\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@sa\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@dl\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@s2\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@s1\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@mb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@mf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@mh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@mi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@il\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@mo\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@ch\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@cm\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@cpf\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@c1\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} + +\def\PYGZbs{\char`\\} +\def\PYGZus{\char`\_} +\def\PYGZob{\char`\{} +\def\PYGZcb{\char`\}} +\def\PYGZca{\char`\^} +\def\PYGZam{\char`\&} +\def\PYGZlt{\char`\<} +\def\PYGZgt{\char`\>} +\def\PYGZsh{\char`\#} +\def\PYGZpc{\char`\%} +\def\PYGZdl{\char`\$} +\def\PYGZhy{\char`\-} +\def\PYGZsq{\char`\'} +\def\PYGZdq{\char`\"} +\def\PYGZti{\char`\~} +% for compatibility with earlier versions +\def\PYGZat{@} +\def\PYGZlb{[} +\def\PYGZrb{]} +\makeatother + +\renewcommand\PYGZsq{\textquotesingle} diff --git a/_build/latex/sphinxhowto.cls b/_build/latex/sphinxhowto.cls new file mode 100644 index 0000000..57d73ce --- /dev/null +++ b/_build/latex/sphinxhowto.cls @@ -0,0 +1,102 @@ +% +% sphinxhowto.cls for Sphinx (http://sphinx-doc.org/) +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{sphinxhowto}[2019/12/01 v2.3.0 Document class (Sphinx howto)] + +% 'oneside' option overriding the 'twoside' default +\newif\if@oneside +\DeclareOption{oneside}{\@onesidetrue} +% Pass remaining document options to the parent class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}} +\ProcessOptions\relax + +% Default to two-side document +\if@oneside +% nothing to do (oneside is the default) +\else +\PassOptionsToClass{twoside}{\sphinxdocclass} +\fi + +\LoadClass{\sphinxdocclass} + +% Set some sane defaults for section numbering depth and TOC depth. You can +% reset these counters in your preamble. +% +\setcounter{secnumdepth}{2} +\setcounter{tocdepth}{2}% i.e. section and subsection + +% Adapt \and command to the flushright context of \sphinxmaketitle, to +% avoid ragged line endings if author names do not fit all on one single line +\DeclareRobustCommand{\and}{% + \end{tabular}\kern-\tabcolsep + \allowbreak + \hskip\dimexpr1em+\tabcolsep\@plus.17fil\begin{tabular}[t]{c}% +}% +% If it is desired that each author name be on its own line, use in preamble: +%\DeclareRobustCommand{\and}{% +% \end{tabular}\kern-\tabcolsep\\\begin{tabular}[t]{c}% +%}% +% Change the title page to look a bit better, and fit in with the fncychap +% ``Bjarne'' style a bit better. +% +\newcommand{\sphinxmaketitle}{% + \noindent\rule{\textwidth}{1pt}\par + \begingroup % for PDF information dictionary + \def\endgraf{ }\def\and{\& }% + \pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup + \hypersetup{pdfauthor={\@author}, pdftitle={\@title}}% + \endgroup + \begin{flushright} + \sphinxlogo + \py@HeaderFamily + {\Huge \@title }\par + {\itshape\large \py@release \releaseinfo}\par + \vspace{25pt} + {\Large + \begin{tabular}[t]{c} + \@author + \end{tabular}\kern-\tabcolsep}\par + \vspace{25pt} + \@date \par + \py@authoraddress \par + \end{flushright} + \@thanks + \setcounter{footnote}{0} + \let\thanks\relax\let\maketitle\relax + %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} +} + +\newcommand{\sphinxtableofcontents}{% + \begingroup + \parskip \z@skip + \sphinxtableofcontentshook + \tableofcontents + \endgroup + \noindent\rule{\textwidth}{1pt}\par + \vspace{12pt}% +} +\newcommand\sphinxtableofcontentshook{} +\pagenumbering{arabic} + +% Fix the bibliography environment to add an entry to the Table of +% Contents. +% For an article document class this environment is a section, +% so no page break before it. +% +\newenvironment{sphinxthebibliography}[1]{% + % \phantomsection % not needed here since TeXLive 2010's hyperref + \begin{thebibliography}{#1}% + \addcontentsline{toc}{section}{\ifdefined\refname\refname\else\ifdefined\bibname\bibname\fi\fi}}{\end{thebibliography}} + + +% Same for the indices. +% The memoir class already does this, so we don't duplicate it in that case. +% +\@ifclassloaded{memoir} + {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}} + {\newenvironment{sphinxtheindex}{% + \phantomsection % needed because no chapter, section, ... is created by theindex + \begin{theindex}% + \addcontentsline{toc}{section}{\indexname}}{\end{theindex}}} diff --git a/_build/latex/sphinxmanual.cls b/_build/latex/sphinxmanual.cls new file mode 100644 index 0000000..718189d --- /dev/null +++ b/_build/latex/sphinxmanual.cls @@ -0,0 +1,128 @@ +% +% sphinxmanual.cls for Sphinx (http://sphinx-doc.org/) +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{sphinxmanual}[2019/12/01 v2.3.0 Document class (Sphinx manual)] + +% chapters starting at odd pages (overridden by 'openany' document option) +\PassOptionsToClass{openright}{\sphinxdocclass} + +% 'oneside' option overriding the 'twoside' default +\newif\if@oneside +\DeclareOption{oneside}{\@onesidetrue} +% Pass remaining document options to the parent class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}} +\ProcessOptions\relax + +% Defaults two-side document +\if@oneside +% nothing to do (oneside is the default) +\else +\PassOptionsToClass{twoside}{\sphinxdocclass} +\fi + +\LoadClass{\sphinxdocclass} + +% Set some sane defaults for section numbering depth and TOC depth. You can +% reset these counters in your preamble. +% +\setcounter{secnumdepth}{2} +\setcounter{tocdepth}{1} + +% Adapt \and command to the flushright context of \sphinxmaketitle, to +% avoid ragged line endings if author names do not fit all on one single line +\DeclareRobustCommand{\and}{% + \end{tabular}\kern-\tabcolsep + \allowbreak + \hskip\dimexpr1em+\tabcolsep\@plus.17fil\begin{tabular}[t]{c}% +}% +% If it is desired that each author name be on its own line, use in preamble: +%\DeclareRobustCommand{\and}{% +% \end{tabular}\kern-\tabcolsep\\\begin{tabular}[t]{c}% +%}% +% Change the title page to look a bit better, and fit in with the fncychap +% ``Bjarne'' style a bit better. +% +\newcommand{\sphinxmaketitle}{% + \let\sphinxrestorepageanchorsetting\relax + \ifHy@pageanchor\def\sphinxrestorepageanchorsetting{\Hy@pageanchortrue}\fi + \hypersetup{pageanchor=false}% avoid duplicate destination warnings + \begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \noindent\rule{\textwidth}{1pt}\par + \begingroup % for PDF information dictionary + \def\endgraf{ }\def\and{\& }% + \pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup + \hypersetup{pdfauthor={\@author}, pdftitle={\@title}}% + \endgroup + \begin{flushright}% + \sphinxlogo + \py@HeaderFamily + {\Huge \@title \par} + {\itshape\LARGE \py@release\releaseinfo \par} + \vfill + {\LARGE + \begin{tabular}[t]{c} + \@author + \end{tabular}\kern-\tabcolsep + \par} + \vfill\vfill + {\large + \@date \par + \vfill + \py@authoraddress \par + }% + \end{flushright}%\par + \@thanks + \end{titlepage}% + \setcounter{footnote}{0}% + \let\thanks\relax\let\maketitle\relax + %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} + \clearpage + \ifdefined\sphinxbackoftitlepage\sphinxbackoftitlepage\fi + \if@openright\cleardoublepage\else\clearpage\fi + \sphinxrestorepageanchorsetting +} + +\newcommand{\sphinxtableofcontents}{% + \pagenumbering{roman}% + \begingroup + \parskip \z@skip + \sphinxtableofcontentshook + \tableofcontents + \endgroup + % before resetting page counter, let's do the right thing. + \if@openright\cleardoublepage\else\clearpage\fi + \pagenumbering{arabic}% +} + +% This is needed to get the width of the section # area wide enough in the +% library reference. Doing it here keeps it the same for all the manuals. +% +\newcommand{\sphinxtableofcontentshook}{% + \renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}}% + \renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}}% +} + +% Fix the bibliography environment to add an entry to the Table of +% Contents. +% For a report document class this environment is a chapter. +% +\newenvironment{sphinxthebibliography}[1]{% + \if@openright\cleardoublepage\else\clearpage\fi + % \phantomsection % not needed here since TeXLive 2010's hyperref + \begin{thebibliography}{#1}% + \addcontentsline{toc}{chapter}{\bibname}}{\end{thebibliography}} + +% Same for the indices. +% The memoir class already does this, so we don't duplicate it in that case. +% +\@ifclassloaded{memoir} + {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}} + {\newenvironment{sphinxtheindex}{% + \if@openright\cleardoublepage\else\clearpage\fi + \phantomsection % needed as no chapter, section, ... created + \begin{theindex}% + \addcontentsline{toc}{chapter}{\indexname}}{\end{theindex}}} diff --git a/_build/latex/sphinxmessages.sty b/_build/latex/sphinxmessages.sty new file mode 100644 index 0000000..68ebffa --- /dev/null +++ b/_build/latex/sphinxmessages.sty @@ -0,0 +1,21 @@ +% +% sphinxmessages.sty +% +% message resources for Sphinx +% +\ProvidesPackage{sphinxmessages}[2019/01/04 v2.0 Localized LaTeX macros (Sphinx team)] + +\renewcommand{\literalblockcontinuedname}{continued from previous page} +\renewcommand{\literalblockcontinuesname}{continues on next page} +\renewcommand{\sphinxnonalphabeticalgroupname}{Non\sphinxhyphen{}alphabetical} +\renewcommand{\sphinxsymbolsname}{Symbols} +\renewcommand{\sphinxnumbersname}{Numbers} +\def\pageautorefname{page} + +\addto\captionsenglish{\renewcommand{\figurename}{Fig.\@{} }} +\def\fnum@figure{\figurename\thefigure{}} + +\addto\captionsenglish{\renewcommand{\tablename}{Table }} +\def\fnum@table{\tablename\thetable{}} + +\addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} \ No newline at end of file diff --git a/_build/latex/sphinxmulticell.sty b/_build/latex/sphinxmulticell.sty new file mode 100644 index 0000000..a645491 --- /dev/null +++ b/_build/latex/sphinxmulticell.sty @@ -0,0 +1,317 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{sphinxmulticell}% + [2017/02/23 v1.6 better span rows and columns of a table (Sphinx team)]% +\DeclareOption*{\PackageWarning{sphinxmulticell}{Option `\CurrentOption' is unknown}}% +\ProcessOptions\relax +% +% --- MULTICOLUMN --- +% standard LaTeX's \multicolumn +% 1. does not allow verbatim contents, +% 2. interacts very poorly with tabulary. +% +% It is needed to write own macros for Sphinx: to allow code-blocks in merged +% cells rendered by tabular/longtable, and to allow multi-column cells with +% paragraphs to be taken into account sanely by tabulary algorithm for column +% widths. +% +% This requires quite a bit of hacking. First, in Sphinx, the multi-column +% contents will *always* be wrapped in a varwidth environment. The issue +% becomes to pass it the correct target width. We must trick tabulary into +% believing the multicolumn is simply separate columns, else tabulary does not +% incorporate the contents in its algorithm. But then we must clear the +% vertical rules... +% +% configuration of tabulary +\setlength{\tymin}{3\fontcharwd\font`0 }% minimal width of "squeezed" columns +\setlength{\tymax}{10000pt}% allow enough room for paragraphs to "compete" +% we need access to tabulary's final computed width. \@tempdima is too volatile +% to hope it has kept tabulary's value when \sphinxcolwidth needs it. +\newdimen\sphinx@TY@tablewidth +\def\tabulary{% + \def\TY@final{\sphinx@TY@tablewidth\@tempdima\tabular}% + \let\endTY@final\endtabular + \TY@tabular}% +% next hack is needed only if user has set latex_use_latex_multicolumn to True: +% it fixes tabulary's bug with \multicolumn defined "short" in first pass. (if +% upstream tabulary adds a \long, our extra one causes no harm) +\def\sphinx@tempa #1\def\multicolumn#2#3#4#5#6#7#8#9\sphinx@tempa + {\def\TY@tab{#1\long\def\multicolumn####1####2####3{\multispan####1\relax}#9}}% +\expandafter\sphinx@tempa\TY@tab\sphinx@tempa +% +% TN. 1: as \omit is never executed, Sphinx multicolumn does not need to worry +% like standard multicolumn about |l| vs l|. On the other hand it assumes +% columns are separated by a | ... (if not it will add extraneous +% \arrayrulewidth space for each column separation in its estimate of available +% width). +% +% TN. 1b: as Sphinx multicolumn uses neither \omit nor \span, it can not +% (easily) get rid of extra macros from >{...} or <{...} between columns. At +% least, it has been made compatible with colortbl's \columncolor. +% +% TN. 2: tabulary's second pass is handled like tabular/longtable's single +% pass, with the difference that we hacked \TY@final to set in +% \sphinx@TY@tablewidth the final target width as computed by tabulary. This is +% needed only to handle columns with a "horizontal" specifier: "p" type columns +% (inclusive of tabulary's LJRC) holds the target column width in the +% \linewidth dimension. +% +% TN. 3: use of \begin{sphinxmulticolumn}...\end{sphinxmulticolumn} mark-up +% would need some hacking around the fact that groups can not span across table +% cells (the code does inserts & tokens, see TN1b). It was decided to keep it +% simple with \sphinxstartmulticolumn...\sphinxstopmulticolumn. +% +% MEMO about nesting: if sphinxmulticolumn is encountered in a nested tabular +% inside a tabulary it will think to be at top level in the tabulary. But +% Sphinx generates no nested tables, and if some LaTeX macro uses internally a +% tabular this will not have a \sphinxstartmulticolumn within it! +% +\def\sphinxstartmulticolumn{% + \ifx\equation$% $ tabulary's first pass + \expandafter\sphinx@TYI@start@multicolumn + \else % either not tabulary or tabulary's second pass + \expandafter\sphinx@start@multicolumn + \fi +}% +\def\sphinxstopmulticolumn{% + \ifx\equation$% $ tabulary's first pass + \expandafter\sphinx@TYI@stop@multicolumn + \else % either not tabulary or tabulary's second pass + \ignorespaces + \fi +}% +\def\sphinx@TYI@start@multicolumn#1{% + % use \gdef always to avoid stack space build up + \gdef\sphinx@tempa{#1}\begingroup\setbox\z@\hbox\bgroup +}% +\def\sphinx@TYI@stop@multicolumn{\egroup % varwidth was used with \tymax + \xdef\sphinx@tempb{\the\dimexpr\wd\z@/\sphinx@tempa}% per column width + \endgroup + \expandafter\sphinx@TYI@multispan\expandafter{\sphinx@tempa}% +}% +\def\sphinx@TYI@multispan #1{% + \kern\sphinx@tempb\ignorespaces % the per column occupied width + \ifnum#1>\@ne % repeat, taking into account subtleties of TeX's & ... + \expandafter\sphinx@TYI@multispan@next\expandafter{\the\numexpr#1-\@ne\expandafter}% + \fi +}% +\def\sphinx@TYI@multispan@next{&\relax\sphinx@TYI@multispan}% +% +% Now the branch handling either the second pass of tabulary or the single pass +% of tabular/longtable. This is the delicate part where we gather the +% dimensions from the p columns either set-up by tabulary or by user p column +% or Sphinx \X, \Y columns. The difficulty is that to get the said width, the +% template must be inserted (other hacks would be horribly complicated except +% if we rewrote crucial parts of LaTeX's \@array !) and we can not do +% \omit\span like standard \multicolumn's easy approach. Thus we must cancel +% the \vrule separators. Also, perhaps the column specifier is of the l, c, r +% type, then we attempt an ad hoc rescue to give varwidth a reasonable target +% width. +\def\sphinx@start@multicolumn#1{% + \gdef\sphinx@multiwidth{0pt}\gdef\sphinx@tempa{#1}\sphinx@multispan{#1}% +}% +\def\sphinx@multispan #1{% + \ifnum#1=\@ne\expandafter\sphinx@multispan@end + \else\expandafter\sphinx@multispan@next + \fi {#1}% +}% +\def\sphinx@multispan@next #1{% + % trick to recognize L, C, R, J or p, m, b type columns + \ifdim\baselineskip>\z@ + \gdef\sphinx@tempb{\linewidth}% + \else + % if in an l, r, c type column, try and hope for the best + \xdef\sphinx@tempb{\the\dimexpr(\ifx\TY@final\@undefined\linewidth\else + \sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa + -\tw@\tabcolsep-\arrayrulewidth\relax}% + \fi + \noindent\kern\sphinx@tempb\relax + \xdef\sphinx@multiwidth + {\the\dimexpr\sphinx@multiwidth+\sphinx@tempb+\tw@\tabcolsep+\arrayrulewidth}% + % hack the \vline and the colortbl macros + \sphinx@hack@vline\sphinx@hack@CT&\relax + % repeat + \expandafter\sphinx@multispan\expandafter{\the\numexpr#1-\@ne}% +}% +% packages like colortbl add group levels, we need to "climb back up" to be +% able to hack the \vline and also the colortbl inserted tokens. This creates +% empty space whether or not the columns were | separated: +\def\sphinx@hack@vline{\ifnum\currentgrouptype=6\relax + \kern\arrayrulewidth\arrayrulewidth\z@\else\aftergroup\sphinx@hack@vline\fi}% +\def\sphinx@hack@CT{\ifnum\currentgrouptype=6\relax + \let\CT@setup\sphinx@CT@setup\else\aftergroup\sphinx@hack@CT\fi}% +% It turns out \CT@row@color is not expanded contrarily to \CT@column@color +% during LaTeX+colortbl preamble preparation, hence it would be possible for +% \sphinx@CT@setup to discard only the column color and choose to obey or not +% row color and cell color. It would even be possible to propagate cell color +% to row color for the duration of the Sphinx multicolumn... the (provisional?) +% choice has been made to cancel the colortbl colours for the multicolumn +% duration. +\def\sphinx@CT@setup #1\endgroup{\endgroup}% hack to remove colour commands +\def\sphinx@multispan@end#1{% + % first, trace back our steps horizontally + \noindent\kern-\dimexpr\sphinx@multiwidth\relax + % and now we set the final computed width for the varwidth environment + \ifdim\baselineskip>\z@ + \xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+\linewidth}% + \else + \xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+ + (\ifx\TY@final\@undefined\linewidth\else + \sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa + -\tw@\tabcolsep-\arrayrulewidth\relax}% + \fi + % we need to remove colour set-up also for last cell of the multi-column + \aftergroup\sphinx@hack@CT +}% +\newcommand*\sphinxcolwidth[2]{% + % this dimension will always be used for varwidth, and serves as maximum + % width when cells are merged either via multirow or multicolumn or both, + % as always their contents is wrapped in varwidth environment. + \ifnum#1>\@ne % multi-column (and possibly also multi-row) + % we wrote our own multicolumn code especially to handle that (and allow + % verbatim contents) + \ifx\equation$%$ + \tymax % first pass of tabulary (cf MEMO above regarding nesting) + \else % the \@gobble thing is for compatibility with standard \multicolumn + \sphinx@multiwidth\@gobble{#1/#2}% + \fi + \else % single column multirow + \ifx\TY@final\@undefined % not a tabulary. + \ifdim\baselineskip>\z@ + % in a p{..} type column, \linewidth is the target box width + \linewidth + \else + % l, c, r columns. Do our best. + \dimexpr(\linewidth-\arrayrulewidth)/#2- + \tw@\tabcolsep-\arrayrulewidth\relax + \fi + \else % in tabulary + \ifx\equation$%$% first pass + \tymax % it is set to a big value so that paragraphs can express themselves + \else + % second pass. + \ifdim\baselineskip>\z@ + \linewidth % in a L, R, C, J column or a p, \X, \Y ... + \else + % we have hacked \TY@final to put in \sphinx@TY@tablewidth the table width + \dimexpr(\sphinx@TY@tablewidth-\arrayrulewidth)/#2- + \tw@\tabcolsep-\arrayrulewidth\relax + \fi + \fi + \fi + \fi +}% +% fallback default in case user has set latex_use_latex_multicolumn to True: +% \sphinxcolwidth will use this only inside LaTeX's standard \multicolumn +\def\sphinx@multiwidth #1#2{\dimexpr % #1 to gobble the \@gobble (!) + (\ifx\TY@final\@undefined\linewidth\else\sphinx@TY@tablewidth\fi + -\arrayrulewidth)*#2-\tw@\tabcolsep-\arrayrulewidth\relax}% +% +% --- MULTIROW --- +% standard \multirow +% 1. does not allow verbatim contents, +% 2. does not allow blank lines in its argument, +% 3. its * specifier means to typeset "horizontally" which is very +% bad for paragraph content. 2016 version has = specifier but it +% must be used with p type columns only, else results are bad, +% 4. it requires manual intervention if the contents is too long to fit +% in the asked-for number of rows. +% 5. colour panels (either from \rowcolor or \columncolor) will hide +% the bottom part of multirow text, hence manual tuning is needed +% to put the multirow insertion at the _bottom_. +% +% The Sphinx solution consists in always having contents wrapped +% in a varwidth environment so that it makes sense to estimate how many +% lines it will occupy, and then ensure by insertion of suitable struts +% that the table rows have the needed height. The needed mark-up is done +% by LaTeX writer, which has its own id for the merged cells. +% +% The colour issue is solved by clearing colour panels in all cells, +% whether or not the multirow is single-column or multi-column. +% +% In passing we obtain baseline alignements across rows (only if +% \arraystretch is 1, as LaTeX's does not obey \arraystretch in "p" +% multi-line contents, only first and last line...) +% +% TODO: examine the situation with \arraystretch > 1. The \extrarowheight +% is hopeless for multirow anyhow, it makes baseline alignment strictly +% impossible. +\newcommand\sphinxmultirow[2]{\begingroup + % #1 = nb of spanned rows, #2 = Sphinx id of "cell", #3 = contents + % but let's fetch #3 in a way allowing verbatim contents ! + \def\sphinx@nbofrows{#1}\def\sphinx@cellid{#2}% + \afterassignment\sphinx@multirow\let\next= +}% +\def\sphinx@multirow {% + \setbox\z@\hbox\bgroup\aftergroup\sphinx@@multirow\strut +}% +\def\sphinx@@multirow {% + % The contents, which is a varwidth environment, has been captured in + % \box0 (a \hbox). + % We have with \sphinx@cellid an assigned unique id. The goal is to give + % about the same height to all the involved rows. + % For this Sphinx will insert a \sphinxtablestrut{cell_id} mark-up + % in LaTeX file and the expansion of the latter will do the suitable thing. + \dimen@\dp\z@ + \dimen\tw@\ht\@arstrutbox + \advance\dimen@\dimen\tw@ + \advance\dimen\tw@\dp\@arstrutbox + \count@=\dimen@ % type conversion dim -> int + \count\tw@=\dimen\tw@ + \divide\count@\count\tw@ % TeX division truncates + \advance\dimen@-\count@\dimen\tw@ + % 1300sp is about 0.02pt. For comparison a rule default width is 0.4pt. + % (note that if \count@ holds 0, surely \dimen@>1300sp) + \ifdim\dimen@>1300sp \advance\count@\@ne \fi + % now \count@ holds the count L of needed "lines" + % and \sphinx@nbofrows holds the number N of rows + % we have L >= 1 and N >= 1 + % if L is a multiple of N, ... clear what to do ! + % else write L = qN + r, 1 <= r < N and we will + % arrange for each row to have enough space for: + % q+1 "lines" in each of the first r rows + % q "lines" in each of the (N-r) bottom rows + % for a total of (q+1) * r + q * (N-r) = q * N + r = L + % It is possible that q == 0. + \count\tw@\count@ + % the TeX division truncates + \divide\count\tw@\sphinx@nbofrows\relax + \count4\count\tw@ % q + \multiply\count\tw@\sphinx@nbofrows\relax + \advance\count@-\count\tw@ % r + \expandafter\xdef\csname sphinx@tablestrut_\sphinx@cellid\endcsname + {\noexpand\sphinx@tablestrut{\the\count4}{\the\count@}{\sphinx@cellid}}% + \dp\z@\z@ + % this will use the real height if it is >\ht\@arstrutbox + \sphinxtablestrut{\sphinx@cellid}\box\z@ + \endgroup % group was opened in \sphinxmultirow +}% +\newcommand*\sphinxtablestrut[1]{% + % #1 is a "cell_id", i.e. the id of a merged group of table cells + \csname sphinx@tablestrut_#1\endcsname +}% +% LaTeX typesets the table row by row, hence each execution can do +% an update for the next row. +\newcommand*\sphinx@tablestrut[3]{\begingroup + % #1 = q, #2 = (initially) r, #3 = cell_id, q+1 lines in first r rows + % if #2 = 0, create space for max(q,1) table lines + % if #2 > 0, create space for q+1 lines and decrement #2 + \leavevmode + \count@#1\relax + \ifnum#2=\z@ + \ifnum\count@=\z@\count@\@ne\fi + \else + % next row will be with a #2 decremented by one + \expandafter\xdef\csname sphinx@tablestrut_#3\endcsname + {\noexpand\sphinx@tablestrut{#1}{\the\numexpr#2-\@ne}{#3}}% + \advance\count@\@ne + \fi + \vrule\@height\ht\@arstrutbox + \@depth\dimexpr\count@\ht\@arstrutbox+\count@\dp\@arstrutbox-\ht\@arstrutbox\relax + \@width\z@ + \endgroup + % we need this to avoid colour panels hiding bottom parts of multirow text + \sphinx@hack@CT +}% +\endinput +%% +%% End of file `sphinxmulticell.sty'. diff --git a/_build/pdf/book.pdf b/_build/pdf/book.pdf new file mode 100644 index 0000000..dd859f3 Binary files /dev/null and b/_build/pdf/book.pdf differ