{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3: Crystal Planes,X-ray Diffraction and Defects in Solids"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 1, Page number 3-19"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "glancing angle is 21 degrees\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "a=0.28;         #lattice spacing(nm)\n",
    "lamda=0.071;    #wavelength of X-rays(nm)\n",
    "h=1;\n",
    "k=1;\n",
    "l=0;\n",
    "n=2;\n",
    "\n",
    "#Calculation\n",
    "d=a/math.sqrt(h**2+k**2+l**2);           \n",
    "sintheta=n*lamda/(2*d);\n",
    "theta=math.asin(sintheta)*180/math.pi;           #glancing angle(degrees)\n",
    "\n",
    "#Result\n",
    "print \"glancing angle is\",int(theta),\"degrees\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 2, Page number 3-19"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "wavelength of X-rays is 0.0842 nm\n",
      "maximum order of diffraction is 7\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "d=0.282;       #lattice spacing(nm)\n",
    "theta=(8+(35/60))*math.pi/180;     #glancing angle(radian)\n",
    "n=1;           #order\n",
    "\n",
    "#Calculation\n",
    "lamda=2*d*math.sin(theta)/n;    #wavelength of X-rays(nm)\n",
    "n=2*d/lamda;                    #maximum order of diffraction\n",
    "\n",
    "#Result\n",
    "print \"wavelength of X-rays is\",round(lamda,4),\"nm\"\n",
    "print \"maximum order of diffraction is\",int(round(n))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 3, Page number 3-20"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fraction of vacancy sites is 8.466 *10**-7\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "T1=773;            #temperature(K)\n",
    "T2=1273;           #temperature(K)\n",
    "f=10**-10;         #fraction of vacant sites\n",
    "\n",
    "#Calculation\n",
    "x=round(T1*math.log(f)/T2,3);\n",
    "N=math.exp(x);    #fraction of vacancy sites\n",
    "\n",
    "#Result\n",
    "print \"fraction of vacancy sites is\",round(N*10**7,3),\"*10**-7\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 4, Page number 3-21"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "h1=1;\n",
    "k1=0;\n",
    "l1=0;    #miller indices of (100)\n",
    "h2=1;\n",
    "k2=1;\n",
    "l2=0;    #miller indices of (110)\n",
    "h3=1;\n",
    "k3=1;\n",
    "l3=1;    #miller indices of (111)\n",
    "a=1;     #assume\n",
    "\n",
    "#Calculation\n",
    "d100=a/math.sqrt(h1**2+k1**2+l1**2);    #spacing(nm)\n",
    "d110=a/math.sqrt(h2**2+k2**2+l2**2);    #spacing(nm)\n",
    "d111=a/math.sqrt(h3**2+k3**2+l3**2);    #spacing(nm)\n",
    "\n",
    "def lcm(x, y):\n",
    "    if x > y:\n",
    "        greater = x\n",
    "    else:\n",
    "        greater = y\n",
    "    while(True):\n",
    "        if((greater % x == 0) and (greater % y == 0)):\n",
    "            lcm = greater\n",
    "            break\n",
    "        greater += 1\n",
    "        \n",
    "    return lcm\n",
    "\n",
    "lcm=lcm(1/d110,1/d111);\n",
    "d100=d100*lcm;\n",
    "d110=d110*lcm;\n",
    "d111=d111*lcm;      #ratio d100:d110:d111\n",
    "\n",
    "#Result\n",
    "print \"ratio d100:d110:d111 is\",d100/math.sqrt(6),\"*math.sqrt(6)\",d110/math.sqrt(3),\"*math.sqrt(3)\",d111/math.sqrt(2),\"*math.sqrt(2)\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 5, Page number 3-21"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "n=1;     #order\n",
    "theta=38.2*math.pi/180;     #glancing angle(radian)\n",
    "lamda=1.54;                 #wavelength(angstrom)\n",
    "h=2;\n",
    "k=2;\n",
    "l=0;\n",
    "\n",
    "#Calculation\n",
    "a=math.sqrt(h**2+k**2+l**2);\n",
    "d=n*lamda*a/(2*math.sin(theta));       #lattice parameter(angstrom)\n",
    "\n",
    "#Result\n",
    "print \"lattice parameter is\",round(d,3),\"angstrom\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 6, Page number 3-22"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "maximum order of diffraction is 2\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "d=1.6;       #lattice spacing(angstrom)\n",
    "theta=90*math.pi/180;     #glancing angle(radian)\n",
    "lamda=1.5;    #wavelength of X-rays(angstrom)\n",
    "\n",
    "#Calculation\n",
    "n=2*d*math.sin(theta)/lamda;       #maximum order of diffraction \n",
    "\n",
    "#Result\n",
    "print \"maximum order of diffraction is\",int(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 7, Page number 3-22"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length is 0.287 *10**-9 m\n",
      "volume of unit cell is 0.02366 *10**-27 m**3\n",
      "answer for volume given in the book varies due to rounding off errors\n",
      "radius of atom is 0.1243 *10**-9 m\n"
     ]
    }
   ],
   "source": [
    "#importing modules  \n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "d=0.203*10**-9;       #lattice spacing(m)\n",
    "h=1;\n",
    "k=1;\n",
    "l=0;          #miller indices of (110)\n",
    "lamda=1.5;    #wavelength of X-rays(angstrom)\n",
    "\n",
    "#Calculation\n",
    "a=d*math.sqrt(h**2+k**2+l**2);     #length(m)\n",
    "V=a**3;       #volume of unit cell(m**3)\n",
    "r=math.sqrt(3)*a/4;     #radius of atom(m)\n",
    "\n",
    "#Result\n",
    "print \"length is\",round(a*10**9,3),\"*10**-9 m\"\n",
    "print \"volume of unit cell is\",round(V*10**27,5),\"*10**-27 m**3\"\n",
    "print \"answer for volume given in the book varies due to rounding off errors\"\n",
    "print \"radius of atom is\",round(r*10**9,4),\"*10**-9 m\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 8, Page number 3-22"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "maximum order of diffraction is 2\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "d=1.6;       #lattice spacing(angstrom)\n",
    "theta=90*math.pi/180;     #glancing angle(radian)\n",
    "lamda=1.5;    #wavelength of X-rays(angstrom)\n",
    "\n",
    "#Calculation\n",
    "n=2*d*math.sin(theta)/lamda;       #maximum order of diffraction \n",
    "\n",
    "#Result\n",
    "print \"maximum order of diffraction is\",int(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 9, Page number 3-23"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "glancing angle is 20 degrees 42 minutes 17 seconds\n",
      "answer in the book is wrong\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "a=0.26;         #lattice spacing(nm)\n",
    "lamda=0.065;    #wavelength of X-rays(nm)\n",
    "h=1;\n",
    "k=1;\n",
    "l=0;\n",
    "n=2;\n",
    "\n",
    "#Calculation\n",
    "d=a/math.sqrt(h**2+k**2+l**2);           \n",
    "sintheta=n*lamda/(2*d);\n",
    "theta=math.asin(sintheta)*180/math.pi;           #glancing angle(degrees)\n",
    "thetad=int(theta);                               #glancing angle(degrees)  \n",
    "thetam=(theta-thetad)*60;                        #glancing angle(minutes)\n",
    "thetas=60*(thetam-int(thetam));                  #glancing angle(seconds)\n",
    "\n",
    "#Result\n",
    "print \"glancing angle is\",thetad,\"degrees\",int(thetam),\"minutes\",int(thetas),\"seconds\"\n",
    "print \"answer in the book is wrong\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 10, Page number 3-23"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cube edge of unit cell is 4.055 angstrom\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "n=1;     #order\n",
    "theta=19.2*math.pi/180;     #glancing angle(radian)\n",
    "lamda=1.54;                 #wavelength(angstrom)\n",
    "h=1;\n",
    "k=1;\n",
    "l=1;\n",
    "\n",
    "#Calculation\n",
    "d=n*lamda/(2*math.sin(theta));       #lattice parameter(angstrom)\n",
    "a=d*math.sqrt(h**2+k**2+l**2);       #cube edge of unit cell(angstrom)\n",
    "\n",
    "#Result\n",
    "print \"cube edge of unit cell is\",round(a,3),\"angstrom\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 11, Page number 3-24"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lattice parameter is 3.522 angstrom\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "n=1;     #order\n",
    "theta=38.2*math.pi/180;     #glancing angle(radian)\n",
    "lamda=1.54;                 #wavelength(angstrom)\n",
    "h=2;\n",
    "k=2;\n",
    "l=0;\n",
    "\n",
    "#Calculation\n",
    "d=n*lamda/(2*math.sin(theta));       #lattice parameter(angstrom)\n",
    "a=d*math.sqrt(h**2+k**2+l**2);       #lattice parameter(angstrom)\n",
    "\n",
    "#Result\n",
    "print \"lattice parameter is\",round(a,3),\"angstrom\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 12, Page number 3-24"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "interplanar spacing for (111) is 0.208 nm\n",
      "interplanar spacing for (321) is 0.096 nm\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "a=0.36;       #cube edge of unit cell(nm)\n",
    "h1=1;\n",
    "k1=1;\n",
    "l1=1;\n",
    "h2=3;\n",
    "k2=2;\n",
    "l2=1;\n",
    "\n",
    "#Calculation\n",
    "d1=a/math.sqrt(h1**2+k1**2+l1**2);       #interplanar spacing for (111)(nm)\n",
    "d2=a/math.sqrt(h2**2+k2**2+l2**2);       #interplanar spacing for (321)(nm)\n",
    "\n",
    "#Result\n",
    "print \"interplanar spacing for (111) is\",round(d1,3),\"nm\"\n",
    "print \"interplanar spacing for (321) is\",round(d2,3),\"nm\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 13, Page number 3-25"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lattice spacing is 3.575 angstrom\n",
      "glancing angle for 3rd order is 16 degrees 27.1 minutes\n",
      "answer for minutes given in the book varies due to rounding off errors\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "theta=(5+(25/60))*math.pi/180;     #glancing angle(radian)\n",
    "lamda=0.675;   #wavelength of X-rays(angstrom)\n",
    "n1=1;                  #order\n",
    "n3=3;                  #order \n",
    "\n",
    "#Calculation\n",
    "d=n1*lamda/(2*math.sin(theta));       #lattice spacing(angstrom)\n",
    "d=round(d,3);\n",
    "theta3=math.asin(n3*lamda/(2*d))*180/math.pi;    #glancing angle for 3rd order(degrees)\n",
    "theta3d=int(theta3);                             #glancing angle for 3rd order(degrees)  \n",
    "theta3m=(theta3-theta3d)*60;                     #glancing angle for 3rd order(minutes)\n",
    "\n",
    "#Result\n",
    "print \"lattice spacing is\",d,\"angstrom\"\n",
    "print \"glancing angle for 3rd order is\",theta3d,\"degrees\",round(theta3m,1),\"minutes\"\n",
    "print \"answer for minutes given in the book varies due to rounding off errors\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example number 14, Page number 3-25"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "glancing angle is 23 degrees 56 minutes 31 seconds\n",
      "answer given in the book is wrong\n"
     ]
    }
   ],
   "source": [
    "#importing modules\n",
    "import math\n",
    "from __future__ import division\n",
    "\n",
    "#Variable declaration\n",
    "d=3.04;         #interplanar spacing(angstrom)             \n",
    "lamda=0.79;    #wavelength of X-rays(angstrom)\n",
    "n=3;\n",
    "\n",
    "#Calculation\n",
    "sintheta=n*lamda/(2*d);\n",
    "thetad=math.asin(sintheta)*180/math.pi;           #glancing angle(degrees)\n",
    "thetam=(theta-int(theta))*60;                        #glancing angle(minutes)\n",
    "thetas=60*(thetam-int(thetam));                  #glancing angle(seconds)\n",
    "\n",
    "#Result\n",
    "print \"glancing angle is\",int(round(thetad)),\"degrees\",int(thetam),\"minutes\",int(thetas),\"seconds\"\n",
    "print \"answer given in the book is wrong\""
   ]
  }
 ],
 "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.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}