{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "0", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:37.215725Z", "iopub.status.busy": "2026-06-04T16:15:37.215506Z", "iopub.status.idle": "2026-06-04T16:15:37.219497Z", "shell.execute_reply": "2026-06-04T16:15:37.218881Z" }, "tags": [ "hide-in-docs" ] }, "outputs": [], "source": [ "# Check whether easydiffraction is installed; install it if needed.\n", "# Required for remote environments such as Google Colab.\n", "import importlib.util\n", "\n", "if importlib.util.find_spec('easydiffraction') is None:\n", " %pip install easydiffraction==0.18.0" ] }, { "cell_type": "markdown", "id": "1", "metadata": {}, "source": [ "# Structure Refinement: Taurine, SENJU\n", "\n", "Crystal structure refinement of Taurine using time-of-flight single\n", "crystal neutron diffraction data from SENJU at J-PARC." ] }, { "cell_type": "markdown", "id": "2", "metadata": {}, "source": [ "## 🛠️ Import Library" ] }, { "cell_type": "code", "execution_count": 2, "id": "3", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:37.221258Z", "iopub.status.busy": "2026-06-04T16:15:37.221084Z", "iopub.status.idle": "2026-06-04T16:15:40.005658Z", "shell.execute_reply": "2026-06-04T16:15:40.004711Z" } }, "outputs": [], "source": [ "import easydiffraction as ed" ] }, { "cell_type": "markdown", "id": "4", "metadata": {}, "source": [ "## 📦 Define Project" ] }, { "cell_type": "code", "execution_count": 3, "id": "5", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.007715Z", "iopub.status.busy": "2026-06-04T16:15:40.007373Z", "iopub.status.idle": "2026-06-04T16:15:40.489470Z", "shell.execute_reply": "2026-06-04T16:15:40.488760Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a minimal project with a short name\n", "project = ed.Project(name='taurine_senju')" ] }, { "cell_type": "markdown", "id": "6", "metadata": {}, "source": [ "## 🧩 Define Structure" ] }, { "cell_type": "code", "execution_count": 4, "id": "7", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.491652Z", "iopub.status.busy": "2026-06-04T16:15:40.491466Z", "iopub.status.idle": "2026-06-04T16:15:40.619887Z", "shell.execute_reply": "2026-06-04T16:15:40.619273Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mGetting data\u001b[0m\u001b[1;36m...\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Data #\u001b[1;36m21\u001b[0m: Taurine \u001b[1m(\u001b[0mcrystal structure\u001b[1m)\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Data #\u001b[1;36m21\u001b[0m downloaded to \u001b[32m'../../../data/ed-21.cif'\u001b[0m\n" ] } ], "source": [ "# Download CIF file from repository\n", "structure_path = ed.download_data(id=21, destination='data')" ] }, { "cell_type": "code", "execution_count": 5, "id": "8", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.621796Z", "iopub.status.busy": "2026-06-04T16:15:40.621619Z", "iopub.status.idle": "2026-06-04T16:15:40.640971Z", "shell.execute_reply": "2026-06-04T16:15:40.639995Z" } }, "outputs": [], "source": [ "project.structures.add_from_cif_path(structure_path)" ] }, { "cell_type": "code", "execution_count": 6, "id": "9", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.642716Z", "iopub.status.busy": "2026-06-04T16:15:40.642495Z", "iopub.status.idle": "2026-06-04T16:15:40.647442Z", "shell.execute_reply": "2026-06-04T16:15:40.646683Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mDefined structures 🧩\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m[\u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1m]\u001b[0m\n" ] } ], "source": [ "project.structures.show_names()" ] }, { "cell_type": "code", "execution_count": 7, "id": "10", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.649293Z", "iopub.status.busy": "2026-06-04T16:15:40.649129Z", "iopub.status.idle": "2026-06-04T16:15:40.651756Z", "shell.execute_reply": "2026-06-04T16:15:40.650996Z" } }, "outputs": [], "source": [ "structure = project.structures['taurine']" ] }, { "cell_type": "code", "execution_count": 8, "id": "11", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.653161Z", "iopub.status.busy": "2026-06-04T16:15:40.653003Z", "iopub.status.idle": "2026-06-04T16:15:40.705638Z", "shell.execute_reply": "2026-06-04T16:15:40.704746Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStructure 🧩 \u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1;36m as cif\u001b[0m\n" ] }, { "data": { "text/html": [ "
CIF
1data_taurine
2
3_cell.length_a 5.2729
4_cell.length_b 11.6565
5_cell.length_c 7.8383
6_cell.angle_alpha 90.
7_cell.angle_beta 94.011
8_cell.angle_gamma 90.
9
10_space_group.name_H-M_alt "P 21/c"
11_space_group.IT_coordinate_system_code b1
12
13_geom.min_bond_distance_cutoff 0.
14_geom.bond_distance_incr 0.25
15
16loop_
17_atom_site.label
18_atom_site.type_symbol
19_atom_site.fract_x
20_atom_site.fract_y
21_atom_site.fract_z
22_atom_site.Wyckoff_symbol
23_atom_site.site_symmetry_multiplicity
24_atom_site.occupancy
25_atom_site.B_iso_or_equiv
26_atom_site.ADP_type
27S1 S 0.2000(10) 0.3500(10) 0.3500(10) e 4 1. 1.57910(10) Biso
28O1 O 0.3130(10) 0.2400(10) 0.3510(10) e 4 1. 2.76350(10) Biso
29O2 O 0.9380(10) 0.3370(10) 0.2940(10) e 4 1. 3.63200(10) Biso
30O3 O 0.2220(10) 0.4120(10) 0.5070(10) e 4 1. 1.89500(10) Biso
31N1 N 0.2640(10) 0.6280(10) 0.3310(10) e 4 1. 2.13180(10) Biso
32H1 H 0.1330(10) 0.5880(10) 0.4210(10) e 4 1. 3.39510(10) Biso
33H2 H 0.1910(10) 0.7150(10) 0.3120(10) e 4 1. 4.57950(10) Biso
34H3 H 0.4400(10) 0.6240(10) 0.3490(10) e 4 1. 4.65850(10) Biso
35C1 C 0.3440(10) 0.4400(10) 0.2020(10) e 4 1. 1.73710(10) Biso
36H11 H 0.5520(10) 0.4330(10) 0.2430(10) e 4 1. 3.39510(10) Biso
37H12 H 0.3200(10) 0.3880(10) 0.0810(10) e 4 1. 3.31620(10) Biso
38C2 C 0.2000(10) 0.5570(10) 0.1820(10) e 4 1. 1.73710(10) Biso
39H21 H 0.2760(10) 0.6000(10) 0.0770(10) e 4 1. 2.13180(10) Biso
40H22 H 0.9990(10) 0.5490(10) 0.1610(10) e 4 1. 4.97430(10) Biso
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "structure.show_as_cif()" ] }, { "cell_type": "code", "execution_count": 9, "id": "12", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.707194Z", "iopub.status.busy": "2026-06-04T16:15:40.707028Z", "iopub.status.idle": "2026-06-04T16:15:40.941975Z", "shell.execute_reply": "2026-06-04T16:15:40.941397Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStructure 🧩 \u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1;36m \u001b[0m\u001b[1;36m(\u001b[0m\u001b[1;36mAtom view type: \u001b[0m\u001b[32m'covalent'\u001b[0m\u001b[1;36m)\u001b[0m\n" ] }, { "data": { "text/html": [ "
\n", "
\n", "
Loading plot…
\n", "
\n", "
\n", "
\n", "
drag = rotate
wheel = zoom
right-drag = pan
\n", "
\n", "
\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.structure(struct_name='taurine')" ] }, { "cell_type": "markdown", "id": "13", "metadata": {}, "source": [ "## 🔬 Define Experiment" ] }, { "cell_type": "code", "execution_count": 10, "id": "14", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:40.943949Z", "iopub.status.busy": "2026-06-04T16:15:40.943778Z", "iopub.status.idle": "2026-06-04T16:15:41.047737Z", "shell.execute_reply": "2026-06-04T16:15:41.047013Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mGetting data\u001b[0m\u001b[1;36m...\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Data #\u001b[1;36m22\u001b[0m: Taurine, SENJU \u001b[1m(\u001b[0mJ-PARC\u001b[1m)\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Data #\u001b[1;36m22\u001b[0m downloaded to \u001b[32m'../../../data/ed-22.xye'\u001b[0m\n" ] } ], "source": [ "# Download data file from repository\n", "data_path = ed.download_data(id=22, destination='data')" ] }, { "cell_type": "code", "execution_count": 11, "id": "15", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:41.049936Z", "iopub.status.busy": "2026-06-04T16:15:41.049730Z", "iopub.status.idle": "2026-06-04T16:15:41.178509Z", "shell.execute_reply": "2026-06-04T16:15:41.177505Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mData loaded successfully\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Experiment 🔬 \u001b[32m'senju'\u001b[0m. Number of data points: \u001b[1;36m286\u001b[0m.\n" ] } ], "source": [ "project.experiments.add_from_data_path(\n", " name='senju',\n", " data_path=data_path,\n", " sample_form='single crystal',\n", " beam_mode='time-of-flight',\n", " radiation_probe='neutron',\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "16", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:41.180222Z", "iopub.status.busy": "2026-06-04T16:15:41.180035Z", "iopub.status.idle": "2026-06-04T16:15:41.182757Z", "shell.execute_reply": "2026-06-04T16:15:41.182157Z" } }, "outputs": [], "source": [ "experiment = project.experiments['senju']" ] }, { "cell_type": "code", "execution_count": 13, "id": "17", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:41.184539Z", "iopub.status.busy": "2026-06-04T16:15:41.184388Z", "iopub.status.idle": "2026-06-04T16:15:41.186998Z", "shell.execute_reply": "2026-06-04T16:15:41.186408Z" } }, "outputs": [], "source": [ "experiment.linked_crystal.id = 'taurine'\n", "experiment.linked_crystal.scale = 1.0" ] }, { "cell_type": "code", "execution_count": 14, "id": "18", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:41.188864Z", "iopub.status.busy": "2026-06-04T16:15:41.188718Z", "iopub.status.idle": "2026-06-04T16:15:41.191512Z", "shell.execute_reply": "2026-06-04T16:15:41.190909Z" } }, "outputs": [], "source": [ "experiment.extinction.mosaicity = 1000.0\n", "experiment.extinction.radius = 100.0" ] }, { "cell_type": "markdown", "id": "19", "metadata": {}, "source": [ "## 🚀 Perform Analysis" ] }, { "cell_type": "markdown", "id": "20", "metadata": {}, "source": [ "### ADP iso" ] }, { "cell_type": "code", "execution_count": 15, "id": "21", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:41.193011Z", "iopub.status.busy": "2026-06-04T16:15:41.192851Z", "iopub.status.idle": "2026-06-04T16:15:43.484049Z", "shell.execute_reply": "2026-06-04T16:15:43.483159Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Loading plot…
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.pattern(expt_name='senju')" ] }, { "cell_type": "code", "execution_count": 16, "id": "22", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:43.485945Z", "iopub.status.busy": "2026-06-04T16:15:43.485787Z", "iopub.status.idle": "2026-06-04T16:15:43.488907Z", "shell.execute_reply": "2026-06-04T16:15:43.488104Z" } }, "outputs": [], "source": [ "experiment.linked_crystal.scale.free = True\n", "experiment.extinction.radius.free = True" ] }, { "cell_type": "code", "execution_count": 17, "id": "23", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:43.490337Z", "iopub.status.busy": "2026-06-04T16:15:43.490187Z", "iopub.status.idle": "2026-06-04T16:15:43.497293Z", "shell.execute_reply": "2026-06-04T16:15:43.496504Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mMinimizer types\u001b[0m\n" ] }, { "data": { "text/html": [ "
TypeDescription
1bumpsBUMPS library using the default Levenberg-Marquardt method
2bumps (amoeba)BUMPS library with Nelder-Mead simplex method
3bumps (de)BUMPS library with differential evolution method
4bumps (dream)BUMPS library with DREAM Bayesian sampling
5bumps (lm)BUMPS library with Levenberg-Marquardt method
6dfolsDFO-LS library for derivative-free least-squares optimization
7emceeemcee affine-invariant ensemble Bayesian sampling
8lmfitLMFIT library using the default Levenberg-Marquardt method
9lmfit (least_squares)LMFIT library with SciPy's trust region reflective algorithm
10*lmfit (leastsq)LMFIT library with Levenberg-Marquardt least squares method
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.analysis.minimizer.show_supported()" ] }, { "cell_type": "code", "execution_count": 18, "id": "24", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:43.498894Z", "iopub.status.busy": "2026-06-04T16:15:43.498682Z", "iopub.status.idle": "2026-06-04T16:15:43.504439Z", "shell.execute_reply": "2026-06-04T16:15:43.503671Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mCurrent minimizer changed to\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "bumps\n" ] } ], "source": [ "project.analysis.minimizer.type = 'bumps'" ] }, { "cell_type": "code", "execution_count": 19, "id": "25", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:43.506019Z", "iopub.status.busy": "2026-06-04T16:15:43.505849Z", "iopub.status.idle": "2026-06-04T16:15:43.509194Z", "shell.execute_reply": "2026-06-04T16:15:43.508426Z" } }, "outputs": [], "source": [ "# Limit number of iterations to prevent long calculation time in this tutorial.\n", "project.analysis.minimizer.max_iterations = 500" ] }, { "cell_type": "code", "execution_count": 20, "id": "26", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:15:43.510776Z", "iopub.status.busy": "2026-06-04T16:15:43.510614Z", "iopub.status.idle": "2026-06-04T16:16:01.221443Z", "shell.execute_reply": "2026-06-04T16:16:01.220277Z" } }, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function() {\n", " const button = document.getElementById('ed-fit-stop-9aba5d3034484a4e9bbe871b450d8627-button');\n", " const status = document.getElementById('ed-fit-stop-9aba5d3034484a4e9bbe871b450d8627-status');\n", " const kernelId = '';\n", " if (!button) {\n", " return;\n", " }\n", "\n", " function setStatus(text) {\n", " if (status) {\n", " status.textContent = text;\n", " }\n", " }\n", "\n", " function pageConfig() {\n", " const element = document.getElementById('jupyter-config-data');\n", " if (!element || !element.textContent) {\n", " return {};\n", " }\n", " try {\n", " return JSON.parse(element.textContent);\n", " } catch (error) {\n", " return {};\n", " }\n", " }\n", "\n", " function baseUrl(config) {\n", " const configured = config.baseUrl || config.base_url ||\n", " (window.Jupyter && Jupyter.notebook && Jupyter.notebook.base_url);\n", " if (configured) {\n", " return configured.endsWith('/') ? configured : configured + '/';\n", " }\n", " const markers = ['/lab/', '/notebooks/', '/tree/'];\n", " for (const marker of markers) {\n", " const index = window.location.pathname.indexOf(marker);\n", " if (index >= 0) {\n", " return window.location.pathname.slice(0, index + 1);\n", " }\n", " }\n", " return '/';\n", " }\n", "\n", " function token(config) {\n", " return config.token || new URLSearchParams(window.location.search).get('token') || '';\n", " }\n", "\n", " function cookie(name) {\n", " const prefix = name + '=';\n", " for (const part of document.cookie.split(';')) {\n", " const trimmed = part.trim();\n", " if (trimmed.startsWith(prefix)) {\n", " return decodeURIComponent(trimmed.slice(prefix.length));\n", " }\n", " }\n", " return '';\n", " }\n", "\n", " function notebookPath() {\n", " const decoded = decodeURIComponent(window.location.pathname);\n", " const markers = ['/lab/tree/', '/notebooks/', '/tree/'];\n", " for (const marker of markers) {\n", " const index = decoded.indexOf(marker);\n", " if (index >= 0) {\n", " return decoded.slice(index + marker.length);\n", " }\n", " }\n", " return '';\n", " }\n", "\n", " async function kernelFromSessions(config) {\n", " const url = new URL(baseUrl(config) + 'api/sessions', window.location.origin);\n", " const authToken = token(config);\n", " if (authToken) {\n", " url.searchParams.set('token', authToken);\n", " }\n", " const response = await fetch(url, {credentials: 'same-origin'});\n", " if (!response.ok) {\n", " return '';\n", " }\n", " const sessions = await response.json();\n", " const path = notebookPath();\n", " const session = sessions.find((item) => item.path === path) || sessions[0];\n", " return session && session.kernel ? session.kernel.id : '';\n", " }\n", "\n", " async function interruptKernel(config, resolvedKernelId) {\n", " const url = new URL(\n", " baseUrl(config) + 'api/kernels/' + resolvedKernelId + '/interrupt',\n", " window.location.origin\n", " );\n", " const authToken = token(config);\n", " if (authToken) {\n", " url.searchParams.set('token', authToken);\n", " }\n", " const xsrfToken = cookie('_xsrf');\n", " const headers = {};\n", " if (xsrfToken) {\n", " headers['X-XSRFToken'] = xsrfToken;\n", " }\n", " const response = await fetch(url, {\n", " method: 'POST',\n", " credentials: 'same-origin',\n", " headers: headers\n", " });\n", " return response.ok;\n", " }\n", "\n", " button.addEventListener('click', async function() {\n", " button.disabled = true;\n", " setStatus('Stopping...');\n", " const config = pageConfig();\n", " try {\n", " const resolvedKernelId = kernelId || await kernelFromSessions(config);\n", " if (!resolvedKernelId) {\n", " throw new Error('Could not resolve the current kernel id.');\n", " }\n", " const interrupted = await interruptKernel(config, resolvedKernelId);\n", " if (!interrupted) {\n", " throw new Error('Jupyter Server rejected the interrupt request.');\n", " }\n", " setStatus('Interrupt sent...');\n", " } catch (error) {\n", " button.disabled = false;\n", " setStatus('Use Kernel > Interrupt to stop this fit.');\n", " }\n", " });\n", "})();\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStandard fitting\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "📋 Using experiment 🔬 \u001b[32m'senju'\u001b[0m for \u001b[32m'single'\u001b[0m fitting\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "🚀 Starting fit process with \u001b[32m'bumps \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlm\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m\u001b[33m...\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "📈 Goodness-of-fit progress:\n" ] }, { "data": { "text/html": [ "
iterationtime (s)χ²change / status
110.04748.12
2622.20465.6737.8% ↓
31214.2593.4379.9% ↓
41806.3034.9962.5% ↓
52398.3324.6529.6% ↓
629810.3824.221.8% ↓
735712.4723.781.8% ↓
850017.6223.68
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "🏆 Best goodness-of-fit \u001b[1m(\u001b[0mreduced χ²\u001b[1m)\u001b[0m is \u001b[1;36m23.68\u001b[0m at iteration \u001b[1;36m500\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Fitting complete.\n" ] } ], "source": [ "# Start refinement. All parameters, which have standard uncertainties\n", "# in the input CIF files, are refined by default.\n", "project.analysis.fit()" ] }, { "cell_type": "code", "execution_count": 21, "id": "27", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:01.223285Z", "iopub.status.busy": "2026-06-04T16:16:01.223049Z", "iopub.status.idle": "2026-06-04T16:16:01.510856Z", "shell.execute_reply": "2026-06-04T16:16:01.510079Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "⚙️ Settings used:\n" ] }, { "data": { "text/html": [ "
NameValueDescription
1max_iterations500Maximum solver iterations.
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "📋 Least-squares fit results:\n" ] }, { "data": { "text/html": [ "
MetricValue
1🧪 Minimizerbumps
2❌ Overall statusfailed
3⏱️ Fitting time (seconds)17.62
4📏 Goodness-of-fit (reduced χ²)23.68
5📏 R-factor (Rf, %)21.35
6📏 R-factor squared (Rf², %)16.86
7📏 Weighted R-factor (wR, %)17.57
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "📈 Refined parameters:\n" ] }, { "data": { "text/html": [ "
datablockcategoryentryparameterunitsstartvalues.u.change
1taurineatom_siteS1fract_x0.20000.2016N/A0.81 % ↑
2taurineatom_siteS1fract_y0.35000.3482N/A0.50 % ↓
3taurineatom_siteS1fract_z0.35000.3484N/A0.46 % ↓
4taurineatom_siteS1adp_isoŲ1.57911.2571N/A20.39 % ↓
5taurineatom_siteO1fract_x0.31300.3179N/A1.55 % ↑
6taurineatom_siteO1fract_y0.24000.2406N/A0.26 % ↑
7taurineatom_siteO1fract_z0.35100.3518N/A0.23 % ↑
8taurineatom_siteO1adp_isoŲ2.76352.7803N/A0.61 % ↑
9taurineatom_siteO2fract_x0.93800.9394N/A0.15 % ↑
10taurineatom_siteO2fract_y0.33700.3372N/A0.07 % ↑
11taurineatom_siteO2fract_z0.29400.2939N/A0.05 % ↓
12taurineatom_siteO2adp_isoŲ3.63203.5661N/A1.81 % ↓
13taurineatom_siteO3fract_x0.22200.2248N/A1.26 % ↑
14taurineatom_siteO3fract_y0.41200.4098N/A0.52 % ↓
15taurineatom_siteO3fract_z0.50700.5075N/A0.09 % ↑
16taurineatom_siteO3adp_isoŲ1.89502.0832N/A9.93 % ↑
17taurineatom_siteN1fract_x0.26400.2634N/A0.23 % ↓
18taurineatom_siteN1fract_y0.62800.6279N/A0.01 % ↓
19taurineatom_siteN1fract_z0.33100.3322N/A0.35 % ↑
20taurineatom_siteN1adp_isoŲ2.13182.1084N/A1.10 % ↓
21taurineatom_siteH1fract_x0.13300.1361N/A2.30 % ↑
22taurineatom_siteH1fract_y0.58800.5855N/A0.42 % ↓
23taurineatom_siteH1fract_z0.42100.4168N/A1.01 % ↓
24taurineatom_siteH1adp_isoŲ3.39512.7785N/A18.16 % ↓
25taurineatom_siteH2fract_x0.19100.1885N/A1.32 % ↓
26taurineatom_siteH2fract_y0.71500.7134N/A0.22 % ↓
27taurineatom_siteH2fract_z0.31200.3077N/A1.38 % ↓
28taurineatom_siteH2adp_isoŲ4.57954.2045N/A8.19 % ↓
29taurineatom_siteH3fract_x0.44000.4336N/A1.45 % ↓
30taurineatom_siteH3fract_y0.62400.6256N/A0.25 % ↑
31taurineatom_siteH3fract_z0.34900.3486N/A0.11 % ↓
32taurineatom_siteH3adp_isoŲ4.65854.9130N/A5.46 % ↑
33taurineatom_siteC1fract_x0.34400.3473N/A0.95 % ↑
34taurineatom_siteC1fract_y0.44000.4399N/A0.03 % ↓
35taurineatom_siteC1fract_z0.20200.2022N/A0.10 % ↑
36taurineatom_siteC1adp_isoŲ1.73711.6867N/A2.90 % ↓
37taurineatom_siteH11fract_x0.55200.5477N/A0.78 % ↓
38taurineatom_siteH11fract_y0.43300.4337N/A0.15 % ↑
39taurineatom_siteH11fract_z0.24300.2406N/A1.00 % ↓
40taurineatom_siteH11adp_isoŲ3.39513.5214N/A3.72 % ↑
41taurineatom_siteH12fract_x0.32000.3277N/A2.41 % ↑
42taurineatom_siteH12fract_y0.38800.3805N/A1.94 % ↓
43taurineatom_siteH12fract_z0.08100.0854N/A5.37 % ↑
44taurineatom_siteH12adp_isoŲ3.31623.3174N/A0.04 % ↑
45taurineatom_siteC2fract_x0.20000.1962N/A1.92 % ↓
46taurineatom_siteC2fract_y0.55700.5554N/A0.28 % ↓
47taurineatom_siteC2fract_z0.18200.1796N/A1.32 % ↓
48taurineatom_siteC2adp_isoŲ1.73711.8406N/A5.96 % ↑
49taurineatom_siteH21fract_x0.27600.2734N/A0.95 % ↓
50taurineatom_siteH21fract_y0.60000.5983N/A0.29 % ↓
51taurineatom_siteH21fract_z0.07700.0739N/A4.08 % ↓
52taurineatom_siteH21adp_isoŲ2.13182.3841N/A11.84 % ↑
53taurineatom_siteH22fract_x0.99900.9974N/A0.16 % ↓
54taurineatom_siteH22fract_y0.54900.5514N/A0.44 % ↑
55taurineatom_siteH22fract_z0.16100.1646N/A2.24 % ↑
56taurineatom_siteH22adp_isoŲ4.97434.6561N/A6.40 % ↓
57senjuextinctionradiusμm100.0000-0.9380N/A100.94 % ↓
58senjulinked_crystalscale1.00001.3488N/A34.88 % ↑
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
• start = parameter value before refinement
• value = refined value from least-squares minimization
• s.u. = standard uncertainty (one sigma), from the covariance matrix
• change = relative change from start, in %; ↑ = increase, ↓ = decrease
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Show fit results summary\n", "project.display.fit.results()" ] }, { "cell_type": "code", "execution_count": 22, "id": "28", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:01.512401Z", "iopub.status.busy": "2026-06-04T16:16:01.512231Z", "iopub.status.idle": "2026-06-04T16:16:01.520207Z", "shell.execute_reply": "2026-06-04T16:16:01.519457Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStructure 🧩 \u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1;36m as cif\u001b[0m\n" ] }, { "data": { "text/html": [ "
CIF
1data_taurine
2
3_cell.length_a 5.2729
4_cell.length_b 11.6565
5_cell.length_c 7.8383
6_cell.angle_alpha 90.
7_cell.angle_beta 94.011
8_cell.angle_gamma 90.
9
10_space_group.name_H-M_alt "P 21/c"
11_space_group.IT_coordinate_system_code b1
12
13_geom.min_bond_distance_cutoff 0.
14_geom.bond_distance_incr 0.25
15
16loop_
17_atom_site.label
18_atom_site.type_symbol
19_atom_site.fract_x
20_atom_site.fract_y
21_atom_site.fract_z
22_atom_site.Wyckoff_symbol
23_atom_site.site_symmetry_multiplicity
24_atom_site.occupancy
25_atom_site.B_iso_or_equiv
26_atom_site.ADP_type
27S1 S 0.2016234() 0.34824084() 0.34838739() e 4 1. 1.25710651() Biso
28O1 O 0.31786559() 0.24062435() 0.35180673() e 4 1. 2.78027726() Biso
29O2 O 0.93936069() 0.33724514() 0.29385359() e 4 1. 3.56614235() Biso
30O3 O 0.22478839() 0.40984764() 0.50745871() e 4 1. 2.08318113() Biso
31N1 N 0.26339651() 0.62792169() 0.33215882() e 4 1. 2.10835213() Biso
32H1 H 0.13605484() 0.58553124() 0.41675904() e 4 1. 2.77850308() Biso
33H2 H 0.18847147() 0.71342161() 0.30769101() e 4 1. 4.20454076() Biso
34H3 H 0.43361545() 0.62556331() 0.34862601() e 4 1. 4.91299581() Biso
35C1 C 0.34727148() 0.43986662() 0.20219962() e 4 1. 1.68671826() Biso
36H11 H 0.54769194() 0.43366114() 0.24055836() e 4 1. 3.52136059() Biso
37H12 H 0.32772096() 0.38046395() 0.0853503() e 4 1. 3.31744533() Biso
38C2 C 0.19615958() 0.55544352() 0.17960374() e 4 1. 1.84064525() Biso
39H21 H 0.27338797() 0.59826063() 0.07386116() e 4 1. 2.38412727() Biso
40H22 H 0.9973951() 0.55138955() 0.16460435() e 4 1. 4.65607599() Biso
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "structure.show_as_cif()" ] }, { "cell_type": "code", "execution_count": 23, "id": "29", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:01.522188Z", "iopub.status.busy": "2026-06-04T16:16:01.521985Z", "iopub.status.idle": "2026-06-04T16:16:01.526944Z", "shell.execute_reply": "2026-06-04T16:16:01.526250Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mDefined experiments 🔬\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m[\u001b[0m\u001b[32m'senju'\u001b[0m\u001b[1m]\u001b[0m\n" ] } ], "source": [ "project.experiments.show_names()" ] }, { "cell_type": "code", "execution_count": 24, "id": "30", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:01.528990Z", "iopub.status.busy": "2026-06-04T16:16:01.528784Z", "iopub.status.idle": "2026-06-04T16:16:03.575730Z", "shell.execute_reply": "2026-06-04T16:16:03.574809Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Loading plot…
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.pattern(expt_name='senju')" ] }, { "cell_type": "markdown", "id": "31", "metadata": {}, "source": [ "### ADP aniso" ] }, { "cell_type": "code", "execution_count": 25, "id": "32", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:03.577355Z", "iopub.status.busy": "2026-06-04T16:16:03.577174Z", "iopub.status.idle": "2026-06-04T16:16:03.592202Z", "shell.execute_reply": "2026-06-04T16:16:03.591125Z" } }, "outputs": [], "source": [ "for atom_site in structure.atom_sites:\n", " atom_site.adp_type = 'Uani'" ] }, { "cell_type": "code", "execution_count": 26, "id": "33", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:03.593778Z", "iopub.status.busy": "2026-06-04T16:16:03.593606Z", "iopub.status.idle": "2026-06-04T16:16:03.599282Z", "shell.execute_reply": "2026-06-04T16:16:03.598329Z" } }, "outputs": [], "source": [ "adp_components = ('adp_11', 'adp_22', 'adp_33', 'adp_12', 'adp_13', 'adp_23')\n", "for atom_site in structure.atom_site_aniso:\n", " for component in adp_components:\n", " getattr(atom_site, component).free = True" ] }, { "cell_type": "code", "execution_count": 27, "id": "34", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:03.600853Z", "iopub.status.busy": "2026-06-04T16:16:03.600693Z", "iopub.status.idle": "2026-06-04T16:16:03.645713Z", "shell.execute_reply": "2026-06-04T16:16:03.644885Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStructure 🧩 \u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1;36m as cif\u001b[0m\n" ] }, { "data": { "text/html": [ "
CIF
1data_taurine
2
3_cell.length_a 5.2729
4_cell.length_b 11.6565
5_cell.length_c 7.8383
6_cell.angle_alpha 90.
7_cell.angle_beta 94.011
8_cell.angle_gamma 90.
9
10_space_group.name_H-M_alt "P 21/c"
11_space_group.IT_coordinate_system_code b1
12
13_geom.min_bond_distance_cutoff 0.
14_geom.bond_distance_incr 0.25
15
16loop_
17_atom_site.label
18_atom_site.type_symbol
19_atom_site.fract_x
20_atom_site.fract_y
21_atom_site.fract_z
22_atom_site.Wyckoff_symbol
23_atom_site.site_symmetry_multiplicity
24_atom_site.occupancy
25_atom_site.U_iso_or_equiv
26_atom_site.ADP_type
27S1 S 0.2016234() 0.34824084() 0.34838739() e 4 1. 0.01592144 Uani
28O1 O 0.31786559() 0.24062435() 0.35180673() e 4 1. 0.03521262 Uani
29O2 O 0.93936069() 0.33724514() 0.29385359() e 4 1. 0.04516572 Uani
30O3 O 0.22478839() 0.40984764() 0.50745871() e 4 1. 0.0263838 Uani
31N1 N 0.26339651() 0.62792169() 0.33215882() e 4 1. 0.02670259 Uani
32H1 H 0.13605484() 0.58553124() 0.41675904() e 4 1. 0.03519015 Uani
33H2 H 0.18847147() 0.71342161() 0.30769101() e 4 1. 0.05325113 Uani
34H3 H 0.43361545() 0.62556331() 0.34862601() e 4 1. 0.06222382 Uani
35C1 C 0.34727148() 0.43986662() 0.20219962() e 4 1. 0.02136254 Uani
36H11 H 0.54769194() 0.43366114() 0.24055836() e 4 1. 0.04459855 Uani
37H12 H 0.32772096() 0.38046395() 0.0853503() e 4 1. 0.04201594 Uani
38C2 C 0.19615958() 0.55544352() 0.17960374() e 4 1. 0.02331204 Uani
39H21 H 0.27338797() 0.59826063() 0.07386116() e 4 1. 0.03019532 Uani
40H22 H 0.9973951() 0.55138955() 0.16460435() e 4 1. 0.05896989 Uani
41
42loop_
43_atom_site_aniso.label
44_atom_site_aniso.U_11
45_atom_site_aniso.U_22
46_atom_site_aniso.U_33
47_atom_site_aniso.U_12
48_atom_site_aniso.U_13
49_atom_site_aniso.U_23
50S1 0.01592144() 0.01592144() 0.01592144() 0.() 0.() 0.()
51O1 0.03521262() 0.03521262() 0.03521262() 0.() 0.() 0.()
52O2 0.04516572() 0.04516572() 0.04516572() 0.() 0.() 0.()
53O3 0.0263838() 0.0263838() 0.0263838() 0.() 0.() 0.()
54N1 0.02670259() 0.02670259() 0.02670259() 0.() 0.() 0.()
55H1 0.03519015() 0.03519015() 0.03519015() 0.() 0.() 0.()
56H2 0.05325113() 0.05325113() 0.05325113() 0.() 0.() 0.()
57H3 0.06222382() 0.06222382() 0.06222382() 0.() 0.() 0.()
58C1 0.02136254() 0.02136254() 0.02136254() 0.() 0.() 0.()
59H11 0.04459855() 0.04459855() 0.04459855() 0.() 0.() 0.()
60H12 0.04201594() 0.04201594() 0.04201594() 0.() 0.() 0.()
61C2 0.02331204() 0.02331204() 0.02331204() 0.() 0.() 0.()
62H21 0.03019532() 0.03019532() 0.03019532() 0.() 0.() 0.()
63H22 0.05896989() 0.05896989() 0.05896989() 0.() 0.() 0.()
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "structure.show_as_cif()" ] }, { "cell_type": "code", "execution_count": 28, "id": "35", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:03.647696Z", "iopub.status.busy": "2026-06-04T16:16:03.647489Z", "iopub.status.idle": "2026-06-04T16:16:03.701685Z", "shell.execute_reply": "2026-06-04T16:16:03.700966Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mFree parameters for both structures \u001b[0m\u001b[1;36m(\u001b[0m\u001b[1;36m🧩 data blocks\u001b[0m\u001b[1;36m)\u001b[0m\u001b[1;36m and experiments \u001b[0m\u001b[1;36m(\u001b[0m\u001b[1;36m🔬 data blocks\u001b[0m\u001b[1;36m)\u001b[0m\n" ] }, { "data": { "text/html": [ "
datablockcategoryentryparametervalueuncertaintyminmaxunits
1taurineatom_siteS1fract_x0.20162-infinf
2taurineatom_siteS1fract_y0.34824-infinf
3taurineatom_siteS1fract_z0.34839-infinf
4taurineatom_siteO1fract_x0.31787-infinf
5taurineatom_siteO1fract_y0.24062-infinf
6taurineatom_siteO1fract_z0.35181-infinf
7taurineatom_siteO2fract_x0.93936-infinf
8taurineatom_siteO2fract_y0.33725-infinf
9taurineatom_siteO2fract_z0.29385-infinf
10taurineatom_siteO3fract_x0.22479-infinf
11taurineatom_siteO3fract_y0.40985-infinf
12taurineatom_siteO3fract_z0.50746-infinf
13taurineatom_siteN1fract_x0.26340-infinf
14taurineatom_siteN1fract_y0.62792-infinf
15taurineatom_siteN1fract_z0.33216-infinf
16taurineatom_siteH1fract_x0.13605-infinf
17taurineatom_siteH1fract_y0.58553-infinf
18taurineatom_siteH1fract_z0.41676-infinf
19taurineatom_siteH2fract_x0.18847-infinf
20taurineatom_siteH2fract_y0.71342-infinf
21taurineatom_siteH2fract_z0.30769-infinf
22taurineatom_siteH3fract_x0.43362-infinf
23taurineatom_siteH3fract_y0.62556-infinf
24taurineatom_siteH3fract_z0.34863-infinf
25taurineatom_siteC1fract_x0.34727-infinf
26taurineatom_siteC1fract_y0.43987-infinf
27taurineatom_siteC1fract_z0.20220-infinf
28taurineatom_siteH11fract_x0.54769-infinf
29taurineatom_siteH11fract_y0.43366-infinf
30taurineatom_siteH11fract_z0.24056-infinf
31taurineatom_siteH12fract_x0.32772-infinf
32taurineatom_siteH12fract_y0.38046-infinf
33taurineatom_siteH12fract_z0.08535-infinf
34taurineatom_siteC2fract_x0.19616-infinf
35taurineatom_siteC2fract_y0.55544-infinf
36taurineatom_siteC2fract_z0.17960-infinf
37taurineatom_siteH21fract_x0.27339-infinf
38taurineatom_siteH21fract_y0.59826-infinf
39taurineatom_siteH21fract_z0.07386-infinf
40taurineatom_siteH22fract_x0.99740-infinf
41taurineatom_siteH22fract_y0.55139-infinf
42taurineatom_siteH22fract_z0.16460-infinf
43taurineatom_site_anisoS1adp_110.01592-infinfŲ
44taurineatom_site_anisoS1adp_220.01592-infinfŲ
45taurineatom_site_anisoS1adp_330.01592-infinfŲ
46taurineatom_site_anisoS1adp_120.00000-infinfŲ
47taurineatom_site_anisoS1adp_130.00000-infinfŲ
48taurineatom_site_anisoS1adp_230.00000-infinfŲ
49taurineatom_site_anisoO1adp_110.03521-infinfŲ
50taurineatom_site_anisoO1adp_220.03521-infinfŲ
51taurineatom_site_anisoO1adp_330.03521-infinfŲ
52taurineatom_site_anisoO1adp_120.00000-infinfŲ
53taurineatom_site_anisoO1adp_130.00000-infinfŲ
54taurineatom_site_anisoO1adp_230.00000-infinfŲ
55taurineatom_site_anisoO2adp_110.04517-infinfŲ
56taurineatom_site_anisoO2adp_220.04517-infinfŲ
57taurineatom_site_anisoO2adp_330.04517-infinfŲ
58taurineatom_site_anisoO2adp_120.00000-infinfŲ
59taurineatom_site_anisoO2adp_130.00000-infinfŲ
60taurineatom_site_anisoO2adp_230.00000-infinfŲ
61taurineatom_site_anisoO3adp_110.02638-infinfŲ
62taurineatom_site_anisoO3adp_220.02638-infinfŲ
63taurineatom_site_anisoO3adp_330.02638-infinfŲ
64taurineatom_site_anisoO3adp_120.00000-infinfŲ
65taurineatom_site_anisoO3adp_130.00000-infinfŲ
66taurineatom_site_anisoO3adp_230.00000-infinfŲ
67taurineatom_site_anisoN1adp_110.02670-infinfŲ
68taurineatom_site_anisoN1adp_220.02670-infinfŲ
69taurineatom_site_anisoN1adp_330.02670-infinfŲ
70taurineatom_site_anisoN1adp_120.00000-infinfŲ
71taurineatom_site_anisoN1adp_130.00000-infinfŲ
72taurineatom_site_anisoN1adp_230.00000-infinfŲ
73taurineatom_site_anisoH1adp_110.03519-infinfŲ
74taurineatom_site_anisoH1adp_220.03519-infinfŲ
75taurineatom_site_anisoH1adp_330.03519-infinfŲ
76taurineatom_site_anisoH1adp_120.00000-infinfŲ
77taurineatom_site_anisoH1adp_130.00000-infinfŲ
78taurineatom_site_anisoH1adp_230.00000-infinfŲ
79taurineatom_site_anisoH2adp_110.05325-infinfŲ
80taurineatom_site_anisoH2adp_220.05325-infinfŲ
81taurineatom_site_anisoH2adp_330.05325-infinfŲ
82taurineatom_site_anisoH2adp_120.00000-infinfŲ
83taurineatom_site_anisoH2adp_130.00000-infinfŲ
84taurineatom_site_anisoH2adp_230.00000-infinfŲ
85taurineatom_site_anisoH3adp_110.06222-infinfŲ
86taurineatom_site_anisoH3adp_220.06222-infinfŲ
87taurineatom_site_anisoH3adp_330.06222-infinfŲ
88taurineatom_site_anisoH3adp_120.00000-infinfŲ
89taurineatom_site_anisoH3adp_130.00000-infinfŲ
90taurineatom_site_anisoH3adp_230.00000-infinfŲ
91taurineatom_site_anisoC1adp_110.02136-infinfŲ
92taurineatom_site_anisoC1adp_220.02136-infinfŲ
93taurineatom_site_anisoC1adp_330.02136-infinfŲ
94taurineatom_site_anisoC1adp_120.00000-infinfŲ
95taurineatom_site_anisoC1adp_130.00000-infinfŲ
96taurineatom_site_anisoC1adp_230.00000-infinfŲ
97taurineatom_site_anisoH11adp_110.04460-infinfŲ
98taurineatom_site_anisoH11adp_220.04460-infinfŲ
99taurineatom_site_anisoH11adp_330.04460-infinfŲ
100taurineatom_site_anisoH11adp_120.00000-infinfŲ
101taurineatom_site_anisoH11adp_130.00000-infinfŲ
102taurineatom_site_anisoH11adp_230.00000-infinfŲ
103taurineatom_site_anisoH12adp_110.04202-infinfŲ
104taurineatom_site_anisoH12adp_220.04202-infinfŲ
105taurineatom_site_anisoH12adp_330.04202-infinfŲ
106taurineatom_site_anisoH12adp_120.00000-infinfŲ
107taurineatom_site_anisoH12adp_130.00000-infinfŲ
108taurineatom_site_anisoH12adp_230.00000-infinfŲ
109taurineatom_site_anisoC2adp_110.02331-infinfŲ
110taurineatom_site_anisoC2adp_220.02331-infinfŲ
111taurineatom_site_anisoC2adp_330.02331-infinfŲ
112taurineatom_site_anisoC2adp_120.00000-infinfŲ
113taurineatom_site_anisoC2adp_130.00000-infinfŲ
114taurineatom_site_anisoC2adp_230.00000-infinfŲ
115taurineatom_site_anisoH21adp_110.03020-infinfŲ
116taurineatom_site_anisoH21adp_220.03020-infinfŲ
117taurineatom_site_anisoH21adp_330.03020-infinfŲ
118taurineatom_site_anisoH21adp_120.00000-infinfŲ
119taurineatom_site_anisoH21adp_130.00000-infinfŲ
120taurineatom_site_anisoH21adp_230.00000-infinfŲ
121taurineatom_site_anisoH22adp_110.05897-infinfŲ
122taurineatom_site_anisoH22adp_220.05897-infinfŲ
123taurineatom_site_anisoH22adp_330.05897-infinfŲ
124taurineatom_site_anisoH22adp_120.00000-infinfŲ
125taurineatom_site_anisoH22adp_130.00000-infinfŲ
126taurineatom_site_anisoH22adp_230.00000-infinfŲ
127senjuextinctionradius-0.93802-infinfμm
128senjulinked_crystalscale1.34875-infinf
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.parameters.free()" ] }, { "cell_type": "code", "execution_count": 29, "id": "36", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:03.704586Z", "iopub.status.busy": "2026-06-04T16:16:03.704393Z", "iopub.status.idle": "2026-06-04T16:16:26.600233Z", "shell.execute_reply": "2026-06-04T16:16:26.599460Z" } }, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function() {\n", " const button = document.getElementById('ed-fit-stop-555c312d5578426f814941f115f22b72-button');\n", " const status = document.getElementById('ed-fit-stop-555c312d5578426f814941f115f22b72-status');\n", " const kernelId = '';\n", " if (!button) {\n", " return;\n", " }\n", "\n", " function setStatus(text) {\n", " if (status) {\n", " status.textContent = text;\n", " }\n", " }\n", "\n", " function pageConfig() {\n", " const element = document.getElementById('jupyter-config-data');\n", " if (!element || !element.textContent) {\n", " return {};\n", " }\n", " try {\n", " return JSON.parse(element.textContent);\n", " } catch (error) {\n", " return {};\n", " }\n", " }\n", "\n", " function baseUrl(config) {\n", " const configured = config.baseUrl || config.base_url ||\n", " (window.Jupyter && Jupyter.notebook && Jupyter.notebook.base_url);\n", " if (configured) {\n", " return configured.endsWith('/') ? configured : configured + '/';\n", " }\n", " const markers = ['/lab/', '/notebooks/', '/tree/'];\n", " for (const marker of markers) {\n", " const index = window.location.pathname.indexOf(marker);\n", " if (index >= 0) {\n", " return window.location.pathname.slice(0, index + 1);\n", " }\n", " }\n", " return '/';\n", " }\n", "\n", " function token(config) {\n", " return config.token || new URLSearchParams(window.location.search).get('token') || '';\n", " }\n", "\n", " function cookie(name) {\n", " const prefix = name + '=';\n", " for (const part of document.cookie.split(';')) {\n", " const trimmed = part.trim();\n", " if (trimmed.startsWith(prefix)) {\n", " return decodeURIComponent(trimmed.slice(prefix.length));\n", " }\n", " }\n", " return '';\n", " }\n", "\n", " function notebookPath() {\n", " const decoded = decodeURIComponent(window.location.pathname);\n", " const markers = ['/lab/tree/', '/notebooks/', '/tree/'];\n", " for (const marker of markers) {\n", " const index = decoded.indexOf(marker);\n", " if (index >= 0) {\n", " return decoded.slice(index + marker.length);\n", " }\n", " }\n", " return '';\n", " }\n", "\n", " async function kernelFromSessions(config) {\n", " const url = new URL(baseUrl(config) + 'api/sessions', window.location.origin);\n", " const authToken = token(config);\n", " if (authToken) {\n", " url.searchParams.set('token', authToken);\n", " }\n", " const response = await fetch(url, {credentials: 'same-origin'});\n", " if (!response.ok) {\n", " return '';\n", " }\n", " const sessions = await response.json();\n", " const path = notebookPath();\n", " const session = sessions.find((item) => item.path === path) || sessions[0];\n", " return session && session.kernel ? session.kernel.id : '';\n", " }\n", "\n", " async function interruptKernel(config, resolvedKernelId) {\n", " const url = new URL(\n", " baseUrl(config) + 'api/kernels/' + resolvedKernelId + '/interrupt',\n", " window.location.origin\n", " );\n", " const authToken = token(config);\n", " if (authToken) {\n", " url.searchParams.set('token', authToken);\n", " }\n", " const xsrfToken = cookie('_xsrf');\n", " const headers = {};\n", " if (xsrfToken) {\n", " headers['X-XSRFToken'] = xsrfToken;\n", " }\n", " const response = await fetch(url, {\n", " method: 'POST',\n", " credentials: 'same-origin',\n", " headers: headers\n", " });\n", " return response.ok;\n", " }\n", "\n", " button.addEventListener('click', async function() {\n", " button.disabled = true;\n", " setStatus('Stopping...');\n", " const config = pageConfig();\n", " try {\n", " const resolvedKernelId = kernelId || await kernelFromSessions(config);\n", " if (!resolvedKernelId) {\n", " throw new Error('Could not resolve the current kernel id.');\n", " }\n", " const interrupted = await interruptKernel(config, resolvedKernelId);\n", " if (!interrupted) {\n", " throw new Error('Jupyter Server rejected the interrupt request.');\n", " }\n", " setStatus('Interrupt sent...');\n", " } catch (error) {\n", " button.disabled = false;\n", " setStatus('Use Kernel > Interrupt to stop this fit.');\n", " }\n", " });\n", "})();\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStandard fitting\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "📋 Using experiment 🔬 \u001b[32m'senju'\u001b[0m for \u001b[32m'single'\u001b[0m fitting\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "🚀 Starting fit process with \u001b[32m'bumps \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlm\u001b[0m\u001b[32m)\u001b[0m\u001b[32m'\u001b[0m\u001b[33m...\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "📈 Goodness-of-fit progress:\n" ] }, { "data": { "text/html": [ "
iterationtime (s)χ²change / status
110.0438.62
21316.0027.6428.4% ↓
326011.8017.9834.9% ↓
438917.6412.1932.2% ↓
550022.7612.19
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "⚠️ Parameter 'taurine.atom_site_aniso.S1.adp_11' (-0.02098112) is below its physical lower limit (0.0). \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "⚠️ Parameter 'taurine.atom_site_aniso.C2.adp_11' (-0.00373556) is below its physical lower limit (0.0). \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "🏆 Best goodness-of-fit \u001b[1m(\u001b[0mreduced χ²\u001b[1m)\u001b[0m is \u001b[1;36m12.19\u001b[0m at iteration \u001b[1;36m500\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Fitting complete.\n" ] } ], "source": [ "project.analysis.fit()" ] }, { "cell_type": "code", "execution_count": 30, "id": "37", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:26.601729Z", "iopub.status.busy": "2026-06-04T16:16:26.601534Z", "iopub.status.idle": "2026-06-04T16:16:26.923123Z", "shell.execute_reply": "2026-06-04T16:16:26.922235Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "⚙️ Settings used:\n" ] }, { "data": { "text/html": [ "
NameValueDescription
1max_iterations500Maximum solver iterations.
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "📋 Least-squares fit results:\n" ] }, { "data": { "text/html": [ "
MetricValue
1🧪 Minimizerbumps
2❌ Overall statusfailed
3⏱️ Fitting time (seconds)22.76
4📏 Goodness-of-fit (reduced χ²)12.19
5📏 R-factor (Rf, %)13.34
6📏 R-factor squared (Rf², %)9.11
7📏 Weighted R-factor (wR, %)8.37
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "📈 Refined parameters:\n" ] }, { "data": { "text/html": [ "
datablockcategoryentryparameterunitsstartvalues.u.change
1taurineatom_siteS1fract_x0.20160.2036N/A1.00 % ↑
2taurineatom_siteS1fract_y0.34820.3504N/A0.63 % ↑
3taurineatom_siteS1fract_z0.34840.3489N/A0.13 % ↑
4taurineatom_siteO1fract_x0.31790.3205N/A0.83 % ↑
5taurineatom_siteO1fract_y0.24060.2406N/A0.00 % ↑
6taurineatom_siteO1fract_z0.35180.3506N/A0.33 % ↓
7taurineatom_siteO2fract_x0.93940.9424N/A0.33 % ↑
8taurineatom_siteO2fract_y0.33720.3355N/A0.53 % ↓
9taurineatom_siteO2fract_z0.29390.2945N/A0.21 % ↑
10taurineatom_siteO3fract_x0.22480.2261N/A0.59 % ↑
11taurineatom_siteO3fract_y0.40980.4125N/A0.64 % ↑
12taurineatom_siteO3fract_z0.50750.5088N/A0.26 % ↑
13taurineatom_siteN1fract_x0.26340.2610N/A0.92 % ↓
14taurineatom_siteN1fract_y0.62790.6275N/A0.07 % ↓
15taurineatom_siteN1fract_z0.33220.3325N/A0.09 % ↑
16taurineatom_siteH1fract_x0.13610.1350N/A0.74 % ↓
17taurineatom_siteH1fract_y0.58550.5935N/A1.36 % ↑
18taurineatom_siteH1fract_z0.41680.4209N/A0.99 % ↑
19taurineatom_siteH2fract_x0.18850.1841N/A2.33 % ↓
20taurineatom_siteH2fract_y0.71340.7056N/A1.10 % ↓
21taurineatom_siteH2fract_z0.30770.3045N/A1.04 % ↓
22taurineatom_siteH3fract_x0.43360.4411N/A1.73 % ↑
23taurineatom_siteH3fract_y0.62560.6336N/A1.28 % ↑
24taurineatom_siteH3fract_z0.34860.3553N/A1.91 % ↑
25taurineatom_siteC1fract_x0.34730.3507N/A1.00 % ↑
26taurineatom_siteC1fract_y0.43990.4394N/A0.10 % ↓
27taurineatom_siteC1fract_z0.20220.2037N/A0.75 % ↑
28taurineatom_siteH11fract_x0.54770.5405N/A1.32 % ↓
29taurineatom_siteH11fract_y0.43370.4413N/A1.76 % ↑
30taurineatom_siteH11fract_z0.24060.2409N/A0.13 % ↑
31taurineatom_siteH12fract_x0.32770.3315N/A1.14 % ↑
32taurineatom_siteH12fract_y0.38050.3858N/A1.39 % ↑
33taurineatom_siteH12fract_z0.08540.0859N/A0.69 % ↑
34taurineatom_siteC2fract_x0.19620.2060N/A5.00 % ↑
35taurineatom_siteC2fract_y0.55540.5556N/A0.02 % ↑
36taurineatom_siteC2fract_z0.17960.1806N/A0.56 % ↑
37taurineatom_siteH21fract_x0.27340.2733N/A0.03 % ↓
38taurineatom_siteH21fract_y0.59830.6016N/A0.56 % ↑
39taurineatom_siteH21fract_z0.07390.0774N/A4.76 % ↑
40taurineatom_siteH22fract_x0.99740.9954N/A0.20 % ↓
41taurineatom_siteH22fract_y0.55140.5561N/A0.85 % ↑
42taurineatom_siteH22fract_z0.16460.1644N/A0.12 % ↓
43taurineatom_site_anisoS1adp_11Ų0.0159-0.0210N/A231.78 % ↓
44taurineatom_site_anisoS1adp_22Ų0.01590.0033N/A79.01 % ↓
45taurineatom_site_anisoS1adp_33Ų0.01590.0295N/A85.13 % ↑
46taurineatom_site_anisoS1adp_12Ų0.0000-0.0194N/AN/A
47taurineatom_site_anisoS1adp_13Ų0.00000.0015N/AN/A
48taurineatom_site_anisoS1adp_23Ų0.00000.0004N/AN/A
49taurineatom_site_anisoO1adp_11Ų0.03520.0387N/A9.93 % ↑
50taurineatom_site_anisoO1adp_22Ų0.03520.0257N/A27.10 % ↓
51taurineatom_site_anisoO1adp_33Ų0.03520.0424N/A20.32 % ↑
52taurineatom_site_anisoO1adp_12Ų0.0000-0.0033N/AN/A
53taurineatom_site_anisoO1adp_13Ų0.00000.0117N/AN/A
54taurineatom_site_anisoO1adp_23Ų0.0000-0.0110N/AN/A
55taurineatom_site_anisoO2adp_11Ų0.04520.0320N/A29.07 % ↓
56taurineatom_site_anisoO2adp_22Ų0.04520.0015N/A96.76 % ↓
57taurineatom_site_anisoO2adp_33Ų0.04520.0546N/A20.91 % ↑
58taurineatom_site_anisoO2adp_12Ų0.0000-0.0018N/AN/A
59taurineatom_site_anisoO2adp_13Ų0.00000.0191N/AN/A
60taurineatom_site_anisoO2adp_23Ų0.0000-0.0078N/AN/A
61taurineatom_site_anisoO3adp_11Ų0.02640.0411N/A55.92 % ↑
62taurineatom_site_anisoO3adp_22Ų0.02640.0306N/A15.91 % ↑
63taurineatom_site_anisoO3adp_33Ų0.02640.0173N/A34.35 % ↓
64taurineatom_site_anisoO3adp_12Ų0.00000.0108N/AN/A
65taurineatom_site_anisoO3adp_13Ų0.00000.0000N/AN/A
66taurineatom_site_anisoO3adp_23Ų0.00000.0009N/AN/A
67taurineatom_site_anisoN1adp_11Ų0.02670.0150N/A43.68 % ↓
68taurineatom_site_anisoN1adp_22Ų0.02670.0347N/A30.00 % ↑
69taurineatom_site_anisoN1adp_33Ų0.02670.0263N/A1.34 % ↓
70taurineatom_site_anisoN1adp_12Ų0.0000-0.0049N/AN/A
71taurineatom_site_anisoN1adp_13Ų0.00000.0034N/AN/A
72taurineatom_site_anisoN1adp_23Ų0.0000-0.0018N/AN/A
73taurineatom_site_anisoH1adp_11Ų0.03520.0447N/A26.89 % ↑
74taurineatom_site_anisoH1adp_22Ų0.03520.0270N/A23.16 % ↓
75taurineatom_site_anisoH1adp_33Ų0.03520.0381N/A8.19 % ↑
76taurineatom_site_anisoH1adp_12Ų0.0000-0.0054N/AN/A
77taurineatom_site_anisoH1adp_13Ų0.00000.0122N/AN/A
78taurineatom_site_anisoH1adp_23Ų0.0000-0.0106N/AN/A
79taurineatom_site_anisoH2adp_11Ų0.05330.0625N/A17.37 % ↑
80taurineatom_site_anisoH2adp_22Ų0.05330.0956N/A79.55 % ↑
81taurineatom_site_anisoH2adp_33Ų0.05330.0316N/A40.72 % ↓
82taurineatom_site_anisoH2adp_12Ų0.00000.0451N/AN/A
83taurineatom_site_anisoH2adp_13Ų0.0000-0.0077N/AN/A
84taurineatom_site_anisoH2adp_23Ų0.00000.0111N/AN/A
85taurineatom_site_anisoH3adp_11Ų0.06220.0201N/A67.67 % ↓
86taurineatom_site_anisoH3adp_22Ų0.06220.0796N/A27.95 % ↑
87taurineatom_site_anisoH3adp_33Ų0.06220.0758N/A21.83 % ↑
88taurineatom_site_anisoH3adp_12Ų0.00000.0040N/AN/A
89taurineatom_site_anisoH3adp_13Ų0.0000-0.0062N/AN/A
90taurineatom_site_anisoH3adp_23Ų0.0000-0.0172N/AN/A
91taurineatom_site_anisoC1adp_11Ų0.02140.0348N/A63.02 % ↑
92taurineatom_site_anisoC1adp_22Ų0.02140.0098N/A53.93 % ↓
93taurineatom_site_anisoC1adp_33Ų0.02140.0187N/A12.54 % ↓
94taurineatom_site_anisoC1adp_12Ų0.00000.0145N/AN/A
95taurineatom_site_anisoC1adp_13Ų0.00000.0053N/AN/A
96taurineatom_site_anisoC1adp_23Ų0.0000-0.0055N/AN/A
97taurineatom_site_anisoH11adp_11Ų0.04460.0653N/A46.42 % ↑
98taurineatom_site_anisoH11adp_22Ų0.04460.0043N/A90.40 % ↓
99taurineatom_site_anisoH11adp_33Ų0.04460.0554N/A24.31 % ↑
100taurineatom_site_anisoH11adp_12Ų0.00000.0013N/AN/A
101taurineatom_site_anisoH11adp_13Ų0.00000.0240N/AN/A
102taurineatom_site_anisoH11adp_23Ų0.00000.0020N/AN/A
103taurineatom_site_anisoH12adp_11Ų0.04200.0800N/A90.39 % ↑
104taurineatom_site_anisoH12adp_22Ų0.04200.0469N/A11.61 % ↑
105taurineatom_site_anisoH12adp_33Ų0.04200.0393N/A6.35 % ↓
106taurineatom_site_anisoH12adp_12Ų0.00000.0343N/AN/A
107taurineatom_site_anisoH12adp_13Ų0.00000.0233N/AN/A
108taurineatom_site_anisoH12adp_23Ų0.00000.0030N/AN/A
109taurineatom_site_anisoC2adp_11Ų0.0233-0.0037N/A116.02 % ↓
110taurineatom_site_anisoC2adp_22Ų0.02330.0455N/A95.03 % ↑
111taurineatom_site_anisoC2adp_33Ų0.02330.0256N/A9.85 % ↑
112taurineatom_site_anisoC2adp_12Ų0.0000-0.0039N/AN/A
113taurineatom_site_anisoC2adp_13Ų0.0000-0.0011N/AN/A
114taurineatom_site_anisoC2adp_23Ų0.00000.0039N/AN/A
115taurineatom_site_anisoH21adp_11Ų0.03020.0461N/A52.83 % ↑
116taurineatom_site_anisoH21adp_22Ų0.03020.0481N/A59.43 % ↑
117taurineatom_site_anisoH21adp_33Ų0.03020.0322N/A6.66 % ↑
118taurineatom_site_anisoH21adp_12Ų0.0000-0.0258N/AN/A
119taurineatom_site_anisoH21adp_13Ų0.00000.0062N/AN/A
120taurineatom_site_anisoH21adp_23Ų0.0000-0.0012N/AN/A
121taurineatom_site_anisoH22adp_11Ų0.05900.0063N/A89.25 % ↓
122taurineatom_site_anisoH22adp_22Ų0.05900.0352N/A40.25 % ↓
123taurineatom_site_anisoH22adp_33Ų0.05900.0646N/A9.52 % ↑
124taurineatom_site_anisoH22adp_12Ų0.00000.0079N/AN/A
125taurineatom_site_anisoH22adp_13Ų0.0000-0.0213N/AN/A
126taurineatom_site_anisoH22adp_23Ų0.00000.0077N/AN/A
127senjuextinctionradiusμm-0.9380-3.1057N/A231.10 % ↑
128senjulinked_crystalscale1.34881.3582N/A0.70 % ↑
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
• start = parameter value before refinement
• value = refined value from least-squares minimization
• s.u. = standard uncertainty (one sigma), from the covariance matrix
• change = relative change from start, in %; ↑ = increase, ↓ = decrease
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
⚠️ Red value: outside expected physical limits (consider adding constraints)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.fit.results()" ] }, { "cell_type": "code", "execution_count": 31, "id": "38", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:26.924596Z", "iopub.status.busy": "2026-06-04T16:16:26.924404Z", "iopub.status.idle": "2026-06-04T16:16:26.928147Z", "shell.execute_reply": "2026-06-04T16:16:26.927429Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "⚠️ Correlation matrix is unavailable for this fit. Use a minimizer that returns covariance information or posterior samples. \n" ] } ], "source": [ "project.display.fit.correlations()" ] }, { "cell_type": "code", "execution_count": 32, "id": "39", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:26.929556Z", "iopub.status.busy": "2026-06-04T16:16:26.929391Z", "iopub.status.idle": "2026-06-04T16:16:28.968497Z", "shell.execute_reply": "2026-06-04T16:16:28.967677Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Loading plot…
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "project.display.pattern(expt_name='senju')" ] }, { "cell_type": "code", "execution_count": 33, "id": "40", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:28.970188Z", "iopub.status.busy": "2026-06-04T16:16:28.969982Z", "iopub.status.idle": "2026-06-04T16:16:28.981965Z", "shell.execute_reply": "2026-06-04T16:16:28.981161Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mStructure 🧩 \u001b[0m\u001b[32m'taurine'\u001b[0m\u001b[1;36m as cif\u001b[0m\n" ] }, { "data": { "text/html": [ "
CIF
1data_taurine
2
3_cell.length_a 5.2729
4_cell.length_b 11.6565
5_cell.length_c 7.8383
6_cell.angle_alpha 90.
7_cell.angle_beta 94.011
8_cell.angle_gamma 90.
9
10_space_group.name_H-M_alt "P 21/c"
11_space_group.IT_coordinate_system_code b1
12
13_geom.min_bond_distance_cutoff 0.
14_geom.bond_distance_incr 0.25
15
16loop_
17_atom_site.label
18_atom_site.type_symbol
19_atom_site.fract_x
20_atom_site.fract_y
21_atom_site.fract_z
22_atom_site.Wyckoff_symbol
23_atom_site.site_symmetry_multiplicity
24_atom_site.occupancy
25_atom_site.U_iso_or_equiv
26_atom_site.ADP_type
27S1 S 0.2036457() 0.35043861() 0.34885409() e 4 1. 0.00394486 Uani
28O1 O 0.32049774() 0.2406249() 0.35063032() e 4 1. 0.03558171 Uani
29O2 O 0.94243004() 0.33545591() 0.29447012() e 4 1. 0.02937017 Uani
30O3 O 0.2261122() 0.41247123() 0.50878597() e 4 1. 0.02968045 Uani
31N1 N 0.26096439() 0.62748926() 0.33245663() e 4 1. 0.02536629 Uani
32H1 H 0.13504681() 0.59348356() 0.42089948() e 4 1. 0.03658895 Uani
33H2 H 0.1840871() 0.7055539() 0.30448629() e 4 1. 0.06322598 Uani
34H3 H 0.44112206() 0.63360152() 0.35529618() e 4 1. 0.05851176 Uani
35C1 C 0.35073493() 0.43944711() 0.20371499() e 4 1. 0.02111665 Uani
36H11 H 0.54048836() 0.44130427() 0.24086578() e 4 1. 0.04167395 Uani
37H12 H 0.33146814() 0.38576846() 0.08594235() e 4 1. 0.05541139 Uani
38C2 C 0.20597488() 0.55556286() 0.18060474() e 4 1. 0.02244623 Uani
39H21 H 0.27330763() 0.60162773() 0.07737594() e 4 1. 0.04216522 Uani
40H22 H 0.99536132() 0.55608594() 0.16439971() e 4 1. 0.0353875 Uani
41
42loop_
43_atom_site_aniso.label
44_atom_site_aniso.U_11
45_atom_site_aniso.U_22
46_atom_site_aniso.U_33
47_atom_site_aniso.U_12
48_atom_site_aniso.U_13
49_atom_site_aniso.U_23
50S1 -0.02098112() 0.00334113() 0.02947457() -0.01941598() 0.00153415() 0.00039074()
51O1 0.03870853() 0.02566841() 0.04236819() -0.00327106() 0.01173305() -0.01097964()
52O2 0.03203765() 0.00146338() 0.05460949() -0.0017841() 0.01913176() -0.0077667()
53O3 0.04113718() 0.03058241() 0.01732177() 0.01075673() 0.00004843() 0.00086407()
54N1 0.01503967() 0.03471435() 0.02634484() -0.00489627() 0.00336417() -0.00176789()
55H1 0.04465296() 0.02704167() 0.03807221() -0.00536084() 0.01222864() -0.01062068()
56H2 0.06249825() 0.09561056() 0.03156914() 0.04512381() -0.00773365() 0.01114166()
57H3 0.0201175() 0.07961346() 0.07580431() 0.00404304() -0.00616788() -0.01719158()
58C1 0.03482615() 0.00984111() 0.01868267() 0.01445096() 0.00530132() -0.00545329()
59H11 0.06530166() 0.00427931() 0.05544088() 0.00134969() 0.02395799() 0.00203()
60H12 0.0799933() 0.04689394() 0.03934694() 0.03428086() 0.02334572() 0.00304899()
61C2 -0.00373556() 0.04546498() 0.02560927() -0.00386211() -0.00110455() 0.00391659()
62H21 0.04614874() 0.04814135() 0.03220557() -0.02583011() 0.00623454() -0.00123987()
63H22 0.00634053() 0.0352373() 0.06458468() 0.0079277() -0.02127045() 0.00769729()
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "structure.show_as_cif()" ] }, { "cell_type": "markdown", "id": "41", "metadata": {}, "source": [ "## 💾 Save Project" ] }, { "cell_type": "code", "execution_count": 34, "id": "42", "metadata": { "execution": { "iopub.execute_input": "2026-06-04T16:16:28.983527Z", "iopub.status.busy": "2026-06-04T16:16:28.983343Z", "iopub.status.idle": "2026-06-04T16:16:31.022039Z", "shell.execute_reply": "2026-06-04T16:16:31.021233Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1;36mSaving project 📦 \u001b[0m\u001b[32m'taurine_senju'\u001b[0m\u001b[1;36m to \u001b[0m\u001b[32m'../../../projects/ed_15_taurine_senju'\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "├── 📄 project.cif\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "├── 📁 structures/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "│ └── 📄 taurine.cif\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "├── 📁 experiments/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "│ └── 📄 senju.cif\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "├── 📁 analysis/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "│ └── 📄 analysis.cif\n" ] }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " (function() {\n", " var isDark = false;\n", "\n", " // Check JupyterLab theme\n", " if (document.body.classList.contains('jp-mod-dark') || \n", " document.body.classList.contains('theme-dark') ||\n", " document.body.classList.contains('vscode-dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check theme attribute\n", " var themeAttr = document.body.getAttribute('data-jp-theme-name');\n", " if (themeAttr && themeAttr.includes('dark')) {\n", " isDark = true;\n", " }\n", "\n", " // Check computed background color\n", " var notebookEl = document.querySelector('.jp-Notebook') || \n", " document.querySelector('.notebook_app') ||\n", " document.body;\n", " if (notebookEl) {\n", " var bgColor = window.getComputedStyle(notebookEl).backgroundColor;\n", " var rgb = bgColor.match(/\\d+/g);\n", " if (rgb && rgb.length >= 3) {\n", " var brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3;\n", " if (brightness < 128) {\n", " isDark = true;\n", " }\n", " }\n", " }\n", "\n", " // Store result\n", " if (typeof IPython !== 'undefined' && IPython.notebook && IPython.notebook.kernel) {\n", " IPython.notebook.kernel.execute('_jupyter_dark_detect_result = ' + isDark);\n", " }\n", " })();\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " if (typeof IPython !== 'undefined' && IPython.notebook) {\n", " IPython.notebook.kernel.execute(\"_jupyter_dark_detect_result = \" + \n", " (document.body.classList.contains('theme-dark') || \n", " document.body.classList.contains('jp-mod-dark') ||\n", " (document.body.getAttribute('data-jp-theme-name') && \n", " document.body.getAttribute('data-jp-theme-name').includes('dark'))));\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "└── 📁 reports/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " └── 📄 taurine_senju.html\n" ] } ], "source": [ "project.save_as(dir_path='projects/ed_15_taurine_senju')" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "main_language": "python", "notebook_metadata_filter": "-all" }, "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.14.5" } }, "nbformat": 4, "nbformat_minor": 5 }