{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "537cb66c", "metadata": {}, "source": [ "## Phase-Amplitude Coupling\n", "\n", "The comodulogram is a matrix representing the strength of the coupling between the phase of driver frequencies and the amplitude of signal frequencies. The 'pac' method allows to extract pairs of driver/signal frequencies that exhibit higher scores of coupling" ] }, { "cell_type": "code", "execution_count": 1, "id": "0225c8db", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[3.8, 27.0], [6.0, 33.0], [3.8, 28.0], [6.5, 36.0], [5.2, 32.0], [6.5, 35.0], [5.4, 29.0], [3.2, 43.0], [6.300000000000001, 28.0], [5.2, 33.0], [5.4, 8.0], [3.8, 29.0], [5.4, 9.0], [5.4, 46.0], [5.4, 45.0], [5.4, 44.0], [5.4, 10.0], [5.4, 11.0], [3.0, 36.0], [5.4, 12.0], [3.1, 40.0], [3.1, 29.0], [6.4, 30.0], [3.6, 28.0], [3.5, 44.0], [3.5, 45.0], [6.4, 29.0], [6.300000000000001, 29.0], [3.0, 27.0], [6.5, 34.0]]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEiCAYAAAAMBi6QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABPiUlEQVR4nO3de1RU5foH8O+egWGQmyFyUwQ1EzWvkIhlmGF4SSXNzMMRJNNViTcyFStR09B+aqiRpClmRXos8ZCmnpzylpiKYdrxngqhgJaAoDDDzP794WFyZL97Zo8zDAzPZ629lrz79uyZcd7Z+3kvHM/zPAghhBABMlsHQAghpOGiSoIQQggTVRKEEEKYqJIghBDCRJUEIYQQJqokCCGEMFElQQghhIkqCUIIIUxUSRBCCGGiSoIQQgiTTSuJ+fPng+M4gyU4OFi/vqqqCpMnT0aLFi3g6uqKUaNGobi42IYRE0JI02LzO4kuXbrg+vXr+uXQoUP6dTNmzMC3336LrVu3Yv/+/bh27RpGjhxpw2gJIaRpsXkl4eDgAF9fX/3i5eUFACgrK8P69euxYsUKDBgwACEhIcjIyMDhw4dx5MgRG0dNCCEPJy0tDUFBQVAqlQgLC8PRo0dN3nfz5s3gOA7R0dEG5RUVFUhISEDr1q3h7OyMzp07Iz09/aHitHklceHCBfj7+6Ndu3aIiYlBfn4+ACA3NxcajQaRkZH6bYODg9GmTRvk5OTYKlxCCHloW7ZsQWJiIpKTk3HixAl0794dUVFRKCkpMbrvlStXMHPmTPTr16/OusTEROzevRtffPEFzpw5g+nTpyMhIQHZ2dlmx8rZcqjwXbt2oaKiAh07dsT169exYMECFBYW4vTp0/j2228RHx+P6upqg3169+6NZ555BkuXLhU8ZnV1tcE+Op0Of/31F1q0aAGO46x6PYSQhoPnedy+fRv+/v6Qycz7PVxVVQW1Wm3StgqFAkql0qRtw8LC8MQTT+Cjjz4CcO97KiAgAFOmTMGcOXOY+2m1Wjz99NN45ZVXcPDgQZSWlmL79u369Y8//jjGjBmDd999V18WEhKCwYMHY9GiRSbF9iAHs/aykMGDB+v/3a1bN4SFhSEwMBD/+te/4OzsbNYxU1JSsGDBAkuFSAhp5AoKCtC6dWvJ+1VVVaFtoCuKSrQmbe/r64uTJ08aVBROTk5wcnIy2E6tViM3NxdJSUn6MplMhsjISKNPSRYuXAhvb29MmDABBw8erLO+b9++yM7OxiuvvAJ/f3/s27cP58+fx4cffmjSNQixaSXxoObNm+Oxxx7DxYsXMXDgQKjVapSWlqJ58+b6bYqLi+Hr68s8RlJSEhITE/V/l5WVoU2bNohoPhYOnMJgW/7uXcFjyDw82EE2M+2XQi1tcxfB8ru+zZj7uP56TbCcvyMcr+52hfD2Ouk3iZyj8EeCkwv/EuO1OuEDMc7Na0X+w/GMY0m82ZUpnZjreK3wseStfIR3qBL+Fal+VHh7x2Lh9wIAcPMvwWLm+1dTwz4Wg9zzEeFzlN8WLOecFILlskeaC5Zr/D2Z53b4q1L4HBV3BMu1t0oFy/kHnh6YqwYaHMJ3cHNzM2t/tVqNohItLh4PgLub+J1I+W0dHg0tgI+P4eciOTkZ8+fPNyi7efMmtFptnW19fHxw9uxZ5jkOHTqE9evXIy8vj7nN6tWrMWnSJLRu3RoODg6QyWRYt24dnn76adH4xTSoSqKiogKXLl3CuHHjEBISAkdHR6hUKowaNQoAcO7cOeTn5yM8PJx5DKGaGwAcOEXdSoIT/sKSyYT/49xbyf4CEsLJhbd3cGRXNg6Mc7Di1XGOjO3NqCQ4RiXBySXFBMa5eU7sPxujkoDESoJjv388J3wOOet9ZYSrcxB+/xzkGnZgjLjY75/0x6NyxmeXdQ6OEZOM9RlkXDcAOMiFKzVOxihnXjfrcyARX3ueh3vM7OrGwdVN/Bg63FtfUFAAd3d3fbnQd5E5bt++jXHjxmHdunX6xj1CVq9ejSNHjiA7OxuBgYE4cOAAJk+eDH9/f4P8rhQ2rSRmzpyJYcOGITAwENeuXUNycjLkcjnGjh0LDw8PTJgwAYmJifD09IS7uzumTJmC8PBw9OnTx5ZhE0KaEB10zJ8v928DAO7u7gaVhBAvLy/I5fI6fb7EnpJcunQJV65cwbBhw/4+p+7eOR0cHHDu3Dn4+/tj7ty5yMrKwtChQwHce4yfl5eHZcuWNc5K4o8//sDYsWPx559/omXLlnjqqadw5MgRtGzZEgDw4YcfQiaTYdSoUaiurkZUVBQ+/vhjywXASmY5sF8W3kH4FzUYv1Z0CuFjydQW+rVkaaxHVIzLbpDEkpSsx2MSj6V1En5BHMUejbEep1mS1EeMUhO6MpFf1LZsGCJ4bk7qTaggLc9Da+SRp7H191MoFAgJCYFKpdI3YdXpdFCpVEhISBDcJzg4GKdOnTIoe+edd3D79m2sXLkSAQEBqKqqgkajqZOkl8vl+grFHDatJDZv3iy6XqlUIi0tDWlpafUUESGEGNKBh85IbWNs/YMSExMRFxeH0NBQ9O7dG6mpqaisrER8fLx+m9jYWLRq1QopKSlQKpV4/PHHDY5Rm6utLVcoFIiIiMBbb70FZ2dnBAYGYv/+/di0aRNWrFghKb77NaicBCGENDQ10EEk06TfRooxY8bgxo0bmDdvHoqKitCjRw/s3r3bIJmdn58vuenu5s2bkZSUhJiYGPz1118IDAzE4sWL8dprr0k6zv2okiCEEBGWftxUKyEhgfl4CQD27dsnuv/GjRvrlPn6+iIjI0NyLGKokiCEEBE6sNvd3b+NvWralQQr0cZKTgPglcLN9lifEh0jwSk3J3EtljQUwkqUijZDtXNSk8eMz0iNM+M1tN0ABpbF+KzxYp9BqZ/PRkILHlojOQdj6xuzpl1JEEKIEVr+3mJsG3tFlQQhhIigx02EEEKYangOGl78UVqNkfWNGVUShBAiQgsOWohXAsbWN2ZNupLg5IzxiBiD3AGAjpG45hg9eWtcGD1zy4y1vCZmM6fnL2sfRrmaNeCbWOLajAEXbYZx3by8gfa4tiKqJAghhDDpeA46I4+TjK1vzKiSIIQQEXQnQQghhEkLGbRGZno2bVqixokqCUIIEcGb8LiJp8dNhBDSNKl5ORx58TsJNVUSdorVuokxpSMAaNyF18mrhG8477QUfomb/2Xa5OoG7LT1iNnq4/VgTNtaHihc3uIwuwVTQ2zbxJy1jdW6SWToDZ4xYilzj0bS2ksHDjojj5ukDhXemDTtSoIQQoygxDUhhBAmLS+D1sjjJnOGCm8sqJIghBAR9x43GeknQXcShBDSNOlMaAJLOQl7wHF1x7tnJOe0bk7Mw1T6CSeulbeEE9ePTjwrWP7X9NbMczTIBPVDTKRe7yRO+QiwE7Ic48vhv5M/Fiwf+lW05HNLJvb5kDpfhsRziD51ERuyoxHT8A7Q8Ow5Zu5tY5/XDjSlSoIQQsyg5TlojVQCxtY3ZlRJEEKICNN6XNPjJkIIaZJ0vAw6I62bdNS6iRBCmia6k2jCOAfhy6/yYSeuOcYvhgp/4cTW6W86CZb768qMRCd0cukJWUGiyU3xBJ1NMHsFM3r4iiR2mf+VJc6f0HH964Llj/LX2OeW+mvThg0YWIl8sfkkWD2uGzsdjOccGlGzDsmadCVBCCHGaHgHOPDiX5Ua+72RoEqCEELENPXOdPZ5f0gIIRZSOyyHsUWqtLQ0BAUFQalUIiwsDEePHjV5382bN4PjOERHRxuU8zyPefPmwc/PD87OzoiMjMSFCxckx3Y/qiQIIUREbeLa2CLFli1bkJiYiOTkZJw4cQLdu3dHVFQUSkpKjO575coVzJw5E/369auz7oMPPsCqVauQnp6On3/+GS4uLoiKikJVVZWk+O7XdB43cVzdRCBjSPCSXuzkbav9wkN8V/o6Cpa7lAj3xOa0ZjzEFBmmucFh9WAWSQDytpzei5UkZgwV3vzhfpw9HEs1YBA9h/Shwpk9rht5Qtsac1yvWLECEydORHx8PAAgPT0dO3fuxIYNGzBnzhzmflqtFjExMViwYAEOHjyI0tJS/Tqe55Gamop33nkHI0aMAABs2rQJPj4+2L59O15++WVJMdZq3O8eIYRYmc6Euwhj803cT61WIzc3F5GRkfoymUyGyMhI5OTkiO67cOFCeHt7Y8KECXXWXb58GUVFRQbH9fDwQFhYmNHjipF0J6HT6bB//34cPHgQV69exZ07d9CyZUv07NkTkZGRCAgIMDsQQghpiEzrTHdvfXl5uUG5k5MTnJwMm9TfvHkTWq0WPj4+BuU+Pj44e1Z4rDcAOHToENavX4+8vDzB9UVFRfrjPHjc2nXmMKn6u3v3LhYtWoSAgAAMGTIEu3btQmlpKeRyOS5evIjk5GS0bdsWQ4YMwZEjR8wOhhBCGhoNLzdpAYCAgAB4eHjol5SUFIvEcPv2bYwbNw7r1q2Dl5eXRY5pKpPuJB577DGEh4dj3bp1GDhwIBwd6z5/v3r1KjIzM/Hyyy/j7bffxsSJEy0eLCGE1DctjM88V5tOKygogLu7u778wbsIAPDy8oJcLkdxcbFBeXFxMXx9fQWPf+nSJVy5cgXDhg3Tl+n+NzKzg4MDzp07p9+3uLgYfn5+Bsft0aOHaPxiTKok/vOf/6BTJ+Gew7UCAwORlJSEmTNnIj8/3+yArIaT1Un48UrhntX+B9jzTzuWVQuWN2N1CmZ1xRTrfctK+jbEIcQtiZWQZfQQ51hJVHMS/Mwe18KNGBS37aSPLeu1Yn3WRJ498A4SU5yWGtbcyqQ8bnJ3dzeoJIQoFAqEhIRApVLpm7DqdDqoVCokJCQI7hMcHIxTp04ZlL3zzju4ffs2Vq5ciYCAADg6OsLX1xcqlUpfKZSXl+Pnn3/G668LjxBgCpMqCWMVxP0cHR3Rvn17swMihJCGxLTpS6VVkImJiYiLi0NoaCh69+6N1NRUVFZW6ls7AUBsbCxatWqFlJQUKJVKPP744wbHaN68OQAYlE+fPh2LFi1Chw4d0LZtW7z77rvw9/ev059CCslNYNu1a4eIiAikp6cb3ErdvHkTvXv3xu+//252MIQQ0tDwJvS45iX2uB4zZgxu3LiBefPmoaioCD169MDu3bsNks75+fmQSWw+PGvWLFRWVmLSpEkoLS3FU089hd27d0OpVEo6zv0kVxJXrlyBg4MD+vXrh+zsbP1zMK1Wi6tXr5odCCGENETWuJMAgISEBObjJQDYt2+f6P4bN26sU8ZxHBYuXIiFCxdKjodF8pVxHIfdu3ejdevWCAkJwbFjxywWDCGENDRSWjfZI8l3EjzPw9XVFdu2bUNSUhIiIiKwdu1aDBw40BrxWQwnl4F74NZN08JFcFvFn+wu7DJ1jWC5IyNpx+yhak6Pa4lDZv/d5kICZjLRhv0uWddnyZ7HjJ7VvKPwf355le2SrsyEvUVPwkjkiw3DzngN62XIc8HPgkxkbHjTWaPHdWMiuZK4v4VNSkoKunTpgokTJ2Ls2LEWDYwQQhoCnQk9qqX0uG5szLqTuN8///lPtG/fHi+88ILFgiKEkIZCy3NGJx0ytr4xk1z96XQ6eHt7G5SFh4fj5MmT+OGHH8wOZMmSJeA4DtOnT9eXVVVVYfLkyWjRogVcXV0xatSoOh1QCCHEmmofNxlb7JXF7pF8fHwQERFh1r7Hjh3DJ598gm7duhmUz5gxA99++y22bt2K/fv349q1axg5cqQlwiWEEJPw/+tMJ7bwZrRuaixMftzUs2dPk3r8njhxQlIAFRUViImJwbp167Bo0SJ9eVlZGdavX4/MzEwMGDAAAJCRkYFOnTrhyJEj6NOnj6TzEEKIOTQ8B85IJaCx4zsJkyuJ+3vs8TyPlJQUvPbaa/D09HyoACZPnoyhQ4ciMjLSoJLIzc2FRqMxGPY2ODgYbdq0QU5ODrOSqK6uRnX130Nn6EdllMsAmWFLlaJw4dZNrXeITPyhE27VIqsSbgXDGqqAExuWgzkkgh38WhFpkcTJhF9bXif8WnHM1jRmvE6M11znLPxfRK5mtG6yZEue+mjVxToWowWVWEtPnaMNWzdZkZRhOeyRyZVEcnKywd/Lly/HtGnT0K5dO7NPvnnzZpw4cUKwr0VRUREUCoW+63ktY8PepqSkYMGCBWbHRAgh96M5rm2koKAA06ZNw5dffvlQXcYflJSUhLKyMv1SUFBgsWMTQpqe2tZNxhZ7ZbPpS3Nzc1FSUoJevXrpy7RaLQ4cOICPPvoIe/bsgVqtRmlpqcHdhNhwuoDwJB+EEGIuetxkI88++2ydoW/j4+MRHByM2bNn64e+ValUGDVqFADg3LlzyM/PR3h4uC1CJoQ0QTqY0OPajh83mVxJrFq1yuDvmpoabNy4sc4sSVOnTjXpeG5ubnWGvnVxcUGLFi305RMmTEBiYiI8PT3h7u6OKVOmIDw83LyWTQ7yOolrn6N3BTfl1Br2cVgJZ8ZwHcyXWCxxzdKIEoCslnC8GeMkMIehYMz1YM58EqwGBjXNhN8/WY0Z7x+j0YNkYtdnqaQ2cwgY9i46hbQkeGNhjVFgGxOTK4kPP/zQ4G9fX198/vnnBmUcx5lcSZh6TplMhlGjRqG6uhpRUVH4+OOPLXZ8QggxpkYnB6cTH8Cvxsj6xszkSuLy5cvWjANA3aFxlUol0tLSkJaWZvVzE0KIEBrgjxBCCBM1gTXB5s2bTT5gQUEBfvrpJ7MDIoSQhqSpj91k0p3EmjVrsGDBAsTHx2PYsGF15rwuKyvDTz/9hC+++ALff/891q9fb5VgHwavUICXKwzKHG9WCG+sYSWhwU7o1TDmbjCnlzTrHKwexvZCYtKVYyWuzcBKXFe1cBQsdykUnnOEOX+IGVgJe9HhcaSen7W9GfNJaJ3stcc1PW4yav/+/cjOzsbq1auRlJQEFxcX+Pj4QKlU4tatWygqKoKXlxfGjx+P06dPG8zTSgghjRlVEiYaPnw4hg8fjps3b+LQoUO4evUq7t69Cy8vL/Ts2RM9e/aUPGk3IYQ0dFoTBvijHtf38fLyMhjsjxBC7BndSRBCCGGiSqKJ0Pi6gXcwHEhQcfVP4Y21jCQ0wO7ly+hBzRwSvKkOFS6WWGUMCc7cRyGcVDYH7yj8vmpcGMljVqzmJGlZCXue0UNb7HNgoSQxM0EtcnhNM0pc26MmU0kQQog5qJIghBDCxPMceCOVgLH1jZnk5xc//vijNeIghJAGqYaXmbTYK8lXNmjQILRv3x6LFi2iCX0IIXav9k7C2CJVWloagoKCoFQqERYWhqNHj4puv23bNoSGhqJ58+ZwcXFBjx49DAZZ1Wg0mD17Nrp27QoXFxf4+/sjNjYW165dkxzb/SQ/biosLMTnn3+Ozz77DAsWLMCAAQMwYcIEREdHQ6FQGD+AjRT2c4b8gRnw2n3KSFCbM4y3OQlq1qGYyV37vaUFwExQs3oYc4zJpXixod4ZdE7CietmN4Q/IxZNXLOwEtoiPc05B4n/pZm9+1k9rtmHuttCON7mjXykAGvkJLZs2YLExESkp6cjLCwMqampiIqKwrlz5+Dt7S24j6enJ95++20EBwdDoVBgx44diI+Ph7e3N6KionDnzh2cOHEC7777Lrp3745bt25h2rRpGD58OI4fPy4pvvtJfve8vLwwY8YM5OXl4eeff8Zjjz2GN954A/7+/pg6dSpOnjxpdjCEENLQWONOYsWKFZg4cSLi4+PRuXNnpKeno1mzZtiwYQNzn/79++OFF15Ap06d0L59e0ybNg3dunXDoUOHAAAeHh74/vvv8dJLL6Fjx47o06cPPvroI+Tm5iI/P9/s63+oKr5Xr15ISkpCQkICKioqsGHDBoSEhKBfv3747bffHubQhBDSIPAmDO5XW0mUl5cbLNXV1XWOp1arkZubi8jISH2ZTCZDZGQkcnJyTIyJh0qlwrlz5/D0008ztysrKwPHcQZTQEtlViWh0Wjw9ddfY8iQIQgMDMSePXvw0Ucfobi4GBcvXkRgYCBGjx5tdlCEENJQ8Lj31Fh0+d+2AQEB8PDw0C8pKSl1jnfz5k1otdo6Y9z5+PigqKhINJaysjK4urpCoVBg6NChWL16NQYOHCi4bVVVFWbPno2xY8fC3d3dnEsHYEZOYsqUKfjqq6/A8zzGjRuHDz74wGAaUhcXFyxbtgz+/v5mB0UIIQ2FDhw4E+eTKCgoMPhCdmLkzczl5uaGvLw8VFRUQKVSITExEe3atUP//v0NttNoNHjppZfA8zzWrFnzUOeUXEn897//xerVqzFy5EjmC+Dl5dXgmsq2+c9tOMgfSGiyelab1WtW4j5i29tzj2tLcmI0lDAjca1hzGWtKGcci5W4rockrehQ4UrGlxIrCc4o51mfNZFTVwbUQzLfBrQ6GaAzMsDf/9a7u7sb/dXu5eUFuVyO4uJig/Li4mL4+vqK7iuTyfDoo48CAHr06IEzZ84gJSXFoJKorSCuXr2KH3744aHuIgAzHjepVCqMHTtWtIZ0cHBARETEQwVGCCENgdFHTby0RowKhQIhISFQqVT6Mp1OB5VKhfDwcEmx6XQ6g7xHbQVx4cIF7N27Fy1atJB0PCGS7yRSUlLg4+ODV155xaB8w4YNuHHjBmbPnv3QQRFCSENhjR7XiYmJiIuLQ2hoKHr37o3U1FRUVlYiPj5ev01sbCxatWqlz2ukpKQgNDQU7du3R3V1Nb777jt8/vnn+sdJGo0GL774Ik6cOIEdO3ZAq9Xqcxyenp5md1GQXEl88sknyMzMrFPepUsXvPzyy1RJEELsijUqiTFjxuDGjRuYN28eioqK0KNHD+zevdsgmZ2fn28wR09lZSXeeOMN/PHHH3B2dkZwcDC++OILjBkzBsC9PmzZ2dkA7j2Kut+PP/5YJ29hKsmVRFFREfz8/OqUt2zZEtevXzcrCEIIaah0PAfOCgP8JSQkICEhgbl+3759Bn8vWrQIixYtYm4fFBQE3pyOwEZIzkkEBATgp59+qlP+008/UYsmQojdsXROorGRfCcxceJETJ8+HRqNBgMGDABwL5k9a9YsvPnmmxYP0FJklWrIHhxqwJzWQqzWK8zWIIxfGGKfKsaxeMcmOmgv6/VQMp6xVt5hH4vRmqfKU3ioC6dbdTtDibJkCzTW8Cwiw3KoA4UTlfJC8fb3dTgwXnORH8xulxkrGnmrPJ2OA2ekdZNO17hbcImR/K3z1ltv4c8//8Qbb7wBtVoNAFAqlZg9ezaSkpIsHiAhhNgSj787y4ltY68kVxIcx2Hp0qV49913cebMGTg7O6NDhw4W7zRCCCENQVOfT8Ls5xeurq544oknLBkLIYQ0PE38VkJyJVFZWYklS5ZApVKhpKQEOp3hPLy///67xYIjhBCbM2WUV7qT+Nurr76K/fv3Y9y4cfDz8xMfIqAh0eoAPDCxPCuhJjK0Ait5zDtJfClFEl2sNbwjO2FJ/mbOZ/KvrsL7ND8v/BORZ823wCi3KOZ8I0BRb2fB8laHpR1Lx0pci5zbqdx2Q5VYkymtl6h103127dqFnTt34sknn7RGPIQQ0qBQTkKiRx55BJ6entaIhRBCGhxex4E30sTV2PrGTPJ94HvvvYd58+bhzh2RtuiEEGIveBMXOyX5TmL58uW4dOkSfHx8EBQUBEdHR4P1J06csFhwhBBia/S4SaLo6GgrhFEPZFydJB3v5Ci8LWueAgA6hfBLpnMWLpephees4DSMuSzAHstfp2Scg3kkO/FAC7paXJVaeHszEtfOwaWC5bxc+DPCTODWR+9ikesL2C7cs1r4FWQn+XlW4tqcthONpXGLGDu+UzBGciWRnJxsjTgIIaRBaup3Emb97CktLcWnn36KpKQk/PXXXwDuPWYqLCy0aHCEEGJzlJOQ5tdff0VkZCQ8PDxw5coVTJw4EZ6enti2bRvy8/OxadMma8RJCCG2wXPGO8vRncTfEhMTMX78eFy4cAFKpVJfPmTIEBw4cMCiwRFCiM3RnYQ0x44dwyeffFKnvFWrVvqp8hoiXi4H/+AQy4zEdbWXcK9VANA5MhJ6DsK/JBTlGsFyeSXzFMzum9pmdp641jF6N7Mu8G6VxU7t9oXwZPE1LjWC5ZxWOFbZXeHtAXZPekvi7jKGNmcl2hlJZa2zcIa6Rsm+Ch3j24Rv7InrJn4nIbmScHJyQnl5eZ3y8+fPo2XLlhYJihBCGoqmPiyH5B+hw4cPx8KFC6HR3PuFzHEc8vPzMXv2bIwaNcriARJCiE018cdNkiuJ5cuXo6KiAt7e3rh79y4iIiLw6KOPws3NDYsXL5Z0rDVr1qBbt25wd3eHu7s7wsPDsWvXLv36qqoqTJ48GS1atICrqytGjRqF4uJiqSETQoj5ah83GVvslOTHTR4eHvj+++9x6NAh/Prrr6ioqECvXr0QGRkp+eStW7fGkiVL0KFDB/A8j88++wwjRozAL7/8gi5dumDGjBnYuXMntm7dCg8PDyQkJGDkyJGCc2wTQog1cLp7i7Ft7JXZkw499dRTeOqppx7q5MOGDTP4e/HixVizZg2OHDmC1q1bY/369cjMzNTPpZ2RkYFOnTrhyJEj6NOnj6Rz8Uo5eLnh5ZY/6srYmH0cWY3wSo6xz10v4d7bziIfKk4rvFLtIfx2MfqNN0yM5LQ5+/BVwklarhm74QGLolQ44VzlKfyaVzcXvgn3+oXRC9ySGJ8PAOA1wg0lmBg9xNVuwolrjQv7F7Pylp1+U1LiWpqFCxeKrp83b55ZgWi1WmzduhWVlZUIDw9Hbm4uNBqNwR1KcHAw2rRpg5ycHMmVBCGEmIVmppMmKyvL4G+NRoPLly/DwcEB7du3l1xJnDp1CuHh4aiqqoKrqyuysrLQuXNn5OXlQaFQoHnz5gbb+/j4iDa1ra6uRnX1378whVpiEUKIyaiSkOaXX36pU1ZeXo7x48fjhRdekBxAx44dkZeXh7KyMnz99deIi4vD/v37JR+nVkpKChYsWGD2/oQQYqCJVxIW6Yfl7u6OBQsW4N1335W8r0KhwKOPPoqQkBCkpKSge/fuWLlyJXx9faFWq1FaWmqwfXFxMXx9fZnHS0pKQllZmX4pKCiQHBMhhOhZqXVTWloagoKCoFQqERYWhqNHj4puv27dOvTr1w+PPPIIHnnkEURGRoru89prr4HjOKSmpkqO7X5mJ64fVPul/LB0Oh2qq6sREhICR0dHqFQqff+Lc+fOIT8/H+Hh4cz9nZyc4OTkVKdc28wRnINhirc8ULiODNhTyg6Q0WtGx5jjury9i2D5rWClYDkAuP4hnESt8BdOJgqfwbZ4c3oX8dISn3wNoze09DPD4a7w0O2sOauLe7MS12acXCqx10lqwwBGb+g7LYWvj9VwAwCcbzKGxWd8FhrLj2+OZzdMuX8bKbZs2YLExESkp6cjLCwMqampiIqKwrlz5+Dt7S24z759+zB27Fj07dsXSqUSS5cuxXPPPYfffvsNrVq1Mtg2KysLR44cgb+/v7TABEiuJFatWmXwN8/zuH79Oj7//HMMHjxY0rGSkpIwePBgtGnTBrdv30ZmZib27duHPXv2wMPDAxMmTEBiYiI8PT3h7u6OKVOmIDw8nJLWhJD6Y4XHTStWrMDEiRMRHx8PAEhPT8fOnTuxYcMGzJkzR3CfL7/80uDvTz/9FN988w1UKhViY2P15YWFhZgyZQr27NmDoUOHSgtMgORK4sMPPzT4WyaToWXLloiLi0NSUpKkY5WUlCA2NhbXr1+Hh4cHunXrhj179mDgwIH6c8lkMowaNQrV1dWIiorCxx9/LDVkQggxGwcT7iQkHE+tViM3N9fg+1ImkyEyMhI5OTkmH+fOnTvQaDTw9PTUl+l0OowbNw5vvfUWunTpIiEqNsmVxOXLly1yYgBYv3696HqlUom0tDSkpaVZ7JyEECKJhH4SD7amFHr8ffPmTWi1Wvj4+BiU+/j44OzZsyaHNXv2bPj7+xt0E1i6dCkcHBwwdepUk49jjN0MIEoIIVYhYeymgIAAeHh46JeUlBSrhLRkyRJs3rwZWVlZ+ikbcnNzsXLlSmzcuJE5La05JN9JvPDCCyYHsG3bNskBEUJIgyIhJ1FQUAB397+HnRdqROPl5QW5XF5nHDpjLTdrLVu2DEuWLMHevXvRrVs3ffnBgwdRUlKCNm3a6Mu0Wi3efPNNpKam4sqVK0aPLcSssZuysrLg4eGB0NBQAPdqsLKyMkRHR1u0BrOkuy0UcHA0HCKjtUq4o52s/I7k43Nq4cExXK8Jv8RXo9itmxwrhFsxlT8q3KrFhzVXQEMk0jKHl9gyh2MNQWHGZ1BWLdxSyqlK+Bxt9jBiteSY0azhSESG5eAcJA6NwXiteMZnSlHBvj6HSsZcGo18HG0prZtqBysVo1AoEBISApVKhejoaAD3cgkqlQoJCQmi+37wwQdYvHgx9uzZo//+rTVu3Lg6Y+hFRUVh3Lhx+gS5OSRXEj4+PnjppZeQnp4O+f8m8dFqtXjjjTfg7u6O//u//zM7GEIIaXB0/1uMbSNBYmIi4uLiEBoait69eyM1NRWVlZUGX+axsbFo1aqV/pHV0qVLMW/ePGRmZiIoKEg/8oSrqytcXV3RokULtGjRwuA8jo6O8PX1RceOHaUFeB/JlcSGDRtw6NAhfQUBAHK5HImJiejbty9VEoQQu2KNfhJjxozBjRs3MG/ePBQVFaFHjx7YvXu3QTI7Pz8fsvsGYFyzZg3UajVefPFFg2MlJydj/vz50gKQQHIlUVNTg7Nnz9apmc6ePQudzk5HgSSENF1WGgU2ISFB9PHSvn37DP42J6dgbh7ifpIrifj4eEyYMAGXLl1C7969AQA///wzlixZ8lDPvQghpEFq4mM3Sa4kli1bBl9fXyxfvhzXr18HAPj5+eGtt97Cm2++afEALaWqhQxyhWGLX/dfGQnqu1XsAzHG32cNPSAvF55foPU+4eQ0AGhcGet0jShBbQ6pw3KIJHCl4jSMISUY5XJn4YYKnNaCw5FwjBbqWuGYxDAblMiFz+FWKJyEVruyW82zkv9i8180BtZ43NSYSK4kZDIZZs2ahVmzZuk7jhjL5hNCSKPVxO8kzOpMV1NTg7179+Krr77S/0K5du0aKioqLBocIYTYnO7vKUxZi9TWTY2J5DuJq1evYtCgQcjPz0d1dTUGDhwINzc3LF26FNXV1UhPT7dGnIQQYht0JyHNtGnTEBoailu3bsHZ+e+5hF944QWoVCqLBkcIIbZWm5MwttgryXcSBw8exOHDh6FQGPZeDgoKQmFhocUCszR5NSB/4I3kqoSTyqKTyTOSiazEoKxa+FiOpSIJQEbv7Uf+W7eLvyhW4lNigliUxF7SUntVix7LjAQu69q5GsZrohZ+/5gJaks2A2e9T5Y8B+Nz61Ap/NpqXNifW05TD/GSeie5ktDpdNAK/Of8448/4ObmZpGgCCGkwaDHTdI899xzBtPhcRyHiooKJCcnY8iQIZaMjRBCbI4eN0m0bNkyDBo0CJ07d0ZVVRX+8Y9/4MKFC/Dy8sJXX31ljRgJIcS27LgSMEZyJREQEICTJ09iy5YtOHnyJCoqKjBhwgTExMQYJLIJIcQe6Ju5GtnGXkmqJDQaDYKDg7Fjxw7ExMQgJibGWnFZnPPNGjg4PtAjlJWgFu0hyljH6LnKSnzKqtk9rnnGsZoxJpq3e8yhplk9lc3omV7D6HHNKmfEJNbjWuqPUWaSX2yocFZjBfYOgsVyVhJa7FCsXuv10eNaKMlvqQYaTTwnIamScHR0RFWVyJAVhBBiZ5r6sBySE9eTJ0/G0qVLUVPDGKeFEELsiYTpS+2R5JzEsWPHoFKp8J///Addu3aFi4uLwXqaspQQYlfocZM0zZs3x6hRo6wRCyGENDhN/XGTSZVEdnY2Bg8eDEdHR2RkZFg7JqtwrKyBg4PhIzKe9cjMjJ68rGGrWYlPqNmP6zjGMNSOt+08cW3LuZBZvYIZ7yvPSo6z3m9LsmSPeRYzhjznWP9vGnuPaytMX9qYmJSTeOGFF1BaWgrg3lSlJSUl1oyJEEIajKbemc6kSqJly5Y4cuQIAIDnefYEJoQQYm8ocW3ca6+9hhEjRoDjOHAcB19fX+a2QuM6EUJIY0U5CRPMnz8fL7/8Mi5evIjhw4cjIyMDzZs3t3JohBDSAFDrJtMEBwcjODgYycnJGD16NJo1a2bNuCxOdrcGsgcS18ykpNjdEGuOax1jH1Yi04wEp/yuhfqmSO2Vaw5WctWSSVcLJrqZvYJZSVfWE1czkrTMntWM14rXibx/MmmPgnnG9pw5Q7qzPtONfI5rqiQkSk5OtkYchBDSINHjJkIIIUxUSRBCCGGjx02EEEJE2XElYEw9ZDAJIaTxslZnurS0NAQFBUGpVCIsLAxHjx4V3f63337DqFGjEBQUBI7jDGYIvV9hYSH++c9/okWLFnB2dkbXrl1x/Phx6QH+j0l3EqtWrTL5gFOnTjU7GGuSaXSQPdgCidWKSazVDGsfLaO+ZWwvNsY+a8gHWTWNvGs1rPec9X4z3iPR91VqTMwDmdFaiNEqj4XZuknkIiS3EGssrPC4acuWLUhMTER6ejrCwsKQmpqKqKgonDt3Dt7e3oL73LlzB+3atcPo0aMxY8YMwW1u3bqFJ598Es888wx27dqFli1b4sKFC3jkkUekBXgfkyqJDz/80KSDcRzXYCsJQggxhzUS1ytWrMDEiRMRHx8PAEhPT8fOnTuxYcMGzJkzR3CfJ554Ak888QQAMLdZunQpAgICDMbYa9u2rbTgHmBSJXH58uWHOgkhhDRWlp6+VK1WIzc3F0lJSfoymUyGyMhI5OTkmBnlPdnZ2YiKisLo0aOxf/9+tGrVCm+88QYmTpxo9jEpJ0EIIWIkjN1UXl5usFRXV9c53M2bN6HVauHj42NQ7uPjg6KioocK9ffff8eaNWvQoUMH7NmzB6+//jqmTp2Kzz77zOxjmtW66Y8//kB2djby8/OhVqsN1q1YscLsYAghpMGRkJMICAgwKE5OTsb8+fOtEZUgnU6H0NBQvP/++wCAnj174vTp00hPT0dcXJxZx5RcSahUKgwfPhzt2rXD2bNn8fjjj+PKlSvgeR69evUyK4h6UaOrk/DjWclKcxJtjEQfzzgWJ3IOXs5IilZLS6KalSitjyE7rE2s4QHr+hj7sD4jrOEsLJqkZV2HyCjMrBGama8I61jmDMthyf9PDYiUnERBQQHc3d315U5OTnW29fLyglwuR3FxsUF5cXGx6OCppvDz80Pnzp0Nyjp16oRvvvnG7GNK/kZISkrCzJkzcerUKSiVSnzzzTcoKChAREQERo8ebXYghBDSIEl43OTu7m6wCFUSCoUCISEhUKlU+jKdTgeVSoXw8PCHCvXJJ5/EuXPnDMrOnz+PwMBAs48puZI4c+YMYmNjAQAODg64e/cuXF1dsXDhQixdutTsQAghpCHieN6kRYrExESsW7cOn332Gc6cOYPXX38dlZWV+tZOABAbG2uQ3Far1cjLy0NeXh7UajUKCwuRl5eHixcv6reZMWMGjhw5gvfffx8XL15EZmYm1q5di8mTJ5t9/ZIfN7m4uOjzEH5+frh06RK6dOkC4F5ChhBC7ImlWzcBwJgxY3Djxg3MmzcPRUVF6NGjB3bv3m2QzM7Pz4fsvv4t165dQ8+ePfV/L1u2DMuWLUNERAT27dsH4F4z2aysLCQlJWHhwoVo27YtUlNTERMTIy3A+0iuJPr06YNDhw6hU6dOGDJkCN58802cOnUK27ZtQ58+fSQdKyUlBdu2bcPZs2fh7OyMvn37YunSpejYsaN+m6qqKrz55pvYvHkzqqurERUVhY8//rhOywBCCLEKK43dlJCQgISEBOb62i/+WkFBQew86n2ef/55PP/889IDYpBcSaxYsQIVFRUAgAULFqCiogJbtmxBhw4dJLds2r9/PyZPnownnngCNTU1mDt3Lp577jn897//hYuLC4B7t087d+7E1q1b4eHhgYSEBIwcORI//fSTpHNxWi04GCZ+WUllsTeCmRhk7MPsuSrWM9eRMWeFRrjHdRMeVsZymElXRuKa0bjAknNcMIkm5m04tTDr/xNzTo7G0UiCRoGVqF27dvp/u7i4ID093eyT79692+DvjRs3wtvbG7m5uXj66adRVlaG9evXIzMzEwMGDAAAZGRkoFOnTjhy5IjkOxdCCJGMRoE1j1qtRklJCXQP/Epo06aN2cGUlZUBADw9PQEAubm50Gg0iIyM1G8THByMNm3aICcnhyoJQojV0Z2EROfPn8eECRNw+PBhg3Ke58FxHLRiU3+K0Ol0mD59Op588kk8/vjjAICioiIoFIo682mL9Uysrq426OVYXl5uVjyEEAKA7iSk7hAfHw8HBwfs2LEDfn5+zGf0Uk2ePBmnT5/GoUOHHuo4KSkpWLBggUViIoQQwL7vFIyRXEnk5eUhNzcXwcHBFgsiISEBO3bswIEDB9C6dWt9ua+vL9RqNUpLSw3uJsR6JiYlJSExMVH/d3l5+b2u8lodgAcSaGYkGdkJakZyjjWss8i5tQppw47bDdYPjvpIBkvsYczscS3SIEHqcN1msdA5zPpSZL2G5vTelkroM2Khzw2n49kNUO7bxl5J/kR17tzZYv0heJ5HQkICsrKy8MMPP9QZ0jYkJASOjo4GPRPPnTuH/Px8Zs9EJyenOr0eCSHEbBJ6XNsjyXcSS5cuxaxZs/D++++ja9eucHR0NFgv5Ut58uTJyMzMxL///W+4ubnp8wweHh5wdnaGh4cHJkyYgMTERHh6esLd3R1TpkxBeHg4Ja0JIfXCGp3pGhPJlURtS6Nnn33WoNycxPWaNWsAAP379zcoz8jIwPjx4wHcm/BIJpNh1KhRBp3pCCGkXlDiWpoff/zRYic3pfegUqlEWloa0tLSLHZeQggxFTWBlSgiIsIacVgfz5ueyBJLQrESlqxjSy0HoHVm9LhmJEVZR+IYsfJ2nGQzG/N9YrzmDjZMsotpgD2uzZqTuyEx5bvD1u+7FUmuJH799VfBco7joFQq0aZNG8HhcQkhpDGinIREPXr0EO0b4ejoiDFjxuCTTz6BUql8qOAIIcTWmvrjJslNYLOystChQwesXbtWP7b52rVr0bFjR2RmZmL9+vX44Ycf8M4771gjXkIIqV+1j5uMLXZK8p3E4sWLsXLlSkRFRenLunbtitatW+Pdd9/F0aNH4eLigjfffBPLli2zaLCEEFLfmvqdhORK4tSpU4JT4QUGBuLUqVMA7j2Sun79+sNHZ0GcTgfugR7XzCGMxbCSvnKJ24ucW9OMcYNXY5ke16yENgB2Yp7Vk1esh7HwydnrWAlOW/bEZtCxhgoXYakhbIycxPrnYGEmrhnvE+uzJnYNtnjPm3gTWMmPm4KDg7FkyRL97HQAoNFosGTJEv1QHYWFhTQpECHELtTeSRhb7JXkO4m0tDQMHz4crVu3Rrdu3QDcu7vQarXYsWMHAOD333/HG2+8YdlICSHEFrQ8IDNSC2jtt5aQXEn07dsXly9fxpdffonz588DAEaPHo1//OMfcHNzAwCMGzfOslESQoiNcDAhJ1EvkdiGWZMOubm54bXXXrN0LIQQ0vBQZzrjsrOzMXjwYDg6OiI7O1t02+HDh1skMEIIaQiodZMJoqOjUVRUBG9vb0RHRzO3e5iZ6azO2m2ZLTgkgdZRYmue+pingIXVQkXHiknk88Fq+ST1NRR7ny00rApzWA5zWsxZkjkthoi4Jt66yaRK4v55rB+c05oQQuwZx/PgjPzANLa+MTMrJ0EIIU2GwKSWgtvYKZOfU+Tk5OibuNbatGkT2rZtC29vb0yaNAnV1dUWD5AQQmypdvpSY4u9MrmSWLhwIX777Tf936dOncKECRMQGRmJOXPm4Ntvv0VKSopVgiSEEJtp4mM3mVxJ5OXlGcxGt3nzZoSFhWHdunVITEzEqlWr8K9//csqQTZqOl54EfmwybTCC7Ra4aU+cJzwUi/nlgkvNqRVcIKL6JeIjBNcOMZiFlu+T6zrZvwf4DhOcGlo12etHtdpaWkICgqCUqlEWFgYjh49anSfrVu3Ijg4GEqlEl27dsV3331nsL6iogIJCQlo3bo1nJ2d0blzZ6Snp0sP7j4m/0+7deuWwVAb+/fvx+DBg/V/P/HEEygoKHioYAghpMGxwp3Eli1bkJiYiOTkZJw4cQLdu3dHVFQUSkpKmPscPnwYY8eOxYQJE/DLL78gOjoa0dHROH36tH6bxMRE7N69G1988QXOnDmD6dOnIyEhwWjXBTEmVxI+Pj64fPkyAECtVuPEiRPo06ePfv3t27fh6OhodiCEENIQ1U46ZGyRYsWKFZg4cSLi4+P1v/abNWuGDRs2MPdZuXIlBg0ahLfeegudOnXCe++9h169euGjjz7Sb3P48GHExcWhf//+CAoKwqRJk9C9e3eT7lJYTK4khgwZgjlz5uDgwYNISkpCs2bN0K9fP/36X3/9Fe3btzc7EEIIaZAk3EmUl5cbLEKNedRqNXJzcxEZGakvk8lkiIyMRE5ODjOMnJwcg30AICoqymCfvn37Ijs7G4WFheB5Hj/++CPOnz+P5557zuzLN7mSeO+99+Dg4ICIiAisW7cO69atg0Kh0K/fsGHDQwVCCCENkZTWTQEBAfDw8NAvQo15bt68Ca1WW2ekbB8fHxQVFTHjKCoqMrrP6tWr0blzZ7Ru3RoKhQKDBg1CWloann76abOv3+R+El5eXjhw4ADKysrg6uoKudxwAoWtW7fC1dXV7ECszsotEHjGsc1Jqck0zJNIO5AZyV2pcx6wtucZp+Z46a8Iz2peaMNexFqFGeeuj2Q76zWph175rP8DTKyYzJlzxJokjN1UUFAAd3d3fbGTk5M1I6tj9erVOHLkCLKzsxEYGIgDBw5g8uTJ8Pf3r3MXYirJnek8PDwEyz09Pc0KgBBCGjQexjvL/a8OcXd3N6gkhHh5eUEul6O4uNigvLi4GL6+vsz9fH19Rfe5e/cu5s6di6ysLAwdOhQA0K1bN+Tl5WHZsmVmVxK2bUdICCENXO2wHMYWUykUCoSEhEClUunLdDodVCoVwsPDmfuFh4cb7AMA33//vX4fjUYDjUYD2QN3aHK5/KGGU6JhOQghRAwPEx43STtkYmIi4uLiEBoait69eyM1NRWVlZWIj4/XbxMbG4tWrVrp8xrTpk1DREQEli9fjqFDh2Lz5s04fvw41q5dC+DeXUxERATeeustODs7IzAwEPv378emTZuwYsUKaQHehyoJQggRY4X5JMaMGYMbN25g3rx5KCoqQo8ePbB7926DxHR+fr7BXUHfvn2RmZmJd955B3PnzkWHDh2wfft2PP744/ptNm/ejKSkJMTExOCvv/5CYGAgFi9e/FDz/1AlIUSst6vEMVrMSWizem9KTgyag5VMZJXXQ49vVu9j3oxTS03MsxLBNc4Nc+htXm7lJ8gN87KtitPy4IzcKnBmTF+akJCAhIQE5vp9+/bVKRs9ejRGjx7N3MfX1xcZGRmSYxFDlQQhhIihmekIIYQwUSVBCCGEiSoJQgghTDoYz8XY8aRDTbuSsGEy1qJJaGYvW8tlGdk9q4VfQ47RLps3p9cxq5etOceyUM9jjasZry1z/mlWz2OJ83GL7CM5YV8fWLGKfG551tzp5rRiMBFNX0oIIYSNHjcRQghh0powybXWfp83USVBCCGiTBkclO4kCCGkaaLHTU2E0Fy4ZiT5mENgW2iI7XsnYXzgJPb2NitZKTUJLnVoanP+M7GSlTCry7X0fQSohQdDFj++TM4ot2BSmdljXtr7xxrR3YyR3tnMGSrcnPf8Yel4GL1TkPh/szFpOpUEIYSYg9cZn8fCFvNc1BOqJAghRAw9biKEEMKkNeFO4iHma2joqJIghBAxVphPojGhSoIQQsQ08cdNNp2+9MCBAxg2bBj8/f3BcRy2b99usJ7necybNw9+fn5wdnZGZGQkLly4YLkAZDLJC8dxgoslyWqEF8nXYcZ1c3K54AJOJrxIPDfr9bP5sBG1rd/qLMLXrW6uE1xEyTjhxZLkMuGF9f5JjZUDe5HInM8BJ+MEF6vS6Uxb7JRNK4nKykp0794daWlpgus/+OADrFq1Cunp6fj555/h4uKCqKgoVFVV1XOkhJAmq/ZOwthip2z6uGnw4MEYPHiw4Dqe55Gamop33nkHI0aMAABs2rQJPj4+2L59O15++eX6DJUQ0lTR46aG6fLlyygqKkJkZKS+zMPDA2FhYcjJyWHuV11djfLycoOFEELMxWu1Ji32qsFWEkVFRQBgMDF47d+164SkpKTAw8NDvwQEBFg1TkKIneP5ez2qxRY7vpOwu9ZNSUlJSExM1P9dXl5+r6IQGJaDOUeCOUlU1rwKZhxLrmYkwRgJOuZ1yBnDQIhhJQHljOvTWu41ZM9ZwdjejDEiONZrInE4Ep2S8aUglrRnfJEwr5t5JDbm/B5Sh1VhHp+9Pfv9Y+1jxjAltvjBzpswLAdVEvXP19cXAFBcXAw/Pz99eXFxMXr06MHcz8nJCU5OTtYOjxDSVOh0ANd0h+VosI+b2rZtC19fX6hUKn1ZeXk5fv75Z4SHh9swMkJIk0Ktm2ynoqICFy9e1P99+fJl5OXlwdPTE23atMH06dOxaNEidOjQAW3btsW7774Lf39/REdH2y5oQkiTwut04I3cSfB2fCdh00ri+PHjeOaZZ/R/1+YS4uLisHHjRsyaNQuVlZWYNGkSSktL8dRTT2H37t1QKpW2CpkQ0tQ08ZyETR839e/fHzzP11k2btwI4F4ibOHChSgqKkJVVRX27t2Lxx57zKxz8RwHXma4MHuVivW6lsuFF6mYPXw5cDW84CKZGT3KmdcncWH23K6PXu4iry37PRdemD3Eq4UX0XOzXi/WtbN6SYueg7FIfD14jrHIwFwkvx9SX3ORHvBWpdUBWq2RRfqdRFpaGoKCgqBUKhEWFoajR48a3Wfr1q0IDg6GUqlE165d8d133xmst8YoFQ02J0EIIQ0Br+NNWqTYsmULEhMTkZycjBMnTqB79+6IiopCSUkJc5/Dhw9j7NixmDBhAn755RdER0cjOjoap0+f1m9jjVEqqJIghBAxtZMOGVskWLFiBSZOnIj4+Hh07twZ6enpaNasGTZs2MDcZ+XKlRg0aBDeeustdOrUCe+99x569eqFjz766F6YD4xS0a1bN2zatAnXrl2rMy6eFFRJEEKICEvfSajVauTm5hqMJiGTyRAZGSk6mkROTo7BPgAQFRWl38fcUSqMabD9JCyF/19CqUZXLbBSzdhH5FcBax2roxRje07HfulraoRvDWt0wvGyr0N6HoNjfdhZo1zyGka5cK8nnhcbzpaB8RryrHMIvdf6fYRfK461j074+nSM23fBz9nfJxc+FiMmHfO1ZX8+ZVrh83Oszw5j+5oa4d+PWjX7dyXr88nrGO854/VgvUf31rH2qfta1UAjuo+pavhqo3cKted6cBggoX5bN2/ehFarFRxN4uzZs8xzFBUViY5AYe4oFcbYfSXx559/AgD2X/nExpE8QGxIKfPfTwIAhWbsUypx+yTh4nwzTm1RpyRu/6fE7Y3nVhucP//8Ex4eHpL3UygU8PX1xaGi74xvDMDV1bXOMEDJycmYP3++5HM3JHZfSXh6egIA8vPzzfqgNHa1w5IUFBTA3d3d1uHUq6Z87QBdf1lZGdq0aaP/DpBKqVTi8uXLUKvZdzb343m+Tqs7odEfvLy8IJfLUVxcbFBeXFysH2lCiK+vr+g+5o5SYYzdVxKy/41l4+Hh0ST/o9Ryd3dvstfflK8doOuv/Q4wh1KptHi/LIVCgZCQEKhUKn3HYJ1OB5VKhYSEBOZ+4eHhUKlUmD59ur7s+++/149Acf8oFbWVQu0oFa+//rrZ8dp9JUEIIQ1NYmIi4uLiEBoait69eyM1NRWVlZWIj4/XbxMbG4tWrVohJSUFADBt2jRERERg+fLlGDp0KDZv3ozjx49j7dq1AO71K7PGKBVUSRBCSD0bM2YMbty4gXnz5qGoqAg9evTA7t27DZLO+fn5BndBffv2RWZmJt555x3MnTsXHTp0wPbt2/H444/rt7HKKBW8nauqquKTk5P5qqoqW4diE035+pvytfM8XX9Tv35L4XjejgcdIYQQ8lCoMx0hhBAmqiQIIYQwUSVBCCGEyW4riTVr1qBbt276NuLh4eHYtWuXrcOyiSVLluibxzUF8+fPrzPEdHBwsK3DqleFhYX45z//iRYtWsDZ2Rldu3bF8ePHbR1WvQgKChIcZnzy5Mm2Dq1RstsmsK1bt8aSJUvQoUMH8DyPzz77DCNGjMAvv/yCLl262Dq8enPs2DF88skn6Natm61DqVddunTB3r179X87ONjtR72OW7du4cknn8QzzzyDXbt2oWXLlrhw4QIeeeQRW4dWL44dOwat9u9xvU6fPo2BAwdi9OjRNoyq8bLb/znDhg0z+Hvx4sVYs2YNjhw50mQqiYqKCsTExGDdunVYtGiRrcOpVw4ODqJDHNizpUuXIiAgABkZGfqytm3b2jCi+tWyZUuDv5csWYL27dsjIiLCRhE1bnb7uOl+Wq0WmzdvRmVlpb4Le1MwefJkDB06tM7wwk3BhQsX4O/vj3bt2iEmJgb5+TYfeq/eZGdnIzQ0FKNHj4a3tzd69uyJdevW2Tosm1Cr1fjiiy/wyiuviM9mSJjs9k4CAE6dOoXw8HBUVVXB1dUVWVlZ6Ny5s63DqhebN2/GiRMncOzYMVuHUu/CwsKwceNGdOzYEdevX8eCBQvQr18/nD59Gm5ubrYOz+p+//13rFmzBomJiZg7dy6OHTuGqVOnQqFQIC4uztbh1avt27ejtLQU48ePt3UojZZdd6ZTq9XIz89HWVkZvv76a3z66afYv3+/3VcUBQUFCA0Nxffff6/PRfTv3x89evRAamqqbYOzgdLSUgQGBmLFihWYMGGCrcOxOoVCgdDQUBw+fFhfNnXqVBw7duyhJp9pjKKioqBQKPDtt9/aOpRGy64fNykUCjz66KMICQlBSkoKunfvjpUrV9o6LKvLzc1FSUkJevXqBQcHBzg4OGD//v1YtWoVHBwcDJJ6TUHz5s3x2GOP4eLFi7YOpV74+fnV+SHUqVOnJvXIDQCuXr2KvXv34tVXX7V1KI2aXT9uepBOp0N1tcjMYXbi2WefxalThrPPxMfHIzg4GLNnz4ZcLrdRZLZRUVGBS5cuYdy4cbYOpV48+eSTOHfunEHZ+fPnERgYaKOIbCMjIwPe3t4YOnSorUNp1Oy2kkhKSsLgwYPRpk0b3L59G5mZmdi3bx/27Nlj69Cszs3NzWBkSABwcXFBixYt6pTbo5kzZ2LYsGEIDAzEtWvXkJycDLlcjrFjx9o6tHoxY8YM9O3bF++//z5eeuklHD16FGvXrtUPKd0U6HQ6ZGRkIC4urkk1f7YGu331SkpKEBsbi+vXr8PDwwPdunXDnj17MHDgQFuHRqzsjz/+wNixY/Hnn3+iZcuWeOqpp3DkyJE6TSPt1RNPPIGsrCwkJSVh4cKFaNu2LVJTUxETE2Pr0OrN3r17kZ+fj1deecXWoTR6dp24JoQQ8nDsOnFNCCHk4VAlQQghhIkqCUIIIUxUSRBCCGGiSoIQQggTVRKEEEKYqJIghBDCRJUEIYQQJqokmqh9+/aB4ziUlpba5Pxr165FQEAAZDJZkxyZVopx48bh/ffft+gxb968CW9vb/zxxx8WPS6xP1RJNFLjx4/Xz93r6OgIHx8fDBw4EBs2bIBOpzO6f9++ffVDltS38vJyJCQkYPbs2SgsLMSkSZPqPYbG4uTJk/juu+8wdepUfVn//v0F5yvfuHEjmjdvbtJxvby8EBsbi+TkZAtFSuwVVRKN2KBBg3D9+nVcuXIFu3btwjPPPINp06bh+eefR01NDXM/jUYDhUIBX19fq87WpVarBcvz8/Oh0WgwdOhQ+Pn5oVmzZibv29SsXr0ao0ePhqurq8WPHR8fjy+//BJ//fWXxY9N7AdVEo2Yk5MTfH190apVK/Tq1Qtz587Fv//9b+zatQsbN27Ub8dxHNasWYPhw4fDxcUFixcvNnjcVF5eDmdnZ+zatcvg+FlZWXBzc8OdO3cA3JvM6KWXXkLz5s3h6emJESNG4MqVK/rtx48fj+joaCxevBj+/v7o2LFjnZg3btyIrl27AgDatWsHjuNw5coVzJ8/Hz169MCnn36Ktm3bQqlUArg3YdCrr76Kli1bwt3dHQMGDMDJkycNjrlkyRL4+PjAzc0NEyZMwJw5c9CjRw/9eqFf3tHR0QazlVVXV2PmzJlo1aoVXFxcEBYWhn379hnE3bx5c+zZswedOnWCq6urvpK+34YNG9ClSxc4OTnBz88PCQkJAIBXXnkFzz//vMG2Go0G3t7eWL9+fZ3XCbg37e7XX39dZ752UwUFBenvNu9fanXp0gX+/v7Iysoy6/ikaaBKws4MGDAA3bt3x7Zt2wzK58+fjxdeeAGnTp2qMzKmu7s7nn/+eWRmZhqUf/nll4iOjkazZs2g0WgQFRUFNzc3HDx4ED/99JP+i/L+X/0qlQrnzp3D999/jx07dtSJb8yYMdi7dy8A4OjRo7h+/ToCAgIAABcvXsQ333yDbdu2IS8vDwAwevRolJSUYNeuXcjNzUWvXr3w7LPP6n/9/utf/8L8+fPx/vvv4/jx4/Dz88PHH38s+XVLSEhATk4ONm/ejF9//RWjR4/GoEGDcOHCBf02d+7cwbJly/D555/jwIEDyM/Px8yZM/Xr16xZg8mTJ2PSpEk4deoUsrOz8eijjwIAXn31VezevdugUtmxYwfu3LmDMWPGCMb066+/oqysDKGhoZKvBwCOHTuG69ev4/r16/jjjz/Qp08f9OvXz2Cb3r174+DBg2YdnzQRPGmU4uLi+BEjRgiuGzNmDN+pUyf93wD46dOnG2zz448/8gD4W7du8TzP81lZWbyrqytfWVnJ8zzPl5WV8Uqlkt+1axfP8zz/+eef8x07duR1Op3+GNXV1byzszO/Z88efUw+Pj58dXW1aOy//PILD4C/fPmyviw5OZl3dHTkS0pK9GUHDx7k3d3d+aqqKoP927dvz3/yySc8z/N8eHg4/8YbbxisDwsL47t3767/OyIigp82bZrBNiNGjODj4uJ4nuf5q1ev8nK5nC8sLDTY5tlnn+WTkpJ4nuf5jIwMHgB/8eJF/fq0tDTex8dH/7e/vz//9ttvM6+7c+fO/NKlS/V/Dxs2jB8/fjxz+6ysLF4ulxu85rXX4+joyLu4uBgsTk5OvIeHh+Cxpk6dygcGBhq8vjzP8zNmzOD79+/PjIEQupOwQzzP18k1GPs1OmTIEDg6OiI7OxsA8M0338Dd3R2RkZEA7iVQL168CDc3N7i6usLV1RWenp6oqqrCpUuX9Mfp2rUrFAqFWXEHBgYazPlw8uRJVFRUoEWLFvpzurq64vLly/pznjlzBmFhYQbHCQ8Pl3TeU6dOQavV4rHHHjM4z/79+w2urVmzZmjfvr3+bz8/P5SUlAC4N3/JtWvX8OyzzzLP8+qrryIjIwMAUFxcjF27donOd3D37l04OTkJ5o1iYmKQl5dnsCxcuFDwOGvXrsX69euRnZ1dZ04NZ2dn/eNEQoTY7aRDTdmZM2fQtm1bgzIXFxfRfRQKBV588UVkZmbi5ZdfRmZmJsaMGaOf1auiogIhISH48ssv6+x7/xePsfOIeXDfiooK+Pn5GeQGapnaigcAZDIZ+AemTdFoNAbnkcvlyM3NrTO16/0JY0dHR4N1HMfpj+vs7Gw0jtjYWMyZMwc5OTk4fPgw2rZtW+fxz/28vLxw584dqNXqOhWvh4eH/lFWLW9v7zrH+PHHHzFlyhR89dVX6NatW531f/31V5OZjImYhyoJO/PDDz/g1KlTmDFjhuR9Y2JiMHDgQPz222/44YcfsGjRIv26Xr16YcuWLfD29oa7u7slQ2bq1asXioqK4ODggKCgIMFtOnXqhJ9//hmxsbH6siNHjhhs07JlS4NcgFarxenTp/HMM88AAHr27AmtVouSkhLRL20xbm5uCAoKgkql0h/3QS1atEB0dDQyMjKQk5OD+Ph40WPWJt//+9//GiTiTXXx4kW8+OKLmDt3LkaOHCm4zenTp9G/f3/JxyZNBz1uasSqq6tRVFSEwsJCnDhxAu+//z5GjBiB559/3uBL01RPP/00fH19ERMTg7Zt2xo8xomJiYGXlxdGjBiBgwcP4vLly9i3bx+mTp1qtQ5ZkZGRCA8PR3R0NP7zn//gypUrOHz4MN5++20cP34cADBt2jRs2LABGRkZOH/+PJKTk/Hbb78ZHGfAgAHYuXMndu7cibNnz+L111836ET42GOPISYmBrGxsdi2bRsuX76Mo0ePIiUlBTt37jQ53vnz52P58uVYtWoVLly4gBMnTmD16tUG27z66qv47LPPcObMGcTFxYker2XLlujVqxcOHTpkcgy17t69i2HDhqFnz56YNGkSioqK9EutO3fuIDc3F88995zk45Omg+4kGrHdu3fDz88PDg4OeOSRR9C9e3esWrUKcXFxkMmk1/8cx2Hs2LH44IMPMG/ePIN1zZo1w4EDBzB79myMHDkSt2/fRqtWrfDss89a7c6C4zh89913ePvttxEfH48bN27A19cXTz/9NHx8fADcay116dIlzJo1C1VVVRg1ahRef/117NmzR3+cV155BSdPnkRsbCwcHBwwY8aMOr/2MzIysGjRIrz55psoLCyEl5cX+vTpU6fZqpi4uDhUVVXhww8/xMyZM+Hl5YUXX3zRYJvIyEj4+fnpm58a8+qrr2LTpk36prSmKi4uxtmzZ3H27Nk656l9RPbvf/8bbdq0MfvuiTQNNMc1sTvz58/H9u3b9c1oG5KKigq0atUKGRkZzEdA97t79y46duyILVu2SE7IG9OnTx9MnToV//jHPyx6XGJf6E6CkHqg0+lw8+ZNLF++HM2bN8fw4cNN2s/Z2RmbNm3CzZs3LRrPzZs3MXLkSIwdO9aixyX2hyoJQupBfn4+2rZti9atW2Pjxo36VmOmsEZi2cvLC7NmzbL4cYn9ocdNhBBCmKh1EyGEECaqJAghhDBRJUEIIYSJKglCCCFMVEkQQghhokqCEEIIE1UShBBCmKiSIIQQwkSVBCGEEKb/B8LkOLCdwDWxAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from biotuner.biotuner_object import compute_biotuner\n", "import numpy as np\n", "# load data\n", "data = np.load('../data/EEG_example.npy')\n", "\n", "biotuning = compute_biotuner(1000, data = data[10], peaks_function = 'harmonic_recurrence', precision = 0.1, n_harm = 10,\n", " ratios_n_harms = 5, ratios_inc_fit = False, ratios_inc = True, scale_cons_limit = 0.1) # Initialize biotuner object\n", "pac_freqs, _ = biotuning.pac(n_values = 30, plot=True, drive_precision = 0.1, max_drive_freq = 7, method = 'duprelatour')\n", "print(pac_freqs)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "fe60e2a1", "metadata": {}, "source": [ "Different methods can be used to compute the PAC:\n", "methods = ['ozkurt', 'canolty', 'tort', 'penny', 'vanwijk', 'duprelatour', 'colgin',\n", " 'sigl', 'bispectrum']" ] }, { "cell_type": "code", "execution_count": 2, "id": "16a6c3fb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[3.1, 44.0],\n", " [3.1, 34.0],\n", " [3.1, 35.0],\n", " [3.4, 46.0],\n", " [3.4, 19.0],\n", " [3.4, 15.0],\n", " [3.4, 14.0],\n", " [3.1, 42.0],\n", " [3.4, 23.0],\n", " [3.1, 18.0]]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pac_freqs, _ = biotuning.pac(plot=True, drive_precision = 0.1, n_values = 10, max_drive_freq = 7, method = 'ozkurt')\n", "pac_freqs" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7411590e", "metadata": {}, "source": [ "### Deriving tunings from PAC information\n", "\n", "By computing the most frequent phase and amplitude frequencies from the 'pac_freqs' lists, we can derive a series of ratios by coupling each phase with each amplitude frequencies" ] }, { "cell_type": "code", "execution_count": 3, "id": "7f317dfa", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[[18.0, 23.0, 42.0], [3.4, 3.1]]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from biotuner.biotuner_utils import pairs_most_frequent\n", "pac_frequent = pairs_most_frequent(pac_freqs, 3)\n", "pac_frequent" ] }, { "cell_type": "code", "execution_count": 4, "id": "78f625fb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1.3235294117647058,\n", " 1.4516129032258065,\n", " 1.5441176470588236,\n", " 1.6911764705882353,\n", " 1.6935483870967742,\n", " 1.8548387096774193]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from biotuner.biotuner_utils import rebound\n", "ratios = []\n", "for i in range(len(pac_frequent[0])):\n", " for j in range(len(pac_frequent[1])):\n", " ratios.append(rebound(pac_frequent[0][i]/pac_frequent[1][j]))\n", " \n", "ratios = sorted(ratios)\n", "ratios" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a4519268", "metadata": {}, "source": [ "Another approach to derive tuning based on the information of the Phase-Amplitude Coupling would be to compute the ratios of each pairs of phase/amplitude frequencies, and then to apply the 'scale_reduction' function to extract the most consonant intervals. This is what the pac_mode function does." ] }, { "cell_type": "code", "execution_count": 6, "id": "6b4c7209", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\User\\anaconda3\\envs\\biotuner\\lib\\site-packages\\numpy\\lib\\function_base.py:380: RuntimeWarning: Mean of empty slice.\n", " avg = a.mean(axis)\n", "c:\\Users\\User\\anaconda3\\envs\\biotuner\\lib\\site-packages\\numpy\\core\\_methods.py:189: RuntimeWarning: invalid value encountered in double_scalars\n", " ret = ret.dtype.type(ret / rcount)\n" ] }, { "data": { "text/plain": [ "[1.0294117647058825,\n", " 1.3709677419354838,\n", " 1.411290322580645,\n", " 1.4516129032258065,\n", " 1.6935483870967742,\n", " 1.7741935483870968]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from biotuner.scale_construction import pac_mode\n", "from biotuner.metrics import dyad_similarity\n", "pac_mode(pac_freqs, n=6, function=dyad_similarity)" ] }, { "cell_type": "code", "execution_count": 7, "id": "b69a5559", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1.0294117647058825,\n", " 1.1029411764705883,\n", " 1.3709677419354838,\n", " 1.397058823529412,\n", " 1.411290322580645,\n", " 1.4516129032258065,\n", " 1.6911764705882353,\n", " 1.6911764705882353,\n", " 1.6935483870967742,\n", " 1.7741935483870968]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pac_mode(pac_freqs, n=10)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "bfa204f5", "metadata": {}, "source": [ "#### Using coupled frequencies as generator interval\n", "\n", "This code analyzes phase amplitude coupling (PAC) and constructs a musical scale based on the frequency ratios associated with the PAC. \n", "\n", "First, the code calculates the frequency ratio between the two oscillatory signals that exhibit PAC, stored in the `pac_freqs` variable. The frequency ratio is then converted to a rational number using the `sp.Rational()` function and its denominator is limited to 1000 using `.limit_denominator()`. \n", "\n", "Next, the code generates the Stern-Brocot interval associated with the rational number using `gen_interval_to_stern_brocot()`. The interval represents a sequence of fractions that converge to the rational number and is used to determine the generator interval tuning. A generator interval is a specific type of musical interval that can be used to generate a scale. \n", "\n", "The number of steps in the interval is limited to 16 using `.limit_denominator()`, and the generator interval tuning is calculated based on the interval and number of steps using `generator_interval_tuning()`. The resulting `gen_int_tuning` variable contains the musical scale based on the PAC frequency ratio, with `limit_steps` number of steps in the scale and an octave of 2. The tuning is generated by sorting the generator interval tuning in ascending order using `sorted()`.\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "431184e6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "55/31\n" ] }, { "data": { "text/plain": [ "[[1.0,\n", " 1.0987148531753526,\n", " 1.2385512890340338,\n", " 1.3961850894565473,\n", " 1.5738813735691988,\n", " 1.7741935483870968],\n", " [1.0,\n", " 1.7741935483870968,\n", " 1.5738813735691988,\n", " 1.3961850894565473,\n", " 1.2385512890340338,\n", " 1.0987148531753526]]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Import the necessary functions from the biotuner.scale_construction module\n", "from biotuner.scale_construction import gen_interval_to_stern_brocot, generator_interval_tuning\n", "import sympy as sp\n", "from fractions import Fraction\n", "\n", "# Calculate the frequency ratio between the two oscillatory signals that exhibit phase amplitude coupling (stored in pac_freqs variable) and convert it to a rational number with a denominator limited to 1000\n", "ratio = rebound(pac_freqs[0][1]/pac_freqs[0][0])\n", "print(sp.Rational(ratio).limit_denominator(1000))\n", "\n", "# Set the limit on the number of steps in the interval to 16 and generate the Stern-Brocot interval based on the frequency ratio\n", "limit_steps = 16\n", "stern_brocot_ratio = gen_interval_to_stern_brocot(ratio)\n", "\n", "# Limit the number of steps in the interval to 16 and calculate the steps needed for the generator interval tuning\n", "steps = Fraction(stern_brocot_ratio).limit_denominator(16).denominator\n", "\n", "# Calculate the generator interval tuning based on the interval and number of steps, and sort the tuning in ascending order\n", "gen_int_tuning = sorted(generator_interval_tuning(interval = ratio, steps = steps, octave = 2))\n", "\n", "# Store the resulting musical scale in the gen_int_tuning variable\n", "gen_int_tuning\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9015e68f", "metadata": {}, "source": [ "## Deriving euclidian rhythms from PAC information\n", "\n", "This code constructs a musical scale based on the phase amplitude coupling (PAC) frequencies and uses it to generate a consonant rhythmic pattern. The PAC scale is generated using the pac_mode() function and the consonant rhythmic pattern is generated using the consonant_euclid() function. The resulting rhythm is represented as a list of strings and can be played using the Euclidean rhythm. This code could be useful for creating music that is based on the natural rhythms of biological systems" ] }, { "cell_type": "code", "execution_count": 14, "id": "ed31cc03", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\User\\anaconda3\\envs\\biotuner\\lib\\fractions.py:612: RuntimeWarning: overflow encountered in longlong_scalars\n", " self._denominator * other.numerator)\n" ] }, { "data": { "text/plain": [ "([[1, 0, 0],\n", " [1, 0, 0, 0],\n", " [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0],\n", " [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0],\n", " [1, 1, 1, 0],\n", " [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]],\n", " [[3], [4], [4, 4, 4], [3, 3, 3, 3], [1, 1, 2], [1, 1, 2, 1, 1, 2, 1, 1, 2]],\n", " ['None',\n", " 'None',\n", " 'None',\n", " 'It is periodic with four repetitions of E(1,3) = [100]. It is the (12/8)-time Fandago clapping pattern in the Flamenco music of southern Spain, where 1 denotes a loud clap and 0 soft clap.',\n", " 'It is the archetypal pattern of the Cumbia from Colombia, as well as a Calypso rhythm from Trinidad. It is also a thirteenth century Persian rhythm called Khalif-e-saghil, as well as the trochoid choreic rhythmic pattern of ancient Greece.',\n", " 'None'])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Import the necessary dictionaries and functions from the biotuner module\n", "from biotuner.dictionaries import *\n", "from biotuner.rhythm_construction import *\n", "\n", "# Generate a musical scale based on the phase amplitude coupling (PAC) frequencies using the pac_mode() function\n", "pac_scale = pac_mode(pac_freqs, 10, function=dyad_similarity)\n", "\n", "# Generate a consonant Euclidean rhythm based on the PAC scale using the consonant_euclid() function\n", "euclid_final, cons = consonant_euclid(pac_scale, n_steps_down = 3, limit_denom = 4, \n", " limit_cons =1, limit_denom_final = 100)\n", "\n", "# Generate a list of interval vectors based on the Euclidean rhythm\n", "interval_vectors = [interval_vector(x) for x in euclid_final]\n", "\n", "# Convert the list of interval vectors to a list of strings using the interval_vec_to_string() function\n", "strings = interval_vec_to_string(interval_vectors)\n", "\n", "# Convert the rhythmic pattern strings to their corresponding reference rhythms based on the dict_rhythms dictionary using the euclid_string_to_referent() function\n", "euclid_referent = euclid_string_to_referent(strings, dict_rhythms)\n", "\n", "# Store the resulting Euclidean rhythm, interval vectors, and reference rhythms in the euclid_final, interval_vectors, and euclid_referent variables, respectively\n", "euclid_final, interval_vectors, euclid_referent\n" ] } ], "metadata": { "kernelspec": { "display_name": "biotuner", "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.15" }, "vscode": { "interpreter": { "hash": "78920748c27eb6b6a66039cd6eaf38ba7b9251be5db3fee90bd349c5848cd2ed" } } }, "nbformat": 4, "nbformat_minor": 5 }