From 8a8f9ca99db922072ac827de96d941cd88286ace Mon Sep 17 00:00:00 2001 From: Allen Downey Date: Mon, 14 Dec 2020 14:26:50 -0500 Subject: [PATCH] Update documentation --- 03_motion.html | 14 +- 04_select.html | 354 ++- 05_join.html | 254 ++- 06_photo.html | 966 +++++--- 07_plot.html | 12 +- AstronomicalData/01_query.html | 1403 ------------ AstronomicalData/02_coords.html | 1824 --------------- AstronomicalData/README.html | 337 --- .../vendor/lato_latin-ext/1.44.1/LICENSE.html | 260 --- .../vendor/open-sans_all/1.44.1/LICENSE.html | 260 --- .../_build/jupyter_execute/01_query.html | 1384 ------------ .../_build/jupyter_execute/02_coords.html | 1821 --------------- ...03_motion_98_0.png => 03_motion_103_0.png} | Bin ...{03_motion_28_0.png => 03_motion_29_0.png} | Bin _images/03_motion_45_0.png | Bin 115356 -> 0 bytes ...{03_motion_79_0.png => 03_motion_84_0.png} | Bin ...{03_motion_81_0.png => 03_motion_86_0.png} | Bin ...{03_motion_88_0.png => 03_motion_93_0.png} | Bin ...{04_select_11_0.png => 04_select_12_0.png} | Bin ...{04_select_13_0.png => 04_select_14_0.png} | Bin ...{04_select_25_0.png => 04_select_28_0.png} | Bin ...{04_select_51_0.png => 04_select_56_0.png} | Bin ...{04_select_57_0.png => 04_select_62_0.png} | Bin _images/{05_join_9_0.png => 05_join_10_0.png} | Bin _images/06_photo_114_0.png | Bin 0 -> 30562 bytes _images/06_photo_116_0.png | Bin 0 -> 9761 bytes .../{06_photo_12_0.png => 06_photo_14_0.png} | Bin _images/06_photo_23_0.png | Bin 24002 -> 0 bytes _images/06_photo_46_0.png | Bin 0 -> 25164 bytes _images/06_photo_61_0.png | Bin 31739 -> 28820 bytes _images/06_photo_63_0.png | Bin 9861 -> 0 bytes _images/06_photo_66_0.png | Bin 0 -> 23804 bytes _images/06_photo_72_0.png | Bin 0 -> 24324 bytes .../{07_plot_13_0.png => 07_plot_14_0.png} | Bin .../{07_plot_50_0.png => 07_plot_51_0.png} | Bin .../{07_plot_57_0.png => 07_plot_58_0.png} | Bin .../{07_plot_63_0.png => 07_plot_64_0.png} | Bin .../{07_plot_69_0.png => 07_plot_70_0.png} | Bin .../{07_plot_72_0.png => 07_plot_73_0.png} | Bin _sources/01_query.md | 1073 --------- _sources/02_coords.ipynb | 41 + _sources/03_motion.ipynb | 46 +- _sources/04_select.ipynb | 559 ++++- _sources/05_join.ipynb | 400 +++- _sources/06_photo.ipynb | 1855 ++++++++++------ _sources/07_plot.ipynb | 26 + _sources/AstronomicalData/01_query.ipynb | 1642 -------------- _sources/AstronomicalData/02_coords.ipynb | 1970 ----------------- _sources/AstronomicalData/README.md | 172 -- .../vendor/lato_latin-ext/1.44.1/LICENSE.md | 20 - .../vendor/open-sans_all/1.44.1/LICENSE.md | 20 - .../_build/jupyter_execute/01_query.ipynb | 1640 -------------- .../_build/jupyter_execute/02_coords.ipynb | 1966 ---------------- _sources/last_resort.ipynb | 13 +- _sources/test_setup.ipynb | 169 +- index.html | 4 +- last_resort.html | 14 +- pilot_day1.html | 4 +- pilot_day3.html | 4 +- run_on_colab_small.png | Bin 2937 -> 0 bytes searchindex.js | 2 +- test_setup.html | 127 +- 62 files changed, 3477 insertions(+), 17179 deletions(-) delete mode 100644 AstronomicalData/01_query.html delete mode 100644 AstronomicalData/02_coords.html delete mode 100644 AstronomicalData/README.html delete mode 100644 AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html delete mode 100644 AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html delete mode 100644 AstronomicalData/_build/jupyter_execute/01_query.html delete mode 100644 AstronomicalData/_build/jupyter_execute/02_coords.html rename _images/{03_motion_98_0.png => 03_motion_103_0.png} (100%) rename _images/{03_motion_28_0.png => 03_motion_29_0.png} (100%) delete mode 100644 _images/03_motion_45_0.png rename _images/{03_motion_79_0.png => 03_motion_84_0.png} (100%) rename _images/{03_motion_81_0.png => 03_motion_86_0.png} (100%) rename _images/{03_motion_88_0.png => 03_motion_93_0.png} (100%) rename _images/{04_select_11_0.png => 04_select_12_0.png} (100%) rename _images/{04_select_13_0.png => 04_select_14_0.png} (100%) rename _images/{04_select_25_0.png => 04_select_28_0.png} (100%) rename _images/{04_select_51_0.png => 04_select_56_0.png} (100%) rename _images/{04_select_57_0.png => 04_select_62_0.png} (100%) rename _images/{05_join_9_0.png => 05_join_10_0.png} (100%) create mode 100644 _images/06_photo_114_0.png create mode 100644 _images/06_photo_116_0.png rename _images/{06_photo_12_0.png => 06_photo_14_0.png} (100%) delete mode 100644 _images/06_photo_23_0.png create mode 100644 _images/06_photo_46_0.png delete mode 100644 _images/06_photo_63_0.png create mode 100644 _images/06_photo_66_0.png create mode 100644 _images/06_photo_72_0.png rename _images/{07_plot_13_0.png => 07_plot_14_0.png} (100%) rename _images/{07_plot_50_0.png => 07_plot_51_0.png} (100%) rename _images/{07_plot_57_0.png => 07_plot_58_0.png} (100%) rename _images/{07_plot_63_0.png => 07_plot_64_0.png} (100%) rename _images/{07_plot_69_0.png => 07_plot_70_0.png} (100%) rename _images/{07_plot_72_0.png => 07_plot_73_0.png} (100%) delete mode 100644 _sources/01_query.md delete mode 100644 _sources/AstronomicalData/01_query.ipynb delete mode 100644 _sources/AstronomicalData/02_coords.ipynb delete mode 100644 _sources/AstronomicalData/README.md delete mode 100644 _sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md delete mode 100644 _sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md delete mode 100644 _sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb delete mode 100644 _sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb delete mode 100644 run_on_colab_small.png diff --git a/03_motion.html b/03_motion.html index 0679509..2760a35 100644 --- a/03_motion.html +++ b/03_motion.html @@ -576,7 +576,7 @@ radial_velocity float64 km / s
-_images/03_motion_28_0.png +_images/03_motion_29_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).

@@ -696,7 +696,7 @@ which is an “interface for celestial coordinate representation, manipulation,
-_images/03_motion_45_0.png +_images/03_motion_46_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.

@@ -885,7 +885,7 @@ which is an “interface for celestial coordinate representation, manipulation,

Exploring data

-

One benefit of using Pandas is that it provides function for exploring the data and checking for problems.

+

One benefit of using Pandas is that it provides functions for exploring the data and checking for problems.

One of the most useful of these functions is describe, which computes summary statistics for each column.

@@ -1222,7 +1222,7 @@ Name: phi2, dtype: bool
-_images/03_motion_83_0.png +_images/03_motion_84_0.png

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

@@ -1243,7 +1243,7 @@ Name: phi2, dtype: bool
-_images/03_motion_85_0.png +_images/03_motion_86_0.png

Now we can see the smaller cluster more clearly.

@@ -1291,7 +1291,7 @@ Name: phi2, dtype: bool
-_images/03_motion_92_0.png +_images/03_motion_93_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.

@@ -1361,7 +1361,7 @@ Name: phi2, dtype: bool
-_images/03_motion_102_0.png +_images/03_motion_103_0.png

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

