{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "56760cda", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\n", "WARNING: version mismatch between CFITSIO header (v4.000999999999999) and linked library (v4.01).\n", "\n", "\n", "WARNING: version mismatch between CFITSIO header (v4.000999999999999) and linked library (v4.01).\n", "\n", "\n", "WARNING: version mismatch between CFITSIO header (v4.000999999999999) and linked library (v4.01).\n", "\n" ] } ], "source": [ "import os, sys, time\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import healpy as hp\n", "\n", "from rubin_sim.data import get_data_dir\n", "import sqlite3\n", "\n", "from sat_utils import Constellation, starlink_constellation_v1" ] }, { "cell_type": "code", "execution_count": 2, "id": "088ebb4b", "metadata": {}, "outputs": [], "source": [ "# load up some visits\n", "\n", "limit = 900\n", "\n", "dd = get_data_dir()\n", "baseline_file = os.path.join(dd,'sim_baseline/baseline.db')\n", "\n", "# Conenct to the sqlite database\n", "con = sqlite3.connect(baseline_file)\n", "\n", "# Load up the first year\n", "df = pd.read_sql('select * from observations where night < 1 and sunAlt > -24 ;', con)\n", "\n", "con.close()" ] }, { "cell_type": "code", "execution_count": 3, "id": "91afc1b0", "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", "
observationIdfieldRAfieldDecobservationStartMJDflush_by_mjdvisitExposureTimefilterrotSkyPosrotSkyPos_desirednumExposures...sunAzsunRAsunDecmoonRAmoonDecmoonDistancesolarElongmoonPhasecummTelAzscripted_id
00310.024480-60.81292860218.00180660218.02357630.0y-297.249225-297.2492252...255.593220186.644048-2.87082727.60946311.95611194.490314102.95865187.407902169.4544440
11310.601871-63.56142560218.00225460218.02357630.0y-297.708278-297.7082782...255.500445186.644453-2.87100127.61533811.95943895.029204101.74395987.404494170.5028750
22311.292611-66.31777460218.00270360218.02357630.0y-297.909620-297.9096202...255.407493186.644858-2.87117627.62120811.96276595.563446100.49786087.401088171.4067380
33312.140731-69.08266660218.00315260218.02357630.0y-297.838337-297.8383372...255.314364186.645264-2.87135027.62707311.96609396.09284299.22126187.397685172.1977910
44304.170163-73.37544260218.00362360218.02357630.0y-309.290623-309.2906232...255.216260186.645690-2.87153327.63323211.96959399.60537094.82114287.394110177.2398030
..................................................................
118830336.319706-85.44807960218.39248660218.40499930.0i-56.043578-56.0435782...101.469398186.997138-3.02238631.25908614.500684101.85671290.89391985.254586146.9482660
119831294.594225-87.43803360218.39305360218.40499930.0i-96.112005-96.1120052...101.360003186.997650-3.02260631.26462414.503548104.78640887.75442285.251529143.5266990
120832324.991600-82.86830360218.39357860218.40499930.0i-68.489767-68.4897672...101.258784186.998125-3.02280931.26976714.506202101.54829392.28088385.248692149.1151810
121833302.751653-81.83535160218.39408460218.40499930.0i-90.162716-90.1627162...101.161561186.998582-3.02300631.27472214.508754104.14903090.53960585.245958147.8722900
122834319.697784-80.15791960218.39456960218.40499930.0i-74.792911-74.7929112...101.068535186.999020-3.02319431.27947914.511200101.22122393.65749385.243335151.1898620
\n", "

123 rows × 44 columns

\n", "
" ], "text/plain": [ " observationId fieldRA fieldDec observationStartMJD flush_by_mjd \\\n", "0 0 310.024480 -60.812928 60218.001806 60218.023576 \n", "1 1 310.601871 -63.561425 60218.002254 60218.023576 \n", "2 2 311.292611 -66.317774 60218.002703 60218.023576 \n", "3 3 312.140731 -69.082666 60218.003152 60218.023576 \n", "4 4 304.170163 -73.375442 60218.003623 60218.023576 \n", ".. ... ... ... ... ... \n", "118 830 336.319706 -85.448079 60218.392486 60218.404999 \n", "119 831 294.594225 -87.438033 60218.393053 60218.404999 \n", "120 832 324.991600 -82.868303 60218.393578 60218.404999 \n", "121 833 302.751653 -81.835351 60218.394084 60218.404999 \n", "122 834 319.697784 -80.157919 60218.394569 60218.404999 \n", "\n", " visitExposureTime filter rotSkyPos rotSkyPos_desired numExposures \\\n", "0 30.0 y -297.249225 -297.249225 2 \n", "1 30.0 y -297.708278 -297.708278 2 \n", "2 30.0 y -297.909620 -297.909620 2 \n", "3 30.0 y -297.838337 -297.838337 2 \n", "4 30.0 y -309.290623 -309.290623 2 \n", ".. ... ... ... ... ... \n", "118 30.0 i -56.043578 -56.043578 2 \n", "119 30.0 i -96.112005 -96.112005 2 \n", "120 30.0 i -68.489767 -68.489767 2 \n", "121 30.0 i -90.162716 -90.162716 2 \n", "122 30.0 i -74.792911 -74.792911 2 \n", "\n", " ... sunAz sunRA sunDec moonRA moonDec \\\n", "0 ... 255.593220 186.644048 -2.870827 27.609463 11.956111 \n", "1 ... 255.500445 186.644453 -2.871001 27.615338 11.959438 \n", "2 ... 255.407493 186.644858 -2.871176 27.621208 11.962765 \n", "3 ... 255.314364 186.645264 -2.871350 27.627073 11.966093 \n", "4 ... 255.216260 186.645690 -2.871533 27.633232 11.969593 \n", ".. ... ... ... ... ... ... \n", "118 ... 101.469398 186.997138 -3.022386 31.259086 14.500684 \n", "119 ... 101.360003 186.997650 -3.022606 31.264624 14.503548 \n", "120 ... 101.258784 186.998125 -3.022809 31.269767 14.506202 \n", "121 ... 101.161561 186.998582 -3.023006 31.274722 14.508754 \n", "122 ... 101.068535 186.999020 -3.023194 31.279479 14.511200 \n", "\n", " moonDistance solarElong moonPhase cummTelAz scripted_id \n", "0 94.490314 102.958651 87.407902 169.454444 0 \n", "1 95.029204 101.743959 87.404494 170.502875 0 \n", "2 95.563446 100.497860 87.401088 171.406738 0 \n", "3 96.092842 99.221261 87.397685 172.197791 0 \n", "4 99.605370 94.821142 87.394110 177.239803 0 \n", ".. ... ... ... ... ... \n", "118 101.856712 90.893919 85.254586 146.948266 0 \n", "119 104.786408 87.754422 85.251529 143.526699 0 \n", "120 101.548293 92.280883 85.248692 149.115181 0 \n", "121 104.149030 90.539605 85.245958 147.872290 0 \n", "122 101.221223 93.657493 85.243335 151.189862 0 \n", "\n", "[123 rows x 44 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# data frame with a list of observations\n", "df" ] }, { "cell_type": "code", "execution_count": 4, "id": "87e5aa08", "metadata": {}, "outputs": [], "source": [ "# Make a satellite constellation\n", "tles = starlink_constellation_v1()\n", "constellation = Constellation(tles)" ] }, { "cell_type": "code", "execution_count": 5, "id": "f951281d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "progress = 99.187%runtime = 17.55 min\n" ] } ], "source": [ "# Check the first method\n", "lengths = []\n", "nstreaks = []\n", "n_rows = len(df)\n", "t1 = time.time()\n", "for index, row in df.iterrows():\n", " length, streak = constellation.check_pointing(row['altitude'], row['azimuth'],\n", " row['observationStartMJD'], row['visitTime'])\n", " lengths.append(length)\n", " nstreaks.append(streak)\n", " # A simple progress bar\n", " progress = index/float(n_rows)*100\n", " text = \"\\rprogress = %.3f%%\" % progress\n", " sys.stdout.write(text) \n", " sys.stdout.flush() \n", "t2 = time.time()\n", "print('runtime = %.2f min' % ((t2-t1)/60.) )" ] }, { "cell_type": "code", "execution_count": 18, "id": "dac3dc1b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "runtime = 0.22 min\n" ] } ], "source": [ "# check the new method\n", "t1 = time.time()\n", "\n", "fast_lengths, fast_nstreaks = constellation.check_pointings(df['fieldRA'].values, df['fieldDec'].values,\n", " df['observationStartMJD'].values,\n", " df['visitTime'].values)\n", "t2 = time.time()\n", "print('runtime = %.2f min' % ((t2-t1)/60.) )\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "b2746d96", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.45790382, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.35728576, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0.48420194, 0. , 3.01488367,\n", " 0. , 3.94327343, 3.49311862, 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 2.65747914, 3.49479904, 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 4.76254049,\n", " 0. , 1.75320204, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0.30309771, 0. ,\n", " 0. , 0. , 0. , 1.89715648, 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 2.1854968 , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.46532224, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. ])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array(lengths)" ] }, { "cell_type": "code", "execution_count": 21, "id": "c10c621b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.46212246, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.4627139 , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0.39851521, 0. , 3.10156612,\n", " 0. , 4.07961247, 3.46794492, 1.46467336, 3.37318255,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 3.40650719, 0. , 2.7307857 , 3.49614536, 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 4.71422215,\n", " 0. , 1.9492991 , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0.28570443, 0. ,\n", " 0. , 0. , 0. , 1.70605061, 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 2.28122718, 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 3.47544362, 0. , 0. , 0. ,\n", " 0. , 0. , 0. , 0. , 0. ,\n", " 0. , 0. , 0. ])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fast_lengths" ] }, { "cell_type": "code", "execution_count": 23, "id": "5be729e6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/05/z_zc9f654c5dlw06t4s_d68w0000gn/T/ipykernel_21285/2006847437.py:1: RuntimeWarning: invalid value encountered in true_divide\n", " (fast_lengths-np.array(lengths))/fast_lengths\n" ] }, { "data": { "text/plain": [ "array([ nan, nan, nan, nan,\n", " nan, nan, 1.21851056e-03, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, 3.04466799e-02, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, -2.15014956e-01,\n", " nan, 2.79479616e-02, nan, 3.34196069e-02,\n", " -7.25896683e-03, 1.00000000e+00, 1.00000000e+00, nan,\n", " nan, nan, nan, nan,\n", " 1.00000000e+00, nan, 2.68444937e-02, 3.85087193e-04,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, -1.02494841e-02, nan,\n", " 1.00598756e-01, nan, nan, nan,\n", " nan, nan, nan, -6.08785847e-02,\n", " nan, nan, nan, nan,\n", " -1.12016530e-01, nan, nan, nan,\n", " nan, nan, nan, 4.19644218e-02,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, 2.91225659e-03,\n", " nan, nan, nan, nan,\n", " nan, nan, nan, nan,\n", " nan, nan, nan])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(fast_lengths-np.array(lengths))/fast_lengths" ] }, { "cell_type": "code", "execution_count": null, "id": "f630f38e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 11, "id": "bc3d0734", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0.]), array([0]))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fast_lengths, fast_nstreaks" ] }, { "cell_type": "code", "execution_count": 12, "id": "d2d5fc90", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 0)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constellation.check_pointing(df['altitude'].values[i], df['azimuth'].values[i], df['observationStartMJD'].values[i],\n", " df['visitTime'].values[i])" ] }, { "cell_type": "code", "execution_count": 13, "id": "0ae1decf", "metadata": {}, "outputs": [], "source": [ "# So, why is the fast method finding more streaks than the slow method?" ] }, { "cell_type": "code", "execution_count": null, "id": "868ae945", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "010a6c4b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }