{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 1: Atomic crystal module in PyXtal\n", "\n", "Source code: https://github.com/qzhu2017/PyXtal\n", "\n", "Created by Qiang Zhu (2020/11/23)\n", "\n", "Last updated: 2022/08/11\n", "\n", "More details can be found at the following [link](https://pyxtal.readthedocs.io/en/latest/)\n", "\n", "# 1.1 Generate a random atomic crystal" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pyxtal import pyxtal" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------Crystal from random------\n", "Dimension: 3\n", "Composition: C8\n", "Group: F d -3 m:2 (227)\n", " 4.5200, 4.5200, 4.5200, 90.0000, 90.0000, 90.0000, cubic\n", "Wyckoff sites:\n", "\t C @ [ 0.1250 0.1250 0.1250], WP [8a] Site [-433mm]\n" ] } ], "source": [ "C1 = pyxtal()\n", "C1.from_random(3, 227, ['C'], [8])\n", "# Alternative, you can also generate the structure with pre-assigned sites\n", "# C1.from_random(3, 225, [\"C\"], [12], sites=[[\"4a\", \"8c\"]])\n", "\n", "print(C1)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Wyckoff position 8a in space group 227 with site symmetry -4 33 mm\n", "1/8, 1/8, 1/8\n", "7/8, 3/8, 3/8\n", "1/8, 5/8, 5/8\n", "7/8, 7/8, 7/8\n", "5/8, 1/8, 5/8\n", "11/8, 3/8, 7/8\n", "5/8, 5/8, 1/8\n", "11/8, 7/8, 3/8" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C1.atom_sites[0].wp" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#display the structure can be easily accessed with the show() function\n", "C1.show(supercell=(2,2,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1.2 Manipulating the crystal via symmetry relation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------Crystal from subgroup------\n", "Dimension: 3\n", "Composition: C8\n", "Group: I 41/a m d:2 (141)\n", " 3.1961, 3.1961, 4.5134, 90.0000, 90.0000, 90.0000, tetragonal\n", "Wyckoff sites:\n", "\t C @ [ 0.0000 0.7500 0.1250], WP [4a] Site [-4mm2]\n" ] } ], "source": [ "# lower the symmetry from cubic to tetragonal\n", "C2 = C1.subgroup_once(H=141, eps=1e-2)\n", "print(C2)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Compute the XRD\n", "xrd1 = C1.get_XRD()\n", "xrd2 = C2.get_XRD()\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The similarity between two PXRDs is 0.9986\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5QAAAF4CAYAAAArL7aYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA+y0lEQVR4nO3deZwV9Znv8e/T3TQ7DSIiCAgmLiAqYkPMwLgkLngloNFEvZqQES8TI1djRoWMiZPROJcYX5OJiRsR1Bi3qIliojEqMYkboVGMLC5IEBtUkKUREXp77h9V3ZxueqPP6apT1Z/369WcWn5V5+lTnNO/5/yWMncXAAAAAAB7qyDuAAAAAAAAyURCCQAAAABoFxJKAAAAAEC7kFACAAAAANqFhBIAAAAA0C5FcQfQHvvuu68PHz487jAAAAAAIPWWLFnykbsPaGpfIhPK4cOHq6ysLO4wAAAAACD1zOzd5vbR5RUAAAAA0C4klAAAAACAdiGhBAAAAAC0SyLHUAIAAABAa6qqqlReXq6dO3fGHUoidOvWTUOGDFGXLl3afAwJJQAAAIBUKi8vV+/evTV8+HCZWdzh5DV316ZNm1ReXq4RI0a0+Ti6vAIAAABIpZ07d6p///4kk21gZurfv/9et+aSUAIAAABILZLJtmvPa5WThNLM5pvZBjNb1sx+M7ObzGyVmf3dzMZm7JtmZm+HP9NyEQ8AAAAAoOPlqoXyLkmTWth/mqSDw58Zkm6VJDPbR9J/SPqcpPGS/sPM+uUoJgAAAABItIceekgjR47UiSeeqLKyMl166aWSpLvuukszZ85s83k2bdqkE088Ub169dqr41qTk0l53P0vZja8hSJTJf3S3V3Sy2bW18wGSTpB0tPuvlmSzOxpBYnp/bmIC0B+uvlPqzS8f0+dfuSguEMBAACIXU1NjQoLC5vcN2/ePP3iF7/QxIkTJUmlpaXteo5u3brpuuuu07Jly7RsWZMdS9slqjGUB0h6L2O9PNzW3PY9mNkMMyszs7KNGzd2WKAAOt6Pn3pTl9z3StxhAAAAdKg1a9bosMMO0/nnn6+RI0fq7LPP1o4dOyRJw4cP16xZszR27Fg99NBDuv/++3XEEUdo9OjRmjVrliTp2muv1fPPP6/p06fryiuv1HPPPafJkyfv8TwbN27UWWedpXHjxmncuHF64YUX9ijTs2dPTZw4Ud26dcvp75iY24a4+1xJcyWptLTUYw4HAAAAQIL85+PLtWL9tpyec9TgPvqPLx3eYpk333xT8+bN04QJE3ThhRfqlltu0RVXXCFJ6t+/v1555RWtX79exx57rJYsWaJ+/frplFNO0aOPPqprrrlGCxcu1I033qjS0lI999xzTT7HZZddpssvv1wTJ07U2rVrdeqpp2rlypU5/V2bE1UL5TpJQzPWh4TbmtsOAAAAAIk3dOhQTZgwQZJ0wQUX6Pnnn6/fd84550iSFi9erBNOOEEDBgxQUVGRzj//fP3lL39p83M888wzmjlzpsaMGaMpU6Zo27Zt2r59e25/kWZE1UK5QNJMM3tAwQQ8Fe7+vpk9Jem/MibiOUXSdyOKCQAAAEAn0VpLYkdpfCuOzPWePXvm5Dlqa2v18ssv57w7a1vk6rYh90t6SdKhZlZuZtPN7Jtm9s2wyBOSVktaJekXkr4lSeFkPNdJWhz+XFs3QQ8AAAAAJN3atWv10ksvSZLuu++++sl1Mo0fP15//vOf9dFHH6mmpkb333+/jj/++DY/xymnnKKf/exn9etLly7NOu62ytUsr+e1st8lXdLMvvmS5uciDgAAAADIJ4ceeqhuvvlmXXjhhRo1apQuvvjiPcoMGjRIc+bM0Yknnih31+mnn66pU6e2+TluuukmXXLJJTryyCNVXV2t4447Trfddtse5YYPH65t27apsrJSjz76qP74xz9q1KhRWf1+FuR6yVJaWuplZWVxhwGgnYbP/r0kac2c02OOBAAApNnKlSs1cuTI2J5/zZo1mjx5ck5v09HRmnrNzGyJuzd5v5KoJuUBAAAAAKQMCSUAAAAAdIDhw4cnqnWyPUgoAQAAAADtQkIJIFJJHLcNAACAppFQAohULfkkAABAapBQAohULS2UAAAAqUFCCSBSJJQAAABt99BDD2nkyJE68cQTVVZWpksvvVSSdNddd2nmzJltPs/TTz+tY445RkcccYSOOeYYLVy4MCfxFeXkLADQRrW1cUcAAACQX2pqalRYWNjkvnnz5ukXv/iFJk6cKEkqLW3ydpCt2nffffX4449r8ODBWrZsmU499VStW7eu3THXoYUSQKRooQQAAJ3FmjVrdNhhh+n888/XyJEjdfbZZ2vHjh2SgluKzJo1S2PHjtVDDz2k+++/X0cccYRGjx6tWbNmSZKuvfZaPf/885o+fbquvPJKPffcc5o8efIez7Nx40adddZZGjdunMaNG6cXXnhhjzJHH320Bg8eLEk6/PDD9emnn2rXrl1Z/460UAKIFAklAACIxZOzpQ9ez+059z9COm1Oi0XefPNNzZs3TxMmTNCFF16oW265RVdccYUkqX///nrllVe0fv16HXvssVqyZIn69eunU045RY8++qiuueYaLVy4UDfeeKNKS0v13HPPNfkcl112mS6//HJNnDhRa9eu1amnnqqVK1c2G9MjjzyisWPHqmvXru3+1evQQgkgUszyCgAAOpOhQ4dqwoQJkqQLLrhAzz//fP2+c845R5K0ePFinXDCCRowYICKiop0/vnn6y9/+Uubn+OZZ57RzJkzNWbMGE2ZMkXbtm3T9u3bmyy7fPlyzZo1S7fffnsWv9VutFACiBT3oQQAALFopSWxo5hZs+s9e/bMyXPU1tbq5ZdfVrdu3VosV15erjPPPFO//OUv9ZnPfCYnz00LJYBI0UIJAAA6k7Vr1+qll16SJN133331k+tkGj9+vP785z/ro48+Uk1Nje6//34df/zxbX6OU045RT/72c/q15cuXbpHma1bt+r000/XnDlz6ltMc4GEEkCkGEMJAAA6k0MPPVQ333yzRo4cqS1btujiiy/eo8ygQYM0Z84cnXjiiTrqqKN0zDHHaOrUqW1+jptuukllZWU68sgjNWrUKN122217lPn5z3+uVatW6dprr9WYMWM0ZswYbdiwIavfTZIsid3PSktLvaysLO4wALTDho93avz1z0qS1sw5PeZoAABAmq1cuVIjR46M7fnXrFmjyZMna9myZbHFsLeaes3MbIm7N3m/ElooAUQqgd9hAQAAoBkklAAiRZdXAADQWQwfPjxRrZPtQUIJIFJMygMAAKKUxCF+cWnPa0VCCSBStWSUAAAgIt26ddOmTZtIKtvA3bVp06ZWbz3SGPehBBApPs8BAEBUhgwZovLycm3cuDHuUBKhW7duGjJkyF4dk5OE0swmSfqppEJJd7j7nEb7fyLpxHC1h6T93L1vuK9G0uvhvrXuPiUXMQHIT4yhBAAAUenSpYtGjBgRdxiplnVCaWaFkm6WdLKkckmLzWyBu6+oK+Pul2eU/7+Sjs44xafuPibbOAAkAwklAABAeuRiDOV4SavcfbW7V0p6QFJLd+E8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SLhtk6S+ZlbUaDsAAJHo1auXtm3b1mDbtm3b1Lv3nt943HTTTerevbsOPvhgTZ06Veedd56GDBkiSerfv78ee+wx/fd//7cGDhyoP/zhDzrppJPq98+bN0933nmnli9frsrKSv3qV7/S5MmTtX79eknSqFGjNHjwYBUWFuqf/umfdNlll+nhh4MRIW+88YbOPfdc/fKXv1RlZaWWL1+uG264Qb///e878qUBAKBNoujyuljSweGMrsWSzpW0wIO+QX+SdHZYbpqkyFo8AQA45JBDVF1drbfffrt+22uvvabDDz98j7L77LOP7r33Xn3wwQdavny5amtrNX78+Pr9xx9/vBYvXqzNmzfrnnvu0RtvvFG/f+nSpZo8ebIOOeSQ+kl0Bg0apBdffLHJuMysvgvtsmXLdMghh+jUU09VQUGBDj30UJ1++ul68sknc/lSAADQLtneNuRMMyuX9HlJvzezp8Ltg83sCUkKx0jOlPSUpJWSfu3udYNTZkn6jpmtUjCmcl428QAAsDd69uypL3/5y7rmmmv0ySef6IUXXtBjjz2mr33ta3uUfeedd7Rp0ybV1NToySef1Ny5c/W9732vfv+rr76qqqoqbdu2TVdccYWGDh2qU089VZI0btw4/f73v9fq1avl7nr66af11ltvafTo0ZKkxx57TFu2bJG7629/+5tuuukmTZ06VZJ09NFH6+2339bChQvl7nrnnXf0u9/9TkceeWT9c+/cuVO7du2SJO3atUs7d+7ssNcMAIBMrY6hbIm7/1bSb5vYvl7S/8pYf0LSE02UW61gFlgAAGJxyy236MILL9R+++2n/v3769Zbb9Xhhx+uv/71rzrttNO0fft2SdKSJUv07W9/W1u3btUhhxyie++9t0FL5g033KAnngj+1E2aNEm//e3uP49f//rX9c477+iEE07Qli1bNGTIEN1+++067LDDJEkPPPCALrzwQu3atUtDhgzRrFmzNG3aNEnSZz7zGc2fP1+XXnqp3n33XZWUlOj888/XRRddVH/+7t271y/XnbPxJEEAAHQES+IfnNLSUi8rK4s7DAAAAABIPTNb4u6lTe2LYgwlAAAAACCFSCgBAAAAAO1CQgkAAAAAaBcSSgAAAABAu2Q1y2tc1qxZo9LSJseEAgAAAABya2xzOxKZUA4fPlzM8goAAAAAHc/MXmluH11e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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Compare two structures by XRD\n", "from pyxtal.XRD import Similarity\n", "p1 = xrd1.get_profile()\n", "p2 = xrd2.get_profile()\n", "s = Similarity(p1, p2, x_range=[15, 90])\n", "print(s)\n", "s.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1.3 Chemical substitution via symmetry relation" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------Crystal from random------\n", "Dimension: 3\n", "Composition: C8\n", "Group: F d -3 m:2 (227)\n", " 4.5200, 4.5200, 4.5200, 90.0000, 90.0000, 90.0000, cubic\n", "Wyckoff sites:\n", "\t C @ [ 0.1250 0.1250 0.1250], WP [8a] Site [-433mm]\n", "\n", "------Crystal from subgroup------\n", "Dimension: 3\n", "Composition: Si3C3\n", "Group: R 3:H (146)\n", " 3.1961, 3.1961, 7.7923, 90.0000, 90.0000, 120.0000, hexagonal\n", "Wyckoff sites:\n", "\t C @ [ 0.0000 0.0000 0.1245], WP [3a] Site [3..]\n", "\tSi @ [ 0.0000 0.0000 0.8764], WP [3a] Site [3..]\n" ] }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#play substitution\n", "permutation = {\"C\":\"Si\"}\n", "SiC = C1.subgroup_once(eps=0.01, H=None, perms=permutation)\n", "print(C1)\n", "print(SiC)\n", "SiC.show(supercell=(2,2,2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1.4 Supergroup symmetry" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "------Crystal from Seed------\n", "Dimension: 3\n", "Composition: Si3O6\n", "Group: P 32 2 1 (154)\n", " 5.0278, 5.0278, 5.5189, 90.0000, 90.0000, 120.0000, hexagonal\n", "Wyckoff sites:\n", "\tSi @ [ 0.4773 0.0000 0.6667], WP [3a] Site [.2.]\n", "\t O @ [ 0.1607 0.7457 0.5373], WP [6c] Site [1]\n" ] }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# load the experimental alpha-quartz structure from the cif file\n", "\n", "lt_sio2 = pyxtal()\n", "lt_sio2.from_seed('lt_quartz.cif')\n", "print(lt_sio2)\n", "lt_sio2.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5 structures have been generated\n", "\n", "------Crystal from supergroup 0.847------\n", "Dimension: 3\n", "Composition: Si3O6\n", "Group: P 62 2 2 (180)\n", " 5.0278, 5.0278, 5.5189, 90.0000, 90.0000, 120.0000, hexagonal\n", "Wyckoff sites:\n", "\tSi @ [ 0.5000 0.0000 0.0000], WP [3c] Site [222.]\n", "\t O @ [ 0.5000 0.0000 0.7923], WP [6f] Site [2..]\n" ] }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Here we search for the high temperature phase\n", "\n", "ht_sio2, _ = lt_sio2.supergroup(G=180)\n", "print(len(ht_sio2), 'structures have been generated')\n", "print(ht_sio2[-1])\n", "ht_sio2[-1].show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1.5 Exporting the structure" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Atoms(symbols='C8', pbc=True, cell=[[4.520029655601712, 2.7677199248918747e-16, 2.7677199248918747e-16], [0.0, 4.520029655601712, 2.7677199248918747e-16], [0.0, 0.0, 4.520029655601712]])\n", "Full Formula (C8)\n", "Reduced Formula: C\n", "abc : 4.520030 4.520030 4.520030\n", "angles: 90.000000 90.000000 90.000000\n", "Sites (8)\n", " # SP a b c\n", "--- ---- ----- ----- -----\n", " 0 C 0.125 0.125 0.125\n", " 1 C 0.875 0.375 0.375\n", " 2 C 0.125 0.625 0.625\n", " 3 C 0.875 0.875 0.875\n", " 4 C 0.625 0.125 0.625\n", " 5 C 1.375 0.375 0.875\n", " 6 C 0.625 0.625 0.125\n", " 7 C 1.375 0.875 0.375\n" ] } ], "source": [ "#In general, you can export the structure in several ways\n", "\n", "# CIF/POSCAR file\n", "C1.to_file('1.cif')\n", "C1.to_ase().write('1.vasp', format='vasp', vasp5=True)\n", "\n", "# ASE's atoms object\n", "ase_struc = C1.to_ase()\n", "print(ase_struc)\n", "\n", "# Pymatgen object\n", "pmg_struc = C1.to_pymatgen()\n", "print(pmg_struc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1.6 Low dimensional systems" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# An example to generate 2D atomic crystal\n", "C3 = pyxtal()\n", "C3.from_random(2, 75, ['C'], [6], thickness=0.0)\n", "C3.show(scale=0.2)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "==============================\n", "*** Open Babel Error in LoadAllPlugins\n", " Unable to find OpenBabel plugins. Try setting the BABEL_LIBDIR environment variable.\n" ] }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# An example to generate 0D atomic cluster\n", "C4 = pyxtal()\n", "C4.from_random(0, 'Ih', ['C'], [60])\n", "C4.show(scale=0.2)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# to improve the quality, you can increase the minimum distance\n", "C4.from_random(0, 'Ih', ['C'], [60], t_factor=1.2)\n", "C4.show(scale=0.1, radius=0.01)" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.12" } }, "nbformat": 4, "nbformat_minor": 4 }