diff --git a/04_select.html b/04_select.html index 7f8880b..6c39e29 100644 --- a/04_select.html +++ b/04_select.html @@ -254,14 +254,26 @@
  • - - Selecting the region + + Convex Hull
  • - - Assemble the query + + Assembling the query +
  • @@ -317,8 +329,10 @@

    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.

    • +
    • Transform proper motions from one frame to another.

    • +
    • Compute the convex hull of a set of points.

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

    • +
    • Save data in CSV format.

    @@ -352,6 +366,13 @@

    Selection by proper motion

    +

    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 the coordinates to the GD1Koposov10 frame 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. +

    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.

    @@ -405,7 +426,7 @@
    -_images/04_select_11_0.png +_images/04_select_12_0.png

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

    @@ -428,14 +449,16 @@
    -_images/04_select_13_0.png +_images/04_select_14_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.

    +

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

    + +
    +

    Convex Hull

    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.

    +

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

    import numpy as np
    @@ -467,7 +490,7 @@ and use the polygon as a selection criterion in an ADQL query.

    -
    <scipy.spatial.qhull.ConvexHull at 0x7f8dec2b8c10>
    +
    <scipy.spatial.qhull.ConvexHull at 0x7f0d570cd700>
     
    @@ -523,6 +546,7 @@ and use the polygon as a selection criterion in an ADQL query.

    +

    This use of transpose is a bit of a NumPy trick. Because pm_vertices has two columns, its transpose has two rows, which are assigned to the two variables pmra_poly and pmdec_poly.

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

    @@ -545,9 +569,34 @@ and use the polygon as a selection criterion in an ADQL query.

    -_images/04_select_25_0.png +_images/04_select_28_0.png
    +

    So pm_vertices represents the polygon we want to select. +The next step is to use it as part of an ADQL query.

    +
    +
    +

    Assembling 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}))
    +"""
    +
    +
    +
    +
    +

    And here are the changes we’ll make in this lesson:

    +
      +
    1. We will add another clause to select stars whose proper motion is in the polygon we just computed, pm_vertices.

    2. +
    3. We will select stars with coordinates in a larger region.

    4. +

    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.

    @@ -608,27 +657,8 @@ and use the polygon as a selection criterion in an ADQL query.

    - -
    -

    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.

    +

    We’ll add this string to the query soon, but first let’s compute the other polygon, the one that specifies the region of the sky we want.

    +

    Here are the coordinates of the rectangle we’ll select, in the GD-1 frame.

    phi1_min = -70
    @@ -658,6 +688,11 @@ and use the polygon as a selection criterion in an ADQL query.

    +
    +
    WARNING: AstropyDeprecationWarning: Transforming a frame instance to a frame class (as opposed to another frame instance) will not be supported in the future.  Either explicitly instantiate the target frame, or first convert the source frame instance to a `astropy.coordinates.SkyCoord` and use its `transform_to()` method. [astropy.coordinates.baseframe]
    +
    +
    +

    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.

    @@ -678,11 +713,8 @@ and use the polygon as a selection criterion in an ADQL query.

    -

    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.

    +

    Now we have everything we need to assemble the query. +Here’s the base query from the previous lesson again:

    query_base = """SELECT 
    @@ -697,7 +729,9 @@ and use the polygon as a selection criterion in an ADQL query.

    -

    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.

    +
    +

    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
    @@ -719,12 +753,15 @@ and use the polygon as a selection criterion in an ADQL query.

    Here again are the columns we want to select.

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

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

    +
    +
    +

    Exercise

    +

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

    # Solution
    @@ -738,7 +775,7 @@ and use the polygon as a selection criterion in an ADQL query.

    SELECT 
    -source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity
    +source_id, ra, dec, pmra, pmdec, parallax, radial_velocity
     FROM gaiadr2.gaia_source
     WHERE parallax < 1
       AND bp_rp BETWEEN -0.75 AND 2 
    @@ -750,7 +787,7 @@ WHERE parallax < 1
     
    -

    Here’s how we run it.

    +

    Now we can run the query like this:

    from astroquery.gaia import Gaia
    @@ -771,24 +808,22 @@ Created TAP+ (v1.2.1) - Connection:
     	Use HTTPS: True
     	Port: 443
     	SSL Port: 443
    -
    -
    -
    ---------------------------------------------------------------------------
    -HTTPError                                 Traceback (most recent call last)
    -<ipython-input-24-05c718e32682> in <module>
    -      1 from astroquery.gaia import Gaia
    -      2 
    -----> 3 job = Gaia.launch_job_async(query)
    -      4 print(job)
    -
    -~/anaconda3/envs/AstronomicalData/lib/python3.8/site-packages/astroquery/utils/tap/core.py in launch_job_async(self, query, name, output_file, output_format, verbose, dump_to_file, background, upload_resource, upload_table_name, autorun)
    -    422                 self.__connHandler.dump_to_file(suitableOutputFile,
    -    423                                                 response)
    ---> 424             raise requests.exceptions.HTTPError(response.reason)
    -    425         else:
    -    426             location = self.__connHandler.find_header(
    -
    -HTTPError: OK
    +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
    +radial_velocity float64   km / s                                                    Radial velocity  7295
    +Jobid: 1607614394159O
    +Phase: COMPLETED
    +Owner: None
    +Output file: async_20201210103314.vot
    +Results: None
     
    @@ -801,6 +836,12 @@ Created TAP+ (v1.2.1) - Connection:
    +
    +
    7346
    +
    +
    +
    +
    @@ -817,6 +858,9 @@ Created TAP+ (v1.2.1) - Connection:
    +
    +_images/04_select_56_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:

    @@ -830,10 +874,10 @@ Created TAP+ (v1.2.1) - Connection: returns: Pandas DataFrame """ skycoord = coord.SkyCoord( - ra=results['ra'], - dec=results['dec'], - pm_ra_cosdec=results['pmra'], - pm_dec=results['pmdec'], + ra=table['ra'], + dec=table['dec'], + pm_ra_cosdec=table['pmra'], + pm_dec=table['pmdec'], distance=8*u.kpc, radial_velocity=0*u.km/u.s) @@ -871,6 +915,9 @@ Created TAP+ (v1.2.1) - Connection: +
    +_images/04_select_62_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:

    @@ -899,6 +946,11 @@ Created TAP+ (v1.2.1) - Connection: +
    +
    -rw-rw-r-- 1 downey downey 698K Dec 10 19:18 gd1_candidates.hdf5
    +
    +
    +

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

    !dir gd1_candidates.hdf5
    @@ -927,6 +979,11 @@ Created TAP+ (v1.2.1) - Connection:
     
    +
    +
    -rw-rw-r-- 1 downey downey 1.4M Dec 10 19:19 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:

    @@ -936,6 +993,13 @@ Created TAP+ (v1.2.1) - Connection: +
    +
    ,source_id,ra,dec,pmra,pmdec,parallax,radial_velocity,phi1,phi2,pm_phi1,pm_phi2
    +0,635559124339440000,137.58671691646745,19.1965441084838,-3.770521900009566,-12.490481778113859,0.7913934419894347,,-59.63048941944402,-1.2164852515042963,-7.361362712597496,-0.592632882064492
    +1,635860218726658176,138.5187065217173,19.09233926905897,-5.941679495793577,-11.346409129876392,0.30745551377348623,,-59.247329893833296,-2.016078400820631,-7.527126084640531,1.7487794924176672
    +
    +
    +

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

    We can read the CSV file back like this:

    @@ -953,6 +1017,84 @@ Created TAP+ (v1.2.1) - Connection: +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    source_idradecpmrapmdecparallaxradial_velocityphi1phi2pm_phi1pm_phi2
    0635559124339440000137.58671719.196544-3.770522-12.4904820.791393NaN-59.630489-1.216485-7.361363-0.592633
    1635860218726658176138.51870719.092339-5.941679-11.3464090.307456NaN-59.247330-2.016078-7.5271261.748779
    2635674126383965568138.84287419.031798-3.897001-12.7027800.779463NaN-59.133391-2.306901-7.560608-0.741800
    +
    @@ -960,6 +1102,88 @@ Created TAP+ (v1.2.1) - Connection:
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Unnamed: 0source_idradecpmrapmdecparallaxradial_velocityphi1phi2pm_phi1pm_phi2
    00635559124339440000137.58671719.196544-3.770522-12.4904820.791393NaN-59.630489-1.216485-7.361363-0.592633
    11635860218726658176138.51870719.092339-5.941679-11.3464090.307456NaN-59.247330-2.016078-7.5271261.748779
    22635674126383965568138.84287419.031798-3.897001-12.7027800.779463NaN-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.

    diff --git a/05_join.html b/05_join.html index fd56189..656cb38 100644 --- a/05_join.html +++ b/05_join.html @@ -262,6 +262,13 @@ Preparing a table for uploading +
  • @@ -277,6 +284,23 @@ Getting the photometry data +
  • @@ -308,9 +332,9 @@

    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:

    +

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

    https://github.com/datacarpentry/astronomy-python/raw/gh-pages/fig/gd1-3.png -

    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.

    +

    In red is a stellar 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

    @@ -369,7 +393,7 @@
    -_images/05_join_9_0.png +_images/05_join_10_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.

    @@ -450,7 +474,7 @@ We could write the entire table to a file, but that would take longer to transmi
    <?xml version="1.0" encoding="utf-8"?>
    -<!-- Produced with astropy.io.votable version 4.0.2
    +<!-- Produced with astropy.io.votable version 4.2
          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">
    @@ -475,7 +499,7 @@ The size of the file is about 750 KB, so that’s not too bad.

    -
    -rw-rw-r-- 1 downey downey 396K Nov 18 19:21 candidate_df.xml
    +
    -rw-rw-r-- 1 downey downey 396K Dec 10 11:33 candidate_df.xml
     
    @@ -484,7 +508,9 @@ The size of the file is about 750 KB, so that’s not too bad.

    !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?

    +
    +

    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.

    @@ -514,12 +540,15 @@ The size of the file is about 750 KB, so that’s not too bad.

    -
    # writeto(column, 'candidate_df.xml')
    +
    # This line is commented out because it would cause an error
    +
    +# 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.

    @@ -575,7 +604,7 @@ INFO: Query finished. [astroquery.utils.tap.core]
    Table length=7346 - +
    @@ -637,7 +666,7 @@ INFO: Query finished. [astroquery.utils.tap.core]
    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
    +  ON best.source_id = candidate_df.source_id
     """
     
    @@ -676,7 +705,7 @@ INFO: Query finished. [astroquery.utils.tap.core]
    Table length=3724 -
    source_id
    int64
    635559124339440000
    +
    @@ -723,7 +752,7 @@ INFO: Query finished. [astroquery.utils.tap.core]

    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.

    +

    The length of results1 is about 3000, which means we were not able to find matches for all stars in the list of candidates.

    len(results1)
    @@ -737,42 +766,92 @@ INFO: Query finished. [astroquery.utils.tap.core]
     

    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.

    +
    +
    +
    results1['best_neighbour_multiplicity']
    +
    +
    +
    +
    +
    <MaskedColumn name='best_neighbour_multiplicity' dtype='int16' description='Number of neighbours with same probability as best neighbour' length=3724> +
    source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2
    arcsec
    int64int64float64int32int16int16int16int64
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    ...
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    +
    +

    It looks like most of the values are 1, which is good; that means that for each candidate star we have identified exactly one source in Pan-STARRS that is likely to be the same star.

    +

    To check whether there are any values other than 1, we can convert this column to a Pandas Series and use describe, which we saw in in Lesson 3.

    import pandas as pd
     
    -nn = pd.Series(results1['best_neighbour_multiplicity'])
    -nn.value_counts()
    +multiplicity = pd.Series(results1['best_neighbour_multiplicity'])
    +multiplicity.describe()
     
    -
    1    3724
    -dtype: int64
    +
    count    3724.0
    +mean        1.0
    +std         0.0
    +min         1.0
    +25%         1.0
    +50%         1.0
    +75%         1.0
    +max         1.0
    +dtype: float64
     
    -

    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 fact, 1 is the only value in the Series, so every candidate star has a single best 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()
    +
    mates = pd.Series(results1['number_of_mates'])
    +mates.describe()
     
    -
    0    3724
    -dtype: int64
    +
    count    3724.0
    +mean        0.0
    +std         0.0
    +min         0.0
    +25%         0.0
    +50%         0.0
    +75%         0.0
    +max         0.0
    +dtype: float64
     
    -

    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.

    +

    All values in this column are 0, which means that for each match we found in Pan-STARRS, there are no other stars in Gaia that also match.

    +

    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 criteria to choose the most likely match.

    Getting the photometry data

    @@ -785,7 +864,9 @@ dtype: int64
  • 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.

    +
    +

    Exercise

    +

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

    # Solution
    @@ -805,7 +886,7 @@ dtype: int64
     
    <?xml version="1.0" encoding="utf-8"?>
    -<!-- Produced with astropy.io.votable version 4.0.2
    +<!-- Produced with astropy.io.votable version 4.2
          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">
    @@ -818,7 +899,10 @@ dtype: int64
     
    -

    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.

    +
    +
    +

    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:

      @@ -837,67 +921,39 @@ dtype: int64
      # Solution
       
      +# First test
      +
       query2 = """SELECT *
       FROM tap_upload.external as external
       """
      -
      -
      -
      -
    -
    -
    -
    # Solution
    +
    +# Second test
     
     query2 = """SELECT TOP 10 *
     FROM gaiadr2.panstarrs1_original_valid
     """
    -
    -
    -
    -
    -
    -
    -
    # Solution
    +
    +# Third test
     
     query2 = """SELECT *
     FROM gaiadr2.panstarrs1_original_valid as ps
     JOIN tap_upload.external as external
    -ON ps.obj_id = external.original_ext_source_id
    +  ON ps.obj_id = external.original_ext_source_id
     """
    -
    -
    -
    -
    -
    -
    -
    # Solution
    +
    +# Complete query
     
     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
    +  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
    -
    -
    -
    -
    +

    Here’s how we launch the job and get the results.

    job2 = Gaia.launch_job_async(query=query2, 
    @@ -921,7 +977,7 @@ ON ps.obj_id = external.original_ext_source_id
     
    Table length=3724 - +
    @@ -947,9 +1003,65 @@ ON ps.obj_id = external.original_ext_source_id
    source_idg_mean_psf_magi_mean_psf_mag
    mag
    int64float64float64
    61225641850042316820.871599197387719.9612007141113
    -

    Challenge exercise

    -

    Do both joins in one query.

    +
    +
    +

    Exercise

    +

    Optional Challenge: Do both joins in one query.

    There’s an example here you could start with.

    +
    +
    +
    # Solution
    +
    +query3 = """SELECT
    +candidate_df.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag
    +FROM tap_upload.candidate_df as candidate_df
    +JOIN gaiadr2.panstarrs1_best_neighbour as best
    +  ON best.source_id = candidate_df.source_id
    +JOIN gaiadr2.panstarrs1_original_valid as ps
    +  ON ps.obj_id = best.original_ext_source_id
    +"""
    +
    +job3 = Gaia.launch_job_async(query=query3, 
    +                       upload_resource='candidate_df.xml', 
    +                       upload_table_name='candidate_df')
    +
    +results3 = job3.get_results()
    +results3
    +
    +
    +
    +
    +
    INFO: Query finished. [astroquery.utils.tap.core]
    +
    +
    +
    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
    +
    +

    Write the data

    @@ -970,7 +1082,7 @@ ON ps.obj_id = external.original_ext_source_id
    -
    -rw-rw-r-- 1 downey downey 96K Nov 18 19:22 gd1_photo.fits
    +
    -rw-rw-r-- 1 downey downey 96K Dec 10 11:34 gd1_photo.fits
     
    diff --git a/06_photo.html b/06_photo.html index 07dfa32..a583055 100644 --- a/06_photo.html +++ b/06_photo.html @@ -259,8 +259,8 @@
  • - - Drawing a polygon + + Making a polygon
  • @@ -324,16 +324,17 @@

    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:

    +

    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 showing the stars we previously selected based on proper motion:

    https://github.com/datacarpentry/astronomy-python/raw/gh-pages/fig/gd1-3.png

    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.

    +

    By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from mostly 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. We’ll use an isochrone computed by MIST to specify a polygonal region in the color-magnitude diagram and select the stars inside it.

    6. 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

    @@ -379,6 +380,8 @@

    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.

    +

    The following function takes a table containing photometry data and draws a color-magnitude diagram. +The input can be an Astropy Table or Pandas DataFrame, as long as it has columns named g_mean_psf_mag and i_mean_psf_mag.

    import matplotlib.pyplot as plt
    @@ -422,52 +425,40 @@
     
    -_images/06_photo_12_0.png +_images/06_photo_14_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.

    +

    In the next section we’ll use an isochrone to specify a polygon that contains this overdense regioin.

    Isochrone

    -

    http://waps.cfa.harvard.edu/MIST/interp_isos.html

    -

    MIST Version 1.2

    -

    Rotation initial v/v_crit = 0.4

    -

    Single age, log10 scale = 10.079

    -

    Composition [Fe/H] = -1.35

    -

    Synthetic Photometry, PanStarrs

    -

    Extinction av = 0

    +

    Based on our best estimates for the ages of the stars in GD-1 and their metallicity, we can compute a stellar isochrone that predicts the relationship between their magnitude and color.

    +

    In fact, we can use MESA Isochrones & Stellar Tracks (MIST) to compute it for us.

    +

    Using the MIST Version 1.2 web interface, we computed an isochrone with the following parameters:

    +
      +
    • Rotation initial v/v_crit = 0.4

    • +
    • Single age, linear scale = 12e9

    • +
    • Composition [Fe/H] = -1.35

    • +
    • Synthetic Photometry, PanStarrs

    • +
    • Extinction av = 0

    • +
    +

    The following cell downloads the results:

    -
    import numpy as np
    +
    import os
    +from wget import download
     
    -log_age = np.log10(12e9)
    -log_age
    -
    -
    -
    -
    -
    10.079181246047625
    -
    -
    -
    -
    -
    -
    -
    import numpy as np
    +filename = 'MIST_iso_5fd2532653c27.iso.cmd'
    +filepath = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
     
    -log_age = np.log10(15e9)
    -log_age
    -
    -
    -
    -
    -
    10.176091259055681
    +if not os.path.exists(filename):
    +    print(download(filepath+filename))
     
    +

    To read this file we’ll download a Python module from this repository.

    import os
    @@ -482,21 +473,23 @@
     
    +

    Now we can read the file:

    import read_mist_models
     
    -filename = 'mist_iso_12.0_-1.35.cmd'
    +filename = 'MIST_iso_5fd2532653c27.iso.cmd'
     iso = read_mist_models.ISOCMD(filename)
     
    -
    Reading in: mist_iso_12.0_-1.35.cmd
    +
    Reading in: MIST_iso_5fd2532653c27.iso.cmd
     
    +

    The result is an ISOCMD object.

    type(iso)
    @@ -509,6 +502,7 @@
     
    +

    It contains a list of arrays, one for each isochrone.

    type(iso.isocmds)
    @@ -521,6 +515,7 @@
     
    +

    We only got one isochrone.

    len(iso.isocmds)
    @@ -533,9 +528,18 @@
     
    +

    So we can select it like this:

    -
    type(iso.isocmds[0])
    +
    iso_array = iso.isocmds[0]
    +
    +
    +
    +
    +

    It’s a NumPy array:

    +
    +
    +
    type(iso_array)
     
    @@ -545,75 +549,70 @@
    +

    But it’s an unusual NumPy array, because it contains names for the columns.

    -
    iso.isocmds[0].dtype
    +
    iso_array.dtype
     
    -
    dtype([('EEP', '<i4'), ('log10_isochrone_age_yr', '<f8'), ('initial_mass', '<f8'), ('star_mass', '<f8'), ('log_Teff', '<f8'), ('log_g', '<f8'), ('log_L', '<f8'), ('[Fe/H]_init', '<f8'), ('[Fe/H]', '<f8'), ('PS_g', '<f8'), ('PS_r', '<f8'), ('PS_i', '<f8'), ('PS_z', '<f8'), ('PS_y', '<f8'), ('PS_w', '<f8'), ('PS_open', '<f8'), ('phase', '<f8')])
    +
    dtype([('EEP', '<i4'), ('isochrone_age_yr', '<f8'), ('initial_mass', '<f8'), ('star_mass', '<f8'), ('log_Teff', '<f8'), ('log_g', '<f8'), ('log_L', '<f8'), ('[Fe/H]_init', '<f8'), ('[Fe/H]', '<f8'), ('PS_g', '<f8'), ('PS_r', '<f8'), ('PS_i', '<f8'), ('PS_z', '<f8'), ('PS_y', '<f8'), ('PS_w', '<f8'), ('PS_open', '<f8'), ('phase', '<f8')])
    +
    +
    +
    +
    +

    Which means we can select columns using the bracket operator:

    +
    +
    +
    iso_array['phase']
    +
    +
    +
    +
    +
    array([0., 0., 0., ..., 6., 6., 6.])
    +
    +
    +
    +
    +

    We can use phase to select the part of the isochrone for stars in the main sequence and red giant phases.

    +
    +
    +
    phase_mask = (iso_array['phase'] >= 0) & (iso_array['phase'] < 3)
    +phase_mask.sum()
    +
    +
    +
    +
    +
    354
     
    -
    from astropy.table import Table 
    -
    -iso_table = Table(iso.isocmds[0])
    -iso_table[:5]
    +
    main_sequence = iso_array[phase_mask]
    +len(main_sequence)
     
    -
    Table length=5 - - - - - - - - -
    EEPlog10_isochrone_age_yrinitial_massstar_masslog_Tefflog_glog_L[Fe/H]_init[Fe/H]PS_gPS_rPS_iPS_zPS_yPS_wPS_openphase
    int32float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64
    25110.0790.105870850108208960.105869705589364823.54036068292639565.321292252841703-2.7463861921790302-1.35-1.30902413.83327812.39528311.63853511.28630911.09987712.30464511.9700720.0
    25210.0790.108809974798175170.108808758217223443.54258290625209735.312318300317242-2.7181724188486394-1.35-1.30888713.72806512.30235811.56230511.21656411.03057212.22069511.8916950.0
    25310.0790.112652468448451230.112651153162689773.54551901495962075.300571015130943-2.6811483213239216-1.35-1.308713.59011312.18069911.46111311.12465910.93905112.11006911.7887120.0
    25410.0790.116427328711895660.116425909285919643.54840384284145665.288998772212527-2.644742589781073-1.35-1.30852713.45454412.06139811.36112811.03319410.84876912.00072911.6869940.0
    25510.0790.120222397889611750.120220866480104383.5513078778592485.277331450307816-2.608093791390564-1.35-1.30828513.3183711.9418211.26008710.94010610.75770811.8903111.5842020.0
    -
    -
    -
    -
    iso_table.colnames
    -
    -
    -
    -
    -
    ['EEP',
    - 'log10_isochrone_age_yr',
    - 'initial_mass',
    - 'star_mass',
    - 'log_Teff',
    - 'log_g',
    - 'log_L',
    - '[Fe/H]_init',
    - '[Fe/H]',
    - 'PS_g',
    - 'PS_r',
    - 'PS_i',
    - 'PS_z',
    - 'PS_y',
    - 'PS_w',
    - 'PS_open',
    - 'phase']
    +
    354
     
    +

    The other two columns we’ll use are PS_g and PS_i, which contain simulated photometry data for stars with the given age and metallicity, based on a model of the Pan-STARRS sensors.

    +

    We’ll use these columns to superimpose the isochrone on the color-magnitude diagram, but first we have to use a distance modulus to scale the isochrone based on the estimated distance of GD-1.

    +

    We can use the Distance object from Astropy to compute the distance modulus.

    import astropy.coordinates as coord
     import astropy.units as u
     
     distance = 7.8 * u.kpc
    -dm = coord.Distance(distance).distmod.value
    -dm
    +distmod = coord.Distance(distance).distmod.value
    +distmod
     
    @@ -623,254 +622,609 @@
    +

    Now we can compute the scaled magnitude and color of the isochrone.

    -
    g = iso_table['PS_g'] + dm
    -gi = iso_table['PS_g'] - iso_table['PS_i']
    +
    g = main_sequence['PS_g'] + distmod
    +gi = main_sequence['PS_g'] - main_sequence['PS_i']
     
    +

    To make this data easier to work with, we’ll put it in a Pandas Series with that contains gi as the index and g as the values.

    -
    import matplotlib.pyplot as plt
    +
    import pandas as pd
     
    -plot_cmd(photo_table)
    -plt.plot(gi, g)
    +iso_series = pd.Series(g, index=gi)
    +iso_series.head()
     
    -
    [<matplotlib.lines.Line2D at 0x7efd97389fd0>]
    -
    -
    -_images/06_photo_28_1.png -
    -
    -
    -
    -
    def read_and_clean_cmd(filename, distance):
    -    iso = read_mist_models.ISOCMD(filename)
    -    iso_table = Table(iso.isocmds[0])
    -
    -    phase_mask = (iso_table['phase'] >= 0) & (iso_table['phase'] < 3)
    -    table = iso_table[phase_mask]
    -    
    -    dm = coord.Distance(distance).distmod.value
    -    g = iso_table['PS_g'] + dm
    -    gi = iso_table['PS_g'] - iso_table['PS_i']
    -    
    -    return gi, g
    +
    2.195021    28.294743
    +2.166076    28.189718
    +2.129312    28.051761
    +2.093721    27.916194
    +2.058585    27.780024
    +dtype: float64
     
    -
    -
    -
    filename = 'mist_iso_12.0_-1.35.cmd'
    -
    -gi1, g1 = read_and_clean_cmd(filename, distance)
    -
    -
    -
    -
    -
    Reading in: mist_iso_12.0_-1.35.cmd
    -
    -
    -
    -
    -
    -
    -
    filename = 'mist_iso_15.0_-1.35.cmd'
    -
    -gi2, g2 = read_and_clean_cmd(filename, distance)
    -
    -
    -
    -
    -
    Reading in: mist_iso_15.0_-1.35.cmd
    -
    -
    -
    -
    -
    -
    -
    import matplotlib.pyplot as plt
    -
    -plot_cmd(photo_table)
    -plt.plot(gi1, g1)
    -plt.plot(gi2, g2)
    -
    -
    -
    -
    -
    [<matplotlib.lines.Line2D at 0x7efd9703c550>]
    -
    -
    -_images/06_photo_32_1.png -
    -
    -
    -
    -
    left_gi = gi - 0.5*(g/28)**5
    -right_gi = gi + 0.55*(g/28)**5
    -
    -
    -
    -
    -
    -
    -
    import matplotlib.pyplot as plt
    -
    -plot_cmd(photo_table)
    -plt.plot(gi1, g1)
    -plt.plot(gi2, g2)
    -
    -
    -
    -
    -
    [<matplotlib.lines.Line2D at 0x7efd97a51b80>]
    -
    -
    -_images/06_photo_34_1.png -
    -
    -
    -
    -
    # TODO
    -# ind = (poly[:,1]<21.) & (poly[:,1]>17.8)
    -
    -
    -
    -
    -
    -
    -

    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
    -
    -coords = None
    -
    -if not IN_COLAB:
    -    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.2643369175627239, 17.84253127299485),
    - (0.3539426523297491, 18.799116997792495),
    - (0.47491039426523296, 19.682119205298015),
    - (0.6317204301075269, 20.454746136865342),
    - (0.7661290322580645, 20.785871964679913),
    - (0.8064516129032258, 21.41133186166299),
    - (0.5869175627240143, 21.300956585724798),
    - (0.39426523297491034, 20.565121412803535),
    - (0.22401433691756267, 19.240618101545255),
    - (0.19713261648745517, 18.02649006622517)]
    -
    -
    -
    -
    -

    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.26433692, 0.35394265, 0.47491039, 0.63172043, 0.76612903,
    -        0.80645161, 0.58691756, 0.39426523, 0.22401434, 0.19713262]),
    - array([17.84253127, 18.799117  , 19.68211921, 20.45474614, 20.78587196,
    -        21.41133186, 21.30095659, 20.56512141, 19.2406181 , 18.02649007]))
    -
    -
    -
    -
    -

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

    +

    Now we can plot it on the color-magnitude diagram like this.

    plot_cmd(photo_table)
    -plt.plot(xs, ys);
    +iso_series.plot();
     
    -_images/06_photo_45_0.png +_images/06_photo_46_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.

    +

    The theoretical isochrone passes through the overdense region where we expect to find stars in GD-1.

    +

    Let’s save this result so we can reload it later without repeating the steps in this section.

    +
    +
    +
    filename = 'gd1_isochrone.hdf5'
    +
    +iso_series.to_hdf(filename, 'iso_series')
    +
    +
    +
    +
    +
    +
    +

    Making a polygon

    +

    The following cell downloads the isochrone series we made in the previous section, if necessary.

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

    Now we can read the isochrone back in.

    +
    +
    +
    iso_series = pd.read_hdf(filename, 'iso_series')
    +iso_series.head()
    +
    +
    +
    +
    +
    2.195021    28.294743
    +2.166076    28.189718
    +2.129312    28.051761
    +2.093721    27.916194
    +2.058585    27.780024
    +dtype: float64
    +
    +
    +
    +
    +

    To select the stars in the overdense region of the color-magnitude diagram, we want to stretch the isochrone into a polygon.

    +

    We’ll use the following formulas to compute the left and right sides of the polygons.

    +
    +
    +
    g = iso_series.to_numpy()
    +gi = iso_series.index
    +
    +
    +
    +
    +
    +
    +
    left_gi = gi - 0.4 * (g/28)**5
    +right_gi = gi + 0.7 * (g/28)**5
    +
    +
    +
    +
    +

    To explain the terms:

    +
      +
    • We divide magnitudes by 28 to normalize them onto the range from 0 to 1.

    • +
    • Raising the normalized magnitudes to the 5th power [DOES WHAT?]

    • +
    • Then we add and subtract the result from gi to shift the isochrone left and right. The factors 0.4 and 0.7 were chosen by eye to enclose the overdense region.

    • +
    +

    To make the shifted isochrones easier to work with, we’ll put them in a Pandas Series with that contains both g and the scaled values of gi.

    +
    +
    +
    import pandas as pd
    +
    +left_series = pd.Series(g, index=left_gi)
    +left_series.head()
    +
    +
    +
    +
    +
    1.773520    28.294743
    +1.752340    28.189718
    +1.725601    28.051761
    +1.699671    27.916194
    +1.674053    27.780024
    +dtype: float64
    +
    +
    +
    +
    +
    +
    +
    right_series = pd.Series(g, index=right_gi)
    +right_series.head()
    +
    +
    +
    +
    +
    2.932648    28.294743
    +2.890114    28.189718
    +2.835806    28.051761
    +2.783308    27.916194
    +2.731517    27.780024
    +dtype: float64
    +
    +
    +
    +
    +

    Now we can plot them on the color-magnitude diagram like this.

    +
    +
    +
    plot_cmd(photo_table)
    +left_series.plot()
    +right_series.plot();
    +
    +
    +
    +
    +_images/06_photo_61_0.png +
    +
    +

    It looks like the scaled isochrones bound the overdense area well, but they also include stars with magnitudes higher than we expect for stars in GD-1, so we’ll use another mask to limit the range of g.

    +
    +
    +
    g_mask = (g > 18.0) & (g < 21.5)
    +g_mask.sum()
    +
    +
    +
    +
    +
    117
    +
    +
    +
    +
    +
    +
    +
    left = left_series[g_mask]
    +right = right_series[g_mask]
    +
    +len(left), len(right)
    +
    +
    +
    +
    +
    (117, 117)
    +
    +
    +
    +
    +

    Here’s what they look like:

    +
    +
    +
    plot_cmd(photo_table)
    +left.plot()
    +right.plot();
    +
    +
    +
    +
    +_images/06_photo_66_0.png +
    +
    +

    Now we want to assemble the two halves into a polygon. We can use append to make a new Series that contains both halves.

    +

    And we’ll use the slice [::-1] to reverse the elements of right so the result forms a loop. See here for an explanation of this idiom.

    +
    +
    +
    loop = left.append(right[::-1])
    +loop.head()
    +
    +
    +
    +
    +
    0.587571    21.411746
    +0.567801    21.322466
    +0.548134    21.233380
    +0.528693    21.144427
    +0.509300    21.054549
    +dtype: float64
    +
    +
    +
    +
    +

    The following lines add metadata by assigning names to the values and the index in loop.

    +
    +
    +
    loop.name = 'g'
    +loop.index.name = 'gi'
    +loop.head()
    +
    +
    +
    +
    +
    gi
    +0.587571    21.411746
    +0.567801    21.322466
    +0.548134    21.233380
    +0.528693    21.144427
    +0.509300    21.054549
    +Name: g, dtype: float64
    +
    +
    +
    +
    +

    And here’s what it looks like

    +
    +
    +
    loop.plot()
    +plot_cmd(photo_table)
    +
    +
    +
    +
    +_images/06_photo_72_0.png +
    +
    +

    Next we’ll use this polygon to identify stars in the overdense region.

    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.

    +

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

    +

    To make a Path, we need a list of coordinates in the form of an array with two columns.

    +

    Currently loop is a Series with the values of gi in the index:

    +
    +
    +
    loop.head()
    +
    +
    +
    +
    +
    gi
    +0.587571    21.411746
    +0.567801    21.322466
    +0.548134    21.233380
    +0.528693    21.144427
    +0.509300    21.054549
    +Name: g, dtype: float64
    +
    +
    +
    +
    +

    We can move them out of the index into a column using reset_index:

    +
    +
    +
    loop_df = loop.reset_index()
    +loop_df.head()
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    gig
    00.58757121.411746
    10.56780121.322466
    20.54813421.233380
    30.52869321.144427
    40.50930021.054549
    +
    +
    +

    The result is a DataFrame with one column for gi and one column for g, so we can pass it to Path like this:

    from matplotlib.path import Path
     
    -path = Path(coords)
    +path = Path(loop_df)
     path
     
    -
    Path(array([[ 0.26433692, 17.84253127],
    -       [ 0.35394265, 18.799117  ],
    -       [ 0.47491039, 19.68211921],
    -       [ 0.63172043, 20.45474614],
    -       [ 0.76612903, 20.78587196],
    -       [ 0.80645161, 21.41133186],
    -       [ 0.58691756, 21.30095659],
    -       [ 0.39426523, 20.56512141],
    -       [ 0.22401434, 19.2406181 ],
    -       [ 0.19713262, 18.02649007]]), None)
    +
    Path(array([[ 0.58757135, 21.41174601],
    +       [ 0.56780097, 21.32246601],
    +       [ 0.54813409, 21.23338001],
    +       [ 0.5286928 , 21.14442701],
    +       [ 0.50929987, 21.05454901],
    +       [ 0.48991266, 20.96383501],
    +       [ 0.47084777, 20.87386601],
    +       [ 0.45222635, 20.78511001],
    +       [ 0.43438902, 20.69865301],
    +       [ 0.42745198, 20.66469601],
    +       [ 0.42067029, 20.63135301],
    +       [ 0.41402867, 20.59850601],
    +       [ 0.40738016, 20.56529901],
    +       [ 0.40088387, 20.53264001],
    +       [ 0.39449608, 20.50023501],
    +       [ 0.38843797, 20.46871801],
    +       [ 0.38251577, 20.43765101],
    +       [ 0.3766547 , 20.40653701],
    +       [ 0.37088531, 20.37564701],
    +       [ 0.36522325, 20.34505401],
    +       [ 0.35962415, 20.31443001],
    +       [ 0.35413292, 20.28413501],
    +       [ 0.34871894, 20.25390101],
    +       [ 0.34339273, 20.22385701],
    +       [ 0.33815825, 20.19395801],
    +       [ 0.33305724, 20.16427301],
    +       [ 0.32820637, 20.13508501],
    +       [ 0.32348139, 20.10604901],
    +       [ 0.31883343, 20.07716101],
    +       [ 0.31425423, 20.04833101],
    +       [ 0.30974976, 20.01961701],
    +       [ 0.30531997, 19.99097001],
    +       [ 0.30097354, 19.96246401],
    +       [ 0.29669999, 19.93401801],
    +       [ 0.29250157, 19.90573101],
    +       [ 0.28837983, 19.87746501],
    +       [ 0.28441584, 19.84955001],
    +       [ 0.28065057, 19.82188301],
    +       [ 0.27700644, 19.79450101],
    +       [ 0.27342328, 19.76713801],
    +       [ 0.26989305, 19.73985301],
    +       [ 0.26641258, 19.71265801],
    +       [ 0.26298257, 19.68540001],
    +       [ 0.25960216, 19.65824401],
    +       [ 0.2562733 , 19.63113701],
    +       [ 0.25299978, 19.60409301],
    +       [ 0.24977307, 19.57714401],
    +       [ 0.24660506, 19.55024001],
    +       [ 0.24348829, 19.52341001],
    +       [ 0.24042159, 19.49666601],
    +       [ 0.23741737, 19.46998501],
    +       [ 0.23447423, 19.44339301],
    +       [ 0.23158726, 19.41688701],
    +       [ 0.22876474, 19.39045101],
    +       [ 0.22600432, 19.36410901],
    +       [ 0.22330395, 19.33786601],
    +       [ 0.220663  , 19.31170101],
    +       [ 0.21808571, 19.28560101],
    +       [ 0.21557456, 19.25960101],
    +       [ 0.21312279, 19.23368701],
    +       [ 0.21073349, 19.20785601],
    +       [ 0.20840975, 19.18210401],
    +       [ 0.20614799, 19.15640601],
    +       [ 0.20395119, 19.13076401],
    +       [ 0.20182156, 19.10523201],
    +       [ 0.19975572, 19.07977101],
    +       [ 0.19775195, 19.05436401],
    +       [ 0.19581903, 19.02902801],
    +       [ 0.19395701, 19.00376101],
    +       [ 0.19216276, 18.97857301],
    +       [ 0.19044513, 18.95347601],
    +       [ 0.1888007 , 18.92850001],
    +       [ 0.18723796, 18.90368201],
    +       [ 0.18576648, 18.87905401],
    +       [ 0.18438763, 18.85466301],
    +       [ 0.18310871, 18.83056001],
    +       [ 0.18193706, 18.80672701],
    +       [ 0.18087817, 18.78327401],
    +       [ 0.17993184, 18.76015001],
    +       [ 0.17910244, 18.73740501],
    +       [ 0.17838817, 18.71496101],
    +       [ 0.17779005, 18.69282101],
    +       [ 0.177312  , 18.67099501],
    +       [ 0.17694971, 18.64944001],
    +       [ 0.1767112 , 18.62815801],
    +       [ 0.17659065, 18.60714001],
    +       [ 0.17658939, 18.58636601],
    +       [ 0.17671618, 18.56585701],
    +       [ 0.17696696, 18.54562201],
    +       [ 0.17733781, 18.52565801],
    +       [ 0.1778346 , 18.50597901],
    +       [ 0.17846661, 18.48656801],
    +       [ 0.17922891, 18.46742401],
    +       [ 0.18012796, 18.44859001],
    +       [ 0.18116197, 18.43005501],
    +       [ 0.18233604, 18.41181501],
    +       [ 0.18363223, 18.39379401],
    +       [ 0.18506009, 18.37602901],
    +       [ 0.18660932, 18.35862101],
    +       [ 0.18829849, 18.34153201],
    +       [ 0.19012805, 18.32480701],
    +       [ 0.19210919, 18.30851301],
    +       [ 0.19422686, 18.29250401],
    +       [ 0.1964951 , 18.27685701],
    +       [ 0.19890209, 18.26156301],
    +       [ 0.20145338, 18.24666001],
    +       [ 0.20417715, 18.23260501],
    +       [ 0.20705285, 18.21898101],
    +       [ 0.21005661, 18.20562501],
    +       [ 0.21319339, 18.19254201],
    +       [ 0.22126873, 18.16185301],
    +       [ 0.2300065 , 18.13259301],
    +       [ 0.23950909, 18.10508001],
    +       [ 0.24974677, 18.07932501],
    +       [ 0.26066153, 18.05527801],
    +       [ 0.27224553, 18.03295501],
    +       [ 0.28447607, 18.01227601],
    +       [ 0.40566013, 18.01227601],
    +       [ 0.39412682, 18.03295501],
    +       [ 0.38329907, 18.05527801],
    +       [ 0.37320316, 18.07932501],
    +       [ 0.36384734, 18.10508001],
    +       [ 0.35529237, 18.13259301],
    +       [ 0.34756872, 18.16185301],
    +       [ 0.34056407, 18.19254201],
    +       [ 0.33788593, 18.20562501],
    +       [ 0.33535176, 18.21898101],
    +       [ 0.33295648, 18.23260501],
    +       [ 0.33072983, 18.24666001],
    +       [ 0.32870734, 18.26156301],
    +       [ 0.32684482, 18.27685701],
    +       [ 0.3251355 , 18.29250401],
    +       [ 0.32359167, 18.30851301],
    +       [ 0.32219665, 18.32480701],
    +       [ 0.32097089, 18.34153201],
    +       [ 0.31990093, 18.35862101],
    +       [ 0.31898485, 18.37602901],
    +       [ 0.3182056 , 18.39379401],
    +       [ 0.31756993, 18.41181501],
    +       [ 0.31706705, 18.43005501],
    +       [ 0.31671781, 18.44859001],
    +       [ 0.3165174 , 18.46742401],
    +       [ 0.31646817, 18.48656801],
    +       [ 0.3165622 , 18.50597901],
    +       [ 0.31680458, 18.52565801],
    +       [ 0.31718682, 18.54562201],
    +       [ 0.31770268, 18.56585701],
    +       [ 0.31835632, 18.58636601],
    +       [ 0.31915162, 18.60714001],
    +       [ 0.32007915, 18.62815801],
    +       [ 0.3211385 , 18.64944001],
    +       [ 0.32233599, 18.67099501],
    +       [ 0.32366367, 18.69282101],
    +       [ 0.32512771, 18.71496101],
    +       [ 0.32672398, 18.73740501],
    +       [ 0.32845154, 18.76015001],
    +       [ 0.33031546, 18.78327401],
    +       [ 0.33230964, 18.80672701],
    +       [ 0.33443651, 18.83056001],
    +       [ 0.3366864 , 18.85466301],
    +       [ 0.3390529 , 18.87905401],
    +       [ 0.34152681, 18.90368201],
    +       [ 0.34410502, 18.92850001],
    +       [ 0.34677677, 18.95347601],
    +       [ 0.34953217, 18.97857301],
    +       [ 0.35237348, 19.00376101],
    +       [ 0.35529144, 19.02902801],
    +       [ 0.35828883, 19.05436401],
    +       [ 0.36136575, 19.07977101],
    +       [ 0.36451277, 19.10523201],
    +       [ 0.36773241, 19.13076401],
    +       [ 0.37102978, 19.15640601],
    +       [ 0.37440044, 19.18210401],
    +       [ 0.37784139, 19.20785601],
    +       [ 0.38135736, 19.23368701],
    +       [ 0.38494552, 19.25960101],
    +       [ 0.388603  , 19.28560101],
    +       [ 0.39233725, 19.31170101],
    +       [ 0.39614435, 19.33786601],
    +       [ 0.40002069, 19.36410901],
    +       [ 0.40396796, 19.39045101],
    +       [ 0.40798805, 19.41688701],
    +       [ 0.41208235, 19.44339301],
    +       [ 0.41624335, 19.46998501],
    +       [ 0.42047622, 19.49666601],
    +       [ 0.42478124, 19.52341001],
    +       [ 0.42914714, 19.55024001],
    +       [ 0.43357463, 19.57714401],
    +       [ 0.43806989, 19.60409301],
    +       [ 0.44262347, 19.63113701],
    +       [ 0.44724247, 19.65824401],
    +       [ 0.4519225 , 19.68540001],
    +       [ 0.45666424, 19.71265801],
    +       [ 0.46146067, 19.73985301],
    +       [ 0.46631851, 19.76713801],
    +       [ 0.47124047, 19.79450101],
    +       [ 0.47623175, 19.82188301],
    +       [ 0.48136578, 19.84955001],
    +       [ 0.48671855, 19.87746501],
    +       [ 0.49225451, 19.90573101],
    +       [ 0.49787627, 19.93401801],
    +       [ 0.50358931, 19.96246401],
    +       [ 0.50938655, 19.99097001],
    +       [ 0.51528266, 20.01961701],
    +       [ 0.52126534, 20.04833101],
    +       [ 0.52733726, 20.07716101],
    +       [ 0.53348957, 20.10604901],
    +       [ 0.53973535, 20.13508501],
    +       [ 0.54612384, 20.16427301],
    +       [ 0.55279781, 20.19395801],
    +       [ 0.55962597, 20.22385701],
    +       [ 0.56656311, 20.25390101],
    +       [ 0.57360789, 20.28413501],
    +       [ 0.58074299, 20.31443001],
    +       [ 0.5880138 , 20.34505401],
    +       [ 0.59535596, 20.37564701],
    +       [ 0.60283203, 20.40653701],
    +       [ 0.61042265, 20.43765101],
    +       [ 0.61808231, 20.46871801],
    +       [ 0.62591386, 20.50023501],
    +       [ 0.63413647, 20.53264001],
    +       [ 0.64249372, 20.56529901],
    +       [ 0.65104657, 20.59850601],
    +       [ 0.659584  , 20.63135301],
    +       [ 0.66830253, 20.66469601],
    +       [ 0.67722496, 20.69865301],
    +       [ 0.70017638, 20.78511001],
    +       [ 0.72413715, 20.87386601],
    +       [ 0.74870785, 20.96383501],
    +       [ 0.77374297, 21.05454901],
    +       [ 0.7988286 , 21.14442701],
    +       [ 0.8240001 , 21.23338001],
    +       [ 0.84950281, 21.32246601],
    +       [ 0.8752204 , 21.41174601]]), None)
     
    +

    The result is a Path object that represents the polygon.

    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)]
    +          (0.4, 16)]
     
    @@ -918,7 +1272,7 @@ Before calling plt.
    -

    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.

    +

    candidate_df is the Pandas DataFrame that contains the results from Lesson 4, 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

    @@ -988,7 +1342,6 @@ i_mean_psf_mag pmra pmdec parallax - parallax_error radial_velocity phi1 phi2 @@ -1007,7 +1360,6 @@ i_mean_psf_mag -3.770522 -12.490482 0.791393 - 0.271754 NaN -59.630489 -1.216485 @@ -1024,7 +1376,6 @@ i_mean_psf_mag -5.941679 -11.346409 0.307456 - 0.199466 NaN -59.247330 -2.016078 @@ -1041,7 +1392,6 @@ i_mean_psf_mag -3.897001 -12.702780 0.779463 - 0.223692 NaN -59.133391 -2.306901 @@ -1058,7 +1408,6 @@ i_mean_psf_mag -4.335041 -14.492309 0.314514 - 0.102775 NaN -59.785300 -1.594569 @@ -1075,7 +1424,6 @@ i_mean_psf_mag -7.172931 -12.291499 0.425404 - 0.337689 NaN -59.557744 -1.682147 @@ -1120,7 +1468,6 @@ dec pmra pmdec parallax -parallax_error radial_velocity phi1 phi2 @@ -1274,7 +1621,7 @@ Name: color, Length: 7346, dtype: bool
    -
    481
    +
    464
     
    @@ -1291,14 +1638,15 @@ Name: color, Length: 7346, dtype: bool
    plot_cmd(photo_table)
    -plt.plot(xs, ys)
    +plt.plot(gi, g)
    +loop.plot()
     
    -plt.plot(selected2['color'], selected2['mag'], 'gx');
    +plt.plot(selected2['color'], selected2['mag'], 'g.');
     
    -_images/06_photo_83_0.png +_images/06_photo_114_0.png

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

    @@ -1320,7 +1668,7 @@ Name: color, Length: 7346, dtype: bool
    -_images/06_photo_85_0.png +_images/06_photo_116_0.png

    This example includes two new Matplotlib commands:

    @@ -1350,7 +1698,7 @@ Name: color, Length: 7346, dtype: bool
    -
    -rw-rw-r-- 1 downey downey 2.0M Nov 18 19:28 gd1_merged.hdf5
    +
    -rw-rw-r-- 1 downey downey 1.1M Dec 14 14:24 gd1_merged.hdf5
     
    @@ -1364,20 +1712,13 @@ Name: color, Length: 7346, dtype: bool

    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)
    -
    -
    -
    -
    +

    In this lesson we used an isochrone to derive a polygon, which we used to select stars based on photometry. +So it is important to record the polygon as part of the data analysis pipeline.

    +

    Here’s how we can save it in an HDF file.

    filename = 'gd1_polygon.hdf5'
    -coords_df.to_hdf(filename, 'coords_df')
    +loop.to_hdf(filename, 'loop')
     
    @@ -1385,8 +1726,7 @@ Name: color, Length: 7346, dtype: bool

    We can read it back like this.

    -
    coords2_df = pd.read_hdf(filename, 'coords_df')
    -coords2 = coords2_df.to_numpy()
    +
    loop2 = pd.read_hdf(filename, 'loop')
     
    @@ -1394,7 +1734,9 @@ Name: color, Length: 7346, dtype: bool

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

    -
    np.all(coords2 == coords)
    +
    import numpy as np
    +
    +np.all(loop == loop2)
     
    diff --git a/07_plot.html b/07_plot.html index 62fbcf1..e074256 100644 --- a/07_plot.html +++ b/07_plot.html @@ -429,7 +429,7 @@
    -_images/07_plot_13_0.png +_images/07_plot_14_0.png
    @@ -737,7 +737,7 @@
    -_images/07_plot_50_0.png +_images/07_plot_51_0.png
    @@ -794,7 +794,7 @@
    -_images/07_plot_57_0.png +_images/07_plot_58_0.png
    @@ -845,7 +845,7 @@
    -_images/07_plot_63_0.png +_images/07_plot_64_0.png

    Exercise: Add a few lines to plot_cmd to show the Polygon we selected as a shaded area.

    @@ -931,7 +931,7 @@
    -_images/07_plot_69_0.png +_images/07_plot_70_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.

    @@ -969,7 +969,7 @@
    -_images/07_plot_72_0.png +_images/07_plot_73_0.png

    This is looking more and more like the figure in the paper.

    diff --git a/AstronomicalData/01_query.html b/AstronomicalData/01_query.html deleted file mode 100644 index eadda39..0000000 --- a/AstronomicalData/01_query.html +++ /dev/null @@ -1,1403 +0,0 @@ - - - - - - - - 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.

    • -
    -
    -
    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/02_coords.html b/AstronomicalData/02_coords.html deleted file mode 100644 index 81a0755..0000000 --- a/AstronomicalData/02_coords.html +++ /dev/null @@ -1,1824 +0,0 @@ - - - - - - - - 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.

    • -
    -
    -
    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/README.html b/AstronomicalData/README.html deleted file mode 100644 index 3e73f5d..0000000 --- a/AstronomicalData/README.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - 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.

    -
    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html b/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html deleted file mode 100644 index b59ee64..0000000 --- a/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - <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.

    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html b/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html deleted file mode 100644 index 2b73475..0000000 --- a/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - <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.

    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/_build/jupyter_execute/01_query.html b/AstronomicalData/_build/jupyter_execute/01_query.html deleted file mode 100644 index 752cca2..0000000 --- a/AstronomicalData/_build/jupyter_execute/01_query.html +++ /dev/null @@ -1,1384 +0,0 @@ - - - - - - - - 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.

    • -
    -
    -
    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/AstronomicalData/_build/jupyter_execute/02_coords.html b/AstronomicalData/_build/jupyter_execute/02_coords.html deleted file mode 100644 index 50db850..0000000 --- a/AstronomicalData/_build/jupyter_execute/02_coords.html +++ /dev/null @@ -1,1821 +0,0 @@ - - - - - - - - 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.

    • -
    -
    -
    - - - - -
    - -
    -
    - - -
    - - -
    -
    -
    -

    - - By Allen B. Downey
    - - © Copyright 2020.
    -

    -
    -
    -
    - - -
    -
    - - - - - - - - \ No newline at end of file diff --git a/_images/03_motion_98_0.png b/_images/03_motion_103_0.png similarity index 100% rename from _images/03_motion_98_0.png rename to _images/03_motion_103_0.png diff --git a/_images/03_motion_28_0.png b/_images/03_motion_29_0.png similarity index 100% rename from _images/03_motion_28_0.png rename to _images/03_motion_29_0.png diff --git a/_images/03_motion_45_0.png b/_images/03_motion_45_0.png deleted file mode 100644 index f3e40e9c3de3986cbd63b529fedaf6a82be7894d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115356 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 z 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

    $AA?Nl?D6xS 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 literal 0 HcmV?d00001 diff --git a/_images/06_photo_116_0.png b/_images/06_photo_116_0.png new file mode 100644 index 0000000000000000000000000000000000000000..16586bada333dc304b6a60f807b2b125b6966a72 GIT binary patch literal 9761 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 K;O_nT;(r0awxNsw literal 0 HcmV?d00001 diff --git a/_images/06_photo_12_0.png b/_images/06_photo_14_0.png similarity index 100% rename from _images/06_photo_12_0.png rename to _images/06_photo_14_0.png diff --git a/_images/06_photo_23_0.png b/_images/06_photo_23_0.png deleted file mode 100644 index be23eb85e75611599ac1dcb7f71c302d269495b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24002 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 literal 31739 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 YDzE9X`m2#qkVFost7s`#DOv^n7dQH&6951J literal 0 HcmV?d00001 diff --git a/_images/06_photo_72_0.png b/_images/06_photo_72_0.png new file mode 100644 index 0000000000000000000000000000000000000000..09316480775c2a56dccb44bd64c0a5d81e7067d3 GIT binary patch literal 24324 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 Axc~qF literal 0 HcmV?d00001 diff --git a/_images/07_plot_13_0.png b/_images/07_plot_14_0.png similarity index 100% rename from _images/07_plot_13_0.png rename to _images/07_plot_14_0.png diff --git a/_images/07_plot_50_0.png b/_images/07_plot_51_0.png similarity index 100% rename from _images/07_plot_50_0.png rename to _images/07_plot_51_0.png diff --git a/_images/07_plot_57_0.png b/_images/07_plot_58_0.png similarity index 100% rename from _images/07_plot_57_0.png rename to _images/07_plot_58_0.png diff --git a/_images/07_plot_63_0.png b/_images/07_plot_64_0.png similarity index 100% rename from _images/07_plot_63_0.png rename to _images/07_plot_64_0.png diff --git a/_images/07_plot_69_0.png b/_images/07_plot_70_0.png similarity index 100% rename from _images/07_plot_69_0.png rename to _images/07_plot_70_0.png diff --git a/_images/07_plot_72_0.png b/_images/07_plot_73_0.png similarity index 100% rename from _images/07_plot_72_0.png rename to _images/07_plot_73_0.png diff --git a/_sources/01_query.md b/_sources/01_query.md deleted file mode 100644 index a6b736b..0000000 --- a/_sources/01_query.md +++ /dev/null @@ -1,1073 +0,0 @@ -# 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/_sources/02_coords.ipynb b/_sources/02_coords.ipynb index 1d02ecf..b910f38 100644 --- a/_sources/02_coords.ipynb +++ b/_sources/02_coords.ipynb @@ -1,5 +1,45 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "source": [ + "---\n", + "title: \"Coordinate Transformations\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"How do we transform celestial coordinates from one frame to another and save results in files?\"\n", + "\n", + "objectives:\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.\"\n", + "\n", + "keypoints:\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.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1955,6 +1995,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/_sources/03_motion.ipynb b/_sources/03_motion.ipynb index ac31939..6e85b0b 100644 --- a/_sources/03_motion.ipynb +++ b/_sources/03_motion.ipynb @@ -1,5 +1,49 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "source": [ + "---\n", + "title: \"Plotting and Pandas\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"How do we make scatter plots in Matplotlib?\"\n", + "\n", + "- \"How do we store data in a Pandas `DataFrame`?\"\n", + "\n", + "objectives:\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", + "\n", + "keypoints:\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.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1075,7 +1119,7 @@ "source": [ "## Exploring data\n", "\n", - "One benefit of using Pandas is that it provides function for exploring the data and checking for problems.\n", + "One benefit of using Pandas is that it provides functions for exploring the data and checking for problems.\n", "\n", "One of the most useful of these functions is `describe`, which computes summary statistics for each column." ] diff --git a/_sources/04_select.ipynb b/_sources/04_select.ipynb index 331f0a5..a633d49 100644 --- a/_sources/04_select.ipynb +++ b/_sources/04_select.ipynb @@ -1,5 +1,45 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": { + "tags": [ + "remove-cell" + ] + }, + "source": [ + "---\n", + "title: \"Transform and Select\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"Question?\"\n", + "\n", + "objectives:\n", + "\n", + "- \"Transform proper motions from one frame to another.\"\n", + "\n", + "- \"Compute the convex hull of a set of points.\"\n", + "\n", + "- \"Write an ADQL query that selects based on proper motion.\"\n", + "\n", + "- \"Save data in CSV format.\"\n", + "\n", + "keypoints:\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.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -35,9 +75,13 @@ "\n", "After completing this lesson, you should be able to\n", "\n", - "* Convert proper motion between frames.\n", + "* Transform proper motions from one frame to another.\n", "\n", - "* Write an ADQL query that selects based on proper motion." + "* Compute the convex hull of a set of points.\n", + "\n", + "* Write an ADQL query that selects based on proper motion.\n", + "\n", + "* Save data in CSV format." ] }, { @@ -118,6 +162,16 @@ "source": [ "## Selection by proper motion\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 the coordinates to the `GD1Koposov10` frame 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", "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", @@ -249,12 +303,18 @@ "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", + "But now we can define a polygon that encloses the proper motions of these stars in ICRS, and use that polygon as a selection criterion in an ADQL query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convex Hull\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." + "To use it, we'll select columns `pmra` and `pmdec` and convert them to a NumPy array." ] }, { @@ -289,8 +349,13 @@ "```\n", "points = selected[['pmra','pmdec']].values\n", "\n", - "```\n", - "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "We'll pass the points to `ConvexHull`, which returns an object that contains the results. " ] }, @@ -302,7 +367,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -408,6 +473,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "This use of `transpose` is a bit of a NumPy trick. Because `pm_vertices` has two columns, its transpose has two rows, which are assigned to the two variables `pmra_poly` and `pmdec_poly`.\n", + "\n", "The following figure shows proper motion in ICRS again, along with the convex hull we just computed." ] }, @@ -451,6 +518,45 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "So `pm_vertices` represents the polygon we want to select.\n", + "The next step is to use it as part of an ADQL query." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assembling the query\n", + "\n", + "Here's the base string we used for the query in the previous lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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": [ + "And here are the changes we'll make in this lesson:\n", + "\n", + "1. We will add another clause to select stars whose proper motion is in the polygon we just computed, `pm_vertices`.\n", + "\n", + "2. We will select stars with coordinates in a larger region.\n", + "\n", "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." @@ -458,7 +564,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -498,7 +604,7 @@ " '-14.7464117578883']" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -517,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -526,7 +632,7 @@ "'-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, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -540,40 +646,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Selecting the region\n", + "We'll add this string to the query soon, but first let's compute the other polygon, the one that specifies the region of the sky we want.\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." + "Here are the coordinates of the rectangle we'll select, in the GD-1 frame." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -585,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -602,9 +682,17 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: AstropyDeprecationWarning: Transforming a frame instance to a frame class (as opposed to another frame instance) will not be supported in the future. Either explicitly instantiate the target frame, or first convert the source frame instance to a `astropy.coordinates.SkyCoord` and use its `transform_to()` method. [astropy.coordinates.baseframe]\n" + ] + } + ], "source": [ "import gala.coordinates as gc\n", "import astropy.coordinates as coord\n", @@ -622,7 +710,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -631,7 +719,7 @@ "'135.30559858565638, 8.398623940157561, 126.50951508623503, 13.44494195652069, 163.0173655836748, 54.24242734020255, 172.9328536286811, 46.47260492416258'" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -650,21 +738,13 @@ "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." + "Now we have everything we need to assemble the query.\n", + "Here's the base query from the previous lesson again:" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -682,12 +762,14 @@ "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`." + "### Exercise\n", + "\n", + "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, + "execution_count": 22, "metadata": { "tags": [ "hide-cell" @@ -718,23 +800,25 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ - "columns = 'source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity'" + "columns = 'source_id, ra, dec, pmra, pmdec, parallax, 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`." + "### Exercise\n", + "\n", + "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, + "execution_count": 24, "metadata": { "tags": [ "hide-cell" @@ -746,7 +830,7 @@ "output_type": "stream", "text": [ "SELECT \n", - "source_id, ra, dec, pmra, pmdec, parallax, parallax_error, radial_velocity\n", + "source_id, ra, dec, pmra, pmdec, parallax, radial_velocity\n", "FROM gaiadr2.gaia_source\n", "WHERE parallax < 1\n", " AND bp_rp BETWEEN -0.75 AND 2 \n", @@ -771,12 +855,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here's how we run it." + "Now we can run the query like this:" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "scrolled": true }, @@ -794,19 +878,23 @@ "\tHost: geadata.esac.esa.int\n", "\tUse HTTPS: True\n", "\tPort: 443\n", - "\tSSL Port: 443\n" - ] - }, - { - "ename": "HTTPError", - "evalue": "OK", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mHTTPError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mastroquery\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgaia\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mGaia\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mjob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGaia\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlaunch_job_async\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/AstronomicalData/lib/python3.8/site-packages/astroquery/utils/tap/core.py\u001b[0m in \u001b[0;36mlaunch_job_async\u001b[0;34m(self, query, name, output_file, output_format, verbose, dump_to_file, background, upload_resource, upload_table_name, autorun)\u001b[0m\n\u001b[1;32m 422\u001b[0m self.__connHandler.dump_to_file(suitableOutputFile,\n\u001b[1;32m 423\u001b[0m response)\n\u001b[0;32m--> 424\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mHTTPError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresponse\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreason\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 425\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 426\u001b[0m location = self.__connHandler.find_header(\n", - "\u001b[0;31mHTTPError\u001b[0m: OK" + "\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", + "radial_velocity float64 km / s Radial velocity 7295\n", + "Jobid: 1607614394159O\n", + "Phase: COMPLETED\n", + "Owner: None\n", + "Output file: async_20201210103314.vot\n", + "Results: None\n" ] } ], @@ -826,9 +914,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "7346" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "candidate_table = job.get_results()\n", "len(candidate_table)" @@ -845,9 +944,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "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", @@ -868,7 +980,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -880,10 +992,10 @@ " returns: Pandas DataFrame\n", " \"\"\"\n", " skycoord = coord.SkyCoord(\n", - " ra=results['ra'], \n", - " dec=results['dec'],\n", - " pm_ra_cosdec=results['pmra'],\n", - " pm_dec=results['pmdec'], \n", + " ra=table['ra'], \n", + " dec=table['dec'],\n", + " pm_ra_cosdec=table['pmra'],\n", + " pm_dec=table['pmdec'], \n", " distance=8*u.kpc, \n", " radial_velocity=0*u.km/u.s)\n", "\n", @@ -907,7 +1019,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -923,9 +1035,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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F34Bt912Gx5++GG0tbXhVa96Fd75znfi1ltvxQMPPID169fjL//yL3Hw4EH87u/+Li688ELcd999+PznP4+3ve1t2LJlC+6++2788R//MQYGBtDf34+LLroIV155JcrlMs4777zUYqxWq3jwwQfxy7/8y/ja176Gp556CsePH08ZOB34+8mf/En88Ic/xNatW3H77ben1gfRZK1Wq0sbpTRMslYGBgbw9NNPo6urC5/4xCcAAJ/+9Kdx9OjROnoHgN27d+Oaa67BD3/4Q7z97W/HggULUk0YAO66667UWv23f/s3PPXUU9i0aROOHz+OhQsXor29HW95y1vwd3/3d/iDP/gD3HPPPViwYAE2bNiAD37wg3jpS1+ariFl6pDC8OCDD6K9vR3XX399KnwXL16MT37yk7j77rtTC2b//v144okn8Nhjj2H9+vXYvHkzenp6sH//fhw5ciRNo33iiScAzDD6vr4+PPnkk9ixYweefvrpNOWWsqOIFjs7O3HjjTfiwQcfTNNCtX3LD/VxeuaC4KGHHsLWrVvTFGdqZ8eOHZiamkoFjLU35P99qeFaOYu5Aq8FMAufnvNeZ0ATZQ2uJefcdgDbAeCqq65q2vWkSVhzYEwyk/tEWgNSy6XnKE9/9erVaS40ac5r1qzBfffdh927dyNJEjzyyCPYuHFjWkuFiMFK99I0BtLsOjo68Ku/+qu48MILcdlll+G//tf/mjIbAOmYeP6/xIf2HRHwddddh4ULF6p50fwU8kMPPYRHH30UPT09qfZFqbMA6oTttm3b0N/fn55PSJIEk5OT2L17N9asWYPFixfj9ttvx2WXXYbjx4/jySefRKFQwIkTJ/Bv//ZvWLhwIa699lqcf/756OjowKFDh1LG9slPfhKFQgE33HADfvCDH2B4eBhvfOMb0zHXajWMjY0BAN7whjfgpS99KXp7e7FixQocP34cX/7yl/Hoo4/i/e9/P5YuXYoFCxbg8ssvx6te9Sq85CUvSdf6gQcewLPPPotPfepT6OrqSjU1rr1dfvnlqFarqdX4gQ98IHV13HvvvekJYToZ3NHRkTKahx9+GHfccQduu+02vPOd76yjga6uLmzcuBGPPPIIFixYgHe+8524/PLL8fTTT2Px4sV160n0c9FFF6GtrQ0bN27E0qVLU/eScw7nn38+1qxZg+PHj2PTpk1Y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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", @@ -966,7 +1091,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -984,9 +1109,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 698K Dec 10 19:18 gd1_candidates.hdf5\r\n" + ] + } + ], "source": [ "!ls -lh gd1_candidates.hdf5" ] @@ -1023,7 +1156,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1039,9 +1172,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-rw-rw-r-- 1 downey downey 1.4M Dec 10 19:19 gd1_candidates.csv\r\n" + ] + } + ], "source": [ "!ls -lh gd1_candidates.csv" ] @@ -1057,9 +1198,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ",source_id,ra,dec,pmra,pmdec,parallax,radial_velocity,phi1,phi2,pm_phi1,pm_phi2\r\n", + "0,635559124339440000,137.58671691646745,19.1965441084838,-3.770521900009566,-12.490481778113859,0.7913934419894347,,-59.63048941944402,-1.2164852515042963,-7.361362712597496,-0.592632882064492\r\n", + "1,635860218726658176,138.5187065217173,19.09233926905897,-5.941679495793577,-11.346409129876392,0.30745551377348623,,-59.247329893833296,-2.016078400820631,-7.527126084640531,1.7487794924176672\r\n" + ] + } + ], "source": [ "!head -3 gd1_candidates.csv" ] @@ -1075,7 +1226,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -1091,18 +1242,218 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, - "outputs": [], + "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", + "
    source_idradecpmrapmdecparallaxradial_velocityphi1phi2pm_phi1pm_phi2
    0635559124339440000137.58671719.196544-3.770522-12.4904820.791393NaN-59.630489-1.216485-7.361363-0.592633
    1635860218726658176138.51870719.092339-5.941679-11.3464090.307456NaN-59.247330-2.016078-7.5271261.748779
    2635674126383965568138.84287419.031798-3.897001-12.7027800.779463NaN-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", + " radial_velocity phi1 phi2 pm_phi1 pm_phi2 \n", + "0 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 NaN -59.133391 -2.306901 -7.560608 -0.741800 " + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "candidate_df.head(3)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "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", + "
    Unnamed: 0source_idradecpmrapmdecparallaxradial_velocityphi1phi2pm_phi1pm_phi2
    00635559124339440000137.58671719.196544-3.770522-12.4904820.791393NaN-59.630489-1.216485-7.361363-0.592633
    11635860218726658176138.51870719.092339-5.941679-11.3464090.307456NaN-59.247330-2.016078-7.5271261.748779
    22635674126383965568138.84287419.031798-3.897001-12.7027800.779463NaN-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 radial_velocity phi1 phi2 pm_phi1 pm_phi2 \n", + "0 0.791393 NaN -59.630489 -1.216485 -7.361363 -0.592633 \n", + "1 0.307456 NaN -59.247330 -2.016078 -7.527126 1.748779 \n", + "2 0.779463 NaN -59.133391 -2.306901 -7.560608 -0.741800 " + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "read_back_csv.head(3)" ] diff --git a/_sources/05_join.ipynb b/_sources/05_join.ipynb index fab853e..ef07f88 100644 --- a/_sources/05_join.ipynb +++ b/_sources/05_join.ipynb @@ -1,5 +1,35 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: \"Join\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"How do we use `JOIN` to combine information from multiple tables?\"\n", + "\n", + "objectives:\n", + "\n", + "- \"Upload a table to the Gaia server.\"\n", + "\n", + "- \"Write ADQL queries involving `JOIN` operations.\"\n", + "\n", + "keypoints:\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.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -10,11 +40,11 @@ "\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", + "Picking up where we left off, the next step in the analysis is to select candidate stars based on 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", + "In red is a [stellar isochrone](https://en.wikipedia.org/wiki/Stellar_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." ] @@ -311,7 +341,7 @@ "output_type": "stream", "text": [ "\r\n", - "\r\n", "\r\n", " \r\n", @@ -350,7 +380,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "-rw-rw-r-- 1 downey downey 396K Nov 18 19:21 candidate_df.xml\r\n" + "-rw-rw-r-- 1 downey downey 396K Dec 10 11:33 candidate_df.xml\r\n" ] } ], @@ -373,7 +403,9 @@ "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", + "### Exercise\n", + "\n", + "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." ] @@ -426,6 +458,8 @@ "metadata": {}, "outputs": [], "source": [ + "# This line is commented out because it would cause an error\n", + "\n", "# writeto(column, 'candidate_df.xml')" ] }, @@ -517,7 +551,7 @@ "data": { "text/html": [ "Table length=7346\n", - "\n", + "
    \n", "\n", "\n", "\n", @@ -655,7 +689,7 @@ "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", + " ON best.source_id = candidate_df.source_id\n", "\"\"\"" ] }, @@ -713,7 +747,7 @@ "data": { "text/html": [ "Table length=3724\n", - "
    source_id
    int64
    635559124339440000
    \n", + "
    \n", "\n", "\n", "\n", @@ -819,7 +853,7 @@ "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." + "The length of `results1` is about 3000, which means we were not able to find matches for all stars in the list of candidates." ] }, { @@ -846,9 +880,7 @@ "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." + "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." ] }, { @@ -858,9 +890,63 @@ "outputs": [ { "data": { + "text/html": [ + "<MaskedColumn name='best_neighbour_multiplicity' dtype='int16' description='Number of neighbours with same probability as best neighbour' length=3724>\n", + "
    source_idoriginal_ext_source_idangular_distancenumber_of_neighboursnumber_of_matesbest_neighbour_multiplicitygaia_astrometric_paramssource_id_2
    arcsec
    int64int64float64int32int16int16int16int64
    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    ...
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    " + ], "text/plain": [ - "1 3724\n", - "dtype: int64" + "\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + "...\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1\n", + " 1" ] }, "execution_count": 22, @@ -869,21 +955,16 @@ } ], "source": [ - "import pandas as pd\n", - "\n", - "nn = pd.Series(results1['best_neighbour_multiplicity'])\n", - "nn.value_counts()" + "results1['best_neighbour_multiplicity']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The result shows that `1` is the only value in the `Series`, appearing xxx times.\n", + "It looks like most of the values are `1`, which is good; that means that for each candidate star we have identified exactly one source in Pan-STARRS that is likely to be the same star.\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." + "To check whether there are any values other than `1`, we can convert this column to a Pandas `Series` and use `describe`, which we saw in in Lesson 3." ] }, { @@ -894,8 +975,15 @@ { "data": { "text/plain": [ - "0 3724\n", - "dtype: int64" + "count 3724.0\n", + "mean 1.0\n", + "std 0.0\n", + "min 1.0\n", + "25% 1.0\n", + "50% 1.0\n", + "75% 1.0\n", + "max 1.0\n", + "dtype: float64" ] }, "execution_count": 23, @@ -904,17 +992,57 @@ } ], "source": [ - "nm = pd.Series(results1['number_of_mates'])\n", - "nm.value_counts()" + "import pandas as pd\n", + "\n", + "multiplicity = pd.Series(results1['best_neighbour_multiplicity'])\n", + "multiplicity.describe()" ] }, { "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", + "In fact, `1` is the only value in the `Series`, so every candidate star has a single best match.\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." + "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": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 3724.0\n", + "mean 0.0\n", + "std 0.0\n", + "min 0.0\n", + "25% 0.0\n", + "50% 0.0\n", + "75% 0.0\n", + "max 0.0\n", + "dtype: float64" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mates = pd.Series(results1['number_of_mates'])\n", + "mates.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All values in this column are `0`, which means that for each match we found in Pan-STARRS, there are no other stars in Gaia that also match. \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 criteria to choose the most likely match." ] }, { @@ -935,14 +1063,21 @@ "\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", + "Since we've done everything here before, we'll do these steps as an exercise." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 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`." + "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, + "execution_count": 25, "metadata": { "tags": [ "hide-cell" @@ -965,7 +1100,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -973,7 +1108,7 @@ "output_type": "stream", "text": [ "\r\n", - "\r\n", "\r\n", " \r\n", @@ -993,7 +1128,9 @@ "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", + "### Exercise\n", + "\n", + "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", @@ -1017,23 +1154,6 @@ "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": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ - "# Solution\n", - "\n", - "query2 = \"\"\"SELECT *\n", - "FROM tap_upload.external as external\n", - "\"\"\"" - ] - }, { "cell_type": "code", "execution_count": 27, @@ -1046,75 +1166,46 @@ "source": [ "# Solution\n", "\n", + "# First test\n", + "\n", + "query2 = \"\"\"SELECT *\n", + "FROM tap_upload.external as external\n", + "\"\"\"\n", + "\n", + "# Second test\n", + "\n", "query2 = \"\"\"SELECT TOP 10 *\n", "FROM gaiadr2.panstarrs1_original_valid\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ - "# Solution\n", + "\"\"\"\n", + "\n", + "# Third test\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": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ - "# Solution\n", + " ON ps.obj_id = external.original_ext_source_id\n", + "\"\"\"\n", + "\n", + "# Complete query\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", + " ON ps.obj_id = external.original_ext_source_id\n", "\"\"\"" ] }, { - "cell_type": "code", - "execution_count": 30, + "cell_type": "markdown", "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)" + "Here's how we launch the job and get the results." ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -1133,14 +1224,14 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Table length=3724\n", - "\n", + "
    \n", "\n", "\n", "\n", @@ -1194,7 +1285,7 @@ "612256418500423168 20.8715991973877 19.9612007141113" ] }, - "execution_count": 32, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1208,13 +1299,108 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Challenge exercise**\n", + "### Exercise\n", "\n", - "Do both joins in one query.\n", + "Optional Challenge: 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": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO: Query finished. [astroquery.utils.tap.core]\n" + ] + }, + { + "data": { + "text/html": [ + "Table length=3724\n", + "
    source_idg_mean_psf_magi_mean_psf_mag
    mag
    int64float64float64
    \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": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "query3 = \"\"\"SELECT\n", + "candidate_df.source_id, ps.g_mean_psf_mag, ps.i_mean_psf_mag\n", + "FROM tap_upload.candidate_df as candidate_df\n", + "JOIN gaiadr2.panstarrs1_best_neighbour as best\n", + " ON best.source_id = candidate_df.source_id\n", + "JOIN gaiadr2.panstarrs1_original_valid as ps\n", + " ON ps.obj_id = best.original_ext_source_id\n", + "\"\"\"\n", + "\n", + "job3 = Gaia.launch_job_async(query=query3, \n", + " upload_resource='candidate_df.xml', \n", + " upload_table_name='candidate_df')\n", + "\n", + "results3 = job3.get_results()\n", + "results3" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1226,7 +1412,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1243,14 +1429,14 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "-rw-rw-r-- 1 downey downey 96K Nov 18 19:22 gd1_photo.fits\r\n" + "-rw-rw-r-- 1 downey downey 96K Dec 10 11:34 gd1_photo.fits\r\n" ] } ], diff --git a/_sources/06_photo.ipynb b/_sources/06_photo.ipynb index 8b74810..5ae2b97 100644 --- a/_sources/06_photo.ipynb +++ b/_sources/06_photo.ipynb @@ -1,5 +1,39 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: \"Title\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"How do we use Matplotlib to select a polygon and Pandas to merge data from multiple tables?\"\n", + "\n", + "objectives:\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.\"\n", + "\n", + "keypoints:\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.\"\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.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -12,13 +46,14 @@ "\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", + "The next step in the analysis is to select candidate stars based on the photometry data. \n", + "The following figure from the paper is a color-magnitude diagram showing the stars we previously 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." + "By selecting stars in the shaded area, we can further distinguish the main sequence of GD-1 from mostly younger background stars." ] }, { @@ -31,7 +66,7 @@ "\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", + "2. We'll use an isochrone computed by MIST to specify a polygonal region in the color-magnitude diagram and select the stars inside it.\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", @@ -59,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "metadata": { "tags": [ "remove-cell" @@ -87,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -110,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -140,9 +175,18 @@ "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": "markdown", + "metadata": {}, + "source": [ + "The following function takes a table containing photometry data and draws a color-magnitude diagram.\n", + "The input can be an Astropy `Table` or Pandas `DataFrame`, as long as it has columns named `g_mean_psf_mag` and `i_mean_psf_mag`.\n", + "\n" + ] + }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -198,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -224,9 +268,7 @@ "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." + "In the next section we'll use an isochrone to specify a polygon that contains this overdense regioin." ] }, { @@ -235,71 +277,51 @@ "source": [ "## Isochrone\n", "\n", - "http://waps.cfa.harvard.edu/MIST/interp_isos.html\n", + "Based on our best estimates for the ages of the stars in GD-1 and their metallicity, we can compute a [stellar isochrone](https://en.wikipedia.org/wiki/Stellar_isochrone) that predicts the relationship between their magnitude and color.\n", + "\n", + "In fact, we can use [MESA Isochrones & Stellar Tracks](http://waps.cfa.harvard.edu/MIST/) (MIST) to compute it for us.\n", + "\n", + "Using the [MIST Version 1.2 web interface](http://waps.cfa.harvard.edu/MIST/interp_isos.html), we computed an isochrone with the following parameters:\n", " \n", - "MIST Version 1.2\n", + "* Rotation initial v/v_crit = 0.4\n", "\n", - "Rotation initial v/v_crit = 0.4\n", + "* Single age, linear scale = 12e9\n", "\n", - "Single age, log10 scale = 10.079\n", + "* Composition [Fe/H] = -1.35\n", "\n", - "Composition [Fe/H] = -1.35\n", + "* Synthetic Photometry, PanStarrs\n", "\n", - "Synthetic Photometry, PanStarrs\n", + "* Extinction av = 0\n", "\n", - "Extinction av = 0\n", - " " + "The following cell downloads the results:" ] }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "10.079181246047625" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "import numpy as np\n", + "import os\n", + "from wget import download\n", "\n", - "log_age = np.log10(12e9)\n", - "log_age" + "filename = 'MIST_iso_5fd2532653c27.iso.cmd'\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": 182, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "10.176091259055681" - ] - }, - "execution_count": 182, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "import numpy as np\n", - "\n", - "log_age = np.log10(15e9)\n", - "log_age" + "To read this file we'll download a Python module [from this repository](https://github.com/jieunchoi/MIST_codes)." ] }, { "cell_type": "code", - "execution_count": 147, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -313,521 +335,38 @@ " print(download(filepath+filename))" ] }, - { - "cell_type": "code", - "execution_count": 149, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading in: mist_iso_12.0_-1.35.cmd\n" - ] - } - ], - "source": [ - "import read_mist_models\n", - "\n", - "filename = 'mist_iso_12.0_-1.35.cmd'\n", - "iso = read_mist_models.ISOCMD(filename)" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "read_mist_models.ISOCMD" - ] - }, - "execution_count": 150, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(iso)" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "list" - ] - }, - "execution_count": 151, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(iso.isocmds)" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 152, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(iso.isocmds)" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "numpy.ndarray" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(iso.isocmds[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype([('EEP', 'Table length=5\n", - "
    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    EEPlog10_isochrone_age_yrinitial_massstar_masslog_Tefflog_glog_L[Fe/H]_init[Fe/H]PS_gPS_rPS_iPS_zPS_yPS_wPS_openphase
    int32float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64float64
    25110.0790.105870850108208960.105869705589364823.54036068292639565.321292252841703-2.7463861921790302-1.35-1.30902413.83327812.39528311.63853511.28630911.09987712.30464511.9700720.0
    25210.0790.108809974798175170.108808758217223443.54258290625209735.312318300317242-2.7181724188486394-1.35-1.30888713.72806512.30235811.56230511.21656411.03057212.22069511.8916950.0
    25310.0790.112652468448451230.112651153162689773.54551901495962075.300571015130943-2.6811483213239216-1.35-1.308713.59011312.18069911.46111311.12465910.93905112.11006911.7887120.0
    25410.0790.116427328711895660.116425909285919643.54840384284145665.288998772212527-2.644742589781073-1.35-1.30852713.45454412.06139811.36112811.03319410.84876912.00072911.6869940.0
    25510.0790.120222397889611750.120220866480104383.5513078778592485.277331450307816-2.608093791390564-1.35-1.30828513.3183711.9418211.26008710.94010610.75770811.8903111.5842020.0
    " - ], - "text/plain": [ - "\n", - " EEP log10_isochrone_age_yr initial_mass ... PS_w PS_open phase \n", - "int32 float64 float64 ... float64 float64 float64\n", - "----- ---------------------- ------------------- ... --------- --------- -------\n", - " 251 10.079 0.10587085010820896 ... 12.304645 11.970072 0.0\n", - " 252 10.079 0.10880997479817517 ... 12.220695 11.891695 0.0\n", - " 253 10.079 0.11265246844845123 ... 12.110069 11.788712 0.0\n", - " 254 10.079 0.11642732871189566 ... 12.000729 11.686994 0.0\n", - " 255 10.079 0.12022239788961175 ... 11.89031 11.584202 0.0" - ] - }, - "execution_count": 155, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from astropy.table import Table \n", - "\n", - "iso_table = Table(iso.isocmds[0])\n", - "iso_table[:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 156, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['EEP',\n", - " 'log10_isochrone_age_yr',\n", - " 'initial_mass',\n", - " 'star_mass',\n", - " 'log_Teff',\n", - " 'log_g',\n", - " 'log_L',\n", - " '[Fe/H]_init',\n", - " '[Fe/H]',\n", - " 'PS_g',\n", - " 'PS_r',\n", - " 'PS_i',\n", - " 'PS_z',\n", - " 'PS_y',\n", - " 'PS_w',\n", - " 'PS_open',\n", - " 'phase']" - ] - }, - "execution_count": 156, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "iso_table.colnames" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "14.4604730134524" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import astropy.coordinates as coord\n", - "import astropy.units as u\n", - "\n", - "distance = 7.8 * u.kpc\n", - "dm = coord.Distance(distance).distmod.value\n", - "dm" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "metadata": {}, - "outputs": [], - "source": [ - "g = iso_table['PS_g'] + dm\n", - "gi = iso_table['PS_g'] - iso_table['PS_i']" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 159, - "metadata": {}, - "output_type": "execute_result" - }, - { - "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", - "plot_cmd(photo_table)\n", - "plt.plot(gi, g)" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [], - "source": [ - "def read_and_clean_cmd(filename, distance):\n", - " iso = read_mist_models.ISOCMD(filename)\n", - " iso_table = Table(iso.isocmds[0])\n", - "\n", - " phase_mask = (iso_table['phase'] >= 0) & (iso_table['phase'] < 3)\n", - " table = iso_table[phase_mask]\n", - " \n", - " dm = coord.Distance(distance).distmod.value\n", - " g = iso_table['PS_g'] + dm\n", - " gi = iso_table['PS_g'] - iso_table['PS_i']\n", - " \n", - " return gi, g" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading in: mist_iso_12.0_-1.35.cmd\n" - ] - } - ], - "source": [ - "filename = 'mist_iso_12.0_-1.35.cmd'\n", - "\n", - "gi1, g1 = read_and_clean_cmd(filename, distance)" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading in: mist_iso_15.0_-1.35.cmd\n" - ] - } - ], - "source": [ - "filename = 'mist_iso_15.0_-1.35.cmd'\n", - "\n", - "gi2, g2 = read_and_clean_cmd(filename, distance)" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - }, - { - "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", - "plot_cmd(photo_table)\n", - "plt.plot(gi1, g1)\n", - "plt.plot(gi2, g2)" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "metadata": {}, - "outputs": [], - "source": [ - "left_gi = gi - 0.5*(g/28)**5\n", - "right_gi = gi + 0.55*(g/28)**5" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - }, - { - "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", - "plot_cmd(photo_table)\n", - "plt.plot(gi1, g1)\n", - "plt.plot(gi2, g2)" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "metadata": {}, - "outputs": [], - "source": [ - "# TODO\n", - "# ind = (poly[:,1]<21.) & (poly[:,1]>17.8)" - ] - }, { "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", - "coords = None\n", - "\n", - "if not IN_COLAB:\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.2643369175627239, 17.84253127299485),\n", - " (0.3539426523297491, 18.799116997792495),\n", - " (0.47491039426523296, 19.682119205298015),\n", - " (0.6317204301075269, 20.454746136865342),\n", - " (0.7661290322580645, 20.785871964679913),\n", - " (0.8064516129032258, 21.41133186166299),\n", - " (0.5869175627240143, 21.300956585724798),\n", - " (0.39426523297491034, 20.565121412803535),\n", - " (0.22401433691756267, 19.240618101545255),\n", - " (0.19713261648745517, 18.02649006622517)]" - ] - }, - "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." + "Now we can read the file:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading in: MIST_iso_5fd2532653c27.iso.cmd\n" + ] + } + ], "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)]" + "import read_mist_models\n", + "\n", + "filename = 'MIST_iso_5fd2532653c27.iso.cmd'\n", + "iso = read_mist_models.ISOCMD(filename)" ] }, { "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. " + "The result is an `ISOCMD` object." ] }, { @@ -838,10 +377,7 @@ { "data": { "text/plain": [ - "(array([0.26433692, 0.35394265, 0.47491039, 0.63172043, 0.76612903,\n", - " 0.80645161, 0.58691756, 0.39426523, 0.22401434, 0.19713262]),\n", - " array([17.84253127, 18.799117 , 19.68211921, 20.45474614, 20.78587196,\n", - " 21.41133186, 21.30095659, 20.56512141, 19.2406181 , 18.02649007]))" + "read_mist_models.ISOCMD" ] }, "execution_count": 9, @@ -850,17 +386,14 @@ } ], "source": [ - "import numpy as np\n", - "\n", - "xs, ys = np.transpose(coords)\n", - "xs, ys" + "type(iso)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To display the polygon, we'll draw the figure again and use `plt.plot` to draw the polygon." + "It contains a list of arrays, one for each isochrone." ] }, { @@ -870,7 +403,295 @@ "outputs": [ { "data": { - "image/png": "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\n", + "text/plain": [ + "list" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(iso.isocmds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We only got one isochrone." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(iso.isocmds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So we can select it like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "iso_array = iso.isocmds[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's a NumPy array:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(iso_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But it's an unusual NumPy array, because it contains names for the columns." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype([('EEP', '= 0) & (iso_array['phase'] < 3)\n", + "phase_mask.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "354" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "main_sequence = iso_array[phase_mask]\n", + "len(main_sequence)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The other two columns we'll use are `PS_g` and `PS_i`, which contain simulated photometry data for stars with the given age and metallicity, based on a model of the Pan-STARRS sensors.\n", + "\n", + "We'll use these columns to superimpose the isochrone on the color-magnitude diagram, but first we have to use a [distance modulus](https://en.wikipedia.org/wiki/Distance_modulus) to scale the isochrone based on the estimated distance of GD-1.\n", + "\n", + "We can use the `Distance` object from Astropy to compute the distance modulus." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14.4604730134524" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import astropy.coordinates as coord\n", + "import astropy.units as u\n", + "\n", + "distance = 7.8 * u.kpc\n", + "distmod = coord.Distance(distance).distmod.value\n", + "distmod" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can compute the scaled magnitude and color of the isochrone." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "g = main_sequence['PS_g'] + distmod\n", + "gi = main_sequence['PS_g'] - main_sequence['PS_i']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make this data easier to work with, we'll put it in a Pandas `Series` with that contains `gi` as the index and `g` as the values." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.195021 28.294743\n", + "2.166076 28.189718\n", + "2.129312 28.051761\n", + "2.093721 27.916194\n", + "2.058585 27.780024\n", + "dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "iso_series = pd.Series(g, index=gi)\n", + "iso_series.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot it on the color-magnitude diagram like this." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", "text/plain": [ "
    " ] @@ -883,18 +704,408 @@ ], "source": [ "plot_cmd(photo_table)\n", - "plt.plot(xs, ys);" + "iso_series.plot();" ] }, { "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", + "The theoretical isochrone passes through the overdense region where we expect to find stars in GD-1.\n", "\n", - "If you want a polygon with more points (or fewer), you can change the argument to `ginput`.\n", + "Let's save this result so we can reload it later without repeating the steps in this section." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'gd1_isochrone.hdf5'\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" + "iso_series.to_hdf(filename, 'iso_series')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Making a polygon\n", + "\n", + "The following cell downloads the isochrone series we made in the previous section, if necessary." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from wget import download\n", + "\n", + "filename = 'gd1_isochrone.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": "markdown", + "metadata": {}, + "source": [ + "Now we can read the isochrone back in." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.195021 28.294743\n", + "2.166076 28.189718\n", + "2.129312 28.051761\n", + "2.093721 27.916194\n", + "2.058585 27.780024\n", + "dtype: float64" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iso_series = pd.read_hdf(filename, 'iso_series')\n", + "iso_series.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To select the stars in the overdense region of the color-magnitude diagram, we want to stretch the isochrone into a polygon.\n", + "\n", + "We'll use the following formulas to compute the left and right sides of the polygons." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "g = iso_series.to_numpy()\n", + "gi = iso_series.index" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "left_gi = gi - 0.4 * (g/28)**5\n", + "right_gi = gi + 0.7 * (g/28)**5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To explain the terms:\n", + "\n", + "* We divide magnitudes by 28 to normalize them onto the range from 0 to 1.\n", + "\n", + "* Raising the normalized magnitudes to the 5th power [DOES WHAT?]\n", + "\n", + "* Then we add and subtract the result from `gi` to shift the isochrone left and right. The factors 0.4 and 0.7 were chosen by eye to enclose the overdense region." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make the shifted isochrones easier to work with, we'll put them in a Pandas `Series` with that contains both `g` and the scaled values of `gi`." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.773520 28.294743\n", + "1.752340 28.189718\n", + "1.725601 28.051761\n", + "1.699671 27.916194\n", + "1.674053 27.780024\n", + "dtype: float64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "left_series = pd.Series(g, index=left_gi)\n", + "left_series.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.932648 28.294743\n", + "2.890114 28.189718\n", + "2.835806 28.051761\n", + "2.783308 27.916194\n", + "2.731517 27.780024\n", + "dtype: float64" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "right_series = pd.Series(g, index=right_gi)\n", + "right_series.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot them on the color-magnitude diagram like this." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "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", + "left_series.plot()\n", + "right_series.plot();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like the scaled isochrones bound the overdense area well, but they also include stars with magnitudes higher than we expect for stars in GD-1, so we'll use another mask to limit the range of `g`." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "117" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g_mask = (g > 18.0) & (g < 21.5)\n", + "g_mask.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(117, 117)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "left = left_series[g_mask]\n", + "right = right_series[g_mask]\n", + "\n", + "len(left), len(right)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what they look like:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "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", + "left.plot()\n", + "right.plot();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we want to assemble the two halves into a polygon. We can use `append` to make a new `Series` that contains both halves.\n", + "\n", + "And we'll use the slice `[::-1]` to reverse the elements of `right` so the result forms a loop. [See here for an explanation of this idiom](https://stackoverflow.com/questions/5876998/reversing-a-list-using-slice-notation)." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.587571 21.411746\n", + "0.567801 21.322466\n", + "0.548134 21.233380\n", + "0.528693 21.144427\n", + "0.509300 21.054549\n", + "dtype: float64" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loop = left.append(right[::-1])\n", + "loop.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following lines add metadata by assigning names to the values and the index in `loop`." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gi\n", + "0.587571 21.411746\n", + "0.567801 21.322466\n", + "0.548134 21.233380\n", + "0.528693 21.144427\n", + "0.509300 21.054549\n", + "Name: g, dtype: float64" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loop.name = 'g'\n", + "loop.index.name = 'gi'\n", + "loop.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "loop.plot()\n", + "plot_cmd(photo_table)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we'll use this polygon to identify stars in the overdense region." ] }, { @@ -903,32 +1114,377 @@ "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", + "Matplotlib provides a `Path` object that we can use to check which points fall in the polygon we just constructed.\n", "\n", - "Here's how we make a `Path` using a list of coordinates." + "To make a `Path`, we need a list of coordinates in the form of an array with two columns.\n", + "\n", + "Currently `loop` is a `Series` with the values of `gi` in the index:" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Path(array([[ 0.26433692, 17.84253127],\n", - " [ 0.35394265, 18.799117 ],\n", - " [ 0.47491039, 19.68211921],\n", - " [ 0.63172043, 20.45474614],\n", - " [ 0.76612903, 20.78587196],\n", - " [ 0.80645161, 21.41133186],\n", - " [ 0.58691756, 21.30095659],\n", - " [ 0.39426523, 20.56512141],\n", - " [ 0.22401434, 19.2406181 ],\n", - " [ 0.19713262, 18.02649007]]), None)" + "gi\n", + "0.587571 21.411746\n", + "0.567801 21.322466\n", + "0.548134 21.233380\n", + "0.528693 21.144427\n", + "0.509300 21.054549\n", + "Name: g, dtype: float64" ] }, - "execution_count": 11, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loop.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can move them out of the index into a column using `reset_index`:" + ] + }, + { + "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", + "
    gig
    00.58757121.411746
    10.56780121.322466
    20.54813421.233380
    30.52869321.144427
    40.50930021.054549
    \n", + "
    " + ], + "text/plain": [ + " gi g\n", + "0 0.587571 21.411746\n", + "1 0.567801 21.322466\n", + "2 0.548134 21.233380\n", + "3 0.528693 21.144427\n", + "4 0.509300 21.054549" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loop_df = loop.reset_index()\n", + "loop_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is a `DataFrame` with one column for `gi` and one column for `g`, so we can pass it to `Path` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Path(array([[ 0.58757135, 21.41174601],\n", + " [ 0.56780097, 21.32246601],\n", + " [ 0.54813409, 21.23338001],\n", + " [ 0.5286928 , 21.14442701],\n", + " [ 0.50929987, 21.05454901],\n", + " [ 0.48991266, 20.96383501],\n", + " [ 0.47084777, 20.87386601],\n", + " [ 0.45222635, 20.78511001],\n", + " [ 0.43438902, 20.69865301],\n", + " [ 0.42745198, 20.66469601],\n", + " [ 0.42067029, 20.63135301],\n", + " [ 0.41402867, 20.59850601],\n", + " [ 0.40738016, 20.56529901],\n", + " [ 0.40088387, 20.53264001],\n", + " [ 0.39449608, 20.50023501],\n", + " [ 0.38843797, 20.46871801],\n", + " [ 0.38251577, 20.43765101],\n", + " [ 0.3766547 , 20.40653701],\n", + " [ 0.37088531, 20.37564701],\n", + " [ 0.36522325, 20.34505401],\n", + " [ 0.35962415, 20.31443001],\n", + " [ 0.35413292, 20.28413501],\n", + " [ 0.34871894, 20.25390101],\n", + " [ 0.34339273, 20.22385701],\n", + " [ 0.33815825, 20.19395801],\n", + " [ 0.33305724, 20.16427301],\n", + " [ 0.32820637, 20.13508501],\n", + " [ 0.32348139, 20.10604901],\n", + " [ 0.31883343, 20.07716101],\n", + " [ 0.31425423, 20.04833101],\n", + " [ 0.30974976, 20.01961701],\n", + " [ 0.30531997, 19.99097001],\n", + " [ 0.30097354, 19.96246401],\n", + " [ 0.29669999, 19.93401801],\n", + " [ 0.29250157, 19.90573101],\n", + " [ 0.28837983, 19.87746501],\n", + " [ 0.28441584, 19.84955001],\n", + " [ 0.28065057, 19.82188301],\n", + " [ 0.27700644, 19.79450101],\n", + " [ 0.27342328, 19.76713801],\n", + " [ 0.26989305, 19.73985301],\n", + " [ 0.26641258, 19.71265801],\n", + " [ 0.26298257, 19.68540001],\n", + " [ 0.25960216, 19.65824401],\n", + " [ 0.2562733 , 19.63113701],\n", + " [ 0.25299978, 19.60409301],\n", + " [ 0.24977307, 19.57714401],\n", + " [ 0.24660506, 19.55024001],\n", + " [ 0.24348829, 19.52341001],\n", + " [ 0.24042159, 19.49666601],\n", + " [ 0.23741737, 19.46998501],\n", + " [ 0.23447423, 19.44339301],\n", + " [ 0.23158726, 19.41688701],\n", + " [ 0.22876474, 19.39045101],\n", + " [ 0.22600432, 19.36410901],\n", + " [ 0.22330395, 19.33786601],\n", + " [ 0.220663 , 19.31170101],\n", + " [ 0.21808571, 19.28560101],\n", + " [ 0.21557456, 19.25960101],\n", + " [ 0.21312279, 19.23368701],\n", + " [ 0.21073349, 19.20785601],\n", + " [ 0.20840975, 19.18210401],\n", + " [ 0.20614799, 19.15640601],\n", + " [ 0.20395119, 19.13076401],\n", + " [ 0.20182156, 19.10523201],\n", + " [ 0.19975572, 19.07977101],\n", + " [ 0.19775195, 19.05436401],\n", + " [ 0.19581903, 19.02902801],\n", + " [ 0.19395701, 19.00376101],\n", + " [ 0.19216276, 18.97857301],\n", + " [ 0.19044513, 18.95347601],\n", + " [ 0.1888007 , 18.92850001],\n", + " [ 0.18723796, 18.90368201],\n", + " [ 0.18576648, 18.87905401],\n", + " [ 0.18438763, 18.85466301],\n", + " [ 0.18310871, 18.83056001],\n", + " [ 0.18193706, 18.80672701],\n", + " [ 0.18087817, 18.78327401],\n", + " [ 0.17993184, 18.76015001],\n", + " [ 0.17910244, 18.73740501],\n", + " [ 0.17838817, 18.71496101],\n", + " [ 0.17779005, 18.69282101],\n", + " [ 0.177312 , 18.67099501],\n", + " [ 0.17694971, 18.64944001],\n", + " [ 0.1767112 , 18.62815801],\n", + " [ 0.17659065, 18.60714001],\n", + " [ 0.17658939, 18.58636601],\n", + " [ 0.17671618, 18.56585701],\n", + " [ 0.17696696, 18.54562201],\n", + " [ 0.17733781, 18.52565801],\n", + " [ 0.1778346 , 18.50597901],\n", + " [ 0.17846661, 18.48656801],\n", + " [ 0.17922891, 18.46742401],\n", + " [ 0.18012796, 18.44859001],\n", + " [ 0.18116197, 18.43005501],\n", + " [ 0.18233604, 18.41181501],\n", + " [ 0.18363223, 18.39379401],\n", + " [ 0.18506009, 18.37602901],\n", + " [ 0.18660932, 18.35862101],\n", + " [ 0.18829849, 18.34153201],\n", + " [ 0.19012805, 18.32480701],\n", + " [ 0.19210919, 18.30851301],\n", + " [ 0.19422686, 18.29250401],\n", + " [ 0.1964951 , 18.27685701],\n", + " [ 0.19890209, 18.26156301],\n", + " [ 0.20145338, 18.24666001],\n", + " [ 0.20417715, 18.23260501],\n", + " [ 0.20705285, 18.21898101],\n", + " [ 0.21005661, 18.20562501],\n", + " [ 0.21319339, 18.19254201],\n", + " [ 0.22126873, 18.16185301],\n", + " [ 0.2300065 , 18.13259301],\n", + " [ 0.23950909, 18.10508001],\n", + " [ 0.24974677, 18.07932501],\n", + " [ 0.26066153, 18.05527801],\n", + " [ 0.27224553, 18.03295501],\n", + " [ 0.28447607, 18.01227601],\n", + " [ 0.40566013, 18.01227601],\n", + " [ 0.39412682, 18.03295501],\n", + " [ 0.38329907, 18.05527801],\n", + " [ 0.37320316, 18.07932501],\n", + " [ 0.36384734, 18.10508001],\n", + " [ 0.35529237, 18.13259301],\n", + " [ 0.34756872, 18.16185301],\n", + " [ 0.34056407, 18.19254201],\n", + " [ 0.33788593, 18.20562501],\n", + " [ 0.33535176, 18.21898101],\n", + " [ 0.33295648, 18.23260501],\n", + " [ 0.33072983, 18.24666001],\n", + " [ 0.32870734, 18.26156301],\n", + " [ 0.32684482, 18.27685701],\n", + " [ 0.3251355 , 18.29250401],\n", + " [ 0.32359167, 18.30851301],\n", + " [ 0.32219665, 18.32480701],\n", + " [ 0.32097089, 18.34153201],\n", + " [ 0.31990093, 18.35862101],\n", + " [ 0.31898485, 18.37602901],\n", + " [ 0.3182056 , 18.39379401],\n", + " [ 0.31756993, 18.41181501],\n", + " [ 0.31706705, 18.43005501],\n", + " [ 0.31671781, 18.44859001],\n", + " [ 0.3165174 , 18.46742401],\n", + " [ 0.31646817, 18.48656801],\n", + " [ 0.3165622 , 18.50597901],\n", + " [ 0.31680458, 18.52565801],\n", + " [ 0.31718682, 18.54562201],\n", + " [ 0.31770268, 18.56585701],\n", + " [ 0.31835632, 18.58636601],\n", + " [ 0.31915162, 18.60714001],\n", + " [ 0.32007915, 18.62815801],\n", + " [ 0.3211385 , 18.64944001],\n", + " [ 0.32233599, 18.67099501],\n", + " [ 0.32366367, 18.69282101],\n", + " [ 0.32512771, 18.71496101],\n", + " [ 0.32672398, 18.73740501],\n", + " [ 0.32845154, 18.76015001],\n", + " [ 0.33031546, 18.78327401],\n", + " [ 0.33230964, 18.80672701],\n", + " [ 0.33443651, 18.83056001],\n", + " [ 0.3366864 , 18.85466301],\n", + " [ 0.3390529 , 18.87905401],\n", + " [ 0.34152681, 18.90368201],\n", + " [ 0.34410502, 18.92850001],\n", + " [ 0.34677677, 18.95347601],\n", + " [ 0.34953217, 18.97857301],\n", + " [ 0.35237348, 19.00376101],\n", + " [ 0.35529144, 19.02902801],\n", + " [ 0.35828883, 19.05436401],\n", + " [ 0.36136575, 19.07977101],\n", + " [ 0.36451277, 19.10523201],\n", + " [ 0.36773241, 19.13076401],\n", + " [ 0.37102978, 19.15640601],\n", + " [ 0.37440044, 19.18210401],\n", + " [ 0.37784139, 19.20785601],\n", + " [ 0.38135736, 19.23368701],\n", + " [ 0.38494552, 19.25960101],\n", + " [ 0.388603 , 19.28560101],\n", + " [ 0.39233725, 19.31170101],\n", + " [ 0.39614435, 19.33786601],\n", + " [ 0.40002069, 19.36410901],\n", + " [ 0.40396796, 19.39045101],\n", + " [ 0.40798805, 19.41688701],\n", + " [ 0.41208235, 19.44339301],\n", + " [ 0.41624335, 19.46998501],\n", + " [ 0.42047622, 19.49666601],\n", + " [ 0.42478124, 19.52341001],\n", + " [ 0.42914714, 19.55024001],\n", + " [ 0.43357463, 19.57714401],\n", + " [ 0.43806989, 19.60409301],\n", + " [ 0.44262347, 19.63113701],\n", + " [ 0.44724247, 19.65824401],\n", + " [ 0.4519225 , 19.68540001],\n", + " [ 0.45666424, 19.71265801],\n", + " [ 0.46146067, 19.73985301],\n", + " [ 0.46631851, 19.76713801],\n", + " [ 0.47124047, 19.79450101],\n", + " [ 0.47623175, 19.82188301],\n", + " [ 0.48136578, 19.84955001],\n", + " [ 0.48671855, 19.87746501],\n", + " [ 0.49225451, 19.90573101],\n", + " [ 0.49787627, 19.93401801],\n", + " [ 0.50358931, 19.96246401],\n", + " [ 0.50938655, 19.99097001],\n", + " [ 0.51528266, 20.01961701],\n", + " [ 0.52126534, 20.04833101],\n", + " [ 0.52733726, 20.07716101],\n", + " [ 0.53348957, 20.10604901],\n", + " [ 0.53973535, 20.13508501],\n", + " [ 0.54612384, 20.16427301],\n", + " [ 0.55279781, 20.19395801],\n", + " [ 0.55962597, 20.22385701],\n", + " [ 0.56656311, 20.25390101],\n", + " [ 0.57360789, 20.28413501],\n", + " [ 0.58074299, 20.31443001],\n", + " [ 0.5880138 , 20.34505401],\n", + " [ 0.59535596, 20.37564701],\n", + " [ 0.60283203, 20.40653701],\n", + " [ 0.61042265, 20.43765101],\n", + " [ 0.61808231, 20.46871801],\n", + " [ 0.62591386, 20.50023501],\n", + " [ 0.63413647, 20.53264001],\n", + " [ 0.64249372, 20.56529901],\n", + " [ 0.65104657, 20.59850601],\n", + " [ 0.659584 , 20.63135301],\n", + " [ 0.66830253, 20.66469601],\n", + " [ 0.67722496, 20.69865301],\n", + " [ 0.70017638, 20.78511001],\n", + " [ 0.72413715, 20.87386601],\n", + " [ 0.74870785, 20.96383501],\n", + " [ 0.77374297, 21.05454901],\n", + " [ 0.7988286 , 21.14442701],\n", + " [ 0.8240001 , 21.23338001],\n", + " [ 0.84950281, 21.32246601],\n", + " [ 0.8752204 , 21.41174601]]), None)" + ] + }, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -936,7 +1492,7 @@ "source": [ "from matplotlib.path import Path\n", "\n", - "path = Path(coords)\n", + "path = Path(loop_df)\n", "path" ] }, @@ -944,6 +1500,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "The result is a `Path` object that represents the polygon.\n", + "\n", "`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." @@ -951,12 +1509,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "points = [(0.4, 20), \n", - " (0.4, 30)]" + " (0.4, 16)]" ] }, { @@ -968,7 +1526,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -977,7 +1535,7 @@ "array([ True, False])" ] }, - "execution_count": 13, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1008,7 +1566,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -1024,7 +1582,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -1037,7 +1595,7 @@ "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." + "`candidate_df` is the Pandas DataFrame that contains the results from Lesson 4, 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." ] }, { @@ -1063,7 +1621,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1096,7 +1654,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 44, "metadata": { "scrolled": true }, @@ -1128,7 +1686,6 @@ " pmra\n", " pmdec\n", " parallax\n", - " parallax_error\n", " radial_velocity\n", " phi1\n", " phi2\n", @@ -1147,7 +1704,6 @@ " -3.770522\n", " -12.490482\n", " 0.791393\n", - " 0.271754\n", " NaN\n", " -59.630489\n", " -1.216485\n", @@ -1164,7 +1720,6 @@ " -5.941679\n", " -11.346409\n", " 0.307456\n", - " 0.199466\n", " NaN\n", " -59.247330\n", " -2.016078\n", @@ -1181,7 +1736,6 @@ " -3.897001\n", " -12.702780\n", " 0.779463\n", - " 0.223692\n", " NaN\n", " -59.133391\n", " -2.306901\n", @@ -1198,7 +1752,6 @@ " -4.335041\n", " -14.492309\n", " 0.314514\n", - " 0.102775\n", " NaN\n", " -59.785300\n", " -1.594569\n", @@ -1215,7 +1768,6 @@ " -7.172931\n", " -12.291499\n", " 0.425404\n", - " 0.337689\n", " NaN\n", " -59.557744\n", " -1.682147\n", @@ -1236,22 +1788,22 @@ "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", + " radial_velocity phi1 phi2 pm_phi1 pm_phi2 g_mean_psf_mag \\\n", + "0 NaN -59.630489 -1.216485 -7.361363 -0.592633 NaN \n", + "1 NaN -59.247330 -2.016078 -7.527126 1.748779 17.8978 \n", + "2 NaN -59.133391 -2.306901 -7.560608 -0.741800 19.2873 \n", + "3 NaN -59.785300 -1.594569 -9.357536 -1.218492 16.9238 \n", + "4 NaN -59.557744 -1.682147 -9.000831 2.334407 19.9242 \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 " + " i_mean_psf_mag \n", + "0 NaN \n", + "1 17.517401 \n", + "2 17.678101 \n", + "3 16.478100 \n", + "4 18.334000 " ] }, - "execution_count": 17, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1281,7 +1833,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -1290,7 +1842,7 @@ "(7346, 3724, 7346)" ] }, - "execution_count": 18, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1308,7 +1860,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -1321,7 +1873,6 @@ "pmra\n", "pmdec\n", "parallax\n", - "parallax_error\n", "radial_velocity\n", "phi1\n", "phi2\n", @@ -1357,7 +1908,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -1376,7 +1927,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1396,7 +1947,7 @@ "Name: color, Length: 7346, dtype: bool" ] }, - "execution_count": 21, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1414,7 +1965,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -1423,7 +1974,7 @@ "3724" ] }, - "execution_count": 22, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1456,7 +2007,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -1523,7 +2074,7 @@ "4 1.5902 19.9242" ] }, - "execution_count": 23, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1542,7 +2093,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -1551,7 +2102,7 @@ "array([False, False, False, ..., False, False, False])" ] }, - "execution_count": 24, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1570,16 +2121,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "481" + "464" ] }, - "execution_count": 25, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1597,7 +2148,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ @@ -1613,12 +2164,12 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 54, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -1631,9 +2182,10 @@ ], "source": [ "plot_cmd(photo_table)\n", - "plt.plot(xs, ys)\n", + "plt.plot(gi, g)\n", + "loop.plot()\n", "\n", - "plt.plot(selected2['color'], selected2['mag'], 'gx');" + "plt.plot(selected2['color'], selected2['mag'], 'g.');" ] }, { @@ -1647,12 +2199,12 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 55, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -1701,7 +2253,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -1713,14 +2265,14 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "-rw-rw-r-- 1 downey downey 2.0M Nov 18 19:28 gd1_merged.hdf5\r\n" + "-rw-rw-r-- 1 downey downey 1.1M Dec 14 14:24 gd1_merged.hdf5\r\n" ] } ], @@ -1749,30 +2301,20 @@ "\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", + "In this lesson we used an isochrone to derive a polygon, which we used to select stars based on photometry. \n", + "So it is important to record the polygon 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." + "Here's how we can save it in an HDF file." ] }, { "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "coords_df = pd.DataFrame(coords)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "filename = 'gd1_polygon.hdf5'\n", - "coords_df.to_hdf(filename, 'coords_df')" + "loop.to_hdf(filename, 'loop')" ] }, { @@ -1784,12 +2326,11 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ - "coords2_df = pd.read_hdf(filename, 'coords_df')\n", - "coords2 = coords2_df.to_numpy()" + "loop2 = pd.read_hdf(filename, 'loop')" ] }, { @@ -1801,7 +2342,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -1810,13 +2351,15 @@ "True" ] }, - "execution_count": 34, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "np.all(coords2 == coords)" + "import numpy as np\n", + "\n", + "np.all(loop == loop2)" ] }, { diff --git a/_sources/07_plot.ipynb b/_sources/07_plot.ipynb index 15e961c..5765556 100644 --- a/_sources/07_plot.ipynb +++ b/_sources/07_plot.ipynb @@ -1,5 +1,31 @@ { "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: \"Title\"\n", + "teaching: 3000\n", + "exercises: 0\n", + "questions:\n", + "\n", + "- \"Question?\"\n", + "\n", + "objectives:\n", + "\n", + "- \"Objective.\"\n", + "\n", + "keypoints:\n", + "\n", + "- \"Keypoint.\"\n", + "\n", + "---\n", + "FIXME\n", + "\n", + "{% include links.md %}\n" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/_sources/AstronomicalData/01_query.ipynb b/_sources/AstronomicalData/01_query.ipynb deleted file mode 100644 index 9a7f17d..0000000 --- a/_sources/AstronomicalData/01_query.ipynb +++ /dev/null @@ -1,1642 +0,0 @@ -{ - "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/_sources/AstronomicalData/02_coords.ipynb b/_sources/AstronomicalData/02_coords.ipynb deleted file mode 100644 index 54821b3..0000000 --- a/_sources/AstronomicalData/02_coords.ipynb +++ /dev/null @@ -1,1970 +0,0 @@ -{ - "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/_sources/AstronomicalData/README.md b/_sources/AstronomicalData/README.md deleted file mode 100644 index 190277b..0000000 --- a/_sources/AstronomicalData/README.md +++ /dev/null @@ -1,172 +0,0 @@ -# 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/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md b/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md deleted file mode 100644 index 89bc0f2..0000000 --- a/_sources/AstronomicalData/_build/html/_static/vendor/lato_latin-ext/1.44.1/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -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/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md b/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md deleted file mode 100644 index 89bc0f2..0000000 --- a/_sources/AstronomicalData/_build/html/_static/vendor/open-sans_all/1.44.1/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -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/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb b/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb deleted file mode 100644 index 94813e9..0000000 --- a/_sources/AstronomicalData/_build/jupyter_execute/01_query.ipynb +++ /dev/null @@ -1,1640 +0,0 @@ -{ - "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/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb b/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb deleted file mode 100644 index 7707176..0000000 --- a/_sources/AstronomicalData/_build/jupyter_execute/02_coords.ipynb +++ /dev/null @@ -1,1966 +0,0 @@ -{ - "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/_sources/last_resort.ipynb b/_sources/last_resort.ipynb index 7982d3c..05c6260 100644 --- a/_sources/last_resort.ipynb +++ b/_sources/last_resort.ipynb @@ -13,7 +13,7 @@ "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!" + "The following cell installs the libraries we need that are not already in the Colab runtime environment." ] }, { @@ -32,14 +32,21 @@ "IN_COLAB = 'google.colab' in sys.modules\n", "\n", "if IN_COLAB:\n", - " !pip install astroquery astro-gala pyia" + " !pip install astroquery astro-gala" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That should be everything you need. Now you can type code and run it in the following cells." + "That should be everything you need. \n", + "\n", + "Before you get started, you probably want to press the Save button!\n", + "That will allow you to save your copy of this notebook in your Google Drive.\n", + "\n", + "If you don't save this notebook, any changes you make will be lost if you close the browser window or leave it idle too long.\n", + "\n", + "Now you can type code and run it in the following cells." ] }, { diff --git a/_sources/test_setup.ipynb b/_sources/test_setup.ipynb index f65a554..ece282a 100644 --- a/_sources/test_setup.ipynb +++ b/_sources/test_setup.ipynb @@ -6,16 +6,128 @@ "source": [ "# Data Carpentry Astronomy Workshop\n", "\n", - "This notebook imports the libraries we need for the workshop.\n", + "Please run this notebook before the workshop. There are three sections:\n", "\n", - "If any of them are missing, you'll get an error message.\n", + "1. A short introduction to Jupyter, with pointers to more resources.\n", + "\n", + "2. `import` statements to check whether you have everything installed that we need.\n", + "\n", + "3. A cell where you will paste a line of code you copy from Slack, to check for a potential problem with \"smart\" quotes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction to Jupyter\n", + "\n", + "This is a Jupyter notebook, which is a computational document that contains text, code, and results.\n", + "\n", + "There are several development environments you can use to work with notebooks. Currently the two most common are:\n", + "\n", + "* Jupyter Classic Notebook, and\n", + "\n", + "* JupyterLab, which is a newer environment with some improved features, but also some limitations. \n", + "\n", + "During the workshop, we will use the Classic Notebook environment. If you are new to Jupyter, we suggest you should, too.\n", + "\n", + "If you are familiar with JupyterLab and you would rather use it for the workshop, that's fine. Just be aware that there will be differences between your environment and ours.\n", + "\n", + "If you are new to Jupyter, you can [read about it here](https://jupyter.org/try) and follow the tutorial called \"Try Classic Notebook\".\n", + "\n", + "You also might like [this tutorial from DataQuest](https://www.dataquest.io/blog/jupyter-notebook-tutorial/).\n", + "\n", + "The following sections introduce the features you will need for the workshop." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selecting and running cells\n", + "\n", + "Notebooks are divided into cells that contain either text or code.\n", + "\n", + "This cell is text; the following cell is code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "print('Hello')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To select a cell, click in the left margin next to the cell. You should see a blue frame surrounding the selected cell.\n", + "\n", + "To edit a code cell, click inside the cell. You should see a green frame around the selected cell, and you should see a cursor inside the cell.\n", + "\n", + "To edit a text cell, double-click inside the cell. Again, you should see a green frame around the selected cell, and you should see a cursor inside the cell.\n", + "\n", + "Text cells use the Markdown typesetting language, which [you can read about here](https://www.markdownguide.org/).\n", + "\n", + "To run a cell, hold down Shift and press Enter.\n", + "\n", + "* If you run a text cell, Jupyter formats the text and displays the result.\n", + "\n", + "* If you run a code cell, Jupyter runs the code in the cell and displays the result, if any.\n", + "\n", + "To try it out, select the previous code cell and press Shift-Enter. It should run the code and print `Hello`.\n", + "\n", + "Then edit this cell, change some of the text, and press Shift-Enter to format it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adding and removing cells\n", + "\n", + "You can add and remove cells from a notebook using the menu at the top of the page and the tool bar below the menu.\n", + "\n", + "Try the following exercises:\n", + "\n", + "1. From the Insert menu select \"Insert cell below\" to add a cell below this one. By default, you get a code cell, as you can see in the pull-down menu that says \"Code\".\n", + "\n", + "2. In the new cell, add a line of Python code and run it.\n", + "\n", + "3. Add another cell, select the new cell, and then click on the pull-down menu that says \"Code\". Select \"Markdown\". This makes the new cell a text cell.\n", + "\n", + "4. In the new cell, type some text and format it.\n", + "\n", + "5. Use the arrow buttons in the tool bar to move cells up and down.\n", + "\n", + "6. Use the cut, copy, and paste buttons to delete, add, and move cells.\n", + "\n", + "As you make changes, Jupyter saves your notebook automatically, but if you want to make sure, you can press the save button, which looks like a floppy disk from the 1990s.\n", + "\n", + "Finally, when you are done with a notebook, select \"Close and Halt\" from the File menu." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Check your installation\n", + "\n", + "Run the following cells to import the libraries we need for the workshop.\n", + "\n", + "If any of the libraries 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": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -24,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -32,9 +144,27 @@ "import numpy as np" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's make sure you have a recent version of Pandas.\n", + "\n", + "If the following cell causes an error, you probably have an old version of Pandas. Please update it before the workshop." + ] + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.Series([0]).to_numpy()" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -46,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -57,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -66,26 +196,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ "# Note: running this import statement opens a connection\n", "# to a Gaia server, so it will fail if you are not connected\n", @@ -98,11 +211,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "## Check for code-pasting problems\n", + "\n", "During the workshop, we might put 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 with smart quotes.\n", "\n", - "To check, following this link to [our Slack workspace](https://app.slack.com/client/T01DJHEP8Q1/C01D2TZA8SH/details/pins) and find the pinned message with the setup instructions.\n", + "To check, following this link to [our Slack workspace](https://app.slack.com/client/T01GF8N96TD/C01G8AS0QBG/details/pins) and find the pinned message with the setup instructions.\n", "It contains a line of Python code.\n", "\n", "Copy the code from Slack and paste it in the cell below.\n", diff --git a/index.html b/index.html index 4b8337a..acf63cd 100644 --- a/index.html +++ b/index.html @@ -97,12 +97,12 @@