{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Compare galactic power simulations via galactic and local CS" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "from radiocalibrationtoolkit import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# some global plot settings\n", "plt.rcParams[\"axes.labelweight\"] = \"bold\"\n", "plt.rcParams[\"font.weight\"] = \"bold\"\n", "plt.rcParams[\"font.size\"] = 16\n", "plt.rcParams[\"legend.fontsize\"] = 14\n", "\n", "plt.rcParams[\"xtick.major.width\"] = 2\n", "plt.rcParams[\"ytick.major.width\"] = 2\n", "\n", "plt.rcParams[\"xtick.major.size\"] = 5\n", "plt.rcParams[\"ytick.major.size\"] = 5\n", "\n", "plt.rcParams[\"xtick.labelsize\"] = 14\n", "plt.rcParams[\"ytick.labelsize\"] = 14\n", "\n", "layout_settings = dict(\n", " xaxis=dict(title=\"<b>LST</b>\", tickprefix=\"<b>\", ticksuffix=\"</b>\", dtick=2),\n", " yaxis=dict(\n", " title=\"<b>frequency [MHz]</b>\",\n", " tickprefix=\"<b>\",\n", " ticksuffix=\"</b>\",\n", " range=(30, 80),\n", " tick0=0,\n", " dtick=10,\n", " autorange=False,\n", " ),\n", " font=dict(\n", " size=20,\n", " color=\"black\",\n", " ),\n", " coloraxis=dict(\n", " colorbar=dict(\n", " tickprefix=\"<b>\",\n", " ticksuffix=\"</b>\",\n", " title=dict(text=\"<b>Power [pW]</b>\", side=\"right\")),\n", " cmin=0,\n", " cmax=24,\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# This ensures Plotly output works in multiple places:\n", "# plotly_mimetype: VS Code notebook UI\n", "# notebook: \"Jupyter: Export to HTML\" command in VS Code\n", "# See https://plotly.com/python/renderers/#multiple-renderers\n", "import plotly.io as pio\n", "pio.renderers.default = \"plotly_mimetype+notebook\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get the Power we need to just integrate the power spectrum density over the frequency.\n", "\n", " \\begin{equation*}\n", "P_{sky}(t,f) = \\int_{f} \\mathscr{P}_{sky}(t,f) df\n", "\\end{equation*} \n", "\n", "Thus, the full equation for the Sky Power Radio Emmision is:\n", "\n", " \\begin{equation*}\n", "P_{sky}(t,f) = \\frac{k_{b}}{c^{2}} \\int_{f} f^{2} \\int_{\\Omega} T_{sky}(t,f,\\theta,\\phi) \\frac{|H(f,\\theta,\\phi)|^{2}Z_{0}}{R_{r}} df d\\Omega \n", "\\end{equation*} \n", "\n", "where $Z_0$ is the vacuum impedance, $R_r$ is the antenna impedance, $k_b$ the Boltzmann constant and $c$ is the speed of light." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "LATITUDE = -35.206667" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "antenna_inst = AntennaPattern(\n", " \"./antenna_setup_files/SALLA_EW.xml\",\n", ")\n", "galactic_map_inst = GlobalSkyModel2016(freq_unit=\"MHz\")\n", "\n", "lst_range = range(24)\n", "freq_Mhz_range = range(30, 81, 1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Known impedance and HW response\n", "hw_file_path = \"./antenna_setup_files/HardwareProfileList_realistic.xml\"\n", "hw_dict = read_hw_file(hw_file_path, interp_args={'fill_value': 'extrapolate'})\n", "lst_range = range(24)\n", "freq_Mhz_range = range(30, 81, 1)\n", "impedance_func = hw_dict[\"IImpedance\"][\"antenna_EW\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Calculate power via galactic CS" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "power_density_DF = calculate_power_spectral_density(\n", " antenna_inst=antenna_inst,\n", " galactic_map_inst=galactic_map_inst,\n", " lst_range=lst_range,\n", " freq_Mhz_range=freq_Mhz_range,\n", " latitude=LATITUDE,\n", " update_antenna_conventions={\n", " \"shift_phi\": -90,\n", " \"flip_theta\": True,\n", " \"flip_phi\": False,\n", " \"in_degrees\": True,\n", " \"add_invisible_sky\": True,\n", " },\n", " impedance_func=impedance_func,\n", ")\n", "\n", "power_via_galactic_cs_DF = integrate_spectral_density(\n", " power_density_DF, integrated_MHz_bands=power_density_DF.columns\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = px.imshow(\n", " power_via_galactic_cs_DF.T * 1e12, width=600, aspect=\"cube\", color_continuous_scale=\"jet\"\n", ")\n", "fig.update_layout(**layout_settings)\n", "fig.update_layout(\n", " title=\"<b>Simulated power dataset via galactic CS</b>\",\n", " coloraxis=dict(\n", " cmin=0, # Minimum color value\n", " cmax=0.1, # Maximum color value\n", " )\n", ")\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Calculate power via local CS" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nside_transform = 128\n", "power_density_DF = calculate_power_spectral_density(\n", " antenna_inst=antenna_inst,\n", " galactic_map_inst=galactic_map_inst,\n", " lst_range=lst_range,\n", " freq_Mhz_range=freq_Mhz_range,\n", " latitude=LATITUDE,\n", " update_antenna_conventions={\n", " \"shift_phi\": -90,\n", " \"flip_theta\": True,\n", " \"flip_phi\": False,\n", " \"in_degrees\": True,\n", " \"add_invisible_sky\": True,\n", " },\n", " impedance_func=impedance_func,\n", " # perform calculations in the local cs\n", " transform_hpmaps2_local_cs=True,\n", " nside_transform=nside_transform,\n", ")\n", "\n", "power_via_local_cs_DF = integrate_spectral_density(\n", " power_density_DF, integrated_MHz_bands=power_density_DF.columns\n", ")\n", "\n", "# power_via_local_cs_DF.to_csv('./power_via_local_CS_{}nside.csv'.format(nside_transform))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = px.imshow(\n", " power_via_local_cs_DF.T * 1e12, width=600, aspect=\"cube\", color_continuous_scale=\"jet\"\n", ")\n", "fig.update_layout(**layout_settings)\n", "fig.update_layout(\n", " title=\"<b>Simulated power dataset via local CS</b>\",\n", " coloraxis=dict(\n", " cmin=0, # Minimum color value\n", " cmax=0.1, # Maximum color value\n", " )\n", ")\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Compare" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = px.imshow(\n", " (power_via_galactic_cs_DF/power_via_local_cs_DF.values).T -1, width=650, aspect=\"cube\", color_continuous_scale=\"jet\"\n", ")\n", "fig.update_layout(**layout_settings)\n", "fig.update_layout(\n", " title=\"<b>Power calculation comparison</b>\",\n", " coloraxis=dict(\n", " colorbar=dict(title=dict(text=\"<b>(<sup>via galactic CS</sup>/<sub>via local CS</sub>)-1</b>\", side=\"right\", font=dict(size=30))),\n", " cmin=None,\n", " cmax=None, \n", " )\n", ")\n", "\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# maximal difference\n", "(np.abs(power_via_galactic_cs_DF/power_via_local_cs_DF.values-1)).values.max()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# average difference\n", "(power_via_galactic_cs_DF/power_via_local_cs_DF.values-1).values.mean()" ] } ], "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.10.0" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "vscode": { "interpreter": { "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" } } }, "nbformat": 4, "nbformat_minor": 2 }