Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "#Definición de librerías.\n",
- "import numpy as np\n",
- "import sympy as sym\n",
- "import math as ma\n",
- "from tabulate import tabulate\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Definición de los cálculos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "def Theta(dos_theta):\n",
- " return dos_theta/2\n",
- "\n",
- "def Agregar_Theta(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append((Theta(Array[0][i])))\n",
- " Array2.append(Aux)\n",
- " \n",
- "def Sin_theta(theta):\n",
- " return sym.sin(theta).evalf()\n",
- "\n",
- "def Agregar_Sin_theta(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array2[2])):\n",
- " Aux.append(round((Sin_theta(np.radians(Array2[1][i]))),3))\n",
- " Array2.append(Aux)\n",
- "\n",
- "def Sin_theta2(theta):\n",
- " return (sym.sin(np.radians(theta))**2).evalf()\n",
- "\n",
- "def Agregar_Sin_theta2(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(round((Sin_theta2((Array2[2][i]))),3))\n",
- " Array2.append(Aux)\n",
- " return min(Aux)\n",
- "\n",
- "def Division(sin_theta2,Min):\n",
- " return sin_theta2/Min\n",
- "\n",
- "def Agregar_Division(Array,Min,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(round((Division((Array2[4][i]),Min)),3))\n",
- " Array2.append(Aux)\n",
- "\n",
- "def Agregar_Pico(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(i+1)\n",
- " Array2.append(Aux)\n",
- " \n",
- "def Agregar_2theta(Array,Array2):\n",
- " Array2.append(Array[0])\n",
- " \n",
- "def Agregar_x2(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(round(2*((Array2[5][i]))))\n",
- " Array2.append(Aux)\n",
- " \n",
- "def Agregar_x3(Array,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(round(3*((Array2[5][i]))))\n",
- " Array2.append(Aux)\n",
- "\n",
- " \n",
- "def Agregar_Miller(Array,Array2):\n",
- " Aux = []\n",
- " Miller_BCC = [\"(110)\",\"(200)\",\"(211)\",\"(220)\",\"(310)\",\"(222)\",\"(321)\",\"(400)\"]\n",
- " Num_BCC = [2,4,6,8,10,12,14,16]\n",
- " Miller_FCC = [\"(111)\",\"(200)\",\"(220)\",\"(311)\",\"(222)\",\"(400)\",\"(402)\",\"(422)\"]\n",
- " Num_FCC = [3,4,8,11,12,16,19]\n",
- " Cont_BCC = 0\n",
- " Cont_FCC = 0\n",
- " for i in range(len(Array[0])):\n",
- " if((Array2[6][i]) == Num_BCC[i]):\n",
- " Cont_BCC +=1\n",
- " if((Array2[7][i]) == Num_FCC[i]):\n",
- " Cont_FCC +=1\n",
- " if (Cont_BCC > Cont_FCC):\n",
- " print(\"La estrcutura es BCC\")\n",
- " Miller = Miller_BCC\n",
- " else:\n",
- " print(\"La estrcutura es FCC\")\n",
- " Miller = Miller_FCC\n",
- " #Agregar\n",
- " for i in range(len(Array[0])):\n",
- " Aux.append(Miller[i])\n",
- " Array2.append(Aux)\n",
- " \n",
- "def Agregar_todo(Arr,Array2):\n",
- " Agregar_Pico(Arr,Array2)\n",
- " Agregar_2theta(Arr,Array2)\n",
- " Agregar_Theta(Arr,Array2)\n",
- " Agregar_Sin_theta(Arr,Array2)\n",
- " Min = Agregar_Sin_theta2(Arr,Array2)\n",
- " #print(Min)\n",
- " Agregar_Division(Arr,Min,Array2)\n",
- " Agregar_x2(Arr,Array2)\n",
- " Agregar_x3(Arr,Array2)\n",
- " Agregar_Miller(Arr,Array2)\n",
- " \n",
- " "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Identificar la estrucutura cristalina, así como los índices de Miller"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Aquí se debe de ingresar los datos obtenidos por el difractor de rayos X."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "Datos_2theta = [[38.377,44.600,64.99,78.082,82.331]]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "La estrcutura es FCC\n",
- " Pico 2theta theta sin(theta) sin^2(theta) División (CS) x2 (BCC) x3 (FCC) Miller\n",
- "------ -------- ------- ------------ -------------- --------------- ---------- ---------- --------\n",
- " 1 38.377 19.1885 0.621 0.108 1 2 3 (111)\n",
- " 2 44.6 22.3 0.702 0.144 1.333 3 4 (200)\n",
- " 3 64.99 32.495 0.906 0.289 2.676 5 8 (220)\n",
- " 4 78.082 39.041 0.978 0.397 3.676 7 11 (311)\n",
- " 5 82.331 41.1655 0.991 0.433 4.009 8 12 (222)\n"
- ]
- }
- ],
- "source": [
- "Array2 = []\n",
- "Agregar_todo(Datos_2theta,Array2)\n",
- "Array2 = np.transpose(Array2)\n",
- "header = [\"Pico\", \"2theta\", \"theta\",\"sin(theta)\", \"sin^2(theta)\", \"División (CS)\",\"x2 (BCC)\", \"x3 (FCC)\", \"Miller\"]\n",
- "print(tabulate(Array2, headers=header))\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Definición de Cálculos"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "def Par(a):\n",
- " if(a%2==0):\n",
- " return True\n",
- " else:\n",
- " return False\n",
- "\n",
- "def Todos_par(A):\n",
- " Cont = 0\n",
- " for i in A:\n",
- " if (Par(int(i)) == True):\n",
- " Cont += 1\n",
- " if (Cont == 3):\n",
- " return True\n",
- " else:\n",
- " return False\n",
- "\n",
- "def Todos_impar(A):\n",
- " Cont = 0\n",
- " for i in A:\n",
- " if (Par(int(i)) == False):\n",
- " Cont += 1\n",
- " if (Cont == 3):\n",
- " return True\n",
- " else:\n",
- " return False\n",
- "\n",
- "def Suma_par(A):\n",
- " Cont = 0\n",
- " C_Aux = 0\n",
- " for i in A:\n",
- " C_Aux += int(i)\n",
- " if(Par(C_Aux) == True):\n",
- " return True\n",
- " else:\n",
- " return False\n",
- "\n",
- "def Suma_impar(A):\n",
- " Cont = 0\n",
- " C_Aux = 0\n",
- " for i in A:\n",
- " C_Aux += int(i)\n",
- " if(Par(C_Aux) == False):\n",
- " return True\n",
- " else:\n",
- " return False\n",
- " \n",
- "def Indentificar_Estructura(Array):\n",
- " Arr = []\n",
- " Cont_BCC = 0\n",
- " Cont_FCC = 0\n",
- " #Copiar Array a Arr sin modificar el original.\n",
- " for i in range(len(Array)):\n",
- " Arr.append(Array[i].replace(\"(\",\"\").replace(\")\",\"\"))\n",
- " for i in range(len(Arr)):\n",
- " if ((Todos_par(Arr[i]) == True) or (Todos_impar(Arr[i]) == True)):\n",
- " Cont_FCC += 1\n",
- " if (Suma_par(Arr[i]) == True):\n",
- " Cont_BCC += 1\n",
- " if(Cont_BCC > Cont_FCC):\n",
- " #print(\"La estructura cristalina corresponde a un BCC\")\n",
- " return \"BCC\"\n",
- " else:\n",
- " #print(\"La estructura cristalina corresponde a un FCC\")\n",
- " return \"FCC\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "scrolled": true
- },
- "outputs": [],
- "source": [
- "def Distancia_interplanar(n,l,theta):\n",
- " return (n*l)/(2*sym.sin(np.radians(theta))).evalf()\n",
- "\n",
- "def Agregar_Distancia_interplanar(n,l,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array2[0])):\n",
- " Aux.append(round(Distancia_interplanar(n,l,float(Array2[2][i])),3))\n",
- " return Aux\n",
- "\n",
- "def A_0(d,Array):\n",
- " Aux = (Array.replace(\"(\",\"\").replace(\")\",\"\"))\n",
- " return round(d*sym.sqrt(float(Aux[0])**2 + float(Aux[1])**2 + float(Aux[2])**2).evalf(),3)\n",
- "\n",
- "\n",
- "def Agregar_A_0(d,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array2[0])):\n",
- " Aux.append(round(A_0(d[i],Array2[8][i]),3))\n",
- " return Aux\n",
- "\n",
- "def Radio(a,Array):\n",
- " if(Indentificar_Estructura(Array) == \"FCC\"):\n",
- " return ((a*sym.sqrt(3))/(4)).evalf()\n",
- " else:\n",
- " return ((a*sym.sqrt(2))/(4)).evalf()\n",
- "\n",
- "def Agregar_Radio(d,Array2):\n",
- " Aux = []\n",
- " for i in range(len(Array2)):\n",
- " Aux.append(round(Radio(d[i],Array2),3))\n",
- " return Aux\n",
- " \n",
- " \n",
- "def Tabla_2(Array2,n,l):\n",
- " Array2 = np.transpose(Array2)\n",
- " Tabla = []\n",
- " #Anexar Pico.\n",
- " Tabla.append(Array2[0])\n",
- " #Anexar Miller.\n",
- " #print(Array2[8])\n",
- " Tabla.append(Array2[8])\n",
- " #Anexar theta.\n",
- " Tabla.append(Array2[2])\n",
- " #Anexar Distancia inter planar.\n",
- " Tabla.append(Agregar_Distancia_interplanar(n,l,Array2))\n",
- " Tabla.append(Agregar_A_0(Tabla[3],Array2))\n",
- " Tabla.append(Agregar_Radio(Tabla[4],Tabla[1]))\n",
- " Tabla = np.transpose(Tabla)\n",
- " return Tabla"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Identificación de la distancia interplanar a partir de los índices de Miller.\n",
- "\n",
- "De la Ley de Bragg se tiene que:\n",
- "\n",
- "$n \\lambda = 2 d \\sin (\\theta)$\n",
- "\n",
- "Despejando la distancia interplanar se tiene:\n",
- "\n",
- "$ d = \\frac{n \\lambda}{2\\sin(\\theta)}$\n",
- "\n",
- "# Determinar el parámetro de red.\n",
- "\n",
- "$ a_0 = d\\sqrt{h^2+k^2+l^2} $ \n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Identificación de Estructura Cristalina a partir de los índices de Miller."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Corresponde a una estructura FCC\n"
- ]
- }
- ],
- "source": [
- "Array = [\"(111)\",\"(200)\",\"(220)\",\"(311)\",\"(222)\",\"(400)\",\"(402)\",\"(422)\"]\n",
- "print(\"Corresponde a una estructura \" + Indentificar_Estructura(Array))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " Pico Miller theta d a_0 r\n",
- "------ -------- ------- ----- ----- -----\n",
- " 1 (111) 19.1885 0.234 0.405 0.175\n",
- " 2 (200) 22.3 0.203 0.406 0.176\n",
- " 3 (220) 32.495 0.143 0.404 0.175\n",
- " 4 (311) 39.041 0.122 0.405 0.175\n",
- " 5 (222) 41.1655 0.117 0.405 0.175\n"
- ]
- }
- ],
- "source": [
- "#Orden de difracción\n",
- "n = 1\n",
- "#Longitud de onda en nm.\n",
- "l = 0.154060 \n",
- "header = [\"Pico\", \"Miller\", \"theta\", \"d\", \"a_0\", \"r\"]\n",
- "S = tabulate(Tabla_2(Array2,n,l), headers=header)\n",
- "print(S)"
- ]
- }
- ],
- "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.4"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
Add Comment
Please, Sign In to add comment