Skip to content

Instantly share code, notes, and snippets.

@orbeckst
Last active June 29, 2023 12:05
Show Gist options
  • Save orbeckst/b611626e7640f399580e233195c6429c to your computer and use it in GitHub Desktop.
Save orbeckst/b611626e7640f399580e233195c6429c to your computer and use it in GitHub Desktop.
Radial distribution function (RDF) calculation of the centers of mass of molecules with MDAnalysis.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# RDF of a polymer\n",
"\n",
"**NOTE: DO NOT USE CODE IN THIS NOTEBOOK BLINDLY FOR YOUR OWN RESEARCH. CHECK IT FOR YOURSELF AND COMPARE YOUR RESULTS TO ANSWERS THAT YOU KNOW TO BE CORRECT. IT IS *YOUR OWN RESPONSIBILITY* TO PRODUCE CORRECT RESULTS.**\n",
"\n",
"A common request on the MDAnalysis mailing list is to calculate the RDF of the subunits of a polymer, namely using the centers of mass of monomers in the polymer. This notebook demonstrates two methods how this can be achieved:\n",
"\n",
"1. on-the-fly transformations (a MDAnalysis hack)\n",
"2. BeadGroups"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import MDAnalysis as mda\n",
"import MDAnalysisData.datasets\n",
"\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[MDAnalysisData](https://www.mdanalysis.org/MDAnalysisData/) is used for an example trajectory in this notebook. You don't use it when you work with your own trajectories. However, it is recommended that you try out the notebook with a _working_ example first before applying it to your own problem.)\n",
"\n",
"You can [install MDAnalysisData](https://www.mdanalysis.org/MDAnalysisData/install.html) with \n",
"```\n",
"conda install mdanalysisdata\n",
"```\n",
"or\n",
"```\n",
"pip install MDAnalysisData\n",
"```\n",
"See the [MDAnalysisData](https://www.mdanalysis.org/MDAnalysisData/) docs for more information."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the RDF calculation we use the [rdf](https://docs.mdanalysis.org/1.0.0/documentation_pages/analysis/rdf.html) module in MDAnalysis:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"from MDAnalysis.analysis import rdf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will plot with matplotlib:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"plt.matplotlib.style.use('ggplot')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0.0\n",
"0.8.0\n"
]
}
],
"source": [
"print(mda.__version__)\n",
"print(MDAnalysisData.__version__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Currently, warnings of the following type are issued\n",
"```\n",
"...MDAnalysis/core/topologyattrs.py:2011: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" np.array(sorted(unique_bonds)), 4)\n",
"```\n",
"They are harmless (and will be fixed in upcoming releases of MDAnalysis) and I will suppress them:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.simplefilter(\"ignore\", category=np.VisibleDeprecationWarning)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example data: CG fiber self assembly "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As an example we use the [CG_fiber dataset](https://www.mdanalysis.org/MDAnalysisData/CG_fiber.html) that was also used in the [Workshop tutorial: Analysis of a coarse-grained trajectory](https://github.com/MDAnalysis/WorkshopHackathon2018/blob/master/05_Tutorial3/coarse_grained_fiber.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"fiber = MDAnalysisData.datasets.fetch_CG_fiber()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"u = mda.Universe(fiber.topology, fiber.trajectory)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Universe with 8364 atoms>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"u"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The polymer consists of residues with names AAA, BBB, CCC, and DDD"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"polymer = u.select_atoms(\"resname AAA BBB CCC DDD\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<AtomGroup [<Atom 1: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, <Atom 2: T2 of type T2 of resname AAA, resid 1 and segid SYSTEM>, <Atom 3: T3 of type T3 of resname AAA, resid 1 and segid SYSTEM>, ..., <Atom 1627: T2 of type T2 of resname AAA, resid 1 and segid SYSTEM>, <Atom 1628: T3 of type T3 of resname AAA, resid 1 and segid SYSTEM>, <Atom 1629: T4 of type T4 of resname AAA, resid 1 and segid SYSTEM>]>\n"
]
}
],
"source": [
"print(u.select_atoms(\"resname AAA\"))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<AtomGroup [<Atom 5: B1 of type B1 of resname BBB, resid 2 and segid SYSTEM>, <Atom 6: B2 of type B2 of resname BBB, resid 3 and segid SYSTEM>, <Atom 7: B3 of type B3 of resname BBB, resid 4 and segid SYSTEM>, ..., <Atom 1630: B1 of type B1 of resname BBB, resid 2 and segid SYSTEM>, <Atom 1631: B2 of type B2 of resname BBB, resid 3 and segid SYSTEM>, <Atom 1632: B3 of type B3 of resname BBB, resid 4 and segid SYSTEM>]>\n"
]
}
],
"source": [
"print(u.select_atoms(\"resname BBB\"))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<AtomGroup [<Atom 8: C1 of type C1 of resname CCC, resid 6 and segid SYSTEM>, <Atom 9: C2 of type C2 of resname CCC, resid 7 and segid SYSTEM>, <Atom 10: C3 of type C3 of resname CCC, resid 7 and segid SYSTEM>, ..., <Atom 1633: C1 of type C1 of resname CCC, resid 6 and segid SYSTEM>, <Atom 1634: C2 of type C2 of resname CCC, resid 7 and segid SYSTEM>, <Atom 1635: C3 of type C3 of resname CCC, resid 7 and segid SYSTEM>]>\n"
]
}
],
"source": [
"print(u.select_atoms(\"resname CCC\"))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<AtomGroup [<Atom 11: D1 of type D1 of resname DDD, resid 7 and segid SYSTEM>, <Atom 12: D2 of type D2 of resname DDD, resid 8 and segid SYSTEM>, <Atom 13: D3 of type D3 of resname DDD, resid 9 and segid SYSTEM>, ..., <Atom 1636: D1 of type D1 of resname DDD, resid 7 and segid SYSTEM>, <Atom 1637: D2 of type D2 of resname DDD, resid 8 and segid SYSTEM>, <Atom 1638: D3 of type D3 of resname DDD, resid 9 and segid SYSTEM>]>\n"
]
}
],
"source": [
"print(u.select_atoms(\"resname DDD\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each polymer consists of 4 parts, named AAA, BBB, CCC, DDD. The numbering in the topology is strange where the BBB beads are treated as different \"residues\". However, we can make use of bond information and decompose into \"fragments\", i.e., entitities connected by bonds. This gives the COM for the 126 polymers:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(126, 3)\n"
]
}
],
"source": [
"polymer_coms = polymer.center_of_mass(unwrap=True, compound=\"fragments\")\n",
"print(polymer_coms.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use `unwrap=True` to make sure that fragments are not broken across periodic boundaries — check the docs for [`center_of_mass()`](https://docs.mdanalysis.org/1.0.0/documentation_pages/core/topologyattrs.html#MDAnalysis.core.topologyattrs.Masses.center_of_mass). (Unwrapping is a fairly slow operation that should be sped up in future releases of MDAnalysis; if you prepare a trajectory in which molecules are always whole then you don't need this setting.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using on-the-fly transformations "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There is no built-in RDF of centers of mass in MDAnalysis. Here we use a **MDAnalysis hack** using [on the fly transformations](https://userguide.mdanalysis.org/1.0.0/trajectories/transformations.html), which can modify the trajectory when a frame is read is read. The idea is\n",
"\n",
"1. compute the center of mass (COM) for each fragment\n",
"2. replace the real coordinates of one special atom in each fragment with the COM coordinates\n",
"3. calculate the RDF using the special atoms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Designate one atom in each polymer as the atom whose coordinates will be replaced with the center of mass coordinates. Here we just pick the first one, T1 in AAA."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<AtomGroup [<Atom 1: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, <Atom 14: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, <Atom 27: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, ..., <Atom 1600: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, <Atom 1613: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>, <Atom 1626: T1 of type T1 of resname AAA, resid 1 and segid SYSTEM>]>\n",
"126\n"
]
}
],
"source": [
"com_atoms = polymer.select_atoms(\"name T1\")\n",
"print(com_atoms)\n",
"print(com_atoms.n_atoms)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For each step in the trajecory we will replace the T1 coordinates with the coordinates:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"com_atoms.positions = polymer.center_of_mass(unwrap=True, compound=\"fragments\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now [write an on-the-fly transformation](https://docs.mdanalysis.org/2.0.0-dev0/documentation_pages/trajectory_transformations.html#creating-complex-transformation-classes) (we write it as a class as this is the recommended form for MDAnalysis 2.0.0 and will also work with MDAnalysis 1.x):"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"class replace_with_COM:\n",
" \"\"\"Replace special atom `atomname` in each fragment with COM of the fragment.\"\"\"\n",
" def __init__(self, polymer, atomname):\n",
" self.polymer = polymer\n",
" self.com_atoms = polymer.select_atoms(f\"name {atomname}\")\n",
" \n",
" # sanity check\n",
" assert self.get_com().shape == self.com_atoms.positions.shape\n",
" \n",
" def get_com(self):\n",
" return self.polymer.center_of_mass(unwrap=True, compound=\"fragments\")\n",
" \n",
" def __call__(self, ts):\n",
" self.com_atoms.positions = self.get_com()\n",
" return ts\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(Note: It is important to write the coordinate replacement exactly as written above:\n",
"```python\n",
"self.com_atoms.positions = self.get_com() # correct\n",
"```\n",
"Replacing the \"elements of the array\"\n",
"```python\n",
"self.com_atoms.positions[:] = self.get_com() # WRONG\n",
"```\n",
"will _not_ work because `.positions` is actually a managed attribute of the AtomGroup and setting it is a bit more complicated under the hood.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Attach the transformation to the trajectory so that at every step, the T1 atom will contain the coordinates of the center of mass of the polymer:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"ucom = mda.Universe(fiber.topology, fiber.trajectory)\n",
"polymer = ucom.select_atoms(\"resname AAA BBB CCC DDD\")\n",
"ucom.trajectory.add_transformations(replace_with_COM(polymer, \"T1\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### COM RDF "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now perform the RDF calculation (see also the original [coarse_grained_fiber.ipynb](https://github.com/MDAnalysis/WorkshopHackathon2018/blob/master/05_Tutorial3/coarse_grained_fiber.ipynb))."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8d13108031484319ac2dd9b891a317d6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"com_atoms = ucom.select_atoms(\"name T1\")\n",
"comRDF = rdf.InterRDF(com_atoms, com_atoms, \n",
" range=(0, 40), exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `exclusion_block=(1, 1)` is important so that the distance of each COM to itself (distance 0) is excluded."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the data"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(comRDF.bins, comRDF.rdf, label=\"polymer COM\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Comparison to T4 RDF "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For comparison, calculate the RDF in the same way as in [coarse_grained_fiber.ipynb](https://github.com/MDAnalysis/WorkshopHackathon2018/blob/master/05_Tutorial3/coarse_grained_fiber.ipynb) from the T4 particles:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e7c4f71ae5b84664bf8b5dac8ef5c13e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"T4_atoms = u.select_atoms(\"name T4\")\n",
"T4_RDF = rdf.InterRDF(T4_atoms, T4_atoms, range=(0, 40), \n",
" exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(Note that the analysis runs much faster when we only look at a single atom in each polymer instead of calculating the center of mass with the unwrapping.)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f16ab364a41f4a3a941059016b42c7f9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"T1_atoms = u.select_atoms(\"name T1\")\n",
"T1_RDF = rdf.InterRDF(T1_atoms, T1_atoms, range=(0, 40), \n",
" exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now plot the data:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAENCAYAAADpK9mHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABFtElEQVR4nO3deXxb9Zno/885OtpsWbJsOQl2NrIQEhIIELMlYAoG2tIOaS8wFwoU2qFDYYY2aXsLvTRkbuFOWsi4hQll5t6W0k7bob/bYkrLvRSTYnYwCSGEkEBC9sWrLC9az/L741iKnXhNbEmxn/frJSQd6eg8Pgrn0XdXLMuyEEIIMSGpuQ5ACCFE7kgSEEKICUySgBBCTGCSBIQQYgKTJCCEEBOYJAEhhJjAtFwHcDwOHjw4oveHQiFaWlrGKJoTk6+x5WtckL+x5WtckL+x5WtcMP5iKy8v73e7lASEEGICkyQghBATmCQBIYSYwE7KNgEhRO5ZlkU8Hsc0TRRFOa7PaGxsJJFIjHJko+NkjM2yLFRVxePxDPs7kSQghDgu8Xgcp9OJph3/ZUTTNBwOxyhGNXpO1th0XScej+P1eof1WVIdJIQ4LqZpnlACEGND0zRM0xz2+yUJCCGOy/FWAYmxN5LvRpJADjV2JXlzdzjXYQghJjBJAjn07PYw9z23LddhCDEhXHvttbz33ns5O35TUxNf//rXueiii7j00ku5+eab2blzJwDbt2/nuuuuY9myZSxdupSamhrSS7089dRTVFRU8Morr2Q+67nnnqOiooI//elPJxyXJIEcSugmsZRB0hh+/Z0QIv/put7nuWVZfPWrX+XCCy/k9ddf56WXXuK73/0uLS0txGIxbrvtNv7hH/6BV199lbq6OjZs2MCTTz6Z2X/+/Pk888wzmedPP/00CxYsGJVYJQnkkG7amb4zYeQ4EiFOLvv27eOSSy7hG9/4BtXV1dx+++3EYjEAXnnlFa688kouv/xyVq5ceUxXyt/+9rfcf//9mee//vWvWb16deYzv/3tb3PZZZfx9a9/nZdffplrrrmGpUuX8u677wIQjUZZuXIln/3sZ7nyyit5/vnnAfsX+9e+9jW+/OUvc8MNN/Q55muvvYbT6eSWW27JbFu4cCHnn38+tbW1LFmyhKqqKgC8Xi8PPPAA//qv/5p573nnncemTZtIpVJ0d3eze/duzjjjjFE5l1lp2j948CA1NTWZ501NTVx//fVUVVVRU1NDc3MzZWVlrFixAp/Pl42Q8kLKOJIESgucOY5GiONn/uf/wtq3a+T7KQoDrXCrTDsV9b/ePuC+O3fuZO3atVRWVrJy5UqefPJJbr31VlasWMFTTz3F7Nmzufvuu/nlL3/J7bcf+ZxrrrmGRx99lPvuuw+n08lTTz3FD3/4QwB2797Nv/3bv/GjH/2Iq6++mtraWmpra/nLX/7Co48+ys9//nN+8pOfsHTpUv7lX/6FSCTC1VdfzcUXXwzAhg0bqKurIxgM9ol1+/btLFq0qN+/Y/v27Zx55pl9ts2cOZNoNEpnZ6d9LhSFZcuW8dJLL9HZ2clVV13F7t27Bz+5w5SVkkB5eTkPPfQQDz30ED/84Q9xuVycd9551NbWsmjRIh555BEWLVpEbW1tNsLJG6l0SSApJQEhRqq8vJzKykoAvvjFL/L222+zc+dOpk+fzuzZswG47rrreOutt/rsV1BQwNKlS6mrq2PHjh3ous78+fMBmDZtGvPnz0dVVebNm8eyZctQFIXTTz+dffv2AfDyyy+zbt06rrjiCq699loSiQQHDhwA4JJLLjkmAQzFsqwBe/P03n7NNdfwxz/+kWeeeYYvfOELIzrGYLLeyff9999nypQplJWV0dDQwOrVqwGoqqpi9erV3HTTTdkOKWd6lwSEOJkN9ot9MJqmHVN/PlxHXziVQUoVR7vhhht49NFHmTNnDtdff31mu9vtzjxWVRWXy5V5bBj2/6eWZfHv//7vzJkzp89nbty4kYKCgn6Pd9ppp/HnP/+539fmzZvHm2++2Wfbnj17KCgo6FMzcvbZZ7Nt2zY8Hk8myY2GrLcJvPbaayxduhSASCSSyZrBYJCOjo5sh5NTmZJAQhqGhRipAwcO8M477wDwzDPPUFlZyZw5c9i3bx+7dtlVU7///e+54IILjtn3nHPO4eDBgzz99NMsX758RMetqqriiSeeyCScLVu2DLnPsmXLSCaT/PrXv85s27RpE2+88QZf+MIXaGho4OWXXwYgFovx/e9/nzvvvPOYz7n33nu55557RhTvULJaEtB1nQ0bNnDjjTeOaL+6ujrq6uoAWLNmDaFQaET7a5o24n2yQVHtdREMzZ138eXrOYP8jS1f44Kxia2xsXFURgwfz2c4HA5OO+00fv/733PPPfcwa9YsvvKVr1BQUMBPfvIT7rjjDnRdZ/Hixdx2221omoaiKDgcjszxrrnmGrZs2ZI5L+lpGHrHk35/79e+/e1v8/3vf5/q6mosy2LatGn8+te/xuFwoKrqgH/PL37xC77//e+zbt06PB4P06ZN4wc/+AFFRUU8+eST/Pf//t+57777MAyD6667jttvvz0Tc/pzr7zyysznqara5+/pze0e/jVFsYZbfhoFDQ0NPP/889x3330AfOMb32D16tUEg0HC4TCrV6/mJz/5yZCfM14Wlfn2/9vNx61xls8v4bZzJuU6nD7y9ZxB/saWr3HB2MQWjUYHrP4YruOtDtq3bx9f/vKXWb9+/XEf+5ZbbuH222/PNOqOVmzZMFRs/X03ebGoTO+qIIAlS5ZQX18PQH19faaRZ6KQLqJCZF8kEmHZsmV4PJ4BE8BEkrXqoEQiwebNm/na176W2bZ8+XJqampYv349oVCIlStXZiucvJBpGJbeQUKMyLRp0467FBAIBHj11VdHOaKTV9aSgNvt5uc//3mfbUVFRaxatSpbIeSdlJQEhBA5JiOGc0iXLqJCiByTJJBDMlhMCJFrkgRyKN0m0JUwhj3IRQghRpMsC5RDKdPC6VBIGRbRlEmhKz+XshMi37S1tfG3f/u3ADQ3N+NwOCgpKQHgz3/+Mw6Hg8985jNMmTKFX/7yl7kMNe9JEsgRy7LQTYspRW4OdyboTBiSBIQYppKSEl544QUA1q5dS2FhIXfccUfm9X/7t39j7ty5mQnYxMCkOihH9J6ZIkoL7blJpF1AiNFx8OBBXnzxxWOmcxb9k5JAjqR6FoIOpZOA9BASJ7H//U4ju8LxEe832KRvpwY9/N2SySP+zPvvv5/77ruPrq6uEe87EUlJIEfS3UNDPkkCQoyWF154gVAodMz8/GJgUhLIkXT30JBUB4lx4Hh+scPoz8/zzjvv8Je//IX169eTSCTo7OzkH//xH3n00UdH7RjjjZQEciTdPbSkZ0UxKQkIceLuvfdeNmzYwFtvvcVjjz3G0qVLJQEMQZJAjqQnj/NoDgpdqiQBIUROSHVQjqSrg5wOhSKXQxaWEeI4fetb3+p3+0UXXcRFF12U5WhOPlISyJF0dZDToVLkdkibgBAiJyQJ5Ei6JOByqD0lAUkCQojskySQI0dKAoqUBIQQOSNJIEd086jqICkJCCFyQJJAjvRpGHY7iKbMTGIQQohskSSQI+nqoHSbANhTSgshRDZJF9EcObo6COxRw8Ve+UqEGMpgU0kvWrSIuro6QqHQca9DPJFk7YrT3d3N448/zr59+1AUha9//euUl5dTU1NDc3MzZWVlrFixAp/Pl62QcurohmGQUcNCDNdgU0m/+eab3HbbbXzjG9/IZYgnjawlgSeeeILFixfzrW99C13XSSQSPP300yxatIjly5dTW1tLbW0tN910U7ZCyqn0LKLOXtVBkgSEOHEXXHAB+/bty3UYJ42sJIFoNMqHH37IXXfdZR9U09A0jYaGBlavXg1AVVUVq1evnjBJQO/TMGw3zUg3UXGy2rIxSkf7yP/9DjaVtL/YwcJzCk40NDGErCSBpqYm/H4/jz32GHv27GHWrFnceuutRCIRgsEgAMFgkI6Ojn73r6uro66uDoA1a9YQCoVGdHxN00a8z1hzumMAFLhdzCyfBHyCoXnyJs58PGdp+RpbvsYFYxNbY2MjmmZfQlRVRVGOb+oTRVH63a6qaubzB6Oq6jHvdTjs0vVw9h/Mie4/lgaLze12D/v7zspfaBgGu3bt4itf+Qpz587liSeeoLa2dtj7V1dXU11dnXne0tIyouOHQqER7zPWIukFL0yDaCSMQ4HGto68iTMfz1lavsaWr3HB2MSWSCQyF9sFiz3H9RlDTSU9nGmmTdPENM0+7zUMY9j7H29suTRUbIlE4pjvu7y8vN/3ZqWLaGlpKaWlpcydOxew6+x27dpFIBAgHA4DEA6H8fv92QgnL6QMC6eqoCj2TUYNCyFyIStJoLi4mNLSUg4ePAjA+++/z9SpU1myZAn19fUA1NfXU1lZmY1w8kLKtNDUI8VgGTUsxOi48847+Zu/+Rt27tzJueeey29/+9tch5TXslbh9ZWvfIVHHnkEXdeZNGkSd955J5ZlUVNTw/r16wmFQqxcuTJb4eScblg4Hb2SgEwiJ8RxOXoq6cceeyxHkZycspYEZs6cyZo1a47ZvmrVqmyFkFdSpl0dlFbkdnC4M5XDiIQQE5FMG5Ejx5QE3A46pE1ACJFlkgRy5Jg2AZeDroQxYJ9pIfKN/FvNXyP5biQJ5EjKPLYkkDItEob8jyVODqqq5m0XyolM13VUdfiX9vwdCTHO6caxvYPAnjrCo0luFvnP4/EQj8dJJBIDDvgaitvtJpFIjHJko+NkjM2yLFRVxeMZ/rgNSQI50l/DMNhJoKzQmauwhBg2RVHwer0n9BkTbYDdaBnN2OQnZ46kjmoY9vdMItch3USFEFkkSSBHji4J+HpKAl3SQ0gIkUWSBHJENyw0R//VQUIIkS2SBHLkmDYBWVNACJEDkgRyRDfNPm0CToeCR1NlwJgQIqskCeSIPYto39Pvd6tSEhBCZJUkgRxJmX3bBEBmEhVCZJ8kgRxJryfQm8/lkN5BQoiskiSQI/pRcweBlASEENknSSAHTMvCsOjTMAyypoAQIvskCeRAqmeSuKOrg4rcDrqSJoYpk8gJIbJDkkAOpHou8seUBNwOLCCaMnMQlRBiIpIkkAN6T0ng6DYBX8+AsW5pHBZCZEnWZhG966678Hg8qKqKw+FgzZo1dHV1UVNTQ3NzM2VlZaxYsQKfz5etkHImUxI4KgkUOu2c3C0lASFElmR1Kun7778fv9+feV5bW8uiRYtYvnw5tbW11NbWctNNN2UzpJzQB6gOSpcEpJuoECJbclod1NDQQFVVFQBVVVU0NDTkMpysGahhuNDVUxKQJCCEyJKslgQefPBBAK644gqqq6uJRCIEg0EAgsEgHR0d/e5XV1dHXV0dAGvWrCEUCo3ouJqmjXifsdRqdgFQEgz0ic1wJ4Dd4CrIebz5ds56y9fY8jUuyN/Y8jUumDixZS0J/OAHP6CkpIRIJMIDDzxAeXn5sPetrq6muro683ykK+rk2wpBza0xAGJdneh6aSa2RMouATS2RWhpye2ib/l2znrL19jyNS7I39jyNS4Yf7ENdM3NWnVQSUkJAIFAgMrKSnbs2EEgECAcDgMQDof7tBeMZ+k2gaN7B3k1FVWBrqQ0DAshsiMrSSAejxOLxTKPN2/ezPTp01myZAn19fUA1NfXU1lZmY1wcm6gcQKKolDockibgBAia7JS5xCJRHj44YcBMAyDZcuWsXjxYmbPnk1NTQ3r168nFAqxcuXKbISTcynD/qV/9FTSAD6XSreUBIQQWZKVJDB58mQeeuihY7YXFRWxatWqbISQVwYqCQAUOh10p6QkIITIDhkxnAOpAUYMg10SkHECQohskSSQA/oAI4aBnjYBqQ4SQmSHJIEcyAwW6686SEoCQogskiSQA4OVBHxSEhBCZJEkgRwYtCTgdJAyLZKGJAIhxNiTJJADqQEGi8GR+YNkwJgQIhskCeRAyrBQFXAM0DAMMomcECI7JAnkQH+LzKf5MiUBSQJCiLEnSSAHUqbVb3sA9C4JSHWQEGLsSRLIgZRh9dszCGRhGSFEdkkSyIHUINVBRxaWkZKAEGLsSRLIAd0YpDrIKQ3DQojskSSQAylz4Oogp0PB7VBksXkhRFZIEsgB3TQHLAmA3S4gbQJCiGyQJJADKcNC62ctgbRClyrVQUKIrJAkkAODdREFmT9ICJE9kgRywC4JDJwEZCZRIUS2SBLIAX2QhmFIry4mJQEhxNjLyvKSaaZpcs8991BSUsI999xDV1cXNTU1NDc3U1ZWxooVK/D5fNkMKSeGqg4qdEvDsBAiO7JaEnjuueeoqKjIPK+trWXRokU88sgjLFq0iNra2myGkzODjRgGKHSqRJMmpmVlMSohxESUtSTQ2trKxo0bufzyyzPbGhoaqKqqAqCqqoqGhoZshZNTw2kYtoCoVAkJIcZY1pLAL37xC2666SYU5cjFLxKJEAwGAQgGg3R0dGQrnJzSh9EwDDJqWAgx9rLSJrBhwwYCgQCzZs3igw8+GPH+dXV11NXVAbBmzRpCodCI9tc0bcT7jCXD+piiwgJCoVC/sZVHFOAwzgI/oVBu2kjy7Zz1lq+x5WtckL+x5WtcMHFiy0oS2L59O++88w7vvvsuyWSSWCzGI488QiAQIBwOEwwGCYfD+P3+fvevrq6muro687ylpWVExw+FQiPeZywlDRMjGaelpaXf2Ix4NwD7m1opUeO5CDHvzllv+RpbvsYF+RtbvsYF4y+28vLyfrcPWR3085//vM/zHTt2jOjAADfeeCOPP/4469at45vf/CYLFy7k7rvvZsmSJdTX1wNQX19PZWXliD/7ZGNZ1pDjBHyypoAQIkuGTALpi3Tagw8+OGoHX758OZs3b+buu+9m8+bNLF++fNQ+O18ZFlj0v8h8WmYm0ZS0CQghxtaQ1UHWKHdTPOOMMzjjjDMAKCoqYtWqVaP6+fkuZQy8yHyazy1rCgghsmPIkkDv3jzixOmmnQQGGyfg0VRURVYXE0KMvSFLAolEgvvvvz/zPB6P93kO8E//9E+jH9k4lUongUGqg1RFodApM4kKIcbekEngjjvu6PP8U5/61JgFMxGkDLuKZ7CSANgLzndJdZAQYowNmQQuvfTSLIQxcRwpCQxeEydrCgghsmFY4wSSySR//etf+fDDD+nu7qawsJAFCxZw6aWX4nK5xjrGcUXPNAwP/j4pCQghsmHIhuFoNMq9997LH/7wBzRN49RTT0XTNH7/+99z7733Eo1GsxHnuJEpCQyyshikp5OWkoAQYmwNWRKora3F7/fz4IMP4vF4Mtvj8TgPPfQQtbW13HjjjWMa5HiSLgkM1jAM4HOpUhIQQoy5IUsCGzdu5Oabb+6TAAA8Hg9f+tKX2LBhw5gFNx6lhtFFFOzqIGkTEEKMtSGTQHNzM9OnT+/3tenTp9Pc3DzqQY1nmcFiwygJJA0r05tICCHGwrCmkta0/muNNE2TwWQjNJKSAMioYSHE2BqyTSCVSvHUU0/1+5plWei6PupBjWfpEcNDlwTsJNCVMij2ZnUVUCHEBDLk1WXZsmW0trYO+PrSpUtHNaDxLl0dNGRJwCnzBwkhxt6QSeDOO+8c8LXdu3fzhz/8YVQDGu+GM20EgM+drg6SxmEhxNgZ1txBTz/9NLt37+aUU07huuuuo7Ozk1/+8pe8//77XHLJJdmIc9wYaUlAuokKIcbSkEngZz/7Gbt27eKss85i06ZN7N27l4MHD1JVVcXf//3fD7gamOhfpk1giCRwZGEZKQkIIcbOkEngvffe40c/+hGBQIDPfOYz3HnnnaxevZr58+dnI75xZ7jVQenF5mU6aSHEWBqyi2g8HicQCABQWlqKx+ORBHAC9GEsKgP2BHMuhyINw0KIMTVkScAwDLZs2dJn29HPFy5cOLpRjWMp00JT7TUDhmJPIiclASHE2BkyCQQCAX76059mnvt8vj7PFUXhX//1X8cmunEoZZhoQ0wel1boVOlOSUlACDF2hkwC69atO+GDJJNJ7r//fnRdxzAMLrjgAq6//nq6urqoqamhubmZsrIyVqxYgc/nO+Hj5bOUaeEcXg7AJyUBIcQYy8pQVKfTyf3334/H40HXdVatWsXixYt5++23WbRoEcuXL6e2tpba2lpuuummbISUM7ppoQ2xoExaoUulPS5JQAgxdob5m/TEKIqSmYXUMAwMw0BRFBoaGqiqqgKgqqqKhoaGbISTUynDGnKMQJpPZhIVQoyxrE1KY5om3/3udzl8+DBXXXUVc+fOJRKJEAwGAQgGg3R0dPS7b11dHXV1dQCsWbOGUCg0omNrmjbifcaK6mzB40pl4hkstlJ/hOjhaE5iz6dzdrR8jS1f44L8jS1f44KJE1vWkoCqqjz00EN0d3fz8MMPs3fv3mHvW11dTXV1deZ5S0vLiI4dCoVGvM9Y6YrGUS0zE89gsWlmkq6ETnNzc9Zna82nc3a0fI0tX+OC/I0tX+OC8RdbeXl5v9uzUh3UW3p94k2bNhEIBAiHwwCEw+EJMfpYN60hxwikFbpUTAtiuvQQEkKMjawkgY6ODrq7uwG7p9D7779PRUUFS5Ysob6+HoD6+noqKyuzEU5OpQwrM1o4kTBpbU4M+F6frCkghBhjWakOCofDrFu3DtM0sSyLCy+8kHPPPZfTTjuNmpoa1q9fTygUYuXKldkIJ6d080jD8I6tCfbtPsBVy4v6re4p9thfT0s0RVmhM6txCiEmhqwkgRkzZvCjH/3omO1FRUWsWrUqGyHkjZRp4e0ZKJCIm6SSJrGoSUGh45j3VvhdABzoSDK/rCCrcQohJoastwlMdCnjSJtAKmXPI9QZ6b+6Z1KhE01V2B9JZi0+IcTEIkkgy1K9GoZTSTsJdHX0PxbAoSpUFLnY3yFJQAgxNiQJZFnvhuFkJgkM3PA7NeDiQMfAjcdCCHEiJAlkWe+GYT1dHTRASQDsdoHDXSlShvQQEkKMPkkCWZYy7ZKAZVm9qoPsXlP9mep3YVpwqDOVlfgsyxowFiHE+JO1EcPClp47yDDANKGg0EG02yARt/B4j+0mOi3gBmB/R4Lpxe5RjydpmLx/OMrHbXF2tMbZ0RrD41T59S0lo34sIUT+kSSQZbppoqlKphQwaYqX3Tu76Oow8HiPLZiV93QTHYvGYcuyePCl/Ww6HEXBrno6vczLG/u6eHrzYaqnj37SEULkF0kCWWRaFrppry+cSQKneNi9s4vODpPQ5GP38WgqZQUaB8agm+gb+zrZdDjKl84M8bnTgxQ47bEKq17cy6/e2c/SU07NjGkQQoxP8n94FhnpReZVNTNGoLjEheYcuJsoQEXAzb5RLgkkdJMnNjYxo9jNfzmjNJMAAL50VhntsRR/3h4e1WMKIfKPJIEsSqWTQK+SgNut4ityDNpNdJrf7iY6mg22z3zYRlO3zt+dOwnHURPazQt5uWhmkKc/bJX1DIQY5yQJZFHKsC/ivdsEXG4HRX7HkN1E47pFa0wflThaoin+zwetXDitiDOnFPb7nr+7cAZdSZM/bmsblWMKIfKTJIEs6lMSSKWTgIrPr5KIW6QGmC10aqCncXiU2gWe3NiMBdx2TtmA75k3yceF03z8cVuYzoSUBoQYryQJZFHfkoB9wXe5VIoCdn185wBVQlP9R7qJnqitTVFe3tPB8vklTPa5Bn3vDWeWEUuZ1H4opQEhxitJAlmkZxqG7eogzQmqquDz21/DQI3DxR4HhS71hEsClmXxi3ebKC3Q+C9nlA75/hnFbpbNKOLZbW10SWlAiHFJkkAWpUsC6YZhp9NukC0oUFHVgUsCiqIw1e/iwAn2ENrWEmN7S5xrzyjFow3vq//iglIShsVLuyMndGwhRH6SJJBFqd4lgZSF02WffkVV8BWpg3cT9Z94N9E/bgvjc6lcNisw7H1mlXiYW+rh+Y/bZToJIcYhSQJZpKfbBBwKyaSF03Wka6YvMHQ30XBMP+4um41dSd7c18lVc4qHXQpIu3JOMXsjSba1xI7r2EKI/CVJIItSR7UJ9E4CRX4H0W4TXe//13ZF4MgqY8fj2e1hFODqecER73vxDD9eTeUvO9qP69hCiPyVlWkjWlpaWLduHe3t7SiKQnV1NZ/97Gfp6uqipqaG5uZmysrKWLFiBT6fLxsh5YR+1GAxl7NXSaCncbi70yAQPPZrOdJDKMlpIe+IjtudNHhhR4RlM/yUFox8rWKvU6XqVD/rP4nw1XMMfO5jl8IUQpycslIScDgc3HzzzdTU1PDggw/y/PPPs3//fmpra1m0aBGPPPIIixYtora2Nhvh5EymYTjTJtArCRQN3k10is+JpsL+yMi7idbtjBDXTf7m9OOfGfSqOcUkpYFYiHEnK0kgGAwya9YsALxeLxUVFbS1tdHQ0EBVVRUAVVVVNDQ0ZCOcnElXB6mAaYDWKwkUFqkoyuBLTZ5yHEtNGqbFs9vaWDjJy5xSz3HHPqvEw5wSD3/5OCINxEKMI1mfRbSpqYldu3YxZ84cIpEIwaBdRx0MBuno6Oh3n7q6Ourq6gBYs2YNoVBoRMfUNG3E+4wFd5N9gQ8WBYFDBINFfWIrCkRJxgeOdVaomd1t0RH9LS9+1ExzVOdbl80lFBp6bEBaf+fsv5yt88MXd3A45WZRuX/YnzXa8uX7PFq+xgX5G1u+xgUTJ7asJoF4PM7atWu59dZbKSgoGPZ+1dXVVFdXZ563tLSM6LihUGjE+4yFcMROcu2t7QAkk93oeiATm7fQorUlNmCsZR54tT3G4abmzGL1g7Esi1+9vYdTipycVmSO6Bz0d87OLlXxaCq/27CbU1zlw/6s0ZYv3+fR8jUuyN/Y8jUuGH+xlZf3//9s1noH6brO2rVrufjiizn//PMBCAQChMP2dMXhcBi/P3e/LrMh3TCMYV/Ae7cJgN1DqLvTxDQHXmrSsOBw5/CqhN4+0MXHrXG+ML/0mJlCj4fXqVI108+rezrpkBHEQowLWUkClmXx+OOPU1FRwec+97nM9iVLllBfXw9AfX09lZWV2QgnZ9INw/R0A+0vCVgWdHf13zg8u6dO/419nUMeyzAtfr2phVOKnFw+e/iDw4byuXlBdNPit5ubR+0zhRC5k5UksH37dl5++WW2bNnCd77zHb7zne+wceNGli9fzubNm7n77rvZvHkzy5cvz0Y4OZNuGDZ7fkQfnQTS3UQ7I/3/yp4ecFNZ4ePprW1Dzuz5yp4O9kQSfOnMsmFVHQ3X9GI3n55bzP/7uJ1d4fiofa4QIjey0iZw+umn87vf/a7f11atWpWNEPJCuiRg9Ewj7XQenQTsbqKDjRy+6awQ33xuN3/Y2sqXz5404HF+s7mFU4Nuls4oGo3Q+7jxzDJe2dPJvzc08j+vmI6ijF6SEUJkl4wYziLdtHCqCnrKfn50SUDTFAoK1UEXmJkZ9HDJTD9/2h6mNZrq9z1/2dFOY1eKm88qQx2DC3SR28HNZ5WxtTnGK3uGrpoSQuQvSQJZlDKtzGhhh2ZPI300n1+la4DqoLQbzwxhmBa/29J6zGtx3eR3W1o4Y5KXc8r7XzVsNFTPDjC7xM0TG5uIpQYuuQgh8pskgSzSDevIvEHO/n+hFwUcdA3SQwhgSpGLK+cU88KOdg4d1VPoT9vCtMcNbl5cNqbVNA5V4WtLptAW0/ndlvzsRieEGJokgSxKmZY9g2jKPKYqKK3Ir2KaEO0e/Nf19YtCOFSF32xuIa6bvLy7g/9Zv5/fvt9MZUUh88uGPw7jeJ1e5uWyWX7+uK2NTYe6x/x4QojRl/URwxNZqndJYIAkkG4c7owYmfmE+lPi1fj8vCB/2NrGW/s6SRgWQa/Gp+cGuW4Yq4aNli8vnsRHLXHuX7+Pq+cF+fLiMtwjnKo6ZZioijIqYxmEECMjSSCLUqbVs76wRYGv/wtl0TB6CKV9cUEpO9rilBe5WDbDz/wyb9YvpMVejX/5zEx+tamZZ7eH2XSomxUXncLc0r4znRqmxd5Igm3NMT5qjXG4M0V73CCS0OlOmhS5HZw/1cdF04o4c0ohTockBCGyQZJAFnUnDQqcas800v0nAc2p4C1QBu0hlOZzO/gfl08f7TBHzK2p/N2SyVRO9fGTNw7x357fQ7FHw+VQcDtUNAcc6EgR1+3EFvA4mOZ3cWrQTbG3kGK3g/0dSV7b00ndzgiFTpVLT/XzpbPKKHTJtNVCjCVJAlnUHjOYUuQk1T1wdRDYVUKdkZOvx81ZUwp55OpTeebDNtpiOknDImmYpAyLeSEv80Je5pd5mVTo7LfROmWYbDoU5dW9Hfzfj9t5c38Xd503hXMrxu8aE0LkmiSBLGqL6ywo82Lox44R6K3I76C1OYFlWignWT25z+XgS2eVHde+TodK5VQflVN9XH1akEfePMT/eGk/l83y89VzJstiNkKMAekdlCUpw6IzYVDssvPuoEkgoGIaEI2efKWB0XJayEvNZ2Zy3RmlvLSrg7uf28XHrbLGsRCjTZJAlrTHdQCKnT1JYIBxAjC86SMmAqdD5abFZfzoqhk4FPjeC3t5aZesbCbEaJIkkCXpJFDksC/wg1cHDT6R3EQzt9TLw5+eaZcOXj/Euld3YQwymE4IMXySBLKkLWYngQLVPuWDJQGnS8XjHV4PoYki4NH4p8um8dnTivnNhgM88NJ+umRNAyFOmCSBLAn3JAHvMJIAnLw9hMaSpir8feUUvnv5HDY3dvOt/7dbprMW4gRJEsiS9piBAjitnlXFBmkTALtKqKvTkEXd+/E3C6fwP6+YQdKw+G/P76Fe2gmEOG6SBLKkLabjdzsw7ALBkCWBooD93lhUkkB/5vX0Hppb6uFfXj/E/3qnkYQuJSchRkqSQJa0x3WKvRqppIXqAMcQ0yJk5hCSdoEBFXs1/sfl0/n8vCB/2h7mzmc/4aVdEUwpPQkxbJIEsqQtphPsSQKuIUoBcKSH0FBrC0x0mqrwd0sm82D1dAIeBzWv29NWbG2K5jo0IU4KWRkx/Nhjj7Fx40YCgQBr164FoKuri5qaGpqbmykrK2PFihX4fON3eoD2mM5Uv4tUauC1BHpzuVXcHoXOCT5WYLgWTi7g4U/P5KVdHfxqUzP3vrCX2SVuqmYGWDajiNICZ65DFCIvZaUkcOmll/K9732vz7ba2loWLVrEI488wqJFi6itrc1GKDlhWRbhuJEpCWjDKAmAXSXUJdVBw6YqCpfNCvDTv5nF3507CQWFn29s4qtP7+S+ur38nw9a+aAxKm0HQvSSlZLAggULaGpq6rOtoaGB1atXA1BVVcXq1au56aabshFO1nUlTXTTnu8/1WThLRheEijyq+zfk8SyLFnMfQQ8msrnTy/h86eXcKAjySu7O3h1r11CAHAoMKvEw5wSD3NKPcwu8TAt4EY7yeZpEmI05GwCuUgkQjAYBCAYDNLR0ZGrUMZceoxA0KORSJr4A8M77UV+B3oKYlGTgkKZPO14VPhd/NczQ/zXM0N0xHW2t8TZ1hJjW3OUv+6yZysFcDkUTiv1sPiUQs4+xcesEjeqJF4xAZwUs4jW1dVRV1cHwJo1awiFQiPaX9O0Ee8zmnZF2wGYOaWUD95tpShQkIlnsNicWpL3N+6ltVFj+nmjv1pYW0uCjW+10tKUwOlScblUnE6VYKmL0DI1p+dsMMf7fYaAWVPhMz3PTctiX3uM7Y1dbGvqYuP+CP/xXgv/8V4LxV4nF80MctXpkzh7amBYi/Xk+t/ZYPI1tnyNCyZObDlLAoFAgHA4TDAYJBwO4/f7B3xvdXU11dXVmectLSNb2DwUCo14n9G0p9EezKQkukglTQwjnolnqNgml2ts3dxO+QxzyG6lwxXtNtm+Jcb+3SmcToUpFU4M00JPGcTjOls3x2g8FOecC914vPnXgWw0v89C4JyQyjkhPzcu8NMe09l0uJuNB7t5aUcLz33YRKlX45KZfi491c/MoCcrcY22fI0tX+OC8RdbeXl5v9tzlgSWLFlCfX09y5cvp76+nsrKylyFMubS8wYdmTxu+BfWWae5eeOlbg7sSTJ9lvuE4jANi4+2xtm5LQHA7NPdzJnvxnVUPIcPpHj3zSivvJDkvIsLCQRPigLjqCj2alx6aoBLTw2Q0E0aDnTx0q4O/ritjac/bGNW0M1lswJcMtNPwDNxzosYv7Lyr/jHP/4xW7dupbOzkzvuuIPrr7+e5cuXU1NTw/r16wmFQqxcuTIboeREe0zH7VBw9HRKGU4X0bTSSRpFAZVPPkow7VTXcTcQd3YYbHwjSke7QcUMJ6cv8lJQ2H8ymlLh5LNfnMpfnt3Pa+u7OOeCQqZUTLwulm5NZdkMP8tm+InEdV7Z08H6TyL87w1NPLGxicqpPq6aU8ziUwql/UCctLKSBL75zW/2u33VqlXZOHzOhWN291B9mFNG9KYoCrNOc/NeQ4zWJp3Q5JFdjC3LYs+OJB+8F8PhUFiytIBTprqG3K+0zM3FVxTx9ivdNLzWzTkXFFAxfej9xquAR+Nz80r43LwSdofj/HVXB3/9JMKb+7qY4nNy1ZxirqsM5DpMIUZMyrNZEI4fGS0MI0sCABUzXHy4Oc4nHyVGlARSSZN334rSeFCnbIrG4vMKRlTH7/GqXHSZj7de7uLdN6M4HMqELBEcbWbQw21BDzedFeKNfV08/3GYJzc18x+bWzhrcgFLZxRx3tQi/LIcpjgJSBLIgnBMZ3qx+0gSGEF1ENjzDM2c4+KjDxJ0dRr4ioa+uHR2GDS82k20y+SMxR5OPc19XFVJmqZw3sU+3nypiw2vd1O5rJBJp0giAHvls0tm+rlkpp99kQRvHEpSt72JR988jEM5zKLJBZxdXsiZkwuZGZQupyI/SRLIgnBc5yxPAcmeJKA5wWpphAN7iCZimO1tkEpBKmnf4nFIxLDiMXu7x8s0b5Ad3mv55C9bWFjRhjJ5Kkw+BaXg2Kk27IbdblSHwoWf8lFadmJfs9OpcH5VIW/81a4aOv/iwhFXS4130wJuzp5dwXXzfOxsS/D63g7e2t/FExubgWb8bgeLJhdwxqQC5pd5mVHsHla3UyHGmiSBMRZPpOhOmhQ37SH58TZwLEb73pcxo/bguM7eb1YUcDrB7QWP1753OiHcgju2nVOmTWN/6TlM/8/HKeo+YO9TFICSMiguQQ9MZmfBOezUZxMoTLHkogIKSkbnK3a5VC64tJA31nfx9ivdzJlvly5GWqoBu53C0CGVskglLfSUhaKA26vgdqs4tJP34qgoCnNK7ZHIt5w9iZZois2Ho2w+3M3mxiiv7bW/ca+mcnqZlzklHmaVuJld4mFSoVNGhouskyQwSizThKZDcHAvVuMBOLQf6/B+2loicO63KH7zeVLF81ArdBznX4xSMQOlYgYl8xbQ1tVtX+wd2qAXgbkRg8MvdPLKhf9MaUE3M9nJpPD7dHQq7NHmcdCxCFN3UXHwFRZu+wWOZ1IYgRKYXI4y6RSYVI4y2b5ncjmKc2QNvW63yoWf8rH5nRjbt9htFHNOdzNzrhttgAu3ZVkkExbtbQbhVp1wq0F7m46eGvg4mgbeQpVA0EEgqFEcdOAPOgY8Rj4LFTi5bFaAy2YFsCyL5m6drc1RPmyO8WFzjN9vbSW9XHKhS2VmsZuZQY99X+xmRrEbt5Z/YzXE+CFJ4CiWaUJPVY3VeAAMA3rPT69pdn2O0wWqCo0HsHbvgL07IdZr+uLiEpgylfbKJWBCyd/egh4tw3lIx3HN32fe5giWohjDm/++KODg8s/72fdJkt07FDZEz0TznYnuBocDps5wMWOmSiB1FjR+B+vwAWjcj9V4EOu9t6EzQuZIimKXIKZUoEyZ2ut+KgSCA8bg9qhULiukvU1n+5Y4H26Os2NbAl+Risut4HQqaE6FRNyiu8sk2mVkekWhgD/goGK6i0KfiuZUcLrs91smJOImibhFIm7S3WXSfFhn/247W6gqlJRpTJqi4ZifOCnnU1IUhUk+J5N89jgEgIRusqc9wSfhOJ+0JdjdnuDFnRHiPZPcqQpM9buYVWLPcTSn514SgxgtEzYJWN2d9oUx3AqRMFZHGNpa4OBeSIxg3VpNg6mnopxfBTPmoEydCZMrULwFAET2dsIrBygpn0LrVuO4qk96c7tV5sz3MHuem8ZDOgf3Jiku1Zg209lrENp0KJ/O0UeyYlFoOtiTHA5Ao/3Y2vECJOJHEoTbS+uUcoxgCCU0GUJTjpQgSiehOBwUl2icf4mPthad3TsSJOIWsahFR8pET1q4PAqFPpXSMhcFPgf+YgfFQQfaCP5+y7KIxywiYYO2Zp2mQym2vhdn63v78HgVSkIawZBGsNRBoNiBOkojqrPJramcFvJyWsib2WZaFk1dKXa1J9gVjvNJW5zNh6O8tMuuQkxPgDcv5GVeyMvcUg9TfFKVJI7PhEwC1kdbMP/XWmhvtTd4C+1fv8FSlGVXQMUM+2J+ylTQeqpMFMUuERgG6D0NuLoOxSUo2sCNpOG4/TO42ONgR2uC0KTROeWKanfXHEmXTcVbYCeqGXP6bLcsy06Gh+0qLJoOoXaE4eA+rA/f65sgHBqUTYaSSSilZRSXTmJxaRnK5BLwB8FfDIVFKOqJ/1JVFAVvgYK3QGVKhZMFi73EoibRTje7d7YTbtU5uC/Vcz7A41HweNWem13C0DT73qHZ359hgGmCaVpk/igFFEBVFRwamfc7nQout4LbbX9Gti6yqqIwpcjFlCIXF04rymwPx3Q+ao2xvTnG9tY4L+xo50/bw4BdlTSnV0lhVokkBjE8EyoJWKaB9ef/D+vZ/4SyyajfXQPTZ6O4RjAdg6aBe/jvD8d0VAWUuF1FEpqcf6dcURQoCUFJCGXBYgCCPXOTWJYFne3QeAir6aBd/dV0CFqbsfZ9Ap32vEh9KrQcDiidBGVTetoiToGiYrsnU0GhfSssAl8RijqyvvTeApVp0wOUTrYv/rGoSbhVJxI2iEVN4jGLjohBc6M5aLvDSCkKdkLw2Iv92Leexz0LAKkk6O4y0DQ7iTgcjOpFOOjVOH9qEedPtRODYVrsjST4uDXOjtY4O9pi1H7YRrp2sdCpcmrQzbSAm3nlSYKOFBV+F6UFmnRXFRn5d0UaI1Z7K+b//hfY/j7KeVUoN38dxVMw5scNx3QCbgdtTXaJoGzKydW1UlGUnl/4QZS5C4553UokINwMkXasjnboCEOkDVqasJoOYX2yPdNWckzLh6LYyaAoAEUBFH+xXZLouSnFJRAogeIg+AL9li68BSreAhfl046NPd0LSdctDN3ugaQ6FFTV/tWfqS/rCcww7fcZOugpi1TKbtROJEySiZ7HPe0WXR0GibiF2Wd9mu5jYlAdZI6nOuxf+Sj2n37kZsekKNgx9TpRimrvo6h9P8fhsJOMqipMU93MKPRwRVEx1gyL9rhBS0ynNZqiNZbicFuKvTsOZz7ToUKRWyPgUQl4NPwejYDHQcDrwO9xoDkU+1yp9nGV9KlSerYrPXEdFYtDS/8dkmBOJhMnCfz+Sdj1Ecqtd6NcdHnW/qGGe9YWbm7U8flVvAXjq0FPcbvtxuQpU49pg4CeqqauTujqgGgXxLqxurugu9MuRXRGsDoj0BHB2rcLOtohZl9M+yQNRQVfEfj8tJWEMNweu3rLWwieAvAW2InDX2xX7fmLodCH5hx+O4SGAiMoFFqW3b3Vbsy2cLt9hNs6MHTLTjxGT/WTYScL07D3sSyOutmvW/30D7AsOzlZeroay8Q0wOj5TMOwsAbYtxgnxfT86Di6wJXsuXWAAbRh0MaJr2KnKHZBMJNs0wnCcaR0lK6ic7oUAoE2kqlEz7ae1zQFzaXg6uk0MFqz54r+TZgkoFz/VZTPXodySj8/GcdQOK5T4tFobdaZMWvizb2jKAoU+e1betsQ+1ippJ0M2tsg0obV3gaRdujqSRjxmN0FNxaFeNR+nt6378HtJOErsksc3gLweFHS4zAK7aSCrwilyA9en73d4wWvF1yeQds2FMW+kDld9seEQj58gRF0KhhFmURi9pwDCyyOtHuUlpbS2mq3gVmZ/4BuWIRjOs1dOs3dKVq6UrTHdCJxg0jcoCNuoBsWCvbfqwAuVaHY7SDg0vC7HBQ5HRQ5NQo1FY+q4lYVHCg97S92IjR6kmIiDt26mSlpmUZiyL9NddgDFp0u5ch9T5KwH6v2Y7e9zeVScHnUE+6EMVFMnCTQU+WQbeGYwXxPAaZx8lUF5YridNltCqWT7OdHvV5y1FzqlmnaVU6d7X2rpbo6obsDujqxujvt94RbsRJxO3HEujM/ofvtpKsoR0oZ6ZunACWdKDxecHt6Bvd5iJWGsJIpcLnt7S43uDx2G5LbYz92Hf9MsIOeM8X+ld33F/+R47g9DlzuYxOaGygsdDA11H8RyLIsOhMGzVGdpu4Uzd0pWqM6LdEUTdEUW7uitMb0zFiHNK+mUlKgUerVKPFqlPh77gs0yrwaxT1VUOVlZTQebkHX7VKV3lMVp/cMJEz1c29Xx5mZ5wPRNPAU2B0FCgpV/AEHRcX2fX/nYqKaMEkgFwzToj2uU6xrKConPH2D6J+iqlDos28DVEv1xzIN6O62q6q6OiDajRWPQiIGsZhdyohF7e2xqJ00OiNYLYd7kkgMkvFMIhn2Aqm9k4TbY988XnC57QSoaXadisPZM4I8nVB6bk4XOF0oLpf9utbr5uzZ1vvecfz/7hRFwd/TbjC7pP8FdQzTIhy3SxLN3XaCaIvqtMZ02qL24Li2mI5uHruv07EDv9uB3+2gyO2gyHXksd/toMjroChgP5/k1ihyOShwqZmGbcu0SKYTRMIimey5xc1MR4FY1OTQ/hR7P0lmjuv2KPj8DnxFaua+wGdX10606ie5Ko2hzqSBaYEnplJSOrI+8mLsKapjxFVVR7MsC5JJSMYpKfDSdvgQJBP2WJNEAisZzzwmGbdf6/f1uJ1g9BQ99Sd2F+RUyt7POLa+fnhDDG2NqgM0h50Q7Er7I48zCcR5ZDBk+jWHZneB1rRerzn6vq6qlKgOSlSVeUcaBewW6EIHFDmwFIVOy0Gb6SRsOIiY9i3u8NAUjdNpKnR0qrQY0KkrdOkD/30qUKBBgQMKnQqFmn3zaeBzKvicCsVulUmFTsonuQj5XGgeD0nLRUe7QWfEoCNi0N1pcnBvilQq2efzPV4Fb6FKsETHoaXwFtglCW+hitd7ck9r0h9JAmMoHNPxoEJMoWyOVAWNR4qi9FT3uHGEQiiOvu0+o3W5sPSUnUhSCTvppFL241QK9J5bKomVSvUkj2TPeBb7eYHLSbSzw37Nbq22E41hQCplf76e6kk6CdC7M8nISiek9HuMXvv21yI9gKKe24xhvNdAIap56XQW2DfNvu/qedyteYlqHro1L92al0Oahy5nAV2al2TmO7DbGxTLZHK8jbPbd3BufD8L1Q5mFhaieLxY3gKS7mK6XSVEVT8xxUfUKiDa4aUxEiea0rCO+hZdDgOv28DjsvC4TDxu8HjA47Zwu8HjNnE6VRS1p/vXkS5iRz3u+zxXvaokCYyhcEynQrH/QZbl4fgAcfJQ0r/WOXbW2D7vG2C7LxQiPgbr5VqmAYZJplU63Q0qfW+YdsKwrKPeY79e7PfT3tbWaz97HxWLgGURsLD3sY925M6yIN3w3fO6ZaWAJEkT2pPQlISmpEJzSmWHy82L3kr+LxfgsnQWxQ5wRtdezjjwCbPaXiOY6Ka/yVJMRSXhDhL1lhF3lxDzlBLzlBL3lBB1l9DmDpJyFR2zn2qmcCUiuJM9t0Q77mQHrmQEd7IDdyKCK9WBO9mBpkd7uuCqdunJ7nd75L5XqUu95S6U0xaO6ncoV6YxlE4CDicEgrLAiBh/FLXnYnWcnKEQyiglp3QC9ABTem69JXSTLY1RNhzs4t1DBWwomAGTLsajqcwLeTgt6GK238HsIoWQw6AkECDc3IRmGBTqek+CMnrdJ8E8hJE6QCypktBV4rpGwnDa97pGwggRM06h3dRImk76S9MKJi6SuJQkLhK4rAQu4rjNGE4zhsuM4TJiOPUoPlcho12nIElgDIVjBhWKm9AkzS4aCiFyxq2pnFvh49wKuzTVFtPZ2hRlS6M9q+vvt7VnejkF3A5mhQwmeV1U+F1M9buYXORkUqETl6NvzyKNI1VdgzHN9IDDngGI8d4DET2ZbR09AxNTKctuAOnlPFchk0flbPSNP6c2bdrEE088gWmaXH755SxfvjzXIY2ajg6DMsXFZFmJS4i8U+LVWDbDz7IZdseAhG6yuz3BjtY4n4TjNEZNXt/bQWfSPGa/yT4npQUawXQX2J5ur363Pera73YckyxUVcHjVfB44djRe8cyDbunUyppJ4Vk0qS4ZPRrFHKaBEzT5Gc/+xn33XcfpaWl3HvvvSxZsoSpU6fmMqxRY0TsnxUyPkCI/OfW1MzMrAChnvEoHXGd/R1JGrtSNHWnaOxK0did4pO2BG2xLuJ6/43jLodCoctBoVPN3HvTN03Fo6m4NAW3Q8XlUHBrKpqq4HIoOFUFZ8+95uiZDNGtYI3BFTunSWDHjh1MmTKFyZPtAs5FF11EQ0PDmCSBP6xvJdEykk51x6NvlU/QdBJzGBQUysAUIU5Wfo/GAo/Ggkn9vx5NGbRFdSIJg46EQWfCIBLX6UqadCcNulP2fWfSoKk7RSxlEtdNYrp5zCC7oay6dGqmOmu05DQJtLW1UVpamnleWlrKxx9/fMz76urqqKurA2DNmjWEQqERHUfTNIqDBTR2x4Z+84nqlQdSwOy5/kHj1TRtxH9PNuRrXJC/seVrXJC/seVrXDCy2KYf5zF0w04ICd2+TxkmScMkqdv3umGRMixSpv148dQAoULXqJ63nCYBq58+xv31la2urqa6ujrzvGWEvQlCoRCXne2Fs71Dv3kMDBZv6KgpEPJFvsYF+RtbvsYF+RtbvsYF2Y/N3XNDAZw9tz4UiHXQEju+2MrLy/vdntN6it6TWgG0trYSDA68tKEQQojRldMkMHv2bA4dOkRTUxO6rvP666+zZMmSXIYkhBATSk6rgxwOB1/5yld48MEHMU2TT33qU0yblt2pnoUQYiLL+TiBc845h3POOSfXYQghxIQkfReFEGICkyQghBATmCQBIYSYwCQJCCHEBKZY/Y3YEkIIMSFMiJLAPffck+sQBpSvseVrXJC/seVrXJC/seVrXDBxYpsQSUAIIUT/JAkIIcQENiGSQO/J5/JNvsaWr3FB/saWr3FB/saWr3HBxIlNGoaFEGICmxAlASGEEP2TJCCEEBNYzieQG2v5upD9XXfdhcfjQVVVHA4Ha9asyVksjz32GBs3biQQCLB27VoAurq6qKmpobm5mbKyMlasWIHPN7rL2h1vbL/73e948cUX8fvtBcJvuOGGrE9C2NLSwrp162hvb0dRFKqrq/nsZz+b8/M2UFz5cM6SyST3338/uq5jGAYXXHAB119/fc7P2UBx5cM5SzNNk3vuuYeSkhLuueee0T1n1jhmGIb1D//wD9bhw4etVCplffvb37b27duX67Asy7KsO++804pEIrkOw7Isy/rggw+snTt3WitXrsxs+9WvfmU9/fTTlmVZ1tNPP2396le/ypvYnnrqKeuZZ57JSTxpbW1t1s6dOy3LsqxoNGrdfffd1r59+3J+3gaKKx/OmWmaViwWsyzLslKplHXvvfda27dvz/k5GyiufDhnac8++6z14x//2Prnf/5ny7JG9//PcV0d1Hshe03TMgvZi74WLFhwzK+IhoYGqqqqAKiqqsrZeesvtnwQDAaZNWsWAF6vl4qKCtra2nJ+3gaKKx8oioLH4wHAMAwMw0BRlJyfs4Hiyhetra1s3LiRyy+/PLNtNM/ZuK4OGu5C9rny4IMPAnDFFVfkXXe0SCSSWeozGAzS0dGR44j6ev7553n55ZeZNWsWt9xyS04TRVNTE7t27WLOnDl5dd56x7Vt27a8OGemafLd736Xw4cPc9VVVzF37ty8OGf9xfXuu+/mxTn7xS9+wU033UQsFstsG81zNq6TgDXMhexz4Qc/+AElJSVEIhEeeOABysvLWbBgQa7DOilceeWVXHvttQA89dRT/PKXv+TOO+/MSSzxeJy1a9dy6623UlBQkJMY+nN0XPlyzlRV5aGHHqK7u5uHH36YvXv3Zj2G/vQXVz6csw0bNhAIBJg1axYffPDBmBxjXFcH5fNC9iUlJQAEAgEqKyvZsWNHjiPqKxAIEA6HAQiHw5nGsXxQXFyMqqqoqsrll1/Ozp07cxKHruusXbuWiy++mPPPPx/Ij/PWX1z5cs7SCgsLWbBgAZs2bcqLc9ZfXPlwzrZv384777zDXXfdxY9//GO2bNnCI488MqrnbFwngXxdyD4ej2eKdvF4nM2bNzN9+vQcR9XXkiVLqK+vB6C+vp7KysocR3RE+h8/wNtvv52Tdakty+Lxxx+noqKCz33uc5ntuT5vA8WVD+eso6OD7u5uwO6R8/7771NRUZHzczZQXPlwzm688UYef/xx1q1bxze/+U0WLlzI3XffParnbNyPGN64cSNPPvlkZiH7L37xi7kOicbGRh5++GHAbohatmxZTuP68Y9/zNatW+ns7CQQCHD99ddTWVlJTU0NLS0thEIhVq5cmZP60P5i++CDD9i9ezeKolBWVsbXvva1rJfwtm3bxqpVq5g+fXqmivGGG25g7ty5OT1vA8X12muv5fyc7dmzh3Xr1mGaJpZlceGFF3LttdfS2dmZ03M2UFyPPvpozs9Zbx988AHPPvss99xzz6ies3GfBIQQQgxsXFcHCSGEGJwkASGEmMAkCQghxAQmSUAIISYwSQJCCDGBSRIQQogJTJKAEEJMYJIEhBgDHR0d3HffffzjP/5j3k0JIkRvkgSEGAOvvPIK5513Ht/61rf4wx/+kOtwhBiQJAEhTtBvfvMb/vznP/fZdsopp2AYBrquM3Xq1D6v3Xvvvezbty+bIQoxIEkCQpyAjo4O6uvrueKKK/psP/vss3nuuef43ve+xyWXXNLntc9//vM89dRT2QxTiAFJEhBiBEzT7PP8pZde4uyzz8blcvXZ/uGHHxKJRPD5fLz55pt9XluyZAkffPBBn1kqhcgVSQJCDOLFF1/kgQce4Kc//Sm33XYbf/rTn/q8/u677/a7GNCrr77KnDlzuOyyy3jttdf6vOZyuZg1axbvvffemMYuxHBIEhBiEHv27OGjjz6isrKSn/3sZ3zmM5/p8/revXspLy/vs03Xdd58802WLVvGsmXLOHDgAJ988kmf91RUVLBnz54xj1+IoUgSEGIQe/bs4fOf/zxLlixBVVWcTmef16PRKF6vt8+2d999l2g0ykUXXcTMmTOZNm0ar776ap/3eL3ezEImQuSSJAEhBrF3714uvPDCAV8vLCzsswA42N1DFy1aRHFxMQBLly7l9ddf79OeEIvFKCwsHJOYhRiJcb3QvBAnorm5GV3Xj6nu6W3GjBkcOnSIOXPmAHbJYMOGDaiqyu233w7Y1UPd3d1s3bqVhQsXAnDgwAEuvvjisf8jhBiCJAEhBrBnzx6mT5+Oqg5cYD777LPZunVr5oL+9ttv43K5eOihh9C0I/97PfbYY7z66qssXLiQVCrFJ598wl133TXmf4MQQ5HqICEGsHv3bmbOnDnoey655BLeffddkskkYFcFfepTnyIUClFcXJy5ffrTn+att94ilUrxzjvvcMYZZ1BSUpKFv0KIwckaw0KcoN/85jcEAgGuvvrqYb3/e9/7HnfccQfTp08f48iEGJokASGEmMCkOkgIISYwSQJCCDGBSRIQQogJTJKAEEJMYJIEhBBiApMkIIQQE5gkASGEmMD+f6+zj8TPrJhkAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(comRDF.bins, comRDF.rdf, label=\"polymer COM\")\n",
"plt.plot(T4_RDF.bins, T4_RDF.rdf, label=\"T4\")\n",
"plt.plot(T1_RDF.bins, T1_RDF.rdf, label=\"T1\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the COM RDF is more washed out than the RDFs of the T4 or T1 atoms. It is also somewhat curious that it contains contributions near $r=0$. As always: **CHECK YOUR OWN SYSTEM CAREFULLY AND DO NOT RELY ON CODE THAT YOU FOUND ON THE INTERNET**.\n",
"\n",
"\n",
"For more details on the system (self assembly of a fiber from monomers) see the original notebook [coarse_grained_fiber.ipynb](https://github.com/MDAnalysis/WorkshopHackathon2018/blob/master/05_Tutorial3/coarse_grained_fiber.ipynb)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using a BeadGroup "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alternatively, we can replace the AtomGroup that is used by the `InterRDF` function with something that looks like a AtomGroup but instead of returning the atom positions, returns the centers of mass. We will call this pseudo-AtomGroup our `BeadGroup`. This approach explots the [duck-typing](https://en.wikipedia.org/wiki/Duck_typing) in MDAnalysis.\n",
"\n",
"(See [Issue 1891](https://github.com/MDAnalysis/mdanalysis/issues/1891) for the idea.)\n",
"\n",
"In the example below we are caching the calculation of the positions for the current timestep. Otherwise, the RDF function will calculate the COM _twice_ because it compares the group to itself."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"class BeadGroup(object):\n",
" # see https://github.com/MDAnalysis/mdanalysis/issues/1891#issuecomment-387138110\n",
" # by @richardjgowers with performance improvements\n",
" def __init__(self, groups):\n",
" \"\"\"Initialize with a list of AtomGroup instances.\n",
" \n",
" - With fragments: BeadGroup(atoms.fragments)\n",
" - By residue: BeadGroup(list(atoms.groupby('resids').values()))\n",
" \"\"\"\n",
" self._groups = groups\n",
" # for caching\n",
" self._cache = {}\n",
" self._cache[\"positions\"] = None\n",
" self.__last_frame = None\n",
"\n",
" @mda.lib.util.cached(\"len\") \n",
" def __len__(self):\n",
" return len(self._groups)\n",
"\n",
" @property\n",
" def positions(self):\n",
" # cache positions for current frame\n",
" if self.universe.trajectory.frame != self.__last_frame:\n",
" self._cache[\"positions\"] = np.array(\n",
" [g.center_of_mass(unwrap=True) for g in self._groups], \n",
" dtype=np.float32)\n",
" self.__last_frame = self.universe.trajectory.frame\n",
" return self._cache[\"positions\"]\n",
"\n",
" @property\n",
" @mda.lib.util.cached(\"universe\")\n",
" def universe(self):\n",
" return self._groups[0].universe"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use the `BeadGroup` with a group of AtomGroups, in this case the fragments (individual polymer monomers), creating the group `beads`:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"u = mda.Universe(fiber.topology, fiber.trajectory)\n",
"polymer = u.select_atoms(\"resname AAA BBB CCC DDD\")\n",
"beads = BeadGroup(polymer.fragments)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now use `beads` as input for the RDF function:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1d37758786214018b0ffcc661b2cfdea",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"beadRDF = rdf.InterRDF(beads, beads,\n",
" range=(0, 40), exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(The BeadGroup is fairly slow because of the calculation of the COM for each individual group. However the approach demonstrates in detail how to do any such kind of analysis.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comparing the results from `BeadGroup` to the previous results, we see that the on-the-fly transformation and the BeadGroup give the same answer:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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5ppr2Lx5c9KuX15ezo9//GMuuOACLrroIm666SZ2794NwI4dO7j22mvJz89nxowZFBUVxdvFli9fTk5ODh9++GH8XH//+9/Jycnh7bffbvdaCxcu5NNPPwVir/vCCy/ksssuo6CggD/96U+98nrKysq45JJL4o83bdrENddcw4wZM5g1axY33XQTX375Za9cqyORSISrr766V0Y0iySQJMeXBNzNJYFG0UNIOIUd/6Zkmia33347559/Ph9//DGrVq3i/vvvp7KykmAwyM0338w999zDmjVrKCkpYcOGDbz00kvx4ydMmMAbb7wRf/zGG28wceLEdq9dU1PDxo0bOe+88+Lbnn32Wd577z2Ki4v51a9+RSQS6dXXW1FRwZ133sn999/PRx99xIoVK/jJT37Cvn37Tnhub05BYbVayc/P58033zzpc6Xu7EinOU03URVRHST0TFlZGTfccANTpkxh27ZtjBgxgqeffhqHw8GHH37II488gq7rTJ48mf/8z//EZrPFj/3LX/7Cjh07+OUvfwnAK6+8wtdff83tt9/ODTfcwPTp09m4cSMTJ05k7ty5LF26lMrKSp599lmmTJlCIBDgoYceYseOHWiaxs9+9jNmzZrF8uXLef/99wmHwwQCAf7617/Gr/nRRx9hsVi4+eab49smTZoUj2f69OkUFBQA4HA4ePTRR7nmmmu49dZbAZg+fTrr1q0jGo0SiUQoLS3lzDPPbPfevPPOO1x88cXt7gsEAjgcjvi8T6tXr+aJJ54gEokwbNgwioqKcLlcFBUV8d577xEKhcjLy2PJkiVIksSWLVuYP38+DoeD6dOnx8/74osvcu2117aZ7aD1/vvuu4/09HS2bt1Kbm4u3//+91mwYAGhUIhhw4axdOlS0tPTueaaa3j44YeZPHky1dXVXHHFFaxdu5bly5fzv//7v0QiEfbv38/3vve9+KDaWbNmsWTJEq6++uou/mo6J0oCSXJCm4BYU+CU9Nprr8W/Xn31VV577TW2bNkCQDQabbO/5Wv79u0ABIPBE/Z1x+7du7nxxhspKSkhLS2Nl156iVAoxLx583j++ed5//330TSNl19+uc1xs2fP5r333iMajQ1KXL58eXyVstLSUm6//XZKSkrYtWtXfH2PhQsX8swzzwDw1FNPMWPGDN59913++te/8sgjjxAIBADYsGED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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(comRDF.bins, comRDF.rdf, label=\"polymer COM\")\n",
"plt.plot(T4_RDF.bins, T4_RDF.rdf, label=\"T4\")\n",
"plt.plot(T1_RDF.bins, T1_RDF.rdf, label=\"T1\")\n",
"plt.plot(beadRDF.bins, beadRDF.rdf, linestyle=\"--\", label=\"polymer COM (BeadGroup)\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Faster BeadGroup\n",
"\n",
"We can try to speed up the BeadGroup by using MDAnalysis methods for the COM calculation that can work with whole AtomGroups. "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"class BeadGroupFast(object):\n",
" # see https://github.com/MDAnalysis/mdanalysis/issues/1891#issuecomment-387138110\n",
" # by @richardjgowers with performance improvements\n",
" def __init__(self, atoms, compound=\"fragments\"):\n",
" \"\"\"Initialize with an AtomGroup instance.\n",
" \n",
" Will split based on keyword 'compounds' (residues or fragments).\n",
"\n",
" \"\"\"\n",
" self._atoms = atoms\n",
" self.compound = compound\n",
" self._nbeads = len(getattr(self._atoms, self.compound))\n",
" # for caching\n",
" self._cache = {}\n",
" self._cache[\"positions\"] = None\n",
" self.__last_frame = None\n",
"\n",
" def __len__(self):\n",
" return self._nbeads\n",
"\n",
" @property\n",
" def positions(self):\n",
" # cache positions for current frame\n",
" if self.universe.trajectory.frame != self.__last_frame:\n",
" self._cache[\"positions\"] = self._atoms.center_of_mass(\n",
" unwrap=True, compound=self.compound)\n",
" self.__last_frame = self.universe.trajectory.frame\n",
" return self._cache[\"positions\"]\n",
"\n",
" @property\n",
" @mda.lib.util.cached(\"universe\")\n",
" def universe(self):\n",
" return self._atoms.universe"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"u = mda.Universe(fiber.topology, fiber.trajectory)\n",
"polymer = u.select_atoms(\"resname AAA BBB CCC DDD\")\n",
"beads2 = BeadGroupFast(polymer, compound=\"fragments\")"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "eebc91bab81c45928080be8a832d9e64",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"bead2RDF = rdf.InterRDF(beads2, beads2,\n",
" range=(0, 40), exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This ran 2-3 times faster than the simple `BeadGroup`.\n",
"\n",
"Plot the results to show that we get the same answer:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(comRDF.bins, comRDF.rdf, linestyle=\":\", label=\"polymer COM\")\n",
"plt.plot(T4_RDF.bins, T4_RDF.rdf, label=\"T4\")\n",
"plt.plot(T1_RDF.bins, T1_RDF.rdf, label=\"T1\")\n",
"plt.plot(beadRDF.bins, beadRDF.rdf, linestyle=\"--\", label=\"polymer COM (BeadGroup)\")\n",
"plt.plot(bead2RDF.bins, bead2RDF.rdf, linestyle=\"-.\", label=\"polymer COM (BeadGroupFast)\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.ylim(0, 10)\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### More applications "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `BeadGroupFast` can also be used to look at the RDF of, say, the \"AAA\" residues:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"AAA = polymer.select_atoms(\"resname AAA\")\n",
"beadsAAA = BeadGroupFast(AAA, compound=\"residues\")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ba8832934d5b4fdc9ae85dc2d63ba9b4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"AAARDF = rdf.InterRDF(beadsAAA, beadsAAA,\n",
" range=(0, 40), exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(T4_RDF.bins, T4_RDF.rdf, label=\"T4\")\n",
"plt.plot(AAARDF.bins, AAARDF.rdf, label=\"AAA COM\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Or we can look at AAA around DDD:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"DDD = polymer.select_atoms(\"resname DDD\")\n",
"beadsDDD = BeadGroupFast(DDD, compound=\"residues\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the RDF between two different groups also use `exclusion_block` because one AAA and one DDD are bonded:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "29530d4d9c4e4992b4b015b00b96a6f3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=2221.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"ADRDF = rdf.InterRDF(beadsAAA, beadsDDD,\n",
" range=(0, 40), exclusion_block=(1, 1)).run(verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(T4_RDF.bins, T4_RDF.rdf, label=\"T4\")\n",
"plt.plot(AAARDF.bins, AAARDF.rdf, label=\"AAA COM\")\n",
"plt.plot(ADRDF.bins, ADRDF.rdf, label=\"A/D COM\")\n",
"plt.xlabel(r\"$r$ (Å)\")\n",
"plt.ylabel(\"RDF\")\n",
"plt.legend(loc=\"best\");"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@orbeckst
Copy link
Author

The first version that I posted was incorrect – the way that one replaces coordinates in the transformation is crucial: This is correct

self.com_atoms.positions = self.get_com()

but the following does not work

self.com_atoms.positions[:] = self.get_com()    # INCORRECT

(The reason is that .positions is a managed attribute that handles setting in a special way — you can't assume that you can just manipulate positions like a simple numpy array.)

@orbeckst
Copy link
Author

Also note that the COM RDF looks a bit funny because it gets very close to r=0 even though self-distances had been excluded.

There's a possibility that this is a problem with unwrap=True. Please check carefully for your own system and let us know on the mailing list https://groups.google.com/group/mdnalysis-discussion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment