{
 "metadata": {
  "name": "",
  "signature": "sha256:5e346059a27527fcdc5c6877901966c3aaeda4f1269706a5c0f414bd5881d062"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "# Why does one more minute let ephem find a sunset?"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import ephem"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "start1 = ephem.date('2013/11/26 18:37')\n",
      "start2 = ephem.date('2013/11/26 18:38')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "arctic = ephem.Observer()\n",
      "arctic.pressure = 0 \n",
      "arctic.horizon = '-0:34' \n",
      "arctic.lat, arctic.lon = '89:30', '0' \n",
      "\n",
      "arctic.date = start1\n",
      "try:\n",
      "    arctic.next_setting(ephem.Moon())\n",
      "except Exception as e:\n",
      "    print e\n",
      "\n",
      "m = ephem.Moon()\n",
      "arctic.date = start2\n",
      "setting = arctic.next_setting(m)\n",
      "print setting, 'gives altitude', m.alt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "'Moon' is still above the horizon at 2013/11/26 18:37:06\n",
        "2013/11/27 07:37:21 gives altitude -0:49:16.9\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "m = ephem.Moon()\n",
      "m.compute(arctic)\n",
      "m.alt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 5,
       "text": [
        "0.007962668314576149"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "arctic.date = '2013/11/26 00:00'\n",
      "dates = []\n",
      "altitudes = []\n",
      "azimuths = []\n",
      "for n in range(24 * 60 * 3):\n",
      "    arctic.date += ephem.minute\n",
      "    m.compute(arctic)\n",
      "    dates.append(arctic.date)\n",
      "    altitudes.append(m.alt)\n",
      "    azimuths.append(m.az)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plot(dates, altitudes)\n",
      "vlines([start1, setting], [-0.199], [0.099])\n",
      "hlines([arctic.horizon - m.radius], [4.1602e4 + 0.5], [4.1602e4 + 3.99])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "<matplotlib.collections.LineCollection at 0xb03c80c>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nAABJRU5ErkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0xaf36e4c>"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "class MyMoon(ephem.Moon):\n",
      "    def compute(self, observer):\n",
      "        ephem.Moon.compute(self, observer)\n",
      "        print '*', observer.date, self.alt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 8
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# From start1, the algorithm barely explores at all\n",
      "\n",
      "mm = MyMoon()\n",
      "arctic.date = start1\n",
      "try:\n",
      "    arctic.next_setting(mm)\n",
      "except Exception as e:\n",
      "    print e"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "* 2013/11/26 18:37:00 0:27:32.8\n",
        "* 2013/11/26 18:37:00 0:27:32.8\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "* 2013/11/26 18:38:06 0:27:21.3\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "'Moon' is still above the horizon at 2013/11/26 18:37:06\n"
       ]
      }
     ],
     "prompt_number": 9
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# From start2, it moves boldly forward to the setting time\n",
      "\n",
      "arctic.date = start2\n",
      "setting = arctic.next_setting(mm)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "* 2013/11/26 18:38:00 0:27:22.4\n",
        "* 2013/11/26 18:38:00 0:27:22.4\n",
        "* 2013/11/27 06:37:08 -0:38:25.0\n",
        "* 2013/11/27 06:38:08 -0:38:34.9\n",
        "* 2013/11/27 06:59:26 -0:42:12.8\n",
        "* 2013/11/27 06:59:26 -0:42:12.8\n",
        "* 2013/11/27 06:59:26 -0:42:12.8\n",
        "* 2013/11/27 18:59:26 -3:49:31.0\n",
        "* 2013/11/27 19:00:26 -3:49:42.4\n",
        "* 2013/11/27 19:22:09 -3:53:41.3\n",
        "* 2013/11/27 19:22:09 -3:53:41.3\n",
        "* 2013/11/27 13:10:47 -2:17:50.1\n",
        "* 2013/11/27 13:11:47 -2:18:08.4\n",
        "* 2013/11/27 08:19:29 -0:58:02.0\n",
        "* 2013/11/27 07:47:33 -0:51:19.0\n",
        "* 2013/11/27 07:37:53 -0:49:23.3\n",
        "* 2013/11/27 07:37:21 -0:49:17.0\n",
        "* 2013/11/27 07:37:21 -0:49:16.9\n",
        "* 2013/11/27 07:37:21 -0:49:16.9\n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# But why is the first search ending so soon?\n",
      "# Let's watch.\n",
      "\n",
      "import os, trace\n",
      "t = trace.Trace(count=0, trace=1, ignoredirs=[os.path.dirname(trace.__file__)])\n",
      "arctic.date = start1\n",
      "try:\n",
      "    t.runfunc(arctic.next_setting, mm)\n",
      "except Exception as e:\n",
      "    print e"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " --- modulename: __init__, funcname: next_setting\n",
        "__init__.py(461):         return self._riset_helper(body, start, use_center, False, False)\n",
        " --- modulename: __init__, funcname: _riset_helper\n",
        "__init__.py(367):         if isinstance(body, EarthSatellite):\n",
        "__init__.py(374):         def visit_transit():\n",
        "__init__.py(382):         def visit_antitransit():\n",
        "__init__.py(393):         if use_center:\n",
        "__init__.py(396):             use_radius = 1.0\n",
        "__init__.py(399):         original_date = self.date\n",
        "__init__.py(403):         if start is not None:\n",
        "__init__.py(405):         if previous:\n",
        "__init__.py(408):             self.date += default_newton_precision\n",
        "__init__.py(411):         body.compute(self)\n",
        "* 2013/11/26 18:37:00 0:27:32.8\n",
        "__init__.py(412):         heading_downward = (rising == previous) # \"==\" is inverted \"xor\"\n",
        "__init__.py(413):         if heading_downward:\n",
        "__init__.py(415):                              - self.horizon > tiny)\n",
        "__init__.py(420):         az = body.az\n",
        "__init__.py(421):         on_right_side_of_sky = ((rising == (az < pi)) # inverted \"xor\"\n",
        "__init__.py(426):         if on_lower_cusp and on_right_side_of_sky:\n",
        "__init__.py(427):             d0 = self.date\n",
        "__init__.py(432):         if heading_downward:\n",
        "__init__.py(433):             d1 = visit_antitransit()\n",
        " --- modulename: __init__, funcname: visit_antitransit\n",
        "__init__.py(383):             d = (previous and self._previous_antitransit(body)\n",
        "__init__.py(384):                  or self._next_antitransit(body)) # if-then\n",
        " --- modulename: __init__, funcname: _next_antitransit\n",
        "__init__.py(313):         return self._compute_transit(body, start, +1., pi)\n",
        " --- modulename: __init__, funcname: _compute_transit\n",
        "__init__.py(271):         if isinstance(body, EarthSatellite):\n",
        "__init__.py(278):         def f(d):\n",
        "__init__.py(283):         if start is not None:\n",
        "__init__.py(285):         sidereal_time = self.sidereal_time\n",
        "__init__.py(286):         body.compute(self)\n",
        "* 2013/11/26 18:37:00 0:27:32.8\n",
        "__init__.py(287):         ha = sidereal_time() - body.g_ra\n",
        "__init__.py(288):         ha_to_move = (offset - ha) % (sign * twopi)\n",
        "__init__.py(289):         if abs(ha_to_move) < tiny:\n",
        "__init__.py(291):         d = self.date + ha_to_move / twopi\n",
        "__init__.py(292):         result = Date(newton(f, d, d + minute))\n",
        " --- modulename: __init__, funcname: newton\n",
        "__init__.py(94):     f0, f1 = f(x0), f(x1)\n",
        " --- modulename: __init__, funcname: f\n",
        "__init__.py(279):             self.date = d\n",
        "__init__.py(280):             body.compute(self)\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "__init__.py(281):             return degrees(offset - sidereal_time() + body.g_ra).znorm\n",
        " --- modulename: __init__, funcname: f\n",
        "__init__.py(279):             self.date = d\n",
        "__init__.py(280):             body.compute(self)\n",
        "* 2013/11/26 18:38:06 0:27:21.3\n",
        "__init__.py(281):             return degrees(offset - sidereal_time() + body.g_ra).znorm\n",
        "__init__.py(95):     while f1 and abs(x1 - x0) > precision and f1 != f0:\n",
        "__init__.py(96):         x0, x1 = x1, x1 + (x1 - x0) / (f0/f1 - 1)\n",
        "__init__.py(97):         f0, f1 = f1, f(x1)\n",
        " --- modulename: __init__, funcname: f\n",
        "__init__.py(279):             self.date = d\n",
        "__init__.py(280):             body.compute(self)\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "__init__.py(281):             return degrees(offset - sidereal_time() + body.g_ra).znorm\n",
        "__init__.py(95):     while f1 and abs(x1 - x0) > precision and f1 != f0:\n",
        "__init__.py(96):         x0, x1 = x1, x1 + (x1 - x0) / (f0/f1 - 1)\n",
        "__init__.py(97):         f0, f1 = f1, f(x1)\n",
        " --- modulename: __init__, funcname: f\n",
        "__init__.py(279):             self.date = d\n",
        "__init__.py(280):             body.compute(self)\n",
        "* 2013/11/26 18:37:06 0:27:31.7\n",
        "__init__.py(281):             return degrees(offset - sidereal_time() + body.g_ra).znorm\n",
        "__init__.py(95):     while f1 and abs(x1 - x0) > precision and f1 != f0:\n",
        "__init__.py(98):     return x1\n",
        "__init__.py(293):         return result\n",
        "__init__.py(385):             if body.alt + body.radius * use_radius - self.horizon >= 0:\n",
        "__init__.py(386):                 raise AlwaysUpError('%r is still above the horizon at %s'\n",
        "__init__.py(387):                                     % (body.name, d))\n",
        "'Moon' is still above the horizon at 2013/11/26 18:37:06\n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Wait! Sunrise and sunset are searched for in the current\n",
      "# day in LOCAL time, not Universal Time, where the day\n",
      "# changes when the sun passes zero azimuth. Is that the\n",
      "# crucial difference between these two dates?\n",
      "\n",
      "plt.subplot(2, 1, 1)\n",
      "plot(dates, altitudes)\n",
      "hlines([arctic.horizon - m.radius], [4.1602e4 + 0.5], [4.1602e4 + 3.99])\n",
      "vlines([start1, setting], [-0.199], [0.099])\n",
      "plt.subplot(2, 1, 2)\n",
      "plot(dates, azimuths)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 12,
       "text": [
        "[<matplotlib.lines.Line2D at 0xb24334c>]"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nZOYRD7Nnw/vvw+bN8NBDRkdT9sx6LdLToV8/Neluwwbw9jY6orJl1utgZpaoAH74Qa1T+vbb9lin\n1KwdXlbI61NcZr0WyclqjH/dumrWe8WKRkdUtsx6HczO7ZuAtm5V48rnzrXHzd+sJK+PeZw/D0FB\n0Lw5fP659W/+wnVuXQF88w2EhKjO3meeMToa+8rO6/N//+feeX2s4ORJldenVy+YMwfymWYjRA5d\nfz0yMzN59tlnad++PW3atCEqKsrln/XZZ2pS0bffyiLVRrpyRc0kvXZN5ViqVs3oiOzrp5/UIIix\nY9VYf2kWEbejax/AF198Qe3atVm6dCl//PEHjz76KD1dmIc+Y4bqaNyyReWUsSMzdHhJXh/FDNci\nPl7l8p85U6V4sCMzXAd3o+ufbEhICH3/HBDudDqpUMw7hqbBa6/BypWqnblBg7KIUhTF2bMqr0+X\nLiqZmDQ1GCc6GgYNUk/F3bsbHY1wJ7pWAN5/jkNLTU0lJCSEt99+u8jHZncy7tmjbv61a5dVlOZn\n9KP9zz+rIbfPPy95fYw+9xUrYMwYtc5FQICxsRjJ6OvgrnT/3Hbq1Ck6duzI4MGD6devX5GOychQ\nj7WJiWpsuZ1v/kbbt08lEJs4UW3yh2ecefNg/Hg1xt/ON3/hOl2fAM6fP09wcDAfffQRjkJ6bm/O\nBtqmTRCzZgVRpYrq8JXFQ4yzbZtK7SB5fYylafDWW6rJJzYWHnjA6IiEEUojHXQ5TdOv62Ts2LF8\n/fXXNG3aNOe1devWUemmu3q5cuXIDim7k/Ghh9T6vXbtZLzVuHFqgs/48fq955o1KqXAsmWS2uFm\nd9+t0o3fc48+7+d0wosvqvkv332n3/ua3YkTajTgyZNGR2Kcm++dRaXrLXX27NnMnj27SN+bvXhI\nt26qk1GaGoyzdClMmKAqgdatjY7GvjIzVSV88qRa2a56daMjEu7OlJ+pjx5VN/+wMHj5ZaOjMR89\nK0O75fUpLr2uxdWr8Pe/q39HR0OVKvq8r7uQD4iuMWUFEBQEU6bAc88ZHYl9aRpMmqRGmUhqB2Ml\nJalcVw0bwqefgqen0REJqzBlBfDBB6qzURgjKwteeAESEtTNX1I7GOfcOZXryuFQEyBlvoUoTab8\ndZKbv3Ekr495HD+u8vqEhKgZvnLzF6XNlE8A4vbKYuzWlSuq8q1USY0wkSG3RVMW1+LAATUA4rXX\n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\nAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0xb0d620c>"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Yes! That is the solution: start1 and start2\n",
      "# are on different days, if we count days in local\n",
      "# solar time.\n",
      "\n",
      "arctic.date = start1\n",
      "m.compute(arctic)\n",
      "print m.az\n",
      "\n",
      "arctic.date = start2\n",
      "m.compute(arctic)\n",
      "print m.az"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "359:58:25.6\n",
        "0:12:58.6\n"
       ]
      }
     ],
     "prompt_number": 13
    }
   ],
   "metadata": {}
  }
 ]
}