Guest User

Untitled

a guest
Feb 15th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.11 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 1,
  6. "metadata": {},
  7. "outputs": [],
  8. "source": [
  9. "#Definición de librerías.\n",
  10. "import numpy as np\n",
  11. "import sympy as sym\n",
  12. "import math as ma\n",
  13. "from tabulate import tabulate\n"
  14. ]
  15. },
  16. {
  17. "cell_type": "markdown",
  18. "metadata": {},
  19. "source": [
  20. "# Definición de los cálculos"
  21. ]
  22. },
  23. {
  24. "cell_type": "code",
  25. "execution_count": 2,
  26. "metadata": {},
  27. "outputs": [],
  28. "source": [
  29. "def Theta(dos_theta):\n",
  30. " return dos_theta/2\n",
  31. "\n",
  32. "def Agregar_Theta(Array,Array2):\n",
  33. " Aux = []\n",
  34. " for i in range(len(Array[0])):\n",
  35. " Aux.append((Theta(Array[0][i])))\n",
  36. " Array2.append(Aux)\n",
  37. " \n",
  38. "def Sin_theta(theta):\n",
  39. " return sym.sin(theta).evalf()\n",
  40. "\n",
  41. "def Agregar_Sin_theta(Array,Array2):\n",
  42. " Aux = []\n",
  43. " for i in range(len(Array2[2])):\n",
  44. " Aux.append(round((Sin_theta(np.radians(Array2[1][i]))),3))\n",
  45. " Array2.append(Aux)\n",
  46. "\n",
  47. "def Sin_theta2(theta):\n",
  48. " return (sym.sin(np.radians(theta))**2).evalf()\n",
  49. "\n",
  50. "def Agregar_Sin_theta2(Array,Array2):\n",
  51. " Aux = []\n",
  52. " for i in range(len(Array[0])):\n",
  53. " Aux.append(round((Sin_theta2((Array2[2][i]))),3))\n",
  54. " Array2.append(Aux)\n",
  55. " return min(Aux)\n",
  56. "\n",
  57. "def Division(sin_theta2,Min):\n",
  58. " return sin_theta2/Min\n",
  59. "\n",
  60. "def Agregar_Division(Array,Min,Array2):\n",
  61. " Aux = []\n",
  62. " for i in range(len(Array[0])):\n",
  63. " Aux.append(round((Division((Array2[4][i]),Min)),3))\n",
  64. " Array2.append(Aux)\n",
  65. "\n",
  66. "def Agregar_Pico(Array,Array2):\n",
  67. " Aux = []\n",
  68. " for i in range(len(Array[0])):\n",
  69. " Aux.append(i+1)\n",
  70. " Array2.append(Aux)\n",
  71. " \n",
  72. "def Agregar_2theta(Array,Array2):\n",
  73. " Array2.append(Array[0])\n",
  74. " \n",
  75. "def Agregar_x2(Array,Array2):\n",
  76. " Aux = []\n",
  77. " for i in range(len(Array[0])):\n",
  78. " Aux.append(round(2*((Array2[5][i]))))\n",
  79. " Array2.append(Aux)\n",
  80. " \n",
  81. "def Agregar_x3(Array,Array2):\n",
  82. " Aux = []\n",
  83. " for i in range(len(Array[0])):\n",
  84. " Aux.append(round(3*((Array2[5][i]))))\n",
  85. " Array2.append(Aux)\n",
  86. "\n",
  87. " \n",
  88. "def Agregar_Miller(Array,Array2):\n",
  89. " Aux = []\n",
  90. " Miller_BCC = [\"(110)\",\"(200)\",\"(211)\",\"(220)\",\"(310)\",\"(222)\",\"(321)\",\"(400)\"]\n",
  91. " Num_BCC = [2,4,6,8,10,12,14,16]\n",
  92. " Miller_FCC = [\"(111)\",\"(200)\",\"(220)\",\"(311)\",\"(222)\",\"(400)\",\"(402)\",\"(422)\"]\n",
  93. " Num_FCC = [3,4,8,11,12,16,19]\n",
  94. " Cont_BCC = 0\n",
  95. " Cont_FCC = 0\n",
  96. " for i in range(len(Array[0])):\n",
  97. " if((Array2[6][i]) == Num_BCC[i]):\n",
  98. " Cont_BCC +=1\n",
  99. " if((Array2[7][i]) == Num_FCC[i]):\n",
  100. " Cont_FCC +=1\n",
  101. " if (Cont_BCC > Cont_FCC):\n",
  102. " print(\"La estrcutura es BCC\")\n",
  103. " Miller = Miller_BCC\n",
  104. " else:\n",
  105. " print(\"La estrcutura es FCC\")\n",
  106. " Miller = Miller_FCC\n",
  107. " #Agregar\n",
  108. " for i in range(len(Array[0])):\n",
  109. " Aux.append(Miller[i])\n",
  110. " Array2.append(Aux)\n",
  111. " \n",
  112. "def Agregar_todo(Arr,Array2):\n",
  113. " Agregar_Pico(Arr,Array2)\n",
  114. " Agregar_2theta(Arr,Array2)\n",
  115. " Agregar_Theta(Arr,Array2)\n",
  116. " Agregar_Sin_theta(Arr,Array2)\n",
  117. " Min = Agregar_Sin_theta2(Arr,Array2)\n",
  118. " #print(Min)\n",
  119. " Agregar_Division(Arr,Min,Array2)\n",
  120. " Agregar_x2(Arr,Array2)\n",
  121. " Agregar_x3(Arr,Array2)\n",
  122. " Agregar_Miller(Arr,Array2)\n",
  123. " \n",
  124. " "
  125. ]
  126. },
  127. {
  128. "cell_type": "markdown",
  129. "metadata": {},
  130. "source": [
  131. "# Identificar la estrucutura cristalina, así como los índices de Miller"
  132. ]
  133. },
  134. {
  135. "cell_type": "markdown",
  136. "metadata": {},
  137. "source": [
  138. "Aquí se debe de ingresar los datos obtenidos por el difractor de rayos X."
  139. ]
  140. },
  141. {
  142. "cell_type": "code",
  143. "execution_count": 3,
  144. "metadata": {},
  145. "outputs": [],
  146. "source": [
  147. "Datos_2theta = [[38.377,44.600,64.99,78.082,82.331]]"
  148. ]
  149. },
  150. {
  151. "cell_type": "code",
  152. "execution_count": 4,
  153. "metadata": {
  154. "scrolled": true
  155. },
  156. "outputs": [
  157. {
  158. "name": "stdout",
  159. "output_type": "stream",
  160. "text": [
  161. "La estrcutura es FCC\n",
  162. " Pico 2theta theta sin(theta) sin^2(theta) División (CS) x2 (BCC) x3 (FCC) Miller\n",
  163. "------ -------- ------- ------------ -------------- --------------- ---------- ---------- --------\n",
  164. " 1 38.377 19.1885 0.621 0.108 1 2 3 (111)\n",
  165. " 2 44.6 22.3 0.702 0.144 1.333 3 4 (200)\n",
  166. " 3 64.99 32.495 0.906 0.289 2.676 5 8 (220)\n",
  167. " 4 78.082 39.041 0.978 0.397 3.676 7 11 (311)\n",
  168. " 5 82.331 41.1655 0.991 0.433 4.009 8 12 (222)\n"
  169. ]
  170. }
  171. ],
  172. "source": [
  173. "Array2 = []\n",
  174. "Agregar_todo(Datos_2theta,Array2)\n",
  175. "Array2 = np.transpose(Array2)\n",
  176. "header = [\"Pico\", \"2theta\", \"theta\",\"sin(theta)\", \"sin^2(theta)\", \"División (CS)\",\"x2 (BCC)\", \"x3 (FCC)\", \"Miller\"]\n",
  177. "print(tabulate(Array2, headers=header))\n"
  178. ]
  179. },
  180. {
  181. "cell_type": "markdown",
  182. "metadata": {},
  183. "source": [
  184. "# Definición de Cálculos"
  185. ]
  186. },
  187. {
  188. "cell_type": "code",
  189. "execution_count": 5,
  190. "metadata": {},
  191. "outputs": [],
  192. "source": [
  193. "def Par(a):\n",
  194. " if(a%2==0):\n",
  195. " return True\n",
  196. " else:\n",
  197. " return False\n",
  198. "\n",
  199. "def Todos_par(A):\n",
  200. " Cont = 0\n",
  201. " for i in A:\n",
  202. " if (Par(int(i)) == True):\n",
  203. " Cont += 1\n",
  204. " if (Cont == 3):\n",
  205. " return True\n",
  206. " else:\n",
  207. " return False\n",
  208. "\n",
  209. "def Todos_impar(A):\n",
  210. " Cont = 0\n",
  211. " for i in A:\n",
  212. " if (Par(int(i)) == False):\n",
  213. " Cont += 1\n",
  214. " if (Cont == 3):\n",
  215. " return True\n",
  216. " else:\n",
  217. " return False\n",
  218. "\n",
  219. "def Suma_par(A):\n",
  220. " Cont = 0\n",
  221. " C_Aux = 0\n",
  222. " for i in A:\n",
  223. " C_Aux += int(i)\n",
  224. " if(Par(C_Aux) == True):\n",
  225. " return True\n",
  226. " else:\n",
  227. " return False\n",
  228. "\n",
  229. "def Suma_impar(A):\n",
  230. " Cont = 0\n",
  231. " C_Aux = 0\n",
  232. " for i in A:\n",
  233. " C_Aux += int(i)\n",
  234. " if(Par(C_Aux) == False):\n",
  235. " return True\n",
  236. " else:\n",
  237. " return False\n",
  238. " \n",
  239. "def Indentificar_Estructura(Array):\n",
  240. " Arr = []\n",
  241. " Cont_BCC = 0\n",
  242. " Cont_FCC = 0\n",
  243. " #Copiar Array a Arr sin modificar el original.\n",
  244. " for i in range(len(Array)):\n",
  245. " Arr.append(Array[i].replace(\"(\",\"\").replace(\")\",\"\"))\n",
  246. " for i in range(len(Arr)):\n",
  247. " if ((Todos_par(Arr[i]) == True) or (Todos_impar(Arr[i]) == True)):\n",
  248. " Cont_FCC += 1\n",
  249. " if (Suma_par(Arr[i]) == True):\n",
  250. " Cont_BCC += 1\n",
  251. " if(Cont_BCC > Cont_FCC):\n",
  252. " #print(\"La estructura cristalina corresponde a un BCC\")\n",
  253. " return \"BCC\"\n",
  254. " else:\n",
  255. " #print(\"La estructura cristalina corresponde a un FCC\")\n",
  256. " return \"FCC\""
  257. ]
  258. },
  259. {
  260. "cell_type": "code",
  261. "execution_count": 6,
  262. "metadata": {
  263. "scrolled": true
  264. },
  265. "outputs": [],
  266. "source": [
  267. "def Distancia_interplanar(n,l,theta):\n",
  268. " return (n*l)/(2*sym.sin(np.radians(theta))).evalf()\n",
  269. "\n",
  270. "def Agregar_Distancia_interplanar(n,l,Array2):\n",
  271. " Aux = []\n",
  272. " for i in range(len(Array2[0])):\n",
  273. " Aux.append(round(Distancia_interplanar(n,l,float(Array2[2][i])),3))\n",
  274. " return Aux\n",
  275. "\n",
  276. "def A_0(d,Array):\n",
  277. " Aux = (Array.replace(\"(\",\"\").replace(\")\",\"\"))\n",
  278. " return round(d*sym.sqrt(float(Aux[0])**2 + float(Aux[1])**2 + float(Aux[2])**2).evalf(),3)\n",
  279. "\n",
  280. "\n",
  281. "def Agregar_A_0(d,Array2):\n",
  282. " Aux = []\n",
  283. " for i in range(len(Array2[0])):\n",
  284. " Aux.append(round(A_0(d[i],Array2[8][i]),3))\n",
  285. " return Aux\n",
  286. "\n",
  287. "def Radio(a,Array):\n",
  288. " if(Indentificar_Estructura(Array) == \"FCC\"):\n",
  289. " return ((a*sym.sqrt(3))/(4)).evalf()\n",
  290. " else:\n",
  291. " return ((a*sym.sqrt(2))/(4)).evalf()\n",
  292. "\n",
  293. "def Agregar_Radio(d,Array2):\n",
  294. " Aux = []\n",
  295. " for i in range(len(Array2)):\n",
  296. " Aux.append(round(Radio(d[i],Array2),3))\n",
  297. " return Aux\n",
  298. " \n",
  299. " \n",
  300. "def Tabla_2(Array2,n,l):\n",
  301. " Array2 = np.transpose(Array2)\n",
  302. " Tabla = []\n",
  303. " #Anexar Pico.\n",
  304. " Tabla.append(Array2[0])\n",
  305. " #Anexar Miller.\n",
  306. " #print(Array2[8])\n",
  307. " Tabla.append(Array2[8])\n",
  308. " #Anexar theta.\n",
  309. " Tabla.append(Array2[2])\n",
  310. " #Anexar Distancia inter planar.\n",
  311. " Tabla.append(Agregar_Distancia_interplanar(n,l,Array2))\n",
  312. " Tabla.append(Agregar_A_0(Tabla[3],Array2))\n",
  313. " Tabla.append(Agregar_Radio(Tabla[4],Tabla[1]))\n",
  314. " Tabla = np.transpose(Tabla)\n",
  315. " return Tabla"
  316. ]
  317. },
  318. {
  319. "cell_type": "markdown",
  320. "metadata": {},
  321. "source": [
  322. "# Identificación de la distancia interplanar a partir de los índices de Miller.\n",
  323. "\n",
  324. "De la Ley de Bragg se tiene que:\n",
  325. "\n",
  326. "$n \\lambda = 2 d \\sin (\\theta)$\n",
  327. "\n",
  328. "Despejando la distancia interplanar se tiene:\n",
  329. "\n",
  330. "$ d = \\frac{n \\lambda}{2\\sin(\\theta)}$\n",
  331. "\n",
  332. "# Determinar el parámetro de red.\n",
  333. "\n",
  334. "$ a_0 = d\\sqrt{h^2+k^2+l^2} $ \n"
  335. ]
  336. },
  337. {
  338. "cell_type": "markdown",
  339. "metadata": {},
  340. "source": [
  341. "# Identificación de Estructura Cristalina a partir de los índices de Miller."
  342. ]
  343. },
  344. {
  345. "cell_type": "code",
  346. "execution_count": 7,
  347. "metadata": {},
  348. "outputs": [
  349. {
  350. "name": "stdout",
  351. "output_type": "stream",
  352. "text": [
  353. "Corresponde a una estructura FCC\n"
  354. ]
  355. }
  356. ],
  357. "source": [
  358. "Array = [\"(111)\",\"(200)\",\"(220)\",\"(311)\",\"(222)\",\"(400)\",\"(402)\",\"(422)\"]\n",
  359. "print(\"Corresponde a una estructura \" + Indentificar_Estructura(Array))"
  360. ]
  361. },
  362. {
  363. "cell_type": "code",
  364. "execution_count": 8,
  365. "metadata": {
  366. "scrolled": false
  367. },
  368. "outputs": [
  369. {
  370. "name": "stdout",
  371. "output_type": "stream",
  372. "text": [
  373. " Pico Miller theta d a_0 r\n",
  374. "------ -------- ------- ----- ----- -----\n",
  375. " 1 (111) 19.1885 0.234 0.405 0.175\n",
  376. " 2 (200) 22.3 0.203 0.406 0.176\n",
  377. " 3 (220) 32.495 0.143 0.404 0.175\n",
  378. " 4 (311) 39.041 0.122 0.405 0.175\n",
  379. " 5 (222) 41.1655 0.117 0.405 0.175\n"
  380. ]
  381. }
  382. ],
  383. "source": [
  384. "#Orden de difracción\n",
  385. "n = 1\n",
  386. "#Longitud de onda en nm.\n",
  387. "l = 0.154060 \n",
  388. "header = [\"Pico\", \"Miller\", \"theta\", \"d\", \"a_0\", \"r\"]\n",
  389. "S = tabulate(Tabla_2(Array2,n,l), headers=header)\n",
  390. "print(S)"
  391. ]
  392. }
  393. ],
  394. "metadata": {
  395. "kernelspec": {
  396. "display_name": "Python 3",
  397. "language": "python",
  398. "name": "python3"
  399. },
  400. "language_info": {
  401. "codemirror_mode": {
  402. "name": "ipython",
  403. "version": 3
  404. },
  405. "file_extension": ".py",
  406. "mimetype": "text/x-python",
  407. "name": "python",
  408. "nbconvert_exporter": "python",
  409. "pygments_lexer": "ipython3",
  410. "version": "3.6.4"
  411. }
  412. },
  413. "nbformat": 4,
  414. "nbformat_minor": 2
  415. }
Add Comment
Please, Sign In to add comment