| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os, sys\n",
- "sys.path.append('..')\n",
- "import modules.coordsi as csi\n",
- "import modules.wavacc as wav\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "import scipy as sp\n",
- "import matplotlib.pyplot as plt"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "../handletrace/21004100020230224.csv\n",
- " x y z frame positionvectorvalue velocity \n",
- "0 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \\\n",
- "1 -0.124534 -0.158254 1.640717 1.0 2.732507 0.000000 \n",
- "2 -0.106343 -0.167455 1.646413 2.0 2.750027 0.132363 \n",
- "3 -0.085354 -0.187697 1.658508 3.0 2.793165 0.207698 \n",
- "4 -0.060168 -0.196898 1.662754 4.0 2.807139 0.118208 \n",
- "... ... ... ... ... ... ... \n",
- "367195 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \n",
- "367196 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \n",
- "367197 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \n",
- "367198 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \n",
- "367199 0.000000 0.000000 0.000000 0.0 0.000000 0.000000 \n",
- "\n",
- " acceleration isValid \n",
- "0 0.000000 0.0 \n",
- "1 0.000000 1.0 \n",
- "2 0.000000 1.0 \n",
- "3 0.075336 1.0 \n",
- "4 -0.089490 1.0 \n",
- "... ... ... \n",
- "367195 0.000000 0.0 \n",
- "367196 0.000000 0.0 \n",
- "367197 0.000000 0.0 \n",
- "367198 0.000000 0.0 \n",
- "367199 0.000000 0.0 \n",
- "\n",
- "[367200 rows x 8 columns]\n"
- ]
- }
- ],
- "source": [
- "# open a csv file and read it as pandas dataframe\n",
- "filepath = os.path.join('../handletrace/',os.listdir('../handletrace')[1])\n",
- "df = wav.openDataframe(filepath)\n",
- "print(filepath)\n",
- "print(df)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 44,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[5, 1.0, -0.0095759536343265]\n"
- ]
- }
- ],
- "source": [
- "frame = list(df.index.values)\n",
- "acc = pd.Series.tolist(df['acceleration'])\n",
- "val = pd.Series.tolist(df['isValid'])\n",
- "vel = pd.Series.tolist(df['velocity'])\n",
- "\n",
- "merged = []\n",
- "for i in range(0, len(val)):\n",
- " merged.append([frame[i], val[i], acc[i]])\n",
- "print(merged[5])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {},
- "outputs": [],
- "source": [
- "for i in range(0, len(merged)):\n",
- " if merged[i][1] == 0 and merged[i][2] != 0:\n",
- " merged[i][2] = 0"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 46,
- "metadata": {},
- "outputs": [],
- "source": [
- "valid_frame = []\n",
- "vaild_dot = []\n",
- "for i in range(0, len(merged)):\n",
- " if merged[i][1] == 1:\n",
- " valid_frame.append(merged[i][0])\n",
- " vaild_dot.append(merged[i][2])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 137,
- "metadata": {},
- "outputs": [
- {
- "ename": "ValueError",
- "evalue": "x and y arrays must be equal in length along interpolation axis.",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[137], line 9\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[39m#it_linear = sp.interpolate.interp1d(frame, acc, kind='linear')\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[39m#s_linear = sp.interpolate.interp1d(frame, acc, kind='slinear')\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[39m#quad_linear = sp.interpolate.interp1d(frame, acc, kind='quadratic')\u001b[39;00m\n\u001b[1;32m 8\u001b[0m all_cubic_inter \u001b[39m=\u001b[39m sp\u001b[39m.\u001b[39minterpolate\u001b[39m.\u001b[39minterp1d(frame, acc, kind\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mcubic\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m----> 9\u001b[0m val_cubic_inter \u001b[39m=\u001b[39m sp\u001b[39m.\u001b[39;49minterpolate\u001b[39m.\u001b[39;49minterp1d(frame, vaild_dot, kind\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mcubic\u001b[39;49m\u001b[39m'\u001b[39;49m)\n\u001b[1;32m 10\u001b[0m \u001b[39m#krogh_inter = sp.interpolate.KroghInterpolator(valid_frame, vaild_dot)\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \n\u001b[1;32m 12\u001b[0m \u001b[39m#it_linear = it_linear(frame)\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \u001b[39m#s_linear = s_linear(frame)\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[39m#quad_linear = quad_linear(frame)\u001b[39;00m\n\u001b[1;32m 15\u001b[0m all_cubic_inter \u001b[39m=\u001b[39m all_cubic_inter(frame)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/scipy/interpolate/_interpolate.py:491\u001b[0m, in \u001b[0;36minterp1d.__init__\u001b[0;34m(self, x, y, kind, axis, copy, bounds_error, fill_value, assume_sorted)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__init__\u001b[39m(\u001b[39mself\u001b[39m, x, y, kind\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mlinear\u001b[39m\u001b[39m'\u001b[39m, axis\u001b[39m=\u001b[39m\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m,\n\u001b[1;32m 488\u001b[0m copy\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m, bounds_error\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m, fill_value\u001b[39m=\u001b[39mnp\u001b[39m.\u001b[39mnan,\n\u001b[1;32m 489\u001b[0m assume_sorted\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m):\n\u001b[1;32m 490\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\" Initialize a 1-D linear interpolation class.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 491\u001b[0m _Interpolator1D\u001b[39m.\u001b[39;49m\u001b[39m__init__\u001b[39;49m(\u001b[39mself\u001b[39;49m, x, y, axis\u001b[39m=\u001b[39;49maxis)\n\u001b[1;32m 493\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mbounds_error \u001b[39m=\u001b[39m bounds_error \u001b[39m# used by fill_value setter\u001b[39;00m\n\u001b[1;32m 494\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcopy \u001b[39m=\u001b[39m copy\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/scipy/interpolate/_polyint.py:56\u001b[0m, in \u001b[0;36m_Interpolator1D.__init__\u001b[0;34m(self, xi, yi, axis)\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdtype \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 55\u001b[0m \u001b[39mif\u001b[39;00m yi \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m---> 56\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_set_yi(yi, xi\u001b[39m=\u001b[39;49mxi, axis\u001b[39m=\u001b[39;49maxis)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/scipy/interpolate/_polyint.py:126\u001b[0m, in \u001b[0;36m_Interpolator1D._set_yi\u001b[0;34m(self, yi, xi, axis)\u001b[0m\n\u001b[1;32m 124\u001b[0m shape \u001b[39m=\u001b[39m (\u001b[39m1\u001b[39m,)\n\u001b[1;32m 125\u001b[0m \u001b[39mif\u001b[39;00m xi \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m shape[axis] \u001b[39m!=\u001b[39m \u001b[39mlen\u001b[39m(xi):\n\u001b[0;32m--> 126\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mx and y arrays must be equal in length along \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 127\u001b[0m \u001b[39m\"\u001b[39m\u001b[39minterpolation axis.\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 129\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_y_axis \u001b[39m=\u001b[39m (axis \u001b[39m%\u001b[39m yi\u001b[39m.\u001b[39mndim)\n\u001b[1;32m 130\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_y_extra_shape \u001b[39m=\u001b[39m yi\u001b[39m.\u001b[39mshape[:\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_y_axis]\u001b[39m+\u001b[39myi\u001b[39m.\u001b[39mshape[\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_y_axis\u001b[39m+\u001b[39m\u001b[39m1\u001b[39m:]\n",
- "\u001b[0;31mValueError\u001b[0m: x and y arrays must be equal in length along interpolation axis."
- ]
- }
- ],
- "source": [
- "\n",
- "'''\n",
- "Krogh interpolation은 쓰고 싶으나 데이터가 너무 많아 느리다. 일반 보간을 한 후 여기서 decomoposition을 하는 것이 시간적인 이득을 얻을 수 있다.\n",
- "1D 인터폴레이션은 cubic으로 한다. \n",
- "'''\n",
- "#it_linear = sp.interpolate.interp1d(frame, acc, kind='linear')\n",
- "#s_linear = sp.interpolate.interp1d(frame, acc, kind='slinear')\n",
- "#quad_linear = sp.interpolate.interp1d(frame, acc, kind='quadratic')\n",
- "all_cubic_inter = sp.interpolate.interp1d(frame, acc, kind='cubic')\n",
- "val_cubic_inter = sp.interpolate.interp1d(valid_frame, vaild_dot, kind='cubic')\n",
- "#krogh_inter = sp.interpolate.KroghInterpolator(valid_frame, vaild_dot)\n",
- "\n",
- "#it_linear = it_linear(frame)\n",
- "#s_linear = s_linear(frame)\n",
- "#quad_linear = quad_linear(frame)\n",
- "all_cubic_inter = all_cubic_inter(frame)\n",
- "val_cubic_inter = val_cubic_inter(valid_frame)\n",
- "print(val_cubic_inter)\n",
- "print(valid_frame)\n",
- "\n",
- "#krogh_inter = krogh_inter(frame)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 134,
- "metadata": {},
- "outputs": [
- {
- "ename": "ValueError",
- "evalue": "x and y must have same first dimension, but have shapes (367200,) and (93050,)",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[134], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m#plt.scatter(frame, all_cubic_inter, color = 'red', linewidths = 0.3, label = 'cubic')\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[39m#plt.scatter(frame, vel, color = 'green', linewidth = 1, label = 'valid')\u001b[39;00m\n\u001b[1;32m 3\u001b[0m plt\u001b[39m.\u001b[39mplot(frame, all_cubic_inter, color \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39mblue\u001b[39m\u001b[39m'\u001b[39m, linewidth \u001b[39m=\u001b[39m \u001b[39m2\u001b[39m, label \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39mall_interpolation\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m plt\u001b[39m.\u001b[39;49mplot(frame, val_cubic_inter, color \u001b[39m=\u001b[39;49m \u001b[39m'\u001b[39;49m\u001b[39mred\u001b[39;49m\u001b[39m'\u001b[39;49m, linewidth \u001b[39m=\u001b[39;49m \u001b[39m1\u001b[39;49m, label \u001b[39m=\u001b[39;49m \u001b[39m'\u001b[39;49m\u001b[39mvalid_interpolation\u001b[39;49m\u001b[39m'\u001b[39;49m)\n\u001b[1;32m 5\u001b[0m \u001b[39m#plt.plot(frame, vel, color = 'black', linewidth = 1, label = 'velocity')\u001b[39;00m\n\u001b[1;32m 6\u001b[0m plt\u001b[39m.\u001b[39maxhline(y\u001b[39m=\u001b[39m\u001b[39m0\u001b[39m, color\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mblack\u001b[39m\u001b[39m'\u001b[39m, linewidth\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/matplotlib/pyplot.py:2812\u001b[0m, in \u001b[0;36mplot\u001b[0;34m(scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 2810\u001b[0m \u001b[39m@_copy_docstring_and_deprecators\u001b[39m(Axes\u001b[39m.\u001b[39mplot)\n\u001b[1;32m 2811\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mplot\u001b[39m(\u001b[39m*\u001b[39margs, scalex\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m, scaley\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m, data\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[0;32m-> 2812\u001b[0m \u001b[39mreturn\u001b[39;00m gca()\u001b[39m.\u001b[39;49mplot(\n\u001b[1;32m 2813\u001b[0m \u001b[39m*\u001b[39;49margs, scalex\u001b[39m=\u001b[39;49mscalex, scaley\u001b[39m=\u001b[39;49mscaley,\n\u001b[1;32m 2814\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49m({\u001b[39m\"\u001b[39;49m\u001b[39mdata\u001b[39;49m\u001b[39m\"\u001b[39;49m: data} \u001b[39mif\u001b[39;49;00m data \u001b[39mis\u001b[39;49;00m \u001b[39mnot\u001b[39;49;00m \u001b[39mNone\u001b[39;49;00m \u001b[39melse\u001b[39;49;00m {}), \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/matplotlib/axes/_axes.py:1688\u001b[0m, in \u001b[0;36mAxes.plot\u001b[0;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1445\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 1446\u001b[0m \u001b[39mPlot y versus x as lines and/or markers.\u001b[39;00m\n\u001b[1;32m 1447\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1685\u001b[0m \u001b[39m(``'green'``) or hex strings (``'#008000'``).\u001b[39;00m\n\u001b[1;32m 1686\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 1687\u001b[0m kwargs \u001b[39m=\u001b[39m cbook\u001b[39m.\u001b[39mnormalize_kwargs(kwargs, mlines\u001b[39m.\u001b[39mLine2D)\n\u001b[0;32m-> 1688\u001b[0m lines \u001b[39m=\u001b[39m [\u001b[39m*\u001b[39m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_lines(\u001b[39m*\u001b[39margs, data\u001b[39m=\u001b[39mdata, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)]\n\u001b[1;32m 1689\u001b[0m \u001b[39mfor\u001b[39;00m line \u001b[39min\u001b[39;00m lines:\n\u001b[1;32m 1690\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39madd_line(line)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/matplotlib/axes/_base.py:311\u001b[0m, in \u001b[0;36m_process_plot_var_args.__call__\u001b[0;34m(self, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 309\u001b[0m this \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m args[\u001b[39m0\u001b[39m],\n\u001b[1;32m 310\u001b[0m args \u001b[39m=\u001b[39m args[\u001b[39m1\u001b[39m:]\n\u001b[0;32m--> 311\u001b[0m \u001b[39myield from\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_plot_args(\n\u001b[1;32m 312\u001b[0m this, kwargs, ambiguous_fmt_datakey\u001b[39m=\u001b[39;49mambiguous_fmt_datakey)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/matplotlib/axes/_base.py:504\u001b[0m, in \u001b[0;36m_process_plot_var_args._plot_args\u001b[0;34m(self, tup, kwargs, return_kwargs, ambiguous_fmt_datakey)\u001b[0m\n\u001b[1;32m 501\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39maxes\u001b[39m.\u001b[39myaxis\u001b[39m.\u001b[39mupdate_units(y)\n\u001b[1;32m 503\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mshape[\u001b[39m0\u001b[39m] \u001b[39m!=\u001b[39m y\u001b[39m.\u001b[39mshape[\u001b[39m0\u001b[39m]:\n\u001b[0;32m--> 504\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mx and y must have same first dimension, but \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 505\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mhave shapes \u001b[39m\u001b[39m{\u001b[39;00mx\u001b[39m.\u001b[39mshape\u001b[39m}\u001b[39;00m\u001b[39m and \u001b[39m\u001b[39m{\u001b[39;00my\u001b[39m.\u001b[39mshape\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 506\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mndim \u001b[39m>\u001b[39m \u001b[39m2\u001b[39m \u001b[39mor\u001b[39;00m y\u001b[39m.\u001b[39mndim \u001b[39m>\u001b[39m \u001b[39m2\u001b[39m:\n\u001b[1;32m 507\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mx and y can be no greater than 2D, but have \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 508\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mshapes \u001b[39m\u001b[39m{\u001b[39;00mx\u001b[39m.\u001b[39mshape\u001b[39m}\u001b[39;00m\u001b[39m and \u001b[39m\u001b[39m{\u001b[39;00my\u001b[39m.\u001b[39mshape\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n",
- "\u001b[0;31mValueError\u001b[0m: x and y must have same first dimension, but have shapes (367200,) and (93050,)"
- ]
- },
- {
- "data": {
- "image/png": "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6KefftKoUaNUXFysZs2aqWfPnvr888915plnWl0q4GizZtldQf1mzvR9blXIILwA0S0sd5W+6aabdNNNN9X43pIlS3yeT506VVOnTg1DVYC7OGGHXbWGqhfLHjlSGjPG+jr+8Q/p97+3fj0AnMlxZxsBqNn334dvXW+9Ffyyhw+bV0dtPv3U+nUAcC7CC+ASX34ZvnVNmxa+dQFAoAgvAPzmhENXAEB4gWuw43SHzZvtrgBApCO8APCbPwFy0aLA23XyFX0BOA/hBQAAuArhBYDfOHQHwAkILwD8ZlV4Cedp4ADcj/DiJ/7itB/fgf0C/Q4qK+ufZ9cuacOG4OoBEJ0IL35au9buCgB7rVwpDR0a+HJffFH3+3//e3D1AIhehBc/heOS54CTZWYGt9xtt9X9/uOPB9cugOhFePHTkSN2VwAAACTCi98Yb2G/d9+1uwIEg/87AMxGePFTQYHdFeD11+2uAMEoK7O7AgCRhvDip0OH7K4AcKevv7a7AgCRhvACAABchfACAABchfACAABchfACwHJPPWV3BQAiCeEFgOXGjrW7AgCRhPACAABchfACAABchfACAABchfACAABchfACAABchfACAABchfACAABchfACAABchfACAABchfACx5o61e4KAABORHiBY40bZ3cFAAAnIrwAAABXIbwAAABXIbwAAABXIbwAAABXIbwAEcowpP377a4CAMwXlvAybdo0nXrqqWrUqJEyMzO1cuXKOud/8803lZGRoUaNGqlr166aN29eOMoEIsa//iUNGiQNGGB3JQBgPsvDy+uvv65x48Zp8uTJ+uqrr9StWzfl5ORo165dNc7/+eef65prrtF1112nNWvWaNCgQRo0aJDWrVtndalAxBg2THr3XburAABrxBiGYVi5gszMTP3qV7/Sk08+KUmqrKxUenq6/vznP2vixInV5h8yZIgOHDig999/3/vaueeeq+7du2v69On1rq+srEyJiYkqLS1VQkKCadsRE2NaUwBMMGiQ3RUA0e2RR6T27c1rL5D99wnmrba6iooKrV69Wrm5ud7XYmNjlZ2drfz8/BqXyc/P17gqVyfLycnR3Llza5y/vLxc5eXl3udlZWWhFw7A8Wr5lQAgTCZNsm/dlh42+vHHH3XkyBGlpKT4vJ6SkqLi4uIalykuLg5o/ry8PCUmJnof6enp5hQPAAAcydKel3DIzc316akpKysjwESQs86S1q61uwr3ev11acgQu6uwxs6ddlcARLeTT7Zv3ZaGlxYtWqhBgwYqKSnxeb2kpESpqak1LpOamhrQ/PHx8YqPjzenYDhOYqLdFbhb69Z2V2CdWn4lAIgClh42iouLU8+ePbVw4ULva5WVlVq4cKGysrJqXCYrK8tnfklasGBBrfMDAIDoYvlho3Hjxmn48OE655xz1KtXLz322GM6cOCARo4cKUkaNmyYWrdurby8PEnSzTffrAsuuECPPPKIBg4cqNdee02rVq3Ss88+a3WpcCDO8goNnx+ASGR5eBkyZIh++OEHTZo0ScXFxerevbvmz5/vHZRbVFSk2NhjHUC9e/fWK6+8orvuukt33HGHOnbsqLlz56pLly5WlwoHYucbGj4/AJHI8uu8hBvXeYksF1wgLV1qdxXu9fnnUu/edldhjcj6zQUgkP039zaCoxEaAQBVEV4AAICrEF7gaPS8hIbPD0AkIrwAAABXIbzA0eg5AABURXgBAACuQniBo9HzAgCoivACRDDCH4BIRHiBo7HzBQBURXgBAACuQniBo9HzEho+PwCRiPACAABchfACR6PnAABQFeEFiGCEPwCRiPACR2PnCwCoivACAABchfACR6PnJTRu+PxOO83uCgC4DeEFgK1WrrS7AgBuQ3iBo7mh5wChieW3EIAA8WsDAAC4CuHFT+npdlcQneh5CY0TPr/kZGnHjtrfN4zw1QIgMhBe/NS2rd0VAO506qlSWprdVQCIJIQXOJoTeg5gLXpeAASK8OKnXr3srgAIHOEPQCQivPhpyhS7K4hO7HwjHz0vAAJFePFT06Z2VwBJ6tjR7goAAHYjvMDRqva8nHSSPXW4lRt6rrjOC4BA8WsDrsIhhsjTrJndFQBwG8ILHM0NPQcIXY8edlcAwE0IL3C0quGFnhf3ueKK+udp2DCwNq+6KrhaAEQGwgsQwULtucrLk155JbQ2/vKX+ucJtM7zzguuFgCR4QS7CwDqQs+LvSZOlH7+ObQ24uPNqQUAjqLnBa5CeAk/J37mjIUCohvhBY7GTgoAUBXhBab64x+tbd+JvQCRzokB0ok1AQgfS8PLnj17NHToUCUkJCgpKUnXXXed9u/fX+cyffv2VUxMjM/jxhtvtLJMmGjMGHPbYycVGrd8foHW2aqVNXUAcAdLw8vQoUO1fv16LViwQO+//76WLVum0aNH17vcqFGjtHPnTu/jwQcftLJMmMjqnWW09bzcc4/dFTiTW0IZAGtYdrbRhg0bNH/+fH355Zc655xzJElPPPGELrnkEj388MNqVcefTk2aNFFqaqpVpcFFon0nZeeZOjNm2LduAKiLZT0v+fn5SkpK8gYXScrOzlZsbKxWrFhR57KzZs1SixYt1KVLF+Xm5urnOs7VLC8vV1lZmc8DkSvael7sMmeONGKE3VUAQM0s63kpLi5Wy5YtfVd2wglq3ry5iouLa13u2muvVdu2bdWqVSutXbtWt99+uwoLCzV79uwa58/Ly9OUKVNMrR3BM7unJNp7XkLllrDH9wwgEAH3vEycOLHagNqqj40bNwZd0OjRo5WTk6OuXbtq6NCheumllzRnzhxt3ry5xvlzc3NVWlrqfWzbti3odcP53LIzNkuw2ztokLR8efDrPT5MECwAOE3APS/jx4/XiHr6k9u3b6/U1FTt2rXL5/XDhw9rz549AY1nyczMlCRt2rRJp512WrX34+PjFc8lPB2DnhdnmDPH829BQehtOTEw9uxpdwUA7BRweElOTlZycnK982VlZWnv3r1avXq1ev7vN82iRYtUWVnpDST+KPjfb9+0tLRAS0UEcuKO1ErBbG/z5ubX4STvvCOdcordVQCwk2UDds844wz1799fo0aN0sqVK7V8+XLddNNNuvrqq71nGm3fvl0ZGRlauXKlJGnz5s269957tXr1an3//fd69913NWzYMJ1//vk666yzrCoVDmZlz0t6unVtV3XSSeFb1/EiMexddpndFQCwm6XXeZk1a5YyMjLUr18/XXLJJerTp4+effZZ7/uHDh1SYWGh92yiuLg4ffLJJ7r44ouVkZGh8ePHa/DgwXrvvfesLBMmctN1XsJ5SMpt6wr3mBcODwIIhKV3lW7evLleeeWVWt8/9dRTZRy3N0pPT9fSpUutLAkuE+07tUjsOQGAUHFvI5jK7LCRk+P7nJ15YMz4vOLiQm8DAMxEeEHQeve2fh3Dh1vXthlBa/Nm6cQTQ2+nNsGED7MDZIMG0uLF5rYJAKEgvCBo4TikE1vlJ/TXv7Z+nYFo317av1/67ju7KzFX1e+2b1/p6qttKQUAqiG8wFRWB5qHHrK2/WBVDVlO4ZbDbNE+tglAYBz6KxeomZnXMAnnDvOJJ4JbzgmHjQDAaQgvgAlqCxkffyy9/ro0dGh46wlVo0Z2VwAAtbP0VGn4b9Agae5cu6sITE1/4fNXv69+/ew9pBTsYaN+/cytAwDMRM+LQ/Tvb3cFCEWzZua1dcEFnn/Hj7dvzEq4AxehF0AgCC9hds890oUXVn89Un55B7Mdo0ebX4c/zPzMExOlF16Qzjgj9Lbmz5e++EJ68MHglo+Un6WaDBtmdwUAnIDwEmYDB0qLFlV/3Wk7nOefD9+6ArhPpyTn7sBGjpS++ca/ec88s/b3GjXyfCaxsaH3vFRdPiMjtPbsNHy4NHWq3VUAcALCi0M0bmx3Be7x9NNS06Z2VxGahQvtWa9bTp2uyfPPR/4dswH4h/ASZrX1sMTGShs2SLfeGt56QmHXgN0mTTwDnI9KSgquHTt7u6wMEaFuV7du5tQBAFYhvDhIRoY0dqzdVTjHq6/6N1+DBtbWYSezDxv545RTQltnMJx22BSAsxFewqy2ncnRX95u7taXzNsJLVsmDRli/XqsFmids2YFvo5t2wJfxo3c8p0DsB7XeQmzaO+Sb9FC+vHH+uc77zzra3HSzvD226Xf/EbKzvZ/mXnzpNatq/eU1LVdbg7HTr0FA4Dw49eBSe6+W/rznz07oLpE0iGOYHb+wY5PCVWXLqG30aFD6G3U5qyzpIsvrr6DritsDBjgWQ4Aog3hxSQjRkj/+IfUsmVo7VjRG9Cnj/lt1qa++mt6Pxy9AV9/HdryDzwQWK9IfcLVA+LmnhYAqA3hxWSnnhrcclYewrj/fql7d+vaP56TDsXUJ5BaJ0ywZ9uO76lKTPRvmbou+udPmLEj8Ljp5waA/QgvJjn6y/fOO0Nrx4odR2ysdM45obWRkuL/vL161f5eTIxvLQ0bBl/TUZHQu1DbzvuGGzyBuFEj6cMP/Wtr4kTTyvIxcqQ17QJAoAgvJmvaVHr5Zbur8GXGX7W33eZfu/4cNvrVr/yfv652wi0uzrq2a9ueRo2k//xHKi6WsrKO9b6kpdXe1vEXPDQz2F10kfTii+a1BwDBIrw4hNO6zavW429QOcFF568F+pmH2qtW1YwZnn9btPC96F5VDRseCy1ffin9/e/S8uXBrTOUMBMT47k1w/F3nK4rRAGAVQgvQRo3zve508KHHTp3ljp1srsK6yQnm9ve8OGeMLJhg6eHxR8dO0q5uVK7dubWEqwWLcxph/8/AAJBeAlSXTfWC4VV4zfCsXP4/PPgzjZyioQEz79mh5TaHB3/Y1YAqIkVP0+RMMYIgLsRXiwQrb/cw3nI6Pzzj01fcYU5bd53n/TJJ54xJla4/37Pv+ec4+zDLYEETCeHUQCRy0UjFJwt1F/iVu4ErGo7mHabNTNn3SNGSGvWSLt3Sw89JD33XOBtVK3/hBN8x3OY4fh1TJjgubDc6afbt9OP1mANILIQXmAaf3bIZu20GzSQnnzSnLaOsnrHHhMT/iviElYARCIOGwEISG7usekpU8xpk8NPAAJBz4tJjv/lG8pfu/ylHD7RuMM04wq7/fpJc+dKhw9Ll19uSlkAEBDCi0NE4470KAKbdaz4bGNiCC0A7MVhI5c4/uyaQIV7wK5bgthFF9ldAQAgGIQXk1i9wz7rLGn1amvXESq3hJaj7rvP9zk9QPZx288OAHsRXiwQzE7w6C/voxdKq0nTpsHVc3z7/jLjholOV9dnHSmqXrmXgAYgEhBeHCY5WbrjDikjw/f1cP9leuWV4V0frHH22VJmpufO4q++anc1AGAOwosD3Xef5343DRr4vh7OABMf7/v8N7+pPg9d/c4XE+O5bUNxsXT11eFff9u24V8ngMhHeDGJWadKO8kbb0hnnCE984zUvbv0wgt1z+9vmImUz8ctYmOP3a8pXJ99796eWyC8+2541gcgulgWXu677z717t1bTZo0UVJSkl/LGIahSZMmKS0tTY0bN1Z2dra+/fZbq0p0lJp2/MHsaP75T2nVqvrb9seVV0rffCONHu15PnJkcO3Uhd6byLR8ubRtm/9XFObnAEAgLAsvFRUVuvLKKzVmzBi/l3nwwQf1j3/8Q9OnT9eKFSt04oknKicnRwcPHrSqzJBccMGxaavvROzvL/frr5d69rS2lkhFj5C5qh72BACzWHaRuin/u274zJkz/ZrfMAw99thjuuuuu3T5/66A9dJLLyklJUVz587V1XYcsK/H6697ejr69as+RgTu06qV3RVYz5+AduqplpcBACFxzBV2t2zZouLiYmVnZ3tfS0xMVGZmpvLz82sNL+Xl5SovL/c+Lysrs7zWo1JSpLvuqv66WX/BV23HaV3rTqsnVNHWU3DiidKBA57ppCTPqeNxcdWvfwMATuOYAbvFxcWSpJSUFJ/XU1JSvO/VJC8vT4mJid5Henq6pXVapb4gEGhQOC4DqkOHuuf9+98Da7s2NdV4yin1H8bicI09+vWTxoyRfv1raeVK6bvvpMJCT5CxU/v20rPP2lsDAGcLKLxMnDhRMTExdT42btxoVa01ys3NVWlpqfexbdu2sK7fSfr1Ozb98sueu//Ony81a1Z3+DntNHPrOH5dp5ziOdsFzhMTIz31lPTZZ1LHjp6eJ7u+q+N/Zk48URo1yp46ALhDQIeNxo8frxEjRtQ5T/v27YMqJDU1VZJUUlKitLQ07+slJSXq3r17rcvFx8cr3oUDTgYPlt5+27r2U1LM61GJRBMmeP5t0kT6+WfPdJVOv4j08MPHLkB4++321gIAwQoovCQnJyvZotNq2rVrp9TUVC1cuNAbVsrKyrRixYqAzlhyAn8Og7zxhu8Yi2BPlT7hBOnwYc/02Wf7V59Zghnz4pRxMkfz8dKl0tChUp8+nivRRrorrpBmz/aEtqwsu6sBgOBYNmC3qKhIe/bsUVFRkY4cOaKCggJJUocOHdT0fzfpycjIUF5enn73u98pJiZGt9xyi/72t7+pY8eOateune6++261atVKgwYNsqpM2wTaPR8TU/OO/8EHpTlzPPcimjzZnNqCZVUwGTtWmjZN+tvfzG/7nHM84zyiRWys9Lvf2V1F3RgDBaA+loWXSZMm6cUXX/Q+79GjhyRp8eLF6tu3rySpsLBQpaWl3nkmTJigAwcOaPTo0dq7d6/69Omj+fPnq1HVu8vBq1kzadkyu6uw1pNPeoKL3QNJYR2n9MgBcAfLwsvMmTPrvcaLUeVPrJiYGN1zzz265557rCorLPjL0XxmBJeXX5b+8AepcWOpnqFbCMHxZ7qFolkz6aefzGkLQGThPBCHqOkvz3vvPTZ91VX+L4eaXXuttGSJtH69tb04L7/s2fFG44DYyy+X/LwuZb0mTjSnHQCRxzEXqUN1t97q6SVo1cozuHLzZmvWE2xPkduCU0yM7y0drDJ0qHTNNdF5ivjcuXZXACAaEF4crFEjafz4Y89DCQvhCBpuCzNWisbgYhYOuwKoD79iLeDvPXJuvfXY9PnnW1MLgvOrXx2bDvcp6NHIrLuqA4gOhBcL5OR4LkJXnylTpOefl778UmrePLh10dthvcaN7a4AAHA8wosFYmKkt96q/xTmJk2kP/3Jc60RN/InOPnz17MT/8I+PkwGGywBANYgvFgoWntFImG7n37aEy5PPNFznRkAgHMQXoKUmBj+ddYUCpwUFJxUS6jatZN27PA82rSxu5rId/xlAR591L46ALgDZxsFyemXWEfo7Aio0Soz03MNnvJy6aKLPK858XAiAGcgvATp+JsqAghdOK7BAyAycNgIQR8W8fcwEX9BW+/CCz3/clo3gGhAz4uLhDLmpab5zj5bOvdcz9V7g9GkSXC1wHxvvy3NmyddfLHdlQCA9QgvUeqMM6TVq0Nro0cPafZsc+pBaJo189yWIJLQYwegNhw2QtDoaQEA2IHwgqARXgAAdiC8hNGnn4a2fMOG1V8LNkAQPAAAbkV4CaM+fUJbvnVrc+qwCjfXg5m4pxSA2hBeYLpAe3Uuu8yaOuBuo0dLycmen6ePP7a7GgBOwtlGkOS5HP6WLZ7pHj3Cu+7U1PCuD+7QpIn03XfSnj3cogGAL3peXM6ssSvp6eFZN2NtEIimTQkuAKojvESJqqGhvuf+GjzY82+LFsEtDwBAoDhsZKFo6GV44QXPmJW+faNjewEA9iO8uFxKir3rT0iQhg2ztwYAQHThsJGLXXGF9JvfhHedL710bPq668K7bgAAJHpeXO3tt8O/zqFDPWcHpadLLVuGf/0AANDzEoBXX5Wys6UlS+yuxD6xsdJFF0kZGXZXAgCIVvS8BODqqz2PSBBpg2tPOknat8/uKgAA4UDPi8tceaXn37//3d46nGbePLsrAACEC+HFZV5/Xdq+XcrNDWy5+npaTj/92HSnToHXdbyePWuetlLv3uFZDwDAfhw2cpmYGKlVK/PbfeABadky6cgR6bHHQmvrb3+T1qzx3JQxL88zTggAALMQXiBJatZM2rDBEzhiQ+yPS0iQPv3UnLoAAKiKw0bwiokJPbgAtbnlFrsrABAp2FVFqUg72wjO16iR3RUAiBSEFwAA4CqEFwAA4CqWhZf77rtPvXv3VpMmTZSUlOTXMiNGjFBMTIzPo3///laVCCCMOFQJwCyWnW1UUVGhK6+8UllZWXr++ef9Xq5///6aMWOG93l8fLwV5UWdzp3trgAAAHNYFl6mTJkiSZo5c2ZAy8XHxys1NdWCiqLbqFHS/fdLRUWe59Om2VsPAADBctyYlyVLlqhly5bq1KmTxowZo927d9tdUkQ44QRp61bpiy8812Dp0yd86zaM8K3LalZcIBAAEBhHXaSuf//+uuKKK9SuXTtt3rxZd9xxhwYMGKD8/Hw1aNCgxmXKy8tVXl7ufV5WVhaucl0pM9PuCtxtzBjp7rvtrgIAoltAPS8TJ06sNqC26mPjxo1BF3P11VfrsssuU9euXTVo0CC9//77+vLLL7VkyZJal8nLy1NiYqL3kZ6eHvT6ETkSE+2uAABglYB6XsaPH68RI0bUOU/79u1DqadaWy1atNCmTZvUr1+/GufJzc3VuHHjvM/LysoIMFGo6pksw4ZJTzxhTy0AAGsFFF6Sk5OVnJxsVS3V/Pe//9Xu3buVlpZW6zzx8fGckYRq4cWq2xxE0vgdAHArywbsFhUVqaCgQEVFRTpy5IgKCgpUUFCg/fv3e+fJyMjQnDlzJEn79+/Xbbfdpi+++ELff/+9Fi5cqMsvv1wdOnRQTk6OVWUizLjWBwAgVJYN2J00aZJefPFF7/MePXpIkhYvXqy+fftKkgoLC1VaWipJatCggdauXasXX3xRe/fuVatWrXTxxRfr3nvvdW3Pyokn2l0BAACRx7LwMnPmzHqv8WIc1wffuHFjffTRR1aVY4tu3aSLLpKWLZNee83uatzjr3+1uwIAgJM56lTpSBMTI330kXTggNS0qd3VuMfkyXZXACtwyBCAWRx3kbpIExNDcAEAwEyEF0SMDh2OTbdubV8dAABrEV7gCFde6fn3+uuDb+PDD6Vrr5VeeEFq2dKcugAAzkN4gSO88oq0erX0zDPBt9GhgzRrljRypHl1oX6/+Y3nXz53AOHCgF04wgknSGefbXcVCMY770j5+dL559tdCYBoQXgBEJKmTT2XBACAcOGwEQAAcBXCCwAAcBXCCyLSwIHHpu+917x2uTEjANiPMS+ISC1aSF99JW3YIA0ebHc1AAAzEV4QsXr08DzgDBkZdlcAIFJw2AhAWAwdKl11ld1VAIgEhBcAYREbK73+urR0qd2VAHA7wgsAAHAVwgsAAHAVwgsAAHAVwgsAAHAVwgsAAHAVwgssd8YZx6a51geaNbO7AgBuR3iB5R591BNgOneWHnjA7mpgt65dpWuvlZKTpYUL7a4GgBtxhV1YLjlZWr/eMx0TY28toWrQwO4KIsOsWVJlpefaLwAQKH51ICxiYtwfXCRp7FjpxBM90+++a28tbkdwARAsfn0g7Hr1OjZ9+eX21RGMpCRp0yapoEC69FK7qwGA6MRhI4Td8OHS8uVSSYn05JN2VxO41FTPAwBgD8ILwi42VnruOburAAC4FYeNAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAqxBeAACAq1gWXr7//ntdd911ateunRo3bqzTTjtNkydPVkVFRZ3LHTx4UGPHjtXJJ5+spk2bavDgwSopKbGqTAAA4DKWhZeNGzeqsrJSzzzzjNavX6+pU6dq+vTpuuOOO+pc7i9/+Yvee+89vfnmm1q6dKl27NihK664wqoyAQCAy8QYhmGEa2UPPfSQnn76aX333Xc1vl9aWqrk5GS98sor+v3vfy/JE4LOOOMM5efn69xzz613HWVlZUpMTFRpaakSEhJMrR8AAFgjkP13WO8qXVpaqubNm9f6/urVq3Xo0CFlZ2d7X8vIyFCbNm1qDS/l5eUqLy/3WYfk+RAAAIA7HN1v+9OnErbwsmnTJj3xxBN6+OGHa52nuLhYcXFxSkpK8nk9JSVFxcXFNS6Tl5enKVOmVHs9PT09pHoBAED47du3T4mJiXXOE3B4mThxoh544IE659mwYYMyMjK8z7dv367+/fvryiuv1KhRowJdZZ1yc3M1btw47/PKykrt2bNHJ598smJiYkxdV1lZmdLT07Vt27aoOSQVjdssRed2s83Rsc1SdG53NG6z5K7tNgxD+/btU6tWreqdN+DwMn78eI0YMaLOedq3b++d3rFjhy688EL17t1bzz77bJ3LpaamqqKiQnv37vXpfSkpKVFqamqNy8THxys+Pt7ntao9N2ZLSEhw/A+B2aJxm6Xo3G62OXpE43ZH4zZL7tnu+npcjgo4vCQnJys5Odmvebdv364LL7xQPXv21IwZMxQbW/fJTT179lTDhg21cOFCDR48WJJUWFiooqIiZWVlBVoqAACIQJadKr19+3b17dtXbdq00cMPP6wffvhBxcXFPmNXtm/froyMDK1cuVKSJ3Fdd911GjdunBYvXqzVq1dr5MiRysrK8utMIwAAEPksG7C7YMECbdq0SZs2bdIpp5zi897RkcSHDh1SYWGhfv75Z+97U6dOVWxsrAYPHqzy8nLl5OToqaeesqrMgMTHx2vy5MnVDlNFsmjcZik6t5ttjh7RuN3RuM1S5G53WK/zAgAAECrubQQAAFyF8AIAAFyF8AIAAFyF8AIAAFyF8OKnadOm6dRTT1WjRo2UmZnpPb3baf76178qJibG53H81Y4PHjyosWPH6uSTT1bTpk01ePBglZSU+LRRVFSkgQMHqkmTJmrZsqVuu+02HT582GeeJUuW6Oyzz1Z8fLw6dOigmTNnVqvFys9s2bJluvTSS9WqVSvFxMRo7ty5Pu8bhqFJkyYpLS1NjRs3VnZ2tr799lufefbs2aOhQ4cqISFBSUlJuu6667R//36fedauXavzzjtPjRo1Unp6uh588MFqtbz55pvKyMhQo0aN1LVrV82bNy/gWszY5hEjRlT77vv37+/qbc7Ly9OvfvUrnXTSSWrZsqUGDRqkwsJCn3mc9DPtTy1mbXffvn2rfd833nija7f76aef1llnneW9mFpWVpY+/PDDgNbhpu31Z5sj7Ts2lYF6vfbaa0ZcXJzxwgsvGOvXrzdGjRplJCUlGSUlJXaXVs3kyZONzp07Gzt37vQ+fvjhB+/7N954o5Genm4sXLjQWLVqlXHuuecavXv39r5/+PBho0uXLkZ2draxZs0aY968eUaLFi2M3Nxc7zzfffed0aRJE2PcuHHGN998YzzxxBNGgwYNjPnz53vnsfozmzdvnnHnnXcas2fPNiQZc+bM8Xn//vvvNxITE425c+ca//73v43LLrvMaNeunfHLL7945+nfv7/RrVs344svvjA+/fRTo0OHDsY111zjfb+0tNRISUkxhg4daqxbt8549dVXjcaNGxvPPPOMd57ly5cbDRo0MB588EHjm2++Me666y6jYcOGxtdffx1QLWZs8/Dhw43+/fv7fPd79uzxmcdt25yTk2PMmDHDWLdunVFQUGBccsklRps2bYz9+/d753HSz3R9tZi53RdccIExatQon++7tLTUtdv97rvvGh988IHxn//8xygsLDTuuOMOo2HDhsa6dev8WofbttefbY6079hMhBc/9OrVyxg7dqz3+ZEjR4xWrVoZeXl5NlZVs8mTJxvdunWr8b29e/caDRs2NN58803vaxs2bDAkGfn5+YZheHaQsbGxRnFxsXeep59+2khISDDKy8sNwzCMCRMmGJ07d/Zpe8iQIUZOTo73eTg/s6o78srKSiM1NdV46KGHvK/t3bvXiI+PN1599VXDMAzjm2++MSQZX375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",
- "text/plain": [
- "<Figure size 640x480 with 1 Axes>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#plt.scatter(frame, all_cubic_inter, color = 'red', linewidths = 0.3, label = 'cubic')\n",
- "#plt.scatter(frame, vel, color = 'green', linewidth = 1, label = 'valid')\n",
- "plt.plot(frame, all_cubic_inter, color = 'blue', linewidth = 2, label = 'all_interpolation')\n",
- "plt.plot(frame, val_cubic_inter, color = 'red', linewidth = 1, label = 'valid_interpolation')\n",
- "#plt.plot(frame, vel, color = 'black', linewidth = 1, label = 'velocity')\n",
- "plt.axhline(y=0, color='black', linewidth=1)\n",
- "plt.legend(['all', 'vaild'], loc='upper left')\n",
- "#plt.plot(frame, vaild_dot, 'o', color='blue')\n",
- "plt.xlim(0, 1800)\n",
- "#plt.ylim(-0.0000000003, 0.000000003)\n",
- "plt.title('Interpolation of acceleration data')\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 129,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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djtGjx6NlStX4r333kNOTg62b9+Ov/3tb873OFpJ/vCHP9TYEtGuXTuXryu3xDRETa1IQohqz1U9pqPuN954Az179nS7n8aNGwMAHnroIQwePBgrV67E999/jzfeeAOvvfYaVqxY4dLXyJt6iMgYGICIDO6ee+7BP//5T2zbtg2DBg2q9vrWrVtx+vRp/O53v3N5fty4cVi6dClSU1Nx+PBhCCGct78AOIfM+/n5ITk5WdaalZzduG3btgCAkJAQj+qOjo7G008/jaeffhoXLlxA79698corr1TrbF2X+Ph47N+/HxUVFS6tQEeOHHG+7k54eDgCAwOdLVeVHT161KsaiMhzvAVGZHCzZs1CYGAgfve73+Hy5csur125cgVPPvkkgoKCMGvWLJfXkpOT0axZMyxbtgzLli1D//79XW4nRUREYOjQoVi0aBHOnz9f7bgXL16sd82O+YFyc3PrvY+a9OnTB23btsX8+fNRUFBQ7XVH3eXl5c5bYQ4RERGIiYlBcXGx18e96667kJ2d7XJbsaysDO+++y4aN25cbcSdg6+vL1JSUrBq1SpkZmY6nz98+DDWrVvndR1E5Bm2ABEZXPv27bF06VJMmDAB3bp1w+TJk5GQkIDTp0/jX//6Fy5duoT//Oc/zpYRBz8/P4wZMwafffYZCgsLMX/+/Gr7XrBgAQYNGoRu3bphypQpaNOmDXJycpCWloZff/0V+/btq1fNbdu2RVhYGBYuXIgmTZogODgYAwYMkKUPkY+PDz788EOMHDkSXbp0waRJk9CyZUucO3cOGzduREhICFavXo1r166hVatWeOCBB9CjRw80btwYP/zwA3bt2oU333zT6+M+8cQTWLRoESZOnIj09HS0bt0ay5cvx/bt2/HOO+/U2lH9xRdfxNq1azF48GA8/fTTzuDUpUuXOm9vElE9aTsIjYjksn//fjF+/HgRHR0t/Pz8RFRUlBg/frw4cOBAje9Zv369ACBsNps4e/as221OnDghHnvsMREVFSX8/PxEy5YtxT333COWL1/u3MYxDH7Xrl0e1/vVV1+Jzp07i0aNGrkMiR8yZIjo0qVLte0ff/xxER8f7/zaMQz+iy++cLv/vXv3ijFjxojmzZsLu90u4uPjxUMPPSRSU1OFENJQ9lmzZokePXqIJk2aiODgYNGjRw/x3nvvuezH03qEECIn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MouiIi5+Wh+NGwOVficBcCoBIrIExYbLzJkzB0uXLnV+3eu/HSo3btyIoUOHAgCOHj2KvLw85zZ//OMfUVhYiCeeeAK5ubkYNGgQ1q5di4CAAKXKJLNISwMSE7WuwngcQ+G7dJG+diwk681iqUREBmQTwpMFgYwjPz8foaGhyMvLQwgXcDSf995z38/n3XeBqVPZb8VbJ09KEx46lrtYt05a+6tzZ23rIiLLUfvzm58WZA7stFs/rVoBlUdOHj7M8ENElsBPDDK+69e5XlV9+ftL66cB7EdFRJbCAETG9+OPQFKS1lUY33ffASNGaF0FEZEqGIDI+H7+mbdtGsLR4fn0aSAhQdNSiIjUwgBExicERy01hBDAtWtAkyZaV0JEpBoGIDK2ggIgOFjrKozNbge+/BK45x6tKyEiUg0DEBnbtm3AoEFaV2FscXFAejrw3+VoiIisgAGIjO3oUaBDB62rMLZ27YD+/bWugohIVYrNBE2kGvb/aZi2baUHEZGFsAWIjCsvD+Bs30REVA8MQGRcW7cCgwdrXQURERkQAxAZ14kTvHVDRET1wgBExsb+P0REVA8MQGRMV64AYWFaV0FERAbFAETGtHUrMGSI1lUQEZFBMQCRMZ05A7RurXUVRERkUAxAREREZDkMQGQ8ly4BzZppXQURERkYAxAZz+bN7P9DREQNwgBExvPrr0BsrNZVEBGRgTEAERERkeUwAJGx5OQAERFaV0FERAbHAETGsmULMHSo1lUQEZHBMQCRsbRoAURHa10FEREZHAMQGcvvfqd1BUREZAIMQGQsyclaV0BERCbAAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWo1gAeuWVV5CUlISgoCCEhYV59J6JEyfCZrO5PEaMGKFUiURERGRRjZTacUlJCR588EEkJibiX//6l8fvGzFiBBYvXuz82m63K1EeERERWZhiAejFF18EACxZssSr99ntdkRFRSlQEREREZFEd32ANm3ahIiICHTo0AFPPfUULl++XOv2xcXFyM/Pd3kQERER1UZXAWjEiBH4+OOPkZqaitdeew2bN2/GyJEjUV5eXuN75s2bh9DQUOcjNjZWxYqJiIjIiLwKQM8//3y1TspVH0eOHKl3MQ8//DDuvfdedOvWDaNHj8aaNWuwa9cubNq0qcb3zJ49G3l5ec7H2bNn6318IiIisgav+gDNnDkTEydOrHWbNm3aNKSeavtq0aIFjh8/jmHDhrndxm63s6M0ERERecWrABQeHo7w8HClaqnm119/xeXLlxEdHa3aMYmIiMj8FOsDlJmZiYyMDGRmZqK8vBwZGRnIyMhAQUGBc5uOHTti5cqVAICCggLMmjULP/30E06fPo3U1FTcd999aNeuHVJSUpQqk4iIiCxIsWHwc+bMwdKlS51f9+rVCwCwceNGDB06FABw9OhR5OXlAQB8fX2xf/9+LF26FLm5uYiJicHw4cPx8ssv8xYXERERycomhBBaFyGn/Px8hIaGIi8vDyEhIVqXQ0RERB5Q+/NbV8PgiYiIiNTAAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWwwBERERElsMARERERJbDAERERESWo1gAOn36NCZPnoyEhAQEBgaibdu2mDt3LkpKSmp9X1FREaZOnYrmzZujcePGGDt2LHJycpQqk4iIiCxIsQB05MgRVFRUYNGiRTh06BDefvttLFy4EH/6059qfd+zzz6L1atX44svvsDmzZuRlZWFMWPGKFUmERERWZBNCCHUOtgbb7yB999/HydPnnT7el5eHsLDw/Hpp5/igQceACAFqU6dOiEtLQ233nprncfIz89HaGgo8vLyEBISImv9REREpAy1P78bKX6ESvLy8tCsWbMaX09PT0dpaSmSk5Odz3Xs2BFxcXE1BqDi4mIUFxe7HAOQvpFERERkDI7PbbXaZVQLQMePH8e7776L+fPn17hNdnY2/P39ERYW5vJ8ZGQksrOz3b5n3rx5ePHFF6s9Hxsb26B6iYiISH2XL19GaGio4sfxOgA9//zzeO2112rd5vDhw+jYsaPz63PnzmHEiBF48MEH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",
- "text/plain": [
- "<Figure size 640x480 with 1 Axes>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "overthres_x = []\n",
- "overthres_y = []\n",
- "thres = 0.45\n",
- "for x in range(0, len(cubic_linear)):\n",
- " if cubic_linear[x] < -thres or cubic_linear[x] > thres:\n",
- " overthres_x.append(frame[x])\n",
- " overthres_y.append(cubic_linear[x])\n",
- "plt.plot(overthres_x, overthres_y, color = 'red', linewidth = 0.3, label = 'cubic')\n",
- "plt.xlim(0, 1800)\n",
- "plt.title('Over threshold')\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 94,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[-0.08320773 0.02204927 -0.01489427 0.05539823 -0.00055759 0.0861925 ]\n"
- ]
- }
- ],
- "source": [
- "print(cubic_linear[183255:183261])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 113,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[3685, 3687], [3690, 3690], [3740, 3766], [3829, 3830], [4151, 4444], [4448, 4535], [4785, 5741], [5947, 5973], [5991, 6027], [6027, 6110]]\n",
- "approx time of surgery 204minutes\n",
- "28\n"
- ]
- }
- ],
- "source": [
- "stroke = []\n",
- "threshold = 0.3\n",
- "s_start = 0\n",
- "s_end = 0\n",
- "for i in range(1, len(cubic_linear)-3):\n",
- " if i % 3 == 0:\n",
- " if cubic_linear[i] == 0 and cubic_linear[i+3] == 0:\n",
- " continue\n",
- " elif cubic_linear[i] < -threshold and cubic_linear[i+3] > threshold:\n",
- " s_start = i\n",
- " elif cubic_linear[i] > threshold and cubic_linear[i+3] < -threshold:\n",
- " if s_start != 0:\n",
- " s_end = i\n",
- " if s_start != 0 and s_end != 0:\n",
- " stroke.append([s_start//30, s_end//30])\n",
- " s_start = 0\n",
- " s_end = 0\n",
- "print(stroke[-10:])\n",
- "print(\"approx time of surgery \" + str(len(cubic_linear)//1800) + \"minutes\")\n",
- "print(len(stroke))\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 117,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[46, 47], [67, 70], [71, 88], [141, 165], [169, 171], [202, 203], [204, 205], [206, 207], [212, 220], [221, 222]]\n",
- "approx time of surgery 204minutes\n",
- "3078\n"
- ]
- }
- ],
- "source": [
- "stroke = []\n",
- "threshold = 0.1\n",
- "s_start = 0\n",
- "s_end = 0\n",
- "for i in range(1, len(cubic_linear)-1):\n",
- " if cubic_linear[i] == 0 and cubic_linear[i+1] == 0:\n",
- " continue\n",
- " elif cubic_linear[i] < -threshold and cubic_linear[i+1] > threshold:\n",
- " s_start = i\n",
- " elif cubic_linear[i] > threshold and cubic_linear[i+1] < -threshold:\n",
- " if s_start != 0:\n",
- " s_end = i\n",
- " if s_start != 0 and s_end != 0:\n",
- " stroke.append([s_start, s_end])\n",
- " s_start = 0\n",
- " s_end = 0\n",
- "print(stroke[:10])\n",
- "print(\"approx time of surgery \" + str(len(cubic_linear)//1800) + \"minutes\")\n",
- "print(len(stroke))\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 83,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[ 3.39519327e-313 -8.48798316e-314 9.54898106e-314 -2.65249474e-315\n",
- " 6.63123685e-315 -1.98937105e-315 9.11795066e-316 8.28904606e-317\n",
- " 1.03613076e-317 7.77098068e-318 3.23790862e-318 -1.69990202e-318]\n"
- ]
- }
- ],
- "source": [
- "print(cubic_linear[184088:184100])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "'''\n",
- " #interoperate 함수로 보간법을 적용하여 linear(선형보정) quadratic(부드러운 보정) 두가지 방법으로 만든다\n",
- " fl = interp1d(x,y,kind = 'linear')\n",
- " fq = interp1d(x,y,kind = 'quadratic')\n",
- " '''"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "'''\n",
- "https://sdc-james.gitbook.io/onebook/4.-numpy-and-scipy/4.3-scipy/4.3.1.-interpolation\n",
- "https://numpy.org/doc/stable/reference/generated/numpy.interp.html\n",
- "https://numpy.org/doc/stable/reference/generated/numpy.diff.html\n",
- "https://otexts.com/fppkr/stationarity.html\n",
- "'''"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "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.8.0"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
|