{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Removing particles from the simulation\n", "\n", "This tutorial shows the different ways to remove particles from a REBOUND simulation. Let us start by setting up a simple simulation with 10 bodies, and assign them unique hashes, so we can keep track of them (see [UniquelyIdentifyingParticlesWithHashes.ipynb](../UniquelyIdentifyingParticlesWithHashes))." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Particle hashes:[c_uint(0), c_uint(1), c_uint(2), c_uint(3), c_uint(4), c_uint(5), c_uint(6), c_uint(7), c_uint(8), c_uint(9)]\n" ] } ], "source": [ "import rebound\n", "import numpy as np\n", "\n", "sim = rebound.Simulation()\n", "sim.add(m=1., hash=0)\n", "for i in range(1,10):\n", " sim.add(a=i, hash=i)\n", "sim.move_to_com()\n", "\n", "print(\"Particle hashes:{0}\".format([sim.particles[i].hash for i in range(sim.N)]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us add one more particle, this time with a custom name:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Particle hashes:[c_uint(0), c_uint(1), c_uint(2), c_uint(3), c_uint(4), c_uint(5), c_uint(6), c_uint(7), c_uint(8), c_uint(9), c_uint(4066125545)]\n" ] } ], "source": [ "sim.add(a=10, hash=\"Saturn\")\n", "print(\"Particle hashes:{0}\".format([sim.particles[i].hash for i in range(sim.N)]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let us run perform a short integration to isolate the particles that interest us for a longer simulation:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Noutputs = 1000\n", "xs = np.zeros((sim.N, Noutputs))\n", "ys = np.zeros((sim.N, Noutputs))\n", "times = np.linspace(0.,50*2.*np.pi, Noutputs, endpoint=False)\n", "for i, time in enumerate(times):\n", " sim.integrate(time)\n", " xs[:,i] = [sim.particles[j].x for j in range(sim.N)]\n", " ys[:,i] = [sim.particles[j].y for j in range(sim.N)]\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "fig,ax = plt.subplots(figsize=(15,5))\n", "for i in range(sim.N):\n", " plt.plot(xs[i,:], ys[i,:])\n", "ax.set_aspect('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this stage, we might be interested in particles that remained within some semimajor axis range, particles that were in resonance with a particular planet, etc. Let's imagine a simple (albeit arbitrary) case where we only want to keep particles that had $x < 0$ at the end of the preliminary integration. Let's first print out the particle hashes and x positions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hash\t\tx\n", "c_uint(0)\t0.0\n", "c_uint(1)\t0.9510565162930091\n", "c_uint(2)\t-1.0717399536588612\n", "c_uint(3)\t-2.2765351809117464\n", "c_uint(4)\t0.15703926303973234\n", "c_uint(5)\t-4.897155109586999\n", "c_uint(6)\t-4.824394540939856\n", "c_uint(7)\t-2.2862837234997975\n", "c_uint(8)\t2.111033731282993\n", "c_uint(9)\t5.290067270630363\n", "c_uint(4066125545)\t-8.776421396714463\n" ] } ], "source": [ "print(\"Hash\\t\\tx\")\n", "for i in range(sim.N):\n", " print(\"{0}\\t{1}\".format(sim.particles[i].hash, xs[i,-1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that 4066125545 is the hash corresponding to the string \"Saturn\" we added above. We can use the `remove()` function to filter out particles. As an argument, we pass the corresponding index in the particles array." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of particles after cut = 7\n", "Hashes of remaining particles = [c_uint(0), c_uint(2), c_uint(3), c_uint(5), c_uint(6), c_uint(7), c_uint(4066125545)]\n" ] } ], "source": [ "for i in reversed(range(1,sim.N)):\n", " if xs[i,-1] > 0:\n", " sim.remove(i)\n", "print(\"Number of particles after cut = {0}\".format(sim.N))\n", "print(\"Hashes of remaining particles = {0}\".format([p.hash for p in sim.particles]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, the `remove()` function removes the `i`-th particle from the `particles` array, and shifts all particles with higher indices down by 1. This ensures that the original order in the `particles` array is preserved. Note that this is helpful for example if you use an integrator such as WHFast which uses Jacobi coordinates.\n", "\n", "By running through the planets in reverse order, we are guaranteed that when a particle with index `i` gets removed, the particle replacing it doesn't need to also be removed (we already checked it).\n", "\n", "If you have many particles and many removals (or you don't care about the ordering), you can save the reshuffling of all particles with higher indices with the flag `keepSorted=0`:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of particles after cut = 6\n", "Hashes of remaining particles = [c_uint(0), c_uint(2), c_uint(4066125545), c_uint(5), c_uint(6), c_uint(7)]\n" ] } ], "source": [ "sim.remove(2, keepSorted=0)\n", "print(\"Number of particles after cut = {0}\".format(sim.N))\n", "print(\"Hashes of remaining particles = {0}\".format([p.hash for p in sim.particles]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the order of the `particles` array has changed.\n", "\n", "Because in general particles can change positions in the `particles` array, a more robust way of referring to particles (rather than through their index) is through their hash, which won't change. You can pass `sim.remove` either the hash directly, or if you pass a string, it will be automatically converted to its corresponding hash:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of particles after cut = 5\n", "Hashes of remaining particles = [c_uint(0), c_uint(2), c_uint(5), c_uint(6), c_uint(7)]\n" ] } ], "source": [ "sim.remove(hash=\"Saturn\")\n", "print(\"Number of particles after cut = {0}\".format(sim.N))\n", "print(\"Hashes of remaining particles = {0}\".format([p.hash for p in sim.particles]))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "If you try to remove a particle with an invalid index or hash, an exception is thrown, which might be caught using the standard python syntax:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A runtime error occured: Particle to be removed not found in simulation. Did not remove particle.\n" ] } ], "source": [ "try:\n", " sim.remove(hash=\"Planet 9\")\n", "except RuntimeError as e:\n", " print(\"A runtime error occured: {0}\".format(e))" ] } ], "metadata": { "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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }