{ "cells": [ { "cell_type": "markdown", "id": "3b0549ea-8bf1-40cc-844a-06e1e3677130", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Emulate a MACS ng0 file\n", "\n", "An important use case of pyMACS is to reproduce experimental data. One of the key features of the package is the ability to automatically import .ng0 files, and simulate them. Of course, the user is still required to define the sample scattering and geometry definitions. " ] }, { "cell_type": "code", "execution_count": 1, "id": "ffb9e363-f024-4e91-84ff-4cc0011d7aec", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "import pyMACS\n", "from pyMACS.virtualMACS import VirtualMACS\n", "import matplotlib.pyplot as plt\n", "import mcstasscript as ms\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 5, "id": "dade5930-e44f-4207-8d92-476388225679", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING: Overwriting previous total file test_total.csv\n", "#########################\n", "Old simulations found in /mnt/c/Users/tjh/OneDrive - NIST/GitHub/pyMACS/docs/source/notebooks/test/Kidney_simulations/\n", " \n", "Successfully combined old simulations into /mnt/c/Users/tjh/OneDrive - NIST/GitHub/pyMACS/docs/source/notebooks/test/Kidney_simulations/test_total.csv\n", "\n", "Data matrix instantiated and ready to use.\n", "#########################\n", "Sample Lattice vectors\n", "\n", "a=4.6001\n", "alpha=90.0\n", "b=4.6001\n", "beta=90.0\n", "c=2.9288\n", "gamma=90.0\n", "\n", "Sample orientation U\n", "[1, 0, 0]\n", "Sample orientation v\n", "[0, 0, 1]\n", "\n", "Real Space projection of lattice vectors [ax,ay,az; bx,by,bz;cx,cy,cz]\n", "[[ 3.25276 -3.25276 0. ]\n", " [ 3.25276 3.25276 0. ]\n", " [ 0. 0. 2.9288 ]]\n", "\n", "Structure factors:\n", "|F(110)|^2 = 0.1782 barn\n", "|F(100)|^2 = 0.0 barn\n", "|F(1-10)|^2 = 0.1782 barn\n", "|F(001)|^2 = 0.0 barn\n" ] } ], "source": [ "macs = VirtualMACS(exptName='test',cifName=\"TiO2.cif\",useOld=False)\n", "\n", "# define sample parameters\n", "\n", "macs.sample.sample_shape='box'\n", "macs.sample.sample_widx=4.3e-3 \n", "macs.sample.sample_widy=1.3e-3\n", "macs.sample.sample_widz=3.3e-3 \n", "\n", "print('Sample Lattice vectors')\n", "print('')\n", "print('a='+str(macs.sample.a))\n", "print('alpha='+str(macs.sample.alpha))\n", "print('b='+str(macs.sample.b))\n", "print('beta='+str(macs.sample.beta))\n", "print('c='+str(macs.sample.c))\n", "print('gamma='+str(macs.sample.gamma))\n", "print('')\n", "print('Sample orientation U')\n", "print(macs.sample.orient_u)\n", "macs.sample.orient_u=[1,1,0]\n", "macs.sample.orient_v=[0,0,1]\n", "print('Sample orientation v')\n", "print(macs.sample.orient_v)\n", "print('')\n", "macs.sample.project_sample_realspace()\n", "print('Real Space projection of lattice vectors [ax,ay,az; bx,by,bz;cx,cy,cz]')\n", "print(macs.sample.labframe_mat)\n", "print('')\n", "print('Structure factors:')\n", "print('|F(110)|^2 = '+str(round(macs.sample.fetch_F_HKL(1,1,0)[3],4))+' barn')\n", "print('|F(100)|^2 = '+str(round(macs.sample.fetch_F_HKL(1,0,0)[3],4))+' barn')\n", "print('|F(1-10)|^2 = '+str(round(macs.sample.fetch_F_HKL(1,-1,0)[3],4))+' barn')\n", "print('|F(001)|^2 = '+str(round(macs.sample.fetch_F_HKL(0,0,1)[3],4))+' barn')\n", "\n", "# Define the scattering, geometry definitions\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.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.8\n", "crystal_scatter.set_AT([0,0,0])\n", "crystal_scatter.set_ROTATED([0,0,0])\n", "\n", "scattering = scattering_def.add_component(\"TiO2\",\"Union_make_material\")\n", "scattering.process_string='\"crystal_scatter,inc_scatter\"'\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", "\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": "code", "execution_count": 6, "id": "03c638d1-dd69-4398-9852-2a84bfe81190", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "Conversion of CIF to crystallographical LAU file successful. \n", "WARNING: Old instrument directory found. Older files deleted, instrument will need to be recompiled.\n", "/mnt/c/Users/tjh/OneDrive - NIST/GitHub/pyMACS/docs/source/notebooks\n", "#################\n", "\n", "Starting compilation of monochromator.\n", "\n", "Compilation of monochromator geometry successful.\n", "\n", "#################\n", "\n", "#################\n", "\n", "Starting compilation of sample kidney geometry.\n", "\n", "Compilation of sample kidney geometry successful.\n", "\n", "#################\n", "\n" ] } ], "source": [ "# It is usually a good idea to leave this flag as True, however if you want to \n", "# start from scratch it can be a good idea to make it False. \n", "macs.useOld=False\n", "\n", "if macs.useOld==True:\n", " macs.useOld=True\n", "else:\n", " macs.data.data_matrix=False\n", " # prepare_expt_directory populates the a folder in the base directory with all necessary files\n", " # to perform the simulation.\n", " macs.prepare_expt_directory()\n", " #The below command write the McStas .instr file for the full MACS simulation based on the \n", " # user-provided definitions above\n", " macs.edit_instr_file()\n", " macs.compileMonochromator()\n", " macs.compileInstr()" ] }, { "cell_type": "markdown", "id": "1d9e6421-d672-4f40-8ac5-536fd25d4834", "metadata": {}, "source": [ "The actual emulation begins here. There are two modes, one simulates individual ng0 files the other simulates a directory.\n", "\n", "If an ng0 file is emulated, it is automatically saved as both a csv and a .ng0 file." ] }, { "cell_type": "code", "execution_count": 7, "id": "931acb66-1254-46ad-b79a-9ea35c8006dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Emulating scan from fpx78891.ng0\n" ] }, { "data": { "text/plain": [ "1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "macs.data.data_matrix=False \n", "sample_ng0 = 'fpx78891.ng0'\n", "macs.n_mono=1e6\n", "macs.n_sample=1e5\n", "macs.simulate_ng0(sample_ng0,n_threads=8)\n", "# To scan through a directory, use a format like below\n", "\n", "ngo_dir = 'Example_ng0_files/'\n", "#macs.simulate_ng0dir(ngo_dir,n_threads=12) " ] }, { "cell_type": "markdown", "id": "3654e6ad-bef5-4038-a8b2-4e802db756ae", "metadata": {}, "source": [ "Plot this scan to see how it looks" ] }, { "cell_type": "code", "execution_count": 9, "id": "4e81cabb-a313-4313-ae09-0281aa244a76", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'TiO2 A3 Scan, Elastic')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHHCAYAAABTMjf2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6DUlEQVR4nO3deXRU9f3/8deEwIRtEsCQEI2sSoKsgsagLJpAQrBCtciSnwgngvaIVsG2UBcWW4MVBbVQvloFqbiB4pIqNIIUxZggggKyiGBBYIKQJsMaCPP5/eFhdMg2iUlmJvf5OOeew3zu5977vhdMXn4+996xGWOMAAAALCjE3wUAAAD4C0EIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIAABYFkEIqEfGjRundu3a+bsM1DJ//T3z7wv1EUEICHA2m82nZe3ateXu48SJE3r00UfVvXt3NWnSROHh4erXr5+WLFmiC79l5+jRo3riiSfUv39/RUZGKiIiQtdcc41ef/31Kte+fft22Ww2hYWFqbCwsMw+zz//vAYMGKCoqCjZ7Xa1b99e48eP13fffefTMc6cOaOnn35avXr1ksPhUEREhK644gpNnDhRO3bsqHLN/lTR3+9dd91VJzUcPHhQM2bM0ObNm+vkeIC/hfq7AAAV++c//+n1ecmSJcrOzi7VHh8fr+eff15ut9urPT8/X0lJSdq+fbtGjRqlSZMm6fTp03rzzTd1++236/3339fSpUvVoEEDSVJOTo4efPBBpaWl6aGHHlJoaKjefPNNjRo1Sl9//bVmzpzpc+0vv/yyoqOj9b///U/Lly/XHXfcUarPpk2b1L59e910001q0aKF9u7dq+eff15ZWVn68ssvFRMTU+ExbrnlFn3wwQcaPXq0JkyYoLNnz2rHjh3KyspS3759FRcX53O9gWDQoEEaO3ZsqfbLL7+8To5/8OBBzZw5U+3atVPPnj291pX17wsIegZAULn77rtNVf7TTUlJMSEhIeadd94pte6BBx4wkszs2bM9bXv27DHfffedVz+3221uuOEGY7fbzfHjx306rtvtNu3atTOTJ082v/71r83AgQN9rvnzzz83kkxmZmaF/fLy8owk85e//KXUupKSEnPkyBGfjxkIJJm777670n633367adu2ba3UsGHDBiPJLFq0qFb2DwQapsaAeuTCezg+++wzrVq1SuPGjdNNN91Uqn9mZqYuu+wyPf744zp16pQkqX379mrbtq1XP5vNpuHDh6u4uFh79uzxqZb169fru+++06hRozRq1CitW7dO33//vU/bnj+H8qbTzvv2228lSddee22pdQ0aNFCrVq282g4cOKCMjAzFxMR4puF++9vf6syZM5KkgoICPfDAA+rWrZuaNWsmh8OhIUOG6Msvv/Taz9q1a2Wz2fTGG2/oL3/5iy655BKFhYUpKSlJu3fv9ukca9qcOXPUt29ftWrVSo0bN1bv3r21fPnyUv2ys7N13XXXKSIiQs2aNVPnzp31pz/9SdKP53XVVVdJksaPH++Zllu8eLGksu8Rcrvdevrpp9WtWzeFhYUpMjJSqamp+vzzz2v1fIGawtQYUI+99957klTmVIskhYaGasyYMZo5c6bWr1+v5OTkcvfldDolSRdddJFPx166dKk6duyoq666Sl27dlWTJk306quv6ve//32Z/Y8ePapz585p3759mjVrliQpKSmpwmOcD2xLly7Vtddeq9DQ8n+kHTx4UFdffbUKCws1ceJExcXF6cCBA1q+fLlOnjypRo0aac+ePXr77bc1YsQItW/fXvn5+fq///s/DRgwQF9//XWpabrZs2crJCREDzzwgIqKivTXv/5V6enpys3N9ekaleX06dM6cuRIqXaHw6FGjRqVu93TTz+tm266Senp6Tpz5oxee+01jRgxQllZWRo6dKgkadu2bbrxxhvVvXt3zZo1S3a7Xbt379b69esl/Ti9OmvWLD3yyCOaOHGi+vXrJ0nq27dvucfNyMjQ4sWLNWTIEN1xxx0qKSnRxx9/rM8++0x9+vSp9nUA6oy/h6QAVE1FU2MXTpkMHz7cSDL/+9//yt3fW2+9ZSSZZ555ptw+R48eNa1btzb9+vXzqcYzZ86YVq1amQcffNDTNmbMGNOjR49yt7Hb7UaSkWRatWpVYT3nud1uM2DAACPJREVFmdGjR5v58+eb//73v6X6jh071oSEhJgNGzaUuR9jjDl9+rQ5d+6c17q9e/cau91uZs2a5Wn76KOPjCQTHx9viouLPe1PP/20kWS2bNlSae1lOX/+ZS2vvvqqp19ZU2MnT570+nzmzBnTtWtXc8MNN3ja5s6daySZH374odwaKpoau/C4a9asMZLMvffeW6rv+WsKBDqmxoB67NixY5Kk5s2bl9vn/DqXy1XmerfbrfT0dBUWFurZZ5/16bgffPCBjh49qtGjR3vaRo8erS+//FLbtm0rd5v3339fTz75pC699FKdOHGi0uPYbDatWrVKf/7zn9WiRQu9+uqruvvuu9W2bVuNHDnSM7Xmdrv19ttv61e/+lWZoxQ2m02SZLfbFRLy44/Fc+fO6ejRo57poy+++KLUduPHj/capTk/guLr9GFZhg0bpuzs7FLL9ddfX+F2jRs39vz5f//7n4qKitSvXz+vuiMiIiRJ77zzTo3c9Pzmm2/KZrNp+vTppdadv6ZAoGNqDKjHzoecY8eOeX4JXqiysHTPPfdo5cqVWrJkiXr06OHTcV9++WW1b9/eM/UiSR07dlSTJk20dOlSPfbYY6W2Of+LfsiQIRo2bJi6du2qZs2aadKkSRUey26368EHH9SDDz6oQ4cO6T//+Y+efvppvfHGG2rYsKFefvll/fDDD3K5XOratWuF+zp/v8uCBQu0d+9enTt3zrPuwvuNJOnSSy/1+tyiRQtJPwaR6rrkkksqnKIsT1ZWlv785z9r8+bNKi4u9rT/PJCMHDlS//jHP3THHXdo6tSpSkpK0s0336zf/OY3ngBYFd9++61iYmLUsmXLKm8LBApGhIB6LD4+XpL01Vdfldvn/LouXbqUWjdz5kwtWLBAs2fP1m233ebTMV0ul9577z3t3btXl112mWfp0qWLTp48qVdeeaXUu4su1LFjR/Xq1UtLly716ZjntWnTxnNj9mWXXaY33nhDJSUlPm//2GOPafLkyerfv79efvllrVq1StnZ2briiivKHEE5/8qBC1V2fjXt448/1k033aSwsDAtWLBA77//vrKzszVmzBivWho3bqx169bpww8/1G233aavvvpKI0eO1KBBg7xCH2AljAgB9diNN96ozMxMLVmyRP379y+1/ty5c3rllVfUokWLUk9ezZ8/XzNmzNB9992nP/7xjz4f86233tLp06f197//vdSN1Tt37tRDDz2k9evX67rrrqtwP6dOnfIa2aiKhg0bqnv37vrmm2905MgRtW7dWg6HQ1u3bq1wu+XLl+v666/XCy+84NVeWFjo803i/vDmm28qLCxMq1atkt1u97QvWrSoVN+QkBAlJSUpKSlJTz31lB577DE9+OCD+uijj5ScnFylKa2OHTtq1apVKigoYFQIQYsRIaAe69u3r5KTk7Vo0SJlZWWVWv/ggw9q165d+sMf/uB1j8nrr7+ue++9V+np6XrqqaeqdMyXX35ZHTp00F133aXf/OY3XssDDzygZs2aeUZ6SkpKypxGysvL05YtWyp96uibb77Rvn37SrUXFhYqJydHLVq0UGRkpEJCQjR8+HC99957ZT7WfX7UpEGDBqVGc5YtW6YDBw74fP7+0KBBA9lsNq9Rne+++05vv/22V7+CgoJS255/aeL50Nm0aVNJlb+6QPrxZZbGmDJfslnXo2JAdTEiBNRzS5YsUVJSkoYNG6YxY8aoX79+Ki4u1ltvvaW1a9dq5MiRXo+05+XlaezYsWrVqpWSkpJKTU/17dtXHTp0KPNYBw8e1EcffaR77723zPV2u10pKSlatmyZnnnmGZ04cUKxsbEaOXKkrrjiCjVt2lRbtmzRokWLFB4erocffrjCc/vyyy81ZswYDRkyRP369VPLli114MABvfTSSzp48KDmzZvnmb567LHH9O9//1sDBgzQxIkTFR8fr0OHDmnZsmX65JNPFBERoRtvvFGzZs3S+PHj1bdvX23ZskVLly4t93x9sXbtWl1//fWaPn26ZsyYUWn/Xbt26eWXXy7VHhUVpUGDBpW5zdChQ/XUU08pNTVVY8aM0eHDhzV//nx16tTJa1p01qxZWrdunYYOHaq2bdvq8OHDWrBggS655BLPCF3Hjh0VERGhhQsXqnnz5mratKkSEhLUvn37Use9/vrrddttt+mZZ57RN998o9TUVLndbn388ce6/vrrK72/CwgIfnxiDUA1VOXx+fOOHTtmZsyYYa644grTuHFj07x5c3PttdeaxYsXl3rMedGiRRU+xl3RG4effPJJI8msXr263D6LFy82ksw777xjiouLze9+9zvTvXt343A4TMOGDU3btm1NRkaG2bt3b6XXIj8/38yePdsMGDDAtGnTxoSGhpoWLVqYG264wSxfvrxU///+979m7NixJjIy0tjtdtOhQwdz9913ex6BP336tJkyZYpp06aNady4sbn22mtNTk6OGTBggBkwYIBnP+cfn1+2bJnX/vfu3VvqGr333ntGklm4cGGl51PRdf/58cv6e37hhRfMZZddZux2u4mLizOLFi0y06dP9/q3snr1ajNs2DAT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yz3v6OjoKvUPFtW5FufNmTNHs2fP1ocffqju3bvXZpm+8/dNSggsVb1Zes6cOZ62oqKienOz9Oeff+5pW7VqVYU3gn711VdGkvn666+92gcPHmwmTJhQq/XWpupcC7fbbWJiYkrdLN2zZ08zbdq0Wq23NlXnWhw6dMhs2bLFa5Fknn76abNnz566Kr3GVedaGPPjz4drrrnGDBgwwJw4caIuSq1xV199tZk0aZLn87lz58zFF19c4c3SN954o1dbYmJivblZuirXwhhjHn/8ceNwOExOTk5dlOgzghCMMcb897//NZs2bTIzZ840zZo1M5s2bTKbNm0yx44d8/Tp3LmzeeuttzyfZ8+ebSIiIsw777xjvvrqKzNs2DDTvn17c+rUKX+cQo1JTU01vXr1Mrm5ueaTTz4xl112mRk9erRn/ffff286d+5scnNzjTHGnDlzxnTq1Mn069fP5Obmmt27d5s5c+YYm81m/vWvf/nrNGpEVa+FMcbMnTvXOBwOs2zZMvPNN9+Yhx56yISFhZndu3f74xRqTHWuxYVUD54aM6bq16KoqMgkJCSYbt26md27d5tDhw55lpKSEn+dRpW99tprxm63m8WLF5uvv/7aTJw40URERBin02mMMea2224zU6dO9fRfv369CQ0NNXPmzDHbt28306dPNw0bNjRbtmzx1ynUmKpei9mzZ5tGjRqZ5cuXe/39//x3jL8QhGCMMeb22283kkotH330kaePJLNo0SLPZ7fbbR5++GETFRVl7Ha7SUpKMjt37qz74mvY0aNHzejRo02zZs2Mw+Ew48eP9/qPde/evaWuza5du8zNN99sWrdubZo0aWK6d+9e6nH6YFSda2GMMZmZmeaSSy4xTZo0MYmJiebjjz+u48prXnWvxc/VlyBU1Wvx0UcflfnzRZLZu3evf06imp599llz6aWXmkaNGpmrr77afPbZZ551AwYMMLfffrtX/zfeeMNcfvnlplGjRuaKK64I+v85+rmqXIu2bduW+fc/ffr0ui/8AjZjjKmTOTgAAIAAw1NjAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAILOwIEDPV8EunnzZr/VMW7cOE8db7/9tt/qAFB9BCEAQWnChAk6dOiQunbtqu+++67cUDRw4EDdd9995X4+b/HixaW+IHXt2rW68sorZbfb1alTJy1evNhr/dNPP61Dhw798pMB4DcEIQBBqUmTJoqOjlZoaGit7H/v3r0aOnSorr/+em3evFn33Xef7rjjDq1atcrTJzw8POi/SRywutr5CQIAQW7hwoVq3769nnzySUlSfHy8PvnkE82dO1cpKSl+rg5ATWFECADKkJOTo+TkZK+2lJQU5eTk+KkiALWBESEA9Ubfvn0VEuL9/3enTp1Sz549vdoWLFigf/zjH15tJSUlCgsL83x2Op2Kiory6hMVFSWXy6VTp06pcePGNVs8AL8gCAGoN15//XXFx8d7taWnp5fql56ergcffNCr7a233tJjjz1Wq/UBCDwEIQD1RmxsrDp16uTVVtbITXh4eKl+rVu39vocHR2t/Px8r7b8/Hw5HA5Gg4B6hHuEAKAMiYmJWr16tVdbdna2EhMT/VQRgNpAEAKAMtx1113as2eP/vCHP2jHjh1asGCB3njjDd1///3+Lg1ADSIIAUAZ2rdvr3/961/Kzs5Wjx499OSTT+of//gHj84D9YzNGGP8XQQAVMXAgQPVs2dPzZs3z9+lSJJsNptWrFih4cOH+7sUAFXEiBCAoLRgwQI1a9ZMW7Zs8VsNd911l5o1a+a34wP45RgRAhB0Dhw4oFOnTkmSLr30UjVq1MgvdRw+fFgul0uS1KZNGzVt2tQvdQCoPoIQAACwLKbGAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZf1/MNAXLzYl8WcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The data must be converted from detector numbers and angles to the sample frame. \n", "macs.data.project_data_QE()\n", "U,V,I = macs.data.bin_constE_slice(120,120,[-2,2],[-2,2],[-1,1])\n", "\n", "plt.figure()\n", "plt.pcolormesh(U,V,I.T,vmin=0,vmax=20)\n", "plt.xlabel('[HH0]')\n", "plt.ylabel('[00L]')\n", "plt.title(\"TiO2 A3 Scan, Elastic\")" ] }, { "cell_type": "markdown", "id": "de8e785e-c965-4223-822a-973e9ba54619", "metadata": {}, "source": [ "At any point the files in the kidney scan folder can be converted into MSlice readable ng0 files. \n", "\n", "The files may be divided into individual Ei values or combined into a single larger one. If they originate from ng0 files, they may also be individual ng0 files corresponding to their origin files" ] }, { "cell_type": "code", "execution_count": 24, "id": "26bd9876-f390-4a78-99a8-d976e53d85de", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Here we combine any scans that exist individually and append them to the data holder class\n", "macs.data.combine_all_csv()\n", "macs.data.load_data_matrix_from_csv('_total.csv')" ] }, { "cell_type": "code", "execution_count": 25, "id": "4f17fb94-6681-4c6a-a6e6-ffde008d84e0", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#The data is now written to a MACS style file for comparison in MSlice.\n", "macs.data.write_data_to_ng0(filename='_cube_TiO2_demonstration_scan.ng0',beta_1=macs.monochromator.beta_1,\\\n", " beta_2=macs.monochromator.beta_2)" ] } ], "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.14" } }, "nbformat": 4, "nbformat_minor": 5 }