diff --git a/docs/tutorials/helfand_dev_toy_system.ipynb b/docs/tutorials/helfand_dev_toy_system.ipynb new file mode 100644 index 0000000..9d62c6a --- /dev/null +++ b/docs/tutorials/helfand_dev_toy_system.ipynb @@ -0,0 +1,937 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1e827f45-13a0-4d37-bfdb-e95567128a81", + "metadata": {}, + "source": [ + "#### This is more of a dev notebook for testing and debugging but some may find it useful, so it is provided here for now." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fbb0e900-b200-4983-be2e-edc2ba296585", + "metadata": {}, + "outputs": [], + "source": [ + "import MDAnalysis as mda\n", + "import numpy as np\n", + "\n", + "from MDAnalysis.units import constants\n", + "from MDAnalysis.transformations import set_dimensions" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e11f0a23-1dab-4bf6-8731-442c4937dd65", + "metadata": {}, + "outputs": [], + "source": [ + "# prev code, not used directly, only here for reference\n", + "\n", + "# Step trajectory of unit velocities i.e. v = 0 at t = 0,\n", + "# v = 1 at t = 1, v = 2 at t = 2, etc. for all components x, y, z\n", + "def step_vtraj(NSTEP):\n", + " v = np.arange(NSTEP)\n", + " velocities = np.vstack([v, v, v]).T\n", + " # NSTEP frames x 1 atom x 3 dimensions, where NSTEP = 5001\n", + " velocities_reshape = velocities.reshape([NSTEP, 1, 3])\n", + " u = mda.Universe.empty(1, n_frames=NSTEP, velocities=True)\n", + " for i, ts in enumerate(u.trajectory):\n", + " u.atoms.velocities = velocities_reshape[i]\n", + " return u\n", + "\n", + "# Position trajectory corresponding to unit velocity trajectory\n", + "def step_vtraj_pos(NSTEP):\n", + " x = np.arange(NSTEP).astype(np.float64)\n", + " # Since initial position and velocity are 0 and acceleration is 1,\n", + " # position = 1/2t^2\n", + " x *= x / 2\n", + " positions = np.vstack([x, x, x]).T\n", + " # NSTEP frames x 1 atom x 3 dimensions, where NSTEP = 5001\n", + " positions_reshape = positions.reshape([NSTEP, 1, 3])\n", + " u_pos = mda.Universe.empty(1)\n", + " u_pos.load_new(positions_reshape)\n", + " return u_pos" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b8c0453a-1436-4838-bcee-ada0190b6d6b", + "metadata": {}, + "outputs": [], + "source": [ + "# debugging version of Helfand viscosity class with some extra print statements\n", + "from MDAnalysis.analysis.base import AnalysisBase\n", + "from MDAnalysis.core.groups import UpdatingAtomGroup\n", + "from MDAnalysis.exceptions import NoDataError\n", + "\n", + "class ViscosityHelfand(AnalysisBase):\n", + " \"\"\"\n", + " Class to calculate viscosity using the Einstein-Helfand approach.\n", + "\n", + " Parameters\n", + " ----------\n", + " atomgroup : AtomGroup\n", + " An MDAnalysis :class:`~MDAnalysis.core.groups.AtomGroup`.\n", + " Note that :class:`UpdatingAtomGroup` instances are not accepted.\n", + " temp_avg : float (optional, default 300)\n", + " Average temperature over the course of the simulation, in Kelvin.\n", + " dim_type : {'xyz', 'xy', 'yz', 'xz', 'x', 'y', 'z'}\n", + " Desired dimensions to be included in the viscosity calculation.\n", + " Defaults to 'xyz'.\n", + "\n", + " Attributes\n", + " ----------\n", + " atomgroup : :class:`~MDAnalysis.core.groups.AtomGroup`\n", + " The atoms to which this analysis is applied\n", + " dim_fac : int\n", + " Dimensionality :math:`d` of the viscosity computation.\n", + " results.timeseries : :class:`numpy.ndarray`\n", + " The averaged viscosity over all the particles with respect to lag-time.\n", + " Obtained after calling :meth:`ViscosityHelfand.run`\n", + " results.visc_by_particle : :class:`numpy.ndarray`\n", + " The viscosity of each individual particle with respect to lag-time.\n", + " start : Optional[int]\n", + " The first frame of the trajectory used to compute the analysis.\n", + " stop : Optional[int]\n", + " The frame to stop at for the analysis.\n", + " step : Optional[int]\n", + " Number of frames to skip between each analyzed frame.\n", + " n_frames : int\n", + " Number of frames analysed in the trajectory.\n", + " n_particles : int\n", + " Number of particles viscosity was calculated over.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " atomgroup: \"AtomGroup\",\n", + " temp_avg: float = 300.0,\n", + " dim_type: str = \"xyz\",\n", + " **kwargs,\n", + " ) -> None:\n", + " # the below line must be kept to initialize the AnalysisBase class!\n", + " super().__init__(atomgroup.universe.trajectory, **kwargs)\n", + " # after this you will be able to access `self.results`\n", + " # `self.results` is a dictionary-like object\n", + " # that can should used to store and retrieve results\n", + " # See more at the MDAnalysis documentation:\n", + " # https://docs.mdanalysis.org/stable/documentation_pages/analysis/base.html?highlight=results#MDAnalysis.analysis.base.Results\n", + "\n", + " if isinstance(atomgroup, UpdatingAtomGroup):\n", + " raise TypeError(\n", + " \"UpdatingAtomGroups are not valid for viscosity computation\"\n", + " )\n", + "\n", + " # args\n", + " self.temp_avg = temp_avg\n", + " self.dim_type = dim_type.lower()\n", + " self._dim, self.dim_fac = self._parse_dim_type(self.dim_type)\n", + " # self.fft = fft # consider whether fft is possible later\n", + "\n", + " # local\n", + " self.atomgroup = atomgroup\n", + " self.n_particles = len(self.atomgroup)\n", + "\n", + " def _prepare(self):\n", + " \"\"\"\n", + " Set up viscosity, mass, velocity, and position arrays\n", + " before the analysis loop begins\n", + " \"\"\"\n", + " # 2D viscosity array of frames x particles\n", + " self.results.visc_by_particle = np.zeros(\n", + " (self.n_frames, self.n_particles)\n", + " )\n", + "\n", + " self._volumes = np.zeros((self.n_frames))\n", + "\n", + " self._masses = self.atomgroup.masses\n", + " self._masses_rs = self._masses.reshape((1, len(self._masses), 1))\n", + "\n", + " # 3D arrays of frames x particles x dimensionality\n", + " # for velocities and positions\n", + " self._velocities = np.zeros(\n", + " (self.n_frames, self.n_particles, self.dim_fac)\n", + " )\n", + "\n", + " self._positions = np.zeros(\n", + " (self.n_frames, self.n_particles, self.dim_fac)\n", + " )\n", + " # self.results.timeseries not set here\n", + "\n", + " @staticmethod\n", + " def _parse_dim_type(dim_str):\n", + " r\"\"\"Sets up the desired dimensionality of the calculation.\"\"\"\n", + " keys = {\n", + " \"x\": [0],\n", + " \"y\": [1],\n", + " \"z\": [2],\n", + " \"xy\": [0, 1],\n", + " \"xz\": [0, 2],\n", + " \"yz\": [1, 2],\n", + " \"xyz\": [0, 1, 2],\n", + " }\n", + "\n", + " try:\n", + " _dim = keys[dim_str]\n", + " except KeyError:\n", + " raise ValueError(\n", + " \"invalid dim_type: {} specified, please specify one of xyz, \"\n", + " \"xy, xz, yz, x, y, z\".format(dim_str)\n", + " )\n", + "\n", + " return _dim, len(_dim)\n", + "\n", + " def _single_frame(self):\n", + " \"\"\"\n", + " Constructs arrays of velocities and positions\n", + " for viscosity computation.\n", + " \"\"\"\n", + " # This runs once for each frame of the trajectory\n", + "\n", + " # The trajectory positions update automatically\n", + " # You can access the frame number using self._frame_index\n", + "\n", + " # trajectory must have velocity and position information\n", + " if not (\n", + " self._ts.has_velocities\n", + " and self._ts.has_positions\n", + " and self._ts.volume != 0\n", + " ):\n", + " raise NoDataError(\n", + " \"Helfand viscosity computation requires \"\n", + " \"velocities, positions, and box volume in the trajectory\"\n", + " )\n", + "\n", + " # fill volume array\n", + " self._volumes[self._frame_index] = self._ts.volume\n", + "\n", + " # set shape of velocity array\n", + " self._velocities[self._frame_index] = self.atomgroup.velocities[\n", + " :, self._dim\n", + " ]\n", + "\n", + " # set shape of position array\n", + " self._positions[self._frame_index] = self.atomgroup.positions[\n", + " :, self._dim\n", + " ]\n", + "\n", + " def _conclude(self):\n", + " r\"\"\"Calculates viscosity via the simple \"windowed\" algorithm.\"\"\"\n", + " self._vol_avg = np.average(self._volumes)\n", + "\n", + " lagtimes = np.arange(1, self.n_frames)\n", + "\n", + " # iterate through all possible lagtimes from 1 to number of frames\n", + " for lag in lagtimes:\n", + " # get difference of momentum * position shifted by \"lag\" frames\n", + " diff = (\n", + " self._masses_rs\n", + " * self._velocities[:-lag, :, :]\n", + " * self._positions[:-lag, :, :]\n", + " - self._masses_rs\n", + " * self._velocities[lag:, :, :]\n", + " * self._positions[lag:, :, :]\n", + " )\n", + " print(f\"Diff: {diff}\")\n", + "\n", + " # square and sum each x(, y, z) diff per particle\n", + " sq_diff = np.square(diff).sum(axis=-1)\n", + "\n", + " print(f\"Sq_diff: {sq_diff}\")\n", + "\n", + " # average over # frames\n", + " # update viscosity by particle array\n", + " self.results.visc_by_particle[lag, :] = np.mean(sq_diff, axis=0)\n", + "\n", + " # divide by 2, boltzman constant, vol_avg, and temp_avg\n", + " self.results.visc_by_particle = self.results.visc_by_particle / (\n", + " 2\n", + " * constants[\"Boltzmann_constant\"]\n", + " * self._vol_avg\n", + " * self.temp_avg\n", + " )\n", + " print(f\"visc_by_particle: {self.results.visc_by_particle}\")\n", + " # average over # particles and update results array\n", + " self.results.timeseries = self.results.visc_by_particle.mean(axis=1)\n", + "\n", + " print(self.results.timeseries.shape)\n", + " print(self.results.timeseries.dtype)\n", + " print(f\"results.timeseries: {self.results.timeseries}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c9a86cb5-ab99-4e3b-8f00-14d62d3b5936", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[16.]\n", + "Positions: [[0. 0. 0.]]\n", + "Velocities: [[0. 0. 0.]]\n", + "Volume: 8.0\n", + "Positions: [[0. 0. 0.]]\n", + "Positions: [[0.5 0.5 0.5]]\n", + "Velocities: [[1. 1. 1.]]\n", + "Volume: 8.0\n", + "Positions: [[1. 1. 1.]]\n", + "Positions: [[2. 2. 2.]]\n", + "Velocities: [[2. 2. 2.]]\n", + "Volume: 8.0\n", + "Positions: [[2. 2. 2.]]\n", + "Positions: [[4.5 4.5 4.5]]\n", + "Velocities: [[3. 3. 3.]]\n", + "Volume: 8.0\n", + "Positions: [[3. 3. 3.]]\n", + "Positions: [[8. 8. 8.]]\n", + "Velocities: [[4. 4. 4.]]\n", + "Volume: 8.0\n", + "Positions: [[4. 4. 4.]]\n", + "Positions: [[12.5 12.5 12.5]]\n", + "Velocities: [[5. 5. 5.]]\n", + "Volume: 8.0\n", + "Positions: [[5. 5. 5.]]\n", + "Positions: [[18. 18. 18.]]\n", + "Velocities: [[6. 6. 6.]]\n", + "Volume: 8.0\n", + "Positions: [[6. 6. 6.]]\n", + "Positions: [[24.5 24.5 24.5]]\n", + "Velocities: [[7. 7. 7.]]\n", + "Volume: 8.0\n", + "Positions: [[7. 7. 7.]]\n", + "Positions: [[32. 32. 32.]]\n", + "Velocities: [[8. 8. 8.]]\n", + "Volume: 8.0\n", + "Positions: [[8. 8. 8.]]\n", + "Positions: [[40.5 40.5 40.5]]\n", + "Velocities: [[9. 9. 9.]]\n", + "Volume: 8.0\n", + "Positions: [[9. 9. 9.]]\n" + ] + } + ], + "source": [ + "# Step trajectory of unit velocities for a single particle i.e. v = 0 at t = 0,\n", + "# v = 1 at t = 1, v = 2 at t = 2, etc. for all components x, y, z\n", + "# contains additional info needed: masses, positions, box volume\n", + "def step_vtraj_full(NSTEP):\n", + " # Set up unit velocities\n", + " v = np.arange(NSTEP)\n", + " velocities = np.vstack([v, v, v]).T\n", + " # NSTEP frames x 1 atom x 3 dimensions, where NSTEP = 5001\n", + " velocities_reshape = velocities.reshape([NSTEP, 1, 3])\n", + "\n", + " # Positions derived from unit velocity setup\n", + " x = np.arange(NSTEP).astype(np.float64)\n", + " # Since initial position and velocity are 0 and acceleration is 1,\n", + " # position = 1/2t^2\n", + " x *= x / 2\n", + " positions = np.vstack([x, x, x]).T\n", + " # NSTEP frames x 1 atom x 3 dimensions, where NSTEP = 5001\n", + " positions_reshape = positions.reshape([NSTEP, 1, 3])\n", + " u = mda.Universe.empty(1, n_frames=NSTEP, velocities=True)\n", + "\n", + " dim = [2, 2, 2, 90, 90, 90]\n", + " for i, ts in enumerate(u.trajectory):\n", + " u.atoms.velocities = velocities_reshape[i]\n", + " u.atoms.positions = positions_reshape[i]\n", + " set_dimensions(dim)(u.trajectory.ts)\n", + "\n", + " u.add_TopologyAttr('masses', [16.0])\n", + " return u\n", + "\n", + "# verify toy system works\n", + "test_u = step_vtraj_full(10)\n", + "\n", + "print(test_u.atoms.masses)\n", + "\n", + "vol_used = 0.0\n", + "for ts in test_u.trajectory:\n", + " print(f\"Positions: {test_u.atoms.positions}\")\n", + " print(f\"Velocities: {test_u.atoms.velocities}\")\n", + " print(f\"Volume: {ts.volume}\")\n", + " print(f\"Positions: {ts.velocities}\")\n", + " vol_used = ts.volume" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e08a4609-d2a2-4c39-9e1a-6c3075318672", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "Curr + lag: 0.0\n", + "Curr: 0.0\n", + "Helf_diff 0: 0.0\n", + "Curr + lag: 0.5\n", + "Curr: 0.5\n", + "Helf_diff 1: 0.0\n", + "Curr + lag: 2.0\n", + "Curr: 2.0\n", + "Helf_diff 2: 0.0\n", + "Curr + lag: 4.5\n", + "Curr: 4.5\n", + "Helf_diff 3: 0.0\n", + "Curr + lag: 8.0\n", + "Curr: 8.0\n", + "Helf_diff 4: 0.0\n", + "Curr + lag: 12.5\n", + "Curr: 12.5\n", + "Helf_diff 5: 0.0\n", + "Curr + lag: 18.0\n", + "Curr: 18.0\n", + "Helf_diff 6: 0.0\n", + "Curr + lag: 24.5\n", + "Curr: 24.5\n", + "Helf_diff 7: 0.0\n", + "Curr + lag: 32.0\n", + "Curr: 32.0\n", + "Helf_diff 8: 0.0\n", + "Curr + lag: 40.5\n", + "Curr: 40.5\n", + "Helf_diff 9: 0.0\n", + "Sum lag 0: 0.0\n", + "vis_helf lag 0: 0.0\n", + "1\n", + "Curr + lag: 0.5\n", + "Curr: 0.0\n", + "Helf_diff 0: 64.0\n", + "Curr + lag: 2.0\n", + "Curr: 0.5\n", + "Helf_diff 1: 3136.0\n", + "Curr + lag: 4.5\n", + "Curr: 2.0\n", + "Helf_diff 2: 23104.0\n", + "Curr + lag: 8.0\n", + "Curr: 4.5\n", + "Helf_diff 3: 87616.0\n", + "Curr + lag: 12.5\n", + "Curr: 8.0\n", + "Helf_diff 4: 238144.0\n", + "Curr + lag: 18.0\n", + "Curr: 12.5\n", + "Helf_diff 5: 529984.0\n", + "Curr + lag: 24.5\n", + "Curr: 18.0\n", + "Helf_diff 6: 1032256.0\n", + "Curr + lag: 32.0\n", + "Curr: 24.5\n", + "Helf_diff 7: 1827904.0\n", + "Curr + lag: 40.5\n", + "Curr: 32.0\n", + "Helf_diff 8: 3013696.0\n", + "Sum lag 1: 6755904.0\n", + "vis_helf lag 1: 56426.98120793744\n", + "2\n", + "Curr + lag: 2.0\n", + "Curr: 0.0\n", + "Helf_diff 0: 4096.0\n", + "Curr + lag: 4.5\n", + "Curr: 0.5\n", + "Helf_diff 1: 43264.0\n", + "Curr + lag: 8.0\n", + "Curr: 2.0\n", + "Helf_diff 2: 200704.0\n", + "Curr + lag: 12.5\n", + "Curr: 4.5\n", + "Helf_diff 3: 614656.0\n", + "Curr + lag: 18.0\n", + "Curr: 8.0\n", + "Helf_diff 4: 1478656.0\n", + "Curr + lag: 24.5\n", + "Curr: 12.5\n", + "Helf_diff 5: 3041536.0\n", + "Curr + lag: 32.0\n", + "Curr: 18.0\n", + "Helf_diff 6: 5607424.0\n", + "Curr + lag: 40.5\n", + "Curr: 24.5\n", + "Helf_diff 7: 9535744.0\n", + "Sum lag 2: 20526080.0\n", + "vis_helf lag 2: 192868.7591973921\n", + "3\n", + "Curr + lag: 4.5\n", + "Curr: 0.0\n", + "Helf_diff 0: 46656.0\n", + "Curr + lag: 8.0\n", + "Curr: 0.5\n", + "Helf_diff 1: 254016.0\n", + "Curr + lag: 12.5\n", + "Curr: 2.0\n", + "Helf_diff 2: 876096.0\n", + "Curr + lag: 18.0\n", + "Curr: 4.5\n", + "Helf_diff 3: 2286144.0\n", + "Curr + lag: 24.5\n", + "Curr: 8.0\n", + "Helf_diff 4: 4981824.0\n", + "Curr + lag: 32.0\n", + "Curr: 12.5\n", + "Helf_diff 5: 9585216.0\n", + "Curr + lag: 40.5\n", + "Curr: 18.0\n", + "Helf_diff 6: 16842816.0\n", + "Sum lag 3: 34872768.0\n", + "vis_helf lag 3: 374484.8362355749\n", + "4\n", + "Curr + lag: 8.0\n", + "Curr: 0.0\n", + "Helf_diff 0: 262144.0\n", + "Curr + lag: 12.5\n", + "Curr: 0.5\n", + "Helf_diff 1: 984064.0\n", + "Curr + lag: 18.0\n", + "Curr: 2.0\n", + "Helf_diff 2: 2768896.0\n", + "Curr + lag: 24.5\n", + "Curr: 4.5\n", + "Helf_diff 3: 6390784.0\n", + "Curr + lag: 32.0\n", + "Curr: 8.0\n", + "Helf_diff 4: 12845056.0\n", + "Curr + lag: 40.5\n", + "Curr: 12.5\n", + "Helf_diff 5: 23348224.0\n", + "Sum lag 4: 46599168.0\n", + "vis_helf lag 4: 583811.665405885\n", + "5\n", + "Curr + lag: 12.5\n", + "Curr: 0.0\n", + "Helf_diff 0: 1000000.0\n", + "Curr + lag: 18.0\n", + "Curr: 0.5\n", + "Helf_diff 1: 2958400.0\n", + "Curr + lag: 24.5\n", + "Curr: 2.0\n", + "Helf_diff 2: 7182400.0\n", + "Curr + lag: 32.0\n", + "Curr: 4.5\n", + "Helf_diff 3: 15054400.0\n", + "Curr + lag: 40.5\n", + "Curr: 8.0\n", + "Helf_diff 4: 28302400.0\n", + "Sum lag 5: 54497600.0\n", + "vis_helf lag 5: 819319.3822676942\n", + "6\n", + "Curr + lag: 18.0\n", + "Curr: 0.0\n", + "Helf_diff 0: 2985984.0\n", + "Curr + lag: 24.5\n", + "Curr: 0.5\n", + "Helf_diff 1: 7485696.0\n", + "Curr + lag: 32.0\n", + "Curr: 2.0\n", + "Helf_diff 2: 16257024.0\n", + "Curr + lag: 40.5\n", + "Curr: 4.5\n", + "Helf_diff 3: 31539456.0\n", + "Sum lag 6: 58268160.0\n", + "vis_helf lag 6: 1095007.689721088\n", + "7\n", + "Curr + lag: 24.5\n", + "Curr: 0.0\n", + "Helf_diff 0: 7529536.0\n", + "Curr + lag: 32.0\n", + "Curr: 0.5\n", + "Helf_diff 1: 16711744.0\n", + "Curr + lag: 40.5\n", + "Curr: 2.0\n", + "Helf_diff 2: 33269824.0\n", + "Sum lag 7: 57511104.0\n", + "vis_helf lag 7: 1441040.8960765589\n", + "8\n", + "Curr + lag: 32.0\n", + "Curr: 0.0\n", + "Helf_diff 0: 16777216.0\n", + "Curr + lag: 40.5\n", + "Curr: 0.5\n", + "Helf_diff 1: 33918976.0\n", + "Sum lag 8: 50696192.0\n", + "vis_helf lag 8: 1905422.106329656\n", + "9\n", + "Curr + lag: 40.5\n", + "Curr: 0.0\n", + "Helf_diff 0: 34012224.0\n", + "Sum lag 9: 34012224.0\n", + "vis_helf lag 9: 2556706.56664059\n", + "(10,)\n", + "float64\n", + "[ 0. 56426.98120794 192868.75919739 374484.83623557\n", + " 583811.66540588 819319.38226769 1095007.68972109 1441040.89607656\n", + " 1905422.10632966 2556706.56664059]\n" + ] + } + ], + "source": [ + "def characteristic_poly_helfand(total_frames, n_dim, temp_avg=300.0, vol_avg=8.0):\n", + " result = np.zeros(total_frames)\n", + "\n", + " for lag in range(total_frames):\n", + " sum = 0\n", + " sum = np.dtype('float64').type(sum)\n", + "\n", + " print(lag)\n", + " for curr in range((total_frames - lag)):\n", + " # mass * velocities * positions\n", + " print(f\"Curr + lag: {1/2 * ((curr + lag) ** 2)}\")\n", + " print(f\"Curr: {1/2 * (curr ** 2)}\")\n", + " helf_diff = (16.0 * (curr + lag) * 1/2 * ((curr + lag) ** 2)\n", + " - 16.0 * curr * 1/2 * (curr ** 2))\n", + " sum += helf_diff ** 2\n", + " print(f\"Helf_diff {curr}: {helf_diff ** 2}\")\n", + " print(f\"Sum lag {lag}: {sum}\")\n", + " vis_helf = sum * n_dim / (\n", + " (total_frames - lag)\n", + " * 2\n", + " * constants[\"Boltzmann_constant\"]\n", + " * vol_avg\n", + " * temp_avg\n", + " )\n", + " print(f\"vis_helf lag {lag}: {vis_helf}\")\n", + " result[lag] = vis_helf\n", + " print(result.shape)\n", + " print(result.dtype)\n", + " return result\n", + "\n", + "test_res = characteristic_poly_helfand(10, 3)\n", + "print(test_res)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c3a01c29-d706-49f7-8960-ffc9286997a7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lag: 0\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "curr: 5\n", + "curr: 6\n", + "curr: 7\n", + "curr: 8\n", + "curr: 9\n", + "lag: 1\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "curr: 5\n", + "curr: 6\n", + "curr: 7\n", + "curr: 8\n", + "lag: 2\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "curr: 5\n", + "curr: 6\n", + "curr: 7\n", + "lag: 3\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "curr: 5\n", + "curr: 6\n", + "lag: 4\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "curr: 5\n", + "lag: 5\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "curr: 4\n", + "lag: 6\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "curr: 3\n", + "lag: 7\n", + "curr: 0\n", + "curr: 1\n", + "curr: 2\n", + "lag: 8\n", + "curr: 0\n", + "curr: 1\n", + "lag: 9\n", + "curr: 0\n", + "[ 0. 56426.98120794 192868.75919739 374484.83623557\n", + " 583811.66540588 819319.38226769 1095007.68972109 1441040.89607656\n", + " 1905422.10632966 2556706.56664059]\n" + ] + } + ], + "source": [ + "# Expected viscosity function results for unit velocity trajectory\n", + "def characteristic_poly_helfand(total_frames, n_dim, temp_avg=300.0, vol_avg=8.0):\n", + " result = np.zeros(total_frames)\n", + "\n", + " for lag in range(total_frames):\n", + " sum = 0\n", + " sum = np.dtype('float64').type(sum)\n", + "\n", + " print(f\"lag: {lag}\")\n", + " for curr in range((total_frames - lag)):\n", + " # mass * velocities * positions\n", + " print(f\"curr: {curr}\")\n", + " helf_diff = (16.0 * (curr + lag) * 1/2 * ((curr + lag) ** 2)\n", + " - 16.0 * curr * 1/2 * (curr ** 2))\n", + " sum += helf_diff ** 2\n", + " vis_helf = sum * n_dim / (\n", + " (total_frames - lag)\n", + " * 2\n", + " * constants[\"Boltzmann_constant\"]\n", + " * vol_avg\n", + " * temp_avg\n", + " )\n", + " result[lag] = vis_helf\n", + " return result\n", + "\n", + "test_res = characteristic_poly_helfand(10, 3)\n", + "print(test_res)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ad7f9897-d28b-4615-a55b-7a6ba1b5500c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Diff: [[[ -8. -8. -8.]]\n", + "\n", + " [[ -56. -56. -56.]]\n", + "\n", + " [[ -152. -152. -152.]]\n", + "\n", + " [[ -296. -296. -296.]]\n", + "\n", + " [[ -488. -488. -488.]]\n", + "\n", + " [[ -728. -728. -728.]]\n", + "\n", + " [[-1016. -1016. -1016.]]\n", + "\n", + " [[-1352. -1352. -1352.]]\n", + "\n", + " [[-1736. -1736. -1736.]]]\n", + "Sq_diff: [[1.920000e+02]\n", + " [9.408000e+03]\n", + " [6.931200e+04]\n", + " [2.628480e+05]\n", + " [7.144320e+05]\n", + " [1.589952e+06]\n", + " [3.096768e+06]\n", + " [5.483712e+06]\n", + " [9.041088e+06]]\n", + "Diff: [[[ -64. -64. -64.]]\n", + "\n", + " [[ -208. -208. -208.]]\n", + "\n", + " [[ -448. -448. -448.]]\n", + "\n", + " [[ -784. -784. -784.]]\n", + "\n", + " [[-1216. -1216. -1216.]]\n", + "\n", + " [[-1744. -1744. -1744.]]\n", + "\n", + " [[-2368. -2368. -2368.]]\n", + "\n", + " [[-3088. -3088. -3088.]]]\n", + "Sq_diff: [[1.2288000e+04]\n", + " [1.2979200e+05]\n", + " [6.0211200e+05]\n", + " [1.8439680e+06]\n", + " [4.4359680e+06]\n", + " [9.1246080e+06]\n", + " [1.6822272e+07]\n", + " [2.8607232e+07]]\n", + "Diff: [[[ -216. -216. -216.]]\n", + "\n", + " [[ -504. -504. -504.]]\n", + "\n", + " [[ -936. -936. -936.]]\n", + "\n", + " [[-1512. -1512. -1512.]]\n", + "\n", + " [[-2232. -2232. -2232.]]\n", + "\n", + " [[-3096. -3096. -3096.]]\n", + "\n", + " [[-4104. -4104. -4104.]]]\n", + "Sq_diff: [[ 139968.]\n", + " [ 762048.]\n", + " [ 2628288.]\n", + " [ 6858432.]\n", + " [14945472.]\n", + " [28755648.]\n", + " [50528448.]]\n", + "Diff: [[[ -512. -512. -512.]]\n", + "\n", + " [[ -992. -992. -992.]]\n", + "\n", + " [[-1664. -1664. -1664.]]\n", + "\n", + " [[-2528. -2528. -2528.]]\n", + "\n", + " [[-3584. -3584. -3584.]]\n", + "\n", + " [[-4832. -4832. -4832.]]]\n", + "Sq_diff: [[ 786432.]\n", + " [ 2952192.]\n", + " [ 8306688.]\n", + " [19172352.]\n", + " [38535168.]\n", + " [70044672.]]\n", + "Diff: [[[-1000. -1000. -1000.]]\n", + "\n", + " [[-1720. -1720. -1720.]]\n", + "\n", + " [[-2680. -2680. -2680.]]\n", + "\n", + " [[-3880. -3880. -3880.]]\n", + "\n", + " [[-5320. -5320. -5320.]]]\n", + "Sq_diff: [[ 3000000.]\n", + " [ 8875200.]\n", + " [21547200.]\n", + " [45163200.]\n", + " [84907200.]]\n", + "Diff: [[[-1728. -1728. -1728.]]\n", + "\n", + " [[-2736. -2736. -2736.]]\n", + "\n", + " [[-4032. -4032. -4032.]]\n", + "\n", + " [[-5616. -5616. -5616.]]]\n", + "Sq_diff: [[ 8957952.]\n", + " [22457088.]\n", + " [48771072.]\n", + " [94618368.]]\n", + "Diff: [[[-2744. -2744. -2744.]]\n", + "\n", + " [[-4088. -4088. -4088.]]\n", + "\n", + " [[-5768. -5768. -5768.]]]\n", + "Sq_diff: [[22588608.]\n", + " [50135232.]\n", + " [99809472.]]\n", + "Diff: [[[-4096. -4096. -4096.]]\n", + "\n", + " [[-5824. -5824. -5824.]]]\n", + "Sq_diff: [[5.03316480e+07]\n", + " [1.01756928e+08]]\n", + "Diff: [[[-5832. -5832. -5832.]]]\n", + "Sq_diff: [[1.02036672e+08]]\n", + "visc_by_particle: [[ 0. ]\n", + " [ 56426.98120794]\n", + " [ 192868.75919739]\n", + " [ 374484.83623557]\n", + " [ 583811.66540588]\n", + " [ 819319.38226769]\n", + " [1095007.68972109]\n", + " [1441040.89607656]\n", + " [1905422.10632966]\n", + " [2556706.56664059]]\n", + "(10,)\n", + "float64\n", + "results.timeseries: [ 0. 56426.98120794 192868.75919739 374484.83623557\n", + " 583811.66540588 819319.38226769 1095007.68972109 1441040.89607656\n", + " 1905422.10632966 2556706.56664059]\n" + ] + }, + { + "data": { + "text/plain": [ + "<__main__.ViscosityHelfand at 0x7f0c60037250>" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_class = ViscosityHelfand(test_u.atoms)\n", + "test_class.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9ed88557-8628-4549-9d54-6a2ba8238c0c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ True, True, True, True, True, True, True, False, True,\n", + " True])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_res == test_class.results.timeseries" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/vacf_doc_example.ipynb b/docs/tutorials/vacf_doc_example.ipynb new file mode 100644 index 0000000..cbacc3c --- /dev/null +++ b/docs/tutorials/vacf_doc_example.ipynb @@ -0,0 +1,83 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ffdb2da6-f928-4a74-b321-c3fcc016b913", + "metadata": {}, + "source": [ + "## Basic usage example from the VACF docs page" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "296147b9-166a-4dbd-9726-8fee6c719e44", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "import MDAnalysis as mda\n", + "from transport_analysis.velocityautocorr import VelocityAutocorr\n", + "\n", + "# test data for this example\n", + "from MDAnalysis.tests.datafiles import PRM_NCBOX, TRJ_NCBOX" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15a5efca-ba4f-4fe1-8bab-42062ad7ab87", + "metadata": {}, + "outputs": [], + "source": [ + "u = mda.Universe(PRM_NCBOX, TRJ_NCBOX)\n", + "ag = u.select_atoms(\"resname WAT and resid 1-5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1fe56632-4e5c-45ea-9789-0188fae0d992", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([275.62075467, -18.42008255, -23.94383428, 41.41415381,\n", + " -2.3164344 , -35.66393559, -22.66874897, -3.97575003,\n", + " 6.57888933, -5.29065096])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wat_vacf = VelocityAutocorr(ag).run()\n", + "wat_vacf.results.timeseries" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/vacf_testing_examples.ipynb b/docs/tutorials/vacf_testing_examples.ipynb new file mode 100644 index 0000000..af6b630 --- /dev/null +++ b/docs/tutorials/vacf_testing_examples.ipynb @@ -0,0 +1,286 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5bc2ea6e-8449-4160-9d7b-6181da09c487", + "metadata": {}, + "source": [ + "## Calculation Testing Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "54857ea4-5d70-4a91-843f-dace861c3e0a", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "import MDAnalysis as mda\n", + "from transport_analysis.velocityautocorr import VelocityAutocorr as VACF\n", + "\n", + "# needed for the test examples in this notebook\n", + "import numpy as np\n", + "\n", + "# test data for this example\n", + "from MDAnalysis.tests.datafiles import PRM_NCBOX, TRJ_NCBOX" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8b59ebc1-20f7-497d-864f-75e8c3a17382", + "metadata": {}, + "outputs": [], + "source": [ + "# test data with velocities\n", + "u = mda.Universe(PRM_NCBOX, TRJ_NCBOX)\n", + "ag_vels = u.select_atoms(\"name O and resname WAT and resid 1-10\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "a1753ee3-7db9-405f-82eb-1486d23e7916", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v:\n", + "[ 4.22902895e+01 -2.69143315e+00 6.98534787e-01 2.97003597e+00\n", + " 6.34654795e-01 1.23400236e+00 -2.78565552e+00 7.25828978e-01\n", + " -1.14432591e-02 -6.46827198e+00]\n", + "float64\n" + ] + } + ], + "source": [ + "# confirm that analysis runs for test data with velocities (PRM_NCBOX, TRJ_NCBOX)\n", + "v = VACF(ag_vels, fft=True)\n", + "v.run()\n", + "\n", + "print(\"v:\")\n", + "print(v.results.timeseries)\n", + "\n", + "# confirm analysis uses float64\n", + "print(v.results.timeseries.dtype)" + ] + }, + { + "cell_type": "markdown", + "id": "871875ee-0424-4869-86b9-3ec230063251", + "metadata": {}, + "source": [ + "### Unit Velocity Trajectory Tests" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "d1126928-b847-4b7b-bde3-0fd8d7f85a85", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v_simple:\n", + "[ 8.5500000e+01 8.0000000e+01 7.3500000e+01 6.6000000e+01\n", + " 5.7500000e+01 4.8000000e+01 3.7500000e+01 2.6000000e+01\n", + " 1.3500000e+01 -1.0658141e-14]\n", + "float64\n", + "poly:\n", + "[85.5 80. 73.5 66. 57.5 48. 37.5 26. 13.5 0. ]\n", + "float64\n", + "v_window:\n", + "[85.5 80. 73.5 66. 57.5 48. 37.5 26. 13.5 0. ]\n", + "float64\n" + ] + } + ], + "source": [ + "# set unit velocity trajectory to have 10 frames\n", + "NSTEP = 10\n", + "\n", + "# Step trajectory of unit velocities for a single particle i.e. v = 0 at t = 0,\n", + "# v = 1 at t = 1, v = 2 at t = 2, etc. for all components x, y, z\n", + "v_test = np.arange(NSTEP)\n", + "velocities = np.vstack([v_test, v_test, v_test]).T\n", + "# NSTEP frames x 1 atom x 3 dimensions, where NSTEP = 10\n", + "velocities_reshape = velocities.reshape([NSTEP, 1, 3])\n", + "step_vtraj = mda.Universe.empty(1, n_frames=NSTEP, velocities=True)\n", + "for i, ts in enumerate(step_vtraj.trajectory):\n", + " step_vtraj.atoms.velocities = velocities_reshape[i]\n", + "\n", + "# Expected VACF results for unit velocity trajectory\n", + "# At time t, VACF is:\n", + "# sum_{x=0}^{N - 1 - t} x*(x + t) * n_dim / n_frames\n", + "# n_dim = 3 (typically) and n_frames = total_frames - t\n", + "def characteristic_poly(last, n_dim, first=0, step=1):\n", + " diff = last - first\n", + " frames_used = diff // step + 1 if diff % step != 0 else diff / step\n", + " frames_used = int(frames_used)\n", + " result = np.zeros(frames_used)\n", + " for t in range(first, last, step):\n", + " sum = 0\n", + " sum = np.dtype(\"float64\").type(sum)\n", + " lagtime = t - first\n", + " for x in range(first, (last - lagtime), step):\n", + " sum += x * (x + lagtime)\n", + " current_index = int(lagtime / step)\n", + " vacf = sum * n_dim / (frames_used - current_index)\n", + " result[current_index] = vacf\n", + " return result\n", + "\n", + "# the following test examples set n_dim to 3\n", + "# all of the following calculations should give the same result\n", + "# and use float64\n", + "\n", + "poly = characteristic_poly(NSTEP, 3)\n", + "\n", + "# result for analysis run on unit velocity trajectory WITH FFT\n", + "v_simple = VACF(step_vtraj.atoms, fft=True)\n", + "v_simple.run()\n", + "print(\"v_simple:\")\n", + "print(v_simple.results.timeseries)\n", + "print(v_simple.results.timeseries.dtype)\n", + "\n", + "# result from characteristic_poly (expected VACF results)\n", + "print(\"poly:\")\n", + "print(poly)\n", + "print(poly.dtype)\n", + "\n", + "# result for analysis run on unit velocity trajectory WITHOUT FFT\n", + "v_window = VACF(step_vtraj.atoms, fft=False)\n", + "v_window.run()\n", + "print(\"v_window:\")\n", + "print(v_window.results.timeseries)\n", + "print(v_window.results.timeseries.dtype)" + ] + }, + { + "cell_type": "markdown", + "id": "448dc507-3cfd-4a9b-8f6a-6271aa047dc2", + "metadata": {}, + "source": [ + "## Plotting Examples" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "091388e6-cf1b-4de5-a693-00ccddbe2eda", + "metadata": {}, + "outputs": [], + "source": [ + "# if using only the terminal, the plots may not appear automatically like they do here\n", + "# you will then need the following:\n", + "# import matplotlib.pyplot as plt\n", + "\n", + "# then after running the desired plotting function, run:\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "08ff9ecb-3969-4545-a6d5-fae778097705", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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VfYYjIWGiIio+uhdaL777jsMHz68Rh07UJNwYjAREVH106vQLF68GC+//DI2bNhQ6YgCKsNDKomIiKqfXqucpk+fjqVLl+LJJ580VR6zV74XTVJmAfKLS+Fga9DehURERKQHvUZounTpguXLl+PmzZumymP23Bxt4e5Ytlw7NjVP5jRERESWQa9Cs3fvXvj7+yMsLMzkp1ebs/J5NDFpOTInISIisgx6FRo7Ozvs3LkTISEhePzxx02VyezpJgancB4NERFRddB7lZOVlRW+//57dOjQwRR5aoUg7kVDRERUrQzeWO+LL76QMketotuLJo2FhoiIqDoYXGjo/spHaBJu5qO4VCtzGiIiotrP4EKza9euCscfLF++HK1atcLw4cNx69YtScKZK7WLEs5Ka2i0Iq7c5EonIiIiUzO40Lz11lu6lU5nz57FG2+8gf79+yMuLg7Tp0+XLKA5EgSBZzoRERFVI4N3fYuPj0dISAgAYNu2bRgwYADmzZuH06dPo3///pIFNFdBKidEJmaWrXRqLncaIiKi2s3gERpbW1vk5+cDKNufpk+fPgCAunXrco8aAMG6vWg4QkNERGRqBo/QPProo5g+fToeeeQRnDhxAlu2bAEAXL58GT4+PpIFNFd39qLh5npERESmZvAIzbJly2BtbY2tW7dixYoVqF+/PgDgjz/+QN++fSULaK7KC01ceh40WlHmNERERLWbwSM0DRo0wK+//lrp+ueff25UoNrCx80BSmsFikq1uHYrHw3dHeWOREREVGsZdRS0RqPBjh07cOHCBQiCgCZNmmDQoEGwtuYJ01YKAQEeTrhwIxvRKbksNERERCZkcPM4d+4cnnrqKaSkpKBx48YAyubPeHh4YOfOnWjenEt7glVlhSYmLRe9oZY7DhERUa1l8Bya8ePHIzQ0FNeuXcPp06dx+vRpJCYmokWLFnj55ZelzGi2eEglERFR9TB4hObff//FyZMn4ebmprvm5uaGuXPnon379pKEM3dBXLpNRERULQweoWncuDFSUlIqXU9NTUVQUJBRoWqL8r1oYlNzIYpc6URERGQqBheaefPmYcqUKdi6dSuuXbuGa9euYevWrZg2bRoWLFiA7Oxs3ZulaujuCCuFgNyiUiRnF8odh4iIqNYy+JHTgAEDAADPPfccBEEAAN0oxJNPPql7XxAEaDQaY3OaJVtrBRq6OyAuLQ8xqbnwcrWXOxIREVGtZHChOXDggJQ5aq1glZOu0DwW7CF3HCIiolrJ4ELTrVs3KXPUWkEqJ/wZlYJonrpNRERkMgbPoaGqCVY5AwBiWGiIiIhMhoXGxHRLt1loiIiITIaFxsQCPMqOPMjIK0ZGXrHMaYiIiGonvQtNbi5HGvThYGsNH7ey1U0cpSEiIjINvQtNvXr10K9fP6xYsQJJSUmmyFTr6I5ASM2ROQkREVHtpHehuXTpEvr3749t27YhICAA7du3x//+9z+cOXPGFPlqhSAPzqMhIiIyJb0LTcOGDfHaa69h7969SE1NxfTp0xEVFYWuXbvC398fU6dOxf79+y12M717CVaz0BAREZmSUZOCXV1dMWzYMGzevBnp6en4+uuvodVq8eKLL8LDwwMbNmyQKqdZ40onIiIi0zJ4Y71KN7K2Rp8+fdCnTx8sXboU//zzD0pLS6W6vVkL8ijbi+ZGViFyCkvgbGcjcyIiIqLaRbJC81+tW7c21a3NjquDDTyclUjLKUJsWh5a+daROxIREVGtwn1oqgknBhMREZkOC0014cRgIiIi02GhqSZ3JgZzLxoiIiKpsdBUEz5yIiIiMh2DCs2///6Ljz/+GF9++SXS09MrvJadnY2xY8dKEq42Cbr9yOlqRj4KS7hHDxERkZT0LjS7d+9Ghw4dsHnzZixYsABNmzbFgQMHdK8XFBRg3bp1koasDTyclHCxs4ZWBOLT8+SOQ0REVKvoXWjmzJmDN998E+fOncOVK1cwY8YMPPXUU9i1a5cp8tUagiAgWF22Hw0fOxEREUlL70ITFRWle6QkCALeeustrFy5EkOGDMEvv/wiecDapHweTTQLDRERkaT03lhPqVQiMzOzwrVhw4ZBoVDg+eefx2effSZVtlqnfKVTLAsNERGRpPQuNK1atcKBAwfQtm3bCteHDh0KrVaL0aNHSxautgniXjREREQmoXehmTBhAg4dOnTP14YNGwYAWLlypXGpaqnyR05x6bko1WhhbcVV80RERFIQRFEU5Q5RHbKzs+Hq6oqsrCy4uLjIkkGrFdFs9p8oKNFg/xvdEHC74BAREdG9VfXnN4cIqpFCISBQ5QiAE4OJiIikZHCh+eGHH6TMYTG4YzAREZH0DCo0X331FaZNmyZxFMtQvhcNVzoRERFJR+9JwR9//DEWL16Mffv2mSJPrRfIvWiIiIgkp1ehmTZtGtasWYPdu3ejZcuWpspUq+n2oknLhVYrQqEQZE5ERERk/vR65LRkyRJ89tln6Nixo6ny1HoN3R1gYyUgv1iDG9mFcschIiKqFfQqNM888wxmz56NuLg4U+Wp9WysFPBzv73SKSVH5jRERES1g16F5ocffsCAAQPQq1cvJCUlmSpTrRfMHYOJiIgkpVehEQQBX3/9NZ5//nn07NnTVJlqPS7dJiIikpZBy7bnz5+PCRMmSBZixYoVaNGiBVxcXODi4oLOnTvjjz/+0L0uiiLmzJkDb29v2Nvbo3v37oiKipLs61e3QBULDRERkZQM3lhPyn1ofHx88Mknn+DkyZM4efIkevbsiYEDB+pKy8KFC7Fo0SIsW7YMERER8PT0RFhYGHJyzHMOSrCqbC+a6NRcWMjJE0RERCYl+dEHJSUl+PHHH/X6nCeffBL9+/dHo0aN0KhRI8ydOxdOTk44fvw4RFHE4sWL8e6772Lw4MEIDQ3FunXrkJ+fj40bN0odv1oEeDhCEICsghKk5xbLHYeIiMjsSVZo/vnnH0yZMgWenp4YMWKEwffRaDTYvHkz8vLy0LlzZ8THxyM5ORl9+vTRfYxSqUS3bt1w7Nix+96nqKgI2dnZFd5qCjsbK/i6OQDgYyciIiIpGFVobt68iS+++AKtWrVCu3btcP78eSxYsADXr1/X+15nz56Fk5MTlEolXn31VezYsQMhISFITk4GAKjV6gofr1arda/dy/z58+Hq6qp78/X11TuTKQWXz6NJY6EhIiIyVpUKTXR0NJ5//nlMmjQJ6enp+PXXXzF48GB4e3tj3bp1GDlyJARBwJIlSzB+/HjUq1dP7yCNGzdGZGQkjh8/jgkTJmD06NE4f/687nVBqLijriiKla7dbdasWcjKytK9JSYm6p3JlMp3DI7hXjRERERGq9LRBy+88AKGDBkCPz8/eHl5oX79+hg2bBg+/vhjhISEAADefvtto4LY2toiKCgIANCuXTtERETgiy++wMyZMwEAycnJ8PLy0n18ampqpVGbuymVSiiVSqMymVIQR2iIiIgkU6URmrS0NLRr1w4dOnSAKIro2rUrevbsiaZNm5osmCiKKCoqgr+/Pzw9PbFnzx7da8XFxQgPD0eXLl1M9vVNrbzQRKew0BARERmrSiM0n3/+OcaMGQN3d3ds3rwZx44dwwsvvABra2sMGzYMI0aMeODjn4d555130K9fP/j6+iInJwebN2/GwYMHsWvXLgiCgGnTpmHevHkIDg5GcHAw5s2bBwcHBwwfPtzgrym38r1oUnOKkF1YAhc7G5kTERERma8qFZqBAwdi4MCBuveHDBmChQsX4pdffsHatWvRsWNHlJaWYt26dRg3bhwaNWqkV4iUlBSMHDkSN27cgKurK1q0aIFdu3YhLCwMADBjxgwUFBRg4sSJuHXrFjp27Ijdu3fD2dlZr69Tk7jY2cDTxQ7J2YWISc1FmwZuckciIiIyW4Iowc5uqampWL9+PdauXYvz588jNDQUZ86ckSKfZLKzs+Hq6oqsrCy4uLjIHQcA8MI3f+NITDoWPtMCz7WvWauwiIiIaoKq/vyWZB8alUqFN998E+fOncPx48fx6KOPSnHbWo8Tg4mIiKRRpUdO+ujQoQM6dOgg9W1rpTsTg7l0m4iIyBh6jdD07dv3gbvzlsvJycGCBQuwfPlyg4NZAo7QEBERSUOvEZpnn30Wzz33HJydnfHUU0+hXbt28Pb2hp2dHW7duoXz58/jyJEj+P333zFgwAB8+umnpspdK5TvFnztVgEKijWwt7WSOREREZF50qvQjBs3DiNHjsTWrVuxZcsWrFq1CpmZmQDKdvINCQnB448/jlOnTqFx48amyFuruDsp4eZgg1v5JYhNy0VofVe5IxEREZklvefQ2NraYvjw4bo9YLKyslBQUAB3d3fY2HAvFX0FqZwQceUWCw0REZERjF7l5OrqCk9PT5YZAwWpyvbS4anbREREhpNk2TYZjkcgEBERGY+FRmZc6URERGQ8FhqZla90upKehxKNVuY0RERE5omFRmZernZwtLVCqVZEws08ueMQERGZJaN3Ci4uLkZqaiq02oqjCw0aNDD21hZBEAQEqZzw77UsxKTm6iYJExERUdUZXGiio6MxduzYSjsHi6IIQRCg0WiMDmcpAm8XmuiUXPQNlTsNERGR+TG40IwZMwbW1tb49ddf4eXlBUEQpMxlUTgxmIiIyDgGF5rIyEicOnUKTZo0kTKPRQrmXjRERERGMXhScEhICNLT06XMYrHKR2hi03Kh1YoypyEiIjI/BheaBQsWYMaMGTh48CBu3ryJ7OzsCm9Udb5u9rC1UqCwRIukzAK54xAREZkdgx859e7dGwDQq1evCtc5KVh/1lYKBHg44mJyDqJTc+Bb10HuSERERGbF4EJz4MABKXNYvECVEy4m5yAmNRc9m6jljkNERGRWDC403bp1kzKHxSvfMZgTg4mIiPRn1MZ6mZmZ+Pbbb3HhwgUIgoCQkBCMHTsWrq6uUuWzGLpDKlloiIiI9GbwpOCTJ08iMDAQn3/+OTIyMpCeno5FixYhMDAQp0+fljKjRQi6a4RGFLnSiYiISB8Gj9C8/vrreOqpp7Bq1SpYW5fdprS0FOPHj8e0adNw6NAhyUJaAv96jlAIQE5hKdJyiqBysZM7EhERkdkwaoRm5syZujIDANbW1pgxYwZOnjwpSThLorS2QkN3RwB87ERERKQvgwuNi4sLrl69Wul6YmIinJ15wKIhAj04MZiIiMgQBheaoUOHYty4cdiyZQsSExNx7do1bN68GePHj8ewYcOkzGgxgtXlE4NzZE5CRERkXgyeQ/N///d/EAQBo0aNQmlpKQDAxsYGEyZMwCeffCJZQEsSxBEaIiIigxhcaGxtbfHFF19g/vz5iI2NhSiKCAoKgoMDd7k1VPkITUxqnsxJiIiIzItR+9AAgIODA5o3by5FFotXPocmPbcImfnFqONgK3MiIiIi86BXoRk8eDDWrl0LFxcXDB48+IEfu337dqOCWSJHpTW8Xe1wPasQMam5aOdXV+5IREREZkGvQuPq6gpBEACUrXIq/zVJJ0jtjOtZhYhmoSEiIqoyvQrNmjVrdL9eu3at1FkIZRODD11O48RgIiIiPRi8bLtnz57IzMysdD07Oxs9e/Y0JpNFC+IhlURERHozuNAcPHgQxcXFla4XFhbi8OHDRoWyZHdWOrHQEBERVZXeq5zOnDmj+/X58+eRnJyse1+j0WDXrl2oX7++NOksUPleNEmZBcgrKoWj0uiFaERERLWe3j8tW7VqBUEQIAjCPR8t2dvbY+nSpZKEs0Rujrao52SL9NxixKXlobmPq9yRiIiIajy9C018fDxEUURAQABOnDgBDw8P3Wu2trZQqVSwsrKSNKSlCfRwQnpuBqJTc1hoiIiIqkDvQtOwYUMAgFarlTwMlQlSOeHv+AzOoyEiIqoigycFz58/H6tXr650ffXq1ViwYIFRoSxdsKr8kEoWGiIioqowuNB8/fXXaNKkSaXrzZo1w1dffWVUKEsXpHIGAMSy0BAREVWJwYUmOTkZXl5ela57eHjgxo0bRoWydOV70SRk5KOoVCNzGiIioprP4ELj6+uLo0ePVrp+9OhReHt7GxXK0qldlHBWWkOjFXElPV/uOERERDWewZucjB8/HtOmTUNJSYlu+fa+ffswY8YMvPHGG5IFtESCICBQ5YTIxEzEpOaisaez3JGIiIhqNIMLzYwZM5CRkYGJEyfqdgy2s7PDzJkzMWvWLMkCWqrguwoNERERPZjBhUYQBCxYsADvv/8+Lly4AHt7ewQHB0OpVEqZz2IF6VY65cichIiIqOYzel99JycntG/fXoosdBceUklERFR1BheavLw8fPLJJ9i3bx9SU1MrbbQXFxdndDhLFnx76XZceh40WhFWCkHmRERERDWXUZOCw8PDMXLkSHh5eUEQ+ANXSvXd7KG0VqCoVIvEjHz41XOUOxIREVGNZXCh+eOPP/Dbb7/hkUcekTIP3WalEBDg4YQLN7IRk5rLQkNERPQABu9D4+bmhrp160qZhf6DRyAQERFVjcGF5n//+x8++OAD5Odz4zdT4cRgIiKiqjH4kdNnn32G2NhYqNVq+Pn5wcbGpsLrp0+fNjqcpSsfoYlJY6EhIiJ6EIMLzaBBgySMQfdSPkITm5oLURQ58ZqIiOg+DC40s2fPljIH3UNDd0dYKQTkFpUiObsQXq72ckciIiKqkQyeQ0OmZ2utgJ+7AwAgOoWPnYiIiO7H4EKjUChgZWV13zeSBicGExERPZzBj5x27NhR4f2SkhL8888/WLduHT788EOjg1GZIJUT/oxK4cRgIiKiBzC40AwcOLDStSFDhqBZs2bYsmULxo0bZ1QwKlN+BEIMHzkRERHdl+RzaDp27Ii9e/fq9Tnz589H+/bt4ezsDJVKhUGDBuHSpUsVPkYURcyZMwfe3t6wt7dH9+7dERUVJWX0GimIS7eJiIgeStJCU1BQgKVLl8LHx0evzwsPD8ekSZNw/Phx7NmzB6WlpejTpw/y8vJ0H7Nw4UIsWrQIy5YtQ0REBDw9PREWFoacnBwpfws1TqCHEwQByMgrxs3cIrnjEBER1UgGP3Jyc3OrsC+KKIrIycmBg4MDvv/+e73utWvXrgrvr1mzBiqVCqdOnULXrl0hiiIWL16Md999F4MHDwYArFu3Dmq1Ghs3bsQrr7xi6G+jxrO3tUL9Ova4dqsAMam5cHdSyh2JiIioxjG40CxevLjC+wqFAh4eHujYsSPc3NyMCpWVlQUAurOi4uPjkZycjD59+ug+RqlUolu3bjh27Ng9C01RURGKiu6MaGRnZxuVSU5BKqeyQpOWi44B7nLHISIiqnH0LjSrV6/GiBEjMHr0aFPkgSiKmD59Oh599FGEhoYCAJKTkwEAarW6wseq1WokJCTc8z7z58+vNautglVOOHgpjXvREBER3Yfec2heeukl3QgKAHh7e+PKlSuSBZo8eTLOnDmDTZs2VXrtv1v/P+g4gFmzZiErK0v3lpiYKFnG6qY7AoETg4mIiO5J7xEaURQrvJ+TkwOtVitJmNdeew07d+7EoUOHKkws9vT0BFA2UuPl5aW7npqaWmnUppxSqYRSWTvmm3BzPSIiogerEUcfiKKIyZMnY/v27di/fz/8/f0rvO7v7w9PT0/s2bNHd624uBjh4eHo0qVLdcetdkEeZXvR3MgqRE5hicxpiIiIah69R2gEQajwmOe/7xti0qRJ2LhxI37++Wc4Ozvr5sy4urrC3t4egiBg2rRpmDdvHoKDgxEcHIx58+bBwcEBw4cPN+prmwNXBxt4OCuRllOE2LQ8tPKtI3ckIiKiGsWgR06NGjXSlZjc3Fy0bt0aCkXFwZ6MjIwq33PFihUAgO7du1e4vmbNGowZMwYAMGPGDBQUFGDixIm4desWOnbsiN27d8PZ2Vnf34JZClY5IS2nCNEpOSw0RERE/6F3oVmzZo3kIf47L+deBEHAnDlzMGfOHMm/vjkIUjnhWOxN7hhMRER0D3oXGlMt16YH06104sRgIiKiSmrEpGB6uPJCE81CQ0REVAkLjZkoLzSJGfkoLNHInIaIiKhmYaExEx5OSrjYWUMrAvHpeQ//BCIiIgvCQmMmBEFAsLpsRRcfOxEREVXEQmNGgjy4YzAREdG9GHzatkajwdq1a7Fv3z6kpqZWOv5g//79RoejioLV5YUmR+YkRERENYvBhWbq1KlYu3YtnnjiCYSGhhq9WzA9XCDPdCIiIrongwvN5s2b8cMPP6B///5S5qEHKH/kFJ+eh1KNFtZWfGJIREQEGDGHxtbWFkFBQVJmoYeoX8ce9jZWKNGISMjIlzsOERFRjWFwoXnjjTfwxRdfVOnYApKGQiEgUOUIgI+diIiI7mbwI6cjR47gwIED+OOPP9CsWTPY2NhUeH379u1Gh6PKgjyccC4pGzGpuXi8mdxpiIiIagaDC02dOnXw9NNPS5mFqqB8LxqO0BAREd1hcKExxanb9HCB3IuGiIioEoMLTbm0tDRcunQJgiCgUaNG8PDwkCIX3cedvWhyodWKUCi4XJ6IiMjgScF5eXkYO3YsvLy80LVrVzz22GPw9vbGuHHjkJ/PFTim0rCuA2ysBBSUaHA9q0DuOERERDWCwYVm+vTpCA8Pxy+//ILMzExkZmbi559/Rnh4ON544w0pM9JdrK0U8HPnSiciIqK7GVxotm3bhm+//Rb9+vWDi4sLXFxc0L9/f6xatQpbt26VMiP9x92PnYiIiMiIQpOfnw+1Wl3pukql4iMnE+MhlURERBUZXGg6d+6M2bNno7CwUHetoKAAH374ITp37ixJOLq38jOdolloiIiIABixyumLL75A37594ePjg5YtW0IQBERGRsLOzg5//vmnlBnpP4JVd/aiEUWRB4MSEZHFM7jQhIaGIjo6Gt9//z0uXrwIURTx/PPPY8SIEbC3t5cyI/1HgIcjBAHIKihBem4xPJyVckciIiKSlVH70Njb2+Oll16SKgtVkZ2NFRrUdUDCzXxEp+aw0BARkcXTq9Ds3LkT/fr1g42NDXbu3PnAj33qqaeMCkYPFuThhISb+YhNzUWXwHpyxyEiIpKVXoVm0KBBSE5OhkqlwqBBg+77cYIgQKPRGJuNHiBI5YR9F1O50omIiAh6FhqtVnvPX1P1C+JKJyIiIh2Dl22vX78eRUVFla4XFxdj/fr1RoWihysvNByhISIiMqLQvPjii8jKyqp0PScnBy+++KJRoejhyveiSc0pQlZBicxpiIiI5GVwobnf/ifXrl2Dq6urUaHo4VzsbODpYgeAozRERER6L9tu3bo1BEGAIAjo1asXrK3v3EKj0SA+Ph59+/aVNCTdW5DKCcnZhYhNzUXbhm5yxyEiIpKN3oWmfHVTZGQkHn/8cTg5Oeles7W1hZ+fH5555hnJAtL9BamccCQmHdGpOXJHISIikpXehWb27NkAAD8/PwwdOhR2dnaSh6Kq4cRgIiKiMgbvFDx69Ggpc5ABdIUmjYWGiIgsm8GFRqPR4PPPP8cPP/yAq1evori4uMLrGRkZRoejBwu+XWiu3SpAQbEG9rZWMiciIiKSh8GrnD788EMsWrQIzz33HLKysjB9+nQMHjwYCoUCc+bMkTAi3Y+7kxJuDjYQRSCWozRERGTBDC40GzZswKpVq/Dmm2/C2toaw4YNwzfffIMPPvgAx48flzIjPQDn0RARERlRaJKTk9G8eXMAgJOTk26TvQEDBuC3336TJh09VJDKGQALDRERWTaDC42Pjw9u3LgBAAgKCsLu3bsBABEREVAqldKko4fiCA0REZERhebpp5/Gvn37AABTp07F+++/j+DgYIwaNQpjx46VLCA9WLDukEruRUNERJbL4FVOn3zyie7XQ4YMgY+PD44dO4agoCA89dRTkoSjhysfoUm4mY/iUi1srQ3uqERERGbL4ELzX506dUKnTp2kuh1VkZerHRxtrZBXrEHCzTwEq53ljkRERFTt9Co0O3furPLHcpSmegiCgCCVE/69loWY1FwWGiIiskh6FZryc5weRhAEaDQaQ/KQAQLvKjRERESWSK9Co9VqTZWDjBCkmxjMQkNERJZJkhmkhYWFUtyGDBTMvWiIiMjCGVxoNBoN/ve//6F+/fpwcnJCXFwcAOD999/Ht99+K1lAerjyEZrYtFxotKLMaYiIiKqfwYVm7ty5WLt2LRYuXAhbW1vd9ebNm+Obb76RJBxVja+bPWytFSgq1SLpVoHccYiIiKqdwYVm/fr1WLlyJUaMGAErqzunPLdo0QIXL16UJBxVjbWVAgH1HAEAMWncYI+IiCyPwYUmKSkJQUFBla5rtVqUlJQYFYr0F1g+MTiF82iIiMjyGFxomjVrhsOHD1e6/uOPP6J169ZGhSL9BfNMJyIismAG7xQ8e/ZsjBw5EklJSdBqtdi+fTsuXbqE9evX49dff5UyI1WB7pDKNBYaIiKyPAaP0Dz55JPYsmULfv/9dwiCgA8++AAXLlzAL7/8grCwMCkzUhXoCk1KLkSRK52IiMiyGDRCU1pairlz52Ls2LEIDw+XOhMZwL+eIxQCkFNUitScIqhd7OSOREREVG0MGqGxtrbGp59+yuMNahCltRUaut9e6cR5NEREZGEMfuTUu3dvHDx4UMIoZCzdEQgpXLpNRESWxeBJwf369cOsWbNw7tw5tG3bFo6OjhVe52nb1S9I5YQ951M4MZiIiCyOwYVmwoQJAIBFixZVeo2nbcsjyIN70RARkWUyuNDw5O2aJ1h950wnIiIiS2LQHJrS0lJYW1vj3LlzkoQ4dOgQnnzySXh7e0MQBPz0008VXhdFEXPmzIG3tzfs7e3RvXt3REVFSfK1a5PA2yM06bnFuJVXLHMaIiKi6mPwKqeGDRtK9lgpLy8PLVu2xLJly+75+sKFC7Fo0SIsW7YMERER8PT0RFhYGHJyOPn1bo5Ka3i7li3X5jwaIiKyJAavcnrvvfcwa9YsZGRkGB2iX79++PjjjzF48OBKr4miiMWLF+Pdd9/F4MGDERoainXr1iE/Px8bN2687z2LioqQnZ1d4c0SBKmdAXDpNhERWRaDC82SJUtw+PBheHt7o3HjxmjTpk2FN6nEx8cjOTkZffr00V1TKpXo1q0bjh07dt/Pmz9/PlxdXXVvvr6+kmWqyconBrPQEBGRJTF4UvCgQYMkjHF/ycnJAAC1Wl3hulqtRkJCwn0/b9asWZg+fbru/ezsbIsoNeUTg6NZaIiIyIIYdThldRIEocL7oihWunY3pVIJpVJp6lg1TvnmerEsNEREZEEMLjTlTp06hQsXLkAQBISEhKB169ZS5NLx9PQEUDZS4+XlpbuemppaadSG7jxySsosQF5RKRyVRn+LiYiIajyD59CkpqaiZ8+eaN++PaZMmYLJkyejbdu26NWrF9LS0iQL6O/vD09PT+zZs0d3rbi4GOHh4ejSpYtkX6e2cHO0RT0nWwDcj4aIiCyHwYXmtddeQ3Z2NqKiopCRkYFbt27h3LlzyM7OxpQpU/S6V25uLiIjIxEZGQmgbCJwZGQkrl69CkEQMG3aNMybNw87duzAuXPnMGbMGDg4OGD48OGGxq/VAjkxmIiILIzBzyN27dqFvXv3omnTprprISEhWL58eYUVSVVx8uRJ9OjRQ/d++WTe0aNHY+3atZgxYwYKCgowceJE3Lp1Cx07dsTu3bvh7OxsaPxaLUjlhL/jMzgxmIiILIZRRx/Y2NhUum5jY6P3sQjdu3eHKIr3fV0QBMyZMwdz5szRN6ZFClZxhIaIiCyLwY+cevbsialTp+L69eu6a0lJSXj99dfRq1cvScKRYYJU3FyPiIgsi8GFZtmyZcjJyYGfnx8CAwMRFBQEf39/5OTkYOnSpVJmJD2V70WTcDMPRaU89ZyIiGo/gx85+fr64vTp09izZw8uXrwIURQREhKC3r17S5mPDKByVsJZaY2colJcSc9HY0/ONSIiotrN6E1KwsLCEBYWJkUWkoggCAhUOSEyMRPRqTksNEREVOsZ/MhpypQpWLJkSaXry5Ytw7Rp04zJRBLgxGAiIrIkBheabdu24ZFHHql0vUuXLti6datRoch4QSw0RERkQQwuNDdv3oSrq2ul6y4uLkhPTzcqFBmPhYaIiCyJwYUmKCgIu3btqnT9jz/+QEBAgFGhyHjBt5dux6XnoVSj375ARERE5sbgScHTp0/H5MmTkZaWhp49ewIA9u3bh88++wyLFy+WKh8ZqL6bPZTWChSVapF4qwD+9RzljkRERGQyBheasWPHoqioCHPnzsX//vc/AICfnx9WrFiBUaNGSRaQDGOlEBDo4YTzN7IRk5rLQkNERLWawY+cAGDChAm4du0aUlJSkJ2djbi4OJaZGoTzaIiIyFIYvQ9NWloaLl26BEEQ0LhxY9SrV0+KXCSB8kITnZojcxIiIiLTMniEJi8vD2PHjoWXlxe6du2Kxx57DF5eXhg3bhzy8/OlzEgGKt+LJpYjNEREVMsZXGimT5+O8PBw/PLLL8jMzERmZiZ+/vlnhIeH44033pAyIxno7kdODzrNnIiIyNwZ/Mhp27Zt2Lp1K7p376671r9/f9jb2+O5557DihUrpMhHRmjo7ggrhYC8Yg1uZBXCu4693JGIiIhMwuARmvz8fKjV6krXVSoVHznVELbWCvi5OwDgxGAiIqrdDC40nTt3xuzZs1FYWKi7VlBQgA8//BCdO3eWJBwZ787EYBYaIiKqvQx+5LR48WL069cPPj4+aNmyJQRBQGRkJOzs7PDnn39KmZGMEKxyxp9RKRyhISKiWs3gQtO8eXNER0fj+++/x8WLFyGKIp5//nmMGDEC9vacq1FTBHGlExERWQCDC82hQ4fQpUsXvPTSSxWul5aW4tChQ+jatavR4ch43IuGiIgsgcFzaHr06IGMjIxK17OystCjRw+jQpF0Aj2cIAjArfwS3MwtkjsOERGRSRhcaERRhCAIla7fvHkTjo48N6imsLe1Qv3by7U5MZiIiGorvR85DR48GAAgCALGjBkDpVKpe02j0eDMmTPo0qWLdAnJaEEqJ1y7VYCY1Fx0CnCXOw4REZHk9C40rq6uAMpGaJydnStMALa1tUWnTp0qzasheQWrnHDwUhpXOhERUa2ld6FZs2YNAMDPzw9vvvkmHy+ZAZ66TUREtZ3Bq5xmz54tZQ4yoSCVMwAWGiIiqr0MLjT+/v73nBRcLi4uztBbk8TKR2iSswuRU1gCZzsbmRMRERFJy+BCM23atArvl5SU4J9//sGuXbvw1ltvGZuLJORqbwMPZyXScooQk5qL1g3c5I5EREQkKYMLzdSpU+95ffny5Th58qTBgcg0glVOLDRERFRrGbwPzf3069cP27Ztk/q2ZCRODCYiotpM8kKzdetW1K1bV+rbkpGCWWiIiKgWM/iRU+vWrStMChZFEcnJyUhLS8OXX34pSTiSTmB5oUljoSEiotrH4EIzaNCgCu8rFAp4eHige/fuaNKkibG5SGLlj5yuZuSjsEQDOxsrmRMRERFJxyT70KSlpcHDw8PQW5MJeDgp4Wpvg6yCEsSl5SHE20XuSERERJKRbA6NKIr4/fffMXjwYPj4+Eh1W5KIIAh3JgbzsRMREdUyRheauLg4vPfee2jQoAFGjBgBBwcHbN68WYpsJLEgj9uFJiVH5iRERETSMuiRU2FhIbZu3YpvvvkGx48fR1hYGG7cuIHIyEiEhoZKnZEkEqzmCA0REdVOeo/QTJw4Ed7e3li+fDmeffZZJCUl4ZdffoEgCFAoJF8FThIqX+kUncJCQ0REtYveIzQrV67EzJkz8fbbb8PZ2dkUmchEyveiuXIzD6UaLaytWECJiKh20Psn2vr163HixAl4eXlh6NCh+PXXX1FaWmqKbCQxb1d72NtYoUQjIiEjX+449BAZecUoLNHIHYOIyCzoPUIzfPhwDB8+HFeuXMGaNWswadIk5OfnQ6vV4vz58wgJCTFFTpKAQiEgUOWIc0nZiE7JReDtScJUM4iiiMspudgdlYzd51NwNikLdjYKdG+kQt9QT/RoooKrPU9KJyK6F0EURdGYG4iiiD///BOrV6/Gzp07Ua9ePQwePBhLliyRKqMksrOz4erqiqysLLi4WO4eLK9vicSOf5Lw1uONMalHkNxxLJ5GK+L01Vu6EpNw8/4jZzZWAroE1kO/UE+Ehajh7qSsxqRERPKo6s9vgzfWKycIAvr27Yu+ffsiIyMD69evx5o1a4y9LZkID6mUX2GJBkdj0rE7KgV7L6TgZl6x7jVbawW6BtdDnxBP9GyqQkp2IXadS8auc8mITs1F+OU0hF9Owzs7zqK9X130DfXE48084V3HXsbfERGR/IweoTEXHKEps+tcMl79/hRC67vg19cekzuOxcjKL8H+SynYHZWC8MtpyC++MzfG1d4GvZqo0KeZGo8Fe8BRee9/Z8Sk5uLPqLJyczYpq8JrLX3roG8zT/QN9YR/PUeT/l6IiKpTVX9+s9BYmNi0XPT6LBz2NlaI+vBxKBTCwz+JDHI9swB7zqdg9/lkHI/LgEZ754+at6sd+jTzRJ8QNdr714WNnivOrt3Kx59RKfjzXDIiEjJw95/iJp7OePx2uWni6VzhEFkiInPDQvMfLDRlSjVaNP1gF0o0Ig7P6AHfug5yR6o1RFHEpZQc7IlK0U3qvVsTT2f0CVGjTzNPNPN2kaxopOUUYff5spGbv2JvovSu4uTn7oDHQz3Rt5knWvrUYYElIrPDQvMfLDR39Pk8HJdTcrHmxfbo0VgldxyzptGKOJVwZ1Lv1buWwwsC0L5hXfRppkZYiBoN3U3/KCgrvwR7L6RgV1QyDl1OQ1GpVveap4sdHm+mxuOhnujgV5f7EBGRWai2ScFkfoJUTrickovY1FwWGgMUlmhwJDodu88nY9+F1AdO6q1XzSuRXB1s8ExbHzzT1gd5RaUIv5yGP84lY/+FFCRnF2LdXwlY91cC6jraIqypGn1DPdElyB1Ka6tqzUlEJDWDC42fnx/Gjh2LMWPGoEGDBlJmIhMrP6SSRyBUXWZ+MfZfTNVN6i0o0X9Sb3VzVFqjf3Mv9G/uhcISDY7FpmPXuWTsOZ+CjLxibDmZiC0nE+GstEbPpir0beaJbo094GBbM/ITEenD4L+53njjDaxduxYfffQRevTogXHjxuHpp5+GUsm9MWq6IHXZkRU8pPLBkjILsOf2o6S/46Wd1Fvd7Gys0LOJGj2bqFGq0eJEfAZ2RSXjz6hkpGQX4efI6/g58jqU1gp0a+SBfs090bOJmhv5EZHZMHoOzb///ovVq1dj06ZNKC0txfDhwzF27Fi0adNGqoyS4ByaO85fz0b/JYfhYmeNf2f34SqY28on9e6OKluZdC4pu8LrpprUKyetVkTktUzdXjd3zwGyVgjoEnRnI7/qfnxGRATIMCm4pKQEX375JWbOnImSkhKEhoZi6tSpePHFF2vEX/wsNHcUlmjQ9INdEEXgxLu9oHK2kzuSbGrapF45iaKICzdysOvcDeyKSsblux5JKgSgnV9d9G3micdDPVHfgjby02pFZBWU4GZeMdwdbeHmaCt3JCKLUm2FpqSkBDt27MCaNWuwZ88edOrUCePGjcP169exbNky9OjRAxs3bjTmS0iChaaibp8eQMLNfGx8qSO6BNaTO061qsmTemuS2LQ7G/mdufafjfx8XHXLwQPM7EwwjVbErfxiZOQV42ZuMW7mFel+nZF3+/rtaxl5xbiVX6J73GhrrcCLj/hhYvcgPo4jqiYmLzSnT5/GmjVrsGnTJlhZWWHkyJEYP348mjRpovuYiIgIdO3aFQUFBYZ8CUmx0FQ0bm0E9l1MxUcDm2FUZz+545icOU7qrUmSMgvw57lk7IpKRsSVihv5NVI7oW+oF/o280RTr+rfyK9Eo8WtvGLc1JWRYmTklhWS9LxiZORWLCmZBSUw5G89R1sr5N3e4dnNwQZTegVjRMeGsLWu2fOniMydyQuNlZUVwsLCMG7cOAwaNAg2NpX/tZKXl4fJkyfXiLOdWGgqmv/HBXwdHodRnRvio4Ghcscxido0qbcmScspwp7zZXvdHItJr7CRX4O6DrrzpVr7GraRX1Gp5h4jJsXIuGskRVdecouQXVhq0O/DzcEGdR1t4e6oRF1HW9R1soW7o23Zr++6Xs+p7DGTtULAgUupmPf7Rd1ZaH7uDpjZtwn6hnrWiEfrRLWRyQtNQkICGjZsaHDA6sZCU9GPJxPx1tYz6BLojo0vdZI7jmTSc4uw+cRV7IqyjEm9cis/o+qPs8kI/89GfmoXZdkRDM080cDd4a7Rk3uUlLw7j4Byi/QvKAoBuiJSoaQ42sLdqfJ1NwcbgzcWLNVoseVkIj7fE4303CIAQNuGbnj3iaZo08DNoHuSfnKLSrHp76v491om6jkpoXJRQuVsB7WLEmoXO6id7eBib80/47WEyQtNQEAAIiIi4O7uXuF6ZmYm2rRpg7i4OENuazIsNBX9c/UWnv7yGDyclYh4t7fccYyWmJGPlYfi8MPJRN0PVUub1Cu3/OJShF9Kw66osrlJhhSTctYKAW6OZSMmZYVE+Z/Rk7vLihJ17G2q/ViH3KJSrAyPxcrDcSgsKfv/3BPNvTCjb2P+f81EsvJLsPbYFaw5Fo/M/JIHfqzSWlFWblyUUN0uOeWFR1VefFzs4MRHzDWeyQuNQqFAcnIyVKqKO82mpKSgQYMGKCoqMuS2JsNCU1FOYQmaz9kNAPj3gz5wdTDPCY7nr2fjq/BY/Hb2hu6RUksfVwzv2AC9mnKpsVyKSjU4FnOzbCO/CynILSytMGJSVkiU/xk9uTOKYk7/uk7OKsSiPZfw46lrEEXAxkrAyE5+eK1nEFdESeRmbhG+PRKP9X8l6Iqyfz1HDLm9I3ZqThFSsguRml2ElJzCh5aduznaWlUqOSrn8hJ055q9LXfTlovJCs3OnTsBAIMGDcK6devg6uqqe02j0WDfvn3Ys2cPLl26ZGD0+/vyyy/x6aef4saNG2jWrBkWL16Mxx57rEqfy0JTWad5+5CcXYhtEzqjbcO6csepMlEUcTwuA1+FxyL8cpruetdGHni1WwA6B7ibzQ9DS1D+V0xt/55cuJGN+X9cxKHb/590trPGaz2DMKqzH+xs+MPQEMlZhVh5KA4bTyToRsGaeDpjUo8g9G/uBav7jMoVlmiQdrvkpGTf/t+c24Unu1BXfnL0GEV0trPWjfione3KCo+uBJU98lK5KHmMiAmYrNAoFGXPnQVBwH8/1cbGBn5+fvjss88wYMAAA2Lf35YtWzBy5Eh8+eWXeOSRR/D111/jm2++wfnz56t09AILTWUvfPM3jsSkY8EzzTG0fc0/vkKrFbH7fAq+Co9FZGImgLK5E0+08MYrXQMQWt/1wTcgqgaHLqdh3u8XcDE5BwBQv449ZvRtjCdbePO08ypKzMjHivBYbD15DcWasiLT0scVk3sGo1cTlWT/He8e3dGN8GQXIkU34lNWiO5eFfkwbg42t0d87ozw/HeOj4ezkgsR9GDyR07+/v6IiIhAvXrVs4dJx44d0aZNG6xYsUJ3rWnTphg0aBDmz59f6eOLiooqPPbKzs6Gr68vC81d5uyMwtpjV/DSY/5494kQuePcV3GpFj/9k4SvDsUiLi0PQNnz8Wfb+eClxwI4X4FqHI1WxPbT1/B/uy8hJbvs76EWPq54p39TdApwf8hnW66Y1Fx8eTAGP0de1z1C7uBfF5N7BOGx4HqyjPKJoojcolKkZBeVFZycO6M+qXeN/qRkF6H4rknxDyIIgLujra7kBHg4YWL3QLjzEfk9mfy07fj4eEM/VW/FxcU4deoU3n777QrX+/Tpg2PHjt3zc+bPn48PP/ywOuKZrSDV7UMqU2vmmU7lKxm+PRKP5OxCAICLnTVGdm6IMV384eHMP/xUM1kpBDzbzhcDWnjjm8Nx+Co8FmeuZeH5lcfRu6kab/drovvzR2Vz4ZYfiMHv527o9gh6LLgeJvcIQkeZC6AgCHC2s4Gznc0Dv2eiWLajdMrdj7XuGv0pL0SpOUUo1YpIzy1Gem4xzt8ADlxKw74LKVg3tgP/gWYEvQrNkiVL8PLLL8POzg5Llix54MdOmTLFqGB3S09Ph0ajgVqtrnBdrVYjOTn5np8za9YsTJ8+Xfd++QgN3RF8+w9nTA0rNOm5RVh79ArW/3VFt8eI2kWJ8Y8GYFjHBlyVQGbD3tYKr/UKxvMdGmDx3svYHJGIvRdScOBSKoZ3aICpvYMteuL6P1dvYfmBGOy9kKq7FhaixuQeQWjpW0e+YAYQBAF1HGxRx8EWjT2d7/txWq2IjPxi3QTm5KxCLNsfgys38/HMimNYPaY9WvjUqb7gtYhej5z8/f1x8uRJuLu7w9/f//43FQRJl21fv34d9evXx7Fjx9C5c2fd9blz5+K7777DxYsXH3oPzqGp7GZuEdp+vBeCAER9+DgcbOUtCldv5mPl4Vj8ePKabul1gIcjXu0aiIGtvTnZjsxeTGoOPvnjou4HuJPSGhO6B2LsI/4Ws4pGFEX8HZ+BZftjcCQmHUDZI5gBLbwxqUcgmnha3t/PqdmFGLMmAudvZMPB1grLR7RBj8aqh3+ihTDJI6e7HzNV5yOnevXqwcrKqtJoTGpqaqVRG6o6dycl3BxscCu/BHFpebJNqo26noWvwuPw25nrKN90tqVvHUzoFog+IWpOpKRaI0jljG9Gt8dfsTcx7/cLOJuUhU//vITv/krAm483xtOt69935Y65E0UR4ZfTsGx/DE4m3AJQtt/QoNb1MaF7IALN7EwwKalc7LDllU6YuOE0DkenY/y6k5j/dHM8155PFfRhFmP3tra2aNu2Lfbs2YOnn35ad33Pnj0YOHCgjMnMX7DKGSeuZCAmNbdaC40oivgr7ia+Co/TLXMFgG6NPPBqt0B0Cqhb65f5kuXqHOiOnyc9gl/OXMfCXZeQlFmAN3/8F98eice7/Zvi0eDac2Bs+erE5QdicDap7JBTWysFnmvvg1e6BsK3roPMCWsGZzsbfDu6Pd7efgbbTydhxrYzuJFViCm9gvh3YRUZXGiGDBmCdu3aVZqo++mnn+LEiRP48ccfjQ53t+nTp2PkyJFo164dOnfujJUrV+Lq1at49dVXJf06liZQ5YQTVzIQnZpTLV+v7C+3ZKwIj8O/dy29HtDCG690C0Azby69JsugUAgY2Ko+Hm/miXXHrmDZgRhcuJGNF779G90aeeCd/k0fOBejpivVaPHb2RtYfiAGl1PK5unZ21hhRMcGeKlrANQudjInrHlsrRX47NmW8HK1w/IDsfh872UkZxfgfwNDDT6qw5IYXGjCw8Mxe/bsStf79u2L//u//zMq1L0MHToUN2/exEcffYQbN24gNDQUv//+u1mdJ1UTBVXTxOCiUg1++icJX4fHIS79ztLr59r54qXHAtDAnf9KI8tkZ2OFV7oF4tl2vli6Pxrf/ZWA8MtpOBydhmfb+mJ6n0Zm9cO/uFSLHf9cw4qDsbhyMx8A4Ky0xqguDTH2EX8uTX4IQRDw1uNN4Olqj9k/n8OmE4lIyS7CsuGtZZ/nWNMZvA+Nvb09IiMj0bhx4wrXL168iNatW6OgoECSgFLhpOB7O3Q5DaNWn0CghyP2vdFd8vvnFJZg04mypdfl+3G42FljdBc/jO7iZ9ErPIju5Up6Hhb+eRG/ny2bM2hvY4WXuwbg5a4BcKzBK/wKSzT44WQivjoYi+tZZdssuDnYYOwj/hjVxQ+u9uZ5vIqc/oxKxpRN/6CoVIuWPq74dkx7i/w70+Qb67Vv3x5PPvkkPvjggwrX58yZg19++QWnTp0y5LYmw0Jzb9czC9Dlk/2wUgi48FFf2FpLM6yZllOENUfj8d3xBOTcXnrt6WKH8Y/54/kOXHpN9DCnEjIw97cLOH01EwDg4azE9LBGeLatT416/JBXVIoNfydg5aF43enjHs5KvPxYAIZ3bFCjS5g5OJWQgXHrTiIzvwQN3R2w7sUO8KtnWXvVmLzQ7Ny5E8888wyGDx+Onj17AgD27duHTZs24ccff8SgQYMMCm4qLDT3JooiQmf/ibxiDfa83hXBauOe2SfczMPKQ3H48dQ13a6ZgR6OeKVbIAa1qi9ZYSKyBKIo4o9zyViw6yISbj++CVY54Z3+TdG9sYesk0WzCkqw7tgVrD565+Tr+nXs8Wq3ADzbzpfnV0koNi0Xo1efwLVbBXB3tMXqMe3Nbp8eY5i80ADAb7/9hnnz5iEyMhL29vZo0aIFZs+ejW7duhl6S5Nhobm/gcuO4N9rWVgxog36Nfcy6B7nkrLwVXgsfj97Q7f0unWDOni1WyDCmnLpNZExiku1+P54Apbsj9aVhy6B7ninf9Nq326h/OTr7/5K0B3u6OfugIndgzCoNf/RYiqpOYV4cU0Eoq5nw97GCstHtEbPJpaxbUm1FBpzwkJzf9N/iMT200mYHtYIU3oFV/nzRFHEX7E3sSI8Foej03XXuzf2wIRugejgz6XXRFLKKijBlwdisOboFRRrtBAE4OlW9fHm443hXcfepF87Jfv2ydd/X9Ud1thY7YyJPQLxRHOvGvUYrLbKLSrFhO9P4XB0OqwUAuYOCsXzHWr+wcLGMvlZTuVOnTqFCxcuQBAEhISEoHXr1sbekqpZsKrsMVNVVzpptCJ2RyVjxe3zaYCys2uebOGFV7oFoqkXCyORKbja22BW/6Z4oVND/N/uS/g58jq2/5OE387ewNhH/TGheyBc7KSdfJuYkY+vwst28C4/+bp5fVdM7hnE0ddq5qS0xuox7fH2trPYdvoa3t5+FjeyCjGtdzD/8QgjRmhSU1Px/PPP4+DBg6hTp07ZwVxZWejRowc2b94MDw8PqbMahSM097fnfApeWn8STb1c8MfUx+77cUWlGmw/nYSVh+IQf3vptZ2NAkPb+WL8YwHcIIuomp25lom5v13A3/EZAIC6jraY1jsYwzo0gI2RIyaxabn48kAsfopM0p183d7PDZN7BqOrTCdfUxlRFLFoz2Us3R8DABjazhdzn669e9WY/JHT0KFDERsbi++++w5NmzYFAJw/fx6jR49GUFAQNm3aZFhyE2Ghub/49Dz0+L+DUForcP6jvpW2Xs8pLMGGv69i9ZF4pOaUrWJwtbfB6M4NMbqLH/eVIJKRKIrYeyEV8/+4gLi0sn9oBNRzxIy+TfB4M7XexePCjbKTr387W/NOvqaKNvydgPd/OgetCPRo7IHlI9rUyr1qTF5oXF1dsXfvXrRv377C9RMnTqBPnz7IzMw05LYmw0Jzf6UaLUJm/4niUi0OvdVDt8ldak4h1hy9gu/vWnrt5WqHcY/6Y1gHLsckqklKNFpsjkjE4j2XcTOvGEDZiMo7/ZuidQO3h35+ZGImlu2Pwd4LKbprvZuqMblnEFpZ0Ioac7PnfApe23QahSVatPBxxepauFeNyefQaLVa2NhUflZrY2MDrVZr6G1JBtZWCgTUc8TF5BxEp+ZAK4pYeTgOW+9aeh2kcsKr3QLxVEtvrmIgqoFsrBQY2akhBrXyxtfhcfjmSBwirtzC018ew4AWXpjxeJN77sj9d9xNLDsQo5vYLwhA/+ZemNQ9CCHe/MdfTRcWosbGlzph3NoInLmWhWdWHLPIvWoAI0ZoBg4ciMzMTGzatAne3t4AgKSkJIwYMQJubm7YsWOHpEGNxRGaB5u88TR+PXMDfu4OuJqRr1t63aZBHUzoHoReTVSc/EdkRm5kFeCz3Zex7fQ1iCJgYyVgdGc/TO4ZBFd7GxyKTsey/dGIuFJ28rWVQsCgVmUnX5cfiULmIy4tF6PXnEBiRgHq3t6rpraMrJn8kVNiYiIGDhyIc+fOwdfXF4Ig4OrVq2jevDl+/vln+Pj4GBzeFFhoHmzx3stYvDda937PJiq82i0Q7f3cOPmPyIydv56Neb9fwJGYshEYV3sb1K9jj/M3sgGUnXz9bDsfvNqNJ1+bu7ScIoxdG4GzSVmwt7HCsuGt0aup+e9VU2370OzZswcXL16EKIoICQlB7969jbmdybDQPNiV9DxM2HAaTTyd8Uq3ADTx5H8jotpCFEWEX07D/N8v4lJKDoCyFYrDOzTEy10D4OlqPodf0oPlFZVi4obTCL+cBoUAzH26OYaZ+V413FjvP1hoiMjSabQifvonCcnZhRja3rfWTR6lMiUaLd7ZfhY/nroGAJjSMwivhzUy29F2k0wKXrJkSZU/dsqUKfrcmoiITMxKIeCZtjVrOgBJz8ZKgYVDWsDL1Q5L9sdgyf4Y3MgqxLzBzY3en6gm02uExt/fv2o3FQTExcUZHMoUOEJDRESWZuPfV/HeT2ehFcuOpVk+vI3ZbbnBR07/wUJDRESWaO/5FEy+vVdN8/ple9V4OJvP48aq/vw2euypuLgYly5dQmlpqbG3IiIiIon1DlFj00udUNfRFmeTsjB4xVHEpVXt7D5zYnChyc/Px7hx4+Dg4IBmzZrh6tWrAMrmznzyySeSBSQiIiLjtG7ghm0TuqBBXQckZhTgmRXHcPrqLbljScrgQjNr1iz8+++/OHjwIOzs7iz56927N7Zs2SJJOCIiIpKGfz1HbJvQBS18XHErvwTDVx3H3vMpD/9EM2Fwofnpp5+wbNkyPProoxWWgoWEhCA2NlaScERERCQdD2clNr3UCd0be6CwRIuXvzuJDX8nyB1LEgYXmrS0NKhUqkrX8/LyzHatOxERUW3nqLTGqlHt8Fw7H2hF4N0d5/DZ7ksw9zVCBhea9u3b47ffftO9X15iVq1ahc6dOxufjIiIiEzCxkqBBc+0wNRewQCApftj8NbWMyjRmO/h0gYvRp8/fz769u2L8+fPo7S0FF988QWioqLw119/ITw8XMqMREREJDFBEPB6WCN4udrh3Z/OYeupa0jNKcKKEea3Vw1gwAhNZGQkAKBLly44evQo8vPzERgYiN27d0OtVuOvv/5C27Ztpc5JREREJvB8hwZYNaot7G2scOhyGoau/AupOYVyx9Kb3hvrKRQKtG7dGuPHj8fw4cPh6upqqmyS4sZ6RERE9xeZmIlxayNwM68YPm72WDe2AwI9nOSOZbqN9Y4ePYo2bdrg7bffhpeXF0aOHIkDBw4YFZaIiIjk1cq3DrZN6IKG7g64dqsAQ1Ycw6kE89mrRu9C07lzZ6xatQrJyclYsWIFEhMT0bt3bwQGBmLu3Lm4du2aKXISERGRifnd3qum5V171eyOSpY7VpVIcpZTbGws1qxZg/Xr1+PGjRsICwvD77//LkU+yfCRExERUdXkF5di0obTOHApDQoB+HBgKEZ2aihLlmo/nDI3NxcbNmzAO++8g8zMTGg0GiluKxkWGiIioqor1Wjx3k/nsDkiEQAwqUcg3uzTuNr3mqu2wynDw8MxevRoeHp6YsaMGRg8eDCOHj1q7G2JiIhIRtZWCswf3Byv924EAFh+IBZv/Phvjd2rxqCF5omJiVi7di3Wrl2L+Ph4dOnSBUuXLsVzzz0HR0dHqTMSERGRDARBwNTewfB0VeKdHeew/XQS0nKKsOKFtnCqYXvV6J0mLCwMBw4cgIeHB0aNGoWxY8eicePGpshGRERENcDQ9g2gcrbDxA2ncTg6HUO//gtrxrSHysXu4Z9cTfR+5GRvb49t27bh2rVrWLBgAcsMERGRBejRRIXNL3eCu6Mtoq5n4+kvjyEmNVfuWDqSTQqu6TgpmIiIyHgJN/MwevUJXLmZjzoONvh2dDu0bVjXZF+v2iYFExERkeVo6H57rxrfOsjML8HwVX/jzxqwVw0LDREREenF3UmJTS91RK8mKhSVajHh+1P47q8rsmZioSEiIiK9Odha4+uRbTGsQwNoReD9n6OwaM9l2fKw0BAREZFBrK0UmPd0KN4IawSFADT1dJYvi2xfmYiIiMyeIAh4rVcw+jX3RJBKvkLDERoiIiIympxlBmChISIiolqAhYaIiIjMHgsNERERmT0WGiIiIjJ7LDRERERk9lhoiIiIyOyx0BAREZHZY6EhIiIis8dCQ0RERGaPhYaIiIjMHgsNERERmT0WGiIiIjJ7LDRERERk9qzlDlBdRFEEAGRnZ8uchIiIiKqq/Od2+c/x+7GYQpOTkwMA8PX1lTkJERER6SsnJweurq73fV0QH1Z5agmtVovr16/D2dkZgiDIHadGys7Ohq+vLxITE+Hi4iJ3HIvH70fNwu9HzcLvR81iyu+HKIrIycmBt7c3FIr7z5SxmBEahUIBHx8fuWOYBRcXF/4FUYPw+1Gz8PtRs/D7UbOY6vvxoJGZcpwUTERERGaPhYaIiIjMHgsN6SiVSsyePRtKpVLuKAR+P2oafj9qFn4/apaa8P2wmEnBREREVHtxhIaIiIjMHgsNERERmT0WGiIiIjJ7LDRERERk9lhoLNz8+fPRvn17ODs7Q6VSYdCgQbh06ZLcsei2+fPnQxAETJs2Te4oFi0pKQkvvPAC3N3d4eDggFatWuHUqVNyx7JIpaWleO+99+Dv7w97e3sEBATgo48+glarlTuaRTh06BCefPJJeHt7QxAE/PTTTxVeF0URc+bMgbe3N+zt7dG9e3dERUVVSzYWGgsXHh6OSZMm4fjx49izZw9KS0vRp08f5OXlyR3N4kVERGDlypVo0aKF3FEs2q1bt/DII4/AxsYGf/zxB86fP4/PPvsMderUkTuaRVqwYAG++uorLFu2DBcuXMDChQvx6aefYunSpXJHswh5eXlo2bIlli1bds/XFy5ciEWLFmHZsmWIiIiAp6cnwsLCdOcpmhKXbVMFaWlpUKlUCA8PR9euXeWOY7Fyc3PRpk0bfPnll/j444/RqlUrLF68WO5YFuntt9/G0aNHcfjwYbmjEIABAwZArVbj22+/1V175pln4ODggO+++07GZJZHEATs2LEDgwYNAlA2OuPt7Y1p06Zh5syZAICioiKo1WosWLAAr7zyiknzcISGKsjKygIA1K1bV+Yklm3SpEl44okn0Lt3b7mjWLydO3eiXbt2ePbZZ6FSqdC6dWusWrVK7lgW69FHH8W+fftw+fJlAMC///6LI0eOoH///jIno/j4eCQnJ6NPnz66a0qlEt26dcOxY8dM/vUt5nBKejhRFDF9+nQ8+uijCA0NlTuOxdq8eTNOnz6NiIgIuaMQgLi4OKxYsQLTp0/HO++8gxMnTmDKlClQKpUYNWqU3PEszsyZM5GVlYUmTZrAysoKGo0Gc+fOxbBhw+SOZvGSk5MBAGq1usJ1tVqNhIQEk399FhrSmTx5Ms6cOYMjR47IHcViJSYmYurUqdi9ezfs7OzkjkMAtFot2rVrh3nz5gEAWrdujaioKKxYsYKFRgZbtmzB999/j40bN6JZs2aIjIzEtGnT4O3tjdGjR8sdj1D2KOpuoihWumYKLDQEAHjttdewc+dOHDp0CD4+PnLHsVinTp1Camoq2rZtq7um0Whw6NAhLFu2DEVFRbCyspIxoeXx8vJCSEhIhWtNmzbFtm3bZEpk2d566y28/fbbeP755wEAzZs3R0JCAubPn89CIzNPT08AZSM1Xl5euuupqamVRm1MgXNoLJwoipg8eTK2b9+O/fv3w9/fX+5IFq1Xr144e/YsIiMjdW/t2rXDiBEjEBkZyTIjg0ceeaTSVgaXL19Gw4YNZUpk2fLz86FQVPzRZWVlxWXbNYC/vz88PT2xZ88e3bXi4mKEh4ejS5cuJv/6HKGxcJMmTcLGjRvx888/w9nZWfcM1NXVFfb29jKnszzOzs6V5i85OjrC3d2d85pk8vrrr6NLly6YN28ennvuOZw4cQIrV67EypUr5Y5mkZ588knMnTsXDRo0QLNmzfDPP/9g0aJFGDt2rNzRLEJubi5iYmJ078fHxyMyMhJ169ZFgwYNMG3aNMybNw/BwcEIDg7GvHnz4ODggOHDh5s+nEgWDcA939asWSN3NLqtW7du4tSpU+WOYdF++eUXMTQ0VFQqlWKTJk3ElStXyh3JYmVnZ4tTp04VGzRoINrZ2YkBAQHiu+++KxYVFckdzSIcOHDgnj8zRo8eLYqiKGq1WnH27Nmip6enqFQqxa5du4pnz56tlmzch4aIiIjMHufQEBERkdljoSEiIiKzx0JDREREZo+FhoiIiMweCw0RERGZPRYaIiIiMnssNERERGT2WGiIiIjI7LHQEFG1mDNnDlq1aiXb13///ffx8ssvS3a/IUOGYNGiRZLdj4iMw52CichogiA88PXRo0frTgt3d3evplR3pKSkIDg4GGfOnIGfn58k9zxz5gx69OiB+Ph4uLi4SHJPIjIcD6ckIqPduHFD9+stW7bggw8+qHBCtb29PZycnODk5CRHPHz77bfo3LmzZGUGAFq0aAE/Pz9s2LABEyZMkOy+RGQYPnIiIqN5enrq3lxdXSEIQqVr/33kNGbMGAwaNAjz5s2DWq1GnTp18OGHH6K0tBRvvfUW6tatCx8fH6xevbrC10pKSsLQoUPh5uYGd3d3DBw4EFeuXHlgvs2bN+Opp56qcK179+6YPHkyJk+ejDp16sDd3R3vvfce7h60/vLLLxEcHAw7Ozuo1WoMGTKkwj2eeuopbNq0ybD/aEQkKRYaIpLN/v37cf36dRw6dAiLFi3CnDlzMGDAALi5ueHvv//Gq6++ildffRWJiYkAgPz8fPTo0QNOTk44dOgQjhw5AicnJ/Tt2xfFxcX3/Bq3bt3CuXPn0K5du0qvrVu3DtbW1vj777+xZMkSfP755/jmm28AACdPnsSUKVPw0Ucf4dKlS9i1axe6du1a4fM7dOiAEydOoKioSOL/MkSkLxYaIpJN3bp1sWTJEjRu3Bhjx45F48aNkZ+fj3feeQfBwcGYNWsWbG1tcfToUQBlIy0KhQLffPMNmjdvjqZNm2LNmjW4evUqDh48eM+vkZCQAFEU4e3tXek1X19ffP7552jcuDFGjBiB1157DZ9//jkA4OrVq3B0dMSAAQPQsGFDtG7dGlOmTKnw+fXr10dRURGSk5Ol/Q9DRHpjoSEi2TRr1gwKxZ2/htRqNZo3b65738rKCu7u7khNTQUAnDp1CjExMXB2dtbNyalbty4KCwsRGxt7z69RUFAAALCzs6v0WqdOnSpMaO7cuTOio6Oh0WgQFhaGhg0bIiAgACNHjsSGDRuQn59f4fPt7e0BoNJ1Iqp+nBRMRLKxsbGp8L4gCPe8ptVqAQBarRZt27bFhg0bKt3Lw8Pjnl+jXr16AMoePd3vY+7F2dkZp0+fxsGDB7F792588MEHmDNnDiIiIlCnTh0AQEZGxgO/NhFVH47QEJHZaNOmDaKjo6FSqRAUFFThzdXV9Z6fExgYCBcXF5w/f77Sa8ePH6/0fnBwMKysrAAA1tbW6N27NxYuXIgzZ87gypUr2L9/v+7jz507Bx8fH11pIiL5sNAQkdkYMWIE6tWrh4EDB+Lw4cOIj49HeHg4pk6dimvXrt3zcxQKBXr37o0jR45Uei0xMRHTp0/HpUuXsGnTJixduhRTp04FAPz6669YsmQJIiMjkZCQgPXr10Or1aJx48a6zz98+DD69Oljmt8sEemFhYaIzIaDgwMOHTqEBg0aYPDgwWjatCnGjh2LgoKCB25u9/LLL2Pz5s26R1flRo0ahYKCAnTo0AGTJk3Ca6+9pttNuE6dOti+fTt69uyJpk2b4quvvsKmTZvQrFkzAEBhYSF27NiBl156yXS/YSKqMu4UTES1niiK6NSpE6ZNm4Zhw4YBKNuHplWrVli8eLFB91y+fDl+/vln7N69W8KkRGQojtAQUa0nCAJWrlyJ0tJSye5pY2ODpUuXSnY/IjIOVzkRkUVo2bIlWrZsKdn9pDzokoiMx0dOREREZPb4yImIiIjMHgsNERERmT0WGiIiIjJ7LDRERERk9lhoiIiIyOyx0BAREZHZY6EhIiIis8dCQ0RERGbv/wGpnzKrOhwxhgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot vacf for test data with velocities (PRM_NCBOX, TRJ_NCBOX)\n", + "v_vacf_plot = v.plot_vacf()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3e9151ef-54bb-44ef-9f53-76c90baf6e34", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGwCAYAAACKOz5MAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQwklEQVR4nO3deVhUZfsH8O8wwLAPO4gssuMuiplL7tpiLvmWZVYW+ZZpbuRb2eKaUb25ZJa5ZZap9assq7dcU0NzQTDTZBMURNlhhnWAmfP7AxklUJlh4Awz3891zRVzzpkzt5LMzfPcz/1IBEEQQERERGTELMQOgIiIiOhOmLAQERGR0WPCQkREREaPCQsREREZPSYsREREZPSYsBAREZHRY8JCRERERs9S7AAMQaPR4OrVq3B0dIREIhE7HCIiImoGQRBQWloKHx8fWFjcfgzFJBKWq1evws/PT+wwiIiISA9ZWVnw9fW97TUmkbA4OjoCqPsDOzk5iRwNERERNYdSqYSfn5/2c/x2TCJhqZ8GcnJyYsJCRETUzjSnnINFt0RERGT0jCJhqa2txRtvvIHAwEDY2toiKCgIS5cuhUajETs0IiIiMgJGMSX07rvv4pNPPsHWrVvRtWtXxMfH45lnnoFcLsecOXPEDo+IiIhEZhQJyx9//IHx48djzJgxAIBOnTphx44diI+PFzkyIiIiMgZGMSU0aNAgHDhwACkpKQCAP//8E3FxcXjggQeavF6lUkGpVDZ4EBERkekyihGWV155BQqFAhEREZBKpVCr1Vi+fDkmT57c5PWxsbFYsmRJG0dJREREYjGKEZavvvoK27Ztw/bt25GQkICtW7fi/fffx9atW5u8fsGCBVAoFNpHVlZWG0dMREREbUkiCIIgdhB+fn549dVXMXPmTO2xt956C9u2bUNSUtIdX69UKiGXy6FQKNiHhYiIqJ3Q5fPbKEZYKioqGu0hIJVKuayZiIiIABhJDcvYsWOxfPly+Pv7o2vXrkhMTMTKlSsRHR0tdmhERERkBIxiSqi0tBRvvvkmdu3ahby8PPj4+GDy5MlYuHAhrK2t7/h6TgkRERG1P7p8fhtFwtJSTFiIiIjan3ZXw0JEJKbqWg1Kq2rEDoOIbsMoaliIiNqSIAhIyinF0bQC/J5agJMZRaisUSPI3R6R/i7oHeCM3v4uCPNyhNTizrvIElHrY8JCRGYhR1GF31PzcTStAHFphSgoUzW6Jr2gHOkF5fg24QoAwEFmiZ5+cvT2d0FvfxdE+jvD2e7OdXVEZHhMWIjIJJVW1eBEehHi0goQl1aAtLyyBudtraS4K9AV94S6Y1CoOzwdbfBnVgkSMouRkFmMM5klKFPV4mhaIY6mFWpfF+Rhr01gegc4I9STozBEbYFFt0RkEmrUGvyZVVKXoKQW4ExWCWo1N368WUiA7r7OGBTihkEhHugd4AyZpfSW91NrBKTkltYlMJdLkJhZjPSC8kbXcRSGSH9cJUREJk8QBFzML0dcaj7i0gpxPL0QZaraBtcEuNlhUIg77gl1R/8gd8jtrFr0nsXl1UjMqktgEjKL8WdWCcqr1Y2u4ygMUfMwYSEik5RfqsKxi3WFskfTCnBNUdXgvIudFQaEuGPQ9Yefq12rxqPWCEjOKdVOIyVmliCjiVEYR5klevo5o7e/MyIDXNDbz6XFyRORKWDCQkQmobJajRMZhdrVPEk5pQ3OW1taoG8nFwwK8cCgEHd09XGChcgjGUXl1Ui8nsAkXC7Bn1dKUNHEKExw/ShMQN1ITKing+ixE7U1JixE1C6pNQLOZSsQl1aA31PzkXC5BNXqhnuKdfVxqhtBCXVH306usLG6dR2KMahVa5CcW4qEzBIkXq5LZC4VVjS6zlFmiV7+znXLqq//V27LURgybUxYiKjduFxYri2UPXaxEIrKhg3cOjrbYlCIOwaGumNgsBvcHGQiRWo4hWUqnKlfkXSbUZgQTwf09nfWjsSEeHAUhkwLExYiMlrF5dU4drEQcWn5iEsrQFZRZYPzjjJL9A92wz2h7hgY4o5Ad3tIJKb9Id3sURgbS/Tyu5HA9PJz5igMtWtMWIjIaFTVqJFwuRi/Xx9FOXdVgZt/6lhaSNA7wEU7zdOjoxyWUu4aUlimQmLmjb4wf2YpUFnTcBRGIgFCPBy0q5F6+7sgmKMw1I4wYSEi0Wg0Ai7kKBGXWtew7dSlIlTVNKxDCfNyqCuUDXVDv0A32MvYw/JOatUaJOWUXi/orUtkLjcxCuNsZ4UhYR4YHuGJIWEe7AlDRo0JCxG1qasllYhLLcDvaQU4llaAwvLqBuc9HWXaEZRBIe7wdLIRKVLTUnDzKMzlYpy90nAUxkICRAW4YliEJ0Z09kSop4PJT69R+8KEhYhaXXF5NTbFpeOXv3IadYC1s5bi7iA3DLzetI0flG2jVq3BmawSHEzKw8GkvEbLwH1dbDE8whPDIzxxd5Cb0a+wItPHhIWIWo2yqgabf8/A5rgMbWdZCwnQ088Z94TUFcpG+rvA2pJ1KGK7UlyB35LzcfBCLo5eLER17Y2pOVsrKQaGuGNEZ08MC/eEt5yjXtT2mLAQkcFVVNdi67HLWH/kIkoq6pYed+7ghBlDgzE4zIOrVYxcRXUtjqUV4mByHg5eyEOOsmGX4K4+ThgR4Ynhnb3Qo6OchbvUJpiwEJHBVNWoseNkJj767SIKylQA6rq0xowKx/3dvPnB1g4JgoC/rynxW1IeDiTl4UxWSYOVW+4O1hga7okREZ4YFOoORxsmo9Q6mLAQUYvVqDX4v/gr+PBgqnbPHn9XO8wdGYrxvTpyMz8TUlimwqHkfBxMysORlHyU3rSJpJVUgrsCXTEs3BMjOnsh0N1exEjJ1DBhISK9qTUCfjiTjdX7U5FZVLdstoPcBrOGh+KRKF9YsUeKSatRa3DqUhEOXsjDweQ8pOc3LKgOcrevW3UU4YmoTq6sVaIWYcJCRDrTaAT8ej4HK/elIC2vDEDd1MCMoSF4vJ8/V5SYqYyCchxMysNvSXk4kVGIGvWNjwxHmSXuCXPH8AgvDA33gLsJbJtAbYsJCxE1myAI+C05Dyv2puD8VSUAQG5rhelDgjF1QADsrNnUjeqUVtUgLrWgLoFJzkNB2Y1+OxIJ0NPXGSMiPDEswhNdfZzMdil7rVqDgrJq5CqroBYE9PR15hTqLTBhIaJmOZZWgPf3JiMhswQA4CCzxLODAvHsPYFwYqEl3YZGI+BstuJ6z5dcnMtWNjjv7WSDYdd7vgwMcTOJxFcQBBSVVyNXqUJuaRXylFXIUdz4OlepQo6yCgVlqgZFzCM7e2Lt4705StkEJixEdFunLxfh/T0p+CO9EABgY2WBqQM6YfrgYLjYs5U76S5XWaVddRSXWtCg4661pQUGBLtpR198XexEjLQxQRBQpqpFrlJVl4RcTz5ylVXIK61CjqLueX6pCtVqzZ1vCEBqIYGnowyF5dWortWgX6ArNk2N4oqrf2DCQkRNOpetwIq9yfgtOR8AYC21wOP9/DFjWDA8Hdk4jAyjqkaNExlFOHghFweS8nCluOGO3OFejhjeuW70JdLPuVU3u6yqUSPv+ohI7k2JSP0j7/qoSEW1+s43u87N3hpeTjbwcpLBy8kGnk428G7wXAY3exmkFhKcSC/EtK3xKFXVoltHJ2x95i64sdZHiwkLETWQkluKVftS8Mu5HAB1v/1NivLFi8ND0dHZVuToyJQJgoC0vDIcSKprWHc6sxhqzY2PHX03a7y5TiRHeWNK5sbzuiSlvslhczjaWMLrevLheT358HK8/l+5DbycbODhINN5ZdS5bAWmfnoSheXVCPKwx7Zn+8GH/+4AMGEROxwio3GpoByr96fghz+vQhDqCiMn9OqIOSNC0Yn9NEgEJRXVOJxS1/PlUHI+FJU3EgqphQR9/F0wvLMn+nZygbKqttl1Ircjs7SAt9wGXo51iUjdaMiNpKQ+QWnNOpv0/DI8sekEriqq4CO3wRfT+iHYw6HV3q+9YMJCZOaySyrx4YFU/N/pK9rfZu/v5o15o8IQ5uUocnREdWrVGiRmleDAhbpl08m5pXd+0U0sr9eJeN40HXPjceO5k42lUaxYulpSiSc2n0B6fjnc7K2xNfoudOsoFzssUTFhITJTecoqfPRbGnaczNIWBw4L98BLo8PN/gcjGb+sogr8lnx9p+lrpXBzuFEr4ulYl3x4y2987WZv3e62higsU2HqlpM4l62Eo8wSm6ZGoV+Qm9hhiYYJC5GZKS6vxieHL2LrH5dQVVOXqPQPcsP8e8PQJ8BV5OiI6GalVTWYtjUeJzKKILO0wLonemN4hJfYYYmCCQuRmVBW1WDT7xn4NC4DZdf3f+nt74z5o8MxIMRd5OiI6FaqatR4cXsC9l/Ig6WFBCsm9cT4Xh3FDqvN6fL53f47+RCZoYrqWnx27BLWH07XFi129XHC/NHhGBruYRTz9UR0azZWUqx7og9e/uYsdiVmY+5XZ6CorMFT/TuJHZrRMoqEpVOnTrh8+XKj4zNmzMBHH30kQkRExqmqRo3tJzLx8aE0bVv0UE8HxIwKw71dvdvdfD6RObOSWmDFIz0ht7XCZ8cuYeEP56GoqMGLw0P4S0cTjCJhOXXqFNTqG017zp07h1GjRuGRRx4RMSoi41Gj1uDr+Cx8eCANOcoqAECAmx3mjgzFuJ4duU8JUTtlYSHBorFdILe1wgcHUrFiXwpKKmvw+gOd+QvIPxhFwuLh4dHg+TvvvIPg4GAMGTJEpIiIjINaI+D7xGx8cCAVmUUVAIAOchvMHhGKh/v4wqoVO4QSUduQSCSYNyoMclsrLP3pb2yOy4CisgbvTOzeql2A2xu9E5ZLly7h999/x6VLl1BRUQEPDw9ERkaif//+sLHRv8V3dXU1tm3bhpiYmFsOialUKqhUKu1zpVLZ5HVE7ZVGI+CXczlYuS8ZF/PLAQDuDjK8OCwYj93lz03UiExQ9KBAyG2t8PK3Z/HN6StQVtZgzeRI/nu/TueEZfv27VizZg1OnjwJT09PdOzYEba2tigqKsLFixdhY2ODKVOm4JVXXkFAQIDOAX3//fcoKSnB008/fctrYmNjsWTJEp3vTWTsBEHAwaQ8rNibgr+v1SXiznZWmD4kGE/1DzCJHW+J6Nb+1ccXTrZWmLk9AXv/zkX0Z6ew4akoOMj4b1+nZc29e/eGhYUFnn76aYwbNw7+/v4NzqtUKvzxxx/YuXMnvv32W3z88cc616Hce++9sLa2xo8//njLa5oaYfHz8+OyZmq3BEHAsYuFeH9vMhIzSwAADjJLTLsnENGDAuHEHV6JzMqxiwX499Z4lFer0dNXjs+eucskd1JvtT4sP//8M8aMGdOsawsKCpCRkYG+ffs29/a4fPkygoKC8N1332H8+PHNfh37sFB7Fn+pCO/vTcbx9CIAgI2VBZ4eEIjnBweZ5A8oImqes1dKMPXTkyiuqEGopwO+eLYfvOWmtat6u20ct3jxYqxfvx5ZWVmwtGz+8BcTFmqP/rqiwIp9yTiUnA8AsJZa4PF+/pgxLBiejqb1Q4mI9JOWV4onNp1EjrIKHZ1tsW1aPwSa0Malunx+611+nJCQgL/++kv7/IcffsCECRPw2muvobq6Wuf7aTQabNmyBVOnTtUpWSFqb1JzSzH9i9MYuzYOh5LzYWkhweS7/HHoP0OxeFxXJitEpBXi6YhvXuiPQHd7ZJdU4pFP/sDfV81zoYneCcvzzz+PlJQUAEB6ejoee+wx2NnZ4f/+7//w8ssv63y//fv3IzMzE9HR0fqGRGTUsooqEPP1Gdy7+gh+PZ8DiQSYGNkRB14agtiJ3eHjbCt2iERkhHxd7PD18/3RpYMTCspUeHTDH4i/VCR2WG1O7ykhuVyOhIQEBAcH491338XBgwexZ88eHD16FI899hiysrIMHestcUqIjFleaRU+OpiG7SczUaOu++d2X1dvvDQ6DKFejiJHR0TthbKqBs9+dgqnLhXDxsoCnzzRB0PDPcUOq0XaZC8hQRCg0dTtCrt//348+OCDAAA/Pz8UFBToe1sik6GorMH6wxex5eglVNbUdXK+J9Qd80eHo6efs7jBEVG742Rjhc+j++GFL0/jUHI+pm2Nx6pHe2FsTx+xQ2sTeicsUVFReOuttzBy5EgcPnwY69atAwBkZGTAy8s8t8kmAm5sTPjJoYtQVtXtoNzLzxkv3xeOAcHcQZmI9GdrLcWGJ6Mw///+xO4/r2L2zkQoq2owpZ/ufc/aG70TltWrV2PKlCn4/vvv8frrryMkJAQA8M0332DAgAEGC5Covaiu1WDnqUx8eDAN+aV1fYLCvBwwf3Q4RnXx4mZmRGQQ1pYWWP1oLzjZWmLb8Uy8vuscFJU1eGFIsEn/nDH4suaqqipIpVJYWbVdoyvWsJCY1BoBP5zJxqr9KcgqqgQA+LnaImZUGDcmJKJWIwgCVu5LwYcH0wAAzw8Owqv3R7SrpKVNaljqxcfH48KFC5BIJIiIiEBUVFRLb0nULgiCgL1/52LF3mSk5JYBADwcZZg9IhSPRvnB2pKblhFR65FIJHhpdDjktlZ46+cLWH8kHSUVNXh7YneT/EVJ74TlypUrmDx5Mo4ePQpnZ2cAQElJCQYMGIAdO3bAz8/PUDESGZ1jaQV4b08yzmSVAADktnX7/Tw9oBNsrblRGRG1nWn3BMHJxgqvfncWX8VnQVlVg9WP9YLM0rR+Fun9K2B0dDRqampw4cIFFBUVoaioCBcuXIAgCHj22WcNGSOR0TiTVYInNp3A45tO4ExWCWytpJg5LBhHXh6GF4YGM1khIlFM6uuHj6f0hrXUAr+cy8G0rfEoV9WKHZZB6V3DYmtri2PHjiEyMrLB8YSEBAwcOBCVlZUGCbA5WMNCrS01txTv703GnvO5AAArqQRT+gVg5rAQeDjKRI6OiKjO0bQC/PvzeFRUqxHp74wtT/eFs53x7knWJjUs/v7+qKmpaXS8trYWHTt21Pe2REYlq6gCq/an4PvEbGgEwEICPBTpi7kjQ+Hnaid2eEREDQwMcceX0/rh6S2nkJhZgkfXH8cXz94FT6f2v+WH3lNC7733HmbNmoX4+HjUD9LEx8djzpw5eP/99w0WILWcqlaNBd/9hcW7z+NQch6qrjcxo1vLK63Coh/OYfiKQ/guoS5Zua+rN/bMHYwVk3oyWSEioxXp74L/m94fXk4yJOeW4uFP/kBmYYXYYbWY3lNCLi4uqKioQG1trXazwvqv7e0b7iRZVNS6ex5wSuj2fvzzKmbtSNQ+t7GyQP8gNwwN98TQcA8EuJnOzp8tpaiowfoj7E5LRO1fVlEFnth8ApcLK+DpKMPnz96FCG/j+oxskymh1atX6/tSamNJOXU7e3Zys4OqVoNriir8lpyP35LzAQCB7vYYEuaBoeEeuDvIDTZW5lc4yu60RGRq/Fzt8H/T++OpzSeRlFOKR9cfx5Zn+qK3v4vYoenF4I3jxMARltubtvUU9l/Iw+KxXTB1QCck55biUHI+DiXnIf5SMWo1N/4XMLfRF3anJSJTp6ioQfTWUzh9uRi2VlJseKoP7gn1EDssALp9fjNhMQOD3j2IK8WV2Pnc3bg7yK3BudKqGhxNK8Sh5DwcSs5HjrKqwflAd3sMDffA0HBP9At0NZnRF7VGwPeJdd1prxSzOy0RmbaK6lpM35aAIyn5sJJK8MFjkXigewexw2LCQjeUqWrRbdEeAMCZhaNuu7xNEATt6MtvSXk4fdn0Rl/YnZaIzFV1rQbzvj6Dn89eg4UEiJ3YHY/29Rc1pjZtzU/GLTmnFADg5SS741p8iUSCCG8nRHg7YfqQ4OujLwXXp4/qRl9urn0JcrfHkHY0+nL0enfaP9mdlojMkLWlBdY8FgknGyvsOJmJV779CyUVNXh+SLDYoTULExYTV5+whOtRGe5oY4X7unXAfd06QBAEJOXcqH05fbkY6QXlSC8ox5ajl7SjL8MiPDE0zBP+bsaz7PdMVgn+uycJR9MKAQC2VlJED+qE5wYHQ27bdpt0EhGJTWohwdsPdYPc1gqfHL6I2F+SUFJZg5fvDTf6mj2dExYfHx+MHz8e48aNw4gRI2Btbbwd9AhIvr5CKMLbsUX3kUgk6NzBCZ07OOGFocFQVtXg2PXRl9+S85CrVN00+nLeKEZfUnJL8f6eZOz9m91piYjqSSQSvHp/BJztrPDOL0lYd+giFJU1WDa+m1HX7+mcsGzfvh0//vgjZs+ejdzcXNx7770YN24cxowZA1dX19aIkVogqX6ExatlCcs/Od1m9CVe5NGX+u60uxKzIbA7LRFRk6YPqRtlfm3XX9h+IhPKyhqsnNTLaGv5WlR0e/78eezevRs//PADEhMT0b9/f+3oS3Bw282Jsei2aYIgIHLZPpRU1OCnWYPQraO8Td5XWVWDo6nXa19S6kZfbtZaoy95pVVYezANO05mokZd97/1fV298dLoMIQaOGEjIjIVP5+9hrlfJaJGLWBImAc+eaJPm9X1ibJKKDc3F7t378bu3btx4MABBAUF4d1338WYMWMMcfvbYsLStBxFFe6OPQCphQTnl9wryrTMzaMvv12vfVH/Y+XRgGD3uqXTeo6+sDstEVHLHEnJx/NfnEZljRpRAS7Y/HTfNqnxE31Zc0VFBfbs2QNHR0eMHDnS0LdvhAlL0w4l5+HpLacQ7GGPAy8NFTscAM0bfalfNn3XHUZfKqprseXoJaw/zO60REQtdfpyMZ7ZchLKqlp07uCErdF94enYupsmip6wtDUmLE1bf70CfEz3DvhoSm+xw2lEEARcuFaKQyl1Tev+OfpiayVF/2C3RqMv9d1p1xxIQ0EZu9MSERnKhWtKPPXpSeSXqtDJzQ5fPNuvVWv/mLAQACDmqzP4LjEbMaPCMHtEqNjh3JGisr7vS10Ck1f6j9EXD3sMCHbDoeR8dqclImollwvL8cTmE8gqqoSXkwzbnu3XanWATFgIAPDAB7/j72tKrH+yD+7t6i12ODppMPqSlI/TmQ1HX9idloio9eQqq/Dk5hNIyS2Ds50VPnvmLvRqhZpAJiyEWrUGXRbtQXWtBof/M7RdttG/Wf3oy/H0Qvi72mFKvwB2pyUiakUlFdV4esspnMkqgb21FBufisKAEMPWB+ry+c1fTU3UpcJyVNdqYGcthZ9L++89Ire1wgPdO2Dp+G6Ydk8QkxUiolbmbGeNL6f1w6AQd5RXq/HhwTSIOcahV8Jy7do1bNu2Df/73/9QXV3d4Fx5eTmWLl1qkOBIf/UN40K9HGHB2g4iItKDvcwSm5+OwvNDgvDJE31EXdSgc8Jy6tQpdOnSBTNnzsTDDz+Mbt264fz589rzZWVlWLJkiUGDJN3V7yEUwYZpRETUAjJLKRbc3xlyO3H3XtM5YXnttdcwceJEFBcXIzc3F6NGjcKQIUOQmJjYGvGRnupHWCI6MGEhIqL2T+e9hE6fPo2PPvoIFhYWcHR0xEcffYSAgACMGDECe/bsgb+/f2vESTq6sUszExYiImr/dE5YAKCqqqrB85dffhkWFhYYPXo0Pv30U4MERvorV9Uis6gCABDhzVVTRETU/umcsHTr1g3Hjh1Djx49GhyfP38+BEHA5MmTDRYc6Sclt250xcNRBld7a5GjISIiajmda1ieeuopHD16tMlz//nPf7B06VK9poWys7PxxBNPwM3NDXZ2dujVqxdOnz6t833opoJbTgcREZGJ0DlhmTZtGr744otbnn/55ZeRkZGh0z2Li4sxcOBAWFlZ4ZdffsHff/+NFStWwNnZWdfwCDcKbsO5QoiIiEyEXjUshvbuu+/Cz88PW7Zs0R7r1KnTLa9XqVRQqW7sM6NUKlszvHaHBbdERGRq9O50GxcXZ7Agdu/ejaioKDzyyCPw9PREZGQkNm7ceMvrY2NjIZfLtQ8/Pz+DxdLeCYKApJy6BI4Ft0REZCr0Slh++uknTJw40WBBpKenY926dQgNDcWePXswffp0zJ49G59//nmT1y9YsAAKhUL7yMrKMlgs7V1+qQrFFTWwkAChXg5ih0NERGQQOk8JffHFF5g5cya+++47gwWh0WgQFRWFt99+GwAQGRmJ8+fPY926dXjqqacaXS+TySCTyQz2/qakvn6lk5s9bKy43w4REZkGnUZYVq9ejeeeew5ffvklRo4cabAgOnTogC5dujQ41rlzZ2RmZhrsPcwF61eIiMgU6TTCEhMTgw8//BBjx441aBADBw5EcnJyg2MpKSkICAgw6PuYgyQmLEREZIJ0GmEZMGAAPvroIxQWFho0iHnz5uH48eN4++23kZaWhu3bt2PDhg2YOXOmQd/HHCTn1hfcMmEhIiLToVPCsn//fgQGBmLUqFEGXUrct29f7Nq1Czt27EC3bt2wbNkyrF69GlOmTDHYe5gDtUZAam4ZACCcK4SIiMiESARBEHR5gVqtxtSpU3Hx4kX88ccfrRWXTpRKJeRyORQKBZyczPeD+mJ+GUasOAwbKwucX3IfpBYSsUMiIiK6JV0+v3Ve1iyVSrFt2zbcddddegdIrSP5pg63TFaIiMiU6N047oMPPjBkHGQALLglIiJTpXfCcjunTp1qjdvSHSRf73DL+hUiIjI1BktY8vLysHLlSnTr1g133323oW5LOuAuzUREZKpalLCo1Wr88MMPmDBhAvz8/LBx40ZMmDAB8fHxhoqPmqmiuhaXiyoAcEqIiIhMT7Max+Xn52PlypVwdXXF3LlzkZycjC1btmDbtm0AgEmTJkGj0eDbb79t1LGW2kZqbhkEAXB3sIa7A7ctICIi09KsEZbHH38cFRV1v7137NgRd999N65evYpPP/0UV69exYcfftiqQdKdsSU/ERGZsmYlLElJSZgyZQqio6NRVFSE5557DkuXLsWYMWMglXKDPWOgXSHkxYJbIiIyPc1KWN544w089NBDGDJkCN555x1cunQJ3bp1Q79+/bB27Vrk5+e3dpx0B0k5bMlPRESmq1k1LM8//zymTJkCmUwGKysrAHV1Ldu2bcPGjRsxb948aDQa7Nu3D35+fnB05IdmW+OUEBERmbJmrxJycHDQJisA4OHhgXnz5uHPP//E8ePH8cILL2DZsmXw9PTEuHHjWiVYalp+qQqF5dWQSIAwLyYsRERkegzSh6VPnz5Yu3Ytrl69iq1bt6K2ttYQt6Vmqh9dCXC1g601a4qIiMj0GLTTrbW1NSZNmoT//e9/hrwt3UGStsMtR1eIiMg06ZSwTJ8+HVlZWc269quvvsKXX36pV1Ckmxv1K1whREREpqlZRbf1PDw80K1bNwwYMADjxo1DVFQUfHx8YGNjg+LiYvz999+Ii4vDjh074Ovriw0bNrRW3HST5Fy25CciItOmU8KybNkyzJo1C5s3b8Ynn3yCc+fONTjv6OiIkSNHYvPmzRg9erRBA6WmqTUCUnK5QoiIiEybRBAEQd8Xl5SU4PLly6isrIS7uzuCg4MhkUgMGV+zKJVKyOVyKBQKODmZ17RIRkE5hr1/CDJLC/y99D5ILdr+75+IiEgfunx+6zTC8k/Ozs5wdnZuyS2ohZKvF9yGeTkyWSEiIpNl0FVC1PaS2DCOiIjMABOWdq5+hRALbomIyJQxYWnn2JKfiIjMAROWdqyqRo1LheUAmLAQEZFp0zlhOXjwIFvvG4nU3DJoBMDV3hoeDjKxwyEiImo1Oicso0aNQlFRkfb53XffjezsbIMGRc2jbcnv5SjKcnIiIqK2onPC8s+2LefPn4dKpTJYQNR8XCFERETmgjUs7RhXCBERkbnQOWGRSCQNph/++ZzaDkdYiIjIXOjc6VYQBIwYMQKWlnUvraiowNixY2Ftbd3guoSEBMNESE0qLFOhoKxuKi7MiwkLERGZNp0TlkWLFjV4Pn78eIMFQ81XPx3k72oHe1mLdlggIiIyei1OWEgcnA4iIiJzonMNS1VVFXbv3o3S0tJG55RKJXbv3s1VQ22ABbdERGROdE5Y1q9fjw8++ACOjo0/KJ2cnLBmzRps3LjRIMHRrSXl1icst9+Om4iIyBTonLB8+eWXmDt37i3Pz507F59//rlO91y8eLF2tVH9w9vbW9fQzIZGIyA1l1NCRERkPnSuYUlNTUXPnj1veb5Hjx5ITU3VOZCuXbti//792udSqVTne5iLrOIKVFSrYW1pgU5udmKHQ0RE1Op0Tlhqa2uRn58Pf3//Js/n5+frtdeQpaVls0dVVCpVgzoZpVKp8/u1Z/UFt6GeDrCUsvcfERGZPp0/7f45EvJP+/btQ9euXXUOJDU1FT4+PggMDMRjjz2G9PT0W14bGxsLuVyuffj5+en8fu1ZMlcIERGRmdE5YYmOjsayZcvw008/NTr3448/4q233kJ0dLRO9+zXrx8+//xz7NmzBxs3bkROTg4GDBiAwsLCJq9fsGABFAqF9pGVlaXrH6Nd4wohIiIyNzpPCT333HM4cuQIxo0bh4iICISHh0MikeDChQtISUnBpEmT8Nxzz+l0z/vvv1/7dffu3dG/f38EBwdj69atiImJaXS9TCaDTCbTNXSTod2lmSuEiIjITOhVALFt2zbs3LkTYWFhSElJQVJSEsLDw7Fjxw7s2LGjxUHZ29uje/fuehXvmrqqGjUyCsoBcISFiIjMh9493SdNmoRJkyY1Oq5Wq/Hjjz9iwoQJegelUqlw4cIF3HPPPXrfw1Sl5ZVBIwDOdlbwdDTfUSYiIjIvBltikpSUhJdffhk+Pj5NJjK3M3/+fBw+fBgZGRk4ceIEHn74YSiVSkydOtVQ4ZkMbUt+L0fukk1ERGajRQlLeXk5Pv30UwwcOBBdu3ZFQkICli9fjqtXr+p0nytXrmDy5MkIDw/HxIkTYW1tjePHjyMgIKAl4Zmk5Ov1K5wOIiIic6LXlNAff/yBTZs24euvv0ZoaCimTJmCEydOYM2aNejSpYvO99u5c6c+YZilG5sesuCWiIjMh84JS5cuXVBRUYHHH38cJ06c0CYor776qsGDo8bYg4WIiMyRzlNCaWlpGDx4MIYNG4bOnTu3Rkx0C8Xl1cgrrevwy4SFiIjMic4JS0ZGBsLDw/HCCy/A19cX8+fPR2JiIgtA20D9dJCviy0cZHov8CIiImp3dE5YOnbsiNdffx1paWn44osvkJOTg4EDB6K2thafffYZUlJSWiNOAgtuiYjIfLVoldDw4cOxbds2XLt2DWvXrsXBgwcRERGBHj16GCo+uklybn1LfhbcEhGRedE5YZkwYQJ++uknaDQa7TG5XI4ZM2YgPj4eCQkJGDp0qCFjpOuSWHBLRERmSueEpbKyEhMmTICvry9ee+21Ru3ze/XqhTVr1hgsQKqj0QhI4aaHRERkpnROWPbs2YNLly7hhRdewNdff42IiAgMHjwYn3/+OSorK1sjRgKQXVKJ8mo1rKUW6ORuL3Y4REREbUqvGhZfX1+8+eabSEtLw/79+xEQEIAZM2bA29sbzz//PE6cOGHoOM1e/XRQsKcDrKQG21GBiIioXWjxJ9+wYcPwxRdf4Nq1a3jvvffwzTffYODAgYaIjW7CFUJERGTODNLMIz09HZ999hk+++wzKBQKjBw50hC3pZuw4JaIiMyZ3iMslZWV+PzzzzFs2DCEhobiiy++wLRp05CRkYFff/3VkDES2JKfiIjMm84jLMeOHcOWLVvw9ddfo7q6GhMmTMCePXs4qtKKVLVqpBeUA+CUEBERmSedE5ZBgwahZ8+eWL58OaZMmQIXF5fWiItukpZXBrVGgJONJbydbMQOh4iIqM3pnLDEx8ejd+/erREL3UJyzo0Ot9yziYiIzJHONSxMVtoe61eIiMjcsaFHO8AVQkREZO6YsLQDyWzJT0REZo4Ji5FTVNQgR1kFAAhjwkJERGaqRQlLbW0t9u/fj/Xr16O0tG4U4OrVqygrKzNIcAQkXe9w29HZFk42ViJHQ0REJA69O91evnwZ9913HzIzM6FSqTBq1Cg4OjrivffeQ1VVFT755BNDxmm2knM5HURERKT3CMucOXMQFRWF4uJi2Nraao8/9NBDOHDggEGCIxbcEhERAS0YYYmLi8PRo0dhbW3d4HhAQACys7NbHBjV4ZJmIiKiFoywaDQaqNXqRsevXLkCR0d+uBqCIAhIualpHBERkbnSO2EZNWoUVq9erX0ukUhQVlaGRYsW4YEHHjBEbGYvu6QSpapaWEklCPKwFzscIiIi0eg9JbRq1SoMGzYMXbp0QVVVFR5//HGkpqbC3d0dO3bsMGSMZqt+OijYwwFWUq5AJyIi86V3wuLj44MzZ85gx44dSEhIgEajwbPPPospU6Y0KMIl/bHgloiIqI7eCQsA2NraIjo6GtHR0YaKh27CglsiIqI6LUpYUlJScOjQIeTl5UGj0TQ4t3DhwhYFRjeaxrEHCxERmTu9E5aNGzfihRdegLu7O7y9vSGRSLTnJBIJE5YWqq7VID2/HAAQzhVCRERk5vROWN566y0sX74cr7zyiiHjoesu5pehViPA0cYSPnIbscMhIiISld5LT4qLi/HII48YMha6ibZ+xcuxwegVERGROdI7YXnkkUewd+9eQ8YCAIiNjYVEIsHcuXMNfu/2hCuEiIiIbtBpSmjNmjXar0NCQvDmm2/i+PHj6N69O6ysGu4kPHv2bJ2DOXXqFDZs2IAePXro/FpTk8yCWyIiIi2dEpZVq1Y1eO7g4IDDhw/j8OHDDY5LJBKdE5aysjJMmTIFGzduxFtvvXXba1UqFVQqlfa5UqnU6b3agxtLmllwS0REpFPCkpGR0VpxYObMmRgzZgxGjhx5x4QlNjYWS5YsabVYxKaorMFVRRUATgkREREBLahhWbp0KSoqKhodr6ysxNKlS3W6186dO5GQkIDY2NhmXb9gwQIoFArtIysrS6f3M3YpuXWjKz5yG8htre5wNRERkenTO2FZsmQJysrKGh2vqKjQafQjKysLc+bMwbZt22Bj07zluzKZDE5OTg0epoQFt0RERA3p3YdFEIQml9v++eefcHV1bfZ9Tp8+jby8PPTp00d7TK1W48iRI1i7di1UKhWkUqm+YbZL9QW3rF8hIiKqo3PC4uLiAolEAolEgrCwsAZJi1qtRllZGaZPn97s+40YMQJ//fVXg2PPPPMMIiIi8Morr5hdsgLcKLjlCiEiIqI6Oicsq1evhiAIiI6OxpIlSyCXy7XnrK2t0alTJ/Tv37/Z93N0dES3bt0aHLO3t4ebm1uj4+ZAEAROCREREf2DzgnL1KlTAQCBgYEYOHAgLC1btH8i/cM1RRVKq2phaSFBsIeD2OEQEREZBb2zjSFDhhgyjgYOHTrUavc2dvXTQUEe9rC21LsmmoiIyKTwE9HIXGDBLRERUSNMWIwMC26JiIga0ylhOXv2LDQaTWvFQmi4SzMRERHV0SlhiYyMREFBAQAgKCgIhYWFrRKUuapRa3Axv64ZH1cIERER3aBTwuLs7KzdT+jSpUscbTGw9Pxy1KgFOMgs4etiK3Y4RERERkOnVUL/+te/MGTIEHTo0AESiQRRUVG3bOyWnp5ukADNSdL1gtswL4cmuwgTERGZK50Slg0bNmDixIlIS0vD7Nmz8e9//xuOjpy6MBRt/QpXCBERETWgcx+W++67D0DdHkBz5sxhwmJA9QlL5w78OyUiIrqZ3o3jtmzZov36ypUrkEgk6Nixo0GCMldJXCFERETUJL37sGg0GixduhRyuRwBAQHw9/eHs7Mzli1bxmJcPZRW1SC7pBIAEMEpISIiogb0HmF5/fXXsXnzZrzzzjsYOHAgBEHA0aNHsXjxYlRVVWH58uWGjNPkpeTWja54O9lAbmclcjRERETGRe+EZevWrdi0aRPGjRunPdazZ0907NgRM2bMYMKiI+7QTEREdGt6TwkVFRUhIiKi0fGIiAgUFRW1KChzxJb8REREt6Z3wtKzZ0+sXbu20fG1a9eiZ8+eLQrKHHGEhYiI6Nb0nhJ67733MGbMGOzfvx/9+/eHRCLBsWPHkJWVhf/973+GjNHkCYJwUw8WJixERET/pPcIy5AhQ5CSkoKHHnoIJSUlKCoqwsSJE5GcnIx77rnHkDGavFylCorKGkgtJAjxdBA7HCIiIqOj9wgLAPj4+LC41gAuXG/JH+huD5ll01sdEBERmTO9R1jIcDgdREREdHtMWIyAdoUQO9wSERE1iQmLEeAKISIiottjwiKyGrUGF/PKALAlPxER0a0wYRHZpYJyVKs1sLOWwtfFVuxwiIiIjJJOq4QiIyMhkUiadW1CQoJeAZmb+umgMC9HWFg07++WiIjI3OiUsEyYMKGVwjBf9QW3nTuwfoWIiOhWdEpYFi1a1FpxmC1twS1XCBEREd0Sa1hElpxb1zQunAW3REREt6R3p1u1Wo1Vq1bh66+/RmZmJqqrqxuc547Nd1amqkVWUSUA7tJMRER0O3qPsCxZsgQrV67EpEmToFAoEBMTg4kTJ8LCwgKLFy82YIimKyW3bjrI01EGF3trkaMhIiIyXnonLF9++SU2btyI+fPnw9LSEpMnT8amTZuwcOFCHD9+3JAxmiy25CciImoevROWnJwcdO/eHQDg4OAAhUIBAHjwwQfx888/GyY6E6dtyc+EhYiI6Lb0Tlh8fX1x7do1AEBISAj27t0LADh16hRkMplhojNxSTksuCUiImoOvROWhx56CAcOHAAAzJkzB2+++SZCQ0Px1FNPITo62mABmipBEDjCQkRE1Ex6rxJ65513tF8//PDD8PPzw9GjRxESEoJx48bpdK9169Zh3bp1uHTpEgCga9euWLhwIe6//359wzN6eaUqFFfUwEIChHg6iB0OERGRUdNrhKWmpgbPPPMM0tPTtcf69euHmJgYnZMVoG566Z133kF8fDzi4+MxfPhwjB8/HufPn9cnvHahvmFcJ3d72FhJRY6GiIjIuOmVsFhZWWHXrl0GC2Ls2LF44IEHEBYWhrCwMCxfvhwODg4mvdoo+Xr9CqeDiIiI7qxFNSzff/+9AUOpo1arsXPnTpSXl6N///5NXqNSqaBUKhs82psbLflZcEtERHQnetewhISEYNmyZTh27Bj69OkDe3v7Budnz56t0/3++usv9O/fH1VVVXBwcMCuXbvQpUuXJq+NjY3FkiVL9A3dKLAHCxERUfNJBEEQ9HlhYGDgrW8qkTSob2mO6upqZGZmoqSkBN9++y02bdqEw4cPN5m0qFQqqFQq7XOlUgk/Pz8oFAo4ORn/iEWtWoMui/agulaDQ/OHopO7/Z1fREREZGKUSiXkcnmzPr/1HmHJyMjQ96VNsra2RkhICAAgKioKp06dwgcffID169c3ulYmk7XrXi+XCitQXauBrZUU/q52YodDRERk9Ix2t2ZBEBqMopiS+umgMG9HWFhIRI6GiIjI+Ok9whITE9PkcYlEAhsbG4SEhGD8+PFwdXW9471ee+013H///fDz80NpaSl27tyJQ4cO4ddff9U3PKOmXSHkxfoVIiKi5tA7YUlMTERCQgLUajXCw8MhCAJSU1MhlUoRERGBjz/+GC+99BLi4uJuWTxbLzc3F08++SSuXbsGuVyOHj164Ndff8WoUaP0Dc+oJbHgloiISCd6Jyz1oydbtmzRFsoolUo8++yzGDRoEP7973/j8ccfx7x587Bnz57b3mvz5s36htEuJeeyJT8REZEu9F4l1LFjR+zbt6/R6Mn58+cxevRoZGdnIyEhAaNHj0ZBQYFBgr0VXaqMxVZRXYuui/ZAEIDTb4yEm0P7LR4mIiJqCV0+v/UuulUoFMjLy2t0PD8/X9vIzdnZGdXV1fq+hUlKyS2DIADuDjImK0RERM2kd8Iyfvx4REdHY9euXbhy5Qqys7Oxa9cuPPvss5gwYQIA4OTJkwgLCzNUrCaBLfmJiIh0p3cNy/r16zFv3jw89thjqK2trbuZpSWmTp2KVatWAQAiIiKwadMmw0RqIlhwS0REpDu9ExYHBwds3LgRq1atQnp6OgRBQHBwMBwcHLTX9OrVyxAxmhS25CciItJdixvH5eTk4Nq1awgLC4ODgwP0rOE1C4IgaEdYOCVERETUfHonLIWFhRgxYgTCwsLwwAMP4Nq1awCAadOm4aWXXjJYgKYkv0yFovJqSCRAqCcTFiIioubSO2GZN28erKyskJmZCTu7G/vhPProoybbobal6qeDOrnZw9ZaKnI0RERE7YfeNSx79+7Fnj174Ovr2+B4aGgoLl++3OLATJG2foUt+YmIiHSi9whLeXl5g5GVegUFBe16J+XWxBVCRERE+tE7YRk8eDA+//xz7XOJRAKNRoP//ve/GDZsmEGCMzXJLLglIiLSi95TQv/9738xdOhQxMfHo7q6Gi+//DLOnz+PoqIiHD161JAxmgS1RkBK/R5CHYx7+wAiIiJjo/cIS5cuXXD27FncddddGDVqFMrLyzFx4kQkJiYiODjYkDGahMuF5VDVamBjZQF/18ZTaURERHRreo+wZGZmws/PD0uWLGnynL+/f4sCMzX100FhXo6QWkhEjoaIiKh90XuEJTAwEPn5+Y2OFxYWIjAwsEVBmaIkrhAiIiLSm94JiyAIkEgajxSUlZXBxsamRUGZIrbkJyIi0p/OU0IxMTEA6lYFvfnmmw2WNqvVapw4cYJ7CDUhub7g1psFt0RERLrSOWFJTEwEUDfC8tdff8Ha2lp7ztraGj179sT8+fMNF6EJqKxW41JhOQCOsBAREelD54Tlt99+AwA888wz+OCDD+DkxBGDO0nNK4UgAG721vBwZFM9IiIiXem9SmjLli2GjMOkscMtERFRy+idsJSXl+Odd97BgQMHkJeXB41G0+B8enp6i4MzFUnXmLAQERG1hN4Jy7Rp03D48GE8+eST6NChQ5MrhqhOcq4SAFvyExER6UvvhOWXX37Bzz//jIEDBxoyHpN0Y0kz632IiIj0oXcfFhcXF7i6uhoyFpNUUKZCQVk1JBIgzMtB7HCIiIjaJb0TlmXLlmHhwoWoqKgwZDwmp350xd/VDnbWeg9oERERmTW9P0FXrFiBixcvwsvLC506dYKVlVWD8wkJCS0OzhSwJT8REVHL6Z2wTJgwwYBhmK7knOsFtx1Yv0JERKQvvROWRYsWGTIOk1U/JcQVQkRERPrTu4aF7kyjEZCSWwaAPViIiIhaQucRFhcXl2b1XCkqKtIrIFOSWVSByho1ZJYW6ORmL3Y4RERE7ZbOCcvq1atbIQzTVF9wG+rlAKkFG+sRERHpS+eEZerUqa0Rh0nSNozzYsEtERFRSxhFDUtsbCz69u0LR0dHeHp6YsKECUhOThY7rBZjS34iIiLDMIqE5fDhw5g5cyaOHz+Offv2oba2FqNHj0Z5ebnYobUId2kmIiIyDKNovfrrr782eL5lyxZ4enri9OnTGDx4sEhRtUxVjRqXCuoSLo6wEBERtYxRJCz/pFAoAOCWexWpVCqoVCrtc6VS2SZx6SItrwwaAXCxs4KHo0zscIiIiNo1o5gSupkgCIiJicGgQYPQrVu3Jq+JjY2FXC7XPvz8/No4yju7cK0uiQr3dmzWMnAiIiK6Nb1HWGJiYpo8LpFIYGNjg5CQEIwfP17nHZ1ffPFFnD17FnFxcbe8ZsGCBQ3eX6lUGl3ScqPDLVcIERERtZTeCUtiYiISEhKgVqsRHh4OQRCQmpoKqVSKiIgIfPzxx3jppZcQFxeHLl26NOues2bNwu7du3HkyBH4+vre8jqZTAaZzLinWZJzWXBLRERkKHpPCY0fPx4jR47E1atXcfr0aSQkJCA7OxujRo3C5MmTkZ2djcGDB2PevHl3vJcgCHjxxRfx3Xff4eDBgwgMDNQ3LKPBFUJERESGIxEEQdDnhR07dsS+ffsajZ6cP38eo0ePRnZ2NhISEjB69GgUFBTc9l4zZszA9u3b8cMPPyA8PFx7XC6Xw9bW9o6xKJVKyOVyKBQKODmJPwVTVF6N3sv2AQDOLbkXDjKjrG0mIiISlS6f33qPsCgUCuTl5TU6np+fr1214+zsjOrq6jvea926dVAoFBg6dCg6dOigfXz11Vf6hieqpJy6P7+fqy2TFSIiIgPQ+9N0/PjxiI6OxooVK9C3b19IJBKcPHkS8+fPx4QJEwAAJ0+eRFhY2B3vpecgj9FiwS0REZFh6Z2wrF+/HvPmzcNjjz2G2trauptZWmLq1KlYtWoVACAiIgKbNm0yTKTtyI2EhfUrREREhqB3wuLg4ICNGzdi1apVSE9PhyAICA4OhoODg/aaXr16GSLGdocFt0RERIbV4gILBwcH9OjRwxCxmASNRkBKLkdYiIiIDEnvhKW8vBzvvPMODhw4gLy8PGg0mgbn09PTWxxce3SluBIV1WpYW1qgk5u92OEQERGZBL0TlmnTpuHw4cN48skn0aFDB7afv65+hVCIhwMspUa38wEREVG7pHfC8ssvv+Dnn3/GwIEDDRlPu8eCWyIiIsPTewjAxcVF532CzEESW/ITEREZnN4Jy7Jly7Bw4UJUVFQYMp52L5krhIiIiAxO7ymhFStW4OLFi/Dy8kKnTp1gZWXV4HxCQkKLg2tvqmrUyCgoB8CmcURERIakd8JS382WbkjLK4NaI0BuawUvJ+PeTZqIiKg90TthWbRokSHjMAk3Twdx1RQREZHhcN2tASWzYRwREVGr0GmExdXVFSkpKXB3d4eLi8ttRxGKiopaHFx7w5b8RERErUOnhGXVqlVwdKz7MF69enVrxNOuJV9vGscRFiIiIsPSKWGZOnVqk18TUFJRjVylCgAQ5sWEhYiIyJBatPmhRqNBWlpak3sJDR48uEWBtTf100G+LrZwtLG6w9VERESkC70TluPHj+Pxxx/H5cuXIQhCg3MSiQRqtbrFwbUnbMlPRETUevROWKZPn46oqCj8/PPP3PwQLLglIiJqTXonLKmpqfjmm28QEhJiyHjarfqC23B2uCUiIjI4vfuw9OvXD2lpaYaMpd0SBAEpuWUAOCVERETUGvQeYZk1axZeeukl5OTkoHv37o32EurRo0eLg2svrhRXokxVCyupBIHu9mKHQ0REZHL0Tlj+9a9/AQCio6O1xyQSCQRBMLui2/qC22APB1hJ2TyYiIjI0PROWDIyMgwZR7vGlvxEREStS++EJSAgwJBxtGs3Vgix4JaIiKg1tKhxXEpKCg4dOtRk47iFCxe2KLD2hC35iYiIWpfeCcvGjRvxwgsvwN3dHd7e3g36sEgkErNJWFS1alzMLwfAHixEREStRe+E5a233sLy5cvxyiuvGDKedudiXjnUGgGONpboILcROxwiIiKTpPeSluLiYjzyyCOGjKVdSs69MR1k7t1+iYiIWoveCcsjjzyCvXv3GjKWdokt+YmIiFqf3lNCISEhePPNN3H8+PEmG8fNnj27xcG1B8lcIURERNTqJMI/t1pupsDAwFvfVCJBenq63kHpSqlUQi6XQ6FQwMmpbROH/rEHcE1RhW+m90dUJ9c2fW8iIqL2TJfPbzaOawFFRQ2uKaoAAGGcEiIiImo1RtFH/siRIxg7dix8fHwgkUjw/fffix1Ss9R3uO3obAsnG6s7XE1ERET60nuE5eY9hJry6aefNvte5eXl6NmzJ5555hntHkXtQX3DOBbcEhERtS69E5bi4uIGz2tqanDu3DmUlJRg+PDhOt3r/vvvx/33369vKKLhCiEiIqK2oXfCsmvXrkbHNBoNZsyYgaCgoBYFdScqlQoqlUr7XKlUtur73Ur9CiG25CciImpdBq1hsbCwwLx587Bq1SpD3raR2NhYyOVy7cPPz69V368pgiBoa1g4wkJERNS6DF50e/HiRdTW1hr6tg0sWLAACoVC+8jKymrV92vKVUUVSqtqYWkhQZC7Q5u/PxERkTnRe0ooJiamwXNBEHDt2jX8/PPPmDp1aosDux2ZTAaZTNaq73En9QW3wR4OsLY0isVWREREJkvvhCUxMbHBcwsLC3h4eGDFihV3XEFkClhwS0RE1Hb0Tlh+++23W57Lzs5Gx44dm32vsrIypKWlaZ9nZGTgzJkzcHV1hb+/v74htqqka0xYiIiI2opB5zJycnIwa9YshISE6PS6+Ph4REZGIjIyEkDddFNkZCQWLlxoyPAMiiuEiIiI2o7OCUtJSQmmTJkCDw8P+Pj4YM2aNdBoNFi4cCGCgoJw/PhxnZrGAcDQoUMhCEKjx2effaZreG2iulaDi/llADjCQkRE1BZ0nhJ67bXXcOTIEUydOhW//vor5s2bh19//RVVVVX45ZdfMGTIkNaI06ikF5ShViPAUWaJjs62YodDRERk8nROWH7++Wds2bIFI0eOxIwZMxASEoKwsDCsXr26FcIzTvXTQWHejpBIJCJHQ0REZPp0nhK6evUqunTpAgAICgqCjY0Npk2bZvDAjFkS61eIiIjalM4Ji0ajgZXVjZ2JpVIp7O3tDRqUsWPBLRERUdvSeUpIEAQ8/fTT2sZtVVVVmD59eqOk5bvvvjNMhEYoWduDxUnkSIiIiMyDzgnLP7vYPvHEEwYLpj1QVtUgu6QSABDuxREWIiKitqBzwrJly5bWiKPdSLk+utJBbgO5ndUdriYiIiJD4CY4OmJLfiIiorbHhEVHyUxYiIiI2hwTFh1xhRAREVHbY8KiA0EQkJSjBACEe3GFEBERUVthwqKDHGUVlFW1kFpIEOxpXr1niIiIxMSERQf1BbdB7vaQWUpFjoaIiMh8MGHRQdI1FtwSERGJgQmLDpKv16+w4JaIiKhtMWHRQRJb8hMREYmCCUsz1ag1uJhfBoAjLERERG2NCUszZRSUo0YtwN5aio7OtmKHQ0REZFaYsDTTzS35LSwkIkdDRERkXpiwNFN9wS3rV4iIiNoeE5ZmYkt+IiIi8TBhaSbu0kxERCQeJizNUKaqxZXiSgAcYSEiIhIDE5ZmqJ8O8nKSwdnOWuRoiIiIzA8TlmZIZsM4IiIiUTFhaQa25CciIhIXE5Zm0BbcejFhISIiEgMTljsQBAHJuVwhREREJCYmLHeQV6pCSUUNpBYShHg6iB0OERGRWWLCcgcXrtXVr3Rys4ONlVTkaIiIiMwTE5Y7uNHhliuEiIiIxMKE5Q6S2eGWiIhIdEaTsHz88ccIDAyEjY0N+vTpg99//13skACwJT8REZExMIqE5auvvsLcuXPx+uuvIzExEffccw/uv/9+ZGZmihpXrVqDtPwyAOzBQkREJCajSFhWrlyJZ599FtOmTUPnzp2xevVq+Pn5Yd26daLGdamwHNW1GthZS+HnYidqLEREROZM9ISluroap0+fxujRoxscHz16NI4dO9bka1QqFZRKZYNHa6ifDgrzcoSFhaRV3oOIiIjuTPSEpaCgAGq1Gl5eXg2Oe3l5IScnp8nXxMbGQi6Xax9+fn6tEpuisgb21lJOBxEREYnMUuwA6kkkDUcwBEFodKzeggULEBMTo32uVCpbJWmZ0i8Ak/v6o6pWbfB7ExERUfOJnrC4u7tDKpU2Gk3Jy8trNOpSTyaTQSaTtUV4sLCQwM5a9L8mIiIisyb6lJC1tTX69OmDffv2NTi+b98+DBgwQKSoiIiIyJgYxdBBTEwMnnzySURFRaF///7YsGEDMjMzMX36dLFDIyIiIiNgFAnLo48+isLCQixduhTXrl1Dt27d8L///Q8BAQFih0ZERERGQCIIgiB2EC2lVCohl8uhUCjg5MQ9f4iIiNoDXT6/Ra9hISIiIroTJixERERk9JiwEBERkdFjwkJERERGjwkLERERGT0mLERERGT0mLAQERGR0WPCQkREREaPCQsREREZPaNozd9S9c16lUqlyJEQERFRc9V/bjen6b5JJCylpaUAAD8/P5EjISIiIl2VlpZCLpff9hqT2EtIo9Hg6tWrcHR0hEQiETsco6RUKuHn54esrCzut2QE+P0wLvx+GBd+P4xPa31PBEFAaWkpfHx8YGFx+yoVkxhhsbCwgK+vr9hhtAtOTk78AWBE+P0wLvx+GBd+P4xPa3xP7jSyUo9Ft0RERGT0mLAQERGR0WPCYiZkMhkWLVoEmUwmdigEfj+MDb8fxoXfD+NjDN8Tkyi6JSIiItPGERYiIiIyekxYiIiIyOgxYSEiIiKjx4SFiIiIjB4TFhMWGxuLvn37wtHREZ6enpgwYQKSk5PFDouui42NhUQiwdy5c8UOxaxlZ2fjiSeegJubG+zs7NCrVy+cPn1a7LDMUm1tLd544w0EBgbC1tYWQUFBWLp0KTQajdihmYUjR45g7Nix8PHxgUQiwffff9/gvCAIWLx4MXx8fGBra4uhQ4fi/PnzbRYfExYTdvjwYcycORPHjx/Hvn37UFtbi9GjR6O8vFzs0MzeqVOnsGHDBvTo0UPsUMxacXExBg4cCCsrK/zyyy/4+++/sWLFCjg7O4sdmll699138cknn2Dt2rW4cOEC3nvvPfz3v//Fhx9+KHZoZqG8vBw9e/bE2rVrmzz/3nvvYeXKlVi7di1OnToFb29vjBo1SrufX2vjsmYzkp+fD09PTxw+fBiDBw8WOxyzVVZWht69e+Pjjz/GW2+9hV69emH16tVih2WWXn31VRw9ehS///672KEQgAcffBBeXl7YvHmz9ti//vUv2NnZ4YsvvhAxMvMjkUiwa9cuTJgwAUDd6IqPjw/mzp2LV155BQCgUqng5eWFd999F88//3yrx8QRFjOiUCgAAK6uriJHYt5mzpyJMWPGYOTIkWKHYvZ2796NqKgoPPLII/D09ERkZCQ2btwodlhma9CgQThw4ABSUlIAAH/++Sfi4uLwwAMPiBwZZWRkICcnB6NHj9Yek8lkGDJkCI4dO9YmMZjE5od0Z4IgICYmBoMGDUK3bt3EDsds7dy5EwkJCTh16pTYoRCA9PR0rFu3DjExMXjttddw8uRJzJ49GzKZDE899ZTY4ZmdV155BQqFAhEREZBKpVCr1Vi+fDkmT54sdmhmLycnBwDg5eXV4LiXlxcuX77cJjEwYTETL774Is6ePYu4uDixQzFbWVlZmDNnDvbu3QsbGxuxwyEAGo0GUVFRePvttwEAkZGROH/+PNatW8eERQRfffUVtm3bhu3bt6Nr1644c+YM5s6dCx8fH0ydOlXs8Ah1U0U3EwSh0bHWwoTFDMyaNQu7d+/GkSNH4OvrK3Y4Zuv06dPIy8tDnz59tMfUajWOHDmCtWvXQqVSQSqVihih+enQoQO6dOnS4Fjnzp3x7bffihSRefvPf/6DV199FY899hgAoHv37rh8+TJiY2OZsIjM29sbQN1IS4cOHbTH8/LyGo26tBbWsJgwQRDw4osv4rvvvsPBgwcRGBgodkhmbcSIEfjrr79w5swZ7SMqKgpTpkzBmTNnmKyIYODAgY2W+qekpCAgIECkiMxbRUUFLCwafixJpVIuazYCgYGB8Pb2xr59+7THqqurcfjwYQwYMKBNYuAIiwmbOXMmtm/fjh9++AGOjo7aOUi5XA5bW1uRozM/jo6OjeqH7O3t4ebmxroikcybNw8DBgzA22+/jUmTJuHkyZPYsGEDNmzYIHZoZmns2LFYvnw5/P390bVrVyQmJmLlypWIjo4WOzSzUFZWhrS0NO3zjIwMnDlzBq6urvD398fcuXPx9ttvIzQ0FKGhoXj77bdhZ2eHxx9/vG0CFMhkAWjysWXLFrFDo+uGDBkizJkzR+wwzNqPP/4odOvWTZDJZEJERISwYcMGsUMyW0qlUpgzZ47g7+8v2NjYCEFBQcLrr78uqFQqsUMzC7/99luTnxlTp04VBEEQNBqNsGjRIsHb21uQyWTC4MGDhb/++qvN4mMfFiIiIjJ6rGEhIiIio8eEhYiIiIweExYiIiIyekxYiIiIyOgxYSEiIiKjx4SFiIiIjB4TFiIiIjJ6TFiIiIjI6DFhIaIWW7x4MXr16iXa+7/55pt47rnnDHa/hx9+GCtXrjTY/Yio5djplohu605bx0+dOlW727Sbm1sbRXVDbm4uQkNDcfbsWXTq1Mkg9zx79iyGDRuGjIwMODk5GeSeRNQy3PyQiG7r2rVr2q+/+uorLFy4sMEOx7a2tnBwcICDg4MY4WHz5s3o37+/wZIVAOjRowc6deqEL7/8Ei+88ILB7ktE+uOUEBHdlre3t/Yhl8shkUgaHfvnlNDTTz+NCRMm4O2334aXlxecnZ2xZMkS1NbW4j//+Q9cXV3h6+uLTz/9tMF7ZWdn49FHH4WLiwvc3Nwwfvx4XLp06bbx7dy5E+PGjWtwbOjQoXjxxRfx4osvwtnZGW5ubnjjjTdw84Dyxx9/jNDQUNjY2MDLywsPP/xwg3uMGzcOO3bs0O8vjYgMjgkLEbWKgwcP4urVqzhy5AhWrlyJxYsX48EHH4SLiwtOnDiB6dOnY/r06cjKygIAVFRUYNiwYXBwcMCRI0cQFxcHBwcH3Hfffaiurm7yPYqLi3Hu3DlERUU1Ord161ZYWlrixIkTWLNmDVatWoVNmzYBAOLj4zF79mwsXboUycnJ+PXXXzF48OAGr7/rrrtw8uRJqFQqA//NEJE+mLAQUatwdXXFmjVrEB4ejujoaISHh6OiogKvvfYaQkNDsWDBAlhbW+Po0aMA6kZKLCwssGnTJnTv3h2dO3fGli1bkJmZiUOHDjX5HpcvX4YgCPDx8Wl0zs/PD6tWrUJ4eDimTJmCWbNmYdWqVQCAzMxM2Nvb48EHH0RAQAAiIyMxe/bsBq/v2LEjVCoVcnJyDPsXQ0R6YcJCRK2ia9eusLC48SPGy8sL3bt31z6XSqVwc3NDXl4eAOD06dNIS0uDo6OjtibG1dUVVVVVuHjxYpPvUVlZCQCwsbFpdO7uu+9uUDDcv39/pKamQq1WY9SoUQgICEBQUBCefPJJfPnll6ioqGjweltbWwBodJyIxMGiWyJqFVZWVg2eSySSJo9pNBoAgEajQZ8+ffDll182upeHh0eT7+Hu7g6gbmroVtc0xdHREQkJCTh06BD27t2LhQsXYvHixTh16hScnZ0BAEVFRbd9byJqWxxhISKj0Lt3b6SmpsLT0xMhISENHnK5vMnXBAcHw8nJCX///Xejc8ePH2/0PDQ0FFKpFABgaWmJkSNH4r333sPZs2dx6dIlHDx4UHv9uXPn4Ovrq02KiEhcTFiIyChMmTIF7u7uGD9+PH7//XdkZGTg8OHDmDNnDq5cudLkaywsLDBy5EjExcU1OpeVlYWYmBgkJydjx44d+PDDDzFnzhwAwE8//YQ1a9bgzJkzuHz5Mj7//HNoNBqEh4drX//7779j9OjRrfOHJSKdMWEhIqNgZ2eHI0eOwN/fHxMnTkTnzp0RHR2NysrK2zZve+6557Bz507t1FK9p556CpWVlbjrrrswc+ZMzJo1S9sN19nZGd999x2GDx+Ozp0745NPPsGOHTvQtWtXAEBVVRV27dqFf//73633ByYinbDTLRG1a4Ig4O6778bcuXMxefJkAHV9WHr16oXVq1frdc+PPvoIP/zwA/bu3WvASImoJTjCQkTtmkQiwYYNG1BbW2uwe1pZWeHDDz802P2IqOW4SoiI2r2ePXuiZ8+eBrufITdSJCLD4JQQERERGT1OCREREZHRY8JCRERERo8JCxERERk9JixERERk9JiwEBERkdFjwkJERERGjwkLERERGT0mLERERGT0/h8Y4teZCBdSggAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot running integral for test data with velocities (PRM_NCBOX, TRJ_NCBOX)\n", + "v_running_integral_plot = v.plot_running_integral()" + ] + }, + { + "cell_type": "markdown", + "id": "0adb88ec-8fc2-44d2-a49a-5d69ed68361e", + "metadata": {}, + "source": [ + "## Exceptions" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "1c7a8eba-420c-46bb-814f-f84b7966779f", + "metadata": {}, + "outputs": [ + { + "ename": "NoDataError", + "evalue": "VACF computation requires velocities in the trajectory", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNoDataError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[18], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Running without velocities raises NoDataError\u001b[39;00m\n\u001b[1;32m 2\u001b[0m u_no_vels \u001b[38;5;241m=\u001b[39m mda\u001b[38;5;241m.\u001b[39mUniverse\u001b[38;5;241m.\u001b[39mempty(\u001b[38;5;241m10\u001b[39m, n_frames\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, velocities\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m----> 3\u001b[0m v \u001b[38;5;241m=\u001b[39m VACF(u_no_vels\u001b[38;5;241m.\u001b[39matoms)\u001b[38;5;241m.\u001b[39mrun()\n", + "File \u001b[0;32m~/Projects/mdanalysis/package/MDAnalysis/analysis/base.py:448\u001b[0m, in \u001b[0;36mAnalysisBase.run\u001b[0;34m(self, start, stop, step, frames, verbose, progressbar_kwargs)\u001b[0m\n\u001b[1;32m 446\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mframes[i] \u001b[38;5;241m=\u001b[39m ts\u001b[38;5;241m.\u001b[39mframe\n\u001b[1;32m 447\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimes[i] \u001b[38;5;241m=\u001b[39m ts\u001b[38;5;241m.\u001b[39mtime\n\u001b[0;32m--> 448\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_single_frame()\n\u001b[1;32m 449\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFinishing up\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_conclude()\n", + "File \u001b[0;32m~/Projects/transport-analysis/transport_analysis/velocityautocorr.py:187\u001b[0m, in \u001b[0;36mVelocityAutocorr._single_frame\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;66;03m# This runs once for each frame of the trajectory\u001b[39;00m\n\u001b[1;32m 181\u001b[0m \n\u001b[1;32m 182\u001b[0m \u001b[38;5;66;03m# The trajectory positions update automatically\u001b[39;00m\n\u001b[1;32m 183\u001b[0m \u001b[38;5;66;03m# You can access the frame number using self._frame_index\u001b[39;00m\n\u001b[1;32m 184\u001b[0m \n\u001b[1;32m 185\u001b[0m \u001b[38;5;66;03m# trajectory must have velocity information\u001b[39;00m\n\u001b[1;32m 186\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ts\u001b[38;5;241m.\u001b[39mhas_velocities:\n\u001b[0;32m--> 187\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NoDataError(\n\u001b[1;32m 188\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mVACF computation requires velocities in the trajectory\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 189\u001b[0m )\n\u001b[1;32m 191\u001b[0m \u001b[38;5;66;03m# set shape of velocity array\u001b[39;00m\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_velocities[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_frame_index] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39matomgroup\u001b[38;5;241m.\u001b[39mvelocities[\n\u001b[1;32m 193\u001b[0m :, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dim\n\u001b[1;32m 194\u001b[0m ]\n", + "\u001b[0;31mNoDataError\u001b[0m: VACF computation requires velocities in the trajectory" + ] + } + ], + "source": [ + "# Running without velocities raises NoDataError\n", + "u_no_vels = mda.Universe.empty(10, n_frames=5, velocities=False)\n", + "v = VACF(u_no_vels.atoms).run()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/viscosity_early_demo.ipynb b/docs/tutorials/viscosity_early_demo.ipynb new file mode 100644 index 0000000..7429d30 --- /dev/null +++ b/docs/tutorials/viscosity_early_demo.ipynb @@ -0,0 +1,181 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7f78c8e6-fde4-42ff-8e69-538c2000455d", + "metadata": {}, + "source": [ + "## Basic usage example" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "185081b8-efad-4e70-9508-9d7767b24275", + "metadata": {}, + "outputs": [], + "source": [ + "import MDAnalysis as mda\n", + "import numpy as np\n", + "from MDAnalysis.tests.datafiles import PRM_NCBOX, TRJ_NCBOX\n", + "\n", + "from transport_analysis.viscosity import ViscosityHelfand as VH" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ae6174f9-4c36-476a-9f55-0583d3449be6", + "metadata": {}, + "outputs": [], + "source": [ + "# # test data with all required info (masses, velocities, positions, box volume)\n", + "u = mda.Universe(PRM_NCBOX, TRJ_NCBOX)\n", + "ag = u.select_atoms(\"name O and resname WAT and resid 1-10\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fa26ae82-eda9-43ef-8d90-18955765bf54", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 96.43610866 94.54194053 86.22211806 85.18650814\n", + " 93.90772559 108.7836928 97.7115102 96.4890803 139.72614008]\n" + ] + } + ], + "source": [ + "t_visc = VH(ag).run()\n", + "print(t_visc.results.timeseries)" + ] + }, + { + "cell_type": "markdown", + "id": "c7a6f1c5-d00b-4009-93db-bfbf8be79d32", + "metadata": {}, + "source": [ + "## Plotting Demo (Will Not Work Until PR is Merged)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0f3d16e-71da-465d-b36b-62ff1b9f8530", + "metadata": {}, + "outputs": [], + "source": [ + "# if using only the terminal, the plots may not appear automatically like they do here\n", + "# you will then need the following:\n", + "# import matplotlib.pyplot as plt\n", + "\n", + "# then after running the desired plotting function, run:\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "baab8311-e03b-49ad-83f4-6d4e20ecde51", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visc_plot = t_visc.plot_viscosity_function()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "97fa803d-e3c8-4978-b223-b8f8752c985c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "running_visc_plot = t_visc.plot_running_viscosity()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "003fdf49-1b11-43a5-becb-2ee39166ce66", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[48.21805433 31.51398018 21.55552951 17.03730163 15.6512876 15.54052754\n", + " 12.21393878 10.72100892 13.97261401]\n" + ] + } + ], + "source": [ + "print(t_visc.running_viscosity)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d26f3f83-2d65-4b67-828a-674111174495", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]\n" + ] + } + ], + "source": [ + "print(t_visc.times)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}