diff --git a/docs/io/visualization/index.rst b/docs/io/visualization/index.rst index bb16a845310..3d200d07917 100644 --- a/docs/io/visualization/index.rst +++ b/docs/io/visualization/index.rst @@ -14,6 +14,7 @@ diagnostic visualizations. sdec_plot convergence_plot + montecarlo_packet_visualization TARDIS Widgets (Graphical User Interfaces) diff --git a/docs/io/visualization/montecarlo_packet_visualization.ipynb b/docs/io/visualization/montecarlo_packet_visualization.ipynb new file mode 100644 index 00000000000..ebd21756299 --- /dev/null +++ b/docs/io/visualization/montecarlo_packet_visualization.ipynb @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Montecarlo Packet Visualization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This visualization tool plots the `RPackets` that are generated by the [Montecarlo](https://tardis-sn.github.io/tardis/physics/montecarlo/index.html) method and creates an animated plot that contains the packet trajectories as they move away from the photosphere.\n", + "The properties of individual RPackets are taken from the [rpacket_tracker](https://tardis-sn.github.io/tardis/io/output/rpacket_tracking.html). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis import run_tardis\n", + "from tardis.io.config_reader import Configuration\n", + "import plotly.express as px\n", + "import plotly.graph_objects as go\n", + "import math\n", + "import pandas as pd\n", + "import numpy as np\n", + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Reading the Configuration stored in `tardis_example.yml` into config\n", + "\n", + "config = Configuration.from_yaml(\"tardis_example.yml\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# changing config file for plotting 15 packets\n", + "\n", + "config[\"montecarlo\"][\"tracking\"][\"track_rpacket\"]=True\n", + "config[\"montecarlo\"][\"seed\"]= 457\n", + "config[\"montecarlo\"][\"no_of_packets\"]=10\n", + "config[\"montecarlo\"][\"iterations\"]=1\n", + "config[\"montecarlo\"][\"last_no_of_packets\"]=15\n", + "config[\"montecarlo\"][\"no_of_virtual_packets\"]=3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "sim = run_tardis(config, show_progress_bars=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# accessing the rpacket_tracker dataframe\n", + "sim.runner.rpacket_tracker_df" + ] + }, + { + "attachments": { + "packet_diagram.jpg": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/4QBqRXhpZgAASUkqAAgAAAADABIBAwABAAAAAQAAADEBAgARAAAAMgAAAGmHBAABAAAARAAAAAAAAABTaG90d2VsbCAwLjMwLjEwAAACAAKgCQABAAAAGQIAAAOgCQABAAAA9gEAAAAAAAD/4Qn0aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjUzNyIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjUwMiIgdGlmZjpJbWFnZVdpZHRoPSI1MzciIHRpZmY6SW1hZ2VIZWlnaHQ9IjUwMiIgdGlmZjpPcmllbnRhdGlvbj0iMSIvPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/2wBDAAMCAgMCAgMDAwMEAwMEBQgF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/s5/6b4W8U6yeTq3i/XJgf7yRX81rGfoY7ZCPYivVq8t/Zct5Iv2d/h7cTKUuNQ0eDVJlPUS3K/aHB990pr1KgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArgfG/wT8OeNNXGuxi78N+LY0EcXiXQJvst+qjorsAVnQf885lkT/ZrvqKAPHv+E58d/Cj93450tvGPhxOnivwzZsbmBf715p67n4HWS33g8kxRgV6Z4X8V6N420O11nw/qtprOk3K7obyxmWWJ+xwynGQeCOoIwa1a8y8U/BG3l1268T+CdVl8CeL7hvMubyyiEllqTf9PtoSEn448wFJQOFkUcUAem0V5TofxoudA1i08OfEzS4vCGuXMggstUilMujaq54CwXDAeXK3/PCYK+eEMoG6vVqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5H4n/Dq0+Jnhk6dLdS6XqNtMl7per2oHn6deJnyp488EjJBU8OjOjZViD11FAHn/AMJPiLd+MLTUNG8Q20Ol+ONAdbbWtOhJ8sswJjuoM8tbzKC6HqMMjfPGwHoFeZfF7wPqs91p/jrwdCreN9ARhHbFxGmsWRIabT5WPHz43Rsf9XKqN90uG6/wL420r4jeE9O8RaLM82n30ZZRKhSWJwSrxSIeUkR1ZGQ8qysDyKAN6iiigArz79obXZPDPwF+I+qw5+0Wnh3UJYQOrSC3fYo9y2B+Neg15T+03/pPwobSxydZ1vRtIK+qXGp20Mn4CN3J9gaAPQfCmhR+F/C2j6NDjytOsobNMdMRoEH8q1aKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAoa7oOm+KNHu9J1jT7XVdLvIzFcWV7CssMyHqrowIYexFeTnwt4w+B377wgLvxv4HTmTwreXO/UtPT/pwuJW/eoB/wAu8zZHRJFAEZ9nooA5zwJ8QtA+JWif2p4fvxeQJI0E8Lo0VxazL96GeFwHikXPKOAw445ro6858efCBNc1z/hLPC2pHwj47jjWMavBF5kN7Gv3YL2DIFxF1xkq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LBo9gBIHByA88zLljjkKgUA9S9aOg+E9K8NPdy6faCK4vJDLc3MjNJNO3q8jEs2OgBOAOBgVr0AQ2lnBYW0dvawR21vGMJFEgRVHoAOBXGfGbwHdePvBE1vpM0dn4m02ePVdDvZfuwX8J3RFv9huY3HeOSQd67migDmPhp47tfiX4E0fxLaQSWi30OZrOb/WWk6sUmt5P9uORXjb/aQ109eQ+G/+LZfHTV/Drfu9A8bJJr2mf3YdSiCrfQD08xDFcKO7C6avXqACiiigArxnxn/xez4kL4Fh/e+DfDcsN94okHKXl38strpvuo+S4mH93yEORKwHVfGH4gXfgjw/a2mh28WoeMdduBpmhWEudklyyljLJjkQworyyEfwRkD5mUHBg1Lw/wDsy+FPA/h+7/tHVrjxHr8WjNqSRo013qd15s0l3cksuA7pIzFc43KFXAGAD1mlriZfinYSfFPU/h3aWdzL4ks/D8XiESShUtHilnmgjj3hiwffA2fkwAQQScgeZfs6+M/iNqvxg+L/AIX+IOvafrEuhf2PNaW+k2S29rZfabeSWSKJiPMkUEKN8jEnbkBAdoAPoOiiigAooooAKKKKAPJfiN/xR/xp+HXixfktNUNx4S1Fu2J1+0Wkjf7s1uYl97w+vHrVcD8d/CN542+EviPTtKH/ABPYoF1DSWxnZqFs63Fo34TxRGui8C+LrPx/4J0DxPpxzYazYQahBk5IjljV1B98MKANyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArzf4nfDO91jUrXxh4PuYNH+IGmRGK3uZsi21K3zuNjeBeWhY5KsAWiY71/iV/SKKAOQ+GfxJsviTok1xHbTaTq9hMbPVtEvCPtOm3SgFopAODwQyuMq6MrqSrA119eW/FHwLq1hrsPxE8DwLJ4vsIRBe6XvEcev2KksbWQngSrlmhlP3HJUnZI9dp4G8baT8RfCth4h0Sdp9PvFJUSIY5YnViskUiHlJEdWRkPKspB5FAG9RRRQAUUV5/8VPjRpHwqudB0+fTdW8ReIdemlh0vQdCt1mvLvykDysA7oiIilSzu6qNy85IoA9AorhfhP8YdG+L+natNp1nqWkajo182m6po+s24gvLG4VVfZIoZlIKOjKyM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wl8IvEVzpL7NevIk0rST/wBP93Itta++BLNGTjsDXVeDvC9l4H8JaJ4c01PL07SLGDT7ZPSKKNUQfkooA2KKKKACiiigAooooAKKKKACiiigAooooAKKKKACvKR/xOP2pz/EPDvg0f8AATqF6f5/2V+lerV5R8J/+J18U/i9r55RdXtNCt3/AL0VrZRSN+U93cr9VNAHq9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAeU/tCf6bp/gPR+v9p+M9H+X1+zT/bv/AGzz+FerV5T8Sf8AibfG74QaR977JPqviEr7QWZs8n6HUl/EivVqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKZNNHbQvLK6xRRqWd3OFUDkkk9BQB5P44/4rj47eCfC6/PYeG4JPFmpqOnmkPa2EbezM13KP8AatFr1uvJv2eopPEeka58RruNkufG97/aNosgw0WlooisEwem6FROV7PcyCvWaACiiigAooooAKKKKACiiigAooooAKKKKACiiigBrusaMzMFVRksTgAV5X+zCrXfwb0rX5ARL4oubzxMSRg7L66luoh/wGKWJR7KKu/tH65daF8D/Fzac/l6vqFn/Y+mt6Xl462tt9f3s8ddzoGiWvhrQdN0exTyrLT7aO0gT+7HGoVR+QFAGhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHlNuf7Z/amvmHzL4e8HQx57K1/eyFh9caahP/AfUV6tXlHwc/4nHxA+LviE/Mk/iGLSbZv+mNpZW6MPwuHu69XoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAryX4/wB1L4ottE+GNhK6XvjOZ4L94mIe30eLa1/LkcruRkt1Ych7pD2NerXFxFaW8s88iQwxKXeSRgqooGSST0AHevJvgfBL451LWvitfRun/CRqltoMMqkNb6LEWNu2D0a4ZnuD0O2SFTzHQB6xbW0VnbxQQRpDBEoSOONQqooGAAB0AHapaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDyf4t/8VJ8TfhX4SX54zqU/iW9j9baxiwmfpd3Nk3/AT+HrFeTeAT/wlvx0+IviU/PaaLFaeFLJv4d6J9ru3X/ee6gjPva47GvWaACiiigAooooAKKKKACiiigAooooAKZNNHbQyTSuscUal3djgKAMkmn15n+0rqtzpfwK8YR2Mhi1PU7MaLYyDqt1eutpAR7iSdKAK/7MEMknwR8P6xOjJceI3uvEsiuMMDqFzLehT6bRcKuOwUDtXqlVNI0q20LSbLTbOMRWdnAlvDGOioihVH4ACrdABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVyHxS+Ilv8M/Cj6m1rJqmp3EqWWlaTAwE2o3smRDbpnpk5LMeERXdsKpNAHGfF6Z/ih4psvhNYMxsLmFNR8W3EZx5Ol7iEtCR0e7dGjx/wA8UuDwdmfX4okgjSONFjjQBVRRgKB0AHpXEfCL4e3HgLw9cy6vdx6p4t1q4Opa7qcakLcXbKF2xg8rDGipFGp6JGucnJPdUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWN4y8VWHgXwhrfiTVJPK03SLKa/uX9IokLsfyU1s15J8d/8AirNS8EfDqP518R6ot5qSDtpliVuJ8/7Mkv2W3YelyaANn4B+Fb7wl8J9Cg1iPy/EF+smr6uPS/u5Gublc9wskrqP9lQOMYr0KiigAooooAKKKKACiiigAooooAKKKKACvJ/jB/xUXxE+FPhIfNHNq8viC8T1trCEsh/C7nsTn2+lesV5N4XP/CVftHeNdW+/aeGNJs/DsDf3bqfN7dj8Ym078vpQB6zRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeJ/B8n4zeJrj4q6n/x5Wk97pHhjSm5+wRRTPBc3MnY3EzxMMjISIKqnLyFiigD2yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8j+G/8AxWPxq+JHim46aJND4R0+FusUccUd3cSexlkuY1P+zbRng5FFFAHrlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeTfsw/8TP4Vx+KJObvxZqN74hmJ6gXE7mGM+8cAgi/7Z0UUAes0UUUAFFFFABRRRQAUUUUAf//Z" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Finding packet coordinates\n", + "\n", + "\\\n", + "\n", + "\n", + "

The diagram above shows the packet trajectory as it starts from photosphere `P0` and continues to move along the subsequent points `P1`, `P2`, and so on.\n", + "\n", + "
\n", + "\n", + "Note\n", + " \n", + "Here `μ` represents the direction of packet propagation with respect to the radial line.\n", + " \n", + "
\n", + "\n", + "To determine the polar coordinates of any arbitrary point, say `P2`, we need `r2` and `θ2`. `r2` is already present in the array obtained from the simulation. To determine `θ2`, we use sine rule and apply it to the triangle `OP1P2`, where `O` is the center.\n", + "\n", + "$$\n", + "\\frac{r_{2}}{\\sin(\\pi - \\mu_{1})} = \\frac{r_{1}}{\\sin(\\alpha)}\n", + "$$\n", + "\n", + "Now, writing `α` in terms of `μ1` and `θ2`\n", + "\n", + "$$ \n", + "α = μ_{1} - θ_{2}\n", + "$$\n", + "$$\n", + "\\frac{r_{2}}{\\sin(\\pi - \\mu_{1})} = \\frac{r_{1}}{\\sin(μ_{1} - θ_{2})}\n", + "$$\n", + "\n", + "Thus,\n", + "\n", + "$$ \n", + "θ_{2} = -\\sin^{-1}(\\frac{r1}{r2}\\sin(\\mu_{1})) + \\mu_{1}\n", + "$$\n", + "\n", + "Hence, for `ith` point, `θ` will be:\n", + "\n", + "$$ \n", + "θ_{i} = -\\sin^{-1}(\\frac{r_{i-1}}{r_{i}}\\sin(\\mu_{i-1})) + \\mu_{i-1}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function for getting x y coordinates and interactions for a packet\n", + "def get_x_y_ints_with_theta_init(r_track,mu_track,time,last_interaction_type,direction=\"normal\",theta_initial=0):\n", + " xs,ys,theta,ints = [],[],[],[]\n", + " \n", + " for i in range(len(r_track)):\n", + " if(i==0):\n", + " theta.append(theta_initial)\n", + " else:\n", + " if(direction == 'random' or direction == 'r'):\n", + " multiplier = random.choice([-1,1])\n", + " elif(direction == 'opposite' or direction == 'o'):\n", + " multiplier = -1\n", + " else:\n", + " multiplier = 1\n", + " if (r_track[i]X: %{x}'+\n", + " '
Y: %{y}
'+\n", + " 'Last Interaction: %{text}',\n", + " text = [interaction_from_num.get(ints[i][j]) for j in range(len(xs[i]))],\n", + " line = dict(color=\"darkslategrey\"),\n", + "# line_shape = \"spline\",\n", + " marker = dict(opacity = [interaction_opacity_from_num.get(ints[i][j]) for j in range(len(xs[i]))],color=[interaction_color_from_num.get(ints[i][j]) for j in range(len(xs[i]))])\n", + " ))\n", + "\n", + "#adding legends\n", + "fig.add_trace(go.Scatter(\n", + " x=[9999999],\n", + " y=[0],\n", + " legendgroup=\"a\",\n", + " opacity=1,\n", + " legendgrouptitle=dict(font=dict(color=\"#444\"),text=\"Interaction Type:\"),\n", + " mode=\"lines+markers\",\n", + " name=\"Escattering\",\n", + " hoverlabel=dict(font=dict(color=\"#222\")),\n", + " marker = dict(color=\"#3366FF\"),\n", + "))\n", + "fig.add_trace(go.Scatter(\n", + " x=[9999999],\n", + " y=[0],\n", + " legendgroup=\"a\",\n", + " opacity=1,\n", + " mode=\"lines+markers\",\n", + " name=\"Line\",\n", + " marker = dict(color=\"#FF3300\"),\n", + "))\n", + "\n", + "\n", + "# Set figure size\n", + "fig.layout.plot_bgcolor = '#fafafa'\n", + "fig.layout.paper_bgcolor = '#fafafa'\n", + "\n", + "fig.update_layout(width=900, height=900,\n", + " title=\"Packet Trajectories\",\n", + " title_font_color=\"#444\",\n", + " updatemenus=[dict(type=\"buttons\",\n", + " pad=dict(t=750),\n", + " buttons=[dict(label=\"Play\",\n", + " method=\"animate\",\n", + " args=[None])])])\n", + "\n", + "# creating frames for animation\n", + "def get_frames(l):\n", + " frames=[]\n", + " for i in range(len(xs)):\n", + " frames.append(go.Scatter(\n", + " x=xs[i].tolist()[0:l],\n", + " y=ys[i].tolist()[0:l],\n", + " mode=\"markers+lines\",\n", + " name=\"Packet \"+str(i+1),\n", + " showlegend=False,\n", + " hovertemplate =\n", + " 'X: %{x}'+\n", + " '
Y: %{y}
'+\n", + " 'Last Interaction: %{text}',\n", + " text = [interaction_from_num.get(ints[i][j]) for j in range(len(xs[i]))],\n", + " line = dict(color=\"darkslategrey\"),\n", + " # line_shape = \"spline\",\n", + " marker = dict(opacity = [interaction_opacity_from_num.get(ints[i][j]) for j in range(len(xs[i]))],color=[interaction_color_from_num.get(ints[i][j]) for j in range(len(xs[i]))])\n", + " ))\n", + " return frames\n", + " \n", + "fig.frames=[go.Frame(data=get_frames(i)) for i in range(max_size+1)]\n", + "\n", + "fig.show(renderer=\"notebook_connected\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "6890d83cfa6c65bebc4bd449872c06a268510d8b8ae8c923ce6786e6c4796836" + }, + "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.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}