The Kuiper belt is a ring of bodies in our Solar System that extends beyond the orbit of Neptune — the eight planet from the Sun. Pluto — the ninth planet from the Sun — was the first object to be discovered in the Kuiper belt. Correction, ex-planet, because in 2005 the International Astronomical Union (IAU) officially downgraded it to the status of dwarf planet.
Both the discovery of Pluto and its cancellation as a planet are due to the blink comparator1, a viewing apparatus used by astronomers to find differences between two photographs of the night sky. It permits rapidly switching from viewing one photograph to viewing the other, "blinking" back and forth between the two taken of the same area of the sky at different times. This allows to more easily spot objects in the night sky that changed position. In photographs taken a few days apart, rapidly moving objects such as asteroids, comets and planets stand out because they are jumping back and forth between two positions, while all the other fixed stars stand still. This also relates to the fact that the term planet is derived from the Greek πλανήτης (planētēs), which itself goes back to πλανὰομαι (planáomai), meaning wandering. The animation below shows an example of a blink comparator that switches back and forth between two images taken by Clyde Tombaugh on January 23 and 29, 1930 at the Lowell Observatory. Note that he marked his discovery of Pluto with arrows.
Michael E. Brown2, a professor of planetary astronomy at the California Institute of Technology (Caltech), has refined the idea of the blink comparator by learning a computer how to compare the photographs with each other. This way his team has discovered many trans-Neptunian objects, most notably, the dwarf planets Eris in the Kuiper belt and Sedna in the Oort cloud.
Brown had actually set himself as a target to discover a tenth planet in our Solar System, but ironically he did not increment but decrement the planet counter by one. The fact that Eris turned out to be 27% more massive than Pluto, led the IAU to define the term "planet" formally for the first time. This definition excluded Pluto and reclassified it as a member of the "dwarf planet" category. His twitter handle shows that Michael Brown has fully embraced the plutokiller nickname in the meantime.
Michael Brown published his memoirs about how he became responsible for the reclassification of Pluto from planet to dwarf planet in a 2010 book entitled How I Killed Pluto and Why It Had It Coming4.
In this assignment we will process text files containing photographs of the night sky. A photograph has $$m$$ lines containing $$n$$ characters each, and thus represents an $$m \times n$$ grid of characters. The grid contains a dash (-) at positions where no star was observed in the photograph, and an asterisk (*) at positions where a star was observed in the photograph. If we index the rows of the grid from top to bottom, and the columns from left to right, we can represent the position of each star as a tuple $$(r, k)$$ containing its row index $$r$$ (int) and column index $$k$$ (int).
----------*-
----*-----*-
----*-------
------------
------------
-*---*------
*-----*-*---
-**---------
----*-*-----
------*-*---
*------**-*-
The above example shows two photographs taken a few days apart of the same area of the sky at different times, where one photographs covers the other. Click here to simulate a switch comparator that allows to switch between both photographs. Do you see the moving stars that we have highlighted in bold face? These are our candidate planets. The goal of this assignment is to automatically find these candidate planets using a computer. This is done in the following way:
Write a function coordinates that takes the location (str) of a text file containing a photograph of the night sky. The function must return a set containing the positions of all stars observed in the photograph.
Write a function divergence that takes the locations (str) of two text files containing photographs of the night sky. The function must return a tuple containing two sets (set). The first set must contain the positions of all stars observed on the first photograph that are not on the second one. The second set must contain the positions of all stars observed on the second photograph that are not on the first one.
Write a function planets that takes the locations (str) of two text files containing photographs of the night sky. The function must return a dictionary (dict) whose keys are the positions of all stars observed on the second photograph that are not on the first one. Each position $$p$$ that is used a key in the dictionary must be mapped to the set of all stars observed on the first photograph that are not on the second one and that are closest to position $$p$$. The distance between two positions $$(r_1, k_1)$$ and $$(r_2, k_2)$$ must be computed as $$(r_1 - r_2)^2 + (k_1 - k_2)^2$$.
Write a function comparator that takes the locations (str) of two text files containing photographs of the night sky. The function must return a string (str) that represents an $$m \times n$$ grid made up of $$m$$ lines containing $$n$$ characters each. The values $$m$$ and $$n$$ correspond to the number of rows and columns in the two given photographs. The string returned by the function must represent the photograph obtained by overlaying the two given photographs. The positions in the grid where a fixed star occurs in the two given photographs must still be represented using an asterisk (*), but the positions where a star was only observed in the first photograph must be represented by the letter o, and the positions where a star was only observed in the second photograph must be represented by the letter n. The other positions must still be represented by a dash (-).
All functions that take the locations of two text files containing photographs of the night sky may assume that both photographs have the same size (same number of rows and columns) without having to check this explicitly.
The following interactive session assumes that the text files photo1.txt5 and photo2.txt6 are located in the current directory.
>>> coordinates('photo1.txt7')
{(10, 8), (5, 5), (6, 8), (6, 6), (7, 1), (10, 7), (9, 8), (10, 10), (6, 0), (1, 4), (0, 10), (1, 10), (5, 1), (8, 6), (10, 0), (9, 6), (2, 4), (7, 2), (8, 4)}
>>> coordinates('photo2.txt8')
{(10, 8), (4, 7), (6, 8), (7, 1), (10, 7), (10, 10), (9, 8), (6, 0), (0, 7), (1, 4), (7, 7), (8, 7), (1, 10), (5, 1), (10, 0), (9, 6), (2, 4), (7, 2), (8, 4)}
>>> divergence('photo1.txt9', 'photo2.txt10')
({(8, 6), (5, 5), (0, 10), (6, 6)}, {(4, 7), (7, 7), (0, 7), (8, 7)})
>>> planets('photo1.txt11', 'photo2.txt12')
{(4, 7): {(5, 5), (6, 6)}, (8, 7): {(8, 6)}, (7, 7): {(8, 6), (6, 6)}, (0, 7): {(0, 10)}}
>>> print(comparator('photo1.txt13', 'photo2.txt14'))
-------n--o-
----*-----*-
----*-------
------------
-------n----
-*---o------
*-----o-*---
-**----n----
----*-on----
------*-*---
*------**-*-
If we put the two photographs from the above example on top of each other, we obtain the result that is graphically represented in the figure below. The dictionary returned by the function planets represents a mapping that has been indicated using blue arrows.
This assignment first appeared during an examination on January 20, 2016. Coincidence or not, but on the very same day The Astronomical Journal published an article15 in which Michael E. Brown and his colleague Konstantin Batygin from the California Institute of Technology predict the location where a new planet must be located at the outskirts of our Solar System.
Now, Brown and Batygin need earthbound witnesses to confirm that Planet 9 exists. Just as Neptune was originally inferred by wobbles spotted in Uranus's orbit, the existence of Planet 9 can be inferred by the aligned Kuiper Belt objects. But without a verifiable observation, it's still a theoretical discovery. The pair are hoping to crowdsource that job, getting as many telescopes looking as possible across the globe. They've made the challenge easier by mapping Planet 9's orbit; now skywatchers have to pinpoint where it is on that very long path.
The name of the planet will be crowd-sourced too, if the researchers get their way — as opposed to being proposed by the discoverer and then approved by the International Astronomical Union (IAU), which is the usual way of doing things. Brown's and Batygin's personal name preference is "George", a hat-tip to British astronomer William Herschel, who discovered Uranus and wanted to name it Georgium Sidus (the Georgian Planet) after King George III. That might be a hard sell to the IAU — to say nothing of nearly all other stargazers, who tend to like a little more lyricism in their cosmos.
Whatever the planet is eventually called, its very existence will do more than simply add to the population of the solar system. It will also add to its mystery. Even in our tiny corner of the universe, it seems, there can still be big surprises lurking.