{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# NY Vir Newtonian N-Body Modeling\n", "Demonstrates Newtonian N-body modeling using Rebound." ] }, { "cell_type": "code", "execution_count": 14, "id": "1fc9b737", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "import os" ] }, { "cell_type": "code", "execution_count": 15, "id": "28b5ac4d", "metadata": {}, "outputs": [], "source": [ "from ocpy.data import Data\n", "\n", "data = Data.from_file(\"../ny_vir_minima.xlsx\")\n", "data = data.fill_errors(0.0001).calculate_weights()\n", "\n", "t0 = 2453174.442769\n", "period = 0.1010159690\n", "\n", "oc = data.calculate_oc(\n", " reference_minimum=t0,\n", " reference_period=period,\n", " model_type=\"pymc\"\n", ")" ] }, { "cell_type": "code", "execution_count": 16, "id": "fcf27163", "metadata": {}, "outputs": [], "source": [ "from ocpy.newtonian import NewtonianModel\n", "from ocpy.oc import Parameter\n", "\n", "nbody = NewtonianModel(\n", " central_mass=Parameter(value=0.611, fixed=True),\n", " T0_ref=t0,\n", " P_ref=period,\n", " bodies = [\n", " {\n", " \"m\": Parameter(value=0.0021, fixed=False, std=1, min=0),\n", " \"P\": Parameter(value=3170.0, fixed=False, std=1000, min=0), \n", " \"e\": Parameter(value=0.05, fixed=False, std=1, min=0, max=.8),\n", " \"omega\": Parameter(value=269.0, fixed=False, std=200, min=0, max=360),\n", " \"T\": Parameter(value=2443302.0, fixed=False, std=3170.0), \n", " },\n", " {\n", " \"m\": Parameter(value=0.0038, fixed=False, std=1, min=0),\n", " \"P\": Parameter(value=8260.0, fixed=False, std=1000, min=0), \n", " \"e\": Parameter(value=0.02, fixed=False, std=1, min=0, max=.8),\n", " \"omega\": Parameter(value=140.0, fixed=False, std=200, min=0, max=360),\n", " \"T\": Parameter(value=2421163.0, fixed=False, std=8260.0), \n", " }\n", " ],\n", " name=\"nbody\"\n", ")\n", "models = [nbody]" ] }, { "cell_type": "code", "execution_count": null, "id": "4bce446e", "metadata": {}, "outputs": [], "source": "from pymc import DEMetropolisZ\nres = oc.fit(models, tune=2000, draws=2000, chains=4)\noc.plot(res)" }, { "cell_type": "code", "execution_count": 18, "id": "46271d87", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[autoreload of cutils_ext failed: Traceback (most recent call last):\n", " File \"c:\\Users\\bar1s\\miniconda3\\envs\\ocpy\\Lib\\site-packages\\IPython\\extensions\\autoreload.py\", line 325, in check\n", " superreload(m, reload, self.old_objects)\n", " File \"c:\\Users\\bar1s\\miniconda3\\envs\\ocpy\\Lib\\site-packages\\IPython\\extensions\\autoreload.py\", line 580, in superreload\n", " module = reload(module)\n", " ^^^^^^^^^^^^^^\n", " File \"c:\\Users\\bar1s\\miniconda3\\envs\\ocpy\\Lib\\importlib\\__init__.py\", line 168, in reload\n", " raise ModuleNotFoundError(f\"spec not found for the module {name!r}\", name=name)\n", "ModuleNotFoundError: spec not found for the module 'cutils_ext'\n", "]\n" ] }, { "data": { "text/html": [ "\n", "
<xarray.Dataset> Size: 63MB\n",
"Dimensions: (chain: 4, draw: 2000, y_model_dim_0: 976)\n",
"Coordinates:\n",
" * chain (chain) int64 32B 0 1 2 3\n",
" * draw (draw) int64 16kB 0 1 2 3 4 ... 1995 1996 1997 1998 1999\n",
" * y_model_dim_0 (y_model_dim_0) int64 8kB 0 1 2 3 4 ... 972 973 974 975\n",
"Data variables:\n",
" nbody_b1_T (chain, draw) float64 64kB 2.443e+06 ... 2.443e+06\n",
" nbody_b2_T (chain, draw) float64 64kB 2.421e+06 ... 2.421e+06\n",
" nbody_b1_m (chain, draw) float64 64kB 0.002182 ... 0.002129\n",
" nbody_b1_P (chain, draw) float64 64kB 3.178e+03 ... 3.164e+03\n",
" nbody_b1_e (chain, draw) float64 64kB 0.04784 0.04784 ... 0.06181\n",
" nbody_b1_omega (chain, draw) float64 64kB 270.6 270.6 ... 264.1 264.1\n",
" nbody_b2_m (chain, draw) float64 64kB 0.00385 0.00385 ... 0.003835\n",
" nbody_b2_P (chain, draw) float64 64kB 8.27e+03 ... 8.248e+03\n",
" nbody_b2_e (chain, draw) float64 64kB 0.0188 0.0188 ... 0.01818\n",
" nbody_b2_omega (chain, draw) float64 64kB 140.7 140.7 ... 137.3 137.3\n",
" nbody_central_mass (chain, draw) float64 64kB 0.611 0.611 ... 0.611 0.611\n",
" y_model (chain, draw, y_model_dim_0) float64 62MB -0.0001653 ...\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.869280+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1\n",
" sampling_time: 711.984785079956\n",
" tuning_steps: 2000<xarray.Dataset> Size: 216kB\n",
"Dimensions: (chain: 4, draw: 2000)\n",
"Coordinates:\n",
" * chain (chain) int64 32B 0 1 2 3\n",
" * draw (draw) int64 16kB 0 1 2 3 4 5 6 ... 1994 1995 1996 1997 1998 1999\n",
"Data variables:\n",
" scaling (chain, draw) float64 64kB 0.0006561 0.0006561 ... 0.0005314\n",
" accept (chain, draw) float64 64kB 0.001155 0.001107 ... 0.2729 0.2044\n",
" accepted (chain, draw) bool 8kB False False False ... True False False\n",
" lambda (chain, draw) float64 64kB 0.5322 0.5322 0.5322 ... 0.5322 0.5322\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.954668+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1\n",
" sampling_time: 711.984785079956\n",
" tuning_steps: 2000<xarray.Dataset> Size: 16kB\n",
"Dimensions: (y_obs_dim_0: 976)\n",
"Coordinates:\n",
" * y_obs_dim_0 (y_obs_dim_0) int64 8kB 0 1 2 3 4 5 ... 970 971 972 973 974 975\n",
"Data variables:\n",
" y_obs (y_obs_dim_0) float64 8kB -0.0002226 -0.0001086 ... 6.869e-05\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.967686+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1<xarray.Dataset> Size: 63MB\n",
"Dimensions: (chain: 4, draw: 2000, y_model_dim_0: 976)\n",
"Coordinates:\n",
" * chain (chain) int64 32B 0 1 2 3\n",
" * draw (draw) int64 16kB 0 1 2 3 4 ... 1995 1996 1997 1998 1999\n",
" * y_model_dim_0 (y_model_dim_0) int64 8kB 0 1 2 3 4 ... 972 973 974 975\n",
"Data variables:\n",
" nbody_b1_T (chain, draw) float64 64kB 2.443e+06 ... 2.443e+06\n",
" nbody_b2_T (chain, draw) float64 64kB 2.421e+06 ... 2.421e+06\n",
" nbody_b1_m (chain, draw) float64 64kB 0.002182 ... 0.002129\n",
" nbody_b1_P (chain, draw) float64 64kB 3.178e+03 ... 3.164e+03\n",
" nbody_b1_e (chain, draw) float64 64kB 0.04784 0.04784 ... 0.06181\n",
" nbody_b1_omega (chain, draw) float64 64kB 270.6 270.6 ... 264.1 264.1\n",
" nbody_b2_m (chain, draw) float64 64kB 0.00385 0.00385 ... 0.003835\n",
" nbody_b2_P (chain, draw) float64 64kB 8.27e+03 ... 8.248e+03\n",
" nbody_b2_e (chain, draw) float64 64kB 0.0188 0.0188 ... 0.01818\n",
" nbody_b2_omega (chain, draw) float64 64kB 140.7 140.7 ... 137.3 137.3\n",
" nbody_central_mass (chain, draw) float64 64kB 0.611 0.611 ... 0.611 0.611\n",
" y_model (chain, draw, y_model_dim_0) float64 62MB -0.0001653 ...\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.869280+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1\n",
" sampling_time: 711.984785079956\n",
" tuning_steps: 2000<xarray.Dataset> Size: 216kB\n",
"Dimensions: (chain: 4, draw: 2000)\n",
"Coordinates:\n",
" * chain (chain) int64 32B 0 1 2 3\n",
" * draw (draw) int64 16kB 0 1 2 3 4 5 6 ... 1994 1995 1996 1997 1998 1999\n",
"Data variables:\n",
" scaling (chain, draw) float64 64kB 0.0006561 0.0006561 ... 0.0005314\n",
" accept (chain, draw) float64 64kB 0.001155 0.001107 ... 0.2729 0.2044\n",
" accepted (chain, draw) bool 8kB False False False ... True False False\n",
" lambda (chain, draw) float64 64kB 0.5322 0.5322 0.5322 ... 0.5322 0.5322\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.954668+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1\n",
" sampling_time: 711.984785079956\n",
" tuning_steps: 2000<xarray.Dataset> Size: 16kB\n",
"Dimensions: (y_obs_dim_0: 976)\n",
"Coordinates:\n",
" * y_obs_dim_0 (y_obs_dim_0) int64 8kB 0 1 2 3 4 5 ... 970 971 972 973 974 975\n",
"Data variables:\n",
" y_obs (y_obs_dim_0) float64 8kB -0.0002226 -0.0001086 ... 6.869e-05\n",
"Attributes:\n",
" created_at: 2026-03-12T09:21:18.967686+00:00\n",
" arviz_version: 0.22.0\n",
" inference_library: pymc\n",
" inference_library_version: 5.26.1