|
| 1 | +{ |
| 2 | + "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "metadata": {}, |
| 6 | + "source": [ |
| 7 | + "In this notebook we will read and display a CT scan of the brain, of the publically available MIDAS database." |
| 8 | + ] |
| 9 | + }, |
| 10 | + { |
| 11 | + "cell_type": "code", |
| 12 | + "execution_count": 30, |
| 13 | + "metadata": { |
| 14 | + "collapsed": true |
| 15 | + }, |
| 16 | + "outputs": [], |
| 17 | + "source": [ |
| 18 | + "import urllib\n", |
| 19 | + "import SimpleITK as sitk\n", |
| 20 | + "import tarfile\n", |
| 21 | + "import os\n", |
| 22 | + "import matplotlib.pyplot as plt\n", |
| 23 | + "%matplotlib inline" |
| 24 | + ] |
| 25 | + }, |
| 26 | + { |
| 27 | + "cell_type": "markdown", |
| 28 | + "metadata": {}, |
| 29 | + "source": [ |
| 30 | + "First, we download the brain scan. This can take a while, the file is about 56MB." |
| 31 | + ] |
| 32 | + }, |
| 33 | + { |
| 34 | + "cell_type": "code", |
| 35 | + "execution_count": 6, |
| 36 | + "metadata": { |
| 37 | + "collapsed": true |
| 38 | + }, |
| 39 | + "outputs": [], |
| 40 | + "source": [ |
| 41 | + "# Can take a while, the file is about 56MB\n", |
| 42 | + "if not os.path.exists('PublicBrain001.anonymized.dcm.tgz'):\n", |
| 43 | + " publicbrain = urllib.URLopener()\n", |
| 44 | + " publicbrain.retrieve('http://www.insight-journal.org/midas/bitstream/view/375', \n", |
| 45 | + " 'PublicBrain001.anonymized.dcm.tgz')" |
| 46 | + ] |
| 47 | + }, |
| 48 | + { |
| 49 | + "cell_type": "markdown", |
| 50 | + "metadata": {}, |
| 51 | + "source": [ |
| 52 | + "Then we unpack the file, the folder is extracted to `anonymized`." |
| 53 | + ] |
| 54 | + }, |
| 55 | + { |
| 56 | + "cell_type": "code", |
| 57 | + "execution_count": 10, |
| 58 | + "metadata": {}, |
| 59 | + "outputs": [], |
| 60 | + "source": [ |
| 61 | + "if not os.path.exists('./anonymized'):\n", |
| 62 | + " tar = tarfile.open('PublicBrain001.anonymized.dcm.tgz')\n", |
| 63 | + " tar.extractall()\n", |
| 64 | + " tar.close()" |
| 65 | + ] |
| 66 | + }, |
| 67 | + { |
| 68 | + "cell_type": "markdown", |
| 69 | + "metadata": {}, |
| 70 | + "source": [ |
| 71 | + "The collection of files we get are DICOM files, each one of those represents a slice in the final 3D volume. In the examples folder there is a `dicom_wrapper.py` which provides a wrapper to SimpleITK, which we repeat here for convenience." |
| 72 | + ] |
| 73 | + }, |
| 74 | + { |
| 75 | + "cell_type": "code", |
| 76 | + "execution_count": 22, |
| 77 | + "metadata": { |
| 78 | + "collapsed": true |
| 79 | + }, |
| 80 | + "outputs": [], |
| 81 | + "source": [ |
| 82 | + "def read_dicom_series(folder):\n", |
| 83 | + " \"\"\"Read a folder with DICOM files and outputs a SimpleITK image.\n", |
| 84 | + " Assumes that there is only one DICOM series in the folder.\n", |
| 85 | + "\n", |
| 86 | + " Parameters\n", |
| 87 | + " ----------\n", |
| 88 | + " folder : string\n", |
| 89 | + " Full path to folder with dicom files.\n", |
| 90 | + "\n", |
| 91 | + " Returns\n", |
| 92 | + " -------\n", |
| 93 | + " SimpleITK image.\n", |
| 94 | + " \"\"\"\n", |
| 95 | + " reader = sitk.ImageSeriesReader()\n", |
| 96 | + " series_ids = reader.GetGDCMSeriesIDs(folder.encode('ascii'))\n", |
| 97 | + " # There are multiple series_ids in the folder, but after experimenting a bit, \n", |
| 98 | + " # we pick the second one, this is [1] below.\n", |
| 99 | + " filenames = reader.GetGDCMSeriesFileNames(folder, series_ids[1],\n", |
| 100 | + " False, # useSeriesDetails\n", |
| 101 | + " False, # recursive\n", |
| 102 | + " True) # load sequences\n", |
| 103 | + " reader.SetFileNames(filenames)\n", |
| 104 | + " image = reader.Execute()\n", |
| 105 | + "\n", |
| 106 | + " return image\n" |
| 107 | + ] |
| 108 | + }, |
| 109 | + { |
| 110 | + "cell_type": "code", |
| 111 | + "execution_count": 25, |
| 112 | + "metadata": {}, |
| 113 | + "outputs": [], |
| 114 | + "source": [ |
| 115 | + "image = read_dicom_series('./anonymized/')" |
| 116 | + ] |
| 117 | + }, |
| 118 | + { |
| 119 | + "cell_type": "markdown", |
| 120 | + "metadata": {}, |
| 121 | + "source": [ |
| 122 | + "So, let us see what we have loaded." |
| 123 | + ] |
| 124 | + }, |
| 125 | + { |
| 126 | + "cell_type": "code", |
| 127 | + "execution_count": 26, |
| 128 | + "metadata": {}, |
| 129 | + "outputs": [ |
| 130 | + { |
| 131 | + "data": { |
| 132 | + "text/plain": [ |
| 133 | + "(512, 512, 91)" |
| 134 | + ] |
| 135 | + }, |
| 136 | + "execution_count": 26, |
| 137 | + "metadata": {}, |
| 138 | + "output_type": "execute_result" |
| 139 | + } |
| 140 | + ], |
| 141 | + "source": [ |
| 142 | + "image.GetSize()" |
| 143 | + ] |
| 144 | + }, |
| 145 | + { |
| 146 | + "cell_type": "markdown", |
| 147 | + "metadata": {}, |
| 148 | + "source": [ |
| 149 | + "An image with an in-plane resolution of 512 x 512 with 91 slices. What about the 'real' spacing? What is the size one pixel, or voxel, represents?\n" |
| 150 | + ] |
| 151 | + }, |
| 152 | + { |
| 153 | + "cell_type": "code", |
| 154 | + "execution_count": 27, |
| 155 | + "metadata": {}, |
| 156 | + "outputs": [ |
| 157 | + { |
| 158 | + "data": { |
| 159 | + "text/plain": [ |
| 160 | + "(0.4199219, 0.4199219, 1.25)" |
| 161 | + ] |
| 162 | + }, |
| 163 | + "execution_count": 27, |
| 164 | + "metadata": {}, |
| 165 | + "output_type": "execute_result" |
| 166 | + } |
| 167 | + ], |
| 168 | + "source": [ |
| 169 | + "image.GetSpacing()" |
| 170 | + ] |
| 171 | + }, |
| 172 | + { |
| 173 | + "cell_type": "markdown", |
| 174 | + "metadata": {}, |
| 175 | + "source": [ |
| 176 | + "So about 0.42x0.42mm in-plane and a slice thichness of 1.25mm." |
| 177 | + ] |
| 178 | + }, |
| 179 | + { |
| 180 | + "cell_type": "markdown", |
| 181 | + "metadata": {}, |
| 182 | + "source": [ |
| 183 | + "To be able to plot the image with `matplotlib`, we convert it to a `numpy` array, for which we can use SimpleITK's `GetArrayFromImage` function." |
| 184 | + ] |
| 185 | + }, |
| 186 | + { |
| 187 | + "cell_type": "code", |
| 188 | + "execution_count": 28, |
| 189 | + "metadata": { |
| 190 | + "collapsed": true |
| 191 | + }, |
| 192 | + "outputs": [], |
| 193 | + "source": [ |
| 194 | + "array = sitk.GetArrayFromImage(image)" |
| 195 | + ] |
| 196 | + }, |
| 197 | + { |
| 198 | + "cell_type": "markdown", |
| 199 | + "metadata": {}, |
| 200 | + "source": [ |
| 201 | + "Be careful, SimpleITK represents the axis in world-order, where the last axis represents depth, in image-order, this is depth first." |
| 202 | + ] |
| 203 | + }, |
| 204 | + { |
| 205 | + "cell_type": "code", |
| 206 | + "execution_count": 29, |
| 207 | + "metadata": {}, |
| 208 | + "outputs": [ |
| 209 | + { |
| 210 | + "data": { |
| 211 | + "text/plain": [ |
| 212 | + "(91, 512, 512)" |
| 213 | + ] |
| 214 | + }, |
| 215 | + "execution_count": 29, |
| 216 | + "metadata": {}, |
| 217 | + "output_type": "execute_result" |
| 218 | + } |
| 219 | + ], |
| 220 | + "source": [ |
| 221 | + "array.shape" |
| 222 | + ] |
| 223 | + }, |
| 224 | + { |
| 225 | + "cell_type": "code", |
| 226 | + "execution_count": 41, |
| 227 | + "metadata": {}, |
| 228 | + "outputs": [ |
| 229 | + { |
| 230 | + "ename": "AttributeError", |
| 231 | + "evalue": "'numpy.ndarray' object has no attribute 'imshow'", |
| 232 | + "output_type": "error", |
| 233 | + "traceback": [ |
| 234 | + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
| 235 | + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", |
| 236 | + "\u001b[0;32m<ipython-input-41-f4b5bc37d95f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m15\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0maxs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'gray'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0maxs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'slice {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
| 237 | + "\u001b[0;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'imshow'" |
| 238 | + ] |
| 239 | + }, |
| 240 | + { |
| 241 | + "data": { |
| 242 | + "image/png": "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\nHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1\nAAAAA7PUAQAADGyppa6qzlbVs1W1UVX37nDej1dVV9XadCPC7mmW0WiW0WiWEemWVbVwqauqa5Lc\nn+TWJGeS3FlVZ65y3vcl+VdJPjP1kLAbmmU0mmU0mmVEumWVLfNO3S1JNrr7Yne/mOTBJOeuct6/\nSfILSf50wvlgLzTLaDTLaDTLiHTLylpmqbs+yXNz1y/Njn1bVb01yQ3d/T8mnA32SrOMRrOMRrOM\nSLesrH3/opSq+p4k/yHJzyxx7t1VtV5V61euXNnvQ8OeaJbRaJbR7KbZ2fm65ch5rWVkyyx1l5Pc\nMHf91OzYy74vyd9I8ttV9YdJ3p7kwtU+WNrd57t7rbvXTp48ufepYWeaZTSaZTSTNZvolkPjtZaV\ntcxS90SS01V1U1Vdm+SOJBdevrG7v9nd13X3jd19Y5LHk9ze3esHMjEspllGo1lGo1lGpFtW1sKl\nrrtfSnJPkkeTfDHJQ939dFXdV1W3H/SAsFuaZTSaZTSaZUS6ZZWdWOak7n4kySNbjn1om3Pfsf+x\nYH80y2g0y2g0y4h0y6ra9y9KAQAA4OhY6gAAAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkD\nAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAZmqQMAABiYpQ4A\nAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYEstdVV1tqqeraqNqrr3Krf/dFU9U1VPVdVvVdWb\nph8VlqdZRqNZRqNZRqRbVtXCpa6qrklyf5Jbk5xJcmdVndly2meTrHX330zycJJ/P/WgsCzNMhrN\nMhrNMiLdssqWeafuliQb3X2xu19M8mCSc/MndPdj3f2t2dXHk5yadkzYFc0yGs0yGs0yIt2yspZZ\n6q5P8tzc9UuzY9u5K8lvXO2Gqrq7qtarav3KlSvLTwm7o1lGo1lGM1mziW45NF5rWVmT/qKUqnp3\nkrUkv3i127v7fHevdffayZMnp3xo2BPNMhrNMppFzSa65fjxWstoTixxzuUkN8xdPzU79gpV9a4k\nH0zyo939wjTjwZ5oltFoltFolhHplpW1zDt1TyQ5XVU3VdW1Se5IcmH+hKp6S5L/lOT27v7q9GPC\nrmiW0WiW0WiWEemWlbVwqevul5Lck+TRJF9M8lB3P11V91XV7bPTfjHJX07y61X1uaq6sM3dwYHT\nLKPRLKPRLCPSLatsmR+/THc/kuSRLcc+NHf5XRPPBfuiWUajWUajWUakW1bVpL8oBQAAgMNlqQMA\nABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAA\nYGCWOgAAgIFZ6gAAAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYEstdVV1\ntqqeraqNqrr3Kre/qqo+Obv9M1V149SDwm5oltFoltFolhHpllW1cKmrqmuS3J/k1iRnktxZVWe2\nnHZXkm90919N8ktJfmHqQWFZmmU0mmU0mmVEumWVLfNO3S1JNrr7Yne/mOTBJOe2nHMuya/OLj+c\n5J1VVdONCbuiWUajWUajWUakW1bWiSXOuT7Jc3PXLyX5W9ud090vVdU3k/xgkq/Nn1RVdye5e3b1\nhar6wl6GPiDXZcu8R8w8O/trO9ym2aNhnsW261azR+e4zXTc5jnwZhPd7pJ5dub/Hxy//03Ms7Od\nml3aMkvdZLr7fJLzSVJV6929dpiPvxPz7Ow4znMYj6PZ5ZlnscPoVrO7c9xmOo7zHMbj6HZ55tmZ\nZs2zyHGcZ4r7WebHLy8nuWHu+qnZsaueU1Unkrw2yfNTDAh7oFlGo1lGo1lGpFtW1jJL3RNJTlfV\nTVV1bZI7klzYcs6FJO+ZXf7HST7V3T3dmLArmmU0mmU0mmVEumVlLfzxy9nPE9+T5NEk1yT5WHc/\nXVX3JVnv7gtJ/kuSX6uqjSRfz+YfkkXO72Pug2CenQ0zj2aPjHkWu+pMmj1Sx22mIeY5wGa3fcwj\nZJ6dDTOP19ojY56dTTJP+csHAACAcS31j48DAABwPFnqAAAABnYgS11Vna2qZ6tqo6ruvcrtr6qq\nT85u/0xV3Th328/Ojj9bVT92SPP8dFU9U1VPVdVvVdWb5m7786r63Oxr64dpD2qe91bVlbnH/Wdz\nt72nqn5/9vWerd97QPP80twsX6qqP5m7bdLnp6o+VlVf3e7fe6lNH5nN+lRVvXXutj0/N5rd9zzf\ntc3O7vPQu9XsvufRrGY1u795NKtZze48z+E2292TfmXzg6d/kOTNSa5N8ntJzmw5518m+ejs8h1J\nPjm7fGZ2/quS3DS7n2sOYZ6/m+QvzS7/i5fnmV3/v0fw/Lw3yX+8yvf+QJKLs/++fnb59Qc9z5bz\nP5DNDxYf1PPzd5K8NckXtrn9tiS/kaSSvD3JZ/b73GhWs6N1q1nNalazmtWsZjU7/3UQ79TdkmSj\nuy9294tJHkxybss555L86uzyw0neWVU1O/5gd7/Q3V9OsjG7vwOdp7sf6+5vza4+ns1/t+SgLPP8\nbOfHkvxmd3+9u7+R5DeTnD3kee5M8ol9Pua2uvvT2fxtU9s5l+TjvenxJK+rqjdkf8+NZvc5zw5W\nvtnkSLrV7D7n2YFmN2lWs5rV7L7m2YFmN03a7EEsddcneW7u+qXZsaue090vJflmkh9c8nsPYp55\nd2Vza37Zq6tqvaoer6p/uM9ZdjPPj8/ein24ql7+hzKP9PmZvY1/U5JPzR2e+vlZZLt59/PcaHaa\neTS7vam71ew082h2e5p9Jc1qVrN7m0ez25u02YX/Tt13k6p6d5K1JD86d/hN3X25qt6c5FNV9fnu\n/oMDHuW/J/lEd79QVf88m38L9PcO+DGXcUeSh7v7z+eOHcXzw4xmF9LsMaPZhTR7zGh2Ic0eM5pd\naCWbPYh36i4nuWHu+qnZsaueU1Unkrw2yfNLfu9BzJOqeleSDya5vbtfePl4d1+e/fdikt9O8paD\nnqe7n5+b4T8neduy33sQ88y5I1veqj6A52eR7ebdz3Oj2X3Oo9mFpu5Ws/ucR7MLaTaaXfI+NRvN\nXm0ezS40bbM9/YcCT2TzA3035S8+qPjDW855f175wdKHZpd/OK/8YOnF7P+DpcvM85Zsfrjy9Jbj\nr0/yqtnl65L8fnb40OWE87xh7vI/SvJ4/8UHJ788m+v1s8s/cNDzzM67OckfZvYP1h/U8zO7rxuz\n/YdK/0Fe+aHS393vc6NZze632cPuVrOa1axmNatZzWr2Ffc3xcBXGfK2JF+ahfXB2bH7svm3Bkny\n6iS/ns0Pjv5ukjfPfe8HZ9/3bJJbD2me/5nk/yT53Ozrwuz4307y+VkYn09y1yHN82+TPD173MeS\n3Dz3vf909rxtJHnfYcwzu/7hJP9uy/dN/vxk829OvpLkz7L5M8R3JfmpJD81u72S3D+b9fNJ1qZ4\nbjSr2dG61axmNatZzWpWs5p9+atm3wgAAMCADuQfHwcAAOBwWOoAAAAGZqkDAAAYmKUOAABgYJY6\nAACAgVnqAAAABmapAwAAGJilDgAAYGALl7qq+lhVfbWqvrDN7VVVH6mqjap6qqreOv2YsDzNMiLd\nMhrNMhrNssqWeafugSRnd7j91iSnZ193J/mV/Y8F+/JANMt4HohuGcsD0SxjeSCaZUUtXOq6+9NJ\nvr7DKeeSfLw3PZ7kdVX1hqkGhN3SLCPSLaPRLKPRLKtsis/UXZ/kubnrl2bH4LjSLCPSLaPRLKPR\nLMM6cZgPVlV3Z/Pt7LzmNa95280333yYD88KefLJJ7/W3ScP+nE0y5QOo1vNMiWvtYxGs4xmqman\nWOouJ7lh7vqp2bHv0N3nk5xPkrW1tV5fX5/g4fluVFV/tI9v1yxH4jC61SxT8lrLaDTLaPbZ7LdN\n8eOXF5L8xOw3Br09yTe7+ysT3C8cFM0yIt0yGs0yGs0yrIXv1FXVJ5K8I8l1VXUpyc8n+d4k6e6P\nJnkkyW1JNpJ8K8n7DmpYWIZmGZFuGY1mGY1mWWULl7ruvnPB7Z3k/ZNNBPukWUakW0ajWUajWVbZ\nFD9+CQAAwBGx1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAA\nA7PUAQAADMxSBwAAMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAM\nzFIHAAAwMEsdAADAwJZa6qrqbFU9W1UbVXXvVW5/Y1U9VlWfraqnquq26UeF5WmW0WiW0WiWEemW\nVbVwqauqa5Lcn+TWJGeS3FlVZ7ac9nNJHurutyS5I8kvTz0oLEuzjEazjEazjEi3rLJl3qm7JclG\nd1/s7heTPJjk3JZzOsn3zy6/NskfTzci7JpmGY1mGY1mGZFuWVnLLHXXJ3lu7vql2bF5H07y7qq6\nlOSRJB+42h1V1d1VtV5V61euXNnDuLAUzTIazTKayZpNdMuh8VrLyprqF6XcmeSB7j6V5LYkv1ZV\n33Hf3X2+u9e6e+3kyZMTPTTsiWYZjWYZzVLNJrrlWPFay5CWWeouJ7lh7vqp2bF5dyV5KEm6+3eS\nvDrJdVMMCHugWUajWUajWUakW1bWMkvdE0lOV9VNVXVtNj80emHLOf87yTuTpKr+ejb/AHgvmqOi\nWUajWUajWUakW1bWwqWuu19Kck+SR5N8MZu/Eejpqrqvqm6fnfYzSX6yqn4vySeSvLe7+6CGhp1o\nltFoltFolhHpllV2YpmTuvuRbH5YdP7Yh+YuP5PkR6YdDfZOs4xGs4xGs4xIt6yqqX5RCgAAAEfA\nUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADMxSBwAAMDBL\nHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwJZa\n6qrqbFU9W1UbVXXvNuf8k6p6pqqerqr/Ou2YsDuaZTSaZTSaZUS6ZVWdWHRCVV2T5P4kfz/JpSRP\nVNWF7n5m7pzTSX42yY909zeq6q8c1MCwiGYZjWYZjWYZkW5ZZcu8U3dLko3uvtjdLyZ5MMm5Lef8\nZJL7u/sbSdLdX512TNgVzTIazTIazTIi3bKyllnqrk/y3Nz1S7Nj834oyQ9V1f+qqser6uzV7qiq\n7q6q9apav3Llyt4mhsU0y2g0y2gmazbRLYfGay0ra6pflHIiyekk70hyZ5L/r6pet/Wk7j7f3Wvd\nvXby5MmJHhr2RLOMRrOMZqlmE91yrHitZUjLLHWXk9wwd/3U7Ni8S0kudPefdfeXk3wpm38g4Cho\nltFoltFolhHplpW1zFL3RJLTVXVTVV2b5I4kF7ac89+y+TcaqarrsvnW9cUJ54Td0Cyj0Syj0Swj\n0i0ra+FS190vJbknyaNJvpjkoe5+uqruq6rbZ6c9muT5qnomyWNJ/nV3P39QQ8NONMtoNMtoNMuI\ndMsqq+4+kgdeW1vr9fX1I3lsxldVT3b32mE+pmbZr8PuVrPsl9daRqNZRjNVs1P9ohQAAACOgKUO\nAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAZmqQMAABiYpQ4AAGBgljoA\nAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIEttdRV\n1dmqeraqNqrq3h3O+/Gq6qpam25E2D3NMhrNMhrNMiLdsqoWLnVVdU2S+5PcmuRMkjur6sxVzvu+\nJP8qyWemHhJ2Q7OMRrOMRrOMSLessmXeqbslyUZ3X+zuF5M8mOTcVc77N0l+IcmfTjgf7IVmGY1m\nGY1mGZFuWVnLLHXXJ3lu7vql2bFvq6q3Jrmhu//HhLPBXmmW0WiW0WiWEemWlbXvX5RSVd+T5D8k\n+Zklzr27qtarav3KlSv7fWjYE80yGs0ymt00Oztftxw5r7WMbJml7nKSG+aun5ode9n3JfkbSX67\nqv4wyduTXLjaB0u7+3x3r3X32smTJ/c+NexMs4xGs4xmsmYT3XJovNayspZZ6p5Icrqqbqqqa5Pc\nkeTCyzd29ze7+7ruvrG7b0zyeJLbu3v9QCaGxTTLaDTLaDTLiHTLylq41HX3S0nuSfJoki8meai7\nn66q+6rq9oMeEHZLs4xGs4xGs4xIt6yyE8uc1N2PJHlky7EPbXPuO/Y/FuyPZhmNZhmNZhmRbllV\n+/5FKQAAABwdSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADMxSBwAA\nMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADA\nwCx1AAAAA7PUAQAADGyppa6qzlbVs1W1UVX3XuX2n66qZ6rqqar6rap60/SjwvI0y2g0y2g0y4h0\ny6pauNRV1TVJ7k9ya5IzSe6sqjNbTvtskrXu/ptJHk7y76ceFJalWUajWUajWUakW1bZMu/U3ZJk\no7svdveLSR5Mcm7+hO5+rLu/Nbv6eJJT044Ju6JZRqNZRqNZRqRbVtYyS931SZ6bu35pdmw7dyX5\njavdUFV3V9V6Va1fuXJl+SlhdzTLaDTLaCZrNtEth8ZrLStr0l+UUlXvTrKW5Bevdnt3n+/ute5e\nO3ny5JQPDXuiWUajWUazqNlEtxw/XmsZzYklzrmc5Ia566dmx16hqt6V5INJfrS7X5hmPNgTzTIa\nzTIazTIi3bKylnmn7okkp6vqpqq6NskdSS7Mn1BVb0nyn5Lc3t1fnX5M2BXNMhrNMhrNMiLdsrIW\nLnXd/VKSe5I8muSLSR7q7qer6r6qun122i8m+ctJfr2qPldVF7a5OzhwmmU0mmU0mmVEumWVLfPj\nl+nuR5I8suXYh+Yuv2viuWBfNMtoNMtoNMuIdMuqmvQXpQAAAHC4LHUAAAADs9QBAAAMzFIHAAAw\nMEsdAADAwCx1AAAAA7PUAQAADMxSBwAAMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDA\nLHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADGyppa6qzlbVs1W1UVX3XuX2V1XV\nJ2e3f6aqbpx6UNgNzTIazTIazTIi3bKqFi51VXVNkvuT3JrkTJI7q+rMltPuSvKN7v6rSX4pyS9M\nPSgsS7OMRrOMRrOMSLessmXeqbslyUZ3X+zuF5M8mOTclnPOJfnV2eWHk7yzqmq6MWFXNMtoNMto\nNMuIdMvKOrHEOdcneW7u+qUkf2u7c7r7par6ZpIfTPK1+ZOq6u4kd8+uvlBVX9jL0AfkumyZ94iZ\nZ2d/bYfbNHs0zLPYdt1q9ugct5mO2zwH3myi210yz878/4Pj97+JeXa2U7NLW2apm0x3n09yPkmq\nar271w7z8Xdinp0dx3kO43E0uzzzLHYY3Wp2d47bTMdxnsN4HN0uzzw706x5FjmO80xxP8v8+OXl\nJDfMXT81O3bVc6rqRJLXJnl+igFhDzTLaDTLaDTLiHTLylpmqXsiyemquqmqrk1yR5ILW865kOQ9\ns8v/OMmnurunGxN2RbOMRrOMRrOMSLesrIU/fjn7eeJ7kjya5JokH+vup6vqviTr3X0hyX9J8mtV\ntZHk69n8Q7LI+X3MfRDMs7Nh5tHskTHPYledSbNH6rjNNMQ8B9jsto95hMyzs2Hm8Vp7ZMyzs0nm\nKX/5AAAAMK6l/vFxAAAAjidLHQAAwMAOZKmrqrNV9WxVbVTVvVe5/VVV9cnZ7Z+pqhvnbvvZ2fFn\nq+rHDmmen66qZ6rqqar6rap609xtf15Vn5t9bf0w7UHN896qujL3uP9s7rb3VNXvz77es/V7D2ie\nX5qb5UtV9Sdzt036/FTVx6rqq9v9ey+16SOzWZ+qqrfO3bbn50az+57nu7bZ2X0eerea3fc8mtWs\nZvc3j2Y1q9md5zncZrt70q9sfvD0D5K8Ocm1SX4vyZkt5/zLJB+dXb4jySdnl8/Mzn9Vkptm93PN\nIczzd5P8pdnlf/HyPLPr//cInp/3JvmPV/neH0hycfbf188uv/6g59ly/gey+cHig3p+/k6Styb5\nwja335bkN5JUkrcn+cx+nxvNana0bjWrWc1qVrOa1axm578O4p26W5JsdPfF7n4xyYNJzm0551yS\nX51dfjjJO6uqZscf7O4XuvvLSTZm93eg83T3Y939rdnVx7P575YclGWen+38WJLf7O6vd/c3kvxm\nkrOHPM+dST6xz8fcVnd/Opu/bWo755J8vDc9nuR1VfWG7O+50ew+59nByjebHEm3mt3nPDvQ7CbN\nalazmt3XPDvQ7KZJmz2Ipe76JM/NXb80O3bVc7r7pSTfTPKDS37vQcwz765sbs0ve3VVrVfV41X1\nD/c5y26OqhaKAAAgAElEQVTm+fHZW7EPV9XL/1DmkT4/s7fxb0ryqbnDUz8/i2w3736eG81OM49m\ntzd1t5qdZh7Nbk+zr6RZzWp2b/NodnuTNrvw36n7blJV706yluRH5w6/qbsvV9Wbk3yqqj7f3X9w\nwKP89ySf6O4XquqfZ/Nvgf7eAT/mMu5I8nB3//ncsaN4fpjR7EKaPWY0u5BmjxnNLqTZY0azC61k\nswfxTt3lJDfMXT81O3bVc6rqRJLXJnl+ye89iHlSVe9K8sEkt3f3Cy8f7+7Ls/9eTPLbSd5y0PN0\n9/NzM/znJG9b9nsPYp45d2TLW9UH8Pwsst28+3luNLvPeTS70NTdanaf82h2Ic1Gs0vep2aj2avN\no9mFpm22p/9Q4IlsfqDvpvzFBxV/eMs5788rP1j60OzyD+eVHyy9mP1/sHSZed6SzQ9Xnt5y/PVJ\nXjW7fF2S388OH7qccJ43zF3+R0ke77/44OSXZ3O9fnb5Bw56ntl5Nyf5w8z+wfqDen5m93Vjtv9Q\n6T/IKz9U+rv7fW40q9n9NnvY3WpWs5rVrGY1q1nNvuL+phj4KkPeluRLs7A+ODt2Xzb/1iBJXp3k\n17P5wdHfTfLmue/94Oz7nk1y6yHN8z+T/J8kn5t9XZgd/9tJPj8L4/NJ7jqkef5tkqdnj/tYkpvn\nvvefzp63jSTvO4x5Ztc/nOTfbfm+yZ+fbP7NyVeS/Fk2f4b4riQ/leSnZrdXkvtns34+ydoUz41m\nNTtat5rVrGY1q1nNalazL3/V7BsBAAAY0IH84+MAAAAcDksdAADAwCx1AAAAA7PUAQAADMxSBwAA\nMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADCwhUtdVX2sqr5aVV/Y5vaqqo9U1UZVPVVVb51+TFie\nZhmRbhmNZhmNZllly7xT90CSszvcfmuS07Ovu5P8yv7Hgn15IJplPA9Et4zlgWiWsTwQzbKiFi51\n3f3pJF/f4ZRzST7emx5P8rqqesNUA8JuaZYR6ZbRaJbRaJZVdmKC+7g+yXNz1y/Njn1l64lVdXc2\n/+Yjr3nNa9528803T/DwfDd68sknv9bdJ/f47ZrlSBxGt5plSl5rGY1mGc0+m/22KZa6pXX3+STn\nk2Rtba3X19cP8+FZIVX1R4fxOJplSofRrWaZktdaRqNZRjNVs1P89svLSW6Yu35qdgyOK80yIt0y\nGs0yGs0yrCmWugtJfmL2G4PenuSb3f0db1PDMaJZRqRbRqNZRqNZhrXwxy+r6hNJ3pHkuqq6lOTn\nk3xvknT3R5M8kuS2JBtJvpXkfQc1LCxDs4xIt4xGs4xGs6yyhUtdd9+54PZO8v7JJoJ90iwj0i2j\n0Syj0SyrbIofvwQAAOCIWOoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAA\nYGCWOgAAgIFZ6gAAAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACA\ngVnqAAAABmapAwAAGNhSS11Vna2qZ6tqo6ruvcrtb6yqx6rqs1X1VFXdNv2osDzNMhrNMhrNMiLd\nsqoWLnVVdU2S+5PcmuRMkjur6syW034uyUPd/ZYkdyT55akHhWVpltFoltFolhHpllW2zDt1tyTZ\n6O6L3f1ikgeTnNtyTif5/tnl1yb54+lGhF3TLKPRLKPRLCPSLStrmaXu+iTPzV2/NDs278NJ3l1V\nl5I8kuQDV7ujqrq7qtarav3KlSt7GBeWollGo1lGM1mziW45NF5rWVlT/aKUO5M80N2nktyW5Neq\n6jvuu7vPd/dad6+dPHlyooeGPdEso9Eso1mq2US3HCteaxnSMkvd5SQ3zF0/NTs2764kDyVJd/9O\nklcnuW6KAWEPNMtoNMtoNMuIdMvKWmapeyLJ6aq6qaquzeaHRi9sOed/J3lnklTVX8/mHwDvRXNU\nNMtoNMtoNMuIdMvKWrjUdfdLSe5J8miSL2bzNwI9XVX3VdXts9N+JslPVtXvJflEkvd2dx/U0LAT\nzTIazTIazTIi3bLKTixzUnc/ks0Pi84f+9Dc5WeS/Mi0o8HeaZbRaJbRaJYR6ZZVNdUvSgEAAOAI\nWOoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAZm\nqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGNhS\nS11Vna2qZ6tqo6ru3eacf1JVz1TV01X1X6cdE3ZHs4xGs4xGs4xIt6yqE4tOqKprktyf5O8nuZTk\niaq60N3PzJ1zOsnPJvmR7v5GVf2VgxoYFtEso9Eso9EsI9Itq2yZd+puSbLR3Re7+8UkDyY5t+Wc\nn0xyf3d/I0m6+6vTjgm7ollGo1lGo1lGpFtW1jJL3fVJnpu7fml2bN4PJfmhqvpfVfV4VZ2dakDY\nA80yGs0yGs0yIt2yshb++OUu7ud0knckOZXk01X1/3T3n8yfVFV3J7k7Sd74xjdO9NCwJ5plNJpl\nNEs1m+iWY8VrLUNa5p26y0lumLt+anZs3qUkF7r7z7r7y0m+lM0/EK/Q3ee7e627106ePLnXmWER\nzTIazTKayZpNdMuh8VrLylpmqXsiyemquqmqrk1yR5ILW875b9n8G41U1XXZfOv64oRzwm5oltFo\nltFolhHplpW1cKnr7peS3JPk0SRfTPJQdz9dVfdV1e2z0x5N8nxVPZPksST/urufP6ihYSeaZTSa\nZTSaZUS6ZZVVdx/JA6+trfX6+vqRPDbjq6onu3vtMB9Ts+zXYXerWfbLay2j0SyjmarZpf7xcQAA\nAI4nSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADMxSBwAAMDBLHQAA\nwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAA\nA7PUAQAADGyppa6qzlbVs1W1UVX37nDej1dVV9XadCPC7mmW0WiW0WiWEemWVbVwqauqa5Lcn+TW\nJGeS3FlVZ65y3vcl+VdJPjP1kLAbmmU0mmU0mmVEumWVLfNO3S1JNrr7Yne/mOTBJOeuct6/SfIL\nSf50wvlgLzTLaDTLaDTLiHTLylpmqbs+yXNz1y/Njn1bVb01yQ3d/T92uqOquruq1qtq/cqVK7se\nFpakWUajWUYzWbOzc3XLYfBay8ra9y9KqarvSfIfkvzMonO7+3x3r3X32smTJ/f70LAnmmU0mmU0\nu2k20S3Hg9daRrbMUnc5yQ1z10/Njr3s+5L8jSS/XVV/mOTtSS74YClHSLOMRrOMRrOMSLesrGWW\nuieSnK6qm6rq2iR3JLnw8o3d/c3uvq67b+zuG5M8nuT27l4/kIlhMc0yGs0yGs0yIt2yshYudd39\nUpJ7kjya5ItJHurup6vqvqq6/aAHhN3SLKPRLKPRLCPSLavsxDIndfcjSR7ZcuxD25z7jv2PBfuj\nWUajWUajWUakW1bVvn9RCgAAAEfHUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADA\nwCx1AAAAA7PUAQAADMxSBwAAMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAAD\ns9QBAAAMzFIHAAAwMEsdAADAwJZa6qrqbFU9W1UbVXXvVW7/6ap6pqqeqqrfqqo3TT8qLE+zjEaz\njEazjEi3rKqFS11VXZPk/iS3JjmT5M6qOrPltM8mWevuv5nk4ST/fupBYVmaZTSaZTSaZUS6ZZUt\n807dLUk2uvtid7+Y5MEk5+ZP6O7Huvtbs6uPJzk17ZiwK5plNJplNJplRLplZS2z1F2f5Lm565dm\nx7ZzV5LfuNoNVXV3Va1X1fqVK1eWnxJ2R7OMRrOMZrJmE91yaLzWsrIm/UUpVfXuJGtJfvFqt3f3\n+e5e6+61kydPTvnQsCeaZTSaZTSLmk10y/HjtZbRnFjinMtJbpi7fmp27BWq6l1JPpjkR7v7hWnG\ngz3RLKPRLKPRLCPSLStrmXfqnkhyuqpuqqprk9yR5ML8CVX1liT/Kcnt3f3V6ceEXdEso9Eso9Es\nI9ItK2vhUtfdLyW5J8mjSb6Y5KHufrqq7quq22en/WKSv5zk16vqc1V1YZu7gwOnWUajWUajWUak\nW1bZMj9+me5+JMkjW459aO7yuyaeC/ZFs4xGs4xGs4xIt6yqSX9RCgAAAIfLUgcAADAwSx0AAMDA\nLHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADMxSBwAAMDBLHQAAwMAsdQAAAAOz\n1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwJZa6qrqbFU9W1UbVXXv\nVW5/VVV9cnb7Z6rqxqkHhd3QLKPRLKPRLCPSLatq4VJXVdckuT/JrUnOJLmzqs5sOe2uJN/o7r+a\n5JeS/MLUg8KyNMtoNMtoNMuIdMsqW+aduluSbHT3xe5+McmDSc5tOedckl+dXX44yTurqqYbE3ZF\ns4xGs4xGs4xIt6ysZZa665M8N3f90uzYVc/p7peSfDPJD04xIOyBZhmNZhmNZhmRbllZJw7zwarq\n7iR3z66+UFVfOMzHX+C6JF876iHmmGdnf+0wHkSzu2KexQ68W83u2nGb6bjN47X2+P1vYp6dafb4\n/W9inp1N0uwyS93lJDfMXT81O3a1cy5V1Ykkr03y/NY76u7zSc4nSVWtd/faXoY+CObZ2XGcZ4eb\nNXsEzLPYDt1q9ogct5mO4zzb3DRZs4lud8M8O/P/D8yzyHGcZ4r7WebHL59Icrqqbqqqa5PckeTC\nlnMuJHnP7PI/TvKp7u4pBoQ90Cyj0Syj0Swj0i0ra+E7dd39UlXdk+TRJNck+Vh3P11V9yVZ7+4L\nSf5Lkl+rqo0kX8/mHxI4EpplNJplNJplRLpllS31mbrufiTJI1uOfWju8p8m+X93+djnd3n+QTPP\nzoaaR7NHwjyLbTuTZo/McZtpmHkOqNkdH/OImGdnQ83jtfZImGdnk8xT3lEGAAAY1zKfqQMAAOCY\nOpClrqrOVtWzVbVRVfde5fZXVdUnZ7d/pqpunLvtZ2fHn62qHzukeX66qp6pqqeq6req6k1zt/15\nVX1u9rX1w7QHNc97q+rK3OP+s7nb3lNVvz/7es/W7z2geX5pbpYvVdWfzN026fNTVR+rqq9u96uB\na9NHZrM+VVVvnbttz8+NZvc9z3dts7P7PPRuNbvveTSrWc3ubx7NalazO89zuM1296Rf2fzg6R8k\neXOSa5P8XpIzW875l0k+Ort8R5JPzi6fmZ3/qiQ3ze7nmkOY5+8m+Uuzy//i5Xlm1//vETw/703y\nH6/yvT+Q5OLsv6+fXX79Qc+z5fwPZPODxQf1/PydJG9N8oVtbr8tyW8kqSRvT/KZ/T43mtXsaN1q\nVrOa1axmNatZzc5/HcQ7dbck2ejui939YpIHk5zbcs65JL86u/xwkndWVc2OP9jdL3T3l5NszO7v\nQOfp7se6+1uzq49n898tOSjLPD/b+bEkv9ndX+/ubyT5zSRnD3meO5N8Yp+Pua3u/nQ2f9vUds4l\n+XhvejzJ66rqDdnfc6PZfc6zg5VvNjmSbjW7z3l2oNlNmtWsZjW7r3l2oNlNkzZ7EEvd9Umem7t+\naXbsqud090tJvpnkB5f83oOYZ95d2dyaX/bqqlqvqser6h/uc5bdzPPjs7diH66ql/+hzCN9fmZv\n49+U5FNzh6d+fhbZbt79PDeanWYezW5v6m41O808mt2eZl9Js5rV7N7m0ez2Jm12qX/S4LtFVb07\nyVqSH507/KbuvlxVb07yqar6fHf/wQGP8t+TfKK7X6iqf57NvwX6ewf8mMu4I8nD3f3nc8eO4vlh\nRrMLafaY0exCmj1mNLuQZo8ZzS60ks0exDt1l5PcMHf91OzYVc+pqhNJXpvk+SW/9yDmSVW9K8kH\nk9ze3S+8fLy7L8/+ezHJbyd5y0HP093Pz83wn5O8bdnvPYh55tyRLW9VH8Dzs8h28+7nudHsPufR\n7EJTd6vZfc6j2YU0G80ueZ+ajWavNo9mF5q22Z7+Q4EnsvmBvpvyFx9U/OEt57w/r/xg6UOzyz+c\nV36w9GL2/8HSZeZ5SzY/XHl6y/HXJ3nV7PJ1SX4/O3zocsJ53jB3+R8lebz/4oOTX57N9frZ5R84\n6Hlm592c5A8z+7cND+r5md3Xjdn+Q6X/IK/8UOnv7ve50axm99vsYXerWc1qVrOa1axmNfuK+5ti\n4KsMeVuSL83C+uDs2H3Z/FuDJHl1kl/P5gdHfzfJm+e+94Oz73s2ya2HNM//TPJ/knxu9nVhdvxv\nJ/n8LIzPJ7nrkOb5t0menj3uY0lunvvefzp73jaSvO8w5pld/3CSf7fl+yZ/frL5NydfSfJn2fwZ\n4ruS/FSSn5rdXknun836+SRrUzw3mtXsaN1qVrOa1axmNatZzb78VbNvBAAAYEAH8o+PAwAAcDgs\ndQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwBYudVX1sar6\nalV9YZvbq6o+UlUbVfVUVb11+jFheZplRLplNJplNJpllS3zTt0DSc7ucPutSU7Pvu5O8iv7Hwv2\n5YFolvE8EN0ylgeiWcbyQDTLilq41HX3p5N8fYdTziX5eG96PMnrquoNUw0Iu6VZRqRbRqNZRqNZ\nVtmJCe7j+iTPzV2/NDv2la0nVtXd2fybj7zmNa9528033zzBw/Pd6Mknn/xad5/c47drliNxGN1q\nlil5rWU0mmU0+2z226ZY6pbW3eeTnE+StbW1Xl9fP8yHZ4VU1R8dxuNolikdRreaZUpeaxmNZhnN\nVM1O8dsvLye5Ye76qdkxOK40y4h0y2g0y2g0y7CmWOouJPmJ2W8MenuSb3b3d7xNDceIZhmRbhmN\nZhmNZhnWwh+/rKpPJHlHkuuq6lKSn0/yvUnS3R9N8kiS25JsJPlWkvcd1LCwDM0yIt0yGs0yGs2y\nyhYudd1954LbO8n7J5sI9kmzjEi3jEazjEazrLIpfvwSAACAI2KpAwAAGJilDgAAYGCWOgAAgIFZ\n6gAAAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmap\nAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAZmqQMAABiYpQ4AAGBgSy11VXW2qp6tqo2quvcqt7+xqh6r\nqs9W1VNVddv0o8LyNMtoNMtoNMuIdMuqWrjUVdU1Se5PcmuSM0nurKozW077uSQPdfdbktyR5Jen\nHhSWpVlGo1lGo1lGpFtW2TLv1N2SZKO7L3b3i0keTHJuyzmd5Ptnl1+b5I+nGxF2TbOMRrOMRrOM\nSLesrGWWuuuTPDd3/dLs2LwPJ3l3VV1K8kiSD1ztjqrq7qpar6r1K1eu7GFcWIpmGY1mGc1kzSa6\n5dB4rWVlTfWLUu5M8kB3n0pyW5Jfq6rvuO/uPt/da929dvLkyYkeGvZEs4xGs4xmqWYT3XKseK1l\nSMssdZeT3DB3/dTs2Ly7kjyUJN39O0leneS6KQaEPdAso9Eso9EsI9ItK2uZpe6JJKer6qaqujab\nHxq98P+3d8eh9t91Hcdf7/Zjk0hsuV8g23STZvazAu2yJCEtDTeD/QojNhC0lstqESjBZCCx/igT\nEqJBjRIsyDn3R/yiyTCdCMHmfpE6tzH9+VPa70fkmlMIaXPy7o/7XZ5dfveec3/3nHvv5/h4wGXn\nfM/33PPm+PxdfN9zz71bzvmPJG9Mkqr6iWz+A/BaNAdFs4xGs4xGs4xIt6ytuUtddz+b5OYk9yZ5\nNJu/Eejhqrqtqq6bTntPkndW1eeTfCTJO7q7VzU07ESzjEazjEazjEi3rLMji5zU3fdk882is8fe\nN3P5kSSvW+5ocP40y2g0y2g0y4h0y7pa1i9KAQAA4ABY6gAAAAZmqQMAABiYpQ4AAGBgljoAAICB\nWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAZm\nqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAY2EJLXVVdU1WPVdWpqrplm3N+vaoeqaqHq+of\nljsm7I5mGY1mGY1mGZFuWVdH5p1QVRckuT3JLyU5k+TBqjrR3Y/MnHNVkvcmeV13P1VVP7qqgWEe\nzTIazTIazTIi3bLOFnml7uokp7r7dHc/k+TOJMe3nPPOJLd391NJ0t1fX+6YsCuaZTSaZTSaZUS6\nZW0tstRdmuTxmetnpmOzXpHkFVX1r1V1f1Vds6wB4TxoltFoltFolhHplrU198cvd/F5rkryhiSX\nJflMVf1Ud39z9qSquinJTUny0pe+dEkPDedFs4xGs4xmoWYT3XKo+FrLkBZ5pe5skstnrl82HZt1\nJsmJ7v5Od381yZey+Q/iebr7ju7e6O6No0ePnu/MMI9mGY1mGc3Smk10y77xtZa1tchS92CSq6rq\nyqq6MMn1SU5sOecfs/kdjVTVJdl86fr0EueE3dAso9Eso9EsI9Ita2vuUtfdzya5Ocm9SR5Ncld3\nP1xVt1XVddNp9yZ5sqoeSXJfkj/s7idXNTTsRLOMRrOMRrOMSLess+ruA3ngjY2NPnny5IE8NuOr\nqn/r7o39fEzNslf73a1m2StfaxmNZhnNsppd6I+PAwAAcDhZ6gAAAAZmqQMAABiYpQ4AAGBgljoA\nAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIFZ6gAA\nAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYAstdVV1TVU9VlWnquqWHc57\na1V1VW0sb0TYPc0yGs0yGs0yIt2yruYudVV1QZLbk1yb5FiSG6rq2DnOe2GSP0jywLKHhN3QLKPR\nLKPRLCPSLetskVfqrk5yqrtPd/czSe5Mcvwc5/1xkvcn+d8lzgfnQ7OMRrOMRrOMSLesrUWWukuT\nPD5z/cx07P9V1WuSXN7d/7zTJ6qqm6rqZFWdfOKJJ3Y9LCxIs4xGs4xmac1O5+qW/eBrLWtrz78o\npap+IMmfJ3nPvHO7+47u3ujujaNHj+71oeG8aJbRaJbR7KbZRLccDr7WMrJFlrqzSS6fuX7ZdOw5\nL0zyk0k+XVVfS/LaJCe8sZQDpFlGo1lGo1lGpFvW1iJL3YNJrqqqK6vqwiTXJznx3I3d/a3uvqS7\nr+juK5Lcn+S67j65kolhPs0yGs0yGs0yIt2ytuYudd39bJKbk9yb5NEkd3X3w1V1W1Vdt+oBYbc0\ny2g0y2g0y4h0yzo7sshJ3X1Pknu2HHvfNue+Ye9jwd5oltFoltFolhHplnW151+UAgAAwMGx1AEA\nAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwMEsdAADAwCx1AAAAA7PUAQAADMxSBwAA\nMDBLHQAAwMAsdQAAAAOz1AEAAAzMUgcAADAwSx0AAMDALHUAAAADs9QBAAAMzFIHAAAwsIWWuqq6\npqoeq6pTVXXLOW5/d1U9UlVfqKpPVtXLlj8qLE6zjEazjEazjEi3rKu5S11VXZDk9iTXJjmW5Iaq\nOrbltH9PstHdP53k7iR/tuxBYVGaZTSaZTSaZUS6ZZ0t8krd1UlOdffp7n4myZ1Jjs+e0N33dfe3\np6v3J7lsuWPCrmiW0WiW0WiWEemWtbXIUndpksdnrp+Zjm3nxiQfP9cNVXVTVZ2sqpNPPPHE4lPC\n7miW0WiW0Syt2US37Btfa1lbS/1FKVX1tiQbST5wrtu7+47u3ujujaNHjy7zoeG8aJbRaJbRzGs2\n0S2Hj6+1jObIAuecTXL5zPXLpmPPU1VvSnJrktd399PLGQ/Oi2YZjWYZjWYZkW5ZW4u8Uvdgkquq\n6sqqujDJ9UlOzJ5QVa9O8tdJruvury9/TNgVzTIazTIazTIi3bK25i513f1skpuT3Jvk0SR3dffD\nVXVbVV03nfaBJD+U5GNV9bmqOrHNp4OV0yyj0Syj0Swj0i3rbJEfv0x335Pkni3H3jdz+U1Lngv2\nRLOMRrOMRrOMSLesq6X+ohQAAAD2l6UOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAA\ngIFZ6gAAAAZmqQMAABiYpQ4AAGBgljoAAICBWeoAAAAGZqkDAAAYmKUOAABgYJY6AACAgVnqAAAA\nBmapAwAAGJilDgAAYGCWOgAAgIFZ6gAAAAa20FJXVddU1WNVdaqqbjnH7RdV1Uen2x+oqiuWPSjs\nhmYZjWYZjWYZkW5ZV3OXuqq6IMntSa5NcizJDVV1bMtpNyZ5qrt/LMkHk7x/2YPCojTLaDTLaDTL\niHTLOlvklbqrk5zq7tPd/UySO5Mc33LO8SQfni7fneSNVVXLGxN2RbOMRrOMRrOMSLesrSMLnHNp\nksdnrp9J8rPbndPdz1bVt5K8OMl/z55UVTcluWm6+nRVffF8hl6RS7Jl3gNmnp39+A63afZgmGe+\n7brV7ME5bDMdtnlW3myi210yz878/4PD97+JeXa2U7MLW2SpW5ruviPJHUlSVSe7e2M/H38n5tnZ\nYZxnPx5Hs4szz3z70a1md+ewzXQY59mPx9Ht4syzM82aZ57DOM8yPs8iP355NsnlM9cvm46d85yq\nOpLkRUmeXMaAcB40y2g0y2g0y4h0y9paZKl7MMlVVXVlVV2Y5PokJ7accyLJ26fLv5bkU93dyxsT\ndo7WkJwAAATVSURBVEWzjEazjEazjEi3rK25P345/TzxzUnuTXJBkg9198NVdVuSk919IsnfJvn7\nqjqV5BvZ/Ecyzx17mHsVzLOzYebR7IExz3znnEmzB+qwzTTEPCtsdtvHPEDm2dkw8/hae2DMs7Ol\nzFO++QAAADCuhf74OAAAAIeTpQ4AAGBgK1nqquqaqnqsqk5V1S3nuP2iqvrodPsDVXXFzG3vnY4/\nVlVv3qd53l1Vj1TVF6rqk1X1spnbvltVn5s+tr6ZdlXzvKOqnph53N+aue3tVfXl6ePtW++7onk+\nODPLl6rqmzO3LfX5qaoPVdXXt/t7L7XpL6ZZv1BVr5m57byfG83ueZ7v22anz7nv3Wp2z/NoVrOa\n3ds8mtWsZneeZ3+b7e6lfmTzjadfSfLyJBcm+XySY1vO+d0kfzVdvj7JR6fLx6bzL0py5fR5LtiH\neX4hyQ9Ol3/nuXmm6/9zAM/PO5L85Tnu+yNJTk//vXi6fPGq59ly/u9n843Fq3p+fj7Ja5J8cZvb\n35Lk40kqyWuTPLDX50azmh2tW81qVrOa1axmNavZ2Y9VvFJ3dZJT3X26u59JcmeS41vOOZ7kw9Pl\nu5O8sapqOn5ndz/d3V9Ncmr6fCudp7vv6+5vT1fvz+bfLVmVRZ6f7bw5ySe6+xvd/VSSTyS5Zp/n\nuSHJR/b4mNvq7s9k87dNbed4kr/rTfcn+eGqekn29txodo/z7GDtm00OpFvN7nGeHWh2k2Y1q1nN\n7mmeHWh201KbXcVSd2mSx2eun5mOnfOc7n42ybeSvHjB+65inlk3ZnNrfs4LqupkVd1fVb+yx1l2\nM89bp5di766q5/5Q5oE+P9PL+Fcm+dTM4WU/P/NsN+9enhvNLmcezW5v2d1qdjnzaHZ7mn0+zWpW\ns+c3j2a3t9Rm5/6duu8nVfW2JBtJXj9z+GXdfbaqXp7kU1X1UHd/ZcWj/FOSj3T301X129n8LtAv\nrvgxF3F9kru7+7szxw7i+WGi2bk0e8hodi7NHjKanUuzh4xm51rLZlfxSt3ZJJfPXL9sOnbOc6rq\nSJIXJXlywfuuYp5U1ZuS3Jrkuu5++rnj3X12+u/pJJ9O8upVz9PdT87M8DdJfmbR+65inhnXZ8tL\n1St4fubZbt69PDea3eM8mp1r2d1qdo/zaHYuzUazC35OzUaz55pHs3Mtt9le/psCj2TzDX1X5ntv\nVHzVlnN+L89/Y+ld0+VX5flvLD2dvb+xdJF5Xp3NN1deteX4xUkumi5fkuTL2eFNl0uc5yUzl381\nyf39vTdOfnWa6+Lp8o+sep7pvFcm+VqmP1i/qudn+lxXZPs3lf5ynv+m0s/u9bnRrGb32ux+d6tZ\nzWpWs5rVrGY1+7zPt4yBzzHkW5J8aQrr1unYbdn8rkGSvCDJx7L5xtHPJnn5zH1vne73WJJr92me\nf0nyX0k+N32cmI7/XJKHpjAeSnLjPs3zJ0kenh73viSvnLnvb07P26kkv7Ef80zX/yjJn26539Kf\nn2x+5+Q/k3wnmz9DfGOSdyV513R7Jbl9mvWhJBvLeG40q9nRutWsZjWrWc1qVrOafe6jpjsCAAAw\noJX88XEAAAD2h6UOAABgYJY6AACAgVnqAAAABmapAwAAGJilDgAAYGCWOgAAgIH9H2SiAryoJ/Kk\nAAAAAElFTkSuQmCC\n", |
| 243 | + "text/plain": [ |
| 244 | + "<matplotlib.figure.Figure at 0x7fc3e8d88690>" |
| 245 | + ] |
| 246 | + }, |
| 247 | + "metadata": {}, |
| 248 | + "output_type": "display_data" |
| 249 | + } |
| 250 | + ], |
| 251 | + "source": [ |
| 252 | + "#plt.axis('off')\n", |
| 253 | + "fig, axs = plt.subplots(4,5, figsize=(15, 12))\n", |
| 254 | + "axs = axs.ravel()\n", |
| 255 | + "for i in range(20):\n", |
| 256 | + " axs[i].contourf(array[i],cmap='gray')\n", |
| 257 | + " axs[i].set_title('slice {}'.format(i))" |
| 258 | + ] |
| 259 | + }, |
| 260 | + { |
| 261 | + "cell_type": "code", |
| 262 | + "execution_count": null, |
| 263 | + "metadata": { |
| 264 | + "collapsed": true |
| 265 | + }, |
| 266 | + "outputs": [], |
| 267 | + "source": [] |
| 268 | + } |
| 269 | + ], |
| 270 | + "metadata": { |
| 271 | + "kernelspec": { |
| 272 | + "display_name": "Python 2", |
| 273 | + "language": "python", |
| 274 | + "name": "python2" |
| 275 | + }, |
| 276 | + "language_info": { |
| 277 | + "codemirror_mode": { |
| 278 | + "name": "ipython", |
| 279 | + "version": 2 |
| 280 | + }, |
| 281 | + "file_extension": ".py", |
| 282 | + "mimetype": "text/x-python", |
| 283 | + "name": "python", |
| 284 | + "nbconvert_exporter": "python", |
| 285 | + "pygments_lexer": "ipython2", |
| 286 | + "version": "2.7.12+" |
| 287 | + } |
| 288 | + }, |
| 289 | + "nbformat": 4, |
| 290 | + "nbformat_minor": 2 |
| 291 | +} |
0 commit comments