{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The SOAP descriptor, Gaussian Approximation Potentials (GAP) and machine-learning of force fields "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Adam Fekete, Matrina Stella, Henry Lambert, Alessandro De Vita, Gabor Csanyi (gc121@cam.ac.uk)\n",
    "\n",
    "## Introduction\n",
    "\n",
    "In this tutorial we will be using a Gaussian Approximation Potentials to analyse results of TB DFT calculations of Si surface. Along the way we will learn about different descriptors (2b, 3b, soap) to describe local atomic environment in order to predict energies and forces of Si surface. \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T23:25:37.431783Z",
     "start_time": "2019-09-25T23:25:34.912288Z"
    }
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "09f90ee183be43eea1a94adef101e02d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "_ColormakerRegistry()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "from quippy.potential import Potential\n",
    "from quippy.descriptors import Descriptor\n",
    "\n",
    "from ase import Atoms, units \n",
    "from ase.build import add_vacuum\n",
    "from ase.lattice.cubic import Diamond\n",
    "from ase.io import write\n",
    "\n",
    "from ase.constraints import FixAtoms\n",
    "\n",
    "from ase.md.velocitydistribution import MaxwellBoltzmannDistribution\n",
    "from ase.md.verlet import VelocityVerlet\n",
    "from ase.md.langevin import Langevin\n",
    "\n",
    "from ase.optimize.precon import PreconLBFGS, Exp\n",
    "\n",
    "from gap_si_surface import ViewStructure"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part I: MD, descriptors\n",
    "### Parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can define some parameters here for the MD calculations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T23:25:37.468121Z",
     "start_time": "2019-09-25T23:25:37.445712Z"
    }
   },
   "outputs": [],
   "source": [
    "T = 1000.0 # Temperature [Kelvin]\n",
    "timestep = 1.0 * units.fs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## System"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Defining configuration for Si slab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T23:25:37.582000Z",
     "start_time": "2019-09-25T23:25:37.480222Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of atoms: 32\n"
     ]
    }
   ],
   "source": [
    "def build_slab(size=(1,2,2), vacuum=10.):\n",
    "    # Build Si lattice.\n",
    "    # lattice = Diamond('Si', directions=([1, 0, 0], [0, 1, 0], [0, 0, 1]), latticeconstant=5.44, size=size)\n",
    "    lattice = Diamond('Si', latticeconstant=5.44, size=size)\n",
    "    atoms = Atoms(lattice)\n",
    "    \n",
    "\n",
    "    # Fixing the bottom layer     \n",
    "    bottom = atoms.positions[:,2].min()\n",
    "    fixed_mask = (abs(atoms.positions[:,2] - bottom) < 2.0)\n",
    "    atoms.set_constraint(FixAtoms(mask=fixed_mask))\n",
    "    \n",
    "    # build surface by adding space to z direction\n",
    "    add_vacuum(atoms, vacuum)\n",
    "    # atoms.center(vacuum=10.0, axis=2)\n",
    "    \n",
    "    return atoms\n",
    "\n",
    "\n",
    "atoms = build_slab()\n",
    "print('Number of atoms:', len(atoms))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's visualise the initial configuration:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T23:25:38.342587Z",
     "start_time": "2019-09-25T23:25:37.589076Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1ff31fb51368494b86726c484a59f136",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "NGLWidget()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "view = ViewStructure(atoms, repetition=(2,2,1))\n",
    "view"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MD dynamics with TB DFTB"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We use TB DFTB potential to calculate the potential energies and forces for the each timestep:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:17.925199Z",
     "start_time": "2019-09-25T22:42:14.803045Z"
    }
   },
   "outputs": [],
   "source": [
    "# attach tight binding calculator\n",
    "qm_pot = Potential('TB DFTB', param_filename='dftb-params.xml')\n",
    "atoms.set_calculator(qm_pot)\n",
    "\n",
    "# Thermalize atoms\n",
    "MaxwellBoltzmannDistribution(atoms, 2.0 * T * units.kB)\n",
    "# dynamics = VelocityVerlet(atoms, timestep)\n",
    "dynamics = Langevin(atoms, timestep, T * units.kB, 0.002)\n",
    "    \n",
    "#attach observer to dynamics to track quantity of interest (temperature)\n",
    "def print_status():    \n",
    "    print('Step = {}, time = {} [fs], T = {} [K]'.format(\n",
    "        dynamics.nsteps,\n",
    "        dynamics.nsteps * dynamics.dt / units.fs,\n",
    "        atoms.get_kinetic_energy() / (1.5 * units.kB * len(atoms))\n",
    "    ))\n",
    "\n",
    "def print_energy(a=atoms):  # store a reference to atoms in the definition.\n",
    "    \"\"\"Function to print the potential, kinetic and total energy.\"\"\"\n",
    "    epot = a.get_potential_energy() / len(a)\n",
    "    ekin = a.get_kinetic_energy() / len(a)\n",
    "    print('Energy per atom: Epot = %.3feV  Ekin = %.3feV (T=%3.0fK)  '\n",
    "          'Etot = %.3feV' % (epot, ekin, ekin / (1.5 * units.kB), epot + ekin))\n",
    "    \n",
    "dynamics.attach(print_status, interval=10)\n",
    "dynamics.attach(print_energy, interval=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's do the dynamics:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:49.846543Z",
     "start_time": "2019-09-25T22:42:17.929760Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step = 0, time = 0.0 [fs], T = 2126.2241342902184 [K]\n",
      "Energy per atom: Epot = -34.783eV  Ekin = 0.275eV (T=2126K)  Etot = -34.509eV\n",
      "Energy per atom: Epot = -34.782eV  Ekin = 0.263eV (T=2037K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.778eV  Ekin = 0.260eV (T=2010K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.772eV  Ekin = 0.253eV (T=1960K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.764eV  Ekin = 0.244eV (T=1891K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.754eV  Ekin = 0.234eV (T=1810K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.743eV  Ekin = 0.222eV (T=1721K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.731eV  Ekin = 0.211eV (T=1633K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.718eV  Ekin = 0.197eV (T=1522K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.704eV  Ekin = 0.183eV (T=1418K)  Etot = -34.521eV\n",
      "Step = 10, time = 10.0 [fs], T = 1307.506208654726 [K]\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.169eV (T=1308K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.155eV (T=1196K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.140eV (T=1083K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.648eV  Ekin = 0.127eV (T=983K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.635eV  Ekin = 0.114eV (T=883K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.623eV  Ekin = 0.102eV (T=789K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.612eV  Ekin = 0.092eV (T=710K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.603eV  Ekin = 0.082eV (T=636K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.595eV  Ekin = 0.074eV (T=574K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.588eV  Ekin = 0.068eV (T=522K)  Etot = -34.521eV\n",
      "Step = 20, time = 20.0 [fs], T = 482.4657605134864 [K]\n",
      "Energy per atom: Epot = -34.583eV  Ekin = 0.062eV (T=482K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.580eV  Ekin = 0.059eV (T=453K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.578eV  Ekin = 0.057eV (T=437K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.578eV  Ekin = 0.056eV (T=434K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.579eV  Ekin = 0.057eV (T=440K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.581eV  Ekin = 0.059eV (T=457K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.584eV  Ekin = 0.063eV (T=484K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.589eV  Ekin = 0.066eV (T=512K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.594eV  Ekin = 0.071eV (T=550K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.600eV  Ekin = 0.077eV (T=596K)  Etot = -34.523eV\n",
      "Step = 30, time = 30.0 [fs], T = 641.2190478661748 [K]\n",
      "Energy per atom: Epot = -34.606eV  Ekin = 0.083eV (T=641K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.613eV  Ekin = 0.090eV (T=696K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.620eV  Ekin = 0.097eV (T=753K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.627eV  Ekin = 0.104eV (T=807K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.635eV  Ekin = 0.111eV (T=863K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.642eV  Ekin = 0.119eV (T=919K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.649eV  Ekin = 0.126eV (T=972K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.656eV  Ekin = 0.132eV (T=1025K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.140eV (T=1079K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.145eV (T=1121K)  Etot = -34.524eV\n",
      "Step = 40, time = 40.0 [fs], T = 1161.738945086739 [K]\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.150eV (T=1162K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.155eV (T=1201K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.160eV (T=1240K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.164eV (T=1271K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.168eV (T=1297K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.694eV  Ekin = 0.172eV (T=1330K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.175eV (T=1353K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.177eV (T=1371K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.178eV (T=1375K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.699eV  Ekin = 0.178eV (T=1378K)  Etot = -34.521eV\n",
      "Step = 50, time = 50.00000000000001 [fs], T = 1373.781903076175 [K]\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.178eV (T=1374K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.176eV (T=1364K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.176eV (T=1360K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.175eV (T=1355K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.174eV (T=1344K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.171eV (T=1323K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.168eV (T=1302K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.165eV (T=1275K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.163eV (T=1257K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.161eV (T=1243K)  Etot = -34.522eV\n",
      "Step = 60, time = 60.0 [fs], T = 1234.8228544898413 [K]\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.160eV (T=1235K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.159eV (T=1229K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.159eV (T=1232K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.158eV (T=1219K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.157eV (T=1217K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.157eV (T=1217K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.157eV (T=1214K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.158eV (T=1219K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.160eV (T=1235K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.160eV (T=1241K)  Etot = -34.524eV\n",
      "Step = 70, time = 70.0 [fs], T = 1252.5792913035993 [K]\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.162eV (T=1253K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.163eV (T=1263K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.165eV (T=1273K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.166eV (T=1282K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.168eV (T=1300K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.170eV (T=1313K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.171eV (T=1320K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.171eV (T=1327K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.172eV (T=1334K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.694eV  Ekin = 0.174eV (T=1345K)  Etot = -34.520eV\n",
      "Step = 80, time = 80.0 [fs], T = 1354.1064927471066 [K]\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.175eV (T=1354K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.176eV (T=1359K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.697eV  Ekin = 0.177eV (T=1373K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.178eV (T=1380K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.180eV (T=1390K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.701eV  Ekin = 0.182eV (T=1405K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.703eV  Ekin = 0.184eV (T=1420K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.187eV (T=1446K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.708eV  Ekin = 0.190eV (T=1466K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.711eV  Ekin = 0.193eV (T=1490K)  Etot = -34.518eV\n",
      "Step = 90, time = 90.0 [fs], T = 1516.9294941034934 [K]\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.196eV (T=1517K)  Etot = -34.517eV\n",
      "Energy per atom: Epot = -34.716eV  Ekin = 0.199eV (T=1536K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.719eV  Ekin = 0.201eV (T=1555K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.203eV (T=1569K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.205eV (T=1587K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.724eV  Ekin = 0.206eV (T=1596K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.725eV  Ekin = 0.207eV (T=1598K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.726eV  Ekin = 0.207eV (T=1604K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.726eV  Ekin = 0.207eV (T=1600K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.725eV  Ekin = 0.207eV (T=1599K)  Etot = -34.518eV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step = 100, time = 100.00000000000001 [fs], T = 1584.1973113365673 [K]\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.205eV (T=1584K)  Etot = -34.518eV\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dynamics.run(steps=100)\n",
    "\n",
    "# for _ in range(150):\n",
    "#     dynamics.run(steps=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.108701Z",
     "start_time": "2019-09-25T22:42:49.877189Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d7623a4d69d04fd9b5803ae8dfc3b21a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "NGLWidget()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "view = ViewStructure(atoms)\n",
    "view"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using descriptors\n",
    "\n",
    "In this section we will intorduce some descriptors which could be useful for describing local atomic enviroments\n",
    "\n",
    "You can find more details in the [descriptor tutorial](./quippy-descriptor-tutorial.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pairwise\n",
    "\n",
    "Here we use a simple pair distance between Silicon atoms, with a cutoff of 4.0 Angstrom. There are several descriptors that can do this, one is distance_2b, which takes a cutoff argument. Alternatively, the distance_Nb descriptor could also do this, with order=2. This is more general, order=3 is a triangle-like three-body descriptor of the three sides of a triangle of 3 atoms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.147192Z",
     "start_time": "2019-09-25T22:42:50.113989Z"
    }
   },
   "outputs": [],
   "source": [
    "desc = Descriptor(\"distance_Nb order=2 cutoff=4.0 n_Z=1 Zs={14}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This descriptor is very simple: it is scalar (dimension 1), and hence only has a two (but equivalent) permutations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.175572Z",
     "start_time": "2019-09-25T22:42:50.163656Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.n_perm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.228379Z",
     "start_time": "2019-09-25T22:42:50.196907Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.cutoff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.257858Z",
     "start_time": "2019-09-25T22:42:50.238776Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1],\n",
       "       [1]], dtype=int32)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.permutations() # array of permutation arrays\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Many descriptors rely on the neighbour connectivity, so we need to call calc_connect, after setting the Atoms cutoff:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.278714Z",
     "start_time": "2019-09-25T22:42:50.264308Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.cutoff()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now calculate how many instances of this descriptor are found in an Atoms (or ASEAtoms) object:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.314858Z",
     "start_time": "2019-09-25T22:42:50.290906Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "195"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.count(atoms)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This also works transparently for iterables (such as lists), returning a list of the counts.\n",
    "\n",
    "We can also calculate the actual descriptor values – in this case, the list of pairwise distances:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:50.541321Z",
     "start_time": "2019-09-25T22:42:50.319855Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'covariance_cutoff': array([1.00000000e+00, 2.14658119e-01, 2.14658119e-01, 3.19795982e-01,\n",
       "        6.76831904e-01, 2.14658119e-01, 2.14658119e-01, 1.00000000e+00,\n",
       "        1.92216892e-01, 1.00000000e+00, 2.14658119e-01, 2.14658119e-01,\n",
       "        1.00000000e+00, 5.49473573e-01, 1.02669964e-01, 1.00000000e+00,\n",
       "        2.14658119e-01, 2.14658119e-01, 4.28565697e-03, 1.00000000e+00,\n",
       "        5.32303157e-01, 5.65893474e-02, 3.17080099e-02, 2.14658119e-01,\n",
       "        2.14658119e-01, 7.67705096e-02, 3.88763394e-01, 1.00000000e+00,\n",
       "        2.05886791e-01, 5.65694781e-02, 1.00000000e+00, 2.14658119e-01,\n",
       "        2.14658119e-01, 1.00000000e+00, 3.82420324e-01, 1.00000000e+00,\n",
       "        1.54120671e-01, 4.61381664e-01, 1.00000000e+00, 2.79930187e-01,\n",
       "        3.74608882e-02, 1.00000000e+00, 5.43735112e-01, 2.22676798e-01,\n",
       "        1.00000000e+00, 1.94241936e-03, 9.23567078e-02, 2.15915262e-01,\n",
       "        3.36721166e-01, 1.00000000e+00, 1.21132692e-01, 1.00000000e+00,\n",
       "        3.58304355e-07, 1.00000000e+00, 2.24123678e-01, 2.77061373e-01,\n",
       "        2.80646672e-01, 1.98700480e-01, 7.47843261e-03, 3.55383746e-01,\n",
       "        4.82663392e-01, 4.63363201e-01, 1.00000000e+00, 7.31119629e-01,\n",
       "        8.12121535e-01, 1.29910737e-04, 1.00000000e+00, 5.64990697e-01,\n",
       "        1.00000000e+00, 2.94266750e-01, 1.00000000e+00, 2.14658119e-01,\n",
       "        2.14658119e-01, 2.41870408e-01, 1.93580589e-01, 3.00766038e-01,\n",
       "        1.00000000e+00, 2.14658119e-01, 2.14658119e-01, 1.00000000e+00,\n",
       "        2.45323210e-01, 1.35810322e-01, 1.00000000e+00, 4.99366690e-01,\n",
       "        1.00000000e+00, 4.07558015e-01, 2.48598177e-01, 2.40033659e-01,\n",
       "        5.30349415e-02, 1.00000000e+00, 1.21403216e-03, 5.31963558e-01,\n",
       "        1.00000000e+00, 4.37361512e-01, 4.86924235e-01, 6.35407188e-04,\n",
       "        1.95029239e-01, 2.01308916e-01, 2.54279797e-01, 1.00000000e+00,\n",
       "        2.13940396e-02, 7.81557677e-01, 3.52627916e-01, 1.00000000e+00,\n",
       "        5.13536101e-01, 3.56120536e-03, 1.00000000e+00, 3.41233014e-01,\n",
       "        1.00000000e+00, 9.33811941e-02, 4.52377357e-01, 1.73666341e-01,\n",
       "        3.69737937e-01, 1.00000000e+00, 7.95747496e-01, 1.00000000e+00,\n",
       "        8.94305809e-01, 1.00000000e+00, 8.04260023e-01, 8.00779320e-02,\n",
       "        8.54949876e-04, 9.38301918e-01, 1.00000000e+00, 1.00000000e+00,\n",
       "        4.36305075e-01, 1.00000000e+00, 5.94272437e-01, 9.55462366e-01,\n",
       "        1.00000000e+00, 4.98640668e-02, 1.33190168e-01, 1.00000000e+00,\n",
       "        5.08484433e-02, 3.89366516e-01, 3.49320447e-01, 8.44153921e-03,\n",
       "        3.14779079e-02, 6.41430079e-01, 1.00000000e+00, 8.59094150e-02,\n",
       "        1.00000000e+00, 1.00000000e+00, 9.91037595e-01, 1.00000000e+00,\n",
       "        1.00000000e+00, 1.00000000e+00, 8.45588201e-04, 1.00000000e+00,\n",
       "        4.74170888e-01, 5.87505224e-01, 1.00000000e+00, 1.00000000e+00,\n",
       "        1.69943827e-01, 3.45605498e-03, 1.00000000e+00, 4.54327107e-02,\n",
       "        2.86809177e-01, 5.51354402e-02, 1.00000000e+00, 9.76859456e-01,\n",
       "        1.69917382e-01, 1.00000000e+00, 1.00000000e+00, 1.90527971e-01,\n",
       "        1.00000000e+00, 1.11961385e-01, 3.22921131e-01, 2.01862861e-01,\n",
       "        9.90932063e-01, 7.02045644e-04, 1.00000000e+00, 7.00340799e-01,\n",
       "        9.03175475e-01, 1.00000000e+00, 1.00000000e+00, 3.64596170e-01,\n",
       "        1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 5.65314580e-02,\n",
       "        2.78732909e-03, 8.27119934e-01, 9.07878534e-02, 1.00000000e+00,\n",
       "        1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 4.67164136e-01,\n",
       "        5.46809634e-01, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
       "        3.36143932e-01, 1.00000000e+00, 1.00000000e+00]),\n",
       " 'data': array([[2.3555891 ],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [3.80868127],\n",
       "        [3.69246785],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [2.3555891 ],\n",
       "        [3.85553632],\n",
       "        [2.3555891 ],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [2.22217899],\n",
       "        [3.73422626],\n",
       "        [3.89617545],\n",
       "        [2.49277209],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [3.97914695],\n",
       "        [2.3555891 ],\n",
       "        [3.73971042],\n",
       "        [3.92354581],\n",
       "        [3.94301548],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [3.91063498],\n",
       "        [3.7857065 ],\n",
       "        [2.36400224],\n",
       "        [3.85008681],\n",
       "        [3.9235595 ],\n",
       "        [2.3555891 ],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [2.40113644],\n",
       "        [3.7877806 ],\n",
       "        [2.53888377],\n",
       "        [3.8715819 ],\n",
       "        [3.76230485],\n",
       "        [2.33638577],\n",
       "        [3.82253553],\n",
       "        [3.93800043],\n",
       "        [2.60488918],\n",
       "        [3.73606087],\n",
       "        [3.84357323],\n",
       "        [2.26074713],\n",
       "        [3.98596662],\n",
       "        [3.9017103 ],\n",
       "        [3.8461741 ],\n",
       "        [3.80294437],\n",
       "        [2.47055579],\n",
       "        [3.88684692],\n",
       "        [2.62747264],\n",
       "        [3.99980946],\n",
       "        [2.36771171],\n",
       "        [3.84302037],\n",
       "        [3.82355411],\n",
       "        [3.82228164],\n",
       "        [3.85293408],\n",
       "        [3.97243879],\n",
       "        [3.79670004],\n",
       "        [3.75551952],\n",
       "        [3.76167232],\n",
       "        [2.31773498],\n",
       "        [3.67352306],\n",
       "        [3.64270374],\n",
       "        [3.99637188],\n",
       "        [2.40507651],\n",
       "        [3.72925412],\n",
       "        [2.31755331],\n",
       "        [3.81749164],\n",
       "        [2.3555891 ],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [3.83633794],\n",
       "        [3.85498626],\n",
       "        [3.81522899],\n",
       "        [2.3555891 ],\n",
       "        [3.84666089],\n",
       "        [3.84666089],\n",
       "        [2.30939588],\n",
       "        [3.83505773],\n",
       "        [3.87986306],\n",
       "        [2.32869864],\n",
       "        [3.75020159],\n",
       "        [2.3555891 ],\n",
       "        [3.77959547],\n",
       "        [3.83384906],\n",
       "        [3.83702149],\n",
       "        [3.92603149],\n",
       "        [2.36423329],\n",
       "        [3.98890689],\n",
       "        [3.73981874],\n",
       "        [2.27209347],\n",
       "        [3.76999098],\n",
       "        [3.75416262],\n",
       "        [3.99197542],\n",
       "        [3.85440354],\n",
       "        [3.85189622],\n",
       "        [3.83176472],\n",
       "        [2.39676208],\n",
       "        [3.95327413],\n",
       "        [3.65480133],\n",
       "        [3.79761721],\n",
       "        [2.22444622],\n",
       "        [3.7456908 ],\n",
       "        [3.9809933 ],\n",
       "        [2.49686031],\n",
       "        [3.80142738],\n",
       "        [2.19958857],\n",
       "        [3.90114853],\n",
       "        [3.76518177],\n",
       "        [3.86317503],\n",
       "        [3.79194768],\n",
       "        [2.25435087],\n",
       "        [3.64926897],\n",
       "        [2.25125141],\n",
       "        [3.60540013],\n",
       "        [2.36655307],\n",
       "        [3.64588175],\n",
       "        [3.90867685],\n",
       "        [3.99069144],\n",
       "        [3.57990177],\n",
       "        [2.49540074],\n",
       "        [2.33260675],\n",
       "        [3.77032997],\n",
       "        [2.57787592],\n",
       "        [3.71981145],\n",
       "        [3.56768484],\n",
       "        [2.45117234],\n",
       "        [3.92831618],\n",
       "        [3.8810853 ],\n",
       "        [2.34442646],\n",
       "        [3.92759974],\n",
       "        [3.78550961],\n",
       "        [3.79872015],\n",
       "        [3.97071307],\n",
       "        [3.94322485],\n",
       "        [3.70435838],\n",
       "        [2.38005406],\n",
       "        [3.90531209],\n",
       "        [3.33083172],\n",
       "        [2.59003818],\n",
       "        [3.53017959],\n",
       "        [2.29630022],\n",
       "        [2.74641565],\n",
       "        [2.19697139],\n",
       "        [3.99074256],\n",
       "        [2.79562658],\n",
       "        [3.75822532],\n",
       "        [3.72200204],\n",
       "        [2.42958642],\n",
       "        [2.24231016],\n",
       "        [3.86474567],\n",
       "        [3.98127633],\n",
       "        [2.16858341],\n",
       "        [3.93162786],\n",
       "        [3.82010597],\n",
       "        [3.92455341],\n",
       "        [3.28211822],\n",
       "        [3.54861007],\n",
       "        [3.86475688],\n",
       "        [2.37536444],\n",
       "        [2.17973943],\n",
       "        [3.85621962],\n",
       "        [2.50414849],\n",
       "        [3.89139667],\n",
       "        [3.8076162 ],\n",
       "        [3.85167646],\n",
       "        [3.53035729],\n",
       "        [3.99156503],\n",
       "        [2.23884873],\n",
       "        [3.68438668],\n",
       "        [3.60071965],\n",
       "        [2.22916798],\n",
       "        [3.21656615],\n",
       "        [3.79364537],\n",
       "        [2.65405253],\n",
       "        [2.70398075],\n",
       "        [2.36119845],\n",
       "        [3.9235857 ],\n",
       "        [3.98318696],\n",
       "        [3.63649434],\n",
       "        [3.90257603],\n",
       "        [2.24663903],\n",
       "        [3.1391255 ],\n",
       "        [3.44058309],\n",
       "        [2.17928047],\n",
       "        [3.76045951],\n",
       "        [3.73507818],\n",
       "        [2.88693146],\n",
       "        [2.27590978],\n",
       "        [3.39213771],\n",
       "        [3.80313881],\n",
       "        [3.14584918],\n",
       "        [2.44039581]]),\n",
       " 'has_data': array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = desc.calc(atoms)\n",
    "# for k,v in d.items():\n",
    "#     print(k)\n",
    "#     print(type(v))\n",
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that the first array is called cutoff, and it supplies the value of a cutoff function, implicit in all descriptors, which takes the descriptor value to zero as the atoms approach the cutoff, i.e. in this case as the distance between the two atoms approaches the cutoff. It is more complicated for three-body and higher-body descriptors, but the final result is always a descriptor which changes smoothly with atomic positions.\n",
    "\n",
    "Here is a histogram of the resulting descriptor array, i.e. of the interatomic distances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:51.120942Z",
     "start_time": "2019-09-25T22:42:50.556799Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(d['data'], bins=40)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate size of descriptor data:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:51.251122Z",
     "start_time": "2019-09-25T22:42:51.125693Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(195, 390)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.sizes(atoms)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:51.282787Z",
     "start_time": "2019-09-25T22:42:51.255319Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_desc=195 n_cross=390\n"
     ]
    }
   ],
   "source": [
    "n_desc, n_cross = desc.sizes(atoms)\n",
    "print(\"n_desc=%d n_cross=%d\" % (n_desc, n_cross))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:51.673427Z",
     "start_time": "2019-09-25T22:42:51.291495Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x11ce3d2e8>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x1152 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(d['data'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SOAP descriptor\n",
    "\n",
    "We will describe the environment using the SOAP descriptor. The SOAP descriptor of an atomic environment is based on a spherical harmonic expansion of the neighbour density, and truncating this expansion at some maximum numer of radial (n_max) and angular (l_max) indices gives rise to some parameters. We also need to give the cutoff within which we consider the neighbour environment.\n",
    "\n",
    "Writing the descriptor vector as $p_{ss'nn'l}$, where $s$ and $s'$ are indices that run over the different atomic species in the atom's environment, $n$ and $n'$ are radial and $l$ is an angular index."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:51.992618Z",
     "start_time": "2019-09-25T22:42:51.764995Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "desc = Descriptor(\"soap cutoff=4 l_max=3 n_max=4 normalize=T atom_sigma=0.5 n_Z=1 Z={14} \")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are now only 32 descriptors, because SOAP produces one for each atom in the structure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:52.137338Z",
     "start_time": "2019-09-25T22:42:52.042193Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32, 422)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "desc.sizes(atoms)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But each descriptor now is a long vector, because it encodes the entire environment of the atom up to the cutoff. The length of the vector depends on l_max and n_max and also on the number of atom types."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:52.209042Z",
     "start_time": "2019-09-25T22:42:52.141414Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'covariance_cutoff': array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),\n",
       " 'data': array([[8.72484873e-01, 1.34159734e-04, 1.36705926e-04, ...,\n",
       "         2.59809734e-08, 1.14112318e-08, 0.00000000e+00],\n",
       "        [7.59438258e-01, 2.64988180e-05, 2.06399928e-05, ...,\n",
       "         1.47470244e-08, 3.98299197e-09, 0.00000000e+00],\n",
       "        [8.98417344e-01, 1.38097131e-04, 1.40770407e-04, ...,\n",
       "         1.20256730e-08, 2.19962174e-09, 0.00000000e+00],\n",
       "        ...,\n",
       "        [5.38846271e-01, 2.19806777e-05, 2.34697590e-04, ...,\n",
       "         1.34797058e-07, 1.20892097e-07, 0.00000000e+00],\n",
       "        [7.09890531e-01, 7.00599810e-05, 1.33968447e-04, ...,\n",
       "         4.63712579e-08, 2.52251585e-08, 0.00000000e+00],\n",
       "        [7.21058218e-01, 8.57141183e-05, 5.79089330e-05, ...,\n",
       "         8.82576223e-08, 3.07146036e-08, 0.00000000e+00]]),\n",
       " 'has_data': array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1])}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = desc.calc(atoms)\n",
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can visualise the values of the descriptor to have an idea of how vector looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:42:52.559195Z",
     "start_time": "2019-09-25T22:42:52.226764Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x11d05a7b8>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 369x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(d['data'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part II: GAP: fitting, comparing different descriptors \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Database\n",
    "\n",
    "Let's run the MD to generate configurations for the training:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:02.171962Z",
     "start_time": "2019-09-25T22:42:52.575928Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy per atom: Epot = -34.670eV  Ekin = 0.142eV (T=1100K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.143eV (T=1106K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.146eV (T=1127K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.147eV (T=1140K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.149eV (T=1152K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.679eV  Ekin = 0.151eV (T=1169K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.153eV (T=1181K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.154eV (T=1188K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.155eV (T=1202K)  Etot = -34.529eV\n",
      "Step = 610, time = 610.0 [fs], T = 1213.4776009435961 [K]\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.157eV (T=1213K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.159eV (T=1228K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.161eV (T=1242K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.162eV (T=1250K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.161eV (T=1248K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.161eV (T=1245K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.161eV (T=1249K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.163eV (T=1258K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.162eV (T=1254K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.160eV (T=1241K)  Etot = -34.528eV\n",
      "Step = 620, time = 620.0 [fs], T = 1234.2040826926918 [K]\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.160eV (T=1234K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.159eV (T=1228K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.157eV (T=1212K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.156eV (T=1204K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.152eV (T=1179K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.151eV (T=1166K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.148eV (T=1145K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.145eV (T=1121K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.143eV (T=1103K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.140eV (T=1085K)  Etot = -34.527eV\n",
      "Step = 630, time = 630.0 [fs], T = 1069.8250497127774 [K]\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.138eV (T=1070K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.136eV (T=1054K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.135eV (T=1043K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.133eV (T=1025K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.659eV  Ekin = 0.131eV (T=1014K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.659eV  Ekin = 0.130eV (T=1009K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.659eV  Ekin = 0.130eV (T=1009K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.131eV (T=1015K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.132eV (T=1024K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.134eV (T=1040K)  Etot = -34.528eV\n",
      "Step = 640, time = 640.0 [fs], T = 1061.3536445382422 [K]\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.137eV (T=1061K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.140eV (T=1081K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.143eV (T=1108K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.146eV (T=1132K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.150eV (T=1160K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.155eV (T=1199K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.158eV (T=1225K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.162eV (T=1254K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.164eV (T=1273K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.168eV (T=1296K)  Etot = -34.525eV\n",
      "Step = 650, time = 650.0 [fs], T = 1316.4452722651693 [K]\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.170eV (T=1316K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.697eV  Ekin = 0.172eV (T=1328K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.173eV (T=1339K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.699eV  Ekin = 0.173eV (T=1337K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.173eV (T=1342K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.174eV (T=1343K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.174eV (T=1347K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.699eV  Ekin = 0.174eV (T=1344K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.173eV (T=1339K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.697eV  Ekin = 0.171eV (T=1327K)  Etot = -34.525eV\n",
      "Step = 660, time = 660.0 [fs], T = 1309.8201527012045 [K]\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.169eV (T=1310K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.166eV (T=1286K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.165eV (T=1274K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.162eV (T=1254K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.160eV (T=1237K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.159eV (T=1227K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.156eV (T=1206K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.154eV (T=1190K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.152eV (T=1175K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.151eV (T=1170K)  Etot = -34.525eV\n",
      "Step = 670, time = 670.0 [fs], T = 1161.851603014357 [K]\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.150eV (T=1162K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.148eV (T=1149K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.147eV (T=1137K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.147eV (T=1137K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.145eV (T=1123K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.144eV (T=1116K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.143eV (T=1106K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.143eV (T=1104K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.143eV (T=1106K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.143eV (T=1109K)  Etot = -34.525eV\n",
      "Step = 680, time = 680.0 [fs], T = 1116.049981841541 [K]\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.144eV (T=1116K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.145eV (T=1120K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.146eV (T=1129K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.147eV (T=1138K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.148eV (T=1144K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.147eV (T=1137K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.146eV (T=1133K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.147eV (T=1134K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.146eV (T=1133K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.147eV (T=1136K)  Etot = -34.524eV\n",
      "Step = 690, time = 689.9999999999999 [fs], T = 1138.1637640732908 [K]\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.147eV (T=1138K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.146eV (T=1129K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.145eV (T=1120K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.145eV (T=1120K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.144eV (T=1112K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.142eV (T=1102K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.140eV (T=1084K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.140eV (T=1084K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.139eV (T=1072K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.137eV (T=1062K)  Etot = -34.526eV\n",
      "Step = 700, time = 700.0000000000001 [fs], T = 1054.1133918643613 [K]\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.136eV (T=1054K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.137eV (T=1057K)  Etot = -34.525eV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy per atom: Epot = -34.662eV  Ekin = 0.135eV (T=1044K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.135eV (T=1044K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.135eV (T=1047K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.136eV (T=1051K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.136eV (T=1056K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.137eV (T=1062K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.138eV (T=1065K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.139eV (T=1075K)  Etot = -34.525eV\n",
      "Step = 710, time = 710.0 [fs], T = 1087.5729168770392 [K]\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.141eV (T=1088K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.143eV (T=1106K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.144eV (T=1116K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.146eV (T=1130K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.148eV (T=1148K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.151eV (T=1167K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.153eV (T=1181K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.155eV (T=1203K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.158eV (T=1225K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.161eV (T=1244K)  Etot = -34.521eV\n",
      "Step = 720, time = 720.0 [fs], T = 1260.4486838568973 [K]\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.163eV (T=1260K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.164eV (T=1271K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.167eV (T=1289K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.167eV (T=1292K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.168eV (T=1302K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.170eV (T=1318K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.171eV (T=1321K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.171eV (T=1319K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.170eV (T=1313K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.170eV (T=1313K)  Etot = -34.521eV\n",
      "Step = 730, time = 730.0 [fs], T = 1306.1395297984811 [K]\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.169eV (T=1306K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.168eV (T=1297K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.166eV (T=1285K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.164eV (T=1270K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.162eV (T=1255K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.160eV (T=1241K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.158eV (T=1220K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.154eV (T=1194K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.151eV (T=1169K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.149eV (T=1155K)  Etot = -34.521eV\n",
      "Step = 740, time = 740.0 [fs], T = 1130.0228639362892 [K]\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.146eV (T=1130K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.144eV (T=1113K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.142eV (T=1102K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.141eV (T=1089K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.140eV (T=1083K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.140eV (T=1084K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.140eV (T=1079K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.139eV (T=1073K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.138eV (T=1069K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.139eV (T=1076K)  Etot = -34.525eV\n",
      "Step = 750, time = 750.0 [fs], T = 1083.9614905678948 [K]\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.140eV (T=1084K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.141eV (T=1092K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.143eV (T=1105K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.145eV (T=1118K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.147eV (T=1140K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.149eV (T=1149K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.150eV (T=1158K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.150eV (T=1162K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.679eV  Ekin = 0.151eV (T=1172K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.152eV (T=1174K)  Etot = -34.528eV\n",
      "Step = 760, time = 760.0 [fs], T = 1182.2959304995202 [K]\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.153eV (T=1182K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.154eV (T=1188K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.152eV (T=1180K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.152eV (T=1175K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.151eV (T=1168K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.150eV (T=1162K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.679eV  Ekin = 0.148eV (T=1147K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.147eV (T=1134K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.144eV (T=1117K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.142eV (T=1100K)  Etot = -34.532eV\n",
      "Step = 770, time = 770.0 [fs], T = 1089.9711537191097 [K]\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.141eV (T=1090K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.140eV (T=1080K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.138eV (T=1069K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.136eV (T=1054K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.134eV (T=1035K)  Etot = -34.532eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.134eV (T=1038K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.134eV (T=1033K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.133eV (T=1030K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.134eV (T=1040K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.135eV (T=1046K)  Etot = -34.529eV\n",
      "Step = 780, time = 780.0 [fs], T = 1058.2368819251544 [K]\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.137eV (T=1058K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.139eV (T=1072K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.141eV (T=1091K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.143eV (T=1109K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.145eV (T=1125K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.148eV (T=1147K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.151eV (T=1169K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.152eV (T=1178K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.153eV (T=1186K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.156eV (T=1205K)  Etot = -34.530eV\n",
      "Step = 790, time = 789.9999999999999 [fs], T = 1221.4561259539792 [K]\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.158eV (T=1221K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.159eV (T=1227K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.160eV (T=1236K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.161eV (T=1245K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.162eV (T=1250K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.161eV (T=1249K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.162eV (T=1251K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.161eV (T=1248K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.161eV (T=1244K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.160eV (T=1240K)  Etot = -34.526eV\n",
      "Step = 800, time = 800.0000000000001 [fs], T = 1224.3944703568234 [K]\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.158eV (T=1224K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.156eV (T=1204K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.153eV (T=1185K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.679eV  Ekin = 0.152eV (T=1174K)  Etot = -34.527eV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy per atom: Epot = -34.676eV  Ekin = 0.149eV (T=1154K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.147eV (T=1136K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.143eV (T=1108K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.141eV (T=1089K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.139eV (T=1074K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.136eV (T=1056K)  Etot = -34.528eV\n",
      "Step = 810, time = 810.0 [fs], T = 1048.562618524431 [K]\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.136eV (T=1049K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.133eV (T=1029K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.659eV  Ekin = 0.131eV (T=1014K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.130eV (T=1003K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.129eV (T=999K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.129eV (T=1001K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.130eV (T=1009K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.659eV  Ekin = 0.131eV (T=1013K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.132eV (T=1024K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.134eV (T=1038K)  Etot = -34.527eV\n",
      "Step = 820, time = 820.0 [fs], T = 1047.2420327306986 [K]\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.135eV (T=1047K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.137eV (T=1062K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.140eV (T=1081K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.142eV (T=1101K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.144eV (T=1118K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.147eV (T=1136K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.150eV (T=1162K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.153eV (T=1187K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.155eV (T=1199K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.159eV (T=1233K)  Etot = -34.527eV\n",
      "Step = 830, time = 830.0 [fs], T = 1261.8494846560873 [K]\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.163eV (T=1262K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.166eV (T=1286K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.171eV (T=1319K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.699eV  Ekin = 0.174eV (T=1345K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.702eV  Ekin = 0.176eV (T=1362K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.179eV (T=1386K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.707eV  Ekin = 0.182eV (T=1409K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.185eV (T=1428K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.712eV  Ekin = 0.187eV (T=1446K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.189eV (T=1464K)  Etot = -34.524eV\n",
      "Step = 840, time = 840.0 [fs], T = 1473.1796543543905 [K]\n",
      "Energy per atom: Epot = -34.714eV  Ekin = 0.190eV (T=1473K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.714eV  Ekin = 0.191eV (T=1477K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.714eV  Ekin = 0.192eV (T=1484K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.191eV (T=1476K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.712eV  Ekin = 0.191eV (T=1475K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.188eV (T=1454K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.707eV  Ekin = 0.185eV (T=1429K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.704eV  Ekin = 0.181eV (T=1401K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.701eV  Ekin = 0.177eV (T=1371K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.174eV (T=1345K)  Etot = -34.524eV\n",
      "Step = 850, time = 850.0 [fs], T = 1319.0981610208323 [K]\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.171eV (T=1319K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.167eV (T=1295K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.164eV (T=1271K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.162eV (T=1254K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.160eV (T=1236K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.158eV (T=1222K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.157eV (T=1211K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.156eV (T=1207K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.156eV (T=1208K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.158eV (T=1219K)  Etot = -34.524eV\n",
      "Step = 860, time = 860.0 [fs], T = 1230.7107298901024 [K]\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.159eV (T=1231K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.160eV (T=1237K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.162eV (T=1252K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.165eV (T=1279K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.694eV  Ekin = 0.168eV (T=1303K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.697eV  Ekin = 0.171eV (T=1325K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.175eV (T=1352K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.704eV  Ekin = 0.178eV (T=1375K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.707eV  Ekin = 0.181eV (T=1400K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.184eV (T=1426K)  Etot = -34.526eV\n",
      "Step = 870, time = 870.0 [fs], T = 1445.5688460227605 [K]\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.187eV (T=1446K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.189eV (T=1459K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.718eV  Ekin = 0.191eV (T=1480K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.720eV  Ekin = 0.193eV (T=1493K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.195eV (T=1506K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.722eV  Ekin = 0.196eV (T=1516K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.197eV (T=1524K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.724eV  Ekin = 0.199eV (T=1538K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.724eV  Ekin = 0.201eV (T=1553K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.201eV (T=1554K)  Etot = -34.522eV\n",
      "Step = 880, time = 879.9999999999999 [fs], T = 1550.4222940578104 [K]\n",
      "Energy per atom: Epot = -34.722eV  Ekin = 0.200eV (T=1550K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.198eV (T=1533K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.719eV  Ekin = 0.197eV (T=1522K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.717eV  Ekin = 0.195eV (T=1507K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.193eV (T=1495K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.712eV  Ekin = 0.191eV (T=1476K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.709eV  Ekin = 0.188eV (T=1455K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.706eV  Ekin = 0.184eV (T=1423K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.703eV  Ekin = 0.182eV (T=1405K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.699eV  Ekin = 0.178eV (T=1376K)  Etot = -34.521eV\n",
      "Step = 890, time = 890.0000000000001 [fs], T = 1349.3007898319372 [K]\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.174eV (T=1349K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.171eV (T=1321K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.166eV (T=1283K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.162eV (T=1252K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.158eV (T=1224K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.154eV (T=1195K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.152eV (T=1176K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.149eV (T=1155K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.147eV (T=1134K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.145eV (T=1125K)  Etot = -34.523eV\n",
      "Step = 900, time = 900.0 [fs], T = 1112.7854874238203 [K]\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.144eV (T=1113K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.143eV (T=1108K)  Etot = -34.522eV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy per atom: Epot = -34.664eV  Ekin = 0.143eV (T=1105K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.142eV (T=1098K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.141eV (T=1090K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.141eV (T=1092K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.142eV (T=1100K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.143eV (T=1110K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.145eV (T=1122K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.147eV (T=1134K)  Etot = -34.523eV\n",
      "Step = 910, time = 910.0 [fs], T = 1154.638311116254 [K]\n",
      "Energy per atom: Epot = -34.672eV  Ekin = 0.149eV (T=1155K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.152eV (T=1174K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.154eV (T=1194K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.157eV (T=1217K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.161eV (T=1243K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.163eV (T=1263K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.167eV (T=1290K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.169eV (T=1310K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.695eV  Ekin = 0.172eV (T=1332K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.175eV (T=1354K)  Etot = -34.523eV\n",
      "Step = 920, time = 920.0 [fs], T = 1375.175238346479 [K]\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.178eV (T=1375K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.702eV  Ekin = 0.179eV (T=1388K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.704eV  Ekin = 0.182eV (T=1405K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.706eV  Ekin = 0.183eV (T=1419K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.708eV  Ekin = 0.186eV (T=1438K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.709eV  Ekin = 0.187eV (T=1447K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.188eV (T=1452K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.188eV (T=1456K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.711eV  Ekin = 0.189eV (T=1460K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.189eV (T=1460K)  Etot = -34.522eV\n",
      "Step = 930, time = 930.0 [fs], T = 1458.7143296739027 [K]\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.189eV (T=1459K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.709eV  Ekin = 0.189eV (T=1460K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.708eV  Ekin = 0.187eV (T=1444K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.707eV  Ekin = 0.186eV (T=1441K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.186eV (T=1437K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.703eV  Ekin = 0.184eV (T=1424K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.701eV  Ekin = 0.182eV (T=1405K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.179eV (T=1381K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.175eV (T=1351K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.693eV  Ekin = 0.173eV (T=1337K)  Etot = -34.520eV\n",
      "Step = 940, time = 940.0 [fs], T = 1318.911914675727 [K]\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.170eV (T=1319K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.167eV (T=1290K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.163eV (T=1262K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.159eV (T=1233K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.157eV (T=1212K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.153eV (T=1187K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.150eV (T=1164K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.148eV (T=1142K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.145eV (T=1124K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.143eV (T=1107K)  Etot = -34.521eV\n",
      "Step = 950, time = 950.0 [fs], T = 1099.0873560001837 [K]\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.142eV (T=1099K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.141eV (T=1088K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.140eV (T=1080K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.140eV (T=1082K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.141eV (T=1087K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.141eV (T=1090K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.141eV (T=1089K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.141eV (T=1090K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.142eV (T=1102K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.144eV (T=1113K)  Etot = -34.519eV\n",
      "Step = 960, time = 960.0 [fs], T = 1121.7438534640573 [K]\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.145eV (T=1122K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.665eV  Ekin = 0.147eV (T=1136K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.147eV (T=1136K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.147eV (T=1135K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.148eV (T=1144K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.147eV (T=1140K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.148eV (T=1145K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.148eV (T=1144K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.148eV (T=1145K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.148eV (T=1144K)  Etot = -34.521eV\n",
      "Step = 970, time = 969.9999999999999 [fs], T = 1150.8046259890853 [K]\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.149eV (T=1151K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.147eV (T=1135K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.146eV (T=1127K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.145eV (T=1122K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.144eV (T=1115K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.144eV (T=1115K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.144eV (T=1118K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.143eV (T=1108K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.143eV (T=1107K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.144eV (T=1110K)  Etot = -34.522eV\n",
      "Step = 980, time = 980.0000000000001 [fs], T = 1116.9613964890314 [K]\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.144eV (T=1117K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.145eV (T=1124K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.667eV  Ekin = 0.146eV (T=1132K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.148eV (T=1143K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.150eV (T=1162K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.152eV (T=1176K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.154eV (T=1194K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.156eV (T=1209K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.159eV (T=1228K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.162eV (T=1253K)  Etot = -34.518eV\n",
      "Step = 990, time = 990.0 [fs], T = 1261.7042483844475 [K]\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.163eV (T=1262K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.165eV (T=1279K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.168eV (T=1296K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.688eV  Ekin = 0.170eV (T=1316K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.172eV (T=1332K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.173eV (T=1338K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.173eV (T=1342K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.174eV (T=1343K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.173eV (T=1338K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.690eV  Ekin = 0.172eV (T=1330K)  Etot = -34.518eV\n",
      "Step = 1000, time = 1000.0 [fs], T = 1312.3702881693948 [K]\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.170eV (T=1312K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.168eV (T=1298K)  Etot = -34.519eV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Energy per atom: Epot = -34.684eV  Ekin = 0.165eV (T=1280K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.681eV  Ekin = 0.163eV (T=1263K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.160eV (T=1237K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.675eV  Ekin = 0.157eV (T=1214K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.154eV (T=1190K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.668eV  Ekin = 0.151eV (T=1166K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.147eV (T=1139K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.145eV (T=1119K)  Etot = -34.519eV\n",
      "Step = 1010, time = 1010.0 [fs], T = 1107.3682349275302 [K]\n",
      "Energy per atom: Epot = -34.661eV  Ekin = 0.143eV (T=1107K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.142eV (T=1097K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.142eV (T=1099K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.143eV (T=1103K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.143eV (T=1108K)  Etot = -34.518eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.145eV (T=1118K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.147eV (T=1134K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.150eV (T=1162K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.673eV  Ekin = 0.154eV (T=1193K)  Etot = -34.519eV\n",
      "Energy per atom: Epot = -34.677eV  Ekin = 0.158eV (T=1225K)  Etot = -34.519eV\n",
      "Step = 1020, time = 1020.0 [fs], T = 1254.456856444442 [K]\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.162eV (T=1254K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.166eV (T=1287K)  Etot = -34.520eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.170eV (T=1314K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.175eV (T=1357K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.701eV  Ekin = 0.180eV (T=1389K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.184eV (T=1425K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.709eV  Ekin = 0.189eV (T=1461K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.191eV (T=1476K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.716eV  Ekin = 0.193eV (T=1496K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.719eV  Ekin = 0.196eV (T=1515K)  Etot = -34.523eV\n",
      "Step = 1030, time = 1030.0 [fs], T = 1533.4115403699773 [K]\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.198eV (T=1533K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.722eV  Ekin = 0.199eV (T=1543K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.200eV (T=1548K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.724eV  Ekin = 0.201eV (T=1557K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.202eV (T=1559K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.723eV  Ekin = 0.201eV (T=1559K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.200eV (T=1544K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.720eV  Ekin = 0.199eV (T=1540K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.718eV  Ekin = 0.196eV (T=1519K)  Etot = -34.521eV\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.194eV (T=1499K)  Etot = -34.522eV\n",
      "Step = 1040, time = 1040.0 [fs], T = 1475.3818337384587 [K]\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.191eV (T=1475K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.187eV (T=1450K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.708eV  Ekin = 0.185eV (T=1434K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.183eV (T=1416K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.703eV  Ekin = 0.180eV (T=1391K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.177eV (T=1369K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.176eV (T=1361K)  Etot = -34.522eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.173eV (T=1339K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.694eV  Ekin = 0.171eV (T=1321K)  Etot = -34.523eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.169eV (T=1306K)  Etot = -34.523eV\n",
      "Step = 1050, time = 1050.0 [fs], T = 1289.440068746159 [K]\n",
      "Energy per atom: Epot = -34.691eV  Ekin = 0.167eV (T=1289K)  Etot = -34.524eV\n",
      "Energy per atom: Epot = -34.689eV  Ekin = 0.164eV (T=1271K)  Etot = -34.525eV\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.162eV (T=1252K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.686eV  Ekin = 0.160eV (T=1236K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.684eV  Ekin = 0.158eV (T=1223K)  Etot = -34.526eV\n",
      "Energy per atom: Epot = -34.682eV  Ekin = 0.156eV (T=1203K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.680eV  Ekin = 0.153eV (T=1182K)  Etot = -34.527eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.151eV (T=1166K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.676eV  Ekin = 0.148eV (T=1147K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.146eV (T=1133K)  Etot = -34.527eV\n",
      "Step = 1060, time = 1060.0 [fs], T = 1106.3208287365883 [K]\n",
      "Energy per atom: Epot = -34.671eV  Ekin = 0.143eV (T=1106K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.669eV  Ekin = 0.141eV (T=1091K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.138eV (T=1069K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.664eV  Ekin = 0.135eV (T=1045K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.662eV  Ekin = 0.132eV (T=1025K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.130eV (T=1010K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.130eV (T=1002K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.656eV  Ekin = 0.127eV (T=985K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.656eV  Ekin = 0.127eV (T=985K)  Etot = -34.528eV\n",
      "Energy per atom: Epot = -34.655eV  Ekin = 0.126eV (T=976K)  Etot = -34.529eV\n",
      "Step = 1070, time = 1070.0 [fs], T = 980.9725165651028 [K]\n",
      "Energy per atom: Epot = -34.656eV  Ekin = 0.127eV (T=981K)  Etot = -34.529eV\n",
      "Energy per atom: Epot = -34.657eV  Ekin = 0.127eV (T=981K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.658eV  Ekin = 0.129eV (T=994K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.660eV  Ekin = 0.130eV (T=1005K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.663eV  Ekin = 0.132eV (T=1023K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.666eV  Ekin = 0.136eV (T=1048K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.670eV  Ekin = 0.140eV (T=1081K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.674eV  Ekin = 0.143eV (T=1110K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.678eV  Ekin = 0.147eV (T=1139K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.683eV  Ekin = 0.152eV (T=1176K)  Etot = -34.531eV\n",
      "Step = 1080, time = 1080.0 [fs], T = 1210.131324601977 [K]\n",
      "Energy per atom: Epot = -34.687eV  Ekin = 0.156eV (T=1210K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.692eV  Ekin = 0.160eV (T=1241K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.165eV (T=1273K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.700eV  Ekin = 0.169eV (T=1311K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.704eV  Ekin = 0.173eV (T=1342K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.707eV  Ekin = 0.177eV (T=1369K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.180eV (T=1393K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.713eV  Ekin = 0.182eV (T=1411K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.185eV (T=1428K)  Etot = -34.530eV\n",
      "Energy per atom: Epot = -34.716eV  Ekin = 0.186eV (T=1437K)  Etot = -34.531eV\n",
      "Step = 1090, time = 1090.0 [fs], T = 1439.9055594814956 [K]\n",
      "Energy per atom: Epot = -34.717eV  Ekin = 0.186eV (T=1440K)  Etot = -34.531eV\n",
      "Energy per atom: Epot = -34.717eV  Ekin = 0.185eV (T=1433K)  Etot = -34.532eV\n",
      "Energy per atom: Epot = -34.717eV  Ekin = 0.185eV (T=1430K)  Etot = -34.532eV\n",
      "Energy per atom: Epot = -34.717eV  Ekin = 0.183eV (T=1416K)  Etot = -34.534eV\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.182eV (T=1410K)  Etot = -34.533eV\n",
      "Energy per atom: Epot = -34.714eV  Ekin = 0.181eV (T=1398K)  Etot = -34.533eV\n",
      "Energy per atom: Epot = -34.712eV  Ekin = 0.178eV (T=1378K)  Etot = -34.534eV\n",
      "Energy per atom: Epot = -34.710eV  Ekin = 0.176eV (T=1361K)  Etot = -34.534eV\n",
      "Energy per atom: Epot = -34.708eV  Ekin = 0.173eV (T=1338K)  Etot = -34.535eV\n",
      "Energy per atom: Epot = -34.705eV  Ekin = 0.170eV (T=1318K)  Etot = -34.535eV\n",
      "Step = 1100, time = 1100.0 [fs], T = 1294.479828341841 [K]\n",
      "Energy per atom: Epot = -34.703eV  Ekin = 0.167eV (T=1294K)  Etot = -34.535eV\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db = []\n",
    "def collect_data():\n",
    "    db.append(atoms.copy())\n",
    "\n",
    "dynamics.attach(collect_data, interval=10)\n",
    "dynamics.run(steps=500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:02.210923Z",
     "start_time": "2019-09-25T22:45:02.174957Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The size of the database:\n",
    "len(db)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Save the results into a file for using it as an input for the fitting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:02.275871Z",
     "start_time": "2019-09-25T22:45:02.219112Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "write('/tmp/atoms_db.xyz', db)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fitting the 2-body potential"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We need to calculate the atomic energy and use it as an offset during the fitting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:02.320206Z",
     "start_time": "2019-09-25T22:45:02.278437Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-29.716948405885105"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "isolated_atom = Atoms(\"Si\", positions=[[0,0,0]])\n",
    "isolated_atom.set_calculator(qm_pot)\n",
    "E0 = isolated_atom.get_potential_energy()\n",
    "E0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are going to use teach_sparse tool to build the GAP potential. For a detailed description of the available options you can run the following command."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:03.351826Z",
     "start_time": "2019-09-25T22:45:02.332058Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "libAtoms::Hello World: 07/10/2019   17:16:56\r\n",
      "libAtoms::Hello World: git version  git@github.com:/libAtoms/QUIP,d204dca49-dirty\r\n",
      "libAtoms::Hello World: QUIP_ARCH    darwin_x86_64_gfortran_openmp\r\n",
      "libAtoms::Hello World: compiled on  Aug  7 2019 at 14:13:45\r\n",
      "libAtoms::Hello World: OpenMP parallelisation with 4 threads\r\n",
      "WARNING: libAtoms::Hello World: environment variable OMP_STACKSIZE not set explicitly. The default value - system and compiler dependent - may be too small for some applications.\r\n",
      "libAtoms::Hello World: Random Seed = 62216297\r\n",
      "libAtoms::Hello World: global verbosity = 0\r\n",
      "\r\n",
      "Calls to system_timer will do nothing by default\r\n",
      "\r\n",
      "at_file type=STRING scalar current_value=//MANDATORY//\r\n",
      "XYZ file with fitting configurations\r\n",
      "\r\n",
      "gap type=STRING scalar current_value=//MANDATORY//\r\n",
      "Initialisation string for GAPs\r\n",
      "\r\n",
      "e0 type=STRING scalar current_value=0.0\r\n",
      "Atomic energy value to be subtracted from energies before fitting (and added\r\n",
      "back on after prediction).  Specifiy a single number (used for all species) or\r\n",
      "by species: {Ti:-150.0:O:-320}. energy = core + GAP +\r\n",
      "e0\r\n",
      "\r\n",
      "local_property0 type=STRING scalar current_value=0.0\r\n",
      "Local property value to be subtracted from the local property before fitting\r\n",
      "(and added back on after prediction).  Specifiy a single number (used for all\r\n",
      "species) or by species: {H:20.0:Cl:35.0}.\r\n",
      "\r\n",
      "e0_offset type=REAL scalar current_value=0.0\r\n",
      "Offset of baseline. If zero, the offset is the average atomic energy of the inpu-\r\n",
      "t data or the e0 specified manually.\r\n",
      "\r\n",
      "e0_method type=STRING scalar current_value=isolated\r\n",
      "Method to determine e0, if not explicitly specified. Possible options: isolated\r\n",
      "(default, each atom present in the XYZ needs to have an isolated representative,\r\n",
      "with a valid energy), average (e0 is the average of all total energies across\r\n",
      "the XYZ)\r\n",
      "\r\n",
      "default_sigma type=REAL dim=4 current_value=//MANDATORY//\r\n",
      "error in [energies forces virials hessians]\r\n",
      "\r\n",
      "sparse_jitter type=REAL scalar current_value=1.0e-10\r\n",
      "intrisic error of atomic/bond energy, used to regularise the sparse covariance\r\n",
      "matrix\r\n",
      "\r\n",
      "hessian_delta type=REAL scalar current_value=1.0e-2\r\n",
      "Delta to use in numerical differentiation when obtaining second derivative for\r\n",
      "the Hessian covariance\r\n",
      "\r\n",
      "core_param_file type=STRING scalar current_value=quip_params.xml\r\n",
      "QUIP XML file for a potential to subtract from data (and added back after predic-\r\n",
      "tion)\r\n",
      "\r\n",
      "core_ip_args type=STRING scalar current_value=\r\n",
      " QUIP init string for a potential to subtract from data (and added back after\r\n",
      "prediction)\r\n",
      "\r\n",
      "energy_parameter_name type=STRING scalar current_value=energy\r\n",
      "Name of energy property in the at_file that describes the data\r\n",
      "\r\n",
      "local_property_parameter_name type=STRING scalar current_value=local_property\r\n",
      "Name of local_property in the at_file that describes the data\r\n",
      "\r\n",
      "force_parameter_name type=STRING scalar current_value=force\r\n",
      "Name of force property in the at_file that describes the data\r\n",
      "\r\n",
      "virial_parameter_name type=STRING scalar current_value=virial\r\n",
      "Name of virial property in the at_file that describes the data\r\n",
      "\r\n",
      "hessian_parameter_name type=STRING scalar current_value=hessian\r\n",
      "Name of hessian property in the at_file that describes the data\r\n",
      "\r\n",
      "config_type_parameter_name type=STRING scalar current_value=config_type\r\n",
      "Identifier of property determining the type of input data in the at_file\r\n",
      "\r\n",
      "sigma_parameter_name type=STRING scalar current_value=sigma\r\n",
      "sigma parameters (error hyper) for a given configuration in the database. Overri-\r\n",
      "des the command line sigmas. In the XYZ, it must be prepended by energy_, force_-\r\n",
      ", virial_ or hessian_\r\n",
      "\r\n",
      "config_type_sigma type=STRING scalar current_value=\r\n",
      "What sigma values to choose for each type of data. Format: {type:energy:force:vi-\r\n",
      "rial:hessian}\r\n",
      "\r\n",
      "sigma_per_atom type=LOGICAL scalar current_value=T\r\n",
      "Interpretation of the energy and virial sigmas specified in >>default_sigma<<\r\n",
      "and >>config_type_sigma<<. If >>T<<, they are interpreted as per-atom errors,\r\n",
      "and the variance will be scaled according to the number of atoms in the configur-\r\n",
      "ation. If >>F<< they are treated as absolute errors and no scaling is performed.\r\n",
      "NOTE: sigmas specified on a per-configuration basis (see >>sigma_parameter_name<-\r\n",
      "<) are always absolute.\r\n",
      "\r\n",
      "do_copy_at_file type=LOGICAL scalar current_value=T\r\n",
      "Do copy the at_file into the GAP XML file (should be set to False for NetCDF\r\n",
      "input).\r\n",
      "\r\n",
      "sparse_separate_file type=LOGICAL scalar current_value=T\r\n",
      "Save sparse coordinates data in separate file\r\n",
      "\r\n",
      "sparse_use_actual_gpcov type=LOGICAL scalar current_value=F\r\n",
      "Use actual GP covariance for sparsification methods\r\n",
      "\r\n",
      "gp_file type=STRING scalar current_value=gp_new.xml\r\n",
      "output XML file\r\n",
      "\r\n",
      "verbosity type=STRING scalar current_value=NORMAL\r\n",
      "Verbosity control. Options: NORMAL, VERBOSE, NERD, ANALYSIS.\r\n",
      "\r\n",
      "rnd_seed type=INTEGER scalar current_value=-1\r\n",
      "Random seed.\r\n",
      "\r\n",
      "do_ip_timing type=LOGICAL scalar current_value=F\r\n",
      "To enable or not timing of the interatomic potential.\r\n",
      "\r\n",
      "template_file type=STRING scalar current_value=template.xyz\r\n",
      "Template XYZ file for initialising object\r\n",
      "\r\n",
      "sparsify_only_no_fit type=LOGICAL scalar current_value=F\r\n",
      "If true, sparsification is done, but no fitting. print the sparse index by addin-\r\n",
      "g print_sparse_index=file.dat to the descriptor string.\r\n",
      "\r\n",
      "missing mandatory parameter at_file\r\n",
      "missing mandatory parameter gap\r\n",
      "missing mandatory parameter default_sigma\r\n",
      "gap_fit\r\n",
      "SYSTEM ABORT: Exit: Mandatory argument(s) missing...   \r\n"
     ]
    }
   ],
   "source": [
    "!gap_fit --help"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we have to do actual fitting by running the following command:\n",
    "\n",
    "Relevant parameters:\n",
    "- covariance_type: Type of covariance function to use. Available: ARD_SE, DOT_PRODUCT, BOND_REAL_SP-\n",
    "ACE, PP (piecewise polynomial)\n",
    "- theta_uniform: Set the width of Gaussians for the ARD_SE and PP kernel, same in each dimension\n",
    "- n_sparse: Number of sparse points to use in the sparsification of the Gaussian process\n",
    "- delta: Set the standard deviation of the Gaussian process. Typically this would be set to the standard deviation (i.e. root mean square) of the function that is approximated with the Gaussian process.\n",
    "- default_sigma: error in [energies, forces, virials, hessians]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:03.370718Z",
     "start_time": "2019-09-25T22:45:03.357136Z"
    },
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# !gap_fit at_file=dummy default_sigma={0 0 0 0} gap={distance_Nb delta=0.0 covariance_type=ARD_SE --help}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:04.580150Z",
     "start_time": "2019-09-25T22:45:03.377300Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "libAtoms::Hello World: 07/10/2019   17:16:59\n",
      "libAtoms::Hello World: git version  git@github.com:/libAtoms/QUIP,d204dca49-dirty\n",
      "libAtoms::Hello World: QUIP_ARCH    darwin_x86_64_gfortran_openmp\n",
      "libAtoms::Hello World: compiled on  Aug  7 2019 at 14:13:45\n",
      "libAtoms::Hello World: OpenMP parallelisation with 4 threads\n",
      "WARNING: libAtoms::Hello World: environment variable OMP_STACKSIZE not set explicitly. The default value - system and compiler dependent - may be too small for some applications.\n",
      "libAtoms::Hello World: Random Seed = 62219567\n",
      "libAtoms::Hello World: global verbosity = 0\n",
      "\n",
      "Calls to system_timer will do nothing by default\n",
      "\n",
      "\n",
      "================================ Input parameters ==============================\n",
      "\n",
      "at_file = /tmp/atoms_db.xyz\n",
      "gap = \"distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0\"\n",
      "e0 = -29.716948405885105\n",
      "local_property0 = 0.0\n",
      "e0_offset = 0.0\n",
      "e0_method = isolated\n",
      "default_sigma = \"0.01 0.5 0.0 0.0\"\n",
      "sparse_jitter = 1.0e-10\n",
      "hessian_delta = 1.0e-2\n",
      "core_param_file = quip_params.xml\n",
      "core_ip_args =\n",
      "energy_parameter_name = energy\n",
      "local_property_parameter_name = local_property\n",
      "force_parameter_name = force\n",
      "virial_parameter_name = virial\n",
      "hessian_parameter_name = hessian\n",
      "config_type_parameter_name = config_type\n",
      "sigma_parameter_name = sigma\n",
      "config_type_sigma =\n",
      "sigma_per_atom = T\n",
      "do_copy_at_file = F\n",
      "sparse_separate_file = F\n",
      "sparse_use_actual_gpcov = F\n",
      "gp_file = /tmp/gap_2b.xml\n",
      "verbosity = NORMAL\n",
      "rnd_seed = -1\n",
      "do_ip_timing = F\n",
      "template_file = template.xyz\n",
      "sparsify_only_no_fit = F\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "============== Gaussian Approximation Potentials - Database fitting ============\n",
      "\n",
      "\n",
      "Initial parsing of command line arguments finished.\n",
      "Found 1 GAPs.\n",
      "Descriptors have been parsed\n",
      "XYZ file read\n",
      "Unchanged GAP: {distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0}\n",
      "Multispecies support added where requested\n",
      "\n",
      "===================== Report on number of descriptors found ====================\n",
      "\n",
      "---------------------------------------------------------------------\n",
      "Descriptor: distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0\n",
      "Number of descriptors:                        35312\n",
      "Number of partial derivatives of descriptors: 0\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "========== Report on number of target properties found in training XYZ: ========\n",
      "\n",
      "Number of target energies (property name: energy) found: 100\n",
      "Number of target local_properties (property name: local_property) found: 0\n",
      "Number of target forces (property name: force) found: 0\n",
      "Number of target virials (property name: virial) found: 0\n",
      "Number of target Hessian eigenvalues (property name: hessian) found: 0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "\n",
      "===== Report on per-configuration/per-atom sigma (error parameter) settings ====\n",
      "\n",
      "Number of per-configuration setting of energy_sigma found:     0\n",
      "Number of per-configuration setting of force_sigma found:      0\n",
      "Number of per-configuration setting of virial_sigma found:     0\n",
      "Number of per-configuration setting of hessian_sigma found:    0\n",
      "Number of per-atom setting of force_atom_sigma found:          0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "Cartesian coordinates transformed to descriptors\n",
      "Started sparse covariance matrix calculation of coordinate 1\n",
      "\n",
      "Finished sparse covariance matrix calculation of coordinate 1\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1_sparse  done in 1.9402960000000000 cpu secs, .60122609138488770 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1         done in 1.9403350000000001 cpu secs, .60126590728759766 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_LinearAlgebra       done in .12049999999996786E-002 cpu secs, .34060478210449219E-002 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_FunctionValues      done in .19999999998354667E-005 cpu secs, .19073486328125000E-005 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse                     done in 1.9416529999999999 cpu secs, .60478305816650391 wall clock secs.\n",
      "TIMER: GP sparsify                                        done in 1.9490180000000001 cpu secs, .61529493331909180 wall clock secs.\n",
      "\n",
      "libAtoms::Finalise: 07/10/2019   17:17:00\n",
      "libAtoms::Finalise: Bye-Bye!\n"
     ]
    }
   ],
   "source": [
    "!gap_fit at_file=/tmp/atoms_db.xyz \\\n",
    "gap={distance_Nb order=2 \\\n",
    "                 cutoff=5.0 \\\n",
    "                 covariance_type=ARD_SE \\\n",
    "                 theta_uniform=1.0 \\\n",
    "                 n_sparse=15 \\\n",
    "                 delta=1.0} \\\n",
    "e0=-29.716948405885105 \\\n",
    "default_sigma={0.01 0.5 0.0 0.0} \\\n",
    "do_copy_at_file=F sparse_separate_file=F \\\n",
    "gp_file=/tmp/gap_2b.xml"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can load and use the fitted potential:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:04.656987Z",
     "start_time": "2019-09-25T22:45:04.588090Z"
    }
   },
   "outputs": [],
   "source": [
    "gap2b = Potential(param_filename='/tmp/gap_2b.xml')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can calculate the potential energies using the new potential and compare them with the TB DFTB ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:05.177506Z",
     "start_time": "2019-09-25T22:45:04.662859Z"
    }
   },
   "outputs": [],
   "source": [
    "qm_energies = [at.info['energy'] for at in db]\n",
    "gap2b_energies = []\n",
    "for dba in db:\n",
    "    a = dba.copy()\n",
    "    a.set_calculator(gap2b)\n",
    "    gap2b_energies.append(a.get_potential_energy())\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:05.520489Z",
     "start_time": "2019-09-25T22:45:05.193607Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "Natoms = len(db[0])\n",
    "plt.scatter(np.array(qm_energies)/Natoms, np.array(gap2b_energies)/Natoms)\n",
    "plt.plot([E0-5.0, E0-5.0+0.05], [E0-5.0, E0-5.0+0.05], \"k-\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also calculate the RMSE (in meV) as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:05.536356Z",
     "start_time": "2019-09-25T22:45:05.523695Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.035992967464800296"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(sum((np.array(qm_energies)/Natoms - np.array(gap2b_energies)/Natoms)**2)/len(gap2b_energies))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can generate dimers for visualising the pairwise potential: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:05.597970Z",
     "start_time": "2019-09-25T22:45:05.546577Z"
    }
   },
   "outputs": [],
   "source": [
    "dimers = [Atoms(\"2Si\", positions=[[0,0,0], [x, 0,0]]) for x in np.linspace(1.6,6,100)] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:06.323384Z",
     "start_time": "2019-09-25T22:45:05.606577Z"
    }
   },
   "outputs": [],
   "source": [
    "dimer_curve = []\n",
    "for dim in dimers:\n",
    "    dim.set_calculator(gap2b)\n",
    "    dimer_curve.append(dim.get_potential_energy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:06.525582Z",
     "start_time": "2019-09-25T22:45:06.328890Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot([dim.positions[1,0] for dim in dimers], np.array(dimer_curve)/2.0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fitting the 2 and 3-body potential"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:12.737049Z",
     "start_time": "2019-09-25T22:45:06.528195Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "libAtoms::Hello World: 07/10/2019   17:17:09\n",
      "libAtoms::Hello World: git version  git@github.com:/libAtoms/QUIP,d204dca49-dirty\n",
      "libAtoms::Hello World: QUIP_ARCH    darwin_x86_64_gfortran_openmp\n",
      "libAtoms::Hello World: compiled on  Aug  7 2019 at 14:13:45\n",
      "libAtoms::Hello World: OpenMP parallelisation with 4 threads\n",
      "WARNING: libAtoms::Hello World: environment variable OMP_STACKSIZE not set explicitly. The default value - system and compiler dependent - may be too small for some applications.\n",
      "libAtoms::Hello World: Random Seed = 62229764\n",
      "libAtoms::Hello World: global verbosity = 0\n",
      "\n",
      "Calls to system_timer will do nothing by default\n",
      "\n",
      "\n",
      "================================ Input parameters ==============================\n",
      "\n",
      "at_file = /tmp/atoms_db.xyz\n",
      "gap = \"distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0: distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004\"\n",
      "e0 = -29.716948405885105\n",
      "local_property0 = 0.0\n",
      "e0_offset = 0.0\n",
      "e0_method = isolated\n",
      "default_sigma = \"0.005 0.5 0.0 0.0\"\n",
      "sparse_jitter = 1.0e-10\n",
      "hessian_delta = 1.0e-2\n",
      "core_param_file = quip_params.xml\n",
      "core_ip_args =\n",
      "energy_parameter_name = energy\n",
      "local_property_parameter_name = local_property\n",
      "force_parameter_name = force\n",
      "virial_parameter_name = virial\n",
      "hessian_parameter_name = hessian\n",
      "config_type_parameter_name = config_type\n",
      "sigma_parameter_name = sigma\n",
      "config_type_sigma =\n",
      "sigma_per_atom = T\n",
      "do_copy_at_file = F\n",
      "sparse_separate_file = F\n",
      "sparse_use_actual_gpcov = F\n",
      "gp_file = /tmp/gap_3b.xml\n",
      "verbosity = NORMAL\n",
      "rnd_seed = -1\n",
      "do_ip_timing = F\n",
      "template_file = template.xyz\n",
      "sparsify_only_no_fit = F\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "============== Gaussian Approximation Potentials - Database fitting ============\n",
      "\n",
      "\n",
      "Initial parsing of command line arguments finished.\n",
      "Found 2 GAPs.\n",
      "Descriptors have been parsed\n",
      "XYZ file read\n",
      "Unchanged GAP: {distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0}\n",
      "Unchanged GAP: { distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004}\n",
      "Multispecies support added where requested\n",
      "\n",
      "===================== Report on number of descriptors found ====================\n",
      "\n",
      "---------------------------------------------------------------------\n",
      "Descriptor: distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0\n",
      "Number of descriptors:                        35312\n",
      "Number of partial derivatives of descriptors: 0\n",
      "---------------------------------------------------------------------\n",
      "Descriptor:  distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004\n",
      "Number of descriptors:                        150164\n",
      "Number of partial derivatives of descriptors: 0\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "========== Report on number of target properties found in training XYZ: ========\n",
      "\n",
      "Number of target energies (property name: energy) found: 100\n",
      "Number of target local_properties (property name: local_property) found: 0\n",
      "Number of target forces (property name: force) found: 0\n",
      "Number of target virials (property name: virial) found: 0\n",
      "Number of target Hessian eigenvalues (property name: hessian) found: 0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "\n",
      "===== Report on per-configuration/per-atom sigma (error parameter) settings ====\n",
      "\n",
      "Number of per-configuration setting of energy_sigma found:     0\n",
      "Number of per-configuration setting of force_sigma found:      0\n",
      "Number of per-configuration setting of virial_sigma found:     0\n",
      "Number of per-configuration setting of hessian_sigma found:    0\n",
      "Number of per-atom setting of force_atom_sigma found:          0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "Cartesian coordinates transformed to descriptors\n",
      "Started sparse covariance matrix calculation of coordinate 1\n",
      "\n",
      "Finished sparse covariance matrix calculation of coordinate 1\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1_sparse  done in 1.9191969999999996 cpu secs, .61768078804016113 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1         done in 1.9192260000000001 cpu secs, .61770915985107422 wall clock secs.\n",
      "Started sparse covariance matrix calculation of coordinate 2\n",
      "\n",
      "Finished sparse covariance matrix calculation of coordinate 2\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate2_sparse  done in 53.109310000000001 cpu secs, 15.321249008178711 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate2         done in 53.109337000000004 cpu secs, 15.321274995803833 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_LinearAlgebra       done in .18150000000005662E-002 cpu secs, .74031352996826172E-002 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_FunctionValues      done in .40000000041118255E-005 cpu secs, .28610229492187500E-005 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse                     done in 55.030578999999996 cpu secs, 15.946585178375244 wall clock secs.\n",
      "TIMER: GP sparsify                                        done in 55.042788999999999 cpu secs, 15.960463762283325 wall clock secs.\n",
      "\n",
      "libAtoms::Finalise: 07/10/2019   17:17:29\n",
      "libAtoms::Finalise: Bye-Bye!\n"
     ]
    }
   ],
   "source": [
    "!gap_fit at_file=/tmp/atoms_db.xyz \\\n",
    "gap={distance_Nb order=2 \\\n",
    "                 cutoff=5.0 \\\n",
    "                 covariance_type=ARD_SE \\\n",
    "                 theta_uniform=1.0 \\\n",
    "                 n_sparse=15 \\\n",
    "                 delta=1.0:\\\n",
    "     distance_Nb order=3 \\\n",
    "                 cutoff=4.0 \\\n",
    "                 covariance_type=ARD_SE \\\n",
    "                 theta_uniform=1.0 \\\n",
    "                 n_sparse=50 \\\n",
    "                 delta=0.004} \\\n",
    "e0=-29.716948405885105 \\\n",
    "default_sigma={0.005 0.5 0.0 0.0} \\\n",
    "do_copy_at_file=F sparse_separate_file=F \\\n",
    "gp_file=/tmp/gap_3b.xml"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can load and use the fitted potential:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:16.351886Z",
     "start_time": "2019-09-25T22:45:12.746747Z"
    }
   },
   "outputs": [],
   "source": [
    "gap3b = Potential(param_filename='/tmp/gap_3b.xml')\n",
    "gap3b_energies = []\n",
    "for at in db:\n",
    "    a = at.copy()\n",
    "    a.set_calculator(gap3b)\n",
    "    gap3b_energies.append(a.get_potential_energy())\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also calculate the RMSE (in meV) as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:16.372123Z",
     "start_time": "2019-09-25T22:45:16.355463Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.010408552706046549"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(sum((np.array(qm_energies)/Natoms - np.array(gap3b_energies)/Natoms)**2)/len(gap3b_energies))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:16.693223Z",
     "start_time": "2019-09-25T22:45:16.399472Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(np.array(qm_energies)/Natoms, np.array(gap3b_energies)/Natoms)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can generate dimers for visualising the pairwise potential: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:17.307236Z",
     "start_time": "2019-09-25T22:45:16.697565Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dimer_curve = []\n",
    "for dim in dimers:\n",
    "    dim.set_calculator(gap3b)\n",
    "    dimer_curve.append(dim.get_potential_energy())\n",
    "    \n",
    "plt.plot([dim.positions[1,0] for dim in dimers], np.array(dimer_curve)/2.0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fitting the 2 and 3-body  and SOAP potential"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will describe that environment using the SOAP descriptor and compare them using the SOAP kernel. Note right away that the quantum mechanically computed energies are not fully determined by the near-environment of atoms, so this is an early indication that we will be making use of the \"noise\" interpretation of the $\\lambda$ regularization parameter: we don't expect (and don't want) our fitted function to precisely go through each datapoint.\n",
    "\n",
    "The SOAP descriptor of an atomic environment is based on a spherical harmonic expansion of the neighbour density, and truncating this expansion at some maximum numer of radial (n_max) and angular (l_max) indices gives rise to some parameters. We also need to give the cutoff within which we consider the neighbour environment.\n",
    "\n",
    "Writing the descriptor vector as $p_{ss'nn'l}$, where $s$ and $s'$ are indices that run over the different atomic species in the atom's environment, $n$ and $n'$ are radial and $l$ is an angular index, the kernel between two atomic environments is\n",
    "\n",
    "$$\n",
    "K(p,p') = \\delta^2 \\left| \\sum_{ss'nn'l} p_{ss'nn'l} p'_{ss'nn'l}\\right|^\\zeta \\equiv \\delta^2 \\left| {\\bf p} \\cdot {\\bf p'}\\right|^\\zeta\n",
    "$$\n",
    "\n",
    "The factor of $\\delta^2$ allows the setting of the scale of fitted function, relative to the error specification $\\lambda$. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:24.495956Z",
     "start_time": "2019-09-25T22:45:17.312801Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "libAtoms::Hello World: 07/10/2019   17:17:32\n",
      "libAtoms::Hello World: git version  git@github.com:/libAtoms/QUIP,d204dca49-dirty\n",
      "libAtoms::Hello World: QUIP_ARCH    darwin_x86_64_gfortran_openmp\n",
      "libAtoms::Hello World: compiled on  Aug  7 2019 at 14:13:45\n",
      "libAtoms::Hello World: OpenMP parallelisation with 4 threads\n",
      "WARNING: libAtoms::Hello World: environment variable OMP_STACKSIZE not set explicitly. The default value - system and compiler dependent - may be too small for some applications.\n",
      "libAtoms::Hello World: Random Seed = 62252544\n",
      "libAtoms::Hello World: global verbosity = 0\n",
      "\n",
      "Calls to system_timer will do nothing by default\n",
      "\n",
      "\n",
      "================================ Input parameters ==============================\n",
      "\n",
      "at_file = /tmp/atoms_db.xyz\n",
      "gap = \"distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0: distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004: soap cutoff=4.0 covariance_type=dot_product zeta=2 delta=0.016 atom_sigma=0.7 l_max=6 n_max=6 n_sparse=200 sparse_method=cur_points\"\n",
      "e0 = -29.716948405885105\n",
      "local_property0 = 0.0\n",
      "e0_offset = 0.0\n",
      "e0_method = isolated\n",
      "default_sigma = \"0.001 0.5 0.0 0.0\"\n",
      "sparse_jitter = 1.0e-10\n",
      "hessian_delta = 1.0e-2\n",
      "core_param_file = quip_params.xml\n",
      "core_ip_args =\n",
      "energy_parameter_name = energy\n",
      "local_property_parameter_name = local_property\n",
      "force_parameter_name = force\n",
      "virial_parameter_name = virial\n",
      "hessian_parameter_name = hessian\n",
      "config_type_parameter_name = config_type\n",
      "sigma_parameter_name = sigma\n",
      "config_type_sigma =\n",
      "sigma_per_atom = T\n",
      "do_copy_at_file = F\n",
      "sparse_separate_file = F\n",
      "sparse_use_actual_gpcov = F\n",
      "gp_file = /tmp/gap_2b3bsoap.xml\n",
      "verbosity = NORMAL\n",
      "rnd_seed = -1\n",
      "do_ip_timing = F\n",
      "template_file = template.xyz\n",
      "sparsify_only_no_fit = F\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "============== Gaussian Approximation Potentials - Database fitting ============\n",
      "\n",
      "\n",
      "Initial parsing of command line arguments finished.\n",
      "Found 3 GAPs.\n",
      "Descriptors have been parsed\n",
      "XYZ file read\n",
      "Unchanged GAP: {distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0}\n",
      "Unchanged GAP: { distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004}\n",
      "Unchanged GAP: { soap cutoff=4.0 covariance_type=dot_product zeta=2 delta=0.016 atom_sigma=0.7 l_max=6 n_max=6 n_sparse=200 sparse_method=cur_points}\n",
      "Multispecies support added where requested\n",
      "\n",
      "===================== Report on number of descriptors found ====================\n",
      "\n",
      "---------------------------------------------------------------------\n",
      "Descriptor: distance_Nb order=2 cutoff=5.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=15 delta=1.0\n",
      "Number of descriptors:                        35312\n",
      "Number of partial derivatives of descriptors: 0\n",
      "---------------------------------------------------------------------\n",
      "Descriptor:  distance_Nb order=3 cutoff=4.0 covariance_type=ARD_SE theta_uniform=1.0 n_sparse=50 delta=0.004\n",
      "Number of descriptors:                        150164\n",
      "Number of partial derivatives of descriptors: 0\n",
      "---------------------------------------------------------------------\n",
      "Descriptor:  soap cutoff=4.0 covariance_type=dot_product zeta=2 delta=0.016 atom_sigma=0.7 l_max=6 n_max=6 n_sparse=200 sparse_method=cur_points\n",
      "Number of descriptors:                        3200\n",
      "Number of partial derivatives of descriptors: 0\n",
      "\n",
      "========================================  ======================================\n",
      "\n",
      "\n",
      "========== Report on number of target properties found in training XYZ: ========\n",
      "\n",
      "Number of target energies (property name: energy) found: 100\n",
      "Number of target local_properties (property name: local_property) found: 0\n",
      "Number of target forces (property name: force) found: 0\n",
      "Number of target virials (property name: virial) found: 0\n",
      "Number of target Hessian eigenvalues (property name: hessian) found: 0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "\n",
      "===== Report on per-configuration/per-atom sigma (error parameter) settings ====\n",
      "\n",
      "Number of per-configuration setting of energy_sigma found:     0\n",
      "Number of per-configuration setting of force_sigma found:      0\n",
      "Number of per-configuration setting of virial_sigma found:     0\n",
      "Number of per-configuration setting of hessian_sigma found:    0\n",
      "Number of per-atom setting of force_atom_sigma found:          0\n",
      "\n",
      "================================= End of report ================================\n",
      "\n",
      "Started CUR decomposition\n",
      "cur_decomposition: iteration: 1, error: .34329063034235423E-015\n",
      "Finished CUR decomposition\n",
      "Cartesian coordinates transformed to descriptors\n",
      "Started sparse covariance matrix calculation of coordinate 1\n",
      "\n",
      "Finished sparse covariance matrix calculation of coordinate 1\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1_sparse  done in 1.9762869999999992 cpu secs, .54421901702880859 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate1         done in 1.9763460000000004 cpu secs, .54428696632385254 wall clock secs.\n",
      "Started sparse covariance matrix calculation of coordinate 2\n",
      "\n",
      "Finished sparse covariance matrix calculation of coordinate 2\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate2_sparse  done in 52.650658000000000 cpu secs, 14.171960830688477 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate2         done in 52.650689000000000 cpu secs, 14.171991109848022 wall clock secs.\n",
      "Started sparse covariance matrix calculation of coordinate 3\n",
      "Covariance matrix 100% |********************|   0.3 /   0.3 s\n",
      "Finished sparse covariance matrix calculation of coordinate 3\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate3_sparse  done in .69204299999999819 cpu secs, .25782394409179688 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_Coordinate3         done in .69208299999999667 cpu secs, .25786900520324707 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_LinearAlgebra       done in .10295999999999594 cpu secs, .42098045349121094E-001 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse_FunctionValues      done in .20000000020559128E-005 cpu secs, .21457672119140625E-005 wall clock secs.\n",
      "TIMER: gpFull_covarianceMatrix_sparse                     done in 55.422404999999998 cpu secs, 15.016569852828979 wall clock secs.\n",
      "TIMER: GP sparsify                                        done in 55.621861000000003 cpu secs, 15.223239183425903 wall clock secs.\n",
      "\n",
      "libAtoms::Finalise: 07/10/2019   17:17:51\n",
      "libAtoms::Finalise: Bye-Bye!\n"
     ]
    }
   ],
   "source": [
    "!gap_fit at_file=/tmp/atoms_db.xyz \\\n",
    "gap={distance_Nb order=2 \\\n",
    "                 cutoff=5.0 \\\n",
    "                 covariance_type=ARD_SE \\\n",
    "                 theta_uniform=1.0 \\\n",
    "                 n_sparse=15 \\\n",
    "                 delta=1.0:\\\n",
    "     distance_Nb order=3 \\\n",
    "                 cutoff=4.0 \\\n",
    "                 covariance_type=ARD_SE \\\n",
    "                 theta_uniform=1.0 \\\n",
    "                 n_sparse=50 \\\n",
    "                 delta=0.004:\\\n",
    "     soap cutoff=4.0 \\\n",
    "          covariance_type=dot_product \\\n",
    "          zeta=2 \\\n",
    "          delta=0.016 \\\n",
    "          atom_sigma=0.7 \\\n",
    "          l_max=6 \\\n",
    "          n_max=6 \\\n",
    "          n_sparse=200 \\\n",
    "          sparse_method=cur_points} \\\n",
    "e0=-29.716948405885105 \\\n",
    "default_sigma={0.001 0.5 0.0 0.0} \\\n",
    "do_copy_at_file=F sparse_separate_file=F \\\n",
    "gp_file=/tmp/gap_2b3bsoap.xml 2>&1 | grep -v FoX"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can load and use the fitted potential:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:31.872466Z",
     "start_time": "2019-09-25T22:45:24.499581Z"
    }
   },
   "outputs": [],
   "source": [
    "gap_soap = Potential(param_filename='/tmp/gap_2b3bsoap.xml')\n",
    "gap_energies = []\n",
    "for at in db:\n",
    "    a = at.copy()\n",
    "    a.set_calculator(gap_soap)\n",
    "    gap_energies.append(a.get_potential_energy())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also calculate the RMSE (in meV) as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:31.955836Z",
     "start_time": "2019-09-25T22:45:31.898441Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.004254157149981674"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(sum((np.array(qm_energies)/Natoms - np.array(gap_energies)/Natoms)**2)/len(gap_energies))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:32.246843Z",
     "start_time": "2019-09-25T22:45:31.959788Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(np.array(qm_energies)/Natoms, np.array(gap_energies)/Natoms)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using GAP for MD\n",
    "We can use now use the fitted potential to do MD or geometry relaxation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:32.259896Z",
     "start_time": "2019-09-25T22:45:32.250418Z"
    }
   },
   "outputs": [],
   "source": [
    "#attach tight binding calculator\n",
    "atoms.set_calculator(gap_soap)\n",
    "\n",
    "# Thermalize atoms\n",
    "# MaxwellBoltzmannDistribution(atoms, 2.0* T * units.kB)\n",
    "\n",
    "# dynamics = VelocityVerlet(atoms, timestep)\n",
    "dynamics = Langevin(atoms, timestep, T * units.kB, 0.002)\n",
    "    \n",
    "dynamics.attach(print_status, interval=10)\n",
    "dynamics.attach(print_energy, interval=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dynamics:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:45.128606Z",
     "start_time": "2019-09-25T22:45:32.265254Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step = 0, time = 0.0 [fs], T = 1294.479828341841 [K]\n",
      "Energy per atom: Epot = -34.698eV  Ekin = 0.167eV (T=1294K)  Etot = -34.531eV\n",
      "Step = 10, time = 10.0 [fs], T = 1189.7904138587505 [K]\n",
      "Energy per atom: Epot = -34.685eV  Ekin = 0.154eV (T=1190K)  Etot = -34.531eV\n",
      "Step = 20, time = 20.0 [fs], T = 1264.3379093179376 [K]\n",
      "Energy per atom: Epot = -34.696eV  Ekin = 0.163eV (T=1264K)  Etot = -34.533eV\n",
      "Step = 30, time = 30.0 [fs], T = 1457.3725237044011 [K]\n",
      "Energy per atom: Epot = -34.721eV  Ekin = 0.188eV (T=1457K)  Etot = -34.533eV\n",
      "Step = 40, time = 40.0 [fs], T = 1388.8679832826024 [K]\n",
      "Energy per atom: Epot = -34.715eV  Ekin = 0.180eV (T=1389K)  Etot = -34.536eV\n",
      "Step = 50, time = 50.00000000000001 [fs], T = 1561.736378264197 [K]\n",
      "Energy per atom: Epot = -34.738eV  Ekin = 0.202eV (T=1562K)  Etot = -34.536eV\n",
      "Step = 60, time = 60.0 [fs], T = 2028.6943305981565 [K]\n",
      "Energy per atom: Epot = -34.800eV  Ekin = 0.262eV (T=2029K)  Etot = -34.538eV\n",
      "Step = 70, time = 70.0 [fs], T = 1568.5562709553685 [K]\n",
      "Energy per atom: Epot = -34.737eV  Ekin = 0.203eV (T=1569K)  Etot = -34.535eV\n",
      "Step = 80, time = 80.0 [fs], T = 1886.3013570587461 [K]\n",
      "Energy per atom: Epot = -34.779eV  Ekin = 0.244eV (T=1886K)  Etot = -34.535eV\n",
      "Step = 90, time = 90.0 [fs], T = 1928.3315444589239 [K]\n",
      "Energy per atom: Epot = -34.787eV  Ekin = 0.249eV (T=1928K)  Etot = -34.537eV\n",
      "Step = 100, time = 100.00000000000001 [fs], T = 1727.5769477863184 [K]\n",
      "Energy per atom: Epot = -34.761eV  Ekin = 0.223eV (T=1728K)  Etot = -34.538eV\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dynamics.run(steps=100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Geometry optimisation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:45:45.175139Z",
     "start_time": "2019-09-25T22:45:45.137204Z"
    }
   },
   "outputs": [],
   "source": [
    "optatoms = db[0].copy()\n",
    "optatoms.set_calculator(gap_soap)\n",
    "opt = PreconLBFGS(optatoms, precon=Exp(3.0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:46:00.264930Z",
     "start_time": "2019-09-25T22:45:45.185216Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:   0  17:18:02    -1109.683388       4.9234\n",
      "estimate_mu(): mu=1.4377293786564451, mu_c=1.0\n",
      "PreconLBFGS:   1  17:18:02    -1110.535572       4.5917\n",
      "PreconLBFGS:   2  17:18:02    -1111.272884       4.5079\n",
      "PreconLBFGS:   3  17:18:02    -1111.957952       4.3767\n",
      "PreconLBFGS:   4  17:18:02    -1112.578689       4.3500\n",
      "PreconLBFGS:   5  17:18:02    -1113.225669       4.3169\n",
      "PreconLBFGS:   6  17:18:02    -1113.863449       4.2918\n",
      "PreconLBFGS:   7  17:18:03    -1114.471548       4.2458\n",
      "PreconLBFGS:   8  17:18:03    -1115.032581       4.1511\n",
      "PreconLBFGS:   9  17:18:03    -1115.574963       4.0274\n",
      "PreconLBFGS:  10  17:18:03    -1116.119287       3.8739\n",
      "PreconLBFGS:  11  17:18:03    -1116.680878       3.6919\n",
      "PreconLBFGS:  12  17:18:03    -1117.209393       3.5311\n",
      "PreconLBFGS:  13  17:18:03    -1117.716249       3.3508\n",
      "PreconLBFGS:  14  17:18:03    -1118.160184       3.2262\n",
      "PreconLBFGS:  15  17:18:03    -1118.601303       3.0357\n",
      "PreconLBFGS:  16  17:18:03    -1118.990945       2.9062\n",
      "PreconLBFGS:  17  17:18:04    -1119.349906       2.8058\n",
      "PreconLBFGS:  18  17:18:04    -1119.678573       2.7172\n",
      "PreconLBFGS:  19  17:18:04    -1120.006870       2.6478\n",
      "PreconLBFGS:  20  17:18:04    -1120.342863       2.5801\n",
      "PreconLBFGS:  21  17:18:04    -1120.661850       2.5140\n",
      "PreconLBFGS:  22  17:18:04    -1120.989318       2.4015\n",
      "PreconLBFGS:  23  17:18:04    -1121.302870       2.4258\n",
      "PreconLBFGS:  24  17:18:04    -1121.594728       2.5018\n",
      "PreconLBFGS:  25  17:18:04    -1121.864728       2.5801\n",
      "PreconLBFGS:  26  17:18:04    -1122.124053       2.5994\n",
      "PreconLBFGS:  27  17:18:04    -1122.396679       2.6003\n",
      "PreconLBFGS:  28  17:18:05    -1122.669355       2.5872\n",
      "PreconLBFGS:  29  17:18:05    -1122.963355       2.4957\n",
      "PreconLBFGS:  30  17:18:05    -1123.269795       2.3171\n",
      "PreconLBFGS:  31  17:18:05    -1123.603594       1.9910\n",
      "PreconLBFGS:  32  17:18:05    -1123.937762       1.5578\n",
      "PreconLBFGS:  33  17:18:05    -1124.234675       1.3468\n",
      "PreconLBFGS:  34  17:18:05    -1124.513655       1.1899\n",
      "PreconLBFGS:  35  17:18:05    -1124.758552       1.2400\n",
      "PreconLBFGS:  36  17:18:05    -1124.966145       1.2919\n",
      "PreconLBFGS:  37  17:18:05    -1125.150890       1.3222\n",
      "PreconLBFGS:  38  17:18:06    -1125.313512       1.2540\n",
      "PreconLBFGS:  39  17:18:06    -1125.484647       1.2145\n",
      "PreconLBFGS:  40  17:18:06    -1125.645388       1.1570\n",
      "PreconLBFGS:  41  17:18:06    -1125.802081       1.1058\n",
      "PreconLBFGS:  42  17:18:06    -1125.944609       1.0548\n",
      "PreconLBFGS:  43  17:18:06    -1126.066383       1.0593\n",
      "PreconLBFGS:  44  17:18:06    -1126.162365       1.0664\n",
      "PreconLBFGS:  45  17:18:06    -1126.246577       1.0189\n",
      "PreconLBFGS:  46  17:18:06    -1126.330379       1.0728\n",
      "PreconLBFGS:  47  17:18:06    -1126.410825       1.1446\n",
      "PreconLBFGS:  48  17:18:07    -1126.488125       1.2435\n",
      "PreconLBFGS:  49  17:18:07    -1126.560200       1.3443\n",
      "PreconLBFGS:  50  17:18:07    -1126.626230       1.4196\n",
      "PreconLBFGS:  51  17:18:07    -1126.686193       1.3669\n",
      "PreconLBFGS:  52  17:18:07    -1126.742823       1.3389\n",
      "PreconLBFGS:  53  17:18:07    -1126.795906       1.2727\n",
      "PreconLBFGS:  54  17:18:07    -1126.845887       1.2176\n",
      "PreconLBFGS:  55  17:18:07    -1126.893799       1.1407\n",
      "PreconLBFGS:  56  17:18:07    -1126.940278       1.0719\n",
      "PreconLBFGS:  57  17:18:07    -1126.982981       0.9973\n",
      "PreconLBFGS:  58  17:18:08    -1127.029085       0.9026\n",
      "PreconLBFGS:  59  17:18:08    -1127.070015       0.8517\n",
      "PreconLBFGS:  60  17:18:08    -1127.116317       0.8929\n",
      "PreconLBFGS:  61  17:18:08    -1127.161266       0.9901\n",
      "PreconLBFGS:  62  17:18:08    -1127.202419       1.0645\n",
      "PreconLBFGS:  63  17:18:08    -1127.241068       1.0903\n",
      "PreconLBFGS:  64  17:18:08    -1127.282508       1.0586\n",
      "PreconLBFGS:  65  17:18:08    -1127.347191       0.8213\n",
      "PreconLBFGS:  66  17:18:08    -1127.405873       0.7884\n",
      "PreconLBFGS:  67  17:18:09    -1127.448727       0.7998\n",
      "PreconLBFGS:  68  17:18:09    -1127.486176       0.7780\n",
      "PreconLBFGS:  69  17:18:09    -1127.525671       0.7810\n",
      "PreconLBFGS:  70  17:18:09    -1127.558559       0.8359\n",
      "PreconLBFGS:  71  17:18:09    -1127.598349       0.8139\n",
      "PreconLBFGS:  72  17:18:09    -1127.634101       0.8673\n",
      "PreconLBFGS:  73  17:18:09    -1127.662738       0.8824\n",
      "PreconLBFGS:  74  17:18:09    -1127.687485       0.9169\n",
      "PreconLBFGS:  75  17:18:09    -1127.698444       1.0778\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Passed direction which is not downhill. Aborting...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  76  17:18:09    -1127.698444       1.0778\n",
      "PreconLBFGS:  77  17:18:10    -1127.719816       1.0899\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/jameskermode/.pyenv/versions/3.6.6/Python.framework/Versions/3.6/lib/python3.6/site-packages/ase/optimize/precon/lbfgs.py:352: UserWarning: Armijo linesearch failed, resetting Hessian and trying again\n",
      "  'Armijo linesearch failed, resetting Hessian and '\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  78  17:18:10    -1127.761700       1.1322\n",
      "PreconLBFGS:  79  17:18:10    -1127.844255       1.2291\n",
      "PreconLBFGS:  80  17:18:10    -1127.969036       1.3938\n",
      "PreconLBFGS:  81  17:18:10    -1128.081393       1.4121\n",
      "PreconLBFGS:  82  17:18:10    -1128.181345       1.3558\n",
      "PreconLBFGS:  83  17:18:10    -1128.270254       1.3927\n",
      "PreconLBFGS:  84  17:18:10    -1128.348531       1.5283\n",
      "PreconLBFGS:  85  17:18:10    -1128.426889       1.7799\n",
      "PreconLBFGS:  86  17:18:11    -1128.445736       1.8243\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Passed direction which is not downhill. Aborting...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  87  17:18:11    -1128.445736       1.8243\n",
      "PreconLBFGS:  88  17:18:11    -1128.482902       1.9309\n",
      "PreconLBFGS:  89  17:18:11    -1128.559965       2.2312\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Passed direction which is not downhill. Aborting...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  90  17:18:11    -1128.559965       2.2312\n",
      "PreconLBFGS:  91  17:18:11    -1128.670491       2.4921\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Passed direction which is not downhill. Aborting...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  92  17:18:11    -1128.670491       2.4921\n",
      "PreconLBFGS:  93  17:18:11    -1128.782318       2.3591\n",
      "PreconLBFGS:  94  17:18:11    -1128.894364       2.1521\n",
      "PreconLBFGS:  95  17:18:11    -1129.001220       2.2479\n",
      "PreconLBFGS:  96  17:18:11    -1129.106928       2.3316\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Passed direction which is not downhill. Aborting...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PreconLBFGS:  97  17:18:11    -1129.106928       2.3316\n",
      "PreconLBFGS:  98  17:18:11    -1129.220418       2.3091\n",
      "PreconLBFGS:  99  17:18:12    -1129.331678       2.2090\n",
      "PreconLBFGS: 100  17:18:12    -1129.443932       2.0163\n",
      "PreconLBFGS: 101  17:18:12    -1129.551115       1.6623\n",
      "PreconLBFGS: 102  17:18:12    -1129.652255       1.2197\n",
      "PreconLBFGS: 103  17:18:12    -1129.733200       0.8105\n",
      "PreconLBFGS: 104  17:18:12    -1129.793145       0.6091\n",
      "PreconLBFGS: 105  17:18:12    -1129.830076       0.5602\n",
      "PreconLBFGS: 106  17:18:12    -1129.844974       0.3316\n",
      "PreconLBFGS: 107  17:18:12    -1129.853075       0.4243\n",
      "PreconLBFGS: 108  17:18:13    -1129.857980       0.2636\n",
      "PreconLBFGS: 109  17:18:13    -1129.861664       0.1665\n",
      "PreconLBFGS: 110  17:18:13    -1129.863643       0.1211\n",
      "PreconLBFGS: 111  17:18:13    -1129.864671       0.0906\n",
      "PreconLBFGS: 112  17:18:13    -1129.865139       0.0449\n",
      "PreconLBFGS: 113  17:18:13    -1129.865458       0.0324\n",
      "PreconLBFGS: 114  17:18:14    -1129.865586       0.0232\n",
      "PreconLBFGS: 115  17:18:14    -1129.865642       0.0139\n",
      "PreconLBFGS: 116  17:18:14    -1129.865663       0.0100\n",
      "PreconLBFGS: 117  17:18:14    -1129.865673       0.0062\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "opt.run(fmax=0.01)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's visualise the relaxed structure:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-25T22:46:00.435231Z",
     "start_time": "2019-09-25T22:46:00.298120Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8d54ce7eaee94e27ad3e77113adeecdb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "NGLWidget()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "view = ViewStructure(optatoms, (2,2,1))\n",
    "view.camera= 'orthographic'\n",
    "view"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
