{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Local Crystallography Analysis for Lattice Atomic Defects"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Authors: Artem Maksov, Maxim Ziatdinov*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*_Correspondence to: ziatdinovmax@gmail.com_\n",
    "\n",
    "_Date: 02/28/2018_    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook, we demonstrate how to study statistically significant deformation of the nearest neighborhood for each extracted defect structure using principal component analysis (PCA)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import modules"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import h5py\n",
    " \n",
    "import numpy as np\n",
    "from scipy import ndimage\n",
    "import cv2\n",
    "\n",
    "import matplotlib\n",
    "import matplotlib.pylab as plt\n",
    "import matplotlib.gridspec as gridspec\n",
    "import pylab as P\n",
    "\n",
    "from keras.models import load_model\n",
    "\n",
    "from scipy.spatial import cKDTree\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Structure of the defects"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. Finding coordinates"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use a pretrained convolutional neural network model for atomic coordinates identification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "atomgen = load_model('AtomGen_small5-8.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "totdefim = np.load('defim.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "totdefim2 = totdefim[:, :, :].reshape(totdefim.shape[0], totdefim.shape[1], totdefim.shape[2], 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "totpred = atomgen.predict(totdefim2).reshape(len(totdefim2), 32, 32, 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Extracting coordinates of atoms in all the defect structures"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def coord_edges(coordinates, dist_edge):\n",
    "    return [coordinates[0] > target_size[0] - dist_edge, coordinates[0] < dist_edge,\n",
    "            coordinates[1] > target_size[0] - dist_edge, coordinates[1] < dist_edge]\n",
    "    \n",
    "def get_coordinates(input_imgs, decoded_imgs, channel = 0, threshold = 0.75, dist_edge = 0):\n",
    "    d_list = list()\n",
    "    for i in range(input_imgs.shape[0]):\n",
    "        input_img = input_imgs[i,:,:,0]\n",
    "        decoded_img = decoded_imgs[i,:,:,channel]\n",
    "        _,thresh = cv2.threshold(decoded_img, threshold, 1, cv2.THRESH_BINARY) \n",
    "        labels, nlabels = ndimage.label(thresh)\n",
    "        coord = np.array(ndimage.center_of_mass(thresh, labels, np.arange(nlabels)+1))\n",
    "        coord = coord.reshape(coord.shape[0], 2)\n",
    "       \n",
    "        coord_to_rem = [idx for idx, c in enumerate(coord) if any(coord_edges(c, dist_edge))]\n",
    "        coord_to_rem = np.array(coord_to_rem, dtype = int)\n",
    "        coord = np.delete(coord, coord_to_rem, axis = 0)\n",
    "             \n",
    "        d_list.append(coord)\n",
    "                  \n",
    "    return d_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "target_size = (32, 32)\n",
    "atomic_coord = get_coordinates(totdefim2, totpred, channel = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. Finding structural elements"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To be able to compare structure of the images we need to:\n",
    "    1. Choose fixed origin - in this case it will be the center of extracted image which corresponds to our initial defect coordinate\n",
    "    2. Choose fixed number of atoms to work with - in this case we are going to look at 7\n",
    "    3. Find the average positions of atoms we are going to look at.\n",
    "    4. For each image, find the atomic coordinates corresponding to those.\n",
    "    \n",
    "First, let us look at how the code works:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define center of the image and number of neighbors to look at:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "clusters = np.load('clusters.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "imcenter = [15.5, 15.5]\n",
    "nn = 7"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We get the average image for a cluster and find the atoms to look at:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "numcluster = 1\n",
    "cl = totdefim[clusters == numcluster]\n",
    "cla = np.mean(cl, axis=0)\n",
    "cla2 = cla.reshape(1, cla.shape[0], cla.shape[1], 1)\n",
    "clapred = atomgen.predict(cla2).reshape(1, cla.shape[0], cla.shape[0], 2)\n",
    "cla_coord = get_coordinates(cla2, clapred, channel = 1)[0]\n",
    "\n",
    "T = cKDTree(cla_coord)\n",
    "d, ix = T.query(imcenter, nn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x21160911860>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21162c3c240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig441 = plt.figure(441)\n",
    "ax = fig441.add_subplot(121)\n",
    "ax.imshow(cla)\n",
    "ax.scatter(cla_coord[:, 1], cla_coord[:, 0], c='green')\n",
    "ax.scatter(cla_coord[ix, 1], cla_coord[ix, 0], c='red')\n",
    "ax = fig441.add_subplot(122)\n",
    "ax.imshow(clapred[0,:,:,1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, for an example of defect from this class, we can find nearest atoms to those of the average image:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "T2 = cKDTree(atomic_coord[0])\n",
    "d2, ix2 = T2.query(cla_coord[ix], 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x211629e2a20>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21161954c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig442 = plt.figure(442)\n",
    "ax = fig442.add_subplot(121)\n",
    "ax.imshow(cla)\n",
    "ax.scatter(cla_coord[:, 1], cla_coord[:, 0], c='green')\n",
    "ax.scatter(cla_coord[ix, 1], cla_coord[ix, 0], c='red')\n",
    "ax = fig442.add_subplot(122)\n",
    "ax.imshow(totdefim[0])\n",
    "ax.scatter(atomic_coord[0][:, 1], atomic_coord[0][:, 0], c='green' )\n",
    "ax.scatter(atomic_coord[0][ix2, 1], atomic_coord[0][ix2, 0], c='red' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This allows us to create a matrix of positions of the same atoms in each individual example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ndefs = (clusters == numcluster).sum()\n",
    "coormat = np.zeros(shape=(ndefs, 14))\n",
    "defcount = 0\n",
    "for i in range(len(atomic_coord)):\n",
    "    if clusters[i] == numcluster:\n",
    "        T2 = cKDTree(atomic_coord[i])\n",
    "        d2, ix2 = T2.query(cla_coord[ix], 1)\n",
    "        coormat[defcount, 0:7] = atomic_coord[i][ix2, 1]\n",
    "        coormat[defcount, 7:] = atomic_coord[i][ix2, 0]\n",
    "        defcount += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can compute mean values to ensure that this worked as planned:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "meancoor = coormat.mean(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21157765780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig443 = plt.figure(443)\n",
    "ax = fig443.add_subplot(111)\n",
    "ax.imshow(cla)\n",
    "ax.scatter(cla_coord[ix, 1], cla_coord[ix, 0], c='black')\n",
    "for i in range(7):\n",
    "    ax.scatter(meancoor[i], meancoor[i+7], c='red')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, black dots represent coordinates inferred from the average image, and red dots are the average values for coordinates found in all images of this cluster. As we can see, those 2 sets correspond very closely."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we will define a function that will do this analysis automatically:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def clustAnalysis(totdefim, clusters, atomic_coord,  atomgen, imcenter, nn, numcluster, thresh=0.5):\n",
    "    \n",
    "    \n",
    "    cl = totdefim[clusters == numcluster]\n",
    "    cla = np.mean(cl, axis=0)\n",
    "    cla2 = cla.reshape(1, cla.shape[0], cla.shape[1], 1)\n",
    "    clapred = atomgen.predict(cla2).reshape(1, cla.shape[0], cla.shape[0], 2)\n",
    "    cla_coord = get_coordinates(cla2, clapred, channel = 1, threshold=thresh)[0]\n",
    "\n",
    "    T = cKDTree(cla_coord)\n",
    "    d, ix = T.query(imcenter, nn)\n",
    "    \n",
    "    ndefs = (clusters == numcluster).sum()\n",
    "    coormat = np.zeros(shape=(ndefs, 14))\n",
    "    defcount = 0\n",
    "    for i in range(len(atomic_coord)):\n",
    "        if clusters[i] == numcluster:\n",
    "            T2 = cKDTree(atomic_coord[i])\n",
    "            d2, ix2 = T2.query(cla_coord[ix], 1)\n",
    "            coormat[defcount, 0:7] = atomic_coord[i][ix2, 1]\n",
    "            coormat[defcount, 7:] = atomic_coord[i][ix2, 0]\n",
    "            defcount += 1\n",
    "            \n",
    "    return cla, cla_coord[ix], coormat"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3. PCA on structures"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can perfrom PCA on resulting matrices for each cluster to identify most important variations in those coordinates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cla, cla_coord, coormat = clustAnalysis(totdefim, clusters, atomic_coord,  atomgen, imcenter, nn, 1, 0.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For each sample, we subtract center of mass of all atoms from each individual atoms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "coormat2 = np.zeros_like(coormat)\n",
    "for i, coor in enumerate(coormat):\n",
    "    coormat2[i, 0:7] = coor[0:7] - coor[0:7].mean()\n",
    "    coormat2[i, 7:] = coor[7:] - coor[7:].mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We use SVD to compute eigenvectors. The first one shows average positions, and later ones show directions of significant variance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "U, s, V = np.linalg.svd(coormat2, full_matrices=False)\n",
    "e_vec = s*V.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "colors = ['red', 'blue', 'green', 'black', 'magenta', 'cyan', 'darkviolet', 'darkorange', 'gold', 'pink']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAUpcGqsCbaO3AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x21162ae57f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# number of PCA components to display\n",
    "n_comp = 2\n",
    "fig444 = plt.figure(444, figsize=(5, 5))\n",
    "ax = fig444.add_subplot(111)\n",
    "ax.axis([-620, 620, - 620, 620])\n",
    "scale = 5\n",
    "for i in range(7):\n",
    "    ax.scatter(e_vec[i, 0], e_vec[i+7, 0], c='k')\n",
    "        \n",
    "    for i2 in range(n_comp):\n",
    "        P.arrow(e_vec[i, 0], e_vec[i + 7, 0], \n",
    "            scale * (e_vec[i, i2 + 1]), scale *( e_vec[i+7, i2 + 1]), \n",
    "            head_width=5, head_length=10, ec=colors[i2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "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.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
