diff --git a/examples/Demo_SkyBrightness.ipynb b/examples/Demo_SkyBrightness.ipynb index c7b7f87..753b8f6 100644 --- a/examples/Demo_SkyBrightness.ipynb +++ b/examples/Demo_SkyBrightness.ipynb @@ -26,7 +26,7 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -58,9 +58,22 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "metadata": { - "collapsed": false + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "sns.set_style('whitegrid')\n", + "sns.set_context('talk')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true }, "outputs": [], "source": [ @@ -76,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -84,18 +97,18 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 7, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -110,9 +123,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 15, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -121,9 +134,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 16, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -132,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -141,6 +154,19 @@ "data": { "text/html": [ "
\n", + "\n", "\n", " \n", " \n", @@ -222,7 +248,7 @@ "1679567 0.000000 -0.794553 62086.151385 1.165654 0.835628 z" ] }, - "execution_count": 10, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -233,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -241,18 +267,18 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 11, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\nYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -274,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -284,18 +310,17 @@ "output_type": "stream", "text": [ "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", - "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n", - "/Users/rbiswas/soft/LSST/DarwinX86/healpy/1.8.1.lsst2+5/lib/python/healpy-1.8.1-py2.7-macosx-10.6-x86_64.egg/healpy/pixelfunc.py:1045: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.\n", - " if phi == None:\n" + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" ] }, { "data": { "text/plain": [ - "23.060143825936187" + "23.04318036522919" ] }, - "execution_count": 12, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -313,18 +338,26 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" + ] + }, { "data": { "text/plain": [ - "23.060143825936187" + "23.04318036522919" ] }, - "execution_count": 13, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -335,18 +368,26 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" + ] + }, { "data": { "text/plain": [ - "23.060143825936187" + "23.04318036522919" ] }, - "execution_count": 14, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -365,18 +406,26 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" + ] + }, { "data": { "text/plain": [ - "21.260523310530708" + "21.260547308777653" ] }, - "execution_count": 15, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -394,15 +443,36 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" + ] + }, { "data": { "text/html": [ "
\n", + "\n", "
\n", " \n", " \n", @@ -439,9 +509,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -449,14 +519,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -464,14 +534,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -479,14 +549,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -494,14 +564,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -509,14 +579,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -524,14 +594,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -539,14 +609,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -554,14 +624,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -569,14 +639,14 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -584,8 +654,8 @@ " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", "
2301.0917071.1579854.7171731.0916731.1580574.7172164.475412-0.410110-0.6306274.041352-0.5748793.55234924.08377421.26139724.03208321.261421
16795701.1644451.0328814.0303661.1644061.0329374.0303322.7366640.108490-0.53156236.007107-0.7134723.40264123.12571719.28533723.09839719.285369
16795691.1632251.0346414.0292861.1631861.0346974.0292512.7365500.108529-0.53371036.011715-0.7128863.40585223.12689219.28636323.09955919.286396
16795681.1620151.0363964.0281951.1619761.0364524.0281602.7364360.108568-0.53585236.016312-0.7122953.40905123.12806019.28738223.10071419.287414
16795671.1608091.0381544.0270891.1607711.0382094.0270542.7363210.108608-0.53799936.020920-0.7116953.41225423.12922219.28839623.10186319.288428
16795661.1596111.0399104.0259691.1595731.0399654.0259342.7362060.108647-0.54014536.025532-0.7110883.41545323.13037819.28940423.10300719.289436
16795651.1584221.0416604.0248391.1583841.0417154.0248032.7360920.108686-0.54228636.030128-0.7104763.41864023.13152819.29040423.10414419.290436
16795641.1572381.0434124.0236941.1572001.0434684.0236572.7359770.108725-0.54443136.034737-0.7098553.42183223.13267119.29140123.10527519.291432
16795631.1560611.0451644.0225341.1560231.0452194.0224972.7358620.108765-0.54657536.039345-0.7092283.42501923.13597319.29239123.10856419.292422
16795621.1511091.0526274.0174251.1510731.0526824.0173872.7353690.108933-0.55572936.059044-0.7064693.43859123.76045720.27959323.72402420.279621
\n", @@ -594,45 +664,45 @@ "text/plain": [ " airmass altitude azimuth moonRA moonDec moonAlt \\\n", "obsHistID \n", - "230 1.091707 1.157985 4.717173 4.475412 -0.410110 -0.630627 \n", - "1679570 1.164445 1.032881 4.030366 2.736664 0.108490 -0.531562 \n", - "1679569 1.163225 1.034641 4.029286 2.736550 0.108529 -0.533710 \n", - "1679568 1.162015 1.036396 4.028195 2.736436 0.108568 -0.535852 \n", - "1679567 1.160809 1.038154 4.027089 2.736321 0.108608 -0.537999 \n", - "1679566 1.159611 1.039910 4.025969 2.736206 0.108647 -0.540145 \n", - "1679565 1.158422 1.041660 4.024839 2.736092 0.108686 -0.542286 \n", - "1679564 1.157238 1.043412 4.023694 2.735977 0.108725 -0.544431 \n", - "1679563 1.156061 1.045164 4.022534 2.735862 0.108765 -0.546575 \n", - "1679562 1.151109 1.052627 4.017425 2.735369 0.108933 -0.555729 \n", + "230 1.091673 1.158057 4.717216 4.475412 -0.410110 -0.630627 \n", + "1679570 1.164406 1.032937 4.030332 2.736664 0.108490 -0.531562 \n", + "1679569 1.163186 1.034697 4.029251 2.736550 0.108529 -0.533710 \n", + "1679568 1.161976 1.036452 4.028160 2.736436 0.108568 -0.535852 \n", + "1679567 1.160771 1.038209 4.027054 2.736321 0.108608 -0.537999 \n", + "1679566 1.159573 1.039965 4.025934 2.736206 0.108647 -0.540145 \n", + "1679565 1.158384 1.041715 4.024803 2.736092 0.108686 -0.542286 \n", + "1679564 1.157200 1.043468 4.023657 2.735977 0.108725 -0.544431 \n", + "1679563 1.156023 1.045219 4.022497 2.735862 0.108765 -0.546575 \n", + "1679562 1.151073 1.052682 4.017387 2.735369 0.108933 -0.555729 \n", "\n", " moonAZ moonPhase sunAlt sunAz fiveSigmaDepth \\\n", "obsHistID \n", - "230 3.065632 4.041352 -0.574879 3.552349 24.083774 \n", - "1679570 1.769546 36.007107 -0.713472 3.402641 23.125717 \n", - "1679569 1.771027 36.011715 -0.712886 3.405852 23.126892 \n", - "1679568 1.772506 36.016312 -0.712295 3.409051 23.128060 \n", - "1679567 1.773993 36.020920 -0.711695 3.412254 23.129222 \n", - "1679566 1.775482 36.025532 -0.711088 3.415453 23.130378 \n", - "1679565 1.776971 36.030128 -0.710476 3.418640 23.131528 \n", - "1679564 1.778467 36.034737 -0.709855 3.421832 23.132671 \n", - "1679563 1.779966 36.039345 -0.709228 3.425019 23.135973 \n", - "1679562 1.786407 36.059044 -0.706469 3.438591 23.760457 \n", + "230 3.065632 4.041352 -0.574879 3.552349 24.032083 \n", + "1679570 1.769546 36.007107 -0.713472 3.402641 23.098397 \n", + "1679569 1.771027 36.011715 -0.712886 3.405852 23.099559 \n", + "1679568 1.772506 36.016312 -0.712295 3.409051 23.100714 \n", + "1679567 1.773993 36.020920 -0.711695 3.412254 23.101863 \n", + "1679566 1.775482 36.025532 -0.711088 3.415453 23.103007 \n", + "1679565 1.776971 36.030128 -0.710476 3.418640 23.104144 \n", + "1679564 1.778467 36.034737 -0.709855 3.421832 23.105275 \n", + "1679563 1.779966 36.039345 -0.709228 3.425019 23.108564 \n", + "1679562 1.786407 36.059044 -0.706469 3.438591 23.724024 \n", "\n", " filtSkyBrightness \n", "obsHistID \n", - "230 21.261397 \n", - "1679570 19.285337 \n", - "1679569 19.286363 \n", - "1679568 19.287382 \n", - "1679567 19.288396 \n", - "1679566 19.289404 \n", - "1679565 19.290404 \n", - "1679564 19.291401 \n", - "1679563 19.292391 \n", - "1679562 20.279593 " + "230 21.261421 \n", + "1679570 19.285369 \n", + "1679569 19.286396 \n", + "1679568 19.287414 \n", + "1679567 19.288428 \n", + "1679566 19.289436 \n", + "1679565 19.290436 \n", + "1679564 19.291432 \n", + "1679563 19.292422 \n", + "1679562 20.279621 " ] }, - "execution_count": 17, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -645,7 +715,7 @@ "cell_type": "code", "execution_count": 18, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -656,7 +726,7 @@ "cell_type": "code", "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -699,21 +769,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python [conda env:astroml]", "language": "python", - "name": "python2" + "name": "conda-env-astroml-py" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.5.4" } }, "nbformat": 4, diff --git a/examples/dc2_cadence.ipynb b/examples/dc2_cadence.ipynb new file mode 100644 index 0000000..cc4c812 --- /dev/null +++ b/examples/dc2_cadence.ipynb @@ -0,0 +1,5906 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import lsst.sims.skybrightness as sb\n", + "from lsst.sims.utils import Site\n", + "import ephem\n", + "from obscond import SkyCalculations as sm" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Some imports failed, which implies some dependencies are missing as described below\n", + "No module named 'mpl_toolkits.basemap'\n", + "Visulization functions based on maps will not work\n" + ] + } + ], + "source": [ + "from opsimsummary import SynOpSim" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from obscond.observingPotential import ObservationPotential" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from lsst.sims.utils import angularSeparation" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from scipy.interpolate import interp1d" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline \n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "sns.set_style('whitegrid')\n", + "sns.set_context('notebook')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import obscond" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.5.1dev3\n" + ] + } + ], + "source": [ + "print(obscond.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## DC2 DDF design" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# uDDF center Design DC2 Run1 Note\n", + "rauDDF = np.radians(53.125)\n", + "decuDDF = np.radians(-28.100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example For Block 2 : \n", + "\n", + "These are the observations we want for the block of 7 to 10 years" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "op = ObservationPotential(rauDDF, decuDDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# 60 sec intervals of mjd values between 7 and 10 years \n", + "t0 = 59580 + 7 * 365 \n", + "sec = 1.0 / 24.0 /60. /60.\n", + "hr = 60. * 60. * sec\n", + "t2 = np.arange(t0, t0 + 365 *3, 60 * sec)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "opdf = op.potential_obscond(t2, fieldRA=rauDDF, fieldDec=decuDDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.05019113468444874" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(opdf)/ np.pi /1.0e7" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mjdaltazsunAltmoonRAmoonDecmoonAltnightmoonDist
062135.00000050.539905313.845214-1.93686377.16228825.86635316.955501255597.299443
162135.00069450.383315313.537720-2.06720077.16986225.86759317.102845255597.306363
262135.00138950.225927313.232245-2.20080177.17742525.86882817.249769255597.313271
362135.00208350.067750312.928776-2.34017077.18497525.87005817.396272255597.320168
462135.00277849.908795312.627297-2.48915077.19251325.87128417.542347255597.327053
\n", + "
" + ], + "text/plain": [ + " mjd alt az sunAlt moonRA moonDec \\\n", + "0 62135.000000 50.539905 313.845214 -1.936863 77.162288 25.866353 \n", + "1 62135.000694 50.383315 313.537720 -2.067200 77.169862 25.867593 \n", + "2 62135.001389 50.225927 313.232245 -2.200801 77.177425 25.868828 \n", + "3 62135.002083 50.067750 312.928776 -2.340170 77.184975 25.870058 \n", + "4 62135.002778 49.908795 312.627297 -2.489150 77.192513 25.871284 \n", + "\n", + " moonAlt night moonDist \n", + "0 16.955501 2555 97.299443 \n", + "1 17.102845 2555 97.306363 \n", + "2 17.249769 2555 97.313271 \n", + "3 17.396272 2555 97.320168 \n", + "4 17.542347 2555 97.327053 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "opdf.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# new\n", + "constraints = 'alt > 30 and alt < 85 and sunAlt < -12 and moonDist > 30'\n", + "availabletimes = op.available_times(opdf, constraints=constraints)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "172579" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#new\n", + "len(availabletimes)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# new\n", + "fig, ax = plt.subplots()\n", + "#ax0, ax1 = ax\n", + "#dff = opdf.query('alt < 85. and alt > 20.')\n", + "ax.plot(opdf.mjd, opdf.sunAlt, label='sun Alt')\n", + "ax.plot(availabletimes.mjd, availabletimes.sunAlt, label='field constraints')\n", + "ax.axhline(-12.0, ls='dashed', lw=2)\n", + "ax.set_xlabel('MJD (day)')\n", + "ax.set_ylabel('sun Altitude (deg)')\n", + "fig.savefig('availabletimes_block2.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Baseline Expectations" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " reading from database sqlite:////Users/rbiswas/data/LSST/OpSimData/minion_1016_sqlite.db\n", + "Not doing all observations here \n", + "56 ddf\n", + "SELECT * FROM Summary WHERE propID in (56)\n", + "We have filterNull set to False\n", + "checking that summary table read in\n", + "\n", + "Reading in raw tables successful\n", + "replacing names works\n", + "dropping duplicates works\n", + "joining dithers works\n", + "Keeping units for lsstv3 from radians\n", + "check that the format matches the expectation\n" + ] + } + ], + "source": [ + "synopsim = SynOpSim.fromOpSimDB('/Users/rbiswas/data/LSST/OpSimData/minion_1016_sqlite.db',\n", + " subset='ddf', opsimversion='lsstv3')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "all_baseline_visits = synopsim.pointings.query('fieldID == 1427')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Block 2" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "baseline_block2 = synopsim.pointings.query('fieldID == 1427 and night > 365*7')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "unights = baseline_block2.query('filter == \"u\"').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "baseline_nights_2 = baseline_block2.query('filter != \"u\"').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of nights using grizy filters is 61\n" + ] + } + ], + "source": [ + "print('Number of nights using grizy filters is {}'.format(baseline_nights_2.size))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "ratio_sampling = 0.5 # See DC2 design note (0.75)\n", + "required_nights = np.ceil(baseline_nights_2.size / ratio_sampling).astype(np.int)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Given the requirement of the cadence being 0.5, the number of nights is 122\n" + ] + } + ], + "source": [ + "print('Given the requirement of the cadence being {0}, the number of nights is {1}'.format(ratio_sampling, required_nights))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "times = availabletimes.query('night in @baseline_nights_2').groupby('night').agg(dict(mjd=ObservationPotential.timerange)).rename(columns=dict(mjd='time'))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "_ = times.time.hist(bins=np.arange(2., 10, 0.25), histtype='step',\n", + " lw=2, ax=ax)\n", + "ax.axvline(5.0, color='k', ls='dashed')\n", + "ax.set_ylabel('nights')\n", + "ax.set_xlabel('hours of night available per night')\n", + "ax.set_title('Hours/night for minion DDF nights in yrs 4-7')\n", + "fig.savefig('block_2_hours_pernight.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choosing nights" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "172579" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(availabletimes)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2443910" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "synopsim.pointings.index.values.max()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## We want to select nights longer than 5 hours" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "351\n" + ] + } + ], + "source": [ + "shortnight = availabletimes.groupby('night').agg(dict(mjd=ObservationPotential.timerange))\n", + "shortnights = shortnight.query('mjd < 5').index.unique()\n", + "print(len(shortnights))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "unights = baseline_block2.query('filter == \"u\"').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "target_nights = availabletimes.query('night not in @shortnights').query('night not in @unights').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "rng = np.random.RandomState(1)\n", + "target_nights.sort()\n", + "chosen_nights = rng.choice(target_nights, replace=False, size=required_nights)\n", + "chosen_nights.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "nstats = op.nightStats(availabletimes)\n", + "st_times = op.start_times(nstats, chosen_nights, rng)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block2 = op.dc2_visits(st_times, year_block=2, pointings=all_baseline_visits)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "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", + "
expMJD
filter
g610
i1220
r1220
y1220
z1586
\n", + "
" + ], + "text/plain": [ + " expMJD\n", + "filter \n", + "g 610\n", + "i 1220\n", + "r 1220\n", + "y 1220\n", + "z 1586" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.groupby('filter').agg(dict(expMJD='count'))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n", + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "dc2_visits_block2.rawSeeing.hist(ax=ax,**dict(histtype='step', normed=1))\n", + "all_baseline_visits.rawSeeing.hist(ax=ax, **dict(histtype='step', normed=1))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block2['obsHistID'] = np.arange(len(dc2_visits_block2)) + 2500000 + 20000" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block2.to_csv('dc2_blocks2_v2.csv', index=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Block 1 : " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "# 60 sec intervals of mjd values between 7 and 10 years \n", + "t0 = 59580 + 4 * 365 \n", + "sec = 1.0 / 24.0 /60. /60.\n", + "hr = 60. * 60. * sec\n", + "t01 = np.arange(t0, t0 + 365 *3, 60 * sec)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "opdf = op.potential_obscond(t01, fieldRA=rauDDF, fieldDec=decuDDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "# new\n", + "constraints_1 = 'alt > 30 and alt < 85 and sunAlt < -12 and moonDist > 30'\n", + "availabletimes_1 = op.available_times(opdf, constraints=constraints)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.000093226788736" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(availabletimes_1.mjd.min() - 59580)/365" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "347\n" + ] + } + ], + "source": [ + "shortnight_1 = availabletimes_1.groupby('night').agg(dict(mjd=ObservationPotential.timerange))\n", + "shortnights_1 = shortnight_1.query('mjd < 5').index.unique()\n", + "print(len(shortnights_1))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "baseline_block1 = synopsim.pointings.query('fieldID == 1427 and night < 365*7 and night > 365*4')" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "unights_1 = baseline_block1.query('filter == \"u\"').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "target_nights_1 = availabletimes_1.query('night not in @shortnights_1').query('night not in @unights_1').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "baseline_nights_1 = baseline_block1.query('filter != \"u\"').night.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "ratio_sampling_1 = 0.75 # See DC2 design note (0.75)\n", + "required_nights_1 = np.ceil(baseline_nights_1.size / ratio_sampling).astype(np.int)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "114" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "required_nights_1" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "rng = np.random.RandomState(1)\n", + "target_nights_1.sort()\n", + "chosen_nights_1 = rng.choice(target_nights_1, replace=False, size=required_nights_1)\n", + "chosen_nights_1.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "nstats_1 = op.nightStats(availabletimes_1)\n", + "st_times_1 = op.start_times(nstats_1, chosen_nights_1, rng)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block1 = op.dc2_visits(st_times_1, year_block=1, pointings=baseline_block1)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "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", + "
expMJD
filter
g912
i1710
r1710
y1710
z2280
\n", + "
" + ], + "text/plain": [ + " expMJD\n", + "filter \n", + "g 912\n", + "i 1710\n", + "r 1710\n", + "y 1710\n", + "z 2280" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block1.groupby('filter').agg(dict(expMJD='count'))" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['expMJD', 'filter', 'night', 'rawSeeing'], dtype='object')" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block1.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block1['obsHistID'] = np.arange(len(dc2_visits_block1)) + 2500000" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block1.to_csv('dc2_blocks1_v2.csv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8322" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(dc2_visits_block1)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5856" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(dc2_visits_block2)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block1.night = dc2_visits_block1.night.astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([6952, 75, 1, 38, 7, 3, 3, 2, 3, 0, 1,\n", + " 0, 2, 0, 2, 0, 1, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n", + " 0, 0, 0, 1])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.bincount(baseline_block1.sort_values(by='night').night.diff()[1:].astype(np.int))" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([8208, 43, 21, 15, 6, 4, 7, 5, 1, 2, 3,\n", + " 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.bincount(dc2_visits_block1.sort_values(by='night').night.diff()[1:].astype(np.int))" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "expMJD,filter,night,rawSeeing\r\n", + "61235.391948194854,r,1655.0,0.535141\r\n", + "61235.39238800967,r,1655.0,0.535141\r\n", + "61235.392827824486,r,1655.0,0.535141\r\n", + "61235.3932676393,r,1655.0,0.535141\r\n", + "61235.39370745411,r,1655.0,0.535141\r\n", + "61235.394147268926,r,1655.0,0.535141\r\n", + "61235.39458708374,r,1655.0,0.535141\r\n", + "61235.39502689856,r,1655.0,0.535141\r\n", + "61235.39546671337,r,1655.0,0.535141\r\n" + ] + } + ], + "source": [ + "!head dc2_block1.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Scratch" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block1 = op.dc2_visits(st_times.iloc[0], 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "62330.31910791294" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st_times.iloc[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block2.to_csv('dc2_visits_block2.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 62330.319108\n", + "1 62330.319548\n", + "2 62330.319988\n", + "3 62330.320427\n", + "14 62330.320867\n", + "4 62330.320867\n", + "5 62330.321307\n", + "6 62330.321747\n", + "13 62330.321851\n", + "7 62330.322187\n", + "15 62330.322603\n", + "8 62330.322626\n", + "16 62330.322655\n", + "17 62330.322706\n", + "18 62330.322758\n", + "19 62330.322809\n", + "12 62330.322835\n", + "20 62330.322860\n", + "21 62330.322912\n", + "22 62330.322963\n", + "23 62330.323015\n", + "47 62330.323066\n", + "9 62330.323066\n", + "24 62330.323066\n", + "46 62330.323406\n", + "45 62330.323745\n", + "11 62330.323819\n", + "44 62330.324085\n", + "37 62330.324386\n", + "36 62330.324420\n", + "43 62330.324424\n", + "35 62330.324455\n", + "34 62330.324490\n", + "33 62330.324525\n", + "32 62330.324559\n", + "31 62330.324594\n", + "30 62330.324629\n", + "29 62330.324663\n", + "28 62330.324698\n", + "27 62330.324733\n", + "42 62330.324764\n", + "26 62330.324768\n", + "25 62330.324802\n", + "10 62330.324802\n", + "41 62330.325103\n", + "40 62330.325443\n", + "39 62330.325782\n", + "38 62330.326122\n", + "Name: expMJD, dtype: float64" + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2[0].sort_values(by='expMJD').expMJD" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "dc2_visits_block2 = ObservationPotential.dc2_visits(st_times, year_block=2, delta=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
expMJDfilternight
062330.262845r2750.0
162330.263285r2750.0
262330.263725r2750.0
362330.264165r2750.0
462330.264605r2750.0
\n", + "
" + ], + "text/plain": [ + " expMJD filter night\n", + "0 62330.262845 r 2750.0\n", + "1 62330.263285 r 2750.0\n", + "2 62330.263725 r 2750.0\n", + "3 62330.264165 r 2750.0\n", + "4 62330.264605 r 2750.0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "37.99999945331365" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.sort_values(by='expMJD').expMJD.diff().min()*24*60*60" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "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", + "
night
filter
g610
i1220
r1220
y1220
z1586
\n", + "
" + ], + "text/plain": [ + " night\n", + "filter \n", + "g 610\n", + "i 1220\n", + "r 1220\n", + "y 1220\n", + "z 1586" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.groupby('filter').agg(dict(night='count'))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "minion_block2 = synopsim.pointings.query('night > 365 *7 and filter != \"u\" and fieldID == 1427')" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "minion_block2['filter'].unique().size" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
expMJD
nightfilter
2750.0g5
i10
r10
y10
z13
2754.0g5
i10
r10
y10
z13
2761.0g5
i10
r10
y10
z13
2762.0g5
i10
r10
y10
z13
2769.0g5
i10
r10
y10
z13
2771.0g5
i10
r10
y10
z13
.........
3594.0g5
i10
r10
y10
z13
3595.0g5
i10
r10
y10
z13
3596.0g5
i10
r10
y10
z13
3597.0g5
i10
r10
y10
z13
3598.0g5
i10
r10
y10
z13
3600.0g5
i10
r10
y10
z13
\n", + "

610 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " expMJD\n", + "night filter \n", + "2750.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "2754.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "2761.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "2762.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "2769.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "2771.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "... ...\n", + "3594.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "3595.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "3596.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "3597.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "3598.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "3600.0 g 5\n", + " i 10\n", + " r 10\n", + " y 10\n", + " z 13\n", + "\n", + "[610 rows x 1 columns]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.groupby(['night', 'filter']).agg(dict(expMJD='count'))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "122" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits_block2.night.unique().size" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "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", + "
night
filter
g591
i1180
r1215
y1142
z1534
\n", + "
" + ], + "text/plain": [ + " night\n", + "filter \n", + "g 591\n", + "i 1180\n", + "r 1215\n", + "y 1142\n", + "z 1534" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "minion_block2.groupby('filter').agg(dict(night='count'))" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5662" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(minion_block2)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5856" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(dc2_visits_block2)" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'tuple' object has no attribute 'sort_values'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdc2_visits_block2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'expMJD'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpMJD\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'tuple' object has no attribute 'sort_values'" + ] + } + ], + "source": [ + "dc2_visits_block2.sort_values(by='expMJD').expMJD" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "vals = dc2_visits_block2.sort_values(by='expMJD').expMJD.diff()*24.0*60.* 60." + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "night\n", + "2750 62330.319108\n", + "2754 62334.377036\n", + "2761 62341.294386\n", + "2762 62342.362502\n", + "2769 62349.355503\n", + "2771 62351.208782\n", + "2773 62353.288746\n", + "2774 62354.271757\n", + "2776 62356.213810\n", + "2782 62362.251942\n", + "2783 62363.259288\n", + "2784 62364.222906\n", + "2786 62366.141025\n", + "2788 62368.256541\n", + "2789 62369.296038\n", + "2790 62370.141528\n", + "2797 62377.148752\n", + "2798 62378.258787\n", + "2799 62379.183944\n", + "2803 62383.316846\n", + "2809 62389.275081\n", + "2813 62393.120107\n", + "2815 62395.110192\n", + "2817 62397.225695\n", + "2823 62403.077466\n", + "2825 62405.160939\n", + "2826 62406.278937\n", + "2829 62409.058003\n", + "2833 62413.022593\n", + "2834 62414.234279\n", + " ... \n", + "3507 63087.275316\n", + "3509 63089.335837\n", + "3511 63091.359990\n", + "3514 63094.197364\n", + "3516 63096.316612\n", + "3518 63098.197386\n", + "3524 63104.260589\n", + "3528 63108.141025\n", + "3534 63114.184773\n", + "3535 63115.109084\n", + "3540 63120.202137\n", + "3542 63122.244014\n", + "3547 63127.170755\n", + "3548 63128.143852\n", + "3555 63135.239166\n", + "3561 63141.028913\n", + "3564 63144.106796\n", + "3571 63151.105549\n", + "3572 63152.173520\n", + "3588 63168.178015\n", + "3589 63169.053056\n", + "3590 63170.155607\n", + "3591 63171.123301\n", + "3593 63173.003429\n", + "3594 63174.132306\n", + "3595 63175.107555\n", + "3596 63176.119173\n", + "3597 63177.101497\n", + "3598 63178.098460\n", + "3600 63180.062662\n", + "Length: 122, dtype: float64" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st_times" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "op.nightStats" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "653" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "availabletimes.night.unique().size" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "302" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "availabletimes.query('night not in @shortnights').night.unique().size" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "269" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(target_nights)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.2049180327868854\n" + ] + } + ], + "source": [ + "expected_cadence = target_nights.size / np.float(required_nights)\n", + "print(expected_cadence)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "269" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "targets.night.unique().size" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "rng = np.random.RandomState(1)\n", + "target_nights.sort()\n", + "chosen_nights = rng.choice(target_nights, replace=False, size=required_nights)\n", + "chosen_nights.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "122" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chosen_nights.size" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "chosen_nights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "st_times = op.start_times(nigh)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2800, 2813, 2828, 2831, 2843, 2845, 2848, 2856, 2859, 2862, 2872,\n", + " 2875, 2878, 2884, 2887, 2892, 2902, 2905, 2914, 2917, 2920, 3167,\n", + " 3170, 3173, 3182, 3185, 3197, 3200, 3202, 3210, 3213, 3216, 3228,\n", + " 3232, 3239, 3242, 3245, 3255, 3258, 3270, 3273, 3276, 3285, 3288,\n", + " 3537, 3541, 3551, 3556, 3565, 3568, 3571, 3582, 3585, 3601, 3611,\n", + " 3614, 3623, 3626, 3629, 3640, 3643])" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "baseline_nights" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565,\n", + " 2566, 2567, 2568, 2569, 2570, 2680, 2686, 2687, 2688, 2689, 2690,\n", + " 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701,\n", + " 2702, 2703, 2704, 2705, 2706, 2707, 2708],\n", + " dtype='int64', name='night')" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "shortnights[:40]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760,\n", + " 2761, 2762, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776,\n", + " 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787,\n", + " 2788, 2789, 2790, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802,\n", + " 2803, 2804, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816,\n", + " 2817, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832,\n", + " 2833, 2834, 2842, 2843, 2844, 2850, 2851, 2852, 2853, 2854, 2855,\n", + " 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866,\n", + " 2867, 2868, 2869, 3116, 3117, 3118, 3123, 3124, 3125, 3126, 3127,\n", + " 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138,\n", + " 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3150, 3151, 3152, 3153,\n", + " 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164,\n", + " 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3178, 3179, 3180,\n", + " 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3196, 3197, 3198,\n", + " 3199, 3200, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213,\n", + " 3214, 3215, 3216, 3217, 3218, 3225, 3226, 3227, 3233, 3234, 3481,\n", + " 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492,\n", + " 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3505, 3506, 3507,\n", + " 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518,\n", + " 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3533,\n", + " 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3547,\n", + " 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3560, 3561, 3562,\n", + " 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3580,\n", + " 3581, 3582, 3583, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595,\n", + " 3596, 3597, 3598, 3599, 3600])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "target_nights" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2805, 2806, 2807, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2893,\n", + " 2894, 2895, 2896, 2897, 2898, 2899, 2922, 2923, 2924, 2925, 2926,\n", + " 2927, 2928, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3219, 3220,\n", + " 3221, 3222, 3223, 3224, 3247, 3248, 3249, 3250, 3251, 3252, 3253,\n", + " 3279, 3280, 3283, 3284, 3544, 3545, 3546, 3573, 3574, 3575, 3576,\n", + " 3577, 3578, 3579, 3606, 3607, 3608, 3609, 3631, 3632, 3633, 3636,\n", + " 3637, 3638])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unights" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n", + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "_ = plt.hist(np.diff(chosen_nights), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='designed')\n", + "_ = plt.hist(np.diff(np.sort(baseline_nights)), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='minion')" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 0, 2, 29, 2, 2, 1, 1, 2, 5, 5, 2, 4, 1, 0, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1])" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.bincount(np.sort(np.diff(baseline_nights)))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 47, 30, 5, 10, 7, 8, 5, 2, 1, 1, 0, 2, 0, 0, 0, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.bincount(np.sort(np.diff(chosen_nights)))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n", + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n", + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n", + "/Users/rbiswas/soft/lsst_stack/python/miniconda3-4.5.4/envs/lsst-scipipe-fcd27eb/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", + " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEBCAYAAACdctWRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHDpJREFUeJzt3X2UFPWd7/H3zMCMgCJwUAQBiQ98fRgV7yRwWXyG6OHi6souGskS2RWN3uh1fQxGXMGsG9wsivF6JCouRNyNByHGOLIhYjQ+YuysDxPgK+deII7OxRgDIsLMODP3j+oZemAeunu6p6uqP69zOExVV1d9p6j+8u1f/X6/KmlpaUFEROKptNABiIhI/ijJi4jEmJK8iEiMKcmLiMSYkryISIwpyYuIxJiSvIhIjCnJi4jEmJK8iEiMKcmLiMSYkryISIz16e0DJhKJCuBrQB3Q1NvHl9grA4YDv62qqqrvzQPr2pY8y+ra7vUkT/AheLkAx5XicgbwSi8fU9e29IaMru1CJPk6gLFjx1JeXn7AizU1NVRWVvZ6UNlSvPmTTawNDQ28//77kLzOelmX13bYROlayERcf69sr+1CJPkmgPLycioqKjrcoLP1YaV486cHsRaiuaTbaztsohJnpuL6eyVldG3rxquISIwpyYuIxFghmmtEep2ZDQReAy5w961mdhXwv4AW4C3g2+7eYGbjgEeBgcBvgKvd/ctCxR0Vzc3N1NbWsnv37kKHQp8+fdi4cWOhw8jagAEDGDlyJKWluanBleQl9sxsAvAIMDa5PBa4BagCdgHLgO8A9wErgDnu/oaZLQWuBB4qQNiR8sknn1BSUoKZ5Sw5ZWv37t0MGDCgoDFkq7m5mQ8//JBPPvmEww8/PCf7VHONFIMrCZL4R8nleuB/uvtn7t4CvAeMNrOjgH7u/kZyu2XAjN4ONop27NjBsGHDCp7go660tJRhw4axc+fOnO1TlbzEnrvPATCz1uVtwLbkusOAa4HZwAjad0+rA0ZmeryampoexdubEolETvZTVlZGQ0MDjY2NOdlfT4Wh2ShbLS0t7N69O2f/NqFM8mPmVrf9vHXhtAJGInFmZkcCa4Cl7v6imU0iaKNvVQI0Z7rfysrKSHThSyQSVFVV5WRfGzdu5OCDD25bTv0M50NXeSHKzTWtKioqOOGEE9qtq6+vz6qA0HcrKUpmdjzBjdjl7v795OpagmHjrY5gXxOPRNjcuXNZvXp1Ru+5//77WbduXZ4igtraWs4999y87b9VKCt5kXwys0OAtcDt7v5463p332Zme81skru/CswiqPQlS7n+Jp7vbwiprr/++l47Vj4pyUsxmgMMA24ys5uS655x938Evgk8kuxy+TvgRwWKUXqgpaWFhQsX8uKLL3L44YfT1NTE+PHjefrpp1m+fDnNzc2cdNJJ3HnnnZSWlvK9732PzZs3AzBz5kwuueQS5s6dy/jx45k+fTo/+clPWLFiBYcccghHH300o0eP5rrrruP000/n/PPPJ5FIUFZWxuLFixk1ahTvvvsuP/jBD9i7dy+DBw9mwYIFjBo1ig0bNnD77bcDcPzxx/fKuVCSl6Lh7mOSP96X/NPRNu8A43srJsmPX/7yl2zYsIFnn32WXbt2ceGFF7Jnzx6qq6v56U9/SkVFBYsWLWLp0qV89atfZefOnTz99NNs376dRYsWcckll7Tta9OmTTzxxBOsXr2avn37MmvWLEaPHg3AH//4RyZOnMgdd9zBwoULeeKJJ7jxxhuZN28eS5YsYcSIEbz88svccccdLFu2jO9+97vMnTuXSZMm8eCDD7J+/fq8nwsleRGJnTfffJPzzjuPvn37MmTIEM4880xaWlrYtm1bWwJvbGzkxBNP5LLLLmPLli1cccUVnHnmmdx6663t9vX6669zzjnntN1YnjZtGp999lnb62eccQYAxx13HG+99RZbt27lgw8+4Jprrmnb5vPPP+fTTz/l448/ZtKkSQBMnz6dVatWpf07nX7Pr1ky7bCMz4WSvIjETklJCS0t+zpK9enTh6amJqZOncq8efOAoBdOU1MTAwcOpLq6mldffZWXXnqJiy++mOrqfW3/paWlNDd33smqtSdV6zGbm5sZOXIkP//5zwFoampqGyyWGlNZWVlOf+fOqHeNiMTOxIkTWbNmDQ0NDezcuZOXXw6m+f/Vr37Fn/70J1paWpg/fz7Lly9n3bp13HLLLZx99tnMmzeP/v37U1dX125fL730Ep9//jkNDQ2sXbuWkpKSTo999NFHs3PnTt566y0AVq1axc0338zgwYMZMWIEL774IgDPPvssDV82827tjgP+1P55D2PmVrf7ky1V8iKSN73ZGybVlClTeO+9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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, 2)\n", + "_ = ax[0].hist(np.diff(chosen_nights), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='designed')\n", + "_ = ax[0].hist(np.diff(np.sort(baseline_nights)), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='minion')\n", + "_ = ax[1].hist(np.diff(chosen_nights), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, cumulative=1, label='designed', normed=0)\n", + "_ = ax[1].hist(np.diff(np.sort(baseline_nights)), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, cumulative=1, label='minion', normed=0)\n", + "\n", + "ax[1].set_xlim(xmax=10)\n", + "plt.legend(loc='best')\n", + "fig.savefig('gap_block2.png') " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAD3CAYAAADi8sSvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAGjBJREFUeJzt3X2QVPWd7/H3sMPDKiOoBEVDnCjLN6ZSmmRUvHAZphI0QTfLXa/rvdwC16WWJICuT1zwgSlHgw+4iBGIDwUixkSCKGxFLFe3FA1yXTEdtdZSvzxUpja5mhsiPgFhZGDuH+fM0AM90w/06XP6zOdVNVXdp0+f/vbM6e98+3d+DzUdHR2IiEg69Is7ABERKR8ldRGRFFFSFxFJESV1EZEUUVIXEUmR2kq8SCaTURcbiVxDQ0NNpV9T57ZErdjzuiJJHaChoSHn9kwm0+NjlaZYcquGWDKZTAzRBJLyu8knSX/HckvreyvlvFbzi4hIihRUqZvZcCADXAC0A6uADuBtYLa7H4wqQBERKVzeSt3M+gMPAX8ONy0G5rv7eKAGmBxdeCIiUoxCKvVFwIPAjeH9BuDl8PazwIXA+nwH6a1tKM720MMpltyqPRYzGwMsdPcmM/s6sBQ4ALQBl7v7/zOzGcAPCL6NLnD3DWUMW6Qiek3qZnYFsNPdnzOzzqRe4+6dV/w/A4YU8kK6UFocxZJbKRdKzWwuMA3YE266D7jK3d80sx8A88zsbuCfgHOAQcArZvZv7t5W5rcgEql8lfp0oMPMJgJfB34KDM96vA74OKLYRMplB3AJ8Fh4/3+6+wfh7VpgH3AesDlM4m1mth04C3g938GT9C0mn2qKtVhpfm/F6DWpu3tj520zewn4IfDPZtbk7i8Bk4CNUQYocrTc/Skzq8+6/wGAmY0FrgQage8An2Q97ai/hSZNXN+46m94JpLjtt51cdftJH2bLKdKdWm8HrjVzF4FBgBPlnAMkViZ2f8guFZ0sbvvBD4l+ObZSd9CpSoVPPjI3Zuy7k4oZxCH/yfP/g8sUm5mNpXggmiTu+8KN28BbjezQcBA4EyCLrtSJuX6XJdS+be1tTFp0iRefPHFgvbfuXMnP/nJT2hpaSn6tfK57LLLWLx4MV/84hfLfmyo4IhSkSQws78AlgD/CawzM4CX3f0WM1sCbCL4Bnuzu++LL1KJ0xe+8IVIEnolKKlLn+DurcD54d0TethnObC8UjFJtPbs2cOcOXP49NNP+dKXvgSAu7NgwQIAhg4dyh133MH+/fu55ppr6OjooK2tjVtvvZW6ujquu+46nnjiCTZu3MiSJUsYPHgwQ4YMwcw477zzWL58Of379+f3v/89F110ETNnzuSDDz6gubmZtrY2Bg4cyI9+9CNGjBjBvffey6ZNmzj55JP56KOPIn3fSuoikkq/+MUvGD16NNdeey1vvfUWr732Gs3Nzdxxxx2MGjWKtWvXsmLFCr7xjW8wdOhQ7r77brZv387evXupqwsurxw4cIAFCxawZs0ahg0bxvXXX991/Pfff59f/vKXfP7554wfP56ZM2eycOFCpk2bxoQJE3j11VdZtGgRV1xxBa+//jpPPvkke/fu5cILL4z0fSupi0gqtba2MmFCcPnv7LPPpra2lh07dnDrrbcCsH//furr62lsbKS1tZVZs2ZRW1vLzJkzu46xa9cuBg8ezLBhwwA455xz+NOf/gTA6NGjqa2tpba2lkGDBgGwdetWHnroIVasWEFHRwe1tbW0trbyta99jX79+jF48GBGjx4d6ftWUheRioiqa2NPzjjjDN58800mTpzIO++8Q3t7O1/+8pdZuHAhp5xyCplMhp07d/Laa68xfPhwVq5cyRtvvMHixYu58847ATjxxBPZs2cPu3bt4oQTTuCtt97i1FNPBaCm5sgZcU8//XSmT5/ON7/5TXbs2MHrr7/OqFGj+PnPf87BgwfZt28f27dvj/R9K6mLSCpNmTKFuXPnMmXKFE4//XT69+9PS0sL8+bNo729nZqaGm6//XaGDh3Kddddx+rVq2lvb2f27Nldx+jXrx/Nzc3MmDGDuro6Dh48yGmnndbja86bN4+Wlhba2trYt28fN998M2eeeSaNjY1ceumlDB8+nBNPPDHS962kLiKRiquL8sCBA7nvvvuO2P7YY48dse2RRx45YtsTTzwBwHvvvcfq1asZMGAAc+bMYcSIEYwZM4YxY8Z07bt582YARo4cycMPP3zEsWbNmsWsWbNKfi/FUFIXEenFsccey2WXXcagQYM49dRTueiii+IOqVdK6iIivZg6dSpTp06NO4yCaeUjEZEUUVIXEUkRNb+ISLRaCprssoTjfpJ/nz5IlbqISIqoUheRyihXZV2myv/KK69k2bJlOR+LcpbGqKlSF5E+qaeEDpqlUUQkcdatW8fGjRvZt28fO3fu5PLLL+eFF15g27ZtzJ07l1tu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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, 2)\n", + "_ = ax[0].hist(np.diff(chosen_nights), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='designed')\n", + "_ = ax[0].hist(np.diff(np.sort(baseline_nights)), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, normed=0, label='minion')\n", + "_ = ax[1].hist(np.diff(chosen_nights), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, cumulative=1, label='designed', normed=0)\n", + "_ = ax[1].hist(np.diff(np.sort(baseline_nights)), bins=np.arange(0, 80, 1),\n", + " histtype='step', lw=2, cumulative=1, label='minion', normed=0)\n", + "\n", + "ax[1].set_xlim(xmax=10)\n", + "plt.legend(loc='best')\n", + "fig.savefig('gap_block2.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.plot(chosen_nights[:-1], np.diff(chosen_nights), '.')\n", + "for nt in unights:\n", + " ax.axvline(nt, ls='dashed', color='k', lw=1)\n", + "#for nt in shortnights:\n", + "# ax.axvline(nt, ls='dashed', color='r', lw=0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choosing nights" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mjdaltazsunAltmoonRAmoonDecmoonAltnightmoonDist
count172579.000000172579.000000172579.000000172579.000000172579.000000172579.000000172579.000000172579.000000172579.000000
mean62753.21727648.772325176.398199-41.414825154.5016342.167519-9.1330853172.989379104.259570
std303.6387939.322090139.02942516.82414487.40344316.81312635.790120303.65440142.598460
min62135.03402830.0016800.000751-79.3884027.211262-24.459791-77.0968532555.00000030.000031
25%62431.04757040.94749345.755835-53.86414179.735333-15.971037-39.7950612851.00000067.113953
50%62752.31875250.51814969.998414-41.406895151.8134256.839546-11.9029703172.000000104.608783
75%63077.43923957.545609313.340367-27.647135227.10188718.58845320.5421533497.000000141.610819
max63229.08125460.246038359.999039-12.000204313.40714325.96968976.7449553649.000000173.345992
\n", + "
" + ], + "text/plain": [ + " mjd alt az sunAlt \\\n", + "count 172579.000000 172579.000000 172579.000000 172579.000000 \n", + "mean 62753.217276 48.772325 176.398199 -41.414825 \n", + "std 303.638793 9.322090 139.029425 16.824144 \n", + "min 62135.034028 30.001680 0.000751 -79.388402 \n", + "25% 62431.047570 40.947493 45.755835 -53.864141 \n", + "50% 62752.318752 50.518149 69.998414 -41.406895 \n", + "75% 63077.439239 57.545609 313.340367 -27.647135 \n", + "max 63229.081254 60.246038 359.999039 -12.000204 \n", + "\n", + " moonRA moonDec moonAlt night \\\n", + "count 172579.000000 172579.000000 172579.000000 172579.000000 \n", + "mean 154.501634 2.167519 -9.133085 3172.989379 \n", + "std 87.403443 16.813126 35.790120 303.654401 \n", + "min 7.211262 -24.459791 -77.096853 2555.000000 \n", + "25% 79.735333 -15.971037 -39.795061 2851.000000 \n", + "50% 151.813425 6.839546 -11.902970 3172.000000 \n", + "75% 227.101887 18.588453 20.542153 3497.000000 \n", + "max 313.407143 25.969689 76.744955 3649.000000 \n", + "\n", + " moonDist \n", + "count 172579.000000 \n", + "mean 104.259570 \n", + "std 42.598460 \n", + "min 30.000031 \n", + "25% 67.113953 \n", + "50% 104.608783 \n", + "75% 141.610819 \n", + "max 173.345992 " + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "availabletimes.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "nstats = op.nightStats(availabletimes)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmjdmaxmjdavailTime
night
2555.062135.03402862135.0763891.016667
2556.062136.03402862136.0736110.950000
2557.062137.03402862137.0708330.883333
2558.062138.03402862138.0680560.816667
2559.062139.03472262139.0652780.733333
\n", + "
" + ], + "text/plain": [ + " minmjd maxmjd availTime\n", + "night \n", + "2555.0 62135.034028 62135.076389 1.016667\n", + "2556.0 62136.034028 62136.073611 0.950000\n", + "2557.0 62137.034028 62137.070833 0.883333\n", + "2558.0 62138.034028 62138.068056 0.816667\n", + "2559.0 62139.034722 62139.065278 0.733333" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nstats.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmjdmaxmjdavailTime
night
275062330.23750162330.4458345.000000
275462334.22639062334.4451405.250000
276162341.20694562341.4430565.666667
276262342.20486262342.4430565.716667
276962349.18541762349.4402786.116667
\n", + "
" + ], + "text/plain": [ + " minmjd maxmjd availTime\n", + "night \n", + "2750 62330.237501 62330.445834 5.000000\n", + "2754 62334.226390 62334.445140 5.250000\n", + "2761 62341.206945 62341.443056 5.666667\n", + "2762 62342.204862 62342.443056 5.716667\n", + "2769 62349.185417 62349.440278 6.116667" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nstats.loc[chosen_nights].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mjd
count653.000000
mean264.286371
std143.833276
min1.000000
25%135.000000
50%282.000000
75%409.000000
max439.000000
\n", + "
" + ], + "text/plain": [ + " mjd\n", + "count 653.000000\n", + "mean 264.286371\n", + "std 143.833276\n", + "min 1.000000\n", + "25% 135.000000\n", + "50% 282.000000\n", + "75% 409.000000\n", + "max 439.000000" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "availabletimes.groupby('night').agg(dict(mjd='count')).describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mjd
count942.000000
mean4.016207
std2.193955
min0.016667
25%2.187500
50%4.283333
75%5.779167
max7.833333
\n", + "
" + ], + "text/plain": [ + " mjd\n", + "count 942.000000\n", + "mean 4.016207\n", + "std 2.193955\n", + "min 0.016667\n", + "25% 2.187500\n", + "50% 4.283333\n", + "75% 5.779167\n", + "max 7.833333" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "availabletimes.groupby('night').agg(dict(mjd='count')).apply(lambda x: x/60.).describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmjdmaxmjdavailTime
night
255962139.03472262139.2513895.200000
256062140.03472262140.2486115.133333
256162141.03472262141.2458335.066667
262862208.00000062208.99930623.983333
263062210.00000062210.99930623.983333
263462214.00000062214.99930623.983333
263562215.00000062215.99930623.983333
264062220.00000062220.99930623.983333
264462224.00000062224.99930623.983333
264662226.00000062226.99930623.983333
280262382.19861262382.4187515.283333
282262402.14444562402.4013906.166667
282562405.13611262405.3993066.316667
282662406.13333462406.3979186.350000
282962409.12500162409.3951406.483333
283162411.11944562411.3937516.583333
284462424.08402962424.3826407.166667
284962429.07014062429.3784737.400000
285162431.06527962431.3763907.466667
285262432.06250162432.3756957.516667
285362433.05972362433.3750017.566667
285662436.05139062436.3729187.716667
286062440.04027962440.3701407.916667
286162441.03750162441.3694457.966667
286262442.03472362442.3687518.016667
286362443.03194562443.3680578.066667
286462444.02916862444.3673628.116667
286662446.02430762446.3659738.200000
286962449.01597362449.3645848.366667
287362453.00902962453.3625018.483333
............
352863108.21111463108.4222255.066667
353663116.18889263116.4159755.450000
354863128.15625363128.4055595.983333
355063130.15069863130.4041706.083333
355163131.14792063131.4027816.116667
356463144.11250363144.3916706.700000
356563145.10972663145.3902816.733333
356763147.10486463147.3888926.816667
356963149.09930963149.3868096.900000
357063150.09653163150.3861146.950000
357163151.09375363151.3854207.000000
358163161.06597663161.3770877.466667
359463174.03055963174.3673648.083333
359663176.02569863176.3659768.166667
359963179.01736563179.3645878.333333
360063180.01458763180.3638928.383333
360363183.00833763183.3625038.500000
360463184.00903163184.3618098.466667
360563185.00972663185.3611158.433333
361063190.01319863190.3590318.300000
361363193.01528163193.3583378.233333
361563195.01667063195.3576428.183333
361963199.01944863199.3486157.900000
362463204.02292063204.3354207.500000
362863208.02500363208.3243097.183333
363063210.02639263210.3187547.016667
363963219.03055963219.2944486.333333
364163221.03125463221.2888926.183333
364563225.03264263225.2777815.883333
364663226.03264263226.2750045.816667
\n", + "

