{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple plots\n", "
By Edward Sternin, Brock University
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is an introductory notebook to various ways of plotting and analyzing experimental data, as appropriate to second-year Physics majors. Feel free to choose your own preferred package, but mastering one of the tools in this selection is strongly recommended, as the demands on the software will become more significant in later years of the program, and so other packages (notably,excel
) will not have sufficient capabilities. Choose a package that has \"long legs\". \n",
"\n", "A large number of software packages exist, and personal preferences play a great role in selecting which one will end up as your favourite go-to tool. Here we will restrict ourselves to a comparison of a few packages. The criteria for selecting them are simple:\n", "
extrema
(or its predecessor, physica
), gnuplot
, and octave
(a free alternative to Matlab
). All of these are inherently interactive programs, and so they are normally used through a command-line interface (CLI) or their own native Graphics User Interface (GUI). In this notebook, we will emulate that behaviour by using scripts, which is actually an advanced use mode for most programs. To get a true feel for the programs, please attempt to use their native interfaces, guided by the sample command selections below.\n",
"\n",
"From a wide field of significant competitors not included here are Maple
(a commercial package) and grace
(a.k.a xmgrace
), and Mac-world's Igor
. These are reasonable alternatives so if you have significant skills in their scripting, they will be appropriate to continue to use, though they do not satisfy all of the selection criteria.\n",
"
\n", "To begin with, configure jupyter's work directory and import some libraries that enable us to display graphics files in this notebook." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%%bash\n", "WORKDIR=~/5P10/Lab2\n", "# if the directory exists, remove it and all its contents\n", "if [ -d $WORKDIR ]; then\n", " rm -rf $WORKDIR\n", "fi\n", "# and re-create it as a blank work directory\n", "mkdir -p $WORKDIR" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/esternin/5P10/Lab2\n" ] }, { "data": { "text/plain": [ "'/home/esternin/5P10/Lab2'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# now tell jupyter where to work\n", "%cd ~/5P10/Lab2\n", "%pwd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# import necessary libraries\n", "from IPython.display import display\n", "from PIL import Image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the data into the program\n", "The two basic ways are: direct entry, where you embed the data in the script, and external file read. The former has the advantage of portability (one file to keep track of for any project), the latter has the advantage of compactness (a small script acting on a series of potentially large data files).\n", "
\n", "All three programs allow direct entry of data, with minor syntactic differences:\n", "
\n", "
",
" x=[1:8]\n",
" y=[0.05;0.10;0.14;0.19;0.25;0.30;0.34;0.40]\n",
" dy=[0.02;0.07;0.01;0.04;0.05;0.10;0.02;0.04]\n",
" set xlabel `Time, s'\n",
" set ylabel `Distance, m'\n",
" set pchar -12\n",
" graph x,y,dy\n",
"
\n",
" \n",
" $DATA << EOD\n",
" 1 0.05 0.02\n",
" 2 0.10 0.07\n",
" 3 0.14 0.01\n",
" 4 0.19 0.04\n",
" 5 0.25 0.05\n",
" 6 0.30 0.10\n",
" 7 0.34 0.02\n",
" 8 0.40 0.04\n",
" EOD\n",
" \n",
" set xlabel 'Time, s'\n",
" set ylabel 'Distance, m'\n",
" plot $DATA with errorbars pt 6\n",
"
\n",
" \n",
" x=linspace(1,8,8);\n",
" y=[0.05 0.10 0.14 0.19 0.25 0.30 0.34 0.40];\n",
" dy=[0.02 0.07 0.01 0.04 0.05 0.10 0.02 0.04];\n",
" plot(x,y,'go');\n",
" xlabel(\"Time, s\");\n",
" ylabel(\"Distance, m\");",
"
\n",
" \n",
"To demonstrate the plots within this notebook, we need to communicate to the external program, like extrema
, or load on-the-fly a kernel magic that will enable execution of an external program directly embedded in this python-based notebook.\n",
"
\n",
"We will default all of the settings that control the appearance of the graphs, for simplicity. All of these programs can produce publication-quality plots through a series of adjustments to their appearance. This will be addressed in the following sections."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## eXtrema\n",
"\n",
"An experimental eXtrema kernel exists, but it is not yet installed system-wide, so each user must install it into their own file space. A separate jupyter notebook shows how to do it. That notebook needs to be run only once, and then this notebook's kernel needs to be restarted, to read in the newly added eXtrema kernel. If you have already done that at some point, the eXtrema kernel should included in the drop-down list of kernels under the Kernel menu above. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"total 16\r\n",
"-rw-r--r-- 1 esternin LinuxEmployees 5406 Sep 12 10:17 extrema_kernel.py\r\n",
"-rw-r--r-- 1 esternin LinuxEmployees 234 Sep 12 10:17 kernel.json\r\n",
"drwxr-xr-x 2 esternin LinuxEmployees 4096 Oct 15 14:03 \u001b[0m\u001b[38;5;27m__pycache__\u001b[0m/\r\n"
]
}
],
"source": [
"ls -l /work/extrema_kernel/"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append('/work/extrema_kernel')\n",
"import extrema_kernel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once extrema kernel is available in the drop-down menu of kernels, you do not need to repeat the above and the line magic \n",
"With only minor changes the same scripts can be applied to external data files. Scripts below all accomplish the same basic read from a data file, a plot, followed by a number of adjustments of settings that approach the publication-quality standards of appearance. The output is not shown, but saved into into a vector-graphics file, ready to be uploaded/included into overleaf. Encapsulated PostScript (.eps) or SVG (.svg) vector-graphics formats work best, as they scale without introducing \"jaggies\" and always display at the resolution of the device (typically, at about 100dpi on a monitor screen, and at 600dpi on paper). \n",
" \n",
"As of 2019, overleaf has support for SVG inclusion ( \n",
"First, let's create the file of data to be plotted by each of the programs in turn:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing exp1.dat\n"
]
}
],
"source": [
"%%file exp1.dat\n",
"1 0.05 0.02\n",
"2 0.10 0.07\n",
"3 0.14 0.01\n",
"4 0.19 0.04\n",
"5 0.25 0.05\n",
"6 0.30 0.10\n",
"7 0.34 0.02\n",
"8 0.40 0.04"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## eXtrema\n",
"\n",
"If you installed the experimental jupyter eXtrema kernel that introduces cell-level magic \n",
"Using the same data file as above:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"%gnuplot postscript eps colour size 6.4,4.8 font \"Palatino,32\" "
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"fit f(x) 'exp1.dat' via a,b\n",
"iter chisq delta/lim lambda a b \n",
" 0 9.0568363000e+03 0.00e+00 2.34e+01 1.000000e+00 1.000000e+00\n",
" 1 3.3906186412e+01 -2.66e+07 2.34e+00 4.446168e-02 9.725188e-01\n",
" 2 1.0093949569e+00 -3.26e+06 2.34e-01 -7.587122e-03 6.416660e-01\n",
" 3 4.6402022173e-03 -2.17e+07 2.34e-02 5.086764e-03 9.528535e-02\n",
" 4 4.3637955261e-03 -6.33e+03 2.34e-03 5.301084e-03 8.607298e-02\n",
" 5 4.3637955182e-03 -1.80e-04 2.34e-04 5.301120e-03 8.607143e-02\n",
"iter chisq delta/lim lambda a b \n",
"\n",
"After 5 iterations the fit converged.\n",
"final sum of squares of residuals : 0.0043638\n",
"rel. change during last iteration : -1.80068e-09\n",
"\n",
"degrees of freedom (FIT_NDF) : 6\n",
"rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.0269685\n",
"variance of residuals (reduced chisquare) = WSSR/ndf : 0.000727299\n",
"\n",
"Final set of parameters Asymptotic Standard Error\n",
"======================= ==========================\n",
"a = 0.00530112 +/- 0.0004514 (8.514%)\n",
"b = 0.0860714 +/- 0.01495 (17.36%)\n",
"\n",
"correlation matrix of the fit parameters:\n",
" a b \n",
"a 1.000 \n",
"b -0.770 1.000 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%gnuplot\n",
"reset\n",
"set output 'gnuplot.eps'\n",
"set encoding utf8\n",
"set style data points\n",
"\n",
"set dummy x, y\n",
"f(x) = a*x**2+b\n",
"# gnuplot's fitting variables MUST be initialized to non-zero values!\n",
"a=1.0\n",
"b=1.0\n",
"fit f(x) 'exp1.dat' via a,b\n",
"\n",
"set xlabel 'Time, s'\n",
"set ylabel 'Distance, m'\n",
"set xrange [0.5:8.5]\n",
"set yrange [0:0.5]\n",
"\n",
"plot 'exp1.dat' with errorbars pt 7 ps 2 title \"data from exp1.dat\",\\\n",
" f(x) title sprintf(\"best fit: %.4f t^2 + %.4f\",a,b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# octave\n",
"\n",
"The use of comments makes the following script self-explanatory, hopefully. octave kernel actually will return a PNG graphic that will show up when you execute the script, in addition to writing out the EPS file."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAJMmlDQ1BkZWZhdWx0X3JnYi5pY2MAAEiJlZVnUJNZF8fv8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpxFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/VuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexLzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUAdO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPggBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEykBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQRmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEPJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42jRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hxvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVYh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkqlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCApZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKLktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFOsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVKtUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+FkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+vU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeMH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWMt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPYtdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5bHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3zmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8ywjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmjiuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85kS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8VueQV5p3tudATu78xXyt+dP7HLa1VIgViAoGN1tubv2B9QPsT8M7Fm9p3LP58KIwltFBkXlRYvF/OJbPxr+WPHj0t6ovQMlpiVH9mH2Je0b2W+z/0SpRGlO6cQB9wMdZcyywrK3BzcevFluXF57iHAo45Cwwq2iq1Ktcl/lYlVM1XC1XXVbjXzNnpr5wxGHh47YHmmtVagtqv14NPbogzqnuo56jfryY5hjmceeN/g39P3E/qmpUbaxqPHT8aTjwhPeJ3qbzJqamuWbS1rgloyWmZMhJ+/+bP9zV6tua10bo63oFDiVcerFL6G/jJx2Pd1zhn2m9az62Zp2WnthB9SxqUPUGdMp7ArqGjzncq6n27K7/Ve9X4+fVz5ffUHyQslFwsX8i0uXci7NXU65PHsl+spEz8aex1cDr97v9eoduOZ67cZ1x+tX+zh9l25Y3Th/0+LmuVvsW523TW939Jv0t/9m8lv7gOlAxx2zO113ze92D64ZvDhkM3Tlnv296/d5928Prx0eHPEbeTAaMip8EPFg+mHCw9ePMh8tPN4+hh4rfCL+pPyp/NP637V+bxOaCi+M24/3P/N59niCP/Hyj7Q/Fifzn5Ofl08pTTVNG02fn3Gcufti3YvJlykvF2YL/pT4s+aV5quzf9n+1S8KFE2+Frxe+rv4jcyb42+N3/bMec49fZf4bmG+8L3M+xMf2B/6PgZ8nFrIWsQuVnzS+tT92fXz2FLi0tI/QiyQvpTNDAsAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAddEVYdFNvZnR3YXJlAEdQTCBHaG9zdHNjcmlwdCA5LjI1wZk/DQAAIABJREFUeJzt3c9PWnmjx/HveXKXN6CzFhNtIgtcVTsJx92jk2iii3Gm0N2VBOlunAXaLq4OVzetsHi6FEh0qXjbjSaQlK5uhGRSZzOchYsyibiuHv4B7uI7c54z/BIUOAd4v9JM4JwDfmHq+fT7W6lUKgIAAKv9w+oCAAAgBIEEALAJAgkAYAsEEgDAFggkAIAtEEgAAFsgkAAAtkAgAQBsgUACANgCgQQAsIX/sLoAQghRKBQSiUQmkxFCLC4uhsNhl8vV6OK1tbWqI0tLS36/v6slBAB0m/WBVCqVAoGAECIcDt/d3aVSqdXV1Ww263Q6ay/O5XL5fN7j8Tgcjp6XFADQRdYH0vHxcblcfv/+/fT0tBBibm4uEAjE4/HNzc3ai3VdF0Ls7u7KiwEAA8P6PqRMJuPxeIyAUVXV4/Hk8/m6FxcKBSEEaQQAg8fiGpKu6zc3N4uLi+aDHo8nlUo1esnY2FipVMrlcuVy2ev1Ek4AMBgsDiRN02oPNukf0jStXC4vLCwYR7xe77t37+p2OAEA+oj1fUiN5HI5VVWrDpZKJSHE4eGhqqq6rsfj8WQyGYvF9vb2mr+b2+3uVkEBYDhcXV119f2t70NqpO7I7729vQ8fPsigcjqdm5ubi4uLqVRKDnZohDQCgMfr9r3U4hpSk/lGdU/V1pnGxsaEEJqm1Z6q0u1s7yOKorB1vYFvw4xvw4xvw6wH/7K3uIbkcrkcDsfNzY35oKZpMmaq6Lqey+WqKkMjIyPdLSIAoCesb7JTVTWXyxlPdV3P5/N1qztyCm08HjcfvL6+djgc91aPAAA2Z30g+f3+crm8vb0thNB1PRaLCSFCoZA8G41G3W53NBoVQkxPT8sR4TLAdF2PRqOpVMrn81lXfABAZ1g/yk5V1XA4HIvFjLlHu7u7jfqWdnd3d3Z25FJDUjAYrLumA5qgWdyMb8OMb8OMb6PH7NJlJ+e6CiFUVW0y0kEqFAr5fF621N17sfirL45BDQDwYD24kdolkLqKQAKAR+rBjdT6PiQAAASBBACwCQIJAGALBBIAwBYIJACALRBIAABbIJAAALZAIAEAbIFAAgDYAoEEALAFAgkAYAsEEgDAFggkAIAtEEgAAFsgkAAAtkAgAQBsgUACANgCgQQAsAUCCQBgCwQSAMAWCCQAgC0QSAAAWyCQAAC2QCABAGyBQAIA2AKBBACwBQIJAGALBBIAwBYIpGFRLBaz2azVpQCAhgikYXFwcPDdd99ZXQoAaIhAQrVXr14pimJ1KQAMHQIJAGAL/2F1AdAtxWLx4ODg8vJycnLy5cuXjc4KIWZmZl6+fDk5OSmEiMfj8uCrV6++++67hYWFJhcDQAdRQxpMp6enT548icfjQojLy8vZ2VkZJ1I2mzXOCiHi8fjMzEyxWBRCfPnyRT64vLyUD5pcDAwkRSi1f6wu1HCoDIGpqampqalHvomo2OW7aqUkIyMjExMTX79+lU/fvHlj/t89Pz8/MjJinP38+bMQYmtrSz7d2toy/8VofjEwwOzzW28HHbmRNkeTXRv65V9Jp6end3d3b9++HR0dlUdevXp1cHDwxx9/yKdv374VQhhnZ2ZmmrxbWxcDwIMRSG2oiIrVRRCihVyUlZjnz5+bDy4sLCQSCflYhko2my0Wi1++fDG35tVq62IAeDACaWAZdZrap6enp6FQ6O7ubmJiYnJycmZm5tOnT43ep62LAeDBCKRW2aR6JFooyTfffCOEKBaL5rFwxjCE29vbUCg0OTl5enpqXLC/v1/3rdq6GAAeg1F2A0iO1T44ODCO3N7eGusGXV5e3t3dvX792giY29vbRm/V1sUA8BgE0gCamZmZn5/f39+X4xGKxaJsc5NnZbSkUin5tFgsygCrIoOnxYsB4PEIpMF0enr69OnT169fK4ry5MmTYrEoB3MLISYnJ7e2tv73f/9XURR5dmFhYWJiYn9/PxQKCSGePHkihPjmm29evXp178UA0ClKpWKXrpHucbvdQoirqyurC9Jr2Wz248ePs7OzVSPuhBCXl5fZbHZ0dHRhYWFycrJYLJ6eni4sLBhj6j5+/GisyND8YmBQKUKxT+ex5XpwIyWQAKABRRFDcIdsUQ9upDTZAUA9iqIQRr1FIAFADepGViCQAAC2QCABwN9RPbIIgQQAJqSRdQgkAPgLaWQpAgkAYAsEEgAIIageWY9AAgDSyBYIJABDjzSyB1sEUqFQ2NjYcLvdbrd7Y2OjVCq18qpSqfTs2bNoNNrt4gEYZKSRbVgfSKVSKRAI5HK5cDgcDAZzudzq6qqu6/e+cHt7u1wu96CEAIbNilhRIoqICCWirIgVq4szLKzfMfb4+LhcLr9//356eloIMTc3FwgE4vH45uZmk1dFo1FN03pVRgADql71SIkoQojlyLJ8eh45V4RSiVCL6jrrAymTyXg8HplGQghVVT0eTz6fb/KSQqGQTCb/9a9//fzzzz0pI4BB1CCNjCiS5FMlQiZ1ncVNdrqu39zceL1e80GPx9Ok9qPr+sbGhs/nW1pa6n4BAQyo1tLIsBxZljUndI/FgVQ3eBwOR5OXxONxIUQ4HO5WmQAMPAYy2JL1gxoayeVytQfT6XQymdzb23M6ne2+oWLSiQICg0MRSu0fqwtlvfPIudVFsFiPb5v2DSSXy1V1RNf1nZ2dYDCoquoD3rBi0okCAoOjIiryT9XjwdRy9ahR893w6PFt0+JBDbWp0+RUPB6X47zNc480TYtGoy9evGjyVgDwJxrrbMz6QHI4HDc3N+aDmqaNjY3VXjw+Pu71equ6neQsWl3XCSQA97gvjZYjy+eR87oVo0bH0UHWD/tWVdXcXaTrej6f9/l8tVf6/X6/328+4na7FxcXm89YAgAhWqobnYmzJp1nZ+Ks02XC31jfh+T3+8vl8vb2thBC1/VYLCaECIVC8mw0GnW73awPBKA3KpHKeeTcPJxBPmUSUg/YooYUDodjsVgqlZJHdnd3aX8D0EntdB3J7DFmHRFFPaPYZMhZqVSSDXeqqnY8jdxutxDi6uqqs28LDB5FKAM4vu6hAxkG89t4qB7cSK2vIUkul6uqfwgAOoBhdf3D+j4kAOgW0qivEEgAAFsgkAAMKKpH/YZAAjCISKM+RCABGDikUX8ikAAMFtKobxFIAAYIadTPCCQAgC0QSAAGBdWjPkcgARgIpFH/I5AA9D/SaCAQSAD6HGk0KAgkAP2MNBogBBIAwBYIJAB9i+rRYCGQAPQn0mjgEEgA+hBpNIgIJAD9hjQaUAQSgL5CGg2u/7C6AADwJ0UotQcrwhQ/PUkjczGMx38rBrqDQAJgF8ZNXxGKhQFA9liFJjsAfYLGukFHIAHoB6TRECCQANgeaTQcCCQA9kYaDQ0CCYCNkUbDhEACYFek0ZAhkAAAtkAgAbCLFbGiRBQlooiIEIqi/CJWxIrVhULvMDEWgC0oEUUIsRxZFkKcKecrleVlIc4j54pQKhEa7oYCNSQA1pM1IXMayePyCPWkIUEgAbDeeeS8No2k5cjyeeTconKhpwgkAHZRm0YYKgQSAFswpxFVouFEIAGwXuV/hLluJJvvMGwIJABWUxTlF6vLABtg2DcGQbFYvLy8vL29XVhYmJyctLo4aFslUlEiSt2K0XnknGHfQ4IaEvpePB5/8uTJmzdvDg4Onjx5Eo/HrS4R2vHX+kB1R9MZo+8wDJTKECwV5Xa7hRBXV1dWFwRdMTo6+vr161evXgkh4vH4y5cvv3z5Qj3pYXq9VWvNanVyeqyBupF99OBGSiChv2Wz2e++++7r16+jo6PyiKIoHz9+XFhYsLZgfaqngdR47VRrtzBHXT24kdJkh/42MzPz8eNHI42KxaIQwngK+2Ilb9QgkNDfRkdHjcrQ5eXl8+fPf/zxx5mZGWtLhXuQRqiHQBpkl5eXssZweXl5eXlpdXG66Pb29tWrV7OzswsLCwxqsDvSCA0QSIPp9vZ2ZmZmdnY2FAoJIV69eiX7/Fsh6xmKoiiK8vz5cxlpD7u4+dmFGuYsefv27eTkpHztzMxMNpttUoaZmZnLy8svX768ffu2rfa6Dn7Y09PTmZmZRgW+vb0NhUKjo6OKokxOTp6entb9EaOjo00+6SAgjdBEpTX7+/uzs7NTDbT4Jlbpi0J21sHBgRAilUp9/fq1UqlsbW1tbW3JU1tbW03+v3/58mVkZGRkZOTNmzdbW1vysXyTdi9ufvbjx49CiKdPn86bHBwcyLNv3rwRQvz4448HBwdv3ryZmJgQQnz+/LnuR5iYmFhfX3/At9TBD5tKpeTHkWdlgT9+/Gi8/OnTpyMjI1tbW2/evHn69Kn8v1P1I+SnNr+q90Sl1XvCg9691TfvbjHwID24kbb0f/34+Hhqamp2dva/GuhqER9vCAOpSeo0DyR51rj1y9gwwqyti5uflXdw42yViYmJ+fl54+mXL1+EEEbqmD+CfJ+Pf9coVLr3Yefn58359PXrVxmo8mlV0nz9+nViYuLp06fGp9va2pIpNciB1HIadbcYeCi7BNL+/v7U1NTvv//e1aJ0z7AF0sHBwfz8vLxdyjrHwcGB8cA4VffGZ75RSk+fPq060uLFzc82yUV5N68KhpGRERlRVR9Bvk+VFu/pHfywsoZnPms+Uvu2nz9/Ngr5+fNnebHMpMEMpHbSqIvFwCP04Ebaah+S1+udnp5u8eLBpCg2+tPUly9fjLEMsm6RSqVkTcJ8qra/5Pb29o8//qiawTMzM/Pbb7/V/pTmF7fyVhMTE8ViMR6Pv337tmrMxcePH1++fGn+WXd3d3Kua9VHePv2be1f66qfWywWa7vQOvhhhRCjo6Ny7SLjJ3769MmYnPvbb7/VvtY4Ijucstns27dva3/0ILjvb+y/L/zrr3jVYwyJltayGx8fTyaTuq47nc5uF8i++qcnVt7X9vf3a7vHm5wSQtQdiddojEDzi+99K3n7fvLkiXFkfn7+9PR0dHTUPJL79PT08+fP2Wx2ZGTk9evX936EuorF4v7+ftXtvoMfVpbq+fPnMzMzz58/F0LE4/GnT5/Kn2i89tWrV/F4/O7ubmJi4uXLl60PMxkErf36MBl2yLVUQ/L7/T6fLxAI5HK5bhcI9tTW0K/mF8uzspYjm6e+fv26tbX16dOn2nu0z+fb39//7bffQqFQz1YDesCHHR0dnZyc/OOPP05PT09PT+/u7oxMldWm/f3909PT169fHxwcTE5Ovn79emDrQ1UYVoeWtbrat8Ph0DQtEAjUPcuqPAOvrTCYnJxsMn5avlU8Hp+cnJSPR0dH3759WywWE4lE1bjtSqVye3sbj8dfv34tHzziQ7RR/nYvfv78+eXlpbFkUTablePCjeHdExMTl5eX8qOFQqGFhYU3b94MfiWJNEI7Wgqkk5OTZDLpcDhUVR0bG+t2mWCVJjfi2lNtXVx7tnatOXn88vKy6tTo6OirV6++fPmSSCTaCqSqOorx1OfzNa9vtfthLy8vP3369ObNG+NHLCwshEKh/f39YrEoQ+j58+fmoJ2Zmfn06VM2mx3kNfdII7SppUC6vr4WQnz48MHlcnW5PLDS5OTkyMhI7eRWOaumrYubn729vZWzWc336G+++UY+OD09PTg4ePv2rXkFIHnl7e1t6/NejZff3t7+9ttvxlOZLh38sDLwqtYrkh+nWCzWjRzjww4s0gjta7XJzuv1kkbDYGFhwdyDcnt7++nTp/X19Qdc3ORssVj87rvvtra2zP0ocuapfNWnT59kYhlni8XiyMhIW6swGG+ezWZlY2CXPqwsVdUS43J8owy/p0+fVvVLybMDu+YeaYSHaWVs+MXFxdTU1N3dXWeHnBt+//33n376SQ5y/+mnn66vr5tcHI/H//nPf8qLv//++4uLi3vff9jmIVVqZvmY58TIU42mjsr5nnIK6tevX+UN98uXL+bXGjOEml/c/KxcucA8qMH8zhMTE+azcmJp1ZTbFme/GiXp6oeVU6PevHkjn8oCGzN55Zj79fV1Weaqj1NVnr6fh9TmlCP0C7tMjK1UKv/93//d4t2/XdfX17Ozs7Ozs/F4XC5QNDs72yj84vG4DK3j42Mjme6dsUsgmQNJripU94YoydulwVjOp1Jzj25+cfOznz9/NtYmqC3P58+fq5rOzIsD3fsRqjQKpA5+2K9fv8pMMvz444/myKyawFt3rSNrA0n8Isx/HvoupNHA6sGNtKUN+nK5XKPxddJjRtlFo9FkMvn+/Xs58Vb+rGAwuLm5WXvx/Py8y+U6OjqST0ul0sLCgs/n29vba/Ij2KCvSjablTNPG/XVF4tF2cS0sLBw75Cz5hc3P3t5eZnNZuXEo9qzspxPnjypPXvvRzCTXVaNhg908MMaH2dmZqa2OU6+9vb2dmFhwVaNdStipXancHnkTJy18Ua01A00u+wYWyqVjo+Pm1xQNzxaND8/73Q6P3z4YBxZXV0VQpiPSLquf/vtt1VZ9ezZM4/HY0RUXQQS0IQSUarSSDqPnLexgzhpNOh6cCNtaVCDy+V6TOQ0oev6zc3N4uKi+aDH45Ft7rUODw/NYyt0XS+Xy4y2AB6sURoJIZYjy0pEaSmTSCN0Qquj7LpE07Tagw6Ho+7FTqdTVVX5OJ1OFwqFfD7vcDjklj8ArEEaoUPsu0Ff82WKfv7552QyqWmaz+drsYakmHSojMBj1V0918LynEfO23sBaTTQenzbtLiG1ETzmLm6utJ1PZVKxWKxcrncfFCD1EpvGdBjxnKiilDssLRoo+a7+kijQWe+bco+pK6yuIbUJHXurfc4nc719XWfz9eowwlAF5FG6DTrA8nhcNzc3JgPappWd8W8dDq9trZWKBTMB2WHk67rXS0nMKiWI8uNmulqx4L/G2mELrC+D0lVVXN3ka7r+XzeGLxg5nQ68/l81TiIm5sbh8Mx1Bs1AY8gZxrVZpI8Un8eEmmE7rA+kPx+f7lc3t7eFkLouh6LxYQQxsC5aDTqdruj0agQQq41HovFZIDpup5IJDKZjM/ns674QN+rRCqyniRDSD5YjizXH/BNGqFrHjuoYW1tTT5wuVzhcPgBNRVVVcPhcCwWM7qCdnd3G3UgvXv3bmNjw7xshM/n69IcKWB4nIkzERFKRJGZ1HDuEWmEbmpppYYm5LiLX3/9NZfLZTKZd+/ePex9SqWSrPeoqnrvcIZcLndxcTE+Pt7KxYKVGtAPbDLKrlkxSKPhZpelg5owUkQIUSgU5Hp0dkMgwf7sHkik0dCzy9JBTZhHH9gzjQA8FmmEnrB+UAMAWyON0CsEEoDGSCP0UBuBdHJysrq66na75TjsXC63sbHRfMU5AH2MNEJvtRpI0Wh0Z2enVCp5vV55xOFwyM30Tk5OulY8ABYhjdBzLQVSoVBIJpOLi4vZbNbYCm96ejqbzXo8nlgsxso9wEAhjWCFlgIpnU4LIXZ3d6vmvTqdzt3d3XK5nMlkulI6AL1HGsEibfQh1V2FQQ71vr6+7liJAFinogjSCFZpI5DqtsvJytP4+HjHSgTAKoqiEEawTkuB9OLFCyHEzs5OVSbJ5U0dDsfi4mJXSgegZ2ipg9VaWqnB5XIFg8FkMpnL5WT2aJq2vb2dyWTK5XJt3xKAPkMawQbaWMsunU4nEgnzdkQej2d9fX1paak7ZesY1rKD/Vm5lp0pjWyypB5syF5r2S0tLblcLqfTWSqVhBD/+Mc//vM//5P164D+Rt0IttHqoIZCoTA/P//DDz+USiVVVVVV/b//+78ffvhhdXW1ak9xAH2DNIKdtBRIuq4HAoFyuRwMBo39h168eBEMBjVN29nZ6WYJAXQHaQSbaanJLpVKlcvlw8ND82YTLpdrc3NzZGRE7iluPgXA7kgj2E9LNaS7uzvx962PDD6fTwhxcXHR2WIB6CLSCLb02O0nyuWyEGJkZKQThQHQfaQR7KqlQJqbmxNCbG9v156KxWJCCCbGAv2BNIKNtdSHpKqqz+dLpVKapnm9XjnUu1AoZDKZm5sb80gHAPZFGsHeWp2HtLe353A4ZCYZBx0ORzAY3Nzc7E7ZgGGhRBQhJ6VGuhMYiiIEq6bC7tpYqUHK5XJyYqzL5eqXkXWs1ADbWhEr55FzIcRyZNl4cCbOOvkz2qkYsVIDGrHXSg1Sv4QQYH+yYrQcWZZP5YPzyHknq0o006F/tBpIpVLp+Pi40Vla7YB2rYgVYUojg6wqrYiVDtSTSCP0lZaa7HRdX1hYkCO867J5axhNdrAhJaLUppHhPHL+2ErSg9KIJjs0YpcmO7lSQzAYDIVC7DQB9AHqRuhDra7UMDY2trm5SRoBXSJHNHQGaYT+1OpKDUQR0FVNmu/aQxqhb7W6UoOmaWwzAdgdaYR+1lIgqaq6u7sbCAROTk50Xe92mYBhUIlUGjXTPWREg6KQRuh3LY2yy+VygUCgyQU2H8DGKDvYk5wVW9VYJ4+0N+a7cwsxMMoOjdhllJ3L5QoGg90rBDCczsSZiPw5PdbwkLoRFSMMhLaXDupH1JBgfw+smnQ6jaghoZEe3Egfux+SECIajcrV7QD0FHUjDJY21rIrFAq1izWUSqVkMilYPQjoMdIIA6fVQNrY2MhkMo3Oyh38APQIaYRB1FKTXTqdzmQyi4uLh4eHPp9PCHF4eHh4eChHOvzrX/9iCXCgRxjejcHVUg1JTond3d11Op0ejyeVSgkhVFWVOZRIJJaWlrpaSgBCUDHCgGtjUINcPUj+19g39sWLF5qm5XK5bhQOwL+RRhh0Dxll5/V67+7u5GOXyyWEuLi46GShAFQhjTAEWgqk8fFxIUQ0GpVPXS6XMcBB1o1GRka6UzygW5Q/e2P+9sfqQjVAGmE4tBRIfr/f4/Ekk8m1tTUhxNLS0s3NzdraWjQa3djYEEIsLi52tZRAx1VERf6pemw7pBGGRqvDvg8PD+PxuHysqmowGEwmk/l83uFw7O7uyoY7AJ3UuRXqgL7w8KWDdF3XNK0vBnyzdBCasMliOdXFsKhiZJNvAzZk66WDnE5nX6QR0H9opsNQaimQcrmczMa63G73yclJ54oEDDfSCMOqWR+SbJQTf806qjvZSC6ren193Z3iAUOGNMIQaxZImqaZ9+VrskcfKzUAj1RRhBCkEYZas0DyeDyHh4dCCE3TYrGYfFzL4XBMT093pXTAkFAUpSIYTYAh1yyQjGELDofD6/UyhAHoij+b6ew6LRfolZYGNUxPTx8dHXW5JMBQotMI+Eurw751XU8kEul0Wj5NJBLPnj1zu91ra2u6rneteMDgYiMJ4O9aCiRd1wOBQCwWk/tQ5HK5WCwm2/Hy+XyTwQ4A6pNRRBoBJi0FUiaT0TQtGAyGQiEhhKwnHR0dHR0dhcNhTdNkUAFoCRUjoJ6WAklOM9rc3JSbIeVyOY/HI9evk8uq5vP5xxSiUChsbGy43W63272xsSHnNjWSTqdXV1flxfPz84lE4jE/GugpmumAxlpdXNWg6/rNzY2xvLfD4RBCGNsjPUCpVJKNfuFw+O7uLpVKra6uZrNZGX5V0un0zz//PDY2Fg6HHQ5HOp2OxWJ3d3ebm5sPLgDQI0QR0FRLgSS3OyoUCtPT03L/cmPikdwY6THzkI6Pj8vl8vv37+WbzM3NBQKBeDxeN2MSiYTD4fjw4YOMK7/fv7a2lkqlCCTYHWkE3KelJrvFxUWHwxEIBNbW1uRwBrk0QzQalU8fM0Upk8l4PB4j0lRV9Xg8jdoANU3z+XzmypPH4ymXy+yhDlsjjYAWtBRILpdrd3fX4XDIDZDevXsnjyeTSSFEOByu27zWCtkA6PV6zQc9Ho9cPa9WMBicm5urW8KHFQDoLjqNgJa12oe0tLRUu2Dd4eGhx+N5cBqJv5ZtrSL7peqqaporFAqpVMrr9RJIsCOiCGjHw/dDEkKoqvqYNGru3la4k5MTYzREK2+omHSgfEBzraWR8mcdSql63GM2KQbspse3zYY1pGg0mkwmvV7v0dFRLpdrPvu1G3sINqn0FAqFWCyWz+e9Xu/e3l6L1aMH740LtKedrcdtsqCqTYoBuzHfNpvsitcpDQNpfHzc6/V6PB7x1+Kq3fjxTbKk0amTk5OdnR25EjnrveLBVsTKeeRcPpa1gUqkEzdlmumAh2oYSH6/3+/3y8fdW1zV5XI5HI6bmxvzQU3TxsbG6l4v08jn8+3t7XWjPBgSMo2WI8vmg0pEWY4sn4mzh78vaQQ8wqP6kDpCVVVzd5Gu6/l8vlHVJxaLyWa6XpUOA6huGgkhliPLRp2pbYymAx6tvZUacrlcx7fj8/v9mUxme3t7b29P1/VYLCaEkIvmib+6soLB4ObmZi6XK5fL8mDVm7x48YKBdmhR3TSSliPLSkRpu+2OKAI64f5AyuVy6XQ6k8nIMJA8Ho/X6w2FQo8fZaeqajgcjsVicg0IIcTu7m7ddJH7XOTz+dpps3NzcwQSLNDO+AUAzSnNx57JCop8bIxrKJfLcv6Qw+E4PDzsSIWpVCrJhjtVVTseLXJwSDeGAqIfyb4i42lVhek8ct5qDYmKEYZJD26kzWpIiUQimUzKlUyrZsXquh6Px5PJZCAQ+PDhw+MjxOVyGWMogF5q1Hx3D9II6LRmgxri8bhcybR2jQan07m5uRkOh8vlcjwe72YJAZth/ALQHQ0DSY4gqFrJtMr6+vrY2BgLm6K/NBlN12S8w5/Y6RXomnuGfdddydRsenq6ahYRYHNyplFtJsk0ajgPiYoR0GVtb9BXpdEMVsDOKpGKeaUG6Z40IoqALntsIAF96kyciYgQQihCuWclN9II6AkCCWiMaUZAD90TSOl0+uLioskFjXbSA/oeFSOgt+4JJGP1BGCIUDECrNAwkOT+Dr0sCmALVIwAizQMJKfTyW5DGC5UjABLMagBEEJQMQKsRyA7jzGeAAAPS0lEQVRh2FUUIQRpBFiPQBoicqPuKvdMwRlsiiKEnIU0xF8CYBsE0hAxbrv3TwUdBv9uo6uT0wB6j0DC8GHwAmBLBBKGDIMXALsikDA0qBgB9kYgYQgQRUA/IJAw6GijA/oEgYTBRcUI6CsEEgYUFSOg3xBIGDhUjID+RCBhgBBFQD8jkDAQiCKg/xFI6H90FwEDgUBCP6NiBAwQAgm91plFxx8dReZiGI9ZcxawEIGEXpM3fSXyVwZEeh1F5mIAsA8CCb0mo2g5smx+2lIs0UAHDDQCCT2lRBQjiiT5VIko92QSIxeAQfcPqwuAIVKbRmYrYqXByxTSCBgGBBJsYTmyfB45rz5qRBFpBAwBmuxgS3QXAcOHGhIsU6dKJKgVAcOLQIJlqvqTKv8jiCJgmNFkB+udKedCiJXK8pk4s7osACxDDQm9U4lUqprpzpTzM+V8pbKs/CJII2DIUUNCT1UilT9nwv6PEEKsVJbPI+cict72eg0ABg6BhF6TUaT8IoQQRBEAA4GEHlIUIYTy9wCSC5uyshwAAgk9YZpXRPIAqItAQjcpf23xwEhuAPchkNAdLLUAoE0EEjqNKALwIAQSOocoAvAIBBIejY4iAJ1AIOERqBIB6BwCCe2jSgSgCwgktIMqEYCuIZDQAqpEALqPQEJj5BCAHiKQUA9NcwB6jkCCCVUiANYhkEAOAbAFW+wYWygUNjY23G632+3e2NgolUqtvOrZs2e5XK7bZRtkivLnn0rlzz8AYB3rA6lUKgUCgVwuFw6Hg8FgLpdbXV3Vdb35qxKJRLlc7k0JB8aKWFEiilCUiiKEoii/CHIIgH1Y32R3fHxcLpffv38/PT0thJibmwsEAvF4fHNzs/biUql0fHycz+c1Tet5SfucopwJIYRYqSzLA8tCKBFlObJ8Js4sLBcASNbXkDKZjMfjkWkkhFBV1ePx5PP5uhfruq5pmsPh8Hg8PSxj3zIa5RRF+UWsVJaNNJKWI8vnkXOrSgcAZhYHkq7rNzc3Xq/XfNDj8TSqAE1PTx8dHR0dHYXD4Z4UsD/VdA4pv4jlyHLda5cjy0pEqXsKAHrJ4ia7usHjcDh6X5K+p5hChW4hAH3I+ia7Rjo+gk4x6ew7W6l2pFwLaUQzHYBW9Pi2ad9AcrlcnX3Dikln37nXTD1DDxux3aj5DgDMenzbtLjJrknqdDyQ+ljVv036PVABoB6La0gul8vhcNzc3JgPapo2NjZmVZHsom416KHThpqMpjuPnFNhAmAH1jfZqapq7i7SdT2fz6uqamGRrGFOoDb7hO4lZxrVZpJMI+YhAbAD6yfG+v3+TCazvb29t7en63osFhNChEIheTYajSaTyWAwWHeebB+r7SHsckNcJVJZEStVmUQaAbAP6wNJVdVwOByLxVKplDyyu7s7sB1Ili5jeibOREQIIRShVAQdUQDsRbHJkLNSqSQb7lRV7Xgaud1uIcTV1VVn37Z/EUgA2tWDG6n1NSTJ5XL5/X6rSwEAsIz1gxoAABAEEgDAJggkAIAtEEgAAFsgkAAAtkAgAQBsgUACANgCgQQAsAUCCQBgCwQSAMAWCCQAgC0QSAAAW7DL4qqDTRE1ux8JwXrbAGBGIPWCkT3s+wAAjdBkBwCwBQIJAGALBBIAwBYIJACALRBIAABbIJAAALZAIPXIilhRIoqICCWirIgVq4sDALbDPKReUCKKEGI5siyfnkfOFaFUIkxIAoB/I5C6TokoRhRJ8qkSIZMA4N9osuuu2jQyo+0OAAwEkmWWI8vnkXOrSwEAdkEg9RQJBACNEEg91aT5DgCGHIEEALAFAsky55FzKkwAYCCQuqsSqTTpNzoTZ70sDADYGfOQuq4SqdROjJXHrSwWANgMgdQLMntkLAmiCADqIZB6pxKpsIU5ADRCHxIAwBYIJACALRBIAABbIJAAALZAIAEAbIFAAgDYAsO+e0ERSu3j3o//tkkxAKAuAqkXbHLTt0kxAKAumuwAALZAIAEAbIFAAgDYAoEEALAFAgkAYAsEEgDAFggkAIAtEEgAAFsgkAAAtkAgAQBsgUACANgCgQQAsIX+C6RCobCxseF2u91u98bGRqlUsrpEAIAO6LPVvkulUiAQEEKEw+G7u7tUKrW6uprNZp1Op9VFAwA8Sp8F0vHxcblcfv/+/fT0tBBibm4uEAjE4/HNzU2riwYAeJQ+a7LLZDIej0emkRBCVVWPx5PP560tVd9RFOX+i4YG34YZ34YZ30aP9VMg6bp+c3Pj9XrNBz0ej6ZpVhUJANAp/RRIdYPH4XD0viQAgI7rsz6kRnK5nKqqza9xu929KYz9TU1N8W0Y+DbM+DbM+DZ6rJ9qSE24XC6riwAAeJR+qiE1SZ3mgXR1ddWF4gAAOqmfakgul8vhcNzc3JgPapo2NjZmVZEAAJ3ST4EkhFBVNZfLGU91Xc/n8/f2HgEA7K/PAsnv95fL5e3tbSGEruuxWEwIEQqFrC4XAOCxlEqlYnUZ2pNIJGQOSbu7u36/38LyAAA6ov8CSQhRKpVkw52qqoyvA4DB0JeBBAAYPH3WhwQAGFQEEgDAFggkAIAtDHggsb2sWTqdXl1dld/G/Px8IpGwukS2UCqVnj17Fo1GrS6IlXRd397efvbsmfy7kU6nrS6Rlcy/Kaurq+a5j8Pm2bNntR+/e/fVflo6qF1sL2uWTqd//vnnsbGxcDjscDjS6XQsFru7u2Nvw+3t7XK5bHUpLBYIBEqlks/nGxkZkX9VhBBLS0tWl8sC8uN7PB5538hkMoFA4PDwcAgn4CcSidpfje7eVyuDa39/f2pq6vfff5dPLy4upqam9vf3rS2VVb7//vvZ2dm7uzvjyH/913/Nzs5aWCQ72N/fn52dHea/GJVKJR6PT01NXVxcyKd3d3f//Oc/v//+e2tLZRX5e2H8ptzd3U1NTf3000/WlqqXrq+v9/f3v//++6mpKfNfDKmr99VBbrJje1kzTdN8Pp/5XzEej6dcLg9zc0ShUEgmk7u7u1YXxGLpdNrj8Rg1AKfT+e7du3A4bG2pLOTxeIzfFKfT6fV6dV23tki9pOu6pmkOh8Pj8dSe7ep9dWADie1lqwSDwbm5udrjQzuzWNf1jY0Nn883nA1TZpqmVf2mTE9PD2ELleR0OjVNMxKoVCrl8/mh+jWZnp4+Ojo6Ojqq/UdJt++rA9uHxPayVar6igqFQiqV8nq9Q/WbZhaPx4UQw1wPkAqFgnwQjUZTqVS5XB4bG3vx4sX6+rq1BbNKOBze2NhYXV1dXFwUQqRSKdmfZHW5bKHb99WBDaQmWtledrCdnJzI9QCH9tcsnU4nk8nDw8PhHOFiJnutk8nk2NhYKBQyBrwIIYYzkxwOh8vl0jQtk8kIIcrlclWFAHV15L46jIE0tHUCIUShUIjFYvl83uv17u3tDedXoev6zs5OMBgc8n+XmI2NjX348EHGs9/vX1tbi8fjwxlIGxsbmqYZw+pyudzGxsbNzc27d++sLpqtdeRmMrB9SA/eXnaAnZyc/PDDD+Vy+fDw8OjoaGi/h3g8LqsF0b8IITRNi0ajQzhTTba3LC4uMuBFCFEoFPL5fCgUMv6xoqqqz+fLZDJD+HejVrfvqwNbQ2J72SonJyc7Ozs+n29vb8/qslhsfHzc6/VWtYbL242u68OW08ZwKbORkZHel8QO5L9UqkaXyW+jVCoN29+NWt2+rw5sIIkG28v6fD4Li2ShWCwmm+msLoj1/H5/1R5abrd7cXFxaOcI1w7bvb6+FjX35WEg64sXFxfm5lz5bZBGUlfvqwPbZCfYXtYkl8tVNVIZaIjA+vq6pmnb29tyrHMikUilUsFgcAhHfExPT3u93mQyaSysJb8Nn89HIEldva8OeA0pHA7HYrFUKiWP7O7uDuffKnmjyefztfPX5ubmhvM7gWFpaUnOETZ+U3w+39DWF9+9e7exsRGLxYydqRcXF4d2PGqtrt5XB3+DPraXBVohf1PkKOe6HUtDRY5ukKsV8G3U6tJ9dfADCQDQFwa5DwkA0EcIJACALRBIAABbIJAAALZAIAEAbIFAAgDYAoEEALAFAgkAYAsEEgDAFggkAIAtEEgAAFsY5NW+gQ7K5XIXFxdNLhgfH/f7/ScnJ9fX10O7VDbwGAQS0JKLi4tkMtnkAq/X6/f70+l0Pp8nkIAHIJCAlrx48WJubs54GovFNE07PDw0jsjNRodwl1WgU9h+AniItbW1fD5/dXVldUGAwUENCeikQqFQLpdVVRVClEqlUqmkqqrR/yT7mYQQsqvJfMSsVCodHx+Xy2WHw7G0tNTuBnGlUimTydzd3QkhRkZGfD7fEG5Gjn5EIAGdFIvFjJrT8fFxMpn0+XypVMrr9cr94wuFghCi6sje3p7xDolEwtg8Wwgh38F8QXPpdHpnZ6dcLhtHjo+PP3z4QCbB/hj2DXSXpmm//vrr0dHRr7/+OjY2lkqlNE3LZrPmI8bF6XQ6Fot5vd5sNnt1dfXrr7/KPItGoy3+OBlm79+/v7q6urq6CgaDNzc38Xi8K58N6CgCCeiu9fV1WTtxOp2Li4vyiMvlMh/J5XLy4kQi4XA43r17Z1ywt7dXFVrN3dzceDweo5Vvc3MzGAyOj493+mMBnUcgAd21tLR07xFJ13VN0xYXF6ua11RVLZfLuq638uMcDkc+n49Go6VSSR7Z3Nys7aYCbIg+JMAuNE0TQqRSqbr1IU3T5FiJ5g4PDzc2NpLJZDKZHBsbU1V1aWmplRcCliOQAHvxer11JzPJRrx7TU9Pf/r0KZ1OFwqFfD4v4y0YDDJXF/ZHIAF2IXPI5XJVhYccSt5iIElLS0uyYbBUKq2trSWTSQIJ9kcfEmAXTqfT6/VmMhlzd5Gu64FAwDwQvIlcLud2u81D8lwul2yva7ELCrAQgQTYSCgUKpfLgUAgnU4LIQqFQiAQKJfL6+vr8gIZOWtra3Vf7vF4HA5HKpU6OTnRdV3X9UQikUqlPB4P85BgfwQSYCOqqu7u7pZKpZ9//tntdv/www+apu3u7jYamFfF6XSGw2EhxM7Ozrfffvvtt9/GYjGPx7O7u9vlggMdwFp2gO3oup7JZK6vr8fHx2tHgQsh1tbWjo6Omrw8l8sVCoWRkRGv19vuykOAVQgkoM+k0+lcLtf6YkJAv6DJDugnhUIhk8mEQiGrCwJ0HjUkAIAtUEMCANgCgQQAsIX/B632y6uPQRBZAAAAAElFTkSuQmCC\n",
"text/plain": [
" \n",
"More importantly, its object-oriented style of coding is difficult to master on a casual basis, and is easily forgotten, if used rarely. As an illustration, I find that this \n",
" \n",
" In other courses of the Physics program, python may prove more suitable, especially if specific-purpose libraries are available to help, but for the everyday scientific tasks of analyzing and plotting data, procedurally-based languages offer an easier way to perform them.\n",
" \n",
"For an interesting, if somewhat discouraging read, look at https://realpython.com/python-matplotlib-guide/ just to see how idiosyncratic python's interface can be, from stucture to terminology. Without comment, below is a brief example of a properly-syntaxed \"simple\" plot in python."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.00 0.05 0.02\n",
"2.00 0.10 0.07\n",
"3.00 0.14 0.01\n",
"4.00 0.19 0.04\n",
"5.00 0.25 0.05\n",
"6.00 0.30 0.10\n",
"7.00 0.34 0.02\n",
"8.00 0.40 0.04\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\n",
"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"%eXtrema
and cell magic %%eXtrema
should be available. Note that this kernel uses a simplified batch-mode version of extrema
which may not have some commands implemented yet. The kernel returns an image file which we can then show within this notebook."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"image/png": "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1ap1Fe60bt260tLSlJSUsLCwoKCg6OjoVatWnThxYubMmVqXpnfPPPNM9/V7q6qqxo0bp3VpAzF79uzq6urly5dHRkYGBQVFRkYuW7bs2LFjPvpOa2hoEPfdnFxbr776akFBQXJyclhYWGBg4NixYx966KGKiorvf//7WpfWL4Yu37yrLQAAbsGIEACgawQhAEDXCEJA7YUXXjD0wxNPPPHcc88ZDIaf/exnWpcMYOAIQgCArjFZBriJtrY2ZUGy2traSZMmaV0OADdjRAgA0DWCEBg41XeEmzZtMhgM+/btO3ny5H333Td8+PBRo0YtXrz40qVLInLx4sXFixePHDly2LBhCxYsOH78uOq3HT9+fPHixWPGjAkODh4/fvyPf/zjAd/O7fjx49///vfHjBkzZMiQUaNGLViw4K233vomWwr4M62v6AcGu9bWVmVnqa2tVT2Vk5MjIqtXr1Yebty4UUSys7NDQkKc97IpU6bU1tZGREQ4N44YMcL5puS7d+/uvmxxREREVVWVqwVXV1c77lvkLDs7+5v8fwD8FSNCwM1ycnImT55cXl5ut9tLSkosFktNTc2dd94ZERFx5MgRu91+5MiRiIiI5uZmZVViETl58uTjjz/e2dn55JNP1tTUtLa2njp1Kj09vaGhIT093XmZ6f5YsWKFzWbLysqqq6trb29XXshoNG7ZsuXatWse2GLAtxGEgJsFBQUVFxfPnj3bZDItWLDgoYceEpGWlpbS0tK5c+eaTKa5c+dmZWWJSHV1tfIjubm5ra2tK1as+M///M9//Md/DA4Onjp16rvvvhsfH19bW6vcKLH/Tpw4ISJPP/307bffPmTIkOHDh//gBz+4du3atWvXTCaTuzcX8HkEIeBmiYmJzrfWmjJliojEx8ePGTPG0RgVFSUiNptNeVhcXCwi3VcuVkK0tLTUpQKUm/MtXbr0d7/73VdffTWATQB0hSAE3EwJOQez2Szd7hzrfIP4xsZG5T7G06dPV12z/+STT4rI2bNnXSpg9erVInLw4MF77703LCxs/vz5//Ef//H5558PdIMAP0cQAm6mmimj6D4RxsExLhxwB5WHH344Pz9fGYl2dnYePnx45cqVkZGRzz//vEu/B9AJghBws4AA13YrZcgYEBDQ242aT5486WoNDz744OnTp6uqqp599tmkpKSgoKD29vY1a9Z8+OGHrv4qwO8RhIDGxowZY7FYbty4UVlZ6d7f/J3vfGfdunUffvjh5cuX77zzThFx3LYegANBCGgvOTlZRJ5++mlV+w9/+EODwfDTn/60/7/qr3/9q8FgGD9+/PXr1x2Nw4cPj4+PF9dHq4AesFcA2luzZk1gYODhw4eVU5odHR3nz5//yU9+snPnTqPRqEyZ6adJkybNmjWrrq4uIyPj+PHjbW1tX3zxxZtvvrl9+3YRWbhwocc2AvBVBCGgvdmzZ7/88ssBAQF79+6dNm1aUFBQVFSU0vLGG284r/Q9bNgwg8Hwzjvv9PHbdu7cGRISUlBQEBsbazQaw8PDH3nkEbvdvmzZsvnz53t+awAfQxACg8ITTzxx9OjR9PT00aNHBwYGhoeHp6WllZWVPfjgg67+qm9/+9vl5eVLly697bbbAgMDw8LC5s2bt2fPnldffdUTlQO+jtswAT7m9ttvf+2117773e9qXQjgJxgRAr7kV7/6VVNTU1xcnNaFAP6DIAR8yd69e/fs2TNy5EitCwH8B6dGAQC6xogQAKBrBCEAQNcIQgCArv1/L/vikHxOWvIAAAAASUVORK5CYII=\n",
"text/plain": [
"\\usepackage{svg}
and \\includesvg{image.svg}
).\n",
"%%eXtrema
, you can run eXtrema
commands directly within this notebook. However, some functionality is still missing, so a better way at the moment is to generate a macro file and then execute it from within eXtrema
invoked outside of jupyter. This uses a full interactive version of eXtrema
, so at the end when it processes your basic.pcm
script that ends with a quit
choose Yes when it offers to terminate the run. The resulting .eps file can be seen with a PDF viewer (e.g. evince
) and is ready to be uploaded to overleaf."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing basic.pcm\n"
]
}
],
"source": [
"%%file basic.pcm\n",
"clear\n",
"defaults\n",
"\n",
"read exp1.dat x,y,dy\n",
"\n",
"set xlabel `Time, s'\n",
"set ylabel `Distance, m'\n",
"set yleadz 1\n",
"set %xlaxis 16\n",
"set legendon 1\n",
"set legendframeon 0\n",
"set %legendframe 18 65 50 85\n",
"set legendsymbols 3\n",
"set legendentrylineon 0\n",
"set %textheight 3\n",
"set plotsymbol -17\n",
"set %plotsymbolsize 1.7\n",
"set curvecolor red\n",
"set box 1\n",
"\n",
"scales 0 9 9 0 0.45 9\n",
"graph `data' x,y\n",
"\n",
"scalar\\vary a,b\n",
"fit\\e2 y=a*x^2+b\n",
"\n",
"generate xx x[1],,x[#] 1000\n",
"set plotsymbol 0\n",
"set legendentrylineon 1\n",
"graph\\overlay rchar(a,`y=%6.4ft<^>2<_>+')//rchar(b,`%6.4f') xx,a*xx^2+b\n",
"\n",
"replot\n",
"hardcopy\\POSTSCRIPT extrema.eps\n",
"hardcopy\\PNG basic.png\n",
"quit"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-rw-r--r-- 1 esternin LinuxEmployees 37470 Oct 17 16:22 basic.png\n",
"-rw-r--r-- 1 esternin LinuxEmployees 39103 Oct 17 16:22 extrema.eps\n"
]
}
],
"source": [
"%%bash\n",
"extrema --script basic.pcm\n",
"ls -la extrema.eps basic.png"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# gnuplot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data importation is actually difficult to achieve in gnuplot because it's primarily a plotting program, and data manipulation is not really its strength. On the other hand, plotting data from external ASCII data files is particularly easy, as this is precisely what gnuplot was originally designed for.\n",
"\n",
" data=numpy.loadtxt('exp1.dat')\n",
" x = data[:,0]\n",
" y = data[:,1]\n",
" dy= data[:,2]\n",
" def f(x, a, b): return a\\*x\\*\\*2 + b\n",
" scipy.optimize.curve_fit(f, x, y, p0=[1, 0])\n",
"
\n",
"a lot less readable than this (for gnuplot)\n",
"\n",
" f(x) = a\\*x\\*\\*2+b\n",
" a=1\n",
" b=1\n",
" fit f(x) 'exp1.dat' via a,b\n",
"
\n",
"or this (for extrema)\n",
"\n",
" read exp1.dat x,y,dy\n",
" scalar\\vary a,b\n",
" fit y=a\\*x^2+b\n",
"
\n",
"