Skip to content
Snippets Groups Projects
workshop_example_notebook.ipynb 75.9 KiB
Newer Older
David Hendriks's avatar
David Hendriks committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "# Binary_c and python example notebook\n",
    "The following notebook servers as an example of how the binary_c python wrapper works and how it could be used.\n",
    "\n",
    "By: David Hendriks 30 nov 2019"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 16,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [],
   "source": [
    "import binarycpython\n",
    "import binary_c_python_api"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "## Core api wrapper functions:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "### run_binary()\n"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 17,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "Binary_c output:\n",
      "\n",
      "\n",
      "example_header_1 time=0 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 0 15 14 1 1 3540.3 0\n",
      "INITIAL_GRID 15 14 4530 0.02 1 0\n",
      "example_header_1 time=0 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 0 15 14 1 1 3540.3 0\n",
      "INITIAL_GRID 15 14 4530 0.02 1 0\n",
      "example_header_1 time=1e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 1e-07 15 14 1 1 3540.3 0\n",
      "example_header_1 time=2e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 2e-07 15 14 1 1 3540.3 0\n"
     ]
    }
   ],
   "source": [
    "m1 = 15.0  # Msun\n",
    "m2 = 14.0  # Msun\n",
    "separation = 0  # 0 = ignored, use period\n",
    "orbital_period = 4530.0  # days\n",
    "eccentricity = 0.0\n",
    "metallicity = 0.02\n",
    "max_evolution_time = 15000 # You need to set this!\n",
    "\n",
    "argstring = \"binary_c M_1 {0:g} M_2 {1:g} separation {2:g} orbital_period {3:g} eccentricity {4:g} metallicity {5:g} max_evolution_time {6:g}  \".format(\n",
    "    m1,\n",
    "    m2,\n",
    "    separation,\n",
    "    orbital_period,\n",
    "    eccentricity,\n",
    "    metallicity,\n",
    "    max_evolution_time,\n",
    ")\n",
    "\n",
    "output = binary_c_python_api.run_binary(argstring)\n",
    "\n",
    "print(\"\\n\\nBinary_c output:\\n\\n\")\n",
    "print('\\n'.join(output.split('\\n')[:10]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "### run_binary_with_log"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 18,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
David Hendriks's avatar
David Hendriks committed
      "      TIME      M1       M2   K1  K2           SEP   ECC  R1/ROL1 R2/ROL2  TYPE RANDOM_SEED=7106 RANDOM_COUNT=0\n",
      "     0.0000   15.000   14.000  1   1     2.786e+08  0.00   0.000   0.000  INITIAL \n",
      "    12.7509   14.645   13.776  2   1    2.8427e+08  0.00   0.000   0.000  TYPE_CHNGE\n",
      "    12.7773   14.639   13.775  4   1    2.8435e+08  0.00   0.000   0.000  TYPE_CHNGE\n",
      "    13.1380   13.748   13.758  4   1    2.9373e+08  0.00   0.000   0.000  q-inv\n",
      "    14.0900   10.830   13.705  4   2    3.2934e+08  0.00   0.000   0.000  OFF_MS\n",
      "    14.0900   10.830   13.705  4   2    3.2934e+08  0.00   0.000   0.000  TYPE_CHNGE\n",
      "    14.1204   10.726   13.700  4   4    3.3081e+08  0.00   0.000   0.000  TYPE_CHNGE\n",
      "    14.2118   10.410   13.566  5   4    3.3702e+08  0.00   0.000   0.000  TYPE_CHNGE\n",
      "    14.2646    1.472   13.462 13   4       -31.236 -1.00   0.000   0.000  Randbuf=34421 - d48r(0)=0.0570946 - d48r(1)=0.458272 - d48r(2)=0.13108 - d48r(3)=0.562029 - d48r(4)=0.924056 \n",
      "    14.2646    1.472   13.462 13   4       -31.236 -1.00   0.000   0.000  SN kick II (SN type 12 12, pre-explosion M=9.89211 Mc=4.78817 type=5) -> kick 1(190) vk=302.148 vr=0.113492 omega=5.80602 phi=0.124379 -> vn=302.048 ; final sep -31.2365 ecc -1 (random count 0) - Runaway v=(0,0,0) |v|=0 : companion v=(0,0,0), |v|=0 ; \n",
      "    14.2646    1.472   13.462 13   4       -31.236 -1.00   0.000   0.000  TYPE_CHNGE\n",
      "    14.2646    1.472   13.462 13   4       -31.236 -1.00   0.000   0.000  DISRUPT \n",
      "    14.2646    1.472   13.462 13   4       -31.236 -1.00   0.000   0.000  SN\n",
      "    15.7087    1.472   10.210 13   5       -31.236 -1.00   0.000   0.000  TYPE_CHNGE\n",
      "    15.7695    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  d48r(5)=0.608402 - d48r(6)=0.696003 - d48r(7)=0.796455 - d48r(8)=0.0834973 \n",
      "    15.7695    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  SN kick II (SN type 12 12, pre-explosion M=9.85661 Mc=4.3914 type=5) -> kick 1(190) vk=392.156 vr=0 omega=0.524629 phi=0.634667 -> vn=392.156 ; final sep -31.2365 ecc -1 (random count 5) - Runaway v=(0,0,0) |v|=0 : companion v=(0,0,0), |v|=0 ; \n",
      "    15.7695    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  TYPE_CHNGE\n",
      "    15.7695    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  q-inv\n",
      "    15.7695    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  SN\n",
      " 15000.0000    1.472    1.444 13  13       -31.236 -1.00   0.000   0.000  MAX_TIME\n",
David Hendriks's avatar
David Hendriks committed
      "Probability : 1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import tempfile\n",
    "import os\n",
    "\n",
    "m1 = 15.0  # Msun\n",
    "m2 = 14.0  # Msun\n",
    "separation = 0  # 0 = ignored, use period\n",
    "orbital_period = 4530.0  # days\n",
    "eccentricity = 0.0\n",
    "metallicity = 0.02\n",
    "max_evolution_time = 15000 # You need to set this!\n",
    "log_filename=tempfile.gettempdir() + \"/test_log.txt\"\n",
    "\n",
    "argstring = \"binary_c M_1 {0:g} M_2 {1:g} separation {2:g} orbital_period {3:g} eccentricity {4:g} metallicity {5:g} max_evolution_time {6:g} log_filename {7} \".format(\n",
    "    m1,\n",
    "    m2,\n",
    "    separation,\n",
    "    orbital_period,\n",
    "    eccentricity,\n",
    "    metallicity,\n",
    "    max_evolution_time,\n",
    "    log_filename,\n",
    ")\n",
    "\n",
    "output = binary_c_python_api.run_binary(argstring)\n",
    "\n",
    "print(os.path.exists(log_filename))\n",
    "\n",
    "with open(log_filename, 'r') as f:\n",
    "    print(f.read())\n",
    "\n",
    "\n",
    "# print(\"\\n\\nBinary_c output:\\n\\n\")\n",
    "# print(output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "### run binary with custom logging line"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 19,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "example_header_1 time=0 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 0 15 14 1 1 3540.3 0\n",
      "INITIAL_GRID 15 14 4530 0.02 1 0\n",
      "MY_STELLAR_DATA time=0 mass=15\n",
      "example_header_1 time=0 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 0 15 14 1 1 3540.3 0\n",
      "INITIAL_GRID 15 14 4530 0.02 1 0\n",
      "MY_STELLAR_DATA time=0 mass=15\n",
      "example_header_1 time=1e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 1e-07 15 14 1 1 3540.3 0\n",
      "MY_STELLAR_DATA time=1e-07 mass=15\n",
      "example_header_1 time=2e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 2e-07 15 14 1 1 3540.3 0\n",
      "MY_STELLAR_DATA time=2e-07 mass=15\n",
      "example_header_1 time=3e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 3e-07 15 14 1 1 3540.3 0\n",
      "MY_STELLAR_DATA time=3e-07 mass=15\n",
      "example_header_1 time=4e-07 mass_1=15 mass_2=14 st1=1 st2=1 sep=3540.3 ecc=0\n",
      "example_header_2 4e-07 15 14 1 1 3540.3 0\n",
      "MY_STELLAR_DATA time=4e-07 mass=15\n"
     ]
    }
   ],
   "source": [
    "from binarycpython.utils import custom_logging_functions\n",
    "# generate logging lines. Here you can choose whatever you want to have logged, and with what header\n",
    "# this generates working print statements\n",
    "logging_line = custom_logging_functions.autogen_C_logging_code(\n",
    "    {\"MY_STELLAR_DATA\": [\"model.time\", \"star[0].mass\"],}\n",
    ")\n",
    "# OR\n",
    "# You can also decide to `write` your own logging_line, which allows you to write a more complex logging statement with conditionals.\n",
    "logging_line = 'Printf(\"MY_STELLAR_DATA time=%g mass=%g\\\\n\", stardata->model.time, stardata->star[0].mass)'\n",
    "\n",
    "# Generate entire shared lib code around logging lines\n",
    "custom_logging_code = custom_logging_functions.binary_c_log_code(logging_line)\n",
    "# print(custom_logging_code)\n",
    "\n",
    "# Make this code into a shared library and the function into memory\n",
    "func_memaddr = custom_logging_functions.create_and_load_logging_function(custom_logging_code)\n",
    "\n",
    "# Run system with custom logging code\n",
    "m1 = 15.0  # Msun\n",
    "m2 = 14.0  # Msun\n",
    "separation = 0  # 0 = ignored, use period\n",
    "orbital_period = 4530.0  # days\n",
    "eccentricity = 0.0\n",
    "metallicity = 0.02\n",
    "max_evolution_time = 15000 # You need to set this!\n",
    "\n",
    "argstring = \"binary_c M_1 {0:g} M_2 {1:g} separation {2:g} orbital_period {3:g} eccentricity {4:g} metallicity {5:g} max_evolution_time {6:g}  \".format(\n",
    "    m1,\n",
    "    m2,\n",
    "    separation,\n",
    "    orbital_period,\n",
    "    eccentricity,\n",
    "    metallicity,\n",
    "    max_evolution_time,\n",
    ")\n",
    "\n",
    "output = binary_c_python_api.run_binary_custom_logging(argstring, func_memaddr)\n",
    "print('\\n'.join(output.split('\\n')[:20]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "## Using utils functions\n",
    "In the utils.functions there are some functions that make it easier to interact with the core api functions. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "### run_system()\n",
    "This function serves as an example on the function run_system and parse_output. \n",
    "There is more functionality with this method and several tasks are done behind the scene.\n",
    "\n",
    "Requires pandas, numpy to run.\n",
    "\n",
    "run_system: mostly just makes passing arguments to the function easier. It also loads all the necessary defaults in the background\n",
    "parse_output: Takes the raw output of binary_c and selects those lines that start with the given header. \n",
    "Note, if you dont use the custom_logging functionality binary_c should be configured to have output that starts with that given header\n",
    "\n",
    "The parsing of the output only works correctly if either all of the values are described inline like `mass=<number>' or none of them are.    "
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 20,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "example_header_1 time=0 mass_1=10 mass_2=20 st1=1 st2=1 sep=2.81762e+08 ecc=0\n",
      "example_header_2 0 10 20 1 1 2.81762e+08 0\n",
      "INITIAL_GRID 10 20 1e+11 0.02 1 0\n",
      "example_header_1 time=0 mass_1=10 mass_2=20 st1=1 st2=1 sep=2.81762e+08 ecc=0\n",
      "example_header_2 0 10 20 1 1 2.81762e+08 0\n",
      "INITIAL_GRID 10 20 1e+11 0.02 1 0\n",
      "example_header_1 time=1e-07 mass_1=10 mass_2=20 st1=1 st2=1 sep=2.81762e+08 ecc=0\n",
      "example_header_2 1e-07 10 20 1 1 2.81762e+08 0\n",
      "example_header_1 time=2e-07 mass_1=10 mass_2=20 st1=1 st2=1 sep=2.81762e+08 ecc=0\n",
      "example_header_2 2e-07 10 20 1 1 2.81762e+08 0\n",
      "\n",
      "\n",
      "\n",
      "              time    mass_1    mass_2   st1   st2           sep  ecc\n",
      "0     0.000000e+00  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "1     0.000000e+00  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "2     1.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "3     2.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "4     3.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "...            ...       ...       ...   ...   ...           ...  ...\n",
David Hendriks's avatar
David Hendriks committed
      "3927  1.102750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3928  1.202750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3929  1.302750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3930  1.402750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3931  1.500000e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
David Hendriks's avatar
David Hendriks committed
      "\n",
      "[3932 rows x 7 columns]\n",
      "              time    mass_1    mass_2   st1   st2           sep  ecc\n",
      "0     0.000000e+00  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "1     0.000000e+00  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "2     1.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "3     2.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "4     3.000000e-07  10.00000  20.00000   1.0   1.0  2.817620e+08  0.0\n",
      "...            ...       ...       ...   ...   ...           ...  ...\n",
David Hendriks's avatar
David Hendriks committed
      "3927  1.102750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3928  1.202750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3929  1.302750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3930  1.402750e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
      "3931  1.500000e+04   1.33817   1.62124  13.0  13.0 -4.896110e+01 -1.0\n",
David Hendriks's avatar
David Hendriks committed
      "\n",
      "[3932 rows x 7 columns]\n"
     ]
    }
   ],
   "source": [
    "from binarycpython.utils.functions import run_system, parse_output\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# Run system. all arguments can be given as optional arguments.\n",
    "output = run_system(M_1=10, M_2=20, separation=0, orbital_period=100000000000)\n",
    "\n",
    "print('\\n'.join(output.split('\\n')[:10]))\n",
    "\n",
    "# Catch results that start with a given header. (Mind that binary_c has to be configured to print them if your not using a custom logging function)\n",
    "result_example_header_1 = parse_output(output, selected_header=\"example_header_1\")\n",
    "result_example_header_2 = parse_output(output, selected_header=\"example_header_2\")\n",
    "\n",
    "# print(result_example_header_1)\n",
    "\n",
    "#### Now do whatever you want with it:\n",
    "# Or put them into a pandas array\n",
    "\n",
    "# Cast the data into a dataframe.\n",
    "# This example automatically catches the column names because the binary_c output line is constructed as 'example_header_1 time=<number>..'\n",
    "print('\\n\\n')\n",
    "\n",
    "df = pd.DataFrame.from_dict(result_example_header_1, dtype=np.float64)\n",
    "print(df)\n",
    "\n",
    "# This example has column headers which are numbered, but we can override that with custom headers.\n",
    "df2 = pd.DataFrame.from_dict(result_example_header_2, dtype=np.float64)\n",
    "df2.columns=['time', 'mass_1', 'mass_2', 'st1', 'st2', 'sep', 'ecc']\n",
    "print(df2)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "### run_system() and custom logging\n",
    "Function that will use a automatically generated piece of logging code. Compile it, load it \n",
    "into memory and run a binary system. See run_system on how several things are done in the background here.\n"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 21,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              time      mass\n",
      "0     0.000000e+00  1.000000\n",
      "1     0.000000e+00  1.000000\n",
      "2     1.000000e-07  1.000000\n",
      "3     2.000000e-07  1.000000\n",
      "4     3.000000e-07  1.000000\n",
      "...            ...       ...\n",
      "3630  1.131680e+04  0.627748\n",
      "3631  1.231680e+04  0.627748\n",
      "3632  1.331680e+04  0.627748\n",
      "3633  1.431680e+04  0.627748\n",
      "3634  1.500000e+04  0.627748\n",
      "\n",
      "[3635 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "from binarycpython.utils.custom_logging_functions import (\n",
    "    autogen_C_logging_code,\n",
    "    binary_c_log_code,\n",
    ")\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# generate logging lines. Here you can choose whatever you want to have logged, and with what header\n",
    "# this generates working print statements\n",
    "logging_line = autogen_C_logging_code(\n",
    "    {\"MY_STELLAR_DATA\": [\"model.time\", \"star[0].mass\"],}\n",
    ")\n",
    "# OR\n",
    "# You can also decide to `write` your own logging_line, which allows you to write a more complex logging statement with conditionals.\n",
    "logging_line = 'Printf(\"MY_STELLAR_DATA time=%g mass=%g\\\\n\", stardata->model.time, stardata->star[0].mass)'\n",
    "\n",
    "# Generate entire shared lib code around logging lines\n",
    "custom_logging_code = binary_c_log_code(logging_line)\n",
    "\n",
    "# Run system. all arguments can be given as optional arguments. the custom_logging_code is one of them and will be processed automatically.\n",
    "output = run_system(\n",
    "    M_1=1,\n",
    "    metallicity=0.002,\n",
    "    M_2=0.1,\n",
    "    separation=0,\n",
    "    orbital_period=100000000000,\n",
    "    custom_logging_code=custom_logging_code,\n",
    ")\n",
    "\n",
    "# Catch results that start with a given header. (Mind that binary_c has to be configured to print them if your not using a custom logging function)\n",
    "# DOESNT WORK YET if you have the line autogenerated.\n",
    "result_example_header = parse_output(output, \"MY_STELLAR_DATA\")\n",
    "\n",
    "# Cast the data into a dataframe.\n",
    "df = pd.DataFrame.from_dict(result_example_header, dtype=np.float64)\n",
    "\n",
    "# Do whatever you like with the dataframe.\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "source": [
    "## Other example\n",
    "Checking how much mass stars lose on the main sequence."
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 12,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [],
   "source": [
    "def run_and_calc_mass(**kwargs):\n",
    "    \"\"\"\n",
    "    Function to run a given system and look at the mass lost in the main sequence of the star\n",
    "    \"\"\"\n",
    "    # start = time.time()\n",
    "    output = run_system(**kwargs)\n",
    "    result = parse_output(output, 'example_header_1')\n",
    "    # stop = time.time()\n",
    "    # print(\"Took {:.2f}s to run single system\".format(stop-start))\n",
    "    # print(\"The following keys are present in the results:\\n{}\".format(result.keys()))\n",
    "    # print(len(result))\n",
    "\n",
    "    #### Now do whatever you want with it: \n",
    "\n",
    "    # Cast the data into a dataframe. \n",
    "    df = pd.DataFrame.from_dict(result, dtype=np.float64)\n",
    "\n",
    "    # Get last change moment\n",
    "    last_st = df['st1'].unique()[-1]\n",
    "    last_stellar_type_change_time_1 = df[df.st1==last_st]['time'].iloc[0]\n",
    "\n",
    "    # slice to get that last time\n",
    "    sliced_df = df[df.time < last_stellar_type_change_time_1] # Cut off late parts of evolution\n",
    "\n",
    "    main_sequence = sliced_df[sliced_df.st1==1]\n",
    "    \n",
    "    initial_mass = main_sequence.iloc[0].mass_1\n",
    "    final_mass = main_sequence.iloc[-1].mass_1\n",
    "    \n",
    "    initial_time = main_sequence.iloc[0].time\n",
    "    final_time = main_sequence.iloc[-1].time\n",
    "    \n",
    "    mass_lost = initial_mass - final_mass\n",
    "    fraction = mass_lost/initial_mass\n",
    "\n",
    "    # Return the mass fraction (wrt initial mass)\n",
    "    return fraction\n"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 13,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
David Hendriks's avatar
David Hendriks committed
      "Took 14.214274644851685s\n"
David Hendriks's avatar
David Hendriks committed
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "metallicity_002 = 0.02\n",
    "metallicity_001 = 0.01\n",
    "metallicity_0002 = 0.002\n",
    "\n",
    "mass_range = np.arange(1, 25, .5)\n",
    "\n",
    "start = time.time()\n",
    "fractions_z002 = [run_and_calc_mass(M_1=mass, \n",
    "                                    M_2=10, \n",
    "                                    separation=0, \n",
    "                                    orbital_period=100000000000, \n",
    "                                    metallicity=metallicity_002, \n",
    "                                    effective_metallicity=metallicity_002) \n",
    "                 for mass in mass_range]\n",
    "\n",
    "fractions_z001 = [run_and_calc_mass(M_1=mass, \n",
    "                                    M_2=10, \n",
    "                                    separation=0, \n",
    "                                    orbital_period=100000000000, \n",
    "                                    metallicity=metallicity_001, \n",
    "                                    effective_metallicity=metallicity_001) \n",
    "                 for mass in mass_range]\n",
    "\n",
    "fractions_z0002 = [run_and_calc_mass(M_1=mass, \n",
    "                                     M_2=10, \n",
    "                                     separation=0, \n",
    "                                     orbital_period=100000000000, \n",
    "                                     metallicity=metallicity_0002, \n",
    "                                     effective_metallicity=metallicity_0002) \n",
    "                 for mass in mass_range]\n",
    "stop = time.time()\n",
    "print(\"Took {}s\".format(stop-start))"
   ]
  },
  {
   "cell_type": "code",
David Hendriks's avatar
David Hendriks committed
   "execution_count": 22,
David Hendriks's avatar
David Hendriks committed
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12,8))\n",
    "\n",
    "ax.plot(mass_range, fractions_z002, '--', label='Z=0.02')\n",
    "ax.plot(mass_range, fractions_z001, '-.', label='Z=0.01')\n",
    "ax.plot(mass_range, fractions_z0002, '-', label='Z=0.002')\n",
    "\n",
    "ax.set_xlabel(r'Initial Mass ($M_{\\odot}$)', fontsize=18)\n",
    "ax.set_ylabel(r'Fraction of total initial mass lost on main sequence', fontsize=18)\n",
    "ax.set_title('Fraction of total initial mass lost during main sequence for different metallicities', fontsize=18)\n",
    "ax.legend()\n",
    "ax.set_yscale('log')\n",
    "#save_loop(name='plots/mass_loss_MS.{format}', formats=['pdf', 'png', 'eps'], bbox_inches='tight')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "heading_collapsed": "false"
David Hendriks's avatar
David Hendriks committed
   },
   "outputs": [],
   "source": []
  }
 ],
 "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.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}