122 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " minmjd maxmjd availTime\n", + "night \n", + "2559 62139.034722 62139.251389 5.200000\n", + "2560 62140.034722 62140.248611 5.133333\n", + "2561 62141.034722 62141.245833 5.066667\n", + "2628 62208.000000 62208.999306 23.983333\n", + "2630 62210.000000 62210.999306 23.983333\n", + "2634 62214.000000 62214.999306 23.983333\n", + "2635 62215.000000 62215.999306 23.983333\n", + "2640 62220.000000 62220.999306 23.983333\n", + "2644 62224.000000 62224.999306 23.983333\n", + "2646 62226.000000 62226.999306 23.983333\n", + "2802 62382.198612 62382.418751 5.283333\n", + "2822 62402.144445 62402.401390 6.166667\n", + "2825 62405.136112 62405.399306 6.316667\n", + "2826 62406.133334 62406.397918 6.350000\n", + "2829 62409.125001 62409.395140 6.483333\n", + "2831 62411.119445 62411.393751 6.583333\n", + "2844 62424.084029 62424.382640 7.166667\n", + "2849 62429.070140 62429.378473 7.400000\n", + "2851 62431.065279 62431.376390 7.466667\n", + "2852 62432.062501 62432.375695 7.516667\n", + "2853 62433.059723 62433.375001 7.566667\n", + "2856 62436.051390 62436.372918 7.716667\n", + "2860 62440.040279 62440.370140 7.916667\n", + "2861 62441.037501 62441.369445 7.966667\n", + "2862 62442.034723 62442.368751 8.016667\n", + "2863 62443.031945 62443.368057 8.066667\n", + "2864 62444.029168 62444.367362 8.116667\n", + "2866 62446.024307 62446.365973 8.200000\n", + "2869 62449.015973 62449.364584 8.366667\n", + "2873 62453.009029 62453.362501 8.483333\n", + "... ... ... ...\n", + "3528 63108.211114 63108.422225 5.066667\n", + "3536 63116.188892 63116.415975 5.450000\n", + "3548 63128.156253 63128.405559 5.983333\n", + "3550 63130.150698 63130.404170 6.083333\n", + "3551 63131.147920 63131.402781 6.116667\n", + "3564 63144.112503 63144.391670 6.700000\n", + "3565 63145.109726 63145.390281 6.733333\n", + "3567 63147.104864 63147.388892 6.816667\n", + "3569 63149.099309 63149.386809 6.900000\n", + "3570 63150.096531 63150.386114 6.950000\n", + "3571 63151.093753 63151.385420 7.000000\n", + "3581 63161.065976 63161.377087 7.466667\n", + "3594 63174.030559 63174.367364 8.083333\n", + "3596 63176.025698 63176.365976 8.166667\n", + "3599 63179.017365 63179.364587 8.333333\n", + "3600 63180.014587 63180.363892 8.383333\n", + "3603 63183.008337 63183.362503 8.500000\n", + "3604 63184.009031 63184.361809 8.466667\n", + "3605 63185.009726 63185.361115 8.433333\n", + "3610 63190.013198 63190.359031 8.300000\n", + "3613 63193.015281 63193.358337 8.233333\n", + "3615 63195.016670 63195.357642 8.183333\n", + "3619 63199.019448 63199.348615 7.900000\n", + "3624 63204.022920 63204.335420 7.500000\n", + "3628 63208.025003 63208.324309 7.183333\n", + "3630 63210.026392 63210.318754 7.016667\n", + "3639 63219.030559 63219.294448 6.333333\n", + "3641 63221.031254 63221.288892 6.183333\n", + "3645 63225.032642 63225.277781 5.883333\n", + "3646 63226.032642 63226.275004 5.816667\n", + "\n", + "[122 rows x 3 columns]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nstats.loc[chosen_nights]" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "st_times = op.start_times(nstats, chosen_nights, rng)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "night\n", + "2750 62330.262845\n", + "2754 62334.285800\n", + "2761 62341.224484\n", + "2762 62342.231525\n", + "2769 62349.374206\n", + "2771 62351.299583\n", + "2773 62353.352148\n", + "2774 62354.305277\n", + "2776 62356.236961\n", + "2782 62362.318353\n", + "2783 62363.269195\n", + "2784 62364.317903\n", + "2786 62366.178518\n", + "2788 62368.300805\n", + "2789 62369.235481\n", + "2790 62370.308400\n", + "2797 62377.299688\n", + "2798 62378.206482\n", + "2799 62379.336701\n", + "2803 62383.143663\n", + "2809 62389.078402\n", + "2813 62393.298796\n", + "2815 62395.133965\n", + "2817 62397.096253\n", + "2823 62403.044254\n", + "2825 62405.146268\n", + "2826 62406.233631\n", + "2829 62409.114390\n", + "2833 62413.163989\n", + "2834 62414.016424\n", + " ... \n", + "3507 63087.257281\n", + "3509 63089.312829\n", + "3511 63091.216558\n", + "3514 63094.148184\n", + "3516 63096.192805\n", + "3518 63098.142492\n", + "3524 63104.353770\n", + "3528 63108.304794\n", + "3534 63114.221452\n", + "3535 63115.092348\n", + "3540 63120.150118\n", + "3542 63122.205379\n", + "3547 63127.272321\n", + "3548 63128.099445\n", + "3555 63135.055034\n", + "3561 63141.028525\n", + "3564 63144.120908\n", + "3571 63150.995138\n", + "3572 63152.006345\n", + "3588 63168.158714\n", + "3589 63169.122590\n", + "3590 63170.147060\n", + "3591 63171.132523\n", + "3593 63173.044403\n", + "3594 63174.009952\n", + "3595 63175.051604\n", + "3596 63176.150661\n", + "3597 63177.016357\n", + "3598 63178.112627\n", + "3600 63180.035531\n", + "Length: 122, dtype: float64" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st_times" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/LSST3/python/miniconda3-4.3.21/lib/python3.6/site-packages/ipykernel_launcher.py:124: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n" + ] + } + ], + "source": [ + "v, vl = ObservationPotential.dc2_sequence(st_times.values[0], year_block=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/LSST3/python/miniconda3-4.3.21/lib/python3.6/site-packages/ipykernel_launcher.py:124: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n" + ] + } + ], + "source": [ + "dc2_visits = ObservationPotential.dc2_visits(st_times, year_block=1, delta=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
expMJDfilternight
062139.064613r2559.0
162139.065052r2559.0
262139.065492r2559.0
362139.065932r2559.0
462139.066372r2559.0
\n", + "
" + ], + "text/plain": [ + " expMJD filter night\n", + "0 62139.064613 r 2559.0\n", + "1 62139.065052 r 2559.0\n", + "2 62139.065492 r 2559.0\n", + "3 62139.065932 r 2559.0\n", + "4 62139.066372 r 2559.0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7022" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "baseline_block2.expMJD.size" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10266" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(dc2_visits.expMJD.size + baseline_block2.query('filter == \"u\"').expMJD.size)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dc2_visits['fieldRA'] = rauDDF\n", + "dc2_visits['fieldDec'] = decuDDF" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from lsst.sims.photUtils import BandpassDict\n", + "import obscond" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dc2_visits['FWHMeff'] = 1.0" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "TotbpDict, hwbpDict = BandpassDict.loadBandpassesFromFiles()\n", + "skycalc = obscond.SkyCalculations(photparams=\"LSST\", hwBandpassDict=hwbpDict)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from lsst.sims.skybrightness import SkyModel" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "fieldRA 0.925184\n", + "fieldDec -0.4789\n", + "expMJD 59580.1\n", + "Name: 230, dtype: object" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "synopsim.pointings.iloc[0][['fieldRA', 'fieldDec', 'expMJD']]" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sm = SkyModel()" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.4904375198104066" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "decuDDF" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9272061651219876" + ] + }, + "execution_count": 164, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rauDDF" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "expMJD 61044.1\n", + "filter r\n", + "fieldRA 0.927206\n", + "fieldDec -0.490438\n", + "FWHMeff 0\n", + "Name: 1, dtype: object" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits.iloc[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "#sm.setRaDecMjd(lat=-0.4904, lon=0.927, mjd=61137.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dc2_visits.to_csv('dc2_visits_block2')" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'g': array([22.28796024]),\n", + " 'i': array([20.37079804]),\n", + " 'r': array([21.28913692]),\n", + " 'u': array([22.79937317]),\n", + " 'y': array([18.58355142]),\n", + " 'z': array([19.3902523])}" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sm.returnMags(bandpasses=hwbpDict)" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "expMJD 61137.5\n", + "filter r\n", + "fieldRA 0.927206\n", + "fieldDec -0.490438\n", + "FWHMeff 1\n", + "Name: 1, dtype: object" + ] + }, + "execution_count": 208, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits.iloc[293]" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dc2_visits.to_csv('dc2_vists_block1.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"taiutc\" yielded 1 of \"dubious year (Note 4)\" [astropy._erfa.core]\n", + "WARNING: ErfaWarning: ERFA function \"utcut1\" yielded 1 of \"dubious year (Note 3)\" [astropy._erfa.core]\n" + ] + }, + { + "ename": "ValueError", + "evalue": "zero-size array to reduction operation maximum which has no identity", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mskycalc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcalculatePointings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdc2_visits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m293\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcalcDepths\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/.local/lib/python3.6/site-packages/obscond/skybrightness.py\u001b[0m in \u001b[0;36mcalculatePointings\u001b[0;34m(self, pointings, raCol, decCol, bandCol, mjdCol, FWHMeffCol, calcSkyMags, calcDepths, calcPointingCoords, calcMoonSun, hwBandPassDict, sm)\u001b[0m\n\u001b[1;32m 140\u001b[0m sm.setRaDecMjd(lon=ra, lat=dec,\n\u001b[1;32m 141\u001b[0m \u001b[0mfilterNames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbandName\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmjd\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmjd\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 142\u001b[0;31m degrees=False, azAlt=False)\n\u001b[0m\u001b[1;32m 143\u001b[0m \u001b[0mmydict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetComputedVals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcalcPointingCoords\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/stack/miniconda3-4.3.21-10a4fa6/DarwinX86/sims_skybrightness/2.4.2.sims+1/python/lsst/sims/skybrightness/skyModel.py\u001b[0m in \u001b[0;36msetRaDecMjd\u001b[0;34m(self, lon, lat, mjd, degrees, azAlt, solarFlux, filterNames)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0;31m# Interpolate the templates to the set paramters\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 335\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_interpSky\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 336\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 337\u001b[0m def setRaDecAltAzMjd(self, ra, dec, alt, az, mjd, degrees=False, solarFlux=130.,\n", + "\u001b[0;32m~/soft/LSST3/stack/miniconda3-4.3.21-10a4fa6/DarwinX86/sims_skybrightness/2.4.2.sims+1/python/lsst/sims/skybrightness/skyModel.py\u001b[0m in \u001b[0;36m_interpSky\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomponents\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 616\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomponents\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 617\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterpObjs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpoints\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgoodPix\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfilterNames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilterNames\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 618\u001b[0m \u001b[0;31m# Make sure the component has something\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'spec'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/stack/miniconda3-4.3.21-10a4fa6/DarwinX86/sims_skybrightness/2.4.2.sims+1/python/lsst/sims/skybrightness/interpComponents.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, intepPoints, filterNames)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterpMag\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mintepPoints\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfilterNames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfilterNames\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 163\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minterpSpec\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mintepPoints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 164\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mindxAndWeights\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpoints\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/stack/miniconda3-4.3.21-10a4fa6/DarwinX86/sims_skybrightness/2.4.2.sims+1/python/lsst/sims/skybrightness/interpComponents.py\u001b[0m in \u001b[0;36minterpSpec\u001b[0;34m(self, interpPoints)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minterpSpec\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minterpPoints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 216\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_weighting\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minterpPoints\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlogSpec\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 217\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m10.\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/stack/miniconda3-4.3.21-10a4fa6/DarwinX86/sims_skybrightness/2.4.2.sims+1/python/lsst/sims/skybrightness/interpComponents.py\u001b[0m in \u001b[0;36m_weighting\u001b[0;34m(self, interpPoints, values)\u001b[0m\n\u001b[1;32m 517\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0;31m# Check that moonAltitude is in range, otherwise return zero array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 519\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minterpPoints\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'moonAltitude'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdimDict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'moonAltitude'\u001b[0m\u001b[0;34m]\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 520\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/python/miniconda3-4.3.21/lib/python3.6/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36mamax\u001b[0;34m(a, axis, out, keepdims)\u001b[0m\n\u001b[1;32m 2318\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2319\u001b[0m return _methods._amax(a, axis=axis,\n\u001b[0;32m-> 2320\u001b[0;31m out=out, **kwargs)\n\u001b[0m\u001b[1;32m 2321\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2322\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/LSST3/python/miniconda3-4.3.21/lib/python3.6/site-packages/numpy/core/_methods.py\u001b[0m in \u001b[0;36m_amax\u001b[0;34m(a, axis, out, keepdims)\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;31m# small reductions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_amax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mumr_maximum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_amin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: zero-size array to reduction operation maximum which has no identity" + ] + } + ], + "source": [ + "skycalc.calculatePointings(dc2_visits.head(293), calcDepths=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from obscond.historicalWeatherData import SeeingFile" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "seeing = synopsim.pointings[['expMJD', 'rawSeeing']].sort_values(by='expMJD')" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from scipy.interpolate import interp1d" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "rawSeeing = interp1d(seeing.expMJD, seeing.rawSeeing)" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "obsHistID\n", + "235 0.859965\n", + "236 0.859965\n", + "237 0.859965\n", + "238 0.859965\n", + "239 0.859965\n", + "Name: rawSeeing, dtype: float64" + ] + }, + "execution_count": 149, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "seeing.iloc[5:10]['rawSeeing']" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.859965, 0.859965, 0.859965, 0.859965, 0.859965])" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rawSeeing(seeing.expMJD.iloc[5:10])" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([61044.09996707, 61044.10040689, 61044.1008467 , ...,\n", + " 62132.07094641, 62132.07066533, 62132.07038424])" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits.expMJD.values" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dc2_visits['night'] = np.floor(dc2_visits.expMJD - 59580)" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "76" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dc2_visits" + ] + }, + { + "cell_type": "code", + "execution_count": 282, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df = availabletimes.groupby('night').agg(dict(mjd=(min, max, timerange))).reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 285, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(977, 4)" + ] + }, + "execution_count": 285, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.values.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 286, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "df = pd.DataFrame(df.values, columns=('night', 'minmjd', 'maxmjd', 'timerange'))" + ] + }, + { + "cell_type": "code", + "execution_count": 287, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/rbiswas/soft/LSST3/python/miniconda3-4.3.21/lib/python3.6/site-packages/ipykernel_launcher.py:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "source": [ + "df.timediff = (df.maxmjd - df.minmjd)* 24" + ] + }, + { + "cell_type": "code", + "execution_count": 289, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 289, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all(df.timerange == df.timediff)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Methods " + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mintime(series):\n", + " return np.remainder(min(series), 1.0) * 24.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "x = dff.groupby('night').aggregate(dict(alt='count')).reset_index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Baseline Expectations" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Scratch" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "1480 + " + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.03231444775151" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.degrees(op.sunAlt_singleTime(61040.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "op.obs" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15019.5" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "op.doff" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s = ephem.Sun()" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "op.obs.date = 61040. - op.doff" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sun.compute(lsstObs)\n", + " return sun.alt" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s.compute(op.obs)" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0703771635890007" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.alt" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.03337714821100235" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "op.sunAlt_singleTime(61040.)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from lsst.sims.utils import Site" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "site = Site('LSST')" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import ephem" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sun = ephem.Sun()" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "lsstObs = ephem.Observer()\n", + "lsstObs.lat = np.radians(site.latitude)\n", + "lsstObs.lon = np.radians(site.longitude)\n", + "lsstObs.elevation = site.height" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "lsstObs.date = 61040 - doff" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sun.compute(lsstObs)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.03337714821100235" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sun.alt" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.527864360290173" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lsstObs.lat" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.234809973810476" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "op.obs.lat" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.234809973810476" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lsstObs.long" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.527864360290173" + ] + }, + "execution_count": 127, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lsstObs.lat" + ] + }, + { + "cell_type": "code", + "execution_count": 265, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61060" + ] + }, + "execution_count": 265, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1480 + 59580" + ] + }, + { + "cell_type": "code", + "execution_count": 266, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
altazmjdmoonAltmoonDecmoonRAnightsunAltmoonDist
2880085.53485462.40999861060.0000006.963303-18.475540315.8087371480-1.99601887.551695
2880185.72550060.93902561060.0006956.765085-18.471209315.8176441480-2.13211087.546388
2880285.91332559.33753161060.0013896.567147-18.466878315.8265651480-2.27292087.541067
2880386.09792057.58905861060.0020836.369501-18.462548315.8355011480-2.42185687.535734
2880486.27880655.67488161060.0027786.172159-18.458218315.8444521480-2.58456887.530388
2880586.45541153.57381761060.0034725.975133-18.453888315.8534181480-2.77169287.525029
2880686.62706451.26210361060.0041675.778438-18.449559315.8623991480-3.00701187.519656
2880786.79296848.71343961060.0048615.582089-18.445230315.8713951480-3.35805787.514271
2880886.95218345.89930861060.0055565.386101-18.440902315.8804051480-3.91834087.508872
2880987.10360642.78973061060.0062505.190495-18.436574315.8894311480-4.40133087.503460
2881087.24594939.35470461060.0069454.995287-18.432246315.8984711480-4.75897787.498036
2881187.37773335.56657661060.0076394.800501-18.427919315.9075261480-5.05786487.492598
2881287.49728931.40361561060.0083334.606159-18.423592315.9165961480-5.32510087.487147
2881387.60278626.85488061060.0090284.412314-18.419266315.9256811480-5.57289987.481683
2881487.69229521.92611361060.0097224.218942-18.414940315.9347811480-5.80765487.476206
2881587.76389416.64574961060.0104174.026099-18.410615315.9438951480-6.03317487.470716
2881687.81582211.06935861060.0111113.833818-18.406290315.9530241480-6.25185187.465212
2881787.8466535.28033261060.0118063.642135-18.401966315.9621681480-6.46529287.459696
2881887.855479359.38503261060.0125003.451090-18.397642315.9713271480-6.67462387.454166
2881987.842029353.50227761060.0131953.260728-18.393319315.9805011480-6.88068287.448624
2882087.806712347.74938061060.0138893.071097-18.388997315.9896891480-7.08401287.443068
2882187.750559342.22861961060.0145832.882252-18.384675315.9988921480-7.28511587.437499
2882287.675079337.01779461060.0152782.694250-18.380354316.0081101480-7.48434187.431917
2882387.582082332.16661361060.0159722.507157-18.376034316.0173421480-7.68196887.426322
2882487.473502327.69834061060.0166672.321043-18.371714316.0265891480-7.87821587.420714
2882587.351255323.61473361060.0173612.135986-18.367395316.0358511480-8.07325887.415093
2882687.217142319.90214561060.0180561.952073-18.363077316.0451281480-8.26552787.409458
2882787.072794316.53725361060.0187501.769396-18.358760316.0544191480-8.45397587.403811
2882886.919650313.49166561060.0194451.588056-18.354443316.0637251480-8.64216387.398150
2882986.758957310.73522261060.0201391.408165-18.350127316.0730451480-8.83008787.392476
..............................
8637066.020560268.23802861099.97916718.17684321.259618132.7156901519-2.17197591.274991
8637165.804106268.12712461099.97986118.34063621.257314132.7230021519-2.32817891.279760
8637265.587666268.01699061099.98055618.50407021.255006132.7303011519-2.49638091.284517
8637365.371241267.90760361099.98125018.66714321.252694132.7375871519-2.68623591.289261
8637465.154830267.79894361099.98194518.82984821.250377132.7448591519-2.91877491.293993
8637564.938436267.69098961099.98263918.99218521.248057132.7521181519-3.25373491.298712
8637664.722057267.58372061099.98333419.15415021.245732132.7593641519-3.83058591.303419
8637764.505696267.47711761099.98402819.31574321.243403132.7665971519-4.37980291.308114
8637864.289352267.37116161099.98472219.47695521.241070132.7738171519-4.77338591.312796
8637964.073027267.26583461099.98541719.63778821.238732132.7810241519-5.09782791.317466
8638063.856720267.16111961099.98611119.79823621.236391132.7882181519-5.38691291.322124
8638163.640434267.05699961099.98680619.95829821.234045132.7953991519-5.65487091.326770
8638263.424167266.95345761099.98750020.11796921.231695132.8025671519-5.90908091.331403
8638363.207921266.85047761099.98819520.27724521.229340132.8097221519-6.15371491.336024
8638462.991696266.74804361099.98888920.43612721.226981132.8168651519-6.39138391.340633
8638562.775494266.64614161099.98958420.59461021.224618132.8239951519-6.62381591.345230
8638662.559313266.54475661099.99027820.75269021.222250132.8311121519-6.85223491.349815
8638762.343156266.44387461099.99097220.91036321.219878132.8382161519-7.07742991.354387
8638862.127023266.34348261099.99166721.06762621.217502132.8453081519-7.30007991.358948
8638961.910913266.24356561099.99236121.22447821.215121132.8523871519-7.52065691.363496
8639061.694828266.14411261099.99305621.38091521.212735132.8594541519-7.73952091.368032
8639161.478769266.04510961099.99375021.53693421.210346132.8665091519-7.95695691.372557
8639261.262735265.94654461099.99444521.69252921.207951132.8735501519-8.17318491.377069
8639361.046727265.84840661099.99513921.84769921.205553132.8805801519-8.38371791.381570
8639460.830747265.75068361099.99583422.00244221.203149132.8875971519-8.59337491.386059
8639560.614793265.65336561099.99652822.15675121.200742132.8946021519-8.80290991.390536
8639660.398868265.55643961099.99722222.31062721.198329132.9015951519-9.01231991.395001
8639760.182970265.45989561099.99791722.46406421.195913132.9085751519-9.22160391.399454
8639859.967102265.36372461099.99861122.61705821.193491132.9155441519-9.43076191.403895
8639959.751263265.26791661099.99930622.76960721.191065132.9225001519-9.63978991.408325
\n", + "

57600 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " alt az mjd moonAlt moonDec moonRA \\\n", + "28800 85.534854 62.409998 61060.000000 6.963303 -18.475540 315.808737 \n", + "28801 85.725500 60.939025 61060.000695 6.765085 -18.471209 315.817644 \n", + "28802 85.913325 59.337531 61060.001389 6.567147 -18.466878 315.826565 \n", + "28803 86.097920 57.589058 61060.002083 6.369501 -18.462548 315.835501 \n", + "28804 86.278806 55.674881 61060.002778 6.172159 -18.458218 315.844452 \n", + "28805 86.455411 53.573817 61060.003472 5.975133 -18.453888 315.853418 \n", + "28806 86.627064 51.262103 61060.004167 5.778438 -18.449559 315.862399 \n", + "28807 86.792968 48.713439 61060.004861 5.582089 -18.445230 315.871395 \n", + "28808 86.952183 45.899308 61060.005556 5.386101 -18.440902 315.880405 \n", + "28809 87.103606 42.789730 61060.006250 5.190495 -18.436574 315.889431 \n", + "28810 87.245949 39.354704 61060.006945 4.995287 -18.432246 315.898471 \n", + "28811 87.377733 35.566576 61060.007639 4.800501 -18.427919 315.907526 \n", + "28812 87.497289 31.403615 61060.008333 4.606159 -18.423592 315.916596 \n", + "28813 87.602786 26.854880 61060.009028 4.412314 -18.419266 315.925681 \n", + "28814 87.692295 21.926113 61060.009722 4.218942 -18.414940 315.934781 \n", + "28815 87.763894 16.645749 61060.010417 4.026099 -18.410615 315.943895 \n", + "28816 87.815822 11.069358 61060.011111 3.833818 -18.406290 315.953024 \n", + "28817 87.846653 5.280332 61060.011806 3.642135 -18.401966 315.962168 \n", + "28818 87.855479 359.385032 61060.012500 3.451090 -18.397642 315.971327 \n", + "28819 87.842029 353.502277 61060.013195 3.260728 -18.393319 315.980501 \n", + "28820 87.806712 347.749380 61060.013889 3.071097 -18.388997 315.989689 \n", + "28821 87.750559 342.228619 61060.014583 2.882252 -18.384675 315.998892 \n", + "28822 87.675079 337.017794 61060.015278 2.694250 -18.380354 316.008110 \n", + "28823 87.582082 332.166613 61060.015972 2.507157 -18.376034 316.017342 \n", + "28824 87.473502 327.698340 61060.016667 2.321043 -18.371714 316.026589 \n", + "28825 87.351255 323.614733 61060.017361 2.135986 -18.367395 316.035851 \n", + "28826 87.217142 319.902145 61060.018056 1.952073 -18.363077 316.045128 \n", + "28827 87.072794 316.537253 61060.018750 1.769396 -18.358760 316.054419 \n", + "28828 86.919650 313.491665 61060.019445 1.588056 -18.354443 316.063725 \n", + "28829 86.758957 310.735222 61060.020139 1.408165 -18.350127 316.073045 \n", + "... ... ... ... ... ... ... \n", + "86370 66.020560 268.238028 61099.979167 18.176843 21.259618 132.715690 \n", + "86371 65.804106 268.127124 61099.979861 18.340636 21.257314 132.723002 \n", + "86372 65.587666 268.016990 61099.980556 18.504070 21.255006 132.730301 \n", + "86373 65.371241 267.907603 61099.981250 18.667143 21.252694 132.737587 \n", + "86374 65.154830 267.798943 61099.981945 18.829848 21.250377 132.744859 \n", + "86375 64.938436 267.690989 61099.982639 18.992185 21.248057 132.752118 \n", + "86376 64.722057 267.583720 61099.983334 19.154150 21.245732 132.759364 \n", + "86377 64.505696 267.477117 61099.984028 19.315743 21.243403 132.766597 \n", + "86378 64.289352 267.371161 61099.984722 19.476955 21.241070 132.773817 \n", + "86379 64.073027 267.265834 61099.985417 19.637788 21.238732 132.781024 \n", + "86380 63.856720 267.161119 61099.986111 19.798236 21.236391 132.788218 \n", + "86381 63.640434 267.056999 61099.986806 19.958298 21.234045 132.795399 \n", + "86382 63.424167 266.953457 61099.987500 20.117969 21.231695 132.802567 \n", + "86383 63.207921 266.850477 61099.988195 20.277245 21.229340 132.809722 \n", + "86384 62.991696 266.748043 61099.988889 20.436127 21.226981 132.816865 \n", + "86385 62.775494 266.646141 61099.989584 20.594610 21.224618 132.823995 \n", + "86386 62.559313 266.544756 61099.990278 20.752690 21.222250 132.831112 \n", + "86387 62.343156 266.443874 61099.990972 20.910363 21.219878 132.838216 \n", + "86388 62.127023 266.343482 61099.991667 21.067626 21.217502 132.845308 \n", + "86389 61.910913 266.243565 61099.992361 21.224478 21.215121 132.852387 \n", + "86390 61.694828 266.144112 61099.993056 21.380915 21.212735 132.859454 \n", + "86391 61.478769 266.045109 61099.993750 21.536934 21.210346 132.866509 \n", + "86392 61.262735 265.946544 61099.994445 21.692529 21.207951 132.873550 \n", + "86393 61.046727 265.848406 61099.995139 21.847699 21.205553 132.880580 \n", + "86394 60.830747 265.750683 61099.995834 22.002442 21.203149 132.887597 \n", + "86395 60.614793 265.653365 61099.996528 22.156751 21.200742 132.894602 \n", + "86396 60.398868 265.556439 61099.997222 22.310627 21.198329 132.901595 \n", + "86397 60.182970 265.459895 61099.997917 22.464064 21.195913 132.908575 \n", + "86398 59.967102 265.363724 61099.998611 22.617058 21.193491 132.915544 \n", + "86399 59.751263 265.267916 61099.999306 22.769607 21.191065 132.922500 \n", + "\n", + " night sunAlt moonDist \n", + "28800 1480 -1.996018 87.551695 \n", + "28801 1480 -2.132110 87.546388 \n", + "28802 1480 -2.272920 87.541067 \n", + "28803 1480 -2.421856 87.535734 \n", + "28804 1480 -2.584568 87.530388 \n", + "28805 1480 -2.771692 87.525029 \n", + "28806 1480 -3.007011 87.519656 \n", + "28807 1480 -3.358057 87.514271 \n", + "28808 1480 -3.918340 87.508872 \n", + "28809 1480 -4.401330 87.503460 \n", + "28810 1480 -4.758977 87.498036 \n", + "28811 1480 -5.057864 87.492598 \n", + "28812 1480 -5.325100 87.487147 \n", + "28813 1480 -5.572899 87.481683 \n", + "28814 1480 -5.807654 87.476206 \n", + "28815 1480 -6.033174 87.470716 \n", + "28816 1480 -6.251851 87.465212 \n", + "28817 1480 -6.465292 87.459696 \n", + "28818 1480 -6.674623 87.454166 \n", + "28819 1480 -6.880682 87.448624 \n", + "28820 1480 -7.084012 87.443068 \n", + "28821 1480 -7.285115 87.437499 \n", + "28822 1480 -7.484341 87.431917 \n", + "28823 1480 -7.681968 87.426322 \n", + "28824 1480 -7.878215 87.420714 \n", + "28825 1480 -8.073258 87.415093 \n", + "28826 1480 -8.265527 87.409458 \n", + "28827 1480 -8.453975 87.403811 \n", + "28828 1480 -8.642163 87.398150 \n", + "28829 1480 -8.830087 87.392476 \n", + "... ... ... ... \n", + "86370 1519 -2.171975 91.274991 \n", + "86371 1519 -2.328178 91.279760 \n", + "86372 1519 -2.496380 91.284517 \n", + "86373 1519 -2.686235 91.289261 \n", + "86374 1519 -2.918774 91.293993 \n", + "86375 1519 -3.253734 91.298712 \n", + "86376 1519 -3.830585 91.303419 \n", + "86377 1519 -4.379802 91.308114 \n", + "86378 1519 -4.773385 91.312796 \n", + "86379 1519 -5.097827 91.317466 \n", + "86380 1519 -5.386912 91.322124 \n", + "86381 1519 -5.654870 91.326770 \n", + "86382 1519 -5.909080 91.331403 \n", + "86383 1519 -6.153714 91.336024 \n", + "86384 1519 -6.391383 91.340633 \n", + "86385 1519 -6.623815 91.345230 \n", + "86386 1519 -6.852234 91.349815 \n", + "86387 1519 -7.077429 91.354387 \n", + "86388 1519 -7.300079 91.358948 \n", + "86389 1519 -7.520656 91.363496 \n", + "86390 1519 -7.739520 91.368032 \n", + "86391 1519 -7.956956 91.372557 \n", + "86392 1519 -8.173184 91.377069 \n", + "86393 1519 -8.383717 91.381570 \n", + "86394 1519 -8.593374 91.386059 \n", + "86395 1519 -8.802909 91.390536 \n", + "86396 1519 -9.012319 91.395001 \n", + "86397 1519 -9.221603 91.399454 \n", + "86398 1519 -9.430761 91.403895 \n", + "86399 1519 -9.639789 91.408325 \n", + "\n", + "[57600 rows x 9 columns]" + ] + }, + "execution_count": 266, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "opdf.query('night > 1479 and night < 1520')" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "synopsim.pointings.airmass.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/obscond/observingPotential.py b/obscond/observingPotential.py new file mode 100644 index 0000000..f318ded --- /dev/null +++ b/obscond/observingPotential.py @@ -0,0 +1,272 @@ +from __future__ import print_function, division, absolute_import + +__all__ = ['ObservationPotential'] +import time +import numpy as np +import pandas as pd + + +import lsst.sims.skybrightness as sb +from lsst.sims.utils import (Site, approx_RaDec2AltAz) +import ephem +from obscond import SkyCalculations as sm + + +from lsst.sims.utils import angularSeparation +from scipy.interpolate import interp1d + +class ObservationPotential(object): + """ + Class to define the potential for observations + + + Parameters + ---------- + fieldRA : float, in radians + RA of the field + fieldDec : float, in radians + Dec of the field + observatory : string, defaults to `LSST` + string specifying observatory to `ephem` + """ + def __init__(self, fieldRA, fieldDec, + observatory='LSST'): + self.ra = np.degrees(fieldRA) + self.dec = np.degrees(fieldDec) + self.site = Site(observatory) + self.sun = ephem.Sun() + self.moon = ephem.Moon() + self.obs = ephem.Observer() + self.obs.lat = np.radians(self.site.latitude) + self.obs.long = np.radians(self.site.longitude) + self.obs.elevation = self.site.height + self.doff = ephem.Date(0) - ephem.Date('1858/11/17') + self._available_times = None + self.sec = 1.0 / 24.0 / 60.0/ 60.0 + + def moonCoords_singleTime(self, mjd): + """ + returns the moon ra, dec, and alt in radians + + Parameters + ---------- + mjd : `np.float`, unit day + time of observation + + Returns + ------- + moon ra: radians + moon dec: radians + moon alt: radians + """ + self.obs.date = mjd - self.doff + self.moon.compute(self.obs) + return self.moon.ra, self.moon.dec, self.moon.alt + + + def sunAlt_singleTime(self, tt): + """return the sun Altitude at a time tt in radians + + Parameters + ---------- + tt : `np.float`, unit day + time at which altitude is desired in mjd + + Returns + ------- + sun alt: radians + """ + self.obs.date = tt - self.doff + self.sun.compute(self.obs) + + return self.sun.alt + + def sunAlt(self, mjd): + """return the sun Altitude at an array of times in degrees + + Parameters + ---------- + mjd : array-like, MJD + sequence of times of observation in MJD + """ + sunAlt = np.degrees(list(self.sunAlt_singleTime(tt) for tt in mjd)) + return sunAlt + + def moonCoords(self, mjd): + """return the moon coordinates (ra, dec, Alt) at an array of times in + degrees + + + Parameters + ---------- + mjd : sequence of floats + Times in Modified Julian Date + + Returns + ------- + moon ra: degrees + moon dec: degrees + moon alt: degrees + """ + moonRA, moonDec, moonAlt = list(zip(*(self.moonCoords_singleTime(tt) for tt in mjd))) + return np.degrees(moonRA), np.degrees(moonDec), np.degrees(moonAlt) + + + def field_coords(self, fieldRA, fieldDec, mjd): + """Return the field Coordinates in degrees. + + Parameters + ---------- + fieldRA : float, or array, degrees + RA of the field + fiedlDec : float or array, degrees + Dec of the field + mjd : float or array + Returns + ------- + alt : degrees + az : degrees + """ + ra = np.ravel(fieldRA) + dec = np.ravel(fieldDec) + mjd = np.ravel(mjd) + + # note that all angle arguments are in degrees + alt, az = approx_RaDec2AltAz(ra=ra, dec=dec, + lat=self.site.latitude, + lon=self.site.longitude, + mjd=mjd, + lmst=None) + return alt, az + + def potential_obscond(self, t, fieldRA, fieldDec, + nightOffset=59579.6): + """ + Calculate the observing Conditions at a sequence of mjd values + `t` for a location with ra and dec `fieldRA` and `fieldDec` in + `degrees`. + Parameters + ---------- + t : times at which observations are being made + + fieldRA : RA, degree + + fieldDec : Dec, degree + + nightOffset : mjd value, defaults to 59579.6 + mjd value for night = 0 of the survey. + """ + alt, az = self.field_coords(fieldRA, fieldDec, mjd=t) + moonra, moondec, moonalt = self.moonCoords(mjd=t) + sunAlt = self.sunAlt(mjd=t) + + df = pd.DataFrame(dict(mjd=t, + alt=alt, + az=az, + sunAlt=sunAlt, + moonRA=moonra, + moonDec=moondec, + moonAlt=moonalt, + night=np.floor(t-59579.6).astype(np.int))) + + df['moonDist'] = angularSeparation(moonra, moondec, + np.degrees(self.ra), + np.degrees(self.dec)) + + return df + + def available_times(self, potential_times, constraints): + """returns available times + """ + self._available_times = potential_times.query(constraints) + return self._available_times + + @staticmethod + def dc2_sequence(start_time, year_block, delta=1): + """ + + Parameters + ---------- + start_time : + + year_block : + + delta : , defaults to 1. + """ + sec = 1.0 / 24.0/60./60. + + if year_block == 1: + fraction = 0.75 + + if year_block == 2: + fraction = 0.5 + delta = 0. + + standard_sequence = np.array(list((20, 10, 20, 26, 20))) + time = start_time + l = [] + visitlist = [] + seq = standard_sequence + extravisits = np.array([0, 1, 0, 1, 0]) * delta + #print(seq) + bandlist = [] + + # Iterate through the standard list of band, standard visit sequences + # For on and off years + for band, visits, morevisits in zip(list('rgizy'), seq, extravisits): + numVisits = np.floor(visits * fraction) + morevisits + times = np.linspace(time, time + (numVisits - 1) * 38 * sec, + numVisits) + l.append(times) + visitlist.append(numVisits) + time = times[-1] + 150.0 * sec + bandlist.append(np.repeat(band, numVisits)) + df = pd.DataFrame(dict(expMJD=np.concatenate(l), + filter=np.concatenate(bandlist))) + return df, visitlist + + @staticmethod + def dc2_visits(start_times, year_block, delta=1, pointings=None): + + vs = [] + for st in start_times.values: + df, vl = ObservationPotential.dc2_sequence(st, year_block, delta) + vs.append(df) + df = pd.concat(vs) + df['night'] = np.floor(df.expMJD - 59579.6) + + if pointings is not None: + rawSeeing = interp1d(pointings.expMJD.values, + pointings.rawSeeing.values, + kind='nearest') + + df['rawSeeing'] = rawSeeing(df.expMJD.values) + alt, az = approx_RaDec2AltAz(ra=ra, dec=dec, + lat=self.site.latitude, + lon=self.site.longitude, + mjd=df.expMJD.values, + lmst=None) + df['alt'] = alt + df['az'] = az + + return df + + @staticmethod + def nightStats(availabletimes): + df = availabletimes.groupby('night').agg(dict(mjd=(min, max))).reset_index() + df = pd.DataFrame(df.values, columns=('night', 'minmjd', 'maxmjd')) + df['availTime'] = (df.maxmjd - df.minmjd) * 24.0 + return df.set_index('night') + + @staticmethod + def start_times(nightStats, chosen_nights, rng): + zz = nightStats + df = zz.loc[chosen_nights]#.tolist()) + df['maxtime'] = df.maxmjd - 1.25 / 24. + random = rng.uniform(size=len(chosen_nights)) + start_time = df.minmjd + (df.maxtime - df.minmjd) * random + return start_time + + @staticmethod + def timerange(series): + return (max(series) - min(series))*24.0 diff --git a/obscond/skybrightness.py b/obscond/skybrightness.py index 59a2a39..512b509 100644 --- a/obscond/skybrightness.py +++ b/obscond/skybrightness.py @@ -134,9 +134,8 @@ def calculatePointings(self, pointings, for obsHistID, row in pointings.iterrows(): ra =row[raCol] dec =row[decCol] - bandName = row[bandCol] mjd = row[mjdCol] - FWHMeff = row[FWHMeffCol] + bandName = row[bandCol] sm.setRaDecMjd(lon=ra, lat=dec, filterNames=bandName, mjd=mjd, degrees=False, azAlt=False) @@ -161,6 +160,8 @@ def calculatePointings(self, pointings, sunAz[count] = mydict['sunAz'] if calcDepths: + bandName = row[bandCol] + FWHMeff = row[FWHMeffCol] if count == 0: resultCols += ['fiveSigmaDepth'] fiveSigmaDepth[count] = self.fiveSigmaDepth(bandName, @@ -168,6 +169,7 @@ def calculatePointings(self, pointings, provided_airmass=airmass[count], use_provided_airmass=False) if calcSkyMags: + bandName = row[bandCol] if count == 0: resultCols += ['filtSkyBrightness'] skymags[count] = self.skymag(bandName, sm=sm, @@ -176,17 +178,30 @@ def calculatePointings(self, pointings, idxs[count] = obsHistID count += 1 - df = pd.DataFrame(dict(obsHistID=idxs, filtSkyBrightness=skymags, - fiveSigmaDepth=fiveSigmaDepth, - altitude=altitude, - azimuth=azimuth, - airmass=airmass, - moonRA=moonRA, - moonDec=moonDec, - moonAZ=moonAZ, - moonAlt=moonAlt, - moonPhase=moonPhase, - sunAlt=sunAlt, - sunAz=sunAz)).set_index('obsHistID') + if calcDepths: + df = pd.DataFrame(dict(obsHistID=idxs, filtSkyBrightness=skymags, + fiveSigmaDepth=fiveSigmaDepth, + altitude=altitude, + azimuth=azimuth, + airmass=airmass, + moonRA=moonRA, + moonDec=moonDec, + moonAZ=moonAZ, + moonAlt=moonAlt, + moonPhase=moonPhase, + sunAlt=sunAlt, + sunAz=sunAz)).set_index('obsHistID') + else: + df = pd.DataFrame(dict(obsHistID=idxs, filtSkyBrightness=skymags, + altitude=altitude, + azimuth=azimuth, + airmass=airmass, + moonRA=moonRA, + moonDec=moonDec, + moonAZ=moonAZ, + moonAlt=moonAlt, + moonPhase=moonPhase, + sunAlt=sunAlt, + sunAz=sunAz)).set_index('obsHistID') df.index = df.index.astype(np.int64) return df[resultCols] diff --git a/obscond/version.py b/obscond/version.py index 3d18726..7225152 100644 --- a/obscond/version.py +++ b/obscond/version.py @@ -1 +1 @@ -__version__ = "0.5.0" +__version__ = "0.5.2"