{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using Quippy to compute descriptors of atomic environments\n", "\n", "This tutorial shows how to use quippy to calculate various descriptors for a given atomic structure, contained in an Atoms object." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import quippy" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from quippy import descriptors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a configuration:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. , 0. ],\n", " [ 0.875, 0.875, 0.875],\n", " [ 1.75 , 1.75 , 0. ],\n", " [ 2.625, 2.625, 0.875],\n", " [ 1.75 , 0. , 1.75 ],\n", " [ 2.625, 0.875, 2.625],\n", " [ 0. , 1.75 , 1.75 ],\n", " [ 0.875, 2.625, 2.625]])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "at = quippy.diamond(3.5, 6)\n", "at.positions" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FortranArray([6, 6, 6, 6, 6, 6, 6, 6], dtype=int32)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "at.Z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All descriptors are instantiated by a call to `Descriptor()`, which takes the descriptor initialisation string as its only argument. For a list of available descriptors and their parameters, see the following list, auto-generated using the following command: ```quip descriptor_str=\"--help\"``` \n", "\n", "bispectrum_so4 \n", "bispectrum_so3\n", "behler\n", "distance_2b\n", "coordination\n", "angle_3b\n", "co_angle_3b\n", "co_distance_2b\n", "cosnx\n", "trihis\n", "water_monomer\n", "water_dimer\n", "A2_dimer\n", "AB_dimer\n", "bond_real_space\n", "atom_real_space\n", "power_so3\n", "power_so4\n", "soap\n", "AN_monomer\n", "general_monomer\n", "general_dimer\n", "general_trimer\n", "rdf\n", "as_distance_2b\n", "molecule_lo_d\n", "alex\n", "com_dimer\n", "distance_Nb\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A simple descriptor: pairwise distances" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we use a simple pair distance between carbon atoms, with a cutoff of 1.5 Angstrom. There are several descriptors that can do this, one is ``distance_2b``, which takes a cutoff argument, and two Z values to specify the atom types. Alternatively, the ``distance_Nb`` descriptor could also do this, with ``order=2``, and it takes a string of Zs to specify the atom types. 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": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "desc = descriptors.Descriptor(\"distance_2b Z1=6 Z2=6 cutoff=4\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The descriptor dimension is the length of the descriptor vector. For the scalar distance this is 1." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.n_dim # number of dimensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This descriptor is very simple: it is scalar (dimension 1), and hence only has a single permutation." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.n_perm # number of permutations" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1]], dtype=int32)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.permutations() # array of permutation arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many descriptors rely on the neighbour connectivity, so we need to call `calc_connect`, after setting the Atoms cutoff with a skin of 1 A:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "at.set_cutoff(desc.cutoff()+1.0)\n", "at.calc_connect()" ] }, { "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": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "368" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.count(at)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This also works transparently for iterables (such as lists), returning a list of the counts." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also calculate the actual descriptor values -- in this case, the list of pairwise distances:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'cutoff': array([ 0.30420743, 0.30420743, 1. , 1. , 1. ,\n", " 0.30420743, 0.30420743, 0.30420743, 1. , 1. ,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 0.30420743, 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 0.30420743, 0.30420743, 1. , 0.30420743,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 0.30420743, 1. , 1. , 0.30420743,\n", " 1. , 1. , 0.30420743, 0.30420743, 1. ,\n", " 1. , 1. , 0.30420743, 1. , 1. ,\n", " 1. , 0.30420743, 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 0.30420743, 0.30420743,\n", " 1. , 1. , 1. , 1. , 0.30420743,\n", " 0.30420743, 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 0.30420743, 1. ,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 0.30420743, 1. , 1. , 0.30420743, 0.30420743,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 0.30420743, 0.30420743, 1. , 1. , 1. ,\n", " 0.30420743, 1. , 1. , 0.30420743, 1. ,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 0.30420743, 1. , 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 0.30420743, 1. , 0.30420743, 1. , 1. ,\n", " 0.30420743, 1. , 1. , 1. , 1. ,\n", " 1. , 0.30420743, 1. , 0.30420743, 0.30420743,\n", " 1. , 1. , 0.30420743, 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 0.30420743, 0.30420743, 1. , 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 0.30420743, 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 1. , 0.30420743, 1. , 0.30420743, 1. ,\n", " 1. , 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 0.30420743, 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 0.30420743, 1. ,\n", " 0.30420743, 1. , 0.30420743, 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 0.30420743,\n", " 0.30420743, 1. , 1. , 0.30420743, 1. ,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 0.30420743, 1. ,\n", " 0.30420743, 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 1. , 1. , 0.30420743,\n", " 0.30420743, 1. , 1. , 1. , 0.30420743,\n", " 1. , 1. , 1. , 1. , 1. ,\n", " 0.30420743, 1. , 1. , 0.30420743, 1. ,\n", " 0.30420743, 1. , 1. , 1. , 1. ,\n", " 1. , 1. , 0.30420743, 1. , 0.30420743,\n", " 1. , 0.30420743, 1. , 1. , 1. ,\n", " 1. , 1. , 1. ]),\n", " 'descriptor': array([[ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ]])}" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d = desc.calc(at)\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 end result is always a descriptor which changes smoothly with atomic positions. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a histogram of the resulting descriptor array, i.e. of the interatomic distances" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.hist(d.descriptor)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate size of descriptor data:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n_desc=368 n_cross=736\n" ] } ], "source": [ "n_desc, n_cross = desc.descriptor_sizes(at)\n", "print(\"n_desc=%d n_cross=%d\" % (n_desc,n_cross))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`n_desc` is number of descriptors, `n_cross` is number of gradients" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gradients are returned in a `DescriptorCalcResult` object ( if the ``grad=True`` option is set ) which has the following elements:\n", "- `descriptor` = the descriptor values (equivalent to `desc.calc(at)`)\n", "- `grad` = the gradients\n", "- `index` = the indices (`i_desc`, `i_atom`, `i_coord`)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['descriptor', 'cutoff_grad', 'grad', 'index', 'cutoff']" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = desc.calc(at, grad=True)\n", "list(res)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 2.90204669],\n", " [ 3.5 ],\n", " [ 1.51554446],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 1.51554446],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.47487373],\n", " [ 2.90204669],\n", " [ 1.51554446],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 2.90204669],\n", " [ 3.81403658],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ],\n", " [ 3.5 ]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.descriptor[:,:10]" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[-0.22941573],\n", " [ 0.6882472 ],\n", " [ 0.6882472 ]],\n", "\n", " [[ 0.22941573],\n", " [-0.6882472 ],\n", " [-0.6882472 ]],\n", "\n", " [[ 0.6882472 ],\n", " [-0.22941573],\n", " [ 0.6882472 ]],\n", "\n", " ..., \n", " [[ 0. ],\n", " [ 1. ],\n", " [ 0. ]],\n", "\n", " [[-0. ],\n", " [-0. ],\n", " [-1. ]],\n", "\n", " [[ 0. ],\n", " [ 0. ],\n", " [ 1. ]]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.grad[:,:10]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 1],\n", " [ 1, 2],\n", " [ 2, 1],\n", " ..., \n", " [367, 8],\n", " [368, 8],\n", " [368, 8]], dtype=int32)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.index[:,:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A many-body descriptor: SOAP" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "desc = descriptors.Descriptor(\"soap cutoff=3 l_max=4 n_max=4 atom_sigma=0.5 n_Z=1 Z={6} \")" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "at.set_cutoff(desc.cutoff())\n", "at.calc_connect()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are now only 8 descriptors, because SOAP produces one for each atom in the structure" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8, 258)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.descriptor_sizes(at)" ] }, { "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": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "51" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.n_dim" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'cutoff': array([ 1., 1., 1., 1., 1., 1., 1., 1.]),\n", " 'descriptor': array([[ 4.73572570e-01, 5.11159766e-06, 1.01308559e-06,\n", " 1.60812107e-03, 5.47553526e-04, 6.27690415e-01,\n", " 4.95953867e-05, 9.82948612e-06, 1.54957207e-02,\n", " 5.47660232e-03, 4.15981924e-01, 2.40600155e-04,\n", " 4.76854071e-05, 7.46577370e-02, 2.73883482e-02,\n", " 3.18341025e-01, -5.92864850e-07, -1.17486739e-07,\n", " -1.41512045e-03, 1.81695390e-03, 2.98357233e-01,\n", " -4.06747903e-06, -8.06043591e-07, -9.64209426e-03,\n", " 1.28503115e-02, 1.06996282e-01, 3.43814942e-08,\n", " 6.81242239e-09, 6.22655008e-04, 3.01463911e-03,\n", " -2.81631715e-03, 5.36228874e-09, 1.06263310e-09,\n", " 1.15339605e-05, -1.66628637e-05, -2.63952342e-03,\n", " 3.67891552e-08, 7.29042791e-09, 7.85880344e-05,\n", " -1.17847232e-04, -1.33866723e-03, -4.39778747e-10,\n", " -8.71386960e-11, -7.17707326e-06, -3.90981365e-05,\n", " 8.37426278e-06, 2.81263730e-12, 5.57301933e-13,\n", " 4.13635000e-08, 2.53540179e-07, 0.00000000e+00],\n", " [ 2.49140590e-01, 3.06897443e-04, 2.24691086e-04,\n", " 2.63645993e-03, 8.44257436e-04, 5.55127085e-01,\n", " 2.97737414e-03, 2.17965866e-03, 2.54342326e-02,\n", " 8.40520121e-03, 6.18458197e-01, 1.44425393e-02,\n", " 1.05720969e-02, 1.22683598e-01, 4.18410093e-02,\n", " 2.47745044e-01, -3.90932807e-05, -3.07806268e-05,\n", " -1.98138033e-03, 2.35398492e-03, 3.90335370e-01,\n", " -2.68180541e-04, -2.11137369e-04, -1.35142491e-02,\n", " 1.65884021e-02, 1.23178658e-01, 2.48989464e-06,\n", " 2.10833239e-06, 7.59273692e-04, 3.41878216e-03,\n", " -2.19112484e-03, 3.46295943e-07, 2.69352586e-07,\n", " 1.61901122e-05, -2.16062298e-05, -3.45223263e-03,\n", " 2.37559580e-06, 1.84760358e-06, 1.10427087e-04,\n", " -1.52258473e-04, -1.54068059e-03, -3.11918586e-08,\n", " -2.60914232e-08, -8.76903344e-06, -4.43838310e-05,\n", " 9.63517840e-06, 1.95376148e-10, 1.61445692e-10,\n", " 5.06386375e-08, 2.88103389e-07, 0.00000000e+00],\n", " [ 2.23838398e-01, 3.78089923e-05, 4.06539273e-05,\n", " 1.92860775e-03, 7.66122563e-04, 5.09433866e-01,\n", " 3.53632752e-04, 4.29949407e-04, 1.85669919e-02,\n", " 7.76143527e-03, 5.79710332e-01, 1.65484402e-03,\n", " 2.28688255e-03, 8.93771594e-02, 3.93431430e-02,\n", " 2.92339646e-01, -1.55904376e-04, 4.02508059e-04,\n", " -1.89111550e-03, 3.67450327e-03, 4.70463509e-01,\n", " -1.01397193e-03, 3.22651119e-03, -1.28156879e-02,\n", " 2.67826166e-02, 1.90902163e-01, 4.60348034e-04,\n", " 3.74809897e-03, 1.39702795e-03, 1.25434798e-02,\n", " -2.58972445e-03, 1.32417523e-06, -3.56120051e-06,\n", " 1.55903764e-05, -3.32865245e-05, -4.16765521e-03,\n", " 8.60690247e-06, -2.85979893e-05, 1.05611567e-04,\n", " -2.42520968e-04, -2.39161731e-03, -5.59006314e-06,\n", " -4.74862442e-05, -1.67590764e-05, -1.59583514e-04,\n", " 1.49810595e-05, 3.39496223e-08, 3.00874317e-07,\n", " 1.00726608e-07, 1.01530792e-06, 0.00000000e+00],\n", " [ 2.21912827e-01, 3.22794357e-04, 2.74608154e-04,\n", " 2.71347565e-03, 9.21261052e-04, 5.22685782e-01,\n", " 3.10761607e-03, 2.61564838e-03, 2.61192465e-02,\n", " 9.15687879e-03, 6.15557988e-01, 1.49623108e-02,\n", " 1.24681640e-02, 1.25730679e-01, 4.55125688e-02,\n", " 2.60247510e-01, -3.16196242e-04, -5.90933824e-04,\n", " -2.70412292e-03, 2.39722324e-03, 4.33440876e-01,\n", " -2.09668723e-03, -3.79982381e-03, -1.80490450e-02,\n", " 1.69318863e-02, 1.52602189e-01, 6.07534416e-04,\n", " 2.09763755e-03, 4.23793685e-03, 3.79617175e-03,\n", " -2.29869885e-03, 2.76019211e-06, 5.15137054e-06,\n", " 2.24848968e-05, -2.19757551e-05, -3.82847099e-03,\n", " 1.83031786e-05, 3.31247321e-05, 1.49959011e-04,\n", " -1.55178180e-04, -1.90621225e-03, -7.49516446e-06,\n", " -2.58557011e-05, -5.12063357e-05, -4.87638925e-05,\n", " 1.19056128e-05, 4.62340053e-08, 1.59350048e-07,\n", " 3.09463332e-07, 3.13393204e-07, 0.00000000e+00],\n", " [ 2.23838398e-01, 3.78089923e-05, 4.06539273e-05,\n", " 1.92860775e-03, 7.66122563e-04, 5.09433866e-01,\n", " 3.53632752e-04, 4.29949407e-04, 1.85669919e-02,\n", " 7.76143527e-03, 5.79710332e-01, 1.65484402e-03,\n", " 2.28688255e-03, 8.93771594e-02, 3.93431430e-02,\n", " 2.92339646e-01, -1.55904376e-04, 4.02508059e-04,\n", " -1.89111550e-03, 3.67450327e-03, 4.70463509e-01,\n", " -1.01397193e-03, 3.22651119e-03, -1.28156879e-02,\n", " 2.67826166e-02, 1.90902163e-01, 4.60348034e-04,\n", " 3.74809897e-03, 1.39702795e-03, 1.25434798e-02,\n", " -2.58972445e-03, 1.32417523e-06, -3.56120051e-06,\n", " 1.55903764e-05, -3.32865245e-05, -4.16765521e-03,\n", " 8.60690247e-06, -2.85979893e-05, 1.05611567e-04,\n", " -2.42520968e-04, -2.39161731e-03, -5.59006314e-06,\n", " -4.74862442e-05, -1.67590764e-05, -1.59583514e-04,\n", " 1.49810595e-05, 3.39496223e-08, 3.00874317e-07,\n", " 1.00726608e-07, 1.01530792e-06, 0.00000000e+00],\n", " [ 2.21912827e-01, 3.22794357e-04, 2.74608154e-04,\n", " 2.71347565e-03, 9.21261052e-04, 5.22685782e-01,\n", " 3.10761607e-03, 2.61564838e-03, 2.61192465e-02,\n", " 9.15687879e-03, 6.15557988e-01, 1.49623108e-02,\n", " 1.24681640e-02, 1.25730679e-01, 4.55125688e-02,\n", " 2.60247510e-01, -3.16196242e-04, -5.90933824e-04,\n", " -2.70412292e-03, 2.39722324e-03, 4.33440876e-01,\n", " -2.09668723e-03, -3.79982381e-03, -1.80490450e-02,\n", " 1.69318863e-02, 1.52602189e-01, 6.07534416e-04,\n", " 2.09763755e-03, 4.23793685e-03, 3.79617175e-03,\n", " -2.29869885e-03, 2.76019211e-06, 5.15137054e-06,\n", " 2.24848968e-05, -2.19757551e-05, -3.82847099e-03,\n", " 1.83031786e-05, 3.31247321e-05, 1.49959011e-04,\n", " -1.55178180e-04, -1.90621225e-03, -7.49516446e-06,\n", " -2.58557011e-05, -5.12063357e-05, -4.87638925e-05,\n", " 1.19056128e-05, 4.62340053e-08, 1.59350048e-07,\n", " 3.09463332e-07, 3.13393204e-07, 0.00000000e+00],\n", " [ 2.23838398e-01, 3.78089923e-05, 4.06539273e-05,\n", " 1.92860775e-03, 7.66122563e-04, 5.09433866e-01,\n", " 3.53632752e-04, 4.29949407e-04, 1.85669919e-02,\n", " 7.76143527e-03, 5.79710332e-01, 1.65484402e-03,\n", " 2.28688255e-03, 8.93771594e-02, 3.93431430e-02,\n", " 2.92339646e-01, -1.55904376e-04, 4.02508059e-04,\n", " -1.89111550e-03, 3.67450327e-03, 4.70463509e-01,\n", " -1.01397193e-03, 3.22651119e-03, -1.28156879e-02,\n", " 2.67826166e-02, 1.90902163e-01, 4.60348034e-04,\n", " 3.74809897e-03, 1.39702795e-03, 1.25434798e-02,\n", " -2.58972445e-03, 1.32417523e-06, -3.56120051e-06,\n", " 1.55903764e-05, -3.32865245e-05, -4.16765521e-03,\n", " 8.60690247e-06, -2.85979893e-05, 1.05611567e-04,\n", " -2.42520968e-04, -2.39161731e-03, -5.59006314e-06,\n", " -4.74862442e-05, -1.67590764e-05, -1.59583514e-04,\n", " 1.49810595e-05, 3.39496223e-08, 3.00874317e-07,\n", " 1.00726608e-07, 1.01530792e-06, 0.00000000e+00],\n", " [ 2.21912827e-01, 3.22794357e-04, 2.74608154e-04,\n", " 2.71347565e-03, 9.21261052e-04, 5.22685782e-01,\n", " 3.10761607e-03, 2.61564838e-03, 2.61192465e-02,\n", " 9.15687879e-03, 6.15557988e-01, 1.49623108e-02,\n", " 1.24681640e-02, 1.25730679e-01, 4.55125688e-02,\n", " 2.60247510e-01, -3.16196242e-04, -5.90933824e-04,\n", " -2.70412292e-03, 2.39722324e-03, 4.33440876e-01,\n", " -2.09668723e-03, -3.79982381e-03, -1.80490450e-02,\n", " 1.69318863e-02, 1.52602189e-01, 6.07534416e-04,\n", " 2.09763755e-03, 4.23793685e-03, 3.79617175e-03,\n", " -2.29869885e-03, 2.76019211e-06, 5.15137054e-06,\n", " 2.24848968e-05, -2.19757551e-05, -3.82847099e-03,\n", " 1.83031786e-05, 3.31247321e-05, 1.49959011e-04,\n", " -1.55178180e-04, -1.90621225e-03, -7.49516446e-06,\n", " -2.58557011e-05, -5.12063357e-05, -4.87638925e-05,\n", " 1.19056128e-05, 4.62340053e-08, 1.59350048e-07,\n", " 3.09463332e-07, 3.13393204e-07, 0.00000000e+00]])}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.calc(at)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the ```cutoff``` array is now all 1, because SOAP takes the cutoff into account when it computes the descriptor vector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now add a hydrogen atom to the structure" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "at.add_atoms((0.2,0.2,0.2),(1))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9, 285)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "at.calc_connect()\n", "desc.descriptor_sizes(at)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The descriptor sizes did not change! This is because the descriptor was set up above to only look at carbon atoms (Z=6). We need a new descriptor that takes account of H atoms. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "desc = descriptors.Descriptor(\"soap cutoff=3 l_max=4 n_max=4 atom_sigma=0.5 n_Z=2 Z={1 6} n_species=2 species_Z={1 6}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The specification of which atoms are used as SOAP centers is separate to the specification of which atoms are taken into account in the environment. The ``n_Z=2 Z={1 6}`` options specify that both H and C are to be taken as SOAP centers. The ```n_species=2 species_Z={1 6}``` options specify the atom types to be taken into account in the environment.\n", "\n", "Now the dimensionality of the SOAP descriptor goes up:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "181" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.n_dim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the size also increases to 9 (and the cross terms go up too), reflecting the fact that there are 9 atoms altogether. " ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9, 285)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.descriptor_sizes(at)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'cutoff': array([ 1., 1., 1., 1., 1., 1., 1., 1., 1.]),\n", " 'descriptor': array([[ 8.77557915e-02, 6.67877090e-06, 1.32368918e-06, ...,\n", " 5.39505036e-08, 3.31313515e-07, 0.00000000e+00],\n", " [ 1.77188829e-03, 3.74461483e-04, 2.74157244e-04, ...,\n", " 5.81842224e-08, 3.57313054e-07, 0.00000000e+00],\n", " [ 1.24011279e-04, 4.57421978e-05, 4.91840662e-05, ...,\n", " 5.81830007e-08, 3.57305552e-07, 0.00000000e+00],\n", " ..., \n", " [ 1.24011279e-04, 4.57421978e-05, 4.91840662e-05, ...,\n", " 5.81830007e-08, 3.57305552e-07, 0.00000000e+00],\n", " [ 3.76907877e-04, 4.04885591e-04, 3.44444944e-04, ...,\n", " 5.79365059e-08, 3.55791811e-07, 0.00000000e+00],\n", " [ 1.35807048e-01, 0.00000000e+00, 0.00000000e+00, ...,\n", " 3.44738745e-07, 1.39187207e-07, 0.00000000e+00]])}" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc.calc(at)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the same descriptor can be obtained not via python, but from the unix command line, using the ```quip``` program. The input needs to be an extended XYZ file, and the descriptor specification is identical to the above. \n", "\n", "So let's write out an xyz file:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "at.write(\"diamondH.xyz\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following command will print all the descriptor vectors, each vector on a line, which starts with the string ```DESC```\n", "\n", "```quip atoms_filename=diamondH.xyz descriptor_str=\"soap cutoff=3 l_max=4 n_max=4 atom_sigma=0.5 n_Z=2 Z={1 6} n_species=2 species_Z={1 6}\" ```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General_monomer example: benzene" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for a more interesting descriptor: a three-site benzene monomer" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "desc_monomer = descriptors.Descriptor('general_monomer signature={6 6 6} atom_ordercheck=F')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Three intramolecular distances = dimensionality 3:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc_monomer.n_dim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And a lot more permutations now:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc_monomer.n_perm" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [2, 1, 3],\n", " [1, 3, 2],\n", " [3, 1, 2],\n", " [2, 3, 1],\n", " [3, 2, 1]], dtype=int32)" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "desc_monomer.permutations()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load some test configurations" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true }, "outputs": [], "source": [ "benzat = quippy.AtomsList('benzene_frames.xyz')" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(40, 3, 648)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "benzat.pos.shape" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "for i in range(len(benzat)):\n", " benzat[i].set_cutoff(desc_monomer.cutoff()+0.5)\n", " benzat[i].calc_connect()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calling `calc` or any of the other methods on an `AtomsList` returns a list of results. Here we look at the results for the first configuration:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": true }, "outputs": [], "source": [ "res = desc_monomer.calc(benzat, grad=True)[0]" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(648, 3, 3)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.grad.shape" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }