{ "cells": [ { "cell_type": "markdown", "id": "8afd9ade-abdd-473b-8c77-9b0c954c044e", "metadata": {}, "source": [ "# Arbitrary Resolution Ellipsoid Simulation Example" ] }, { "cell_type": "code", "execution_count": 1, "id": "2cb6fa78-dc46-4a22-9a95-54a6b1931446", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Overwriting previous total file Resolution_ellipsoid_tio2_total.csv\n", "#########################\n", "Old simulations found in /mnt/c/Users/tjh/OneDrive - NIST/GitHub/pyMACS/docs/source/notebooks/Resolution_ellipsoid_tio2/Kidney_simulations/\n", " \n", "Successfully combined old simulations into /mnt/c/Users/tjh/OneDrive - NIST/GitHub/pyMACS/docs/source/notebooks/Resolution_ellipsoid_tio2/Kidney_simulations/Resolution_ellipsoid_tio2_total.csv\n", "\n", "Data matrix instantiated and ready to use.\n", "#########################\n" ] } ], "source": [ "import numpy as np\n", "import pyMACS\n", "from pyMACS.virtualMACS import VirtualMACS\n", "import mcstasscript as ms\n", "useOld=True\n", "macs= VirtualMACS('Resolution_ellipsoid_tio2',cifName='TiO2.cif',useOld=useOld)\n", "macs.sample.formula_weight=80.0 # Made up\n", "numthreads=8" ] }, { "cell_type": "markdown", "id": "b360575e-dfc4-40ff-be9a-c6bba80b32e7", "metadata": {}, "source": [ "### In this notebook, we will demonstrate the simulation of a single resolution ellipsoid at the (-1.3,-1.3,-0.5) , $\\Delta$E=3.5 meV position" ] }, { "cell_type": "markdown", "id": "eaef6259-9614-4553-8b3b-e11d2f84109a", "metadata": {}, "source": [ "## Single Crystal SQW4 process. \n", "\n", "pyMACS includes an experimental UNION process, the Sqw4_process. It will work out of the box, and behaves very similarly to the single_crystal_process. It is essentially a port of Single_crystal_inelastic.comp by Duc Le. " ] }, { "cell_type": "code", "execution_count": 2, "id": "0059663e-3cff-495a-921b-43fbdd0e7728", "metadata": {}, "outputs": [], "source": [ "import os\n", "import shutil\n", "#To use the sqw4 process, it requires the copying of the component into the current directory. \n", "if not os.path.exists(\"Sqw4_process.comp\"):\n", " shutil.copy(macs.instr_template_dir+\"Sqw4_process.comp\",\"Sqw4_process.comp\")\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "979e229b-a4f7-4a8f-94c4-592f9ef84fbf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "Conversion of CIF to crystallographical LAU file successful. \n" ] } ], "source": [ "#Going to make our sample artifically big to increase count rate. \n", "macs.sample.sample_widx=0.01\n", "macs.sample.sample_widy=0.01\n", "macs.sample.sample_widz=0.01\n", "\n", "macs.monochromator.Ei = 5.0 #This will change\n", "macs.monochromator.Ef = 5.0\n", "macs.sample.cif2lau()\n", "\n", "#Sample is aligned in the HHL plane\n", "macs.sample.orient_u=[1,1,0]\n", "macs.sample.orient_v=[0,0,1]\n", "macs.sample.project_sample_realspace()\n", "\n", "scattering_def = ms.McStas_instr(\"scattering_definition\",checks=False)\n", "inc_scatter = scattering_def.add_component(\"inc_scatter\",\"Incoherent_process\")\n", "inc_scatter.sigma=macs.sample.sigma_inc\n", "inc_scatter.unit_cell_volume = macs.sample.cell_vol\n", "inc_scatter.packing_factor = 1\n", "inc_scatter.interact_fraction=0.25\n", "inc_scatter.set_AT([0,0,0])\n", "\n", "#Single crystal process. \n", "crystal_scatter = scattering_def.add_component(\"crystal_scatter\",\"Single_crystal_process\")\n", "crystal_scatter.delta_d_d=0.005\n", "crystal_scatter.mosaic = 30.0\n", "#Projections of lattice vectors onto lab frame is handled by the previous helper process.\n", "labproj = macs.sample.labframe_mat\n", "crystal_scatter.ax = labproj[0,0]\n", "crystal_scatter.ay = labproj[0,1]\n", "crystal_scatter.az = labproj[0,2]\n", "crystal_scatter.bx =labproj[1,0]\n", "crystal_scatter.by = labproj[1,1]\n", "crystal_scatter.bz = labproj[1,2]\n", "crystal_scatter.cx = labproj[2,0]\n", "crystal_scatter.cy = labproj[2,1]\n", "crystal_scatter.cz = labproj[2,2]\n", "crystal_scatter.reflections='\\\"'+\"TiO2.lau\"+'\\\"'\n", "crystal_scatter.barns=1\n", "crystal_scatter.packing_factor=1\n", "crystal_scatter.powder=0\n", "crystal_scatter.PG=0\n", "crystal_scatter.interact_fraction=0.25\n", "crystal_scatter.set_AT([0,0,0])\n", "crystal_scatter.set_ROTATED([0,0,0])\n", "\n", "#Sample sqw4 processs\n", "sample_sqw4 = scattering_def.add_component(\"sample_sqw4\", \"Sqw4_process\")\n", "sample_sqw4.sqw = '\"tio2_resfunc.sqw4\"'\n", "#This file must also be added to the instrument file dependencies to be copied correctly.\n", "macs.file_dependencies=\"tio2_resfunc.sqw4\"\n", "#We are choosing to have the (100) vector along the x-axis\n", "sample_sqw4.ax=labproj[0,0]\n", "sample_sqw4.ay=labproj[0,1]\n", "sample_sqw4.az=labproj[0,2]\n", "sample_sqw4.bx=labproj[1,0]\n", "sample_sqw4.by=labproj[1,1]\n", "sample_sqw4.bz=labproj[1,2]\n", "sample_sqw4.cx=labproj[2,0]\n", "sample_sqw4.cy=labproj[2,1]\n", "sample_sqw4.cz=labproj[2,2]\n", "sample_sqw4.aa=macs.sample.alpha\n", "sample_sqw4.bb=macs.sample.beta\n", "sample_sqw4.cc=macs.sample.gamma\n", "sample_sqw4.barns=1\n", "sample_sqw4.max_stored_ki=1e5\n", "sample_sqw4.max_bad=1e5\n", "sample_sqw4.stored_dTheta = 0.1\n", "sample_sqw4.stored_dkmag = 1e-4\n", "sample_sqw4.recip_cell=0\n", "sample_sqw4.interact_fraction=1\n", "#sample_sqw4.init=\"'init'\"\n", "#sample_sqw4.append_EXTEND(\"// Remove direct beam\\nif(!SCATTERED) ABSORB;\")\n", "sample_sqw4.set_AT([0,0,0])\n", "sample_sqw4.set_ROTATED([0,0,0])\n", "crystal_scatter.interact_fraction=0.5\n", "\n", "scattering = scattering_def.add_component(\"TiO2\",\"Union_make_material\")\n", "scattering.process_string='\"crystal_scatter,inc_scatter,sample_sqw4\"'\n", "scattering.my_absorption=macs.sample.rho_abs\n", "scattering.set_AT([0,0,0])\n", "\n", "#Now, this pseudo-instrument will be saved as the scattering definition of the sample. \n", "macs.sample.scattering_def = scattering_def\n", "\n", "#Make a second object for the geometry. This particular case replicates the validation experiment for this package.\n", "geo_def = ms.McStas_instr(\"geometry_definition\",checks=False)\n", "\n", "sample_cube=geo_def.add_component(\"sample_cube\",\"Union_box\")\n", "sample_cube.xwidth=1.0*macs.sample.sample_widx\n", "sample_cube.yheight=1.0*macs.sample.sample_widy\n", "sample_cube.zdepth=1.0*macs.sample.sample_widz\n", "sample_cube.priority=100\n", "sample_cube.material_string='\\\"TiO2\\\"'\n", "sample_cube.number_of_activations=\"number_of_activations_sample\" #Do not change. \n", "sample_cube.set_AT([0,0,0],RELATIVE='crystal_assembly')\n", "sample_cube.set_ROTATED([0,0,0],RELATIVE='crystal_assembly')\n", "\n", "sample_plate = geo_def.add_component(\"sample_plate\",\"Union_cylinder\")\n", "sample_plate.radius=0.006\n", "sample_plate.yheight=0.002\n", "sample_plate.priority=40\n", "sample_plate.material_string='\"Al\"'\n", "plate_distance = macs.sample.sample_widy+0.002\n", "sample_plate.set_AT([0,plate_distance,0],RELATIVE=\"target\")\n", "sample_plate.set_ROTATED([0,0,0],RELATIVE=\"target\")\n", "\n", "sample_plate_rod = geo_def.add_component(\"sample_plate_rod\",\"Union_cylinder\")\n", "sample_plate_rod.radius=0.00125\n", "sample_plate_rod.yheight=0.0633\n", "sample_plate_rod.priority=41\n", "sample_plate_rod.material_string='\"Al\"'\n", "sample_plate_rod.set_AT([0,plate_distance+0.001+0.031,0], RELATIVE=\"target\")\n", "sample_plate_rod.set_ROTATED([0,0,0],RELATIVE=\"target\")\n", "\n", "sample_base = geo_def.add_component(\"sample_base\",\"Union_cylinder\")\n", "sample_base.radius=0.0065\n", "sample_base.yheight=0.013\n", "sample_base.priority=42\n", "sample_base.material_string='\\\"Al\\\"'\n", "sample_base.set_AT([0,0.0628,0],RELATIVE=\"target\")\n", "sample_base.set_ROTATED([0,0,0],RELATIVE=\"target\")\n", "\n", "sample_base_gap = geo_def.add_component(\"sample_base_gap\",\"Union_cylinder\")\n", "sample_base_gap.radius=0.004\n", "sample_base_gap.yheight=0.009\n", "sample_base_gap.priority=43\n", "sample_base_gap.material_string='\"Vacuum\"'\n", "sample_base_gap.set_AT([0,0.0668,0], RELATIVE=\"target\")\n", "sample_base_gap.set_ROTATED([0,0,0],RELATIVE=\"target\")\n", "\n", "macs.sample.geometry_def = geo_def" ] }, { "cell_type": "markdown", "id": "1e1c7e7a-c0b1-4bee-92bb-e140e07042ff", "metadata": {}, "source": [ "## Perform simulations around the relevant point. " ] }, { "cell_type": "code", "execution_count": 4, "id": "fb8402e1-7b10-4c3b-bff0-252eb3717ea6", "metadata": {}, "outputs": [], "source": [ "#Some housekeeping steps needed for simulation\n", "if useOld!=True:\n", " macs.prepare_expt_directory()\n", " macs.edit_instr_file()\n", " macs.compileMonochromator()\n", " macs.compileInstr()" ] }, { "cell_type": "code", "execution_count": 5, "id": "3bc284d2-bc0b-42c4-9907-8e68953984e5", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "id": "61d11a7b-5c0e-46ed-877d-e44a11caeb91", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "409456d1ea6542078a1d4ed76291d282", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Total Scans: 0%| | 0/21 [00:00" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b74ac2ca12fd4f27ac48e91893576fe9", "version_major": 2, "version_minor": 0 }, "image/png": "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3bhxo/M3FiXp0qWL0aBBA+fzwlNxSvMo6rStcePGObf7+fkZb7zxRqn2bevWrcZjjz1mrFixwvj222+Nd955x2jVqpXh7e1tJCYmOutde+21Rp8+fdzaHz58uFT7W/h/8+c//9mlvF27doYk45NPPnGWXbhwwWjUqJFx9913O8vKMi8YhmF069bNCAoKMs6fP+8smzRpkiHJ+O9//1tirFWF+doV8zXzdXExllbh6f0ZGRlu244cOWJIMm666SaX3zwePHjQkOScM0tb7+K6Rc23I0aMMEJCQsoU/6X9mX1fuJTZeby07xcVMVZVvmdcCe8X1QErhBZmGIYkOU9HycvLU9OmTfXvf/9bJ06c0MMPP6xBgwbpzJkzpeqvc+fO8vX1VUBAgPr27asGDRroH//4h/MbpHPnzunrr7/WXXfdpTp16rh8+9W/f3+dO3fOZVWlY8eOWrRokV544QUlJyfrwoULzm2nT5/Wxo0bdc8998jf399Z7u3trdjYWB08eFB79uwxfYzKojwxDRo0yOV527Ztde7cOWVlZZVqzPfee0+bN292eZg5lfBy8Zw5c0br1q3TkCFD1KhRo3KPU8gTx+xi6enpOnz4sB5//HE1bNjQWe7l5aX8/HyFhoa61J83b568vLx0//33O8vWrFmjDz/80G2/Cv++JOnGG290+38q7hEeHu4W59SpU7V582Z9/vnnuv/++zV+/Hi9+uqrl92/G264QbNnz9add96prl27asyYMdqwYYPCwsL05JNPutS99LS00m672MCBA12et2rVSjabzeWUHB8fHzVr1kz79u2TVPZ5QZIeeOAB/frrr/rss88k/TZ3LV68WF27dtW1115bqlivNMzXFYv5uuw8PV8fPnxYNptNQUFBbts2b94sSXrhhRdkt9ud5YUr1IXzamnrXVy38HTqiwUHBysrK6tMq7yX9lfe94VLVw8vfq8xM4+X5f3C7FiFquI9w4rvF+VBQlgDBQUFqU6dOs5TgIqTlpamOnXqOD8I161bV88++6wiIyPl5eWlUaNGqaCgoNSXIi98s1uzZo3GjRunH3/8Uffee69z+9GjR5WXl6fXX39dvr6+Lo/+/ftLkn799Vdn/WXLlmnUqFF6++23FRMTo4YNG2rkyJHKyMjQ8ePHZRiGwsLC3OIonDgLJ/iqUp6YAgMDXZ4XvkGdPXu2VGO2atVKHTp0cHmYcbl4jh8/rvz8/GJPbSsrTxyzixW+Qfft29elfOfOnTIMw3n6S6HVq1erTZs2CgkJcZZNmzZNH3/8sUu9zMxMNWvWzPnc399f7dq1K9XDz8/PLc7IyEh16NBB/fv317x58zR27FjFx8fryJEjZd7n+vXra+DAgdqxY4fzmAUGBhb593Ls2DFJckmWS3JpPT8/P9WpU0e1atVyKy/8fWZZ5wVJuueee+RwOLRw4UJJ0hdffKHMzEw98MADpYqzOmG+Zr4uL6vN12fPnpWvr2+Rp/ht2bJFtWvXVo8ePVzKt27dKum3ZKcs9Qrr+vn5ub0PSFKtWrVkGEaRvzMvzqX9led9IS0tze3vsfA014qaxy9W1PtFRY5VFe8ZNen9ojJV3FUJUG14e3ure/fuSkxM1MGDB4t8Mzh48KBSUlLUr1+/Ys+f/s9//qOzZ8/qmmuuKdW4hW92ktS9e3fl5+fr7bff1scff6x77rlHDRo0cH6T+MgjjxTZR9OmTZ3/DgoK0uzZszV79mzt379fn332mZ566illZWVp+fLl8vLyUnp6ulsfhw8fdrYvTq1atZSbm+tWfukHz7Jo0KCBqZgqWmXsY8OGDeXt7a2DBw+aCc3J08ds8+bNqlu3rlq0aOFSnpKSIum3b3ALnT17VocOHXL5PcmxY8eUnJzs8nretWuXMjIyFBsb6yxbt25dsb97uVRqamqRF5e4WMeOHTV//nz98ssv5frm/9LVpuuuu04ffvih8vLyXFYsCn+IHx0dXeYxSqus84Ik1a5dW/fee6/eeustpaen65133lFAQIDbBQ6uBMzXzNcS83VpBAUF6fz58zp9+rTbRVm2bNmi66+/3m3FdcuWLQoKClJkZGSZ6hWWtW3b1mUlsdCxY8dkt9tdVkov59L+yvO+EB4e7vwis1Dh+1dlzeOXvl9U5lilUda5qSa9X1QmVghrqPj4eBmGoT/84Q9uFyHIz8/Xww8/LMMwFB8fX2T7M2fOKDY2Vv/3f/9XpgnvYq+88ooaNGigZ599VgUFBapTp466d++ubdu2qW3btm7flHbo0MHt28RCkZGRGj9+vHr16qWtW7eqbt266tSpkz755BOXb60KCgq0ePFiNW7c2OXiCJdq0qSJsrKyXK6od/78ea1atcqtbmm/0TQbU0Uryz6WVu3atdWtWzd99NFHJX5QuVKO2ebNm3XDDTe4XbFu69atCgkJ0VVXXeUsK/w7uvgb4fnz58vb21vnz593ls2ZM0deXl4aM2aMs8zsKaOX+uabb+Tl5aWrr766zPt8/Phx/fOf/1S7du2c38LeddddOnXqlJYvX+5S991331V4eLg6depU5nFKq7zzwgMPPKD8/Hz96U9/0hdffKFhw4apTp06lRZnZWK+Zr5mvr68li1bSpJ+/vlnt22bN292+QKvUEpKikt5aesV1i1uFfeXX35R69atyxT/pf2V533Bz8/P7e8wICBAUuXM40W9X1TWWKVVnrmpJr1fVBZWCGuom2++WbNnz9bjjz+u3/3udxo/frwiIyO1f/9+/e1vf9PGjRs1e/ZsdenSxa3thQsXNGTIELVu3VpTp04tdwwNGjRQfHy8nnzySX3wwQe67777NGfOHP3ud79T165d9fDDD6tJkyY6efKkfvrpJ61cuVJr1qyR9Nul+7t3767hw4erZcuWCggI0ObNm5WYmKi7775b0m+Xau/Vq5e6d++uyZMny8/PT2+88YZ27dqlDz/8sMRz2IcOHapnn31Ww4YN05QpU3Tu3Dn99a9/LfIKftddd52k3z7ojxo1Sr6+vm4rSoXMxFTRyrKPZfGXv/xFv/vd79SpUyc99dRTatasmTIzM/XZZ59pwYIFCggIqBbHzGazqVu3blq7dm2xdbZs2aL77rvPrTwlJcXtg4C/v7+aN2+uNWvW6J133tH58+f16quvavz48frggw/Ur18/ffvtt3r77bc1ceJEtWrVytk2ICCgXKeHjR07VvXq1VPHjh0VEhKiX3/9VR999JGWLVumKVOmOFcH161bp9tuu03PPvusnn32WWf74cOHO083DQoK0t69e/XnP/9ZmZmZWrRokbNev3791KtXLz388MPKyclRs2bN9OGHHyoxMVGLFy+u9KuwlXZeuFiHDh3Utm1bzZ49W4ZhXNGn/zBfM18zX19+vr711lslScnJyS6ncaanpys9Pd1tjs3Ly9P333+viRMnlqnexXUvvcKo9FsCvGnTJrc5p6R9KKq/8r4vFKcs83hR7xmlfb8o61iVoazvGTXp/aLSVO01bGBGaa9ad7GkpCTjnnvuMUJCQgwfHx8jODjYuPvuu40NGzYU2U9+fr4xbNgwY9CgQW43SC5OSTfdPXv2rBEZGWlce+21zhuVpqamGvfff79x1VVXGb6+vkajRo2MLl26GC+88IKz3blz54yHHnrIaNu2rVGvXj2jdu3aRosWLYznnnvO5Waw69evN3r06GHUrVvXqF27ttG5c2e3m4wWd2y++OILo127dkbt2rWNq6++2pg7d26RV3QzDMOIj483wsPDDS8vL0OS8c033xTbb2liKhznyJEjpYr1UqW90XFp97Gs8ezevdsYPHiwERgYaPj5+RmRkZHG6NGjXa7a5sljdvLkycteufHnn382JBnvvfeeS/n58+cNPz8/49lnn3Vrk5ycbFx33XWG3W43oqOjjdWrVxtHjx41brnlFsNutxtNmzY1XnnllXJf8fRS77zzjtG1a1cjKCjI8PHxMerXr29069bNeP/9913qFV6t7rnnnnMpnzVrltGuXTvD4XAY3t7eRqNGjYy77rrL2LRpk9tYJ0+eNCZMmGCEhoYafn5+Rtu2bY0PP/ywVHEW939T3JzVrVs3o02bNi5lpZkXLjVnzhxDktG6detSxVmVmK+Zry+tx3xd/vm6UNeuXY3+/fu7lP3jH/8wJBk7duxwKf/+++9drlhZ2noX1/3+++/dYvj6668NSUZKSkqp96Gk/ipSaefxot4zyvJ+UZaxiuKJ94zq/H5RHdgM46LLE8Hy4uLitHfvXiUmJrr9qBe4UnzxxRcaOHCgvv/+e+e330BNw3yNmqAs8/Xy5cs1dOhQ7du3z+WU/qoUGxurX375Rf/+97+dZbzn4EpHQginffv2qUmTJqpVq5bLcv+XX36prl27ejAyoGymTJmiQ4cO6YMPPvB0KEClYL5GTVGW+dowDHXp0kU33nij5s6dWwXRufr555/VqlUrrVmzRr/73e+c5bzn4EpHQggAAIArwq5du5xXsb30gmCV7ZtvvtHevXs1duzYKh0XqGwkhAAAAABgUdx2AgAAAAAsioQQAAATZs2aJZvNpscff7zEeuvWrdONN96oWrVq6eqrr9b8+fOrJkAAAEpAQggAQDlt3rxZb775pst90YqSmpqq/v37q2vXrtq2bZumTp2qCRMmuN3YGQCAqkZCCABAOZw6dUojRozQW2+9pQYNGpRYd/78+YqMjNTs2bPVqlUrPfjgg7r//vv16quvVlG0AAAUzcfTAcCcgoICHT58WAEBAbLZbJ4OBwAqlWEYOnnypMLDw6v8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tsS+ue8sAKAqWP6UUVibzdvbVHvvqIhyt82+MdTU2KfDTH6fY/LcAEeauW9ia2UWfSXfUkvZbaq5kZ9vbnxY2s6dOxUTE6Nz587J399fK1asUOvWrYus+8svv+i7775TrVq1tGLFCv3666/6wx/+oGPHjpX4O0LuOwsAqAqsEAIAUEYtWrTQ9u3blZycrIcfflijRo3S7t1Ff0lRUFAgm82mJUuWqGPHjurfv7/+8pe/aNGiRSWuEnLfWQBAVWCFEACAMvLz83NeVKZDhw7avHmz5syZowULFrjVDQsL01VXXSWH43+/WWvVqpUMw9DBgwd17bXXFjkG950FAFQFVggBADDJMAzl5uYWue3mm2/W4cOHderUKWfZf//7X3l5ealx48ZVFSIAAEUiIQQAoAymTp2q9evXKy0tTTt37tTTTz+ttWvXasSIEZJ+O9Vz5MiRzvrDhw9XYGCgxowZo927d+vbb7/VlClTdP/996t27dqe2g0AACRxyigAwEIOHDigtLQ0nTlzRo0aNVKbNm3KfFpmZmamYmNjlZ6eLofDobZt2yoxMVG9evWSJKWnp2v//v3O+v7+/lq9erUeffRRdejQQYGBgRoyZIheeOGFCt03AADKg4QQAFCj7du3T/Pnz9eHH36oAwcO6OLb7/r5+alr164aO3asfv/738vL6/InziQkJJS4fdGiRW5lLVu21OrVq8scOwAAlY2EEABQYz322GNauHChevfurRkzZqhjx4666qqrVLt2bR07dky7du3S+vXr9cwzz2j69OlauHChbrrpJk+HjVLI37XHVPuzHYu+b2SZ+jB59xxJKvA191EsaujPpmO4qs4J032si2hmuo+zBwJMtT92zvzH2tDZyab7AK40JIQAgBrLz89PP//8sxo1auS2LTg4WD169FCPHj303HPP6YsvvtC+fftICAEAlkJCCACosf70pz+Vum7//v0rMRIAAKonrjIKAKjR2rVrp7lz5+r48eOeDgUAgGqHhBAAUKN16tRJ//d//6fw8HDde++9+vrrrz0dEgAA1QYJIQCgRluwYIEyMjL05ptvKjMzU71791aTJk00Y8YMl9tDAABgRSSEAIAar1atWoqNjdWaNWv0008/KTY2VgkJCbr66qvVp08f/f3vf/d0iAAAeAQJIQDAUpo2barnn39eaWlpWrp0qbZs2aJ7773X02EBAOARXGUUAGA533zzjRYuXKhPPvlEPj4+iouL83RIAAB4hMcTws8++6zMbXr16qXatWtXQjS40njVqWOq/ckBbU21t+Ub5W6b1d7cAn3dNsdMtd/WYZmp9u02DzPVPi+pgan2keeam2pf8MN/y93WyM83NTY8Y//+/Vq0aJEWLVqktLQ0de3aVW+88YYGDx7MewoAwLI8nhDeeeedZapvs9m0d+9eXX311ZUTEACgRvnggw+0cOFCffPNNwoJCdHIkSP1wAMPqFmzZp4ODQAAj/N4QihJGRkZCg4OLlXdgICASo4GAFCTjB49WgMGDNCnn36q/v37y8uLn88DAFDI4wnhqFGjynSqzn333ad69epVYkQAgJrk4MGDpf7SEQAAq/H416QLFy4s06rfvHnzFBQUVIkRAQBqkouTwffff18333yzwsPDtW/fPknS7Nmz9Y9//MNT4QEA4FEeTwhL48cff+Q3gwAAU+bNm6eJEyeqf//+OnHihPL//8WB6tevr9mzZ3s2OAAAPOSKSAjPnz/v/CYXAIDyeP311/XWW2/p6aeflre3t7O8Q4cO2rlzpwcjAwDAczz+G0IAAKpCamqqbrjhBrdyu92u06dPeyAimOETGGiqvfd58zE0+j7PdB+59cx9N79v2TWmY/j+plzTfTi22E330cBkGMEbfjUdQ75RYLoP4EpzRawQAgBgVtOmTbV9+3a38i+//FKtW7eu+oAAAKgGWCEEAFjClClT9Mgjj+jcuXMyDEObNm3Shx9+qFmzZuntt9/2dHgAAHhEtVghbNCggRo2bFjso2vXrpU29vHjxxUbGyuHwyGHw6HY2FidOHGixDajR4+WzWZzeXTu3NmlTm5urh599FEFBQWpbt26GjRokA4ePGh6bABA+YwZM0bPPfecnnzySZ05c0bDhw/X/PnzNWfOHA0bNszT4QEA4BHVYoXQk1d3Gz58uA4ePKjExERJ0tixYxUbG6uVK1eW2K5v375auHCh87mfn5/L9scff1wrV67U0qVLFRgYqEmTJmngwIFKSUlxXsygvGMDAMonLi5OcXFx+vXXX1VQUMD9CQEAllctEsJRo0Z5ZNwff/xRiYmJSk5OVqdOnSRJb731lmJiYrRnzx61aNGi2LZ2u12hoaFFbsvOzlZCQoLef/999ezZU5K0ePFiRURE6KuvvlKfPn1MjQ0AMIf72QIA8Jtqccroxfbt26eNGzdq06ZNlX6riaSkJDkcDmdCJkmdO3eWw+HQhg0bSmy7du1aBQcHq3nz5oqLi1NWVpZzW0pKii5cuKDevXs7y8LDwxUdHe3s18zYAICyO3r0qB555BG1bt1aQUFBbj9PAADAiqrFCqEkvfbaa/rLX/6iw4cPyzAMSZLNZlN4eLgmTZqkxx9/vMLHzMjIKPJ0oeDgYGVkZBTbrl+/fho8eLCioqKUmpqqZ555Rj169FBKSorsdrsyMjLk5+enBg0auLQLCQlx9lvesXNzc5Wb+7/rMufk5Fx2PwEA0n333aeff/5ZDzzwgEJCQmSz2TwdEgAAHlctEsLnn39er776qqZOnao+ffooJCREhmEoKytLq1at0rRp03Tq1Cn93//9X6n6mzZtmqZPn15inc2bN0tSkR8IDMMo8YPC0KFDnf+Ojo5Whw4dFBUVpc8//1x33313se0u7bc8Y8+aNeuy+2YlBWfPmWof8Nl2U+2N/Pxyt70m9VpTYx/paG5F44GQm021H3r1VlPttwZGmmqf0rSpqfatni/6lO/SyDt4yNTY8IzvvvtO3333na6//npPhwIAQLVRLRLCN998U++++67uvPNOl/Lw8HC1a9dOzZs31/jx40udEI4fP/6yV4xr0qSJduzYoczMTLdtR44cUUhISKnjDwsLU1RUlPbu3StJCg0N1fnz53X8+HGXVcKsrCx16dLFWac8Y8fHx2vixInO5zk5OYqIiCh1rABgVS1bttTZs2c9HQYAANVKtUgIjx49WuJFVJo3b67jx4+Xur+goKBSXTAgJiZG2dnZ2rRpkzp27ChJ2rhxo7Kzs52JW2kcPXpUBw4cUFhYmCTpxhtvlK+vr1avXq0hQ4ZIktLT07Vr1y698sorpsa22+2y2+2ljg0A8Js33nhDTz31lJ599llFR0fL19fXZXu9evU8FBkAAJ5TLS4q07FjR82cOVN5eXlu2/Ly8vTiiy86k6aK1KpVK/Xt21dxcXFKTk5WcnKy4uLiNHDgQJcEtWXLllqxYoUk6dSpU5o8ebKSkpKUlpamtWvX6vbbb1dQUJDuuusuSZLD4dADDzygSZMm6euvv9a2bdt033336brrrnNedbS0YwMAKkb9+vWVnZ2tHj16KDg4WA0aNFCDBg1Uv359t998AwBgFdVihfD1119X7969FRwcrG7dujl/7J+RkaFvv/1Wdrtdq1evrpSxlyxZogkTJjivCDpo0CDNnTvXpc6ePXuUnZ0tSfL29tbOnTv13nvv6cSJEwoLC1P37t21bNkyBQQEONu89tpr8vHx0ZAhQ3T27FnddtttWrRokfMehKUdGwBQMUaMGCE/Pz998MEHXFQGAID/r1okhNddd53++9//avHixUpOTlZqaqqk335nN3PmTA0fPrzSTuVp2LChFi9eXGKdwqueSlLt2rW1atWqy/Zbq1Ytvf7663r99ddNjQ0AqBi7du3Stm3bOAsDAICLVIuEUJICAgL08MMP6+GHH/Z0KACAGqhDhw46cOAACSEAABepNgmh9Nvv81JSUpSRkSGbzabQ0FC1b99e/v7+ng4NAHCFe/TRR/XYY49pypQpuu6669wuKtO2bVsPRQYAgOdUi4QwLy9PkyZN0ltvvaVz587Jz89PhmHowoULqlWrlsaOHas//elPbm/eAACUVuE9ZO+//35nmc1mc97/Nd/EfUVR9fJamLvlUp7d/G9IT1xt/mNU9o3nTbX/x63mrz2wP8/8RZW2tW9iuo+ETb8z1T5kda7pGAArqhYJ4aRJk7R8+XItXLhQffr0Uf369SVJJ06c0KpVqzRlyhRJ0uzZsz0XJADgilb4+3QAAPA/1SIh/OCDD7Rs2TL16NHDpbx+/foaOnSogoKCNGzYMBJCAEC5RUVFeToEAACqnWpxH8KzZ8+WeCP5wMBAnT17tgojAgDUBElJSaWue/r0af3www+VGA0AANVPtUgIu3fvrokTJyozM9NtW2Zmpp588km31UMAAC5n5MiR6tWrl/7+97/r1KlTRdbZvXu3pk6dqmbNmmnr1q1VHCEAAJ5VLU4ZfeONN9S/f381btxY0dHRLjem37Vrl1q3bq3PP//c02ECAK4wu3fv1oIFC/Tss89qxIgRat68ucLDw1WrVi0dP35c//nPf3T69GndfffdWr16taKjoz0dMgAAVapaJIQRERH6/vvvtWrVKiUnJysjI0OS1LFjR82aNUu9e/eWl1e1WMwEAFxBfH19NX78eI0fP15bt27V+vXrlZaWprNnz+r666/XE088oe7du6thw4aeDhUAAI/weEK4Y8cORUdHy8vLS/369VO/fv1KrP/DDz+oRYsW8vHxeOioDowCU80Lcs9V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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib widget\n", "from ipywidgets import interact\n", "import ipywidgets as widgets\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "macs.data.project_data_QE()\n", "nslice = 20\n", "eslice = 3.5\n", "\n", "fig,axs=plt.subplots(1,2,figsize=(9,4))\n", "ax = axs[0]\n", "ax.set_xlabel('[HH0]')\n", "ax.set_ylabel('[00L]')\n", "ax.set_title(\"TiO2 Resolution, 3.5 meV\")\n", "\n", "ax2 = axs[1]\n", "ax2.set_xlabel('[HH0]')\n", "ax2.set_ylabel('E (meV)')\n", "ax2.set_title(\"TiO2 Resolution, $l$=-0.3, 3.5 meV\")\n", "\n", "\n", "def plot_eslice(eslice):\n", " U,V,I = macs.data.bin_constE_slice(nslice,nslice,[-1.4,-1.2],[-0.6,-0.4],[eslice-0.1,eslice+0.1])\n", " #U,V,I = macs.data.bin_constE_slice(nslice,nslice,[-2.4,1.2],[-2.6,3.4],[eslice-0.01,eslice+0.01])\n", " ax.pcolormesh(U,V,I.T,vmin=0,vmax=1.4e4)\n", " ax.set_title(\"TiO$_2$ Resolution Function, $\\hbar\\omega$=\"+f\"{eslice:.2f} meV\")\n", "\n", "def plot_hh0slice(Lslice):\n", " U,V,I,Err = macs.data.take_slice([-1.4,-1.2,nslice],[Lslice-0.01,Lslice+0.01],[3.0,4.0,20],which_data='mcstas')\n", " #U,V,I = macs.data.bin_constE_slice(nslice,nslice,[-2.4,1.2],[-2.6,3.4],[eslice-0.01,eslice+0.01])\n", " ax2.pcolormesh(U,V,I.T,vmin=0,vmax=5e1)\n", " ax2.set_title(\"TiO$_2$ Resolution Function, $(hhl), l$=\"+f\"{Lslice:.2f} meV\")\n", "#ax.pcolormesh(U,V,I.T,vmin=0,vmax=5000)\n", "#fig.show()\n", "\n", "interact(plot_eslice, eslice = widgets.FloatSlider(value=3.5, min=3.0, max=4.0, step=0.05))\n", "interact(plot_hh0slice, Lslice = widgets.FloatSlider(value=-0.50, min=-0.55, max=-0.45, step=0.01))\n" ] }, { "cell_type": "code", "execution_count": null, "id": "85cbecab-27f5-47a7-aa6a-7b5d1822478d", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 5 }