{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "H5W4kSYDUTXJ" }, "source": [ "# Explore Fws across populations\n", "\n", "This notebook takes sample-level F*WS* scores from the MalariaGEN Pf8 data release and generates a box plot of F*WS* scores, summarised at the subpopulation-level.\n", "\n", "A quick recap: F*WS* is a measure of sample clonality. High values (i.e. >0.95) mean a sample contains a high proportion of, or exclusively, clones of the same parasite strain. Low values indicate a mix of different parasite strains within a sample. For a more detailed explanation of the F*WS* metric, see [this paper](https://www.nature.com/articles/nature11174) by Manske *et al.* (2012).\n", "\n", "**This notebook should take around one minute to run.**" ] }, { "cell_type": "markdown", "metadata": { "id": "Sa-q1QHPUTXK" }, "source": [ "## Setup\n", "\n", "Install and import the malariagen Python package:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eWy-86DCUTXL", "outputId": "07b8951b-26bf-460f-c622-1ce56ba8a125", "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n" ] } ], "source": [ "!pip install malariagen_data -q --no-warn-conflicts\n", "import malariagen_data" ] }, { "cell_type": "markdown", "metadata": { "id": "McAft5WuUTXL" }, "source": [ "Import required python libraries that are installed at colab by default." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "UbRpW_lgUTXL" }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import collections\n", "import matplotlib.pyplot as plt\n", "from google.colab import drive" ] }, { "cell_type": "markdown", "metadata": { "id": "GHGcOvSgUTXM" }, "source": [ "## Access Pf8 Data\n", "\n", "We use the malariagen data package to load the release data." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "eKW84-QFUTXM" }, "outputs": [], "source": [ "release_data = malariagen_data.Pf8()\n", "df_samples = release_data.sample_metadata()" ] }, { "cell_type": "markdown", "metadata": { "id": "zhl5RGOoaEnv" }, "source": [ "Then we load the file containing sample-level F*WS* data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 224 }, "id": "CRRrqiIUUTXM", "outputId": "669d533c-638a-4295-868a-7972eac5cb78" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(24409, 2)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SampleFws
0FP0008-C0.820692
1FP0009-C0.998084
2FP0010-CW0.822654
3FP0011-CW0.755678
4FP0012-CW0.995906
\n", "
" ], "text/plain": [ " Sample Fws\n", "0 FP0008-C 0.820692\n", "1 FP0009-C 0.998084\n", "2 FP0010-CW 0.822654\n", "3 FP0011-CW 0.755678\n", "4 FP0012-CW 0.995906" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load FWS scores\n", "# Read data directly from url\n", "fws_df = pd.read_csv('https://pf8-release.cog.sanger.ac.uk/Pf8_fws.tsv', sep='\\t')\n", "\n", "# Print the shape and first rows\n", "print(fws_df.shape)\n", "fws_df.head()" ] }, { "cell_type": "markdown", "metadata": { "id": "YbsMbzXLaR28" }, "source": [ "## Subset and combine the data frames\n", "\n", "For the most reliable results, we only want to look at samples which have passed quality control (QC)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YNxu-P36UTXM", "outputId": "aff96cd4-7561-4cb1-9335-2cae34d939f9" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(array([False, True]), array([ 8916, 24409]))\n" ] }, { "data": { "text/plain": [ "(24409, 17)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Select only QC-passed samples\n", "sample_selection = df_samples['QC pass']\n", "print(np.unique(sample_selection, return_counts=True))\n", "\n", "# Return a new data frame containing only QC-passed samples\n", "qcplus_samples = df_samples.loc[sample_selection]\n", "qcplus_samples.shape" ] }, { "cell_type": "markdown", "metadata": { "id": "m1QjFtiia7Td" }, "source": [ "There are 24,409 QC-passed samples in Pf8" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 310 }, "id": "nQ5Qp0BnUTXM", "outputId": "836792ba-887a-426b-8b6e-1b4f2a8e9e6b" }, "outputs": [ { "data": { "application/vnd.google.colaboratory.intrinsic+json": { "summary": "{\n \"name\": \"fws_qcplus_samples\",\n \"rows\": 24409,\n \"fields\": [\n {\n \"column\": \"Sample\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 24409,\n \"samples\": [\n \"SPT16969\",\n \"RCN00879\",\n \"SPT40671\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Study\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 93,\n \"samples\": [\n \"1022-PF-MW-OCHOLLA\",\n \"1114-PF-PDN-DBS-GH-GHANSAH\",\n \"1135-PF-SN-CONWAY\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Country\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 33,\n \"samples\": [\n \"Sudan\",\n \"Vietnam\",\n \"Ethiopia\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Admin level 1\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 118,\n \"samples\": [\n \"Lagos\",\n \"Gaza\",\n \"Nzerekore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Country latitude\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10.038330616227192,\n \"min\": -19.37564815406632,\n \"max\": 23.83676210254897,\n \"num_unique_values\": 33,\n \"samples\": [\n 16.049385531400517,\n 16.69436455,\n 8.629764362513097\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Country longitude\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 48.65721291442347,\n \"min\": -74.35684186076726,\n \"max\": 145.25400675267255,\n \"num_unique_values\": 33,\n \"samples\": [\n 30.005646335160435,\n 106.55179596,\n 39.62619544813527\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Admin level 1 latitude\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10.32049979679567,\n \"min\": -25.52759199095002,\n \"max\": 26.07383704651308,\n \"num_unique_values\": 119,\n \"samples\": [\n 6.527058222002174,\n 6.611915560464792,\n 8.43731555009309\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Admin level 1 longitude\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 49.73699921471399,\n \"min\": -77.86731350630257,\n \"max\": 150.84596252,\n \"num_unique_values\": 119,\n \"samples\": [\n 3.5649471762163705,\n 2.2216427215441525,\n -8.899059960499232\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5.347253065242546,\n \"min\": 1966.0,\n \"max\": 2022.0,\n \"num_unique_values\": 39,\n \"samples\": [\n 1967.0,\n 1970.0,\n 2013.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ENA\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 24290,\n \"samples\": [\n \"ERR405239\",\n \"ERR4020889\",\n \"ERR2890684\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"All samples same case\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 24409,\n \"samples\": [\n \"SPT16969\",\n \"RCN00879\",\n \"SPT40671\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Population\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"AF-C\",\n \"AF-E\",\n \"OC-NG\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"% callable\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 9.783885494769905,\n \"min\": 50.0,\n \"max\": 92.21,\n \"num_unique_values\": 3659,\n \"samples\": [\n 83.43,\n 88.78,\n 90.79\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"QC pass\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n true\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Exclusion reason\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Analysis_set\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sample type\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"gDNA\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sample was in Pf7\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Fws\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.16088824166470525,\n \"min\": 0.1549099850443006,\n \"max\": 1.0,\n \"num_unique_values\": 24402,\n \"samples\": [\n 0.6562345597462422\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", "type": "dataframe", "variable_name": "fws_qcplus_samples" }, "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SampleStudyCountryAdmin level 1Country latitudeCountry longitudeAdmin level 1 latitudeAdmin level 1 longitudeYearENAAll samples same casePopulation% callableQC passExclusion reasonSample typeSample was in Pf7Fws
0FP0008-C1147-PF-MR-CONWAYMauritaniaHodh el Gharbi20.265149-10.33709316.565426-9.8323452014.0ERR1081237FP0008-CAF-W82.48TrueAnalysis_setgDNATrue0.820692
1FP0009-C1147-PF-MR-CONWAYMauritaniaHodh el Gharbi20.265149-10.33709316.565426-9.8323452014.0ERR1081238FP0009-CAF-W88.95TrueAnalysis_setgDNATrue0.998084
2FP0010-CW1147-PF-MR-CONWAYMauritaniaHodh el Gharbi20.265149-10.33709316.565426-9.8323452014.0ERR2889621FP0010-CWAF-W87.01TrueAnalysis_setsWGATrue0.822654
3FP0011-CW1147-PF-MR-CONWAYMauritaniaHodh el Gharbi20.265149-10.33709316.565426-9.8323452014.0ERR2889624FP0011-CWAF-W86.95TrueAnalysis_setsWGATrue0.755678
4FP0012-CW1147-PF-MR-CONWAYMauritaniaHodh el Gharbi20.265149-10.33709316.565426-9.8323452014.0ERR2889627FP0012-CWAF-W89.86TrueAnalysis_setsWGATrue0.995906
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "text/plain": [ " Sample Study Country Admin level 1 Country latitude \\\n", "0 FP0008-C 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n", "1 FP0009-C 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n", "2 FP0010-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n", "3 FP0011-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n", "4 FP0012-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n", "\n", " Country longitude Admin level 1 latitude Admin level 1 longitude Year \\\n", "0 -10.337093 16.565426 -9.832345 2014.0 \n", "1 -10.337093 16.565426 -9.832345 2014.0 \n", "2 -10.337093 16.565426 -9.832345 2014.0 \n", "3 -10.337093 16.565426 -9.832345 2014.0 \n", "4 -10.337093 16.565426 -9.832345 2014.0 \n", "\n", " ENA All samples same case Population % callable QC pass \\\n", "0 ERR1081237 FP0008-C AF-W 82.48 True \n", "1 ERR1081238 FP0009-C AF-W 88.95 True \n", "2 ERR2889621 FP0010-CW AF-W 87.01 True \n", "3 ERR2889624 FP0011-CW AF-W 86.95 True \n", "4 ERR2889627 FP0012-CW AF-W 89.86 True \n", "\n", " Exclusion reason Sample type Sample was in Pf7 Fws \n", "0 Analysis_set gDNA True 0.820692 \n", "1 Analysis_set gDNA True 0.998084 \n", "2 Analysis_set sWGA True 0.822654 \n", "3 Analysis_set sWGA True 0.755678 \n", "4 Analysis_set sWGA True 0.995906 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Match FWS scores to corresponding QC-passed samples by merging the data frames\n", "fws_qcplus_samples = pd.merge(qcplus_samples, fws_df, on='Sample', how='left')\n", "fws_qcplus_samples.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "DdhS0ADWX2Fu", "outputId": "8410ca39-92d7-4a46-dab5-db08303e09c7" }, "outputs": [ { "data": { "text/plain": [ "(24409, 18)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check there are as many samples as we expected (24,409)\n", "fws_qcplus_samples.shape\n" ] }, { "cell_type": "markdown", "metadata": { "id": "fHu2AWbIbBUW" }, "source": [ "## Generate population-level summaries\n", "\n", "Here we define the ten subpopulations present in Pf8, listing their acronyms, full names, and assigning colours to be used in plotting. We store the information in an ordered dictionary." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "OzqAG0pMUTXR", "tags": [] }, "outputs": [], "source": [ "georegions = collections.OrderedDict([\n", " ('SA',dict(n='South America', c='#4daf4a')),\n", " ('AF-W',dict(n='West Africa', c='#e31a1c')),\n", " ('AF-C',dict(n='Central Africa', c='#fd8d3c')),\n", " ('AF-NE',dict(n='Northeast Africa', c='#bb8129')),\n", " ('AF-E',dict(n='East Africa', c='#fecc5c')),\n", " ('AS-S-E',dict(n='Eastern South Asia', c='#dfc0eb')),\n", " ('AS-S-FE',dict(n='Far-Eastern South Asia', c='#984ea3')),\n", " ('AS-SE-W',dict(n='Western Southeast Asia', c='#9ecae1')),\n", " ('AS-SE-E',dict(n='Eastern Southeast Asia', c='#3182bd')),\n", " ('OC-NG',dict(n='Oceania and Papua New Guinea', c='#f781bf'))])" ] }, { "cell_type": "markdown", "metadata": { "id": "6gQVe5GbbvsW" }, "source": [ "We can generate summaries of F*WS* for each population" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f7rSIxEnbr3_", "outputId": "47af447b-3136-4b80-d04d-8c0e2d5d9175" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SA: Mean = 0.988, Median = 0.998, Range = (0.585, 1.000)\n", "AF-W: Mean = 0.867, Median = 0.974, Range = (0.155, 1.000)\n", "AF-C: Mean = 0.868, Median = 0.958, Range = (0.225, 1.000)\n", "AF-NE: Mean = 0.900, Median = 0.996, Range = (0.241, 1.000)\n", "AF-E: Mean = 0.842, Median = 0.951, Range = (0.181, 1.000)\n", "AS-S-E: Mean = 0.914, Median = 0.992, Range = (0.441, 1.000)\n", "AS-S-FE: Mean = 0.910, Median = 0.994, Range = (0.354, 1.000)\n", "AS-SE-W: Mean = 0.960, Median = 0.997, Range = (0.402, 1.000)\n", "AS-SE-E: Mean = 0.967, Median = 0.996, Range = (0.356, 1.000)\n", "OC-NG: Mean = 0.964, Median = 0.998, Range = (0.477, 1.000)\n" ] } ], "source": [ "for p in georegions.keys():\n", "\n", " # Filter the data for the current population\n", " population_data = fws_qcplus_samples[fws_qcplus_samples['Population'] == p]['Fws']\n", "\n", " # Calculate mean, median, min, and max\n", " mean_fws = np.nanmean(population_data)\n", " median_fws = np.nanmedian(population_data)\n", " min_fws = np.nanmin(population_data)\n", " max_fws = np.nanmax(population_data)\n", "\n", " # Print the results\n", " print(\n", " f\"{p}: Mean = {mean_fws:.03f}, Median = {median_fws:.03f}, \"\n", " f\"Range = ({min_fws:.03f}, {max_fws:.03f})\"\n", " )" ] }, { "cell_type": "markdown", "metadata": { "id": "m3hgeN3rb_pT" }, "source": [ "## Plot the data\n", "\n", "We will generate a box plot to display the data. For simplicity, we exclude outliers from displaying in the plot.\n", "\n", "**What does a box plot show?**\n", "\n", "- Coloured box: the middle 50% of values for each population. This is also known as the interquartile range.\n", "- Line inside the box: the median value for each population.\n", "- Whiskers: the lines extending from the box show the range of F*WS* values, excluding extreme outliers." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 612 }, "id": "RrwGVkK1UTXS", "outputId": "ca019492-5c16-4e1e-c124-81fbc1e9e971" }, "outputs": [ { "data": { "image/png": "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QwcJDQ2VgIAAadasmSxcuLDA+zl9+rQMHDhQatWqJb6+vlKmTBlp3ry5TJs2zYRWAwAAAMA/XPoGymvXrpXY2Fjx9fWVbt26SVBQkCxevFi6du0qR48elUGDBuVrPzt27JB27drJuXPnpGPHjtKlSxdJS0uTxMRE+frrr6Vv374mvxIAAAAA7sxlg1dGRob06tVLPDw8ZP369dKwYUMREXnzzTfltttuk6FDh0qXLl2katWque4nNTVVOnfuLCIi27dvl/r169s9DwAAAACYyWWHGq5Zs0b2798v3bt3t4YuEZGQkBAZOnSoXL58WWbPnp3nfj766CM5cuSIjB071i50iYh4ebls9gQAAABQQrhs6khISBARkXbt2tmti42NFRGRdevW5bmfBQsWiGEY8vDDD8vu3btl9erVcvHiRYmKipL27dtLqVKlcn18enq6pKenW/+dmppagFcBAAAAAC4cvPbu3SsiIrVq1bJbV6FCBQkMDLRucz2XL1+WXbt2SdmyZWXKlCkyfPhwycrKsq6vUaOGLFu2TGJiYq67jzFjxsjIkSML+SoAAAAAwIWHGqakpIjI1aGFOQkODrZucz1nz56VzMxMOXPmjLz11lsyfvx4OXXqlBw7dkyGDRsmBw8elE6dOsmlS5euu48hQ4ZISkqK9c/Ro0cL/6IAAAAAuCWXDV6OYOndyszMlBdeeEEGDRok5cqVk0qVKslbb70ljzzyiBw+fFgWLVp03X34+PhIcHCwzR8AAAAAKAiXDV6Wnq7r9WqlpqZetzfs2n2IiNx///126y3Ltm3bVthmAgAAAECeXDZ4WeZ25TSP6+TJk5KWlpbj/K/sAgICpFKlSiIiEhoaarfesuzixYtFaywAAAAA5MJlg1erVq1ERGT16tV26+Lj4222yc1dd90lIiK///673TrLsmrVqhW2mQAAAACQJ5cNXnfffbfUqFFDPv/8c9mxY4d1eUpKiowePVpKlSolTz75pHX5iRMnJCkpyW5o4vPPPy8iImPHjpXz589bl588eVImT54sHh4e8vDDD5v6WgAAAAC4N5cNXl5eXjJz5kzJysqSli1bSu/evWXQoEHSoEED2bNnj4wePdqmp2rIkCESHR0tS5cutdnP7bffLi+//LL89ttvUr9+fXnxxReld+/e0qBBAzl+/Li88847Urt27WJ+dQAAAADcicvex0tEpE2bNrJx40YZPny4LFiwQK5cuSIxMTEybtw46dq1a773895770lMTIxMnTpV4uLixDAMadSokXz88cfy4IMPmvgKAAAAAMDFg5eIyG233SYrV67Mc7u4uDiJi4u77vqePXtKz549HdcwAAAAAMgnlx1qCAAAAAAlBcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgAAAACTEbwAAAAAwGQELwAAAAAwGcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgAAAACTEbwAAAAAwGQODV5vvPGGLFq0yPrvv/76SxITE0VVHfk0AAAAAHBDcWjwmj17tpQtW1ZERP7++2+pV6+e3HzzzVKvXj05evSoI58KAAAAAG4YDg1eycnJUqNGDRERWbp0qXh7e8vx48elWbNmMnjwYEc+FQAAAADcMBwavCpVqmTt2Vq4cKE8++yzEhERIYMGDZI1a9Y48qkAAAAA4Ibh5cid9ejRQ1566SV54IEHZOXKlTJ+/HgREfH09JSUlBRHPhUAAAAA3DAcGryGDRsmqirffPONjBw5UqKiokREZNu2bVK1alVHPhUAAAAA3DAcGrw8PT1l5MiRMnLkSJvlx48fl8cee8yRTwUAAAAANwyHBq8rV66It7e33fJ///vfjnwaAAAAALihOLS4RuXKlWX48OHyxx9/OHK3AAAAAHBDc2jwmjdvnvz6669Sq1Yt6datm2zevNmRuwcAAACAG5JDg9c999wjixcvlj179khUVJQ8+uij0rhxY4mLi5P09HRHPhUAAAAA3DAcGrwswsPD5fnnn5dvv/1W2rRpI/3795cqVaqY8VQAAAAA4PIcWlwjIiJCUlJSJDMzU4KDg61/GjduLCEhIY58KgAAAAC4YTg0eEVFRcnu3bvlpZdekl69eklYWJgjdw8AAAAANySHDjVcu3atxMfHy549e6RWrVrSu3dv+e233xz5FAAAAABww3H4HK+YmBiZOXOm7N69W6pXry4dOnSQu+++W5YvX+7opwIAAACAG4JDhxrOnDlT0tLSJC0tTf766y9JS0uT22+/Xf7zn//I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L7xHc2H5Dr106ZI2adJEw8LCrNcinGv2cnt/njp1iuu2XDz++ONapkwZrVWrln766af6ww8/OLtJTkHwcgEPPPCAGoahhmFo586ddeLEiXr58mXrej78bK1bt87m35aA9d1332nlypW1cuXK+scff6gq4TW7d955RwMCAnTEiBF69uxZVeXcyo/27durv7+/vvvuu3ZftBs2bNB27drpsGHDnNQ613Tvvfeqn5+fTpgwwe6YJSQk6LBhw3THjh1Oap3ryi1AbNmyRX///Xcntcx13Xffferr66uTJ0+2633YuHGj1q9fX1u3bq0XLlxwUgtdl+X70fIdOm/ePA0ICNDY2Fi7baDasWNHa0/XuXPnbNYlJCTo3XffrXFxcc5pnIvr1KmT+vv762uvvaZHjx61W3/x4kUntMo5CF4u4NZbb1XDMPT+++/X8PBwNQxDGzZsqGPHjtXffvvNZlt3/xC0hNRXX31VExMTbXq1MjIytF+/fmoYhj766KP8qp7NiRMn9JZbbtEGDRro8ePHVZXQlR+dO3dWwzB04sSJdus2btyoLVu2VE9PT4ZrZhMbG6uGYej48eP10qVLNus2btyod9xxhxqGobt27XJSC11Tx44d1d/fP8dhmRs3btTbbrtNy5Urp6mpqbx3/9/AgQPVMAx9/PHHrZ9rFhs2bNDWrVurt7e3rlq1ykktdE0TJ07MMcT/8ccf2r59ezUMQ9955x0ntMx1denSRQ3D0DfeeEP/+usvm3UbNmzQu+66Sw3D0LVr1zqngS7sX//6l/r7++uoUaOsP/pmZGRYP8eOHj2qw4cP1+XLlzuzmcWG4OVElhC1dOlSLVWqlL722muakpKiL730ktapU0cNw9CAgAB94403dOXKlTk+1p388MMPGh4erp6enmoYhtavX1/feustm19KLly4oDExMRoSEqKLFy9WVQKGquqqVavUMAx97733VJVjkh/Jyclao0YNNQxD7733Xpt1GzZs0JYtW6q3t7d+//33quqe78lrfffdd+rj46MhISE6ffp0m3WWY1aqVCn97rvvVJXz0KJv377WH4yyj3ZQvXrcWrVqpT4+Prp69WontdD1XLp0Sd977z2tXbu2RkRE6IIFC6y9WpZzzcvLS9esWaOqvD8tnnjiCTUMQ8uUKaOzZ8+2G3L+448/qqenp1atWlU3bNjgpFa6lqSkJL377rvVy8tLn3nmGZtjtn79es61XGzcuFErVqyonTt3ts7nyv65f/LkSR0xYoT6+vqqYRj6+eefO6upxYbg5QL27dunNWrU0NDQUN23b5+mp6frqVOndPjw4Vq7dm1r0OjRo4d+/fXXdl3c7qRfv34aFBSk48aN09atW2tISIg2aNBAN27cqH/++aeqqi5YsED9/Pz0vvvusz7O3T8IP/30UzUMQ2fPnq2q+bvgPXLkiNsPbTp27Ji2aNFCDcOwnk87duzQO++8U728vOxCl7sHiTNnzujMmTM1IiJCa9asqfPmzdPMzEz96aefrBcneR0zdzyGU6dO1SpVqqhhGDpr1izr8uwBgoD/j9TUVFW9+kPbjBkztEqVKlqxYkX94osvdPXq1dq6des8zzXLD3budL6dPXtWb7/9djUMw/rjbmxsrM6fP99mu1GjRqmnp6e++uqrqupex+h6fvjhB+uIm759++rhw4d18+bN2qpVK74LcjF27Fj19PS0zue6NnQNGzZMDcPQ22+/XcuXL6/e3t4lPnwRvFzEtGnT1DAMnTZtms3y9PR0fe+996xzwHx9fbVBgwa6fPly/d///uek1hY/y4dZenq61qlTRx988EFNT0/XOXPmaP369dXf31979+6t27Zt04yMDO3UqZMahqFjx451cstdw4cffmgdoqma+8WbZfjmv/71L+3bt6/bzY24diL+sWPHrBcrt99+u/VCOD4+XlVz/qLdsmWLbtmyxa73wh2kpKTojBkztFy5clqzZk0dNmyYNahaerpyOma7du3S9PR0p7TZWbK//nnz5mnZsmXVMAz97LPPdOvWrfkKq9cOeyrpevbsqdOmTbN+Ll28eNEavsLCwjQqKkq9vb2tc4Etn2fZj9l3332nr732mh46dKj4X4CT/fLLLxoUFKS9e/fWFStWaM2aNdXPz0+ffvpp3bNnj2ZkZOi+ffs0JiZGDcOw9uK4q2s/1++//341DEM7deqkzZo1Uy8vL+vwwpzen5s3b3bLoa6WY3HXXXdp+fLl9cSJE3bbzJs3Tw3D0N69e6uq6qxZs7RMmTLq5eVVosMXwauYXa/S3q+//qoRERFauXJlmwu/I0eOaJUqVTQiIkJfeeUVbdeunTWE3XLLLdZf/kqyaycAz58/Xw3D0FGjRqmq6rlz5/Sll17SkJAQLV26tMbF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/lxTtR2m7+HhoaGhodqhQwd9//33dfv27Tbfi/v379cGDRrYhS93P4YEL5Pt3btXe/XqpfXr19emTZvq/PnzbSq6WE7SU6dOaWBgoLZv396uelNJVNRhcjkNQXQHXAg7jqXYQ9myZbVq1ao6d+5cm5s4ql69MJk7d64+8cQTWrVqVWsIc4eqj4sXL1bDMNTX11cXLVpks85yceLl5aXr1q2ze6y7/QKcXUJCgoaHh+uDDz5o7YHPPr/30qVLmpqaqvv377ebA0foytn1yuxb7vXjrgpTFOLvv//WrKws6/rU1FTdtWuXPvbYY25RtOWxxx5TwzD0scces1u3ceNGu6It7tzjnBNLwakyZcpo27ZttXfv3tYg5uPjo40aNdKhQ4fqt99+q5cuXdI//vjDWlSjZ8+e1ms1dz6uBK9ikJGRoX/99Zdd70T2C+GxY8eql5eXTpw4sbibV+wcOUzO8uZ1hws9LoQdzxK+ypUrpzfddJPOmTPnuj1ZKSkpunz58hxL4ZZU48ePV39/f/X397dWWV2/fr22bNkyX/Ns3JGlONLSpUutyyzvv23btukzzzyj1atXV39/fy1XrpzGxcXZbYer8lNm313DV1GKQrizKVOmWO9PNm/ePOvydevW5Vm0xZ1lPxaWKTO1a9fWXbt26R9//KELFy7UTp06aa1ataxBLDIyUvv06aNjx47VgIAALV26tD788MNu80P59RC8nCR76Pr666+1Zs2aWr9+/RLfzc8wuaLhQtjxrg1fc+fOtYavaycNu4vsr3fChAnWWw68++67etddd3FxkovRo0erYRi6ePFi67KzZ89qXFyc+vv7W6t41a1b13qBMmfOHCe22HkcUWbfMAz94IMPTG+rK3FEUQh3k/18mj17trW4yJw5czQxMfG6oYviGf/Ifu68+OKLahiG1qxZU7du3aqqV69rz58/r4sXL9bhw4dr3bp1rcfZMky/WrVqNjfsdkcELyf79NNPtWHDhlq6dOkSP0eJYXKFx4Vw4eS3WuaZM2euG77cqRci+7mT/b8nTJigAQEB6unpqR4eHrp582a7bXDVokWLrBcY33//vX766afWm8CXL19eR48erampqZqRkaFTpkyxVtO03A7DXTiizP7nn3+unp6eGhgYaPedUlI5siiEu8gp4GcPX1FRUXmGrlWrVum7776ba6Ecd5D9HBowYIC10qjlOyG7c+fOaVJSkg4bNky7dOmipUuXdovbYeSF4OUE58+f159++knvv/9+DQ8P1/r165f40MUwucLhQrhwClMt8/z58zbha/78+fzCme1LduzYsVqhQgX18fGxVnXkfLOXmZmpzzzzjM19agzD0B49etgVN1C9Olnd19fXrYaBObLM/sKFC3X37t3F0m5noyhEweUW8OPi4qzDDv/973+r6tX377XVMlevXq1169ZVPz8/t++tUbX9Xujfv781fP3444+qevU9mlPIz37TaXdG8HKCY8eO6e23364VK1bU/v37u80vKAyTKzouhPNW0GqZL7/8snW5ZdhhpUqVNCwsTBcsWFBs7Xamdu3aaZMmTTQuLs7uXlHZ57yNHz9evb291d/fX7/99tvibqbLy165cPr06fryyy/rs88+q99//71N4ZbsBZQaNGigtWvXtivsUlJRZr9wKApRcNcL+NmPzaeffqre3t5qGIZ++umnqmr7PREfH68NGzbUsLAw3bFjR/G+ABeWn/CV/e9r/9udEbyc5MiRI5qYmHjdX/pKEobJFRwXwoVT1GqZqlfD15QpU7RWrVpuccPaiRMnWntlPD09tXLlyjp58mT96aefctz+3Xfftb6HV65cWcytdX3X/tJ77Y1Ws6//5JNP1MfHR/v27esW1Wwps194FIUomLwCfvZjlH3Y4WeffWZdvnLlSm3YsKEGBQW5RcVHi5xC07XrVG2PYW7hC7YIXjANw+QKhwvhwnFktczU1FS3mTOydOlSNQxDH3jgAR04cKC1bH5QUJA+//zz+tNPP9kdz3HjxlnPOUvvNa669mIjey9N9vPsP//5j958881avXp1txhmSJn9wqEoRMHlN+BnP6/i4uKsx3b27Nm6detWtwxdqmodxnrtZ9m1cy+vvd6whK/o6GjdtGmT+Q29QRG8UGwYJpc/XAgXHNUyi6ZLly5arlw5PXHihP7xxx/62WefafXq1dUwDA0NDdW7775bN2zYYPPL8YQJE6xV+r777jsntr745adoS27FMiZOnKgxMTEaHh7uNpPNKbNfcBSFKLiCBPzs3w2qtse2fPnybhe6FixYoE899ZSGh4fr119/bbPu2tBVsWJFrVSpkv799982Py4NHDhQDcPQJk2a6MWLF932vZsbghccjmFyRceFcP5RLbPwLF+Kn3zy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LNBly5bpmTNn3GYeYXEheMF0DJODI1EtE46U36Itll/S09PT9csvv7TeqPuee+7R3bt3O/lVFB/K7BcMRSEKh4BfeC+//LJ6e3vbDcm3sPQG/vXXX9qqVSs1DENfe+01vjeLCcELxcKdh8nBsaiWCUcoTNGWjz76SI8fP67/+c9/9IUXXtCPPvpIT58+7cyXUewos59/FIUoPAJ+wWVmZuq5c+e0fv36GhERoZcuXbpu8RVL+Prll180JCRE77333uJsqlsjeAG44VAtE45S0KItrVu31scff9wtimioUma/sCgKUTQE/MLJysrS5s2ba9WqVfPc1hLU6tWrp76+vnrixInrzkOE43gIANwgVFVERPr06SNBQUGSlJRkXefhwccZCiYzM1N8fHykT58+cuTIEZk1a5aIiBiGIQcPHpSmTZuKt7e3TJgwQVatWiXPPfecbN++XT7//HM5e/ask1tfPHJ6X3Xo0EG+/fZbmTJlikyfPl1++OEHmTRpkrRo0UJERDIyMqzbnjx5UiIiIuTWW28ttjY72yuvvCKrV6+WV199Vf79739LZGSkZGZmWj+/sgsODpbBgwfLwYMHpVq1apKZmSmenp7W9e7yuZaVlWX9b1WVgIAAGTFihNSuXVvmzJkjI0eOlB9++EH+9a9/ycyZM6V///4iIuLp6SnNmzeXW265RVJTU+W3335z1ktwCZcuXRJfX185cuSILFq0KNdtVVVCQ0MlMjJSvL29xcvLq5ha6d4MzemTAABc2NmzZ6V9+/aybds2mT17tjzxxBPObhJuYL///rs0b95cAgMDZdeuXXLx4kVp2rSpXLx4Ud555x15/vnnxTAMuXz5siQnJ8vly5elWrVqzm62qWJjY+XMmTPSv39/adGihdSsWdO6LiMjw+4iTVXFMAyb4PDll19K3759pV27djJjxgwJDg4u1tfgDAcOHJC2bdtKpUqVZNGiRVK+fHlrqPDw8JAzZ87In3/+KVu2bJGbb75ZqlatKuXKlRORnI+rO8p+Lp09e1YWLlwoPj4+0qhRI2nSpIl1u+zH67777pOff/5ZEhISpFatWs5qukuYO3eu9OzZU5566imZNGmShISE2G1jOcYiIjExMRIcHCybNm0q7qa6J6f1tQFAEVAtE45E0ZZ/UGa/8CgKUTDcR8/xTp48qQ0aNFDDMHTcuHE267KysmzOyenTp6uPj48OHz5cs7KyGGpYDAheAG5IVMuEI1G05R+U2S88ikLkHwHfPDt37tRSpUqpYRj61ltv5TjPcMWKFdqwYUOtU6eOHjlyxAmtdE8ELwA3LKplwpEo2vIPyuwXDkUh8o+Ab67t27dbb4jcrl07HTNmjG7btk23bNmiAwcO1Bo1arjNzbhdCcELAODWLL+or1u3ToODg/Wuu+5ycouchzL7BUPVx6Ih4Jvr999/144dO6qHh4f1fDQMQ/38/PSee+5xi5txuxqKawAAIBRtyS49PV2aNWsm586dk++//15uuukm64T8EydOSO3atcXHx8da3bFVq1ZSqVIl+eijj9yiiEZOlKIQ+WY5VtOnT5fnn39ennvuOZkyZYr4+PjI4cOHJSEhQZYtWybLly+XwMBAqV+/vjz++OPSuXNn+fnnn+Xbb7+VevXqSZcuXaRs2bLOfjku7cKFC7Jjxw5ZuXKlXL58WQICAqRdu3ZSp04dCQsLc3bz3A7BCwCA/7dq1Srp0KGD9OnTR6ZMmeKWVeYslQk//vhjeeGFF2To0KHyzjvviIjIwYMHpVWrVpKWliYTJ06UihUryqJFi+TLL7+UtLQ0OXDgQImv+ChC1UdHIeDD3RC8AAD4f6dPn5auXbvK1KlTpW7dus5ujlNRZj9nkyZNkkGDBonI1RLxERER8uqrr0rz5s1t7lem2Up2i4hN6Fq+fLkMGzZMkpOTZf369TbBzV0Q8ItX9vPx2nMTxYfgBQBANunp6eLj4+PsZriEUaNGyYgRI2TEiBEybdo0u9CV/R5V7mLZsmXy0EMPSefOnaV69eqyZMkSOXLkiAQGBsrjjz8uzzzzjNSpU8euRyYrK0s8PDxk+PDhsnDhQklNTZX4+HipV6+ek16JayDgw50QvAAAQI4SEhKkY8eOcvHiRalQoYKMGDFCevXqZQ1d7hS4snvkkUdk/fr1snPnTlFVWbVqlbz99tty6NAhCQkJkSZNmsiIESOkevXqUqlSJbl8+bIsXbpUXnrpJTl37py0bNlSPvzwQ6ldu7azX4pLIODDXRC8AADAdT3++OPyxRdfSN++fWXq1KkiIm4buigKYQ4CPtwFwQsAANixhIz169dLp06d5JZbbpHvv//e2c1yCRSFcDwCPtwBZzMAALBjmXxfr149qVOnjqxdu1bmzp3r5FY5X2Zmpvj4+EifPn3kyJEjMmvWLBG5erwOHjwoTZs2FW9vb5kwYYKsWrVKnnvuOdm+fbt8/vnn1iCGf1h+/+/Tp48EBQVJUlKSdR2hCyUNPV4AACBXlNm3R1EIx+I+enAH/JQAAABy1bhxY2nVqpX079+f0PX/6tatK//+97/l9OnTMm3atBxDV1ZWlnh5eUnFihUJXXkoXbq0vPXWWyIisnnzZsnIyHByiwDHo8cLAADkiTL79igK4VjcRw8lHcELAACgkCgK4VgEfJRkfCoAAAAUEEUhzEHoQknGJwMAAEABUfURQEERvAAAAAqJohAA8ovgBQAAUARUfQSQHxTXAAAAKCKKQgDIC8ELAAAAAEzGUEMAAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgCggHr27CmGYcihQ4du6OcAABQfghcAwCkOHTokhmHY/ClVqpRUqVJFunfvLr/88ouzm2iquLg4MQxD4uLinN0UAEAx8HJ2AwAA7u2mm26SHj16iIhIWlqabNmyRb744gtZsmSJfP/999KiRQsnt9A5xowZI4MHD5ZKlSo5uykAAAcgeAEAnKpmzZoyYsQIm2VvvPGGjBo1Sl5//XVJSEhwSrucLSIiQiIiIpzdDACAgzDUEADgcvr37y8iIlu3bhURkYyMDJk4caI0aNBA/Pz8JCQkRNq0aSNff/213WOzD+Fbvny53HbbbeLv7y9ly5aVZ555Rk6dOmWzvWXIY8+ePXNsi2EY0rp16zzbfPnyZZkyZYrExsZKlSpVxMfHR8qVKycPPfSQ/Pzzzzbb9uzZU55++mkREXn66adthltm3+Z6c7xmzZolTZs2lcDAQAkMDJSmTZvmOGQxISFBDMOQESNGyLZt2+See+6RoKAgCQkJkQcffJD5YwBQjOjxAgC4LMMwRFWlS5cusnz5cqldu7a8+OKL8vfff8uCBQvk/vvvl4kTJ8rAgQPtHrt48WKJj4+XLl26SNu2bWXLli0ya9Ys2bBhg/z0008SFhbm0LaePXtWXnrpJbnzzjulQ4cOEhYWJgcOHJAVK1bIypUrZf369XLrrbeKiMgDDzwg58+fl+XLl0vnzp2lYcOG+X6eAQMGyJQpU6RSpUry7LPPWl/r008/LT///LNMnjzZ7jFbt26V8ePHS5s2baRPnz7y888/y7Jly2TXrl3y66+/iq+vr0OOAQAgFwoAgBMcPHhQRURjY2Pt1r355psqItqmTRudPXu2ioi2atVK09PTrdscPnxYw8PD1cvLS/fv329dPmvWLBURFRFdtWqVzX4HDx6sIqL9+vWza8dTTz2VYzstz53dU089pSKiBw8etC67dOmSHjt2zO7xv/76qwYGBmrbtm1tllvaOWvWrByfN6fnWLdunYqIRkdH6/nz563Lz549q7Vr11YR0fXr11uXr1271nosvvzyS5v9P/HEEyoi+sUXX+T4/AAAx2KoIQDAqfbt2ycjRoyQESNGyKuvviotW7aUt956S3x9fWXUqFEye/ZsEREZP368lCpVyvq4yMhIGThwoGRkZMj8+fPt9tu2bVuJjY21Wfb6669LaGiozJkzR7Kyshz6Onx8fHIshHHzzTdLmzZtZP369XLlypUiPYflWIwYMUJCQkKsy8PCwmT48OEiIjkOOWzZsqV07drVZtkzzzwjIv8M5wQAmIuhhgAAp9q/f7+MHDlSRES8vb2lfPny0r17dxk8eLDExMTIzz//LP7+/nLbbbfZPbZNmzYiIrJjxw67dXfeeafdssDAQGnYsKEkJCTIgQMHpGbNmg59LTt27JDx48fLxo0b5eTJk3ZBKzk5uUgFMyxzxXKac5bbsWjSpIndssqVK4uIyPnz5wvdHgBA/hG8AABOFRsbK6tWrbru+tTUVKlSpUqO6ywhJjU11W5d+fLlc3yMZXlKSkpBm5qrzZs3y1133SUiIu3atZNatWpJYGCgGIYhy5Ytk507d0p6enqRniM1NVU8PDykbNmyduvKly8vhmHkeCyCg4Ptlnl5Xb0EyMzMLFKbAAD5Q/ACALi04OBgOX36dI7rTp48ad3mWtdWL7x2uWWonofH1VH3GRkZdtsWJJyNGjVK0tPTZcOGDXLHHXfYrNuyZYvs3Lkz3/u6nuDgYMnKypI///xTypUrZ7Pu9OnToqo5HgsAgPMxxwsA4NIaNWokFy5ckJ9++sluneUeXzlVBdywYYPdsrS0NNmxY4cEBwdLjRo1REQkNDRURESOHz9ut/21ZeBzs3//fildurRd6Lpw4YL873//s9ve09NTRArW49SoUSMRkRzvbZbbsQAAOB/BCwDg0p566ikRERkyZIjNnKmjR4/KxIkTxcvLSx5//HG7x3333XcSHx9vs2zUqFFy/vx5efLJJ609XcHBwVKnTh3ZuHGj7Nu3z7rtX3/9JUOGDMl3O6tWrSrnzp2T3377zbosMzNTXnnlFfnzzz/tti9durT1deSX5ViMHDnSZkhhSkqKdZ6cZRsAgGthqCEAwKU98cQTsmTJElm+fLnUr19f7rvvPut9vM6ePSvvvfeetfcqu/vuu086deokXbp0kWrVqsmWLVtk7dq1ctNNN8lbb71ls+2gQYOkd+/e0rx5c3nkkUckKytLVq5cab3vVn70799fVq9eLXfccYc8+uij4uvrKwkJCXL8+HFp3bq1XS9V8+bNxc/PT95//305d+6cdd7WG2+8cd3naNmypfTv31+mTJki9erVk4cfflhUVRYvXizHjh2TAQMGSMuWLfPdZgBA8aHHCwDg0gzDkEWLFsmECRPE29tbpkyZIvPmzZOYmBhZvny5vPzyyzk+7uGHH5avvvpK9u3bJ++//7788ssv0rNnT9m4caPdzZN79eolU6dOlbCwMJk5c6asXLlSevbsKV988UW+23nffffJokWLpEaNGjJv3jz5/PPPJSoqSn766SepWrWq3falS5eWRYsWSe3atWXGjBkybNgwGTZsWJ7P88EHH8hnn30mFSpUkOnTp8uMGTMkIiJCPvvssxxvngwAcA2GqqqzGwEAgKPExcXJ008/LbNmzZKePXs6uzkAAIgIPV4AAAAAYDqCFwAAAACYjOAFAAAAACZjjhcAAAAAmIweLwAAAAAwGcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZP8HPryijNzfM1wAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set up plot parameters\n", "rcParams = plt.rcParams\n", "rcParams['font.size'] = 12\n", "rcParams['axes.labelsize'] = 14\n", "plt.rcParams['xtick.labelsize'] = 14\n", "plt.rcParams['ytick.labelsize'] = 14\n", "\n", "fig, ax = plt.subplots(figsize=(10, 6)) # Figure size\n", "\n", "# Hide spines (the plot space outline)\n", "ax.spines['right'].set_visible(False)\n", "ax.spines['top'].set_visible(False)\n", "\n", "# List all populations\n", "all_pops = [g for g in georegions.keys()]\n", "\n", "# Set up the number of boxplot positions to account for all populations\n", "pos = np.arange(1, len(all_pops) + 1)\n", "\n", "# Create boxplot without outliers\n", "bplt = ax.boxplot(\n", " [np.array(fws_qcplus_samples[fws_qcplus_samples['Population'] == g]['Fws']) for g in georegions.keys()],\n", " medianprops=dict(color='black', linewidth=2.5, solid_capstyle='butt'),\n", " patch_artist=True,\n", " positions=pos,\n", " showfliers=False # Hides outliers\n", ")\n", "\n", "# Color each box according to georegions\n", "for patch, color in zip(bplt['boxes'], [georegions[x]['c'] for x in all_pops]):\n", " patch.set_facecolor(color)\n", "\n", "# Set axis limits and labels\n", "ax.set_ylim([0, 1])\n", "ax.set_ylabel(r'F$_w$$_s$')\n", "ax.set_xlabel('Population')\n", "\n", "# Add x-axis labels\n", "ax.set_xticks(pos)\n", "ax.set_xticklabels(all_pops, rotation=45, ha='right')\n", "\n", "# Show plot\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": { "id": "AP6dfscuUTXS" }, "source": [ "**Figure legend:** F*WS* scores per subpopulation in Pf8. We can see that African populations tend to have lower F*WS* , indicating that these samples tend to be formed of a mix of parasite strains. This is expected in a region like Africa, where malaria transmission is high. The exception is that Northeast Africa shows intermediate levels of sample clonality, more similar to South Asian populations. We see very clonal samples in South America, Southeast Asia, and Oceania." ] }, { "cell_type": "markdown", "metadata": { "id": "CBVGlsc9hZbc" }, "source": [ "## Save the figure" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "I4rgyE15hTYb", "outputId": "714391fd-0f86-4d12-f747-d5fe9a1eacd2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mounted at /content/drive\n" ] } ], "source": [ "# You will need to authorise Google Colab access to Google Drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "gu8hE-cZhUuU" }, "outputs": [], "source": [ "# This will send the file to your Google Drive, where you can download it from if needed\n", "# Change the file path if you wish to send the file to a specific location\n", "# Change the file name if you wish to call it something else\n", "\n", "fig.savefig('/content/drive/My Drive/FWS_figure.pdf', bbox_inches='tight')\n", "fig.savefig('/content/drive/My Drive/FWS_Figure.png', dpi=480, bbox_inches='tight') # increase the dpi for higher resolution" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "bFj4z_mziME7" }, "outputs": [], "source": [] } ], "metadata": { "colab": { "provenance": [] }, "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.11.10" } }, "nbformat": 4, "nbformat_minor": 4 }