From 1c1e439d2275045fbc6e9205ce352604a6458428 Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 15:56:29 +0100 Subject: [PATCH 1/6] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2333524..fc6e452 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ 1. Outliers detection and batch detection & correction are shown in Methods_Description_-_Batch_correction.ipynb (Melanoma data) 1. Clusters generation from scaled signatures is shown in clustering_example.py. The process is the same for melanoma and pancan analysis 1. Finally, having a dataset with scaled signatures and known clusters we can classify another datasets using classification_example.py +1. A walkthrough of the clustering and classification (labeling to IE IE/F F or D) is illustarted in an illustrated python notebook. _.ipynb files could by opened at https://nbviewer.jupyter.org/ or downloaded as HTML files from upstream_html folder_ @@ -30,4 +31,4 @@ The Molecular Functional (MF) Portrait is a planetary schematic representation o Visual tool available at https://science.bostongene.com/tumor-portrait/
-© 2020 BostonGene Corporation. \ No newline at end of file +© 2020 BostonGene Corporation. From 3b8cd2c39169ae05d8d096687fd66efcecef3519 Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 16:24:35 +0100 Subject: [PATCH 2/6] Create Clustering Walkthrow.ipynb --- Clustering Walkthrow.ipynb | 1 + 1 file changed, 1 insertion(+) create mode 100644 Clustering Walkthrow.ipynb diff --git a/Clustering Walkthrow.ipynb b/Clustering Walkthrow.ipynb new file mode 100644 index 0000000..1a9afde --- /dev/null +++ b/Clustering Walkthrow.ipynb @@ -0,0 +1 @@ +python note book file From 526db07482c011d8262b1f2cc1cdaca2a7da7b4a Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 16:27:17 +0100 Subject: [PATCH 3/6] Delete Clustering Walkthrow.ipynb --- Clustering Walkthrow.ipynb | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Clustering Walkthrow.ipynb diff --git a/Clustering Walkthrow.ipynb b/Clustering Walkthrow.ipynb deleted file mode 100644 index 1a9afde..0000000 --- a/Clustering Walkthrow.ipynb +++ /dev/null @@ -1 +0,0 @@ -python note book file From 4103013022b5d25787c1a79f1ff50baf91f8fdf4 Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 16:28:57 +0100 Subject: [PATCH 4/6] Add files via upload --- walkthrough.ipynb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 walkthrough.ipynb diff --git a/walkthrough.ipynb b/walkthrough.ipynb new file mode 100644 index 0000000..d05f891 --- /dev/null +++ b/walkthrough.ipynb @@ -0,0 +1,30 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "walkthrough.ipynb", + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "metadata": { + "id": "WPaBxo9UHC4G" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file From 1f490b1f61d226043752877dfb075a2e0669d126 Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 19:52:15 +0000 Subject: [PATCH 5/6] Walkthrough example and code modif to run properly --- final_clusters.tsv | 48 ++++++++++++++++++++++++++++++++++++++++ portraits/clustering.py | 4 ++-- portraits/detect_type.py | 33 +++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 final_clusters.tsv create mode 100644 portraits/detect_type.py diff --git a/final_clusters.tsv b/final_clusters.tsv new file mode 100644 index 0000000..11f0f8f --- /dev/null +++ b/final_clusters.tsv @@ -0,0 +1,48 @@ + MFP +GSM478912 D +GSM478913 D +GSM478937 D +GSM478939 D +GSM478946 D +GSM478947 D +GSM478948 D +GSM478914 F +GSM478915 F +GSM478916 F +GSM478925 F +GSM478943 F +GSM478932 F +GSM478924 F +GSM478942 F +GSM478944 F +GSM478945 F +GSM478956 F +GSM478917 D +GSM478920 IE +GSM478949 D +GSM478963 D +GSM478918 IE +GSM478919 IE +GSM478926 IE +GSM478927 IE +GSM478952 IE +GSM478960 IE +GSM478922 IE/F +GSM478923 IE/F +GSM478961 IE/F +GSM478955 F +GSM478934 IE +GSM478935 IE +GSM478954 IE +GSM478958 IE +GSM478950 IE +GSM478928 +GSM478929 +GSM478930 +GSM478959 +GSM478933 IE +GSM478936 D +GSM478938 D +GSM478940 IE/F +GSM478941 F +GSM478951 IE diff --git a/portraits/clustering.py b/portraits/clustering.py index 079b1cb..8f5cec2 100644 --- a/portraits/clustering.py +++ b/portraits/clustering.py @@ -1,6 +1,6 @@ import warnings -import community # louvain +import community.community_louvain as community import matplotlib.pyplot as plt import networkx as nx import numpy as np @@ -122,7 +122,7 @@ def clustering_profile_metrics_plot(cluster_metrics, num_clusters_ylim_max=7): clusters_perc = pd.DataFrame([x.value_counts() for x in cluster_metrics.perc], index=cluster_metrics.index).iloc[:, :10] - clusters_perc.plot(kind='bar', stached=True, ax=next(af), offset=.5) + clusters_perc.plot(kind='bar', stacked=True, ax=next(af)) #offset=.5 was specified in the original code ax.set_xticks(ax.get_xticks() - .5) ax.set_xticklabels(ax.get_xticklabels(), rotation=90) diff --git a/portraits/detect_type.py b/portraits/detect_type.py new file mode 100644 index 0000000..82825ed --- /dev/null +++ b/portraits/detect_type.py @@ -0,0 +1,33 @@ +import pandas as pd +from portraits.clustering import clustering_profile_metrics, clustering_profile_metrics_plot +from portraits.utils import read_gene_sets, ssgsea_formula, median_scale + + +def detect_type(data, threshold, scores): + ser = data.loc[threshold].perc # here threshold and ser were added to the original code + cmeans = pd.DataFrame({cg: scores.loc[samps.index].mean() for cg, samps in ser.groupby(ser)}) + mapper = {} + deltas = (cmeans.loc[['Angiogenesis', 'Endothelium', 'CAF', 'Matrix', 'Matrix_remodeling']].mean() - + cmeans.loc[['MHCII', 'Antitumor_cytokines', 'Coactivation_molecules', + 'B_cells', 'NK_cells', 'Checkpoint_inhibition', + 'Effector_cells', 'T_cells', 'Th1_signature', + 'T_cell_traffic', 'MHCI']].mean()).sort_values() + + mapper[deltas.index[-1]] = 'F' # That's fibrotic + mapper[deltas.index[0]] = 'IE' # Immune enriched, non-fibrotic + cmeans.pop(deltas.index[-1]) + cmeans.pop(deltas.index[0]) + + deltas = (cmeans.loc[['Angiogenesis', 'Endothelium', 'CAF', 'Matrix', 'Matrix_remodeling', + 'Protumor_cytokines', 'Neutrophil_signature', 'Granulocyte_traffic', + 'Macrophages', 'Macrophage_DC_traffic', 'MDSC_traffic', 'MDSC', + 'Th2_signature', 'T_reg_traffic', 'Treg', 'M1_signatures', 'MHCII', + 'Antitumor_cytokines', 'Coactivation_molecules', 'B_cells', 'NK_cells', + 'Checkpoint_inhibition', 'Effector_cells', 'T_cells', 'Th1_signature', + 'T_cell_traffic', 'MHCI', 'EMT_signature']].mean() - + cmeans.loc['Proliferation_rate']).sort_values() + + mapper[deltas.index[-1]] = 'IE/F' # Immune enriched & fibrotic + mapper[deltas.index[0]] = 'D' # Desert + return ser.map(mapper).rename('MFP') + From 3e9959c419549cc50ab1b832525767e2602b9d79 Mon Sep 17 00:00:00 2001 From: Z_Wael Date: Sun, 21 Nov 2021 21:19:38 +0100 Subject: [PATCH 6/6] A walkthrough runing well --- walkthrough.ipynb | 1066 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1065 insertions(+), 1 deletion(-) diff --git a/walkthrough.ipynb b/walkthrough.ipynb index d05f891..78b2e97 100644 --- a/walkthrough.ipynb +++ b/walkthrough.ipynb @@ -4,7 +4,9 @@ "metadata": { "colab": { "name": "walkthrough.ipynb", - "provenance": [] + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -15,11 +17,1073 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kE12_q3ZKZ9N", + "outputId": "777eb119-508f-4f8f-a712-e0433c41e545" + }, + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AuPIKrDqKCNF", + "outputId": "8d4013fe-b6f7-42ab-a587-593474b96746" + }, + "source": [ + "%cd /content/drive/MyDrive/MFP" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/content/drive/MyDrive/MFP\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_fB04PzHJEpY", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "bcb8cb0e-9616-4a8c-b84b-b015c59d74c1" + }, + "source": [ + "!ls" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "classification_example.py\t\t portraits\n", + "clustering_example.py\t\t\t README.md\n", + "Cohorts\t\t\t\t\t requirements.txt\n", + "From_cell_files.ipynb\t\t\t signatures\n", + "img\t\t\t\t\t upstream_html\n", + "license.md\t\t\t\t walkthrough.ipynb\n", + "Methods_Description_-_Batch_correction.ipynb\n" + ] + } + ] + }, { "cell_type": "code", "metadata": { "id": "WPaBxo9UHC4G" }, + "source": [ + "import pandas as pd\n", + "\n", + "from portraits.clustering import clustering_profile_metrics, clustering_profile_metrics_plot\n", + "from portraits.utils import read_gene_sets, ssgsea_formula, median_scale" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vzWSwF9WMu6x" + }, + "source": [ + "# Read signatures" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "recvnCI8K2ZH" + }, + "source": [ + "gmt = read_gene_sets('signatures/gene_signatures.gmt') " + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NrJSyfapL6VD", + "outputId": "c2401638-45f4-4b0d-e3bf-91f67ebb4af0" + }, + "source": [ + "gmt['Angiogenesis']" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o0V31B14Mm7I" + }, + "source": [ + "# Read expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h-RV4CzTM3FB" + }, + "source": [ + "Here as an illustration we will use the Augustine cohort tsv file " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "t1BSHBmOMfc4" + }, + "source": [ + "exp = pd.read_csv('Cohorts/Augustine/expressions.tsv.gz', sep='\\t', index_col=0)" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 181 + }, + "id": "ejzK6pz7NWMu", + "outputId": "55d924d9-2456-403b-fe32-c0ddd0a286f3" + }, + "source": [ + "exp.head(3)" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + "
GSM478912GSM478913GSM478914GSM478915GSM478916GSM478917GSM478918GSM478919GSM478920GSM478921GSM478922GSM478923GSM478924GSM478925GSM478926GSM478927GSM478928GSM478929GSM478930GSM478931GSM478932GSM478933GSM478934GSM478935GSM478936GSM478937GSM478938GSM478939GSM478940GSM478941GSM478942GSM478943GSM478944GSM478945GSM478946GSM478947GSM478948GSM478949GSM478950GSM478951GSM478952GSM478953GSM478954GSM478955GSM478956GSM478957GSM478958GSM478959GSM478960GSM478961GSM478962GSM478963
A1BG44.76385640.57002247.41220638.60571238.60571240.57002262.70334865.15480242.46289263.50689250.63108158.72610790.42974955.58159940.48814940.48814940.57002240.57002246.12159040.57002273.69291329.86688812.43019624.35200740.38953440.57002240.57002236.90102340.57002240.48814938.60571238.83990961.52025156.48153338.60571230.61038448.34330047.98469840.57002239.49396740.63087360.48160140.38953471.05770538.60571238.60571238.60571251.89308340.57002241.63004543.34798440.580599
A1BG-AS111.48833511.48833511.48833511.48833511.02762911.4883359.59239911.48833511.48833512.8154796.6426236.64262320.76378311.48833526.54751920.0330158.67440311.46243111.48833511.4883358.4560576.2785818.74212111.48833511.48833510.73987111.48833511.97325411.48833511.53941821.69442018.67555615.15235211.47202513.11920111.48833511.48833511.48833514.63878711.48833513.45855113.5003837.66744228.26616014.65970011.92339311.48833511.74056617.10692312.65453816.93823411.488335
A1CF3.7767003.7767003.7767003.7767003.7767004.0474154.7920493.7767003.7767003.7767003.7767006.0572153.7767003.7767003.7767004.3118733.7767003.7767003.7767003.7767003.7767003.7767003.7767003.7767004.1517283.7767003.7767003.7767003.7767003.7767003.7767003.7767003.7767004.1381513.7767003.7767003.7949193.7767003.7767003.7832543.7767003.7767003.7767003.7767003.7767009.7697233.7767003.7767003.7767003.7767003.7767003.776700
\n", + "
" + ], + "text/plain": [ + " GSM478912 GSM478913 GSM478914 ... GSM478961 GSM478962 GSM478963\n", + "A1BG 44.763856 40.570022 47.412206 ... 41.630045 43.347984 40.580599\n", + "A1BG-AS1 11.488335 11.488335 11.488335 ... 12.654538 16.938234 11.488335\n", + "A1CF 3.776700 3.776700 3.776700 ... 3.776700 3.776700 3.776700\n", + "\n", + "[3 rows x 52 columns]" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xFyHKILqN5Pq" + }, + "source": [ + "# Calc signature scores and scaling it" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NkYpAGpbNjOt" + }, + "source": [ + "signature_scores = ssgsea_formula(exp.T, gmt) # her we transpose the expression table \n", + "# Scale signatures\n", + "signature_scores_scaled = median_scale(signature_scores)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 163 + }, + "id": "8lUbuKgTOF9q", + "outputId": "209fb2ce-4f1f-49fb-c33d-f877dddb7990" + }, + "source": [ + "signature_scores_scaled.head(3)" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + "
MHCIMHCIICoactivation_moleculesEffector_cellsT_cell_trafficNK_cellsT_cellsB_cellsM1_signaturesTh1_signatureAntitumor_cytokinesCheckpoint_inhibitionTregT_reg_trafficNeutrophil_signatureGranulocyte_trafficMDSCMDSC_trafficMacrophagesMacrophage_DC_trafficTh2_signatureProtumor_cytokinesCAFMatrixMatrix_remodelingAngiogenesisEndotheliumProliferation_rateEMT_signature
GSM478912-2.602821-7.350003-0.400397-0.457742-1.714376-1.041894-0.2130450.3717310.4665770.519831-2.252631-0.6585720.2031392.047850-0.7529900.140557-2.109979-2.541594-2.547508-2.4109800.291442-1.403598-5.230648-4.031180-1.369586-1.809785-2.9180183.649245-1.403900
GSM478913-2.645689-6.595055-0.556757-0.424833-1.694343-0.887625-0.2959660.4292641.2139580.356238-2.511562-0.1033071.1123091.030445-2.325240-0.215443-1.887350-2.316983-2.762238-2.6935581.406431-0.980988-5.198766-3.925075-1.196709-1.905589-2.6257373.365133-1.076704
GSM478914-1.316890-0.510827-0.424608-0.497104-0.9230380.528284-0.2815490.0536921.415917-1.409104-1.2214940.3181191.167260-0.732170-0.7783633.7045501.5989951.792117-0.2268960.748523-1.2656111.8923600.198815-0.1374860.0189850.902991-0.709575-1.1511772.785649
\n", + "
" + ], + "text/plain": [ + " MHCI MHCII ... Proliferation_rate EMT_signature\n", + "GSM478912 -2.602821 -7.350003 ... 3.649245 -1.403900\n", + "GSM478913 -2.645689 -6.595055 ... 3.365133 -1.076704\n", + "GSM478914 -1.316890 -0.510827 ... -1.151177 2.785649\n", + "\n", + "[3 rows x 29 columns]" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g6SFv1BDVFzY" + }, + "source": [ + "Check the clustering within a range of 30 to 65% similarity.\n", + ">65% - usually graph is not connected; \n", + "<30% - unreasonable correlation." + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WHQ2nxTANt13", + "outputId": "a6da7bb2-fff2-4fd3-872d-2249e69ff70f" + }, + "source": [ + "clustering_metrics = clustering_profile_metrics(signature_scores_scaled, threshold_mm=(.3, .65), step=.01)" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 35/35 [00:03<00:00, 11.34it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 143 + }, + "id": "2JhZfdNAhylP", + "outputId": "036244d4-590b-44bf-dc84-0d0a49676745" + }, + "source": [ + "clustering_metrics.head(3) # here some modification in the clustering.py were of necessity to run properly" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \n", + " \n", + "
chdbscNperc
0.309.640161.498640.04569354GSM478912 4\n", + "GSM478913 4\n", + "GSM478931 4\n", + "G...
0.319.666571.569430.07152084GSM478912 1\n", + "GSM478913 1\n", + "GSM478931 1\n", + "G...
0.329.393981.597020.04177434GSM478912 1\n", + "GSM478913 1\n", + "GSM478931 1\n", + "G...
\n", + "
" + ], + "text/plain": [ + " ch db ... N perc\n", + "0.30 9.64016 1.49864 ... 4 GSM478912 4\n", + "GSM478913 4\n", + "GSM478931 4\n", + "G...\n", + "0.31 9.66657 1.56943 ... 4 GSM478912 1\n", + "GSM478913 1\n", + "GSM478931 1\n", + "G...\n", + "0.32 9.39398 1.59702 ... 4 GSM478912 1\n", + "GSM478913 1\n", + "GSM478931 1\n", + "G...\n", + "\n", + "[3 rows x 5 columns]" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 143 + }, + "id": "gIvbu1of0R52", + "outputId": "2d499964-7d56-45be-9d28-00854c59bd9a" + }, + "source": [ + "clustering_metrics.tail(3)" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \n", + " \n", + "
chdbscNperc
0.626.471371.331110.10966210GSM478912 2\n", + "GSM478913 2\n", + "GSM478946 ...
0.636.553561.312350.11789310GSM478912 10\n", + "GSM478913 10\n", + "GSM478946 1...
0.649.97311.097090.24586712GSM478912 1\n", + "GSM478913 1\n", + "GSM478914 ...
\n", + "
" + ], + "text/plain": [ + " ch db ... N perc\n", + "0.62 6.47137 1.33111 ... 10 GSM478912 2\n", + "GSM478913 2\n", + "GSM478946 ...\n", + "0.63 6.55356 1.31235 ... 10 GSM478912 10\n", + "GSM478913 10\n", + "GSM478946 1...\n", + "0.64 9.9731 1.09709 ... 12 GSM478912 1\n", + "GSM478913 1\n", + "GSM478914 ...\n", + "\n", + "[3 rows x 5 columns]" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6vBT6cuwh5y_" + }, + "source": [ + "this table summarise the clustering metrics :\n", + "\n", + "- ch: calinski_harabasz_score\n", + "- db: davies_bouldin_score\n", + "- sc: silhouette_score\n", + "\n", + "ch db and sc as described in sklearn.metrics\n", + "\n", + "- N: number of clusters\n", + "- perc: samples in each cluster\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aKhzUEL9kTBK" + }, + "source": [ + "# Visualize the partitions" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 708 + }, + "id": "M9UTVfL-j8ET", + "outputId": "db0fbbbd-9314-41fe-85a6-cf8c6de1bafe" + }, + "source": [ + "clustering_profile_metrics_plot(clustering_metrics) # he a typo correction in the was of nessity" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAKgCAYAAABURj6tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3hUVfrA8e+ZOy2VBBKQEqQFECkBI0XFhlLU1V17XTtrwfKzr7u21XVxRXfXLjbUtStr79joEpQuiBCEAEIK6Zl25/z+mCRASCDTJ+H9PE8ekrn3nvMGSN6595zzHqW1RgghhBCJyRLvAIQQQgjRMknUQgghRAKTRC2EEEIkMEnUQgghRAKTRC2EEEIkMGu8A2gqKytL9+rVK95hCCGEEDGzePHiEq11dnPHEi5R9+rVi4KCgniHIYQQQsSMUurXlo7Jo28hhBAigUmiFkIIIRKYJGohhBAigSXcGLUQQoh983q9FBUV4XK54h2KCILT6aRHjx7YbLZWXyOJWggRM7Wfv4rnh2/JuO3peIfS5hUVFZGWlkavXr1QSsU7HNEKWmtKS0spKiqid+/erb5OHn0LIWLG9c1M6j59Ce31xDuUNs/lctGpUydJ0m2IUopOnToF/RREErUQImbMLYXg92NuWR/vUNoFSdJtTyj/ZpKohRAxobXG3FoIgG/T2jhHI0TbIYlaCBET/vJidF0NIIm6vTAMg7y8PA4++GCGDRvGQw89hN/vD6mtgoICrr322rBj6tWrF0OGDCEvL48hQ4bw3nvvhdzWRRddxNtvv73H69988w0nnXQSAO+//z5Tp04NuY/WkMlkQoiYMDfvfNztK5JE3R4kJSWxZMkSALZv3865555LZWUl99xzT9Bt5efnk5+fH5G4vv76a7KyslizZg3jx4/nlFNOiUi7zTn55JM5+eSTo9Y+yB21ECJGzC2Bx96qQyfMonVxjkZEWufOnZk+fTqPPfYYWms2bNjA2LFjGTFiBCNGjGDevHkAnH322Xz00UeN1zXcte56l1pTU8Mll1zCyJEjGT58eONd8cqVKxk5ciR5eXkMHTqUtWv3/oavsrKSzMzMxq8ffvhhBg8ezODBg/n3v/8NwIYNGxg8eHDjOdOmTePuu+/eo61PP/2UgQMHMmLECGbOnNn4+owZM5gyZUrj93Lttddy2GGH0adPn2bvxkMhd9RCiJjw1Y9POw45Fs+yuXGOpn2peORGfL8si2ib1n5D6XDtQ0Fd06dPH0zTZPv27XTu3JkvvvgCp9PJ2rVrOeeccygoKOCss87izTff5MQTT8Tj8TBr1iyefPJJFi5c2NjO3//+d4499lief/55ysvLGTlyJMcddxxPPfUU1113Heeddx4ejwfTNJuN45hjjkFrzfr163nzzTcBWLx4MS+88AILFy5Ea82oUaM46qijdkvkLXG5XFx++eV89dVX9OvXj7POOqvFc7du3cqcOXNYvXo1J598MqeffnpQf4fNCfmOWimVo5T6Wim1Sim1Uil1XTPnnKeUWqaUWq6UmqeUGhZeuEKItsrcUoglqxu2vkPwl2zBX1sd75BEFHm9Xi6//HKGDBnCGWecwapVqwCYNGkSX3/9NW63m08++YQjjzySpKSk3a79/PPPmTp1Knl5eRx99NG4XC42btzImDFjuP/++3nggQf49ddf97iuwddff82KFStYvnw5U6ZMobq6mjlz5vCHP/yBlJQUUlNTOfXUU5k9e3arvpfVq1fTu3dvcnNzUUpx/vnnt3ju73//eywWC4MGDWLbtm2t/Nvau3DuqH3AjVrrH5RSacBipdQXWutVu5xTCByltd6hlJoETAdGhdGnEKKNMrcUYnTrjZGTG/i66Bcs/fPiHFX7EOydb7SsX78ewzDo3Lkz99xzD126dGHp0qX4/X6cTicQqMx19NFH89lnn/HGG29w9tln79GO1pp33nmHAQMG7Pb6QQcdxKhRo/joo4844YQTePrppzn22GNbjKdv37506dKl8U1Cc6xW624T4MKt9OZwOBo/11qH1VaDkO+otdZbtdY/1H9eBfwEdG9yzjyt9Y76LxcAPULtT7QPZnkxZX85E++Gn+Idiogx35b1WLv1wVqfqGXmd/tSXFzMFVdcwZQpU1BKUVFRQdeuXbFYLLz88su7PaY+66yzeOGFF5g9ezYTJ07co60JEybw6KOPNia6H3/8EQi8EejTpw/XXnstp5xyCsuW7f1x//bt2yksLOTAAw9k7NixvPvuu9TW1lJTU8P//vc/xo4dS5cuXdi+fTulpaW43W4+/PDDPdoZOHAgGzZsYN26wNyK1157LeS/p1BEZIxaKdULGA4s3MtplwKftHD9ZGAyQM+ePSMRkkhAWmsqHrgC99wPsfUfjq3XQfEOScSIdrvwF2/G6NYba/e+APiKfolzVCJcdXV15OXl4fV6sVqtXHDBBdxwww0AXHXVVZx22mm89NJLTJw4kZSUlMbrxo8fzwUXXMApp5yC3W7fo9077riD66+/nqFDh+L3++nduzcffvghb775Ji+//DI2m40DDjiA22+/vdm4jjnmGAzDwOv1MnXqVLp06UKXLl246KKLGDlyJACXXXYZw4cPB+DOO+9k5MiRdO/enYEDB+7RntPpZPr06Zx44okkJyczduxYqqqqwv77ay0V7q25UioV+Bb4u9Z6ZgvnHAM8ARyhtS7dW3v5+fm6oKAgrJhEYqp9/1kqpl0NFgvOI04m87434h2SiBHfr6spvmAYHf76Asnjz2Xb6f1wDD+SjL88H+/Q2qyffvqJgw6SN7ttUXP/dkqpxVrrZtenhXVHrZSyAe8Ar+wlSQ8FngUm7StJi/bLt3ENFY/ehD1/HJbUDnjX/BDvkEQM+eqXZlm7BjYisPboK4++hWilcGZ9K+A54Cet9cMtnNMTmAlcoLX+OdS+RNumvR7K770I5Uwm4/ZnsfUfjrl1A/6q8niHJmKkoba30b0PANacXHwbf47YZBsh2rNwCp4cDlwAHKuUWlL/cYJS6gql1BX159wJdAKeqD8uz7T3Q1XP/w3vmh/IuPlJjKxuWHMDq/S8vyyNc2QiVswthShnMpbMzgAYObno6nJ0hTxkC4e80Wl7Qvk3C/nRt9Z6DrDXbUC01pcBl4Xah2j73Eu+o+bVaSSddAnOIwNl/Gy5gSU53rVLcAw/Kp7hiRjxbSnE6Nq7ceegxpnfRb9gz8iKZ2htltPppLS0VLa6bEMa9qNuWKrWWlKZTESNv2oH5fddgtG9L+lTHmx83ejYBUtWN3xr5Y56f9GwhrqBtcfOJVr2waPjFVab1qNHD4qKiiguLo53KCIITqeTHj2CW6ksiVpEhdaaioeuwV+6lU5PfIslOXW347bcYXh//jFO0YlYatje0nHouMbXjK69wDBkc44w2Gw2evfuve8TRZsnm3KIqKj7/FVcX71F6sV3YD9ozxUHttw8fBvXoN11cYhOxJK/bBvaVYvRdWdSUVYbRtfemDLzW4h9kkQtIs63pZDKf12HbejhpJ53c7PnWHPzwDTxrlsR4+hErDXsmrXro2+on/ktiVqIfZJELSJK+3yU33cxKEXGX19AGUaz59kaZn6vXRLL8EQcNOyaZW0mUZub16F3qbMshNiTJGoRUdWv/BPvivl0uOFRrAcc2OJ5RtdeqNQMfJKo2z1zSyEohXFAr91eN3Jy0a5a/CVb4hOYEG2EJGoRMZ6VC6mecR/O484m6fg9d8TZlVIqMKFMZn63e+bm9ViyuqMcuy9J2XXmtxCiZZKoRUT4a6sov+8ijOwedPi//7TqGltuHt51y9E+X5SjE/Hk21q4x2NvAGuPfoHjMvNbiL2SRC0iovKRGzG3biDjL89jScto1TXW/nngceHbuCa6wYm4arqGuoEluzs4kmTmtxD7IIlahK3um/9R9/GLpJx3M/ZhR7T6ul0rlIn2Sbvr8JdsaTZRK4sFa49+st2lEPsgiVqExdxeRMWDV2IbeAhpF98R1LXWnP5gd8qEsnbMt3UDANZufZo9Lku0hNg3SdQiLBXTrgavm4w7ZqCstqCuVVYrtr5DZEJZO9a4a1Yzd9QQmPltbilE+7yxDEuINiWcbS5zlFJfK6VWKaVWKqWua+YcpZR6RCn1i1JqmVJqRHjhikTir67A/f3nJJ9xTeDuOAQNM78jvQuQWbIF77rlEW1TBK+lYicNrD36genD3LohdkEJ0caEc0ftA27UWg8CRgNXK6UGNTlnEpBb/zEZeDKM/kSC8ayYD34/jhFHh9yGNTcPXV0e8V/UFf+6ntLrJ8iM8jjzbSlEJaVgychu9njjEi2Z+S1Ei0JO1FrrrVrrH+o/rwJ+Aro3Oe0U4CUdsADIUEp1DTlakVA8y+aCYcU2aFTIbeycUBa5x9/a58Wz+Ct0RSne1bIFejyZTba3bKphu0tzk0woE6IlERmjVkr1AoYDC5sc6g5s2uXrIvZM5qKN8iybi63/cCxJKSG3Yes7OLCLUgQnlHl/WoSurQLAvfCziLUrgmduWY/RvfmJZACqQydUWqbcUQuxF2EnaqVUKvAOcL3WujLENiYrpQqUUgWyt2rboN0uvD8tCmo5VnOUIwlrz4ER3fLSvehLsFiw9h6Ee+HnEWtXBEdrjW9LIdauLW/FqJSSmd9C7ENYiVopZSOQpF/RWs9s5pTNQM4uX/eof203WuvpWut8rXV+dnbzY1kisXh+WgReD/ahh4fdlq1/XkQffbsXzcI2MB/nsWfgXbMYs1ze/MWDv/Q38LhanEjWwNqjHz559C1Ei8KZ9a2A54CftNYPt3Da+8Af62d/jwYqtNZbQ+1TJA7PsrkA2IccFnZb1txh+Eu3YpZtC7stf1U53tWLcOSPwzFyPGiN5/svw25XBM/cuvcZ3w2MnFz82zehXbWxCEuINiecO+rDgQuAY5VSS+o/TlBKXaGUuqL+nI+B9cAvwDPAVeGFKxKFd9kcrL0HYenQKey2IlmhzPPjt2CaOA49DtuAEVg6ZOGSceq48G0OrKG27mWMGnaZ+V1/vhBid9ZQL9RazwGan8q58xwNXB1qHyIxaZ8Pz4oFJI0/JyLt2foF9qb2rV0KoyaE1Za74EtUUiq2g0ehLBbsI4/H8/0XaL8fZZH6PrHUuL1ll5a3O4WdM799m9YGJhcKIXYjv7lE0HzrlqFrq7APDW8iWQNLWgZG114RuaN2L/oS+/AjG6ukOUdNwF9RgnfND2G3LYJjbi3Ekt0DZXfs9TyjfhctU2Z+C9EsSdQiaJ6lcwAiMpGsgS03D+/P4SVq35ZCzM3rcRx6XONr9pHHgVK4v5fZ37Hm29L89pZNWZJTsXTqKjO/hWiBJGoRNM+yuRgHHIjRuUfE2rTm5mFuXoe/JqQVfoG4CmYB4Mgf1/iakZGNbcAhuBfIOHWsmZvX73MiWQNZoiVEyyRRi6BorfEsm4t92NiItmvrH36FMveiL7F0zsHoOWC31x2jxuP96Xv8lWVhxShaT7tq8Zf9htHCrllNGTn9MGW7SyGaJYlaBMXcuAZ/eTH2YZF77A07Z36HWqFMmybuxV/jyB+3R7lKx6gJ4PfjXjQr7DhF6+zc3rKVd9Q9cvGXF+Ov2hG9oIRooyRRi6A0rp+O4Pg0gJHVFUvHLiHfUXvXLEZXl+M4dNwex2wHHYpKy5Rx6hja1/aWTe2c+S131UI0JYlaBMWzbC6WzM4YIW5ruTeBLS9Du6N2L5oFSuE45Ng9jinDwHHocbgXfo72+8MNU7TCvra3bKoxUcvMbyH2IIlaBMWzdA72oYe3uBtSOKy5efg2/IT2uIOPq2AW1tw8LBlZzR53jBqPv+w3fLJHdUz4tqxHJadh6dD8v0dTRrc+YLFgyoQyIfYgiVq0mrltE+Zvv0b8sXcDW24emD58hSuDus5fW4VnxfzdlmU15Tj0eEB204oVc0shRreWt7dsStnsGAcciE8mlAmxB0nUotV2jk9HptBJU7bcQIWyYB9/e5Z8B6Zvt2VZTRlZXbHmDpPdtGKkYR/qYMgSLSGaJ4latJpn2RxUchrWfkOj0r7RrQ8qOS3oLS/di74ER9I+NwhxjJqAZ8U8/NUV4YQp9kH7/fi2bmj1jO8GRo9czE1rCVQeFkI0kEQtWs2zbC72IWNQhhGV9pXFgq3fsKBnfrsXzcKRN3afpSodI8dD/TIuET3+0q2t2t6yKWtOLrquOrA9phCikSRq0Sr+ilJ8haui9ti7gbV/Hr51y9Gm2arzzW2bMDeuwb6Xx94N7INHo1LSZZw6yhpmfO9r16ymrPU1v2XmtxC7CytRK6WeV0ptV0qtaOF4B6XUB0qppUqplUqpi8PpT8RPtNZPN2XLzUO7avFt+rlV57sbyobWTxbbG2W14Tjk2MAyLXm8GjW+hqVZQY5RG/VLtKRCmRC7C/eOegYwcS/HrwZWaa2HAUcDDyml7GH2KeLAs2wu2OzYBuZHtZ+GUqK+Vj7+dhfMwtKpK9beg1p1vmP0BPzFRfgKV4Uco9g7c2v99pYH7H17y6aMzjlgd8iEMiGaCCtRa62/A/ZWQFkDaSqwRiO1/lxfOH2K+PAsm4v9oJEohzOq/VgPHAh2R6tmfmu/H0/BVzjyj231MiDHyPGALNOKJnNLIUbnHJQtuPfkyjCwdu8bl0RtFm+m/J9XUvvhC5hl22LevxB7E+0x6seAg4AtwHLgOq31HqWhlFKTlVIFSqmC4uLiKIckguWvrcb78w/YIlzfuznKasPW++BWJWrf2qX4K0qw72X9dFNG5x5Yex8siTqKfJvXt3ozjqYaZn7HWs2bj1D34fNU/PMKtv/hQEquGEvVS1PxrlshwyQi7qKdqCcAS4BuQB7wmFIqvelJWuvpWut8rXV+dnZ2lEMSwfKuWgimGfXx6QbW3Dy8a5fu8xdk4/h0M2VD98YxajyeZXPx11aHHKNombm1MOgZ3w2sPfrh27K+1ZMJI0F7PdR99grOI39P1vOLSL3kLtCa6mfvouTiQyg+awAV//k/3Iu+RHs9MYtLiAbRTtQXAzN1wC9AITAwyn2KCPMsmwsWC/bBY2LSny13GLqyDHPbxr2e5170Bda+QzA6HRBU+45RE8DnxfODLNOKNH9dDf6ybUGvoW5gzckFr2ef//aR5J7/Cf7yYpJOvAhbv6GkXfhnsp6eQ+eZG+hwy5NY+wym9sMXKLvxRLb9rhs77jqX2s9ewV9RGrMYxf7NGuX2NwLjgNlKqS7AAGB9lPsUEeZZOhdrv2FYUvZ4GBIVu255aW1hQpJ21eJZPo+UU68Kun37kMNQSSm4v/8c5xG/CytWsTtz6wag9ZtxNGVtnPm9NuRkH6zaj17AktVtj5UDRlZXkk+6hOSTLkG7anH/8DWuuR/invcJrq/focJiwZrTH4zgfo0mTTiP1HNuiOS3INq5sBK1Uuo1ArO5s5RSRcBdgA1Aa/0UcC8wQym1HFDArVrrkrAiFjGlvR48KxeQfPJlMevT2ncIWCx41y7FOfaUZs9xL50NXk+z21rui7I7sI84BveCz9BaR2WDkf2VuXkdQOhj1I3bXa5tnPgXTWbJFtwLPyPlvJtR1pZ/HSpnMs7DTsR52Ilovx/vzz/invsh3vVB1qUv2ULVk3/GmpMrbxJFq4WVqLXW5+zj+BYg+j9tImq8a34AjyvqhU52ZUlKwZrTH+/PLU8o8yyaBXZHyHE5Ro3HPfdDzE0/Y+05INRQRRO+rfXFTkK8G7ZkdkalpMds5nfdp/8Fv5/kSX9s9TXKYsE+8BDsAw8Juj/tdlFy1VGU/+Nysp5b2OITIyF2JZXJxF55ls0BwB6DGd+7aphQ1hJ3wazAI2xnckjtNy7TWiCzvyPJ3FKISklHpXcM6XqlVMw259BaU/vRDOx5RzZWRYs25XCSec8rYPoov+cCtM8bk35F2yaJWuyVZ9lcjJ79MTI7x7RfW+4w/MVF+Mv3HCkxS7biW78CR37rl2U1Ze3WG6Nnf9zfy25akRTs9pbNMXr0i0l1Ms/SOZib15F0woVR72tX1h796HDzk3hXLqRq+h0x7Vu0TZKoRYu0349n2byYPvZu0FChrLn11O7FXwHsdf/p1nCOmoB7yXdoV21Y7YidfFvWYw2ydGhT1h65mL/9iva4IxRV8+o+fhGVnEbS0adGtZ/mJI07g+TfT6bm9X/hmvdRzPsXbYskatEiX+FKdHV5zNZP76ph5ndzidqz6EssGdlhb7fpGDUePG7cS74Lqx0RoP1+zK0bMILcjKMpa04uaI1vS/QWiPhrKnF98w5J484MefgkXOlXP4g1dxjl918W0+Voou2RRC1a5FnaMD4d+ztqS3pHjC4995hQprXGXfAV9vxjUZbw/vvahx0JjiSpUhYh/pIt4PWEvDSrQePmHK3cmCUUrq/eQrtqSTrxoqj1sS/K4STz7lfA62HH3TJeLVomiVq0yLNsLpbsHkFvrhAp1txhe9xR+9avxF/2G45WbGu5L8rhxJF3JO6FMk4dCQ27ZoX/6Lt+u8soTiir/WgG1t6DsB10aNT6aA1rTi4dbnkS78oFVD1zZ1xjEYlLErVoltYaz9I52IcdHrd1xrb+wzGLftmt1Kd70RcAEUnUENhNyyz6BV/9+l8ROrN+aVa4d9SW1A5YMjvjK4rOv4m3cBXeVd+TdMKFCbGGPmncmSSffBk1rz2Ma/7H8Q5HJCBJ1BHQHov2m1vW4y/dGpfx6Qa23GGBscp1yxpf8xTMwnrgQIzOPSLSx87dtOSuOlzm5vVgsUTkCYyRE73NOeo+fhEMK0kTzotK+6FIv2Ya1n5DKf/7pZjbNsU7nFbRpimP62NEEnWItNa4v/+CksmHU3LRiKArFCU6z7K5ANiHjY1bDI0TyurHqbXbhXvJbOwRupuGwKNHo3sfGaeOAF/D9pZWW9htWXtEZy114wYch5+EkZE4GwApR1JgfbXXw442sL7avehLtp/el4qpk+Mdyn5BEnUIPKu+p+z6iZTddBL+HdvxV5RR8qfDqf3k5XiHFjGepXNR6R0D+0PHiSW7O5YOWY2FTzwr5oHHhWNkeMuymnKMHI/nx2/RbldE293fhLNrVlPWnFz8Zb/hr6mMSHsNdt2AI9FYc/rT4eYn8K6YT9Wzd8c7nGZpj5vKx2+l7MYT8Zdvx/Xdu/JzEwOSqIPgLVxF2e2nU3rFWHyFK0m/9iGyX1lB1nMLsQ8aRcU/LqN86p/axbpcz9LZgcpfYc6sDodSarcJZe5Fs8BqC8zWjiDH6AmBTT7qq7CJ0ASKnYS3NKvBzs05Ilv4pKUNOBJF0nFnkfy7S6l5dRqu+Z/EO5zd+H5dTcmVY6l5498k//5PZNz1SuDnZunseIfW7kmibgXf1g2U//1SSi4agefHb0m99C6yX/+JlNOnoOwOjE4H0PHhj0n945+p+3gGJVeMxbdxTbzDDplZ+hvm5nVxHZ9uYMvNC6zn9npwL/oS+8GjsSSnRrQPe95RYLPLOHUY/LVV+Hdsj9iOV0bDzO8IJuqGDTiSJl2w1w044i392oew9h1C+f2XYm4vinc4aK2pee8Zii8bjbm9iMz736bDDY/gHD0B7M6Ee0PRHoWVqJVSzyultiulVuzlnKOVUkuUUiuVUt+G01+smWXbqPj39RSfN5i6r98i5azr6fz6atIuvB1Lctpu5yrDIO2yu8l88H3M0q2UXH4YdbPeik/gYUqE8ekGtv55gb2jf/wW39ol2MOsRtYcS1IK9mFjZZw6DDu3t4zQHXX3PqBURMepQ9mAIx4ax6s97vrxal/cYvFXlLLjr2dS+dAU7EMOI/uFxY27filnMo4RR+Ne8Gnc4ttfhHtHPQOY2NJBpVQG8ARwstb6YOCMMPuLCX91BVXP3EXxOQdR+950kiZdQOdXV5F+1VQsHTrt9VrnqAlkP7sw8I74nvOp+Nd1US+FGGmeZXNQzuTGMp7xZMsdBkD16/8CIrcsqynHqPH4fl2N77dfo9J+e2fWVxGL1Bi1ciRhdOkZsUQdjw04wmHtOYAONz2Od/k8qp67Oy4xuBd/RfHF+bjnf0La1Q/QcdqHGFlddzvHMXoi5uZ1+KJYnEaEv83ld0qpXns55VxgptZ6Y/3528PpL9rMkq3UffEq1a9MQ1eW4TzmdNIuuyuwOXwQjC45dHrkC6qe/is1b/wb76rvybjn1Yg9Fow2z9I52A4eFZHZu+EyeuSiklLwFMxCpWViGzAiKv04Rk2g6vFbcS/8HOspl0elj/assdhJBP+PGz36RWyJVsMGHKkX3h6R9mIh6fizcS/5lppXHsS3cQ3WngOw9uyPNac/1pzcfd40hEp7PVQ9ezc1rz+MkdOfrKn/a/FNu2N04D7NPf/ToH9PitaL9kBNf8CmlPoGSAP+o7V+qelJSqnJwGSAnj17RjmkAG2a+DaswrN8Ht4VC/Asn9f4+M4x8njSLr8X24DhIbevrDbSr34A+9DDKf/HZZRcNpqMPz+Dc+zJkfkGosRfVY5v3XJSL/prvEMBAnv/WvsNw7t8Ho5DjkEZRlT6sR44ECMnl6qnbseSmkHSuDbx8CdhmJvXo1I7oNIyI9amNSeXui9eQ2sddmGSeG7AEY4O1z4MpolnxXzc8z4Gc+djcNWhU2PStub0x9qzP0ZOLtbufVF2R0j9+Tb9TPnfLsS75geST76M9CkP7rUWurVbb6wHDsS14BNSzrw2pD7FvkU7UVuBQ4BxQBIwXym1QGu923MSrfV0YDpAfn5+VKqH+Otq8K76Hs+K+XiXz8OzciG6fumHpWMX7IPHkHzqlTiGHx3RR77OsSeT1XcB5Xedx46/nEHKWdeT9qf7EuJutTmeFfNB67jU926JLbc+UUfpsTcEZph3nPYh5X+7kPJ7zsddMIv0ax/CkpQStT7bk8DSrD4RrfRlzclFV1fgrygJa81z4wYcx58Ttw04QqUcSWTcNh0A7fNhbi3Et+lnfJvWYm4M/On+/gvqPtnl/sdiweicg6VDJ1RaJpa0TCzpmTs/T8vEkt4RlZaBJb0jltQMVHpHXLPepPKRG8DuJPO+N3EeeUqrYnSMmUTN24/hr62O+ERPERDtRF0ElASFbJ4AACAASURBVGqta4AapdR3wDAg6gMa2jRxz/0Q94/f4l0xH+8vS8E0AbD2HkTSsWdgG3IY9iFjIv4Lpilrtz50euxrKh+/hZo3/o1n5UJSTp8CwfSpFJbkVFRqJpb6HzCVmhHxO0zPsrmBJVCDRka03XDYh42l9sPnA7tdRZG1ay86Pfol1S/cR/V/H8CzfC6Zd/23cZxctMy3pRBb3yERbbNh5re5aW1YiXrnBhwXRyq0uFBWa/3dc+4ex/w1lYHkvWltIJFvXo+uLMNfXY5320Z0VTn+qrLG34EtsY84moy/PI+R3b3VcTlGT6Tm9X/hWTwL59jWJXcRnGgn6veAx5RSVsAOjAL+FeU+8SyfR8W/r8e3dik4krAPGknquTdjGzIG+8GjsETw8VxrKYeTDjc8gn3YEVT880rK745M+UKVko4lLTPw7rg+iav6d9CWzM7YB43ENuAQlMPZqvY8S+dgGzAioe48nEefSpdDjsGS3jHqfSmrjbTL78E+4mjK77uYkiuOIP3Kf5B82tUJURc6EWnTxPztV5xHRHZYpyEh+TatxT7ksJDb2bkBR36kQks4lpR07AMPgYGHtHiO1hpdV42/siyQuCvL8FeVo6vK8FfuwNKxM0kTzg+6doJ96OGo5DRcCz6VRB0lYSVqpdRrwNFAllKqCLgLsAForZ/SWv+klPoUWAb4gWe11i0u5QqXWbKVqqdup+7zV7Fk9yDjrpdxHvWHhHrMnDTuTByHHodZ+ltwF/r96NpK/FU76n+4An/6q3bUfx742rdxTePreOorBtns2AbmYx9yGPahh2EfPKbZpKfddXhXF5ByxjUR+E4jRymFikGS3pXjkGPIfqGA8qmXU/nIjbgLZpFx2zNYMrJiGkdbEKntLZsyuhwIVltYM78bNuBIm/LP/f6NllIKlZwWWFoawR3xlNWG49DjcC/4LCLzCcSewp31fU4rznkQeDCcfvbZh9dDzduPUj3jfrTPQ8oFt5J6/q0JO75oSe8Yk7tDs7wY7/L5eJbPw7N8HjVv/oeaV6cBYO19cCBpDzkc29DDMLr0xPPTIvB5E2p8Op4sGVlk/mMmtTOfoPKJ2yi+OJ+Mv76A45Bj4h1aQvHVL82K9KoGZbVidOsT1szvuo9mBDbgGH9u5AITe3CMmYTr2//hW7ccW7+h8Q6n3Unc8jyt5P7+CyoeuQFz4884DjuB9CkPtol1krFgZGRjjD25caa5dtXiWV2AZ9k8vMvnUvflG9S+9wxQX1c7NQOUCusxY3ujlCLltKuxDz2CHfecT9kNk0g5/xbSLr4joZ7UxJNZvzTL6B6ZYie7subkhlydTHs91H3+asJtwNEeOUZNAAK11CVRR16bTdS+LYVUPn4L7tnvY3TvS+YD7+IcMyneYSU05UzGkXckjrxArWxtmvgKV+JZNhfPivl4ls7FMfL4uIzhJzpb7jCynllA5X9uoOblB/D88A0Zd7zYZtbGR5O5pRAMA6NzTsTbtvboh3vRl2i/P+ixU9e8jxN2A472xuh0ALYBI3At+JTUC26NdzjtTptL1NpVS/Wr06h+9aFA2c7J95Fy5rUhrxvcnynDwNZvKLZ+Q0k59cp4h5PwLEkpZNz2NI5Dx1Ex7WpKLh1Jh5seb9zTurWU3dnqyX1tgW9r5La3bMqakwseF/7iIowuwdVYqPt4RkJvwNHeOEZPpPrlqfgrSqNWjGV/1WYStdYa13fvUfX4LYEZpuPOJP3Kf2B07hHv0MR+JmncmdgOOpTyey+k/J4Lgm/A7iBt8r2knH5NXHcnixRz8/qITyRrYOwy8zuYRG0Wb8a98DNSzrs5oTfgaE8cYyZR/eL9uBd9SdJxZ8U7nHalTfwP9tdWs+OvZ+Ap+Aprn8F0fOSLxse3QsSDtVtvOj06i7ov30BXlgV1rfuHr6l67BbcCz8n48/P7lE/ua0xtxS2ujhGsHZdohVMwZu6z15pExtwtCe2AYdg6ZCFa/4nkqgjrE0kapWUgqVDFunX/YvkUybLO2SREJTVRvLE84O+LvmMa6h9/xkqH7uFkovz6XDb0zgPPykKEUafv6YyUDksQrtmNWXp1BWVlELd569hlmxp9XV1n73aZjbgaC+UYeAYPQHXgk/RphmRYkza7cL13bs4jzwF5UiKQJRtU5vIeEopMu96Od5hCBERSilSTpmMfdhYyu+9kB1/Po3k308m/aoHEqrQTGvs3N4yOo++lVI4Dj0e19wP8a4uaP2FhpWU6x6KSkyiZY7RE6n77BW8Py3CPnh02O1Vv/Ig1TPuw3bwaDL/8fZ+O3u/TSRqIdojW6+DyHpyNlXP3BkoLfvjd2Tc9XKbWt5iRmHXrKYy73sjam2LyHKMPB4sFtwLPg07UfurdlDz1iNY+w3Fu3YJpVeMpeMD72I9cGCEom072v5MFiHaMGV3kH71A3R86CP81RWU/Olwqt/8D9rvj3doreLbvA6I3h21aFssaZnYBo/BNf+TsNuqeeM/6JpKMv7yPJ0e+QJdV0PJlUfh/vHbCETatkiiFiIBOA49juwXCnCMHE/VY7dQdvPvMEu2xjusfTK3FjbuyiQEgHP0JHxrlwQ1p6Apf0UpNW89ivOY07D1HYJ90Eg6PTUbI6srZTeeSO0n+9dQqCRqIRKEJSOLzPvfJv3GR/Esm0vJxfm45n0U77D2ytxSKEVfxG4cYyYC4F7wWchtVL/+L7SrhtSL/tr4mrVrLzo9/k1gY6N/XEbVc/egdVR2RU44kqiFSCANE82ynpmPJbsbO247lYqHr0W7auMdWrN8WwrlsbfYjbXPYCzZPXAv+DSk683yYmpnPoFz3JnYeg/a7ZglLYOOD35A0okXU/3i/ZTfexHa7YpA1IktrEStlHpeKbVdKbXXHbGUUocqpXxKqdPD6U+I/YWt10FkPTWHlLOup/bdp9l2Rj9Kr5tAxcPXUjPzSdyLv8Ys/S2udxQN21saXSVRi52UUjhHT8BdMAvt9QR9fc1rD6PddaRdeHvz7VttdLjlSdIm34fry9cpvfEE/OUl4Yad0MKd9T0DeAx4qaUTlFIG8ADweZh9CbFfaZho5hg9kbovXsP362rqvngNXVO585zUDKy9Dgp8HDig/s+BgZKeUa56ZhYXgc+LNQqbcYi2zTFmErUfPIdn2dygdpszy7ZRM/NJko47e6+zu5VSpJ5/M0a33pTffwklVx5Jx3++izWnfyTCTzjhbnP5nVKq1z5OuwZ4Bzg0nL6E2F85Djmm8Zed1hp/6VZ8G37C9+vqwJ8bVuOe8wF1Hz7feI1KSsGS2Rlld4LdGagvbnegbI7A145dXtvlHFTrk7u5fSMgM77FnuwjjgGbHff8T4JK1DWvTgOfh9QW7qabSjr2dIzOPdjx59MoufIoMu97E0fe2FDDTlhRXUetlOoO/AE4hr0kaqXUZGAyQM+ewRXeF2J/opTCyOqGkdVtj5Ka/vISfL+uxlufxHVlGdrjavzA48FfW73La27Y9bjPG3w8qR2w9hkcqW9PtBOW5FTseUfiWvAp6VP+2aprzJKt1Lw7naTx5zWWjm0N++DRdHp6NmW3nELZDZPocNt0ktvZ/uPRLnjyb+BWrbVfKdXiSVrr6cB0gPz8/P1jGp8QEWbJyMKecQT2YUeEdL02TQh2zNtiaRcbi4jIc46eSOWjN+Hbsh5rK0rMVr/yIJheUv94W9B9Wbv1IevJ79jx17OouO9ifOtXknrezVjSMkIJPeFE+ycsH3hdKbUBOB14Qin1+yj3KYQIgTIMlNUa3IckadECx5hJALjn73v2t7m9iNoPniVp4h+xdu8bUn+WtEw6TvuQpBMupObVaWw/vQ8VD1+Lb+OakNpLJFH9KdNa99Za99Ja9wLeBq7SWr8bzT6FEELEn7VHP4we/XAv2HeVsur//hNMM6S76V0pm52M26aT9exCnEedSu1HL1B8/lDKbv4droWftZmKf02FuzzrNWA+MEApVaSUulQpdYVS6orIhCeEEKKtco6ZhPvHb/daB8DctpHaD58n+cSLsHbtFZF+bf3zyLj9WTq/9Qupl9yJd+0ydtx8MsV/HEbN/57CX1sdkX5iRSVaZZf8/HxdUBDELjlCCCESkrtgFmU3nEDm1Jk4Dzux2XMqpl1N7ccv0vm1VRhdojOZWHs91H39NrVvP4Z39WJUageST7yY5FOvjNibg3AppRZrrfObOyYDTEIIIaLCPvQIVFJKi1XKfFs3UPvRDJJPuiRqSRoCj8STx59Lp6fn0unxb3Acejw1bz9K8TkHUfaXM3Ev+S6hy5HKNpdCCCGiQtkd2PPH4Z7/KVprmq7+qX5pKhgGqeffEpt4lMI+ZAz2IWMwt22i5t2nqf3gOdyz38PS8QCsBw7EemB/rD0HBD4OHIAlu0fcJ01KohZCCBE1ztETqZj9Pr4NP+1Wu9u3eR11n75E8u+vwOjcI+ZxGV1ySP/TfaRdeDt1X76BZ8V8fL+uoe7LN9HV5Y3nKWcyRk7/QOW/XRK4tUc/lCMpJrFKohZCCBE1jtH1u2nN/3i3RB24m7aRet7N8QoNCCTi5JMuJvmki4H66n/lxfh+XYO5cQ2+jWvw/boG74oFuGa9ubPWgGHQ4ZanSZ50QdRjlEQthBAiaozs7lj7DcW94DNSz70JAN+mtdR99l9STp+CkdU1zhHuTimFkdkZI7MzNClHql21+Ip+wffrGmre/A+VT9yK84jfRb2wikwmE0IIEVWOMZPwLJ+LvyrwSLn6xfvB5iClPnG3FcqZjK3fUJLGnUGHmx5HV5ZR/d8Hot6vJGohhBBR5Rw9EUwTd8EsvBt+ou7L10k59UqMjl3iHVrIbLnDSJpwPjVvP4ZvS2FU+5JELYQQIqpsg0ah0jvinv8J1S/ej3IkkXLODfEOK2xpl98DFoOqZ+6Maj+SqIUQQkSVMgwcI4/H9d27uL56i+RTr8LIyI53WGEzsruTevb/4Zr1Jp5V30etH0nUQgghos45ehK6tgrlTCH17P+LdzgRk3LODVg6dqHy8VujVjRFErUQQoioc4w8HhxJpJx1PZYOneIdTsRYktNIu/QuvMvn4fo2OntOSa1vIYQQMWGWbcOSkR33Sl+Rpn0+Si49FO1xkf3SUpTNHnQbUav1rZR6Xim1XSm1ooXj5ymllimlliul5imlhoXTnxBCiLbL6Nil3SVpAGW1knbVVMzN66n931MRbz/cv7EZwMS9HC8EjtJaDwHuBaaH2Z8QQgiRcBwjx2PPH0fVi/fjryyLaNthJWqt9XdAixFpredprXfUf7kAiH1BVyGEECLKlFKkX/0Auro8UB41gmL5DOJS4JMY9ieEEELEjK3vEJJOuIiamU/g27wuYu3GJFErpY4hkKhvbeH4ZKVUgVKqoLi4OBYhCSGEEBGXdumdKKuNqul3RKzNqCdqpdRQ4FngFK11aXPnaK2na63ztdb52dltfxG8EEKI/ZOR1Y2Uc27E9fU7eJbPj0ibUU3USqmewEzgAq31z9HsSwghhEgEKWf/H5ZOXal8IjJFUMJdnvUaMB8YoJQqUkpdqpS6Qil1Rf0pdwKdgCeUUkuUUrJAWgghRLtmSUoh7bK78a5ciOvrd8JuTwqeCCGEEBGmTZOSy0aha6vIfnkZyu7Y6/lRK3gihBBCiD0pwyD9qqmYWzdQM/OJsNqSRC2EEEJEgePQ43CMmkD1S1PxVzQ7l7pVJFELIYQQUZJ21VR0bSVVL94fchuSqIUQQogosfUeRPKJF1P7v6fwbVobUhuSqIUQQogoSr3kTpTdSdXTfw3peknUQgghRBQZnQ4g5dybcH33Lp5lc4O+3hqFmIQQQgixi9SzrgOlsPYbGvS1kqiFEEKIKFPOZNL+eFtI18qjbyGEECKBSaIWQgghEpgkaiGEECKBSaIWQgghEljCbcqhlKoC1gR5WRZQkoDXJGpcoVyTqHHF6ppEjSuUaxI1rlCuSdS4QrkmUeMK5ZpEjSuUa2IV14Fa6+xmj2itE+oDKGgv1yRqXPv797K/f/+JGpd8L4kZl3wvsYlrbx/y6FsIIYRIYJKohRBCiASWiIl6eju6JlHjCuWaRI0rVtckalyhXJOocYVyTaLGFco1iRpXKNckalyhXBOruFqUcJPJhBBCCLFTIt5RCyGEEKKeJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYJGohhBAigUmiFkIIIRKYNd4BNJWVlaV79eoV7zCEEEKImFm8eHGJ1jq7uWMJl6h79epFQUFBvMMQQgghYkYp9WtLx+TRtxBCCJHAJFELIYQQCUwStRBCCJHAIpaolVLPK6W2K6VW7PLaGUqplUopv1IqP1J9CSGEaFu0aVL+90vx/CRzkIIVyTvqGcDEJq+tAE4FvotgP0IIIdoYs7iIus/+i+ubd+IdSpsTsVnfWuvvlFK9mrz2E4BSKlLdCCGEaIP824sA8G1aG+dI2p6EGKNWSk1WShUopQqKi4vjHY4QQogIM7dtCvwpiTpoCZGotdbTtdb5Wuv87Oxm13sLIYRowxoStW/zOrRpxjmatiUhErUQQoj2zdweSNT4vJi/bYhrLG2NJGohhBBRZ27fBIYByDh1sCK5POs1YD4wQClVpJS6VCn1B6VUETAG+Egp9Vmk+hNCCNF2mNs2YRsYWKUr49TBieSs73NaOPS/SPUhhBCibTK3F5E07kx8v66RO+ogyaNvIYQQUeWvrUJX7cA4oCfWnFx8m36Od0htiiRq0cjcXoR33fJ4hyGEaGfM+jXURuec+kT9S5wjalskUYtG5VMnU3bL7+MdhhCinfHXz/g2uuRg5PTHv30T2lUb56jaDknUAgB/RSmeH7/BX1yEWfpbvMMRQrQjDWuoG+6oIbCeWrSOJGoBgGvOB1BfhMC7dkmcoxFCtCfmtk1gsWDp1HVnopYJZa0miVoA4PpmJpasbgB4f5ZELYSIHHN7EZas7iirFaN7XwB8G2VCWWtJohb4q3bgXvwVScefjdG9L76ff4x3SEKIdsTctgmjSw4AluRULNndZS11ECRRC1xzPwKfF+dRp2LrP1wefQshIsrcvhGjc4/Gr605ufiKJFG3liRqEXjs3TkH20H52PoPx9y6AX/VjniHJYRoB7Tfj7m9CKNzTuNrgSVakqhbSxL1fs5fU4l70RckHf0HlFLY+ucBMk4thIgMf3kxeD2Nj74BjJxcdGUZ/orSOEbWdkii3s+5530MXg/Oo04FwJbbkKhlnFoIEb7GpVlddr+jBplQ1lqR3JTjeaXUdqXUil1e66iU+kIptbb+z8xI9Scio65+trft4FEAWDKysHTOwbt2aZwjE0K0B7uuoW5g7VGfqGWculUieUc9A5jY5LXbgFla61xgVv3XIkH4a6txL/wM55GnoCw7/yvY+ufJHbUQIiJ2rUrWwOjaGwyrjFO3UsQStdb6O6CsycunAC/Wf/4iIPUpE4h74WfgceE8+tTdXrf1H4656Wf8tdVxikwI0V6Y2zehklJQaTsfqAbWU/eRJVqtFO0x6i5a6631n/8GdGnuJKXUZKVUgVKqoLi4OMohiQaub2ZiyeyMfcjhu71uyx0GWuNbtyxOkQkh2gtz2yYs2T1QSu32urVH7n41Ru1dt5zS6yfg/SX436sxm0ymtdaAbuHYdK11vtY6Pzs7O1Yh7de0qxb3gk8Cj70NY7djtv7DAZn5LYQIn7m9aLfH3g2sObn4Nv+C9vvjEFXsedf8gOeHb1AOZ9DXRjtRb1NKdQWo/3N7lPsTreT+/gt0Xc0ej70BLFndsGR2lsInQoiwBaqS9dzjdWvP/uBxY9aPYbd33l+WoZzJGN36Bn1ttBP1+8CF9Z9fCLwX5f5EK9V9MxPVoRP2YUfucaxhPbVMKBNChEN73PjLftutKlkDo36J1v4yTu1btwJr74P3eILZGpFcnvUaMB8YoJQqUkpdCkwFjldKrQWOq/9axJl2u3DP+wjnESejrNZmz7Hm5uErXIX2uGMcnQiX9nnxbvgJf2XTuZ1CxJZZshmg+UffPfafXbS01njXL8fab0hI1zf/Wzq0QM5p4dC4SPUhIsNd8CW6tgrn0X9o8Rxb/+Fg+vAVrsQ2YEQMoxOtpU0Tc2shvsKVeNevwle4El/hKnybfgafF6w2HKMmkDThPJxjTghpbEyIcDS3hrqBpdMBqKTUwP/Xds5fsgVdUYqtT5wTdSxprcHjRrtq0K4a/HU1aFdt4OvGz2vB9OIYNQEju3u8Q96Ne8lsfIUrg7pGOVNIOvZ0lCMp7P5d376LSs3AMeKYFs/ZWUr0R0nUcab9fvzFm/EWrgwk4/WrAp//uhrcdY3nGV17Ye09CMdhJ2A9cCC+9Suo+/IN3HM/RKV2wHnUqSRNOBf70CN2WzcvRLTsTNR7PvpWSmHk5O4Xj76965YDYO3bzhN18aWj8Jf+1picae1MQcOK89gzSDnjGuwDD4lukK1Q981Myu86F3SzE+D3yrtqIR1ufCys/rXXg2vOBziP+B3KZm/xPKNrb1RqBxmn3gutNf6ybWhvkMMDpg9/5Q50VRn+ijL8lTs/dNUO/BWl+Hf5U1ft2O3/iyWrG9beg0g5ZTLW3oOw9j4Ya6+DsCSn7tFV2p/+jufHb6j7/DVcX71F3UcvYOmcQ9LxZ5M04TxsvQ4K969BiBaZ24uA5hM1BCaUeVcujGVIceFbFyjYaWvvidp+8Ci06cXiTEE5UwIL6J3Jgc+dyYGPpPpjzhRUUjLa7aL2g+eo+2gGri9ewzb0cFLOuDaQpEIY0A+Xe8lsyu+7CNugUWT+7VWw2lp9bfVLU6l953GSjjsb+7AjQo/hh6/R1eV7fewN9RPKcvNkiVY97arFW7gK37pleNctx7duBd51ywNJNEJUSjqW9I5Y0jui0jKxde2FJS0TS4dOWLK6Yus1CGvvQVjSO7a+TcPAkT8OR/449A2P4JrzAXWfv0rN6w9T88qDWHPzSBp/DknjzsLI6hqx70UIAP+2jVgyO7f4JNDaIxfXrDfRHjfK7ohxdLHjXbcMo0tPLGkZIV2vdAh3dtGUn5+vCwoKItqmv7qC2o9nUPv245i//YpxwIEkn341ySdejCUlPaJ9tcS7bgWl1xyLpeMBZD3+NZYOnYK63l9XQ8mFw8HuIPu5RSGPN5Y/cAWur9+my/ub9/mDUfnYLdS8+zQHfFra4qSz9kZrjfnbr/jWLce7bkVjYjaLfmm8q1VJqVj7DMbWdzDW3oNQSXveye6VxcCSloElvROW9ExUekcsaZmoIN64hcss2xa4w/78NbyrC8BiwT78qGbHEvfGkpZJ2hV/j2nsou0ou/l3+MtLyHpmfrPH6754nfJ7LyTrpSXt+ulO8YXDMbr2ouPU/7V4jlJqsdY6v7lj+8VvX0tqB1LPvI6U06bgmvMBNW89QtVjt1D9/L0kn3gRyaddjbVb76j1b27bRNktJ6OcKXSc9kHQSRrAkpRCh5sep+ymk6j+7wOkXXpX0G1onxfX7PdwHH5Sq9692voPB48L38Y12PocHHR/keJZvZiqJ28n457/YmREpyCO1prKaVdT99Vb6JrKxteN7n2x9R1C0nFnY+s7BGu/IRgH9GrzY7xGxy6knD6FlNOn4Pt1NXVfvI5r9nuYReta3Yb2uPDv2I7z2DOwDzo0itGKtsrctgkjp3+LxxuXaG38ud0mau1x49u4BucRJ4fcxn6RqBsowyDpqN+TdNTv8axeTM1bj1Iz80lq3nkcx+G/I/XMa7ENPXyPUnfh8FeWUXbTSejaKjo99hXWAw4MuS3HyONJmnAe1f/9J86jT8PWd3BQ13uWfIeuLCNpH4+9G1h3nVAWx0Tt+uI1PD9+Q9UTfybj9mej1Mfr1H7wHM5jz8Ax4misfYdg7X1ws+O+7Y31wIGkXXY3aZfdHdR13vUrKbloBObWQpBELZrQWmNu24Q9v+WFP43bXbbjCWW+DT+BaYY8kQz24/2o7QMPIfOOGXR+82dSzr0Jz9LZlF4zjtIrxkZsXFa76yj782n4tqwn8/63Q55IsKv0q/+JJTWDigevRJtmUNe6vpmJSkrBMXJ8q8635vQHRxK+OFcocy/5DgyDuk9fxv3jtxFv31+1g8rHb8E2aCQZd75E8smXYT941H6RpMNhdO0FgLmlML6BiISkqyvQddUtTiQDsKSkY+l4QLtO1A0zvoO9sdrVfpuoGxjZ3UmffC9d3l5H+o2PYW4vouRPh1P1wn1onzfkdrVpsuNvf8S7Yj4Zf3kBx/CjIhKvJSOL9Gum4V31PbXvPhVUPK7Z7+MYPanVS7yUYWDrNyyuE8r8lWX4fllGyjk3YnTtRcVD16C9noj2UfX0X/FXltLhpsfb/CPtWLIkpWDp2AWfJGrRDLNxe8s9y4fuypqT2673pfatWwZ2J0Z9gZdQyG+lesqZTMopl5P94g84jz2D6hfupeSKsXjXB7feGerHO/99He7Z75N+zTSSjj09orE6jz8bx6jxVE2/A3PbxlZd41k+NzCe2Ext772x9c/Du3ZJ3Arne5bOBq1xjp5I+vX/xty4hprX/xW59lcsoPb9Z0k5bQq2fkMj1u7+wujaW+6oRbPMZvahbo6Rk4vZjnfR8q5bjq1PaKVDG0iibsKS3pHMO2aQed+b+LcXUXL5aKr/+0+0z9fqNqpfmkrte8+Qcu5NpJw+JeIxKqVIr19PXfHQNbRm5r7rm5ngSMIxakJQfdly89C1VZibWz/JKJLcP3wLjiRsBx2Kc8wknEefStWL9+Pbsj7strXPR8VDU7Bk9yD1kjsjEO3+x+jWOzBGLUQTeyt2sitrTj/85cX4Kp5J+QAAIABJREFUI7jUMVForfH9shxriBXJGkiiboHzyFPIeulHnIefRNX0OyidckygEtQ+1H74AtXP3U3ShPNJ+9N9UYvPesCBpF16N+4Fn+L66q29nqv9flzfvotz1ISgx10bt7xcuzTkWMPh+fFb7EPGNBZnSb9mGsqwUvmv61r1BmVvat5+FN+65XS4/mEZjw6RtVtvzO2bIj4cIdo+c9smsNqwdDxgr+dZ62eF+zb9EouwYspf+hv+ihJsIdb4biCJei+MjGwy7nmVjLtexlf0C8WXjqL6jX+3OInLNe8jKh66GsfI4+lw61MRnT3enOTTrsY2MJ/K/9yAv6K0xfO8KxfgL90a9GNvAGvvQWC1xaVCmb+8BN/6FTiGH934mpHdnbTL7sa98HNc37a8JnFfzG0bqX7hXhyHnYgjjGUT+zujWx/w+zF/+zXeoYgEY24vwsjuvs95H40zv9vhOLVvfXilQxvEJFErpa5TSq1QSq1USl0fiz4jRSlF0rgzyX7xRxz546h6/FZKrzseX9Hu7/48Kxey467zsOXmkfG312NSAEIZBh1ufSowa/mJ21o8z/XNTLA7cIyZFHwfNjvWPoPjkqjdS2YDYM/bfSvO5D9ciTU3j8pHbsS/y5rnYFT85wbQmvTr/xX1N1TtWUP9AXn8LZryb9vUqgI6Rrc+YLG0y5rfO2d8J3iiVkoNBi4HRgLDgJOUUv2i3W+kGZ0OIPMf79Dh9ufwrV9BySWHUvPOE2i/H9/GNZTd9geMrK5kPvBuTB+j2voOIeXcG6n75CXcBbP2OK79fuq++R+OQ48PuQqbLbd+QlmMq9h5lnyLSkrBdtDuxXqU1UqHGx/DX7qVqufuCbpd1+z3cc/5gNSL/xrWunYRGKMGZOa32IO5fdM+J5JB4GbA6NoLXzucUOb9ZTmW7B5Blf1tTizuqA8CFmqta7XWPuBbIPhnsAlAKUXyxPPJnvED9qGHU/mf/6PshkmU3fQ7lMWg47QPMTI7xzyutD/ejpGTS8W0qwO7hu3Cu7oAf3ERzqNaV+SkObb+eeiKUvz1BfZjJTA+fVizTyfsgw4l+ZTJ1M58Au+a1t/t+2urqfjPDVh7H0zKGddGMtz9kqVTV7A7ZOa32I02TczizVhakaghUPO7XT76Xrc8rPXTDWKRqFcAY5VSnZRSycAJwG7/ekqp/2fvvuOjqtIGjv/OzJ2SRggkgBA0oUoLobMWRNCAqNiVVRAXy7prb/uq+y66ltey6NpXce2IZW2LioAICBaUhBIQpEQQAkoSSkhIMvW8fyQTQyDJZObOpPB8Px8+ycy995wzRHlyz33Oea5RSmUrpbILCwujMKTwWDukkvSPj0m84zk8G7LxFxeR9MhHGF26N8l4lMNJ4h3P4du1lZJX7j/kWMWXH4Jhw3nimSG3X51QFsXpb9++Arxb12PPrHv9ecLV92Fpm0LxY9cHvflL6asP4C/YUblmWvanDpuyWLB2SpNALQ7h3/sr+LwNZnwHGMf2wrdjc9Rn7SJJe9x4f/4Rw4RlnxEP1FrrDcAjwAJgHrAa8NU6Z6bWeqjWemhKSmT2cjabUorYs68k5c21JL/0fZOX0HRkjiLm7GkcfOeJ6jtMrTUVSz7AMWQMloSkkNu2dR8AFgueKO5Q5g48nx5cd6C2JLSlzfX/wPNjNmVzXmywTU/eWg7+5ylizp6GfcDvTBvr0c7onI5XnlGLGn5bmhXcHbW1a090RRn+ol2RHFZUeX/+EXxeU3akjEoymdb6Ja31EK31KGAf0GoeRliTO2OkNo9H7m2ufQhL2w7sf/RatNeLd9NqfL9sCynbuybljMU4tndU76jdq5agYuKr7+br4hx7MfahYyo3f9nza53nab+f4hnXY4lPos0fHzR7uEc1a+fKTU9a092QCE91HeoGdiULaI17fgcSycLN+IboZX13qPp6LJXPp2dHo9+jjSWhLW1ufgLv5tUc/M+TlH/5AVitOE86O+y2bb0GRXUttXvVUuwZJzY4Pa2UIvGWp9AeFwee/Uud55V/8jKeH5aTcN0jYSd2iEMZnbuhDx5A17NEUBxdAjsmBpNMBpXPqAG8O1rNPRzevLVgd1R/tnBEax31+0qp9cDHwHVa6/1R6veo4zzlXBwnT6Tkpfson/8m9kGjQyqrWZvRKxN/4U58e3ebMMr6+fb8ivfnH7EPGtXwyVT+Nh5/2V+oWPgOrhULD29vXwEHnv8r9kGnEDPuMrOHe9STzG9Rm69gByquTdArTSwpXVDO2Fa1RMuzJRcjrS/KCL9IZbSmvk/WWvfVWg/UWh++hkiYRilF4s1PoGx2/IU7iQlz2jvgtx3KIv+cuvr5dI2NThoSf+ntWFN7UPz4jWhXxSHHSp79H3TFQRJvfUrWTEeAtXM3QNZSi9/4glxDHaAsFqypPVrV1Lf3p3WmPJ8G2ZmsVbKmdKHNDTOwJCbjGHWOKW3aegwEwBuFSlruVUtQsQnYemYGfY1yOEm89Sl8O/MoffPR6vddOYspXzCb+Etvxzju+EgM96gn5S5Fbb6C/KCnvQOMrj1bTaD27d2Nf+9uCdSifrETptJhTj7WtuZk0VviE7F26RaVO2rX6qXYB57U6Ckjx9CxOE+bROmb/8C7fSPa7aL48RuwdulG/JT/idBohZS7FLVV7koW3NKsACO1J75ftoa9b3z5grfYe9cFTZrc6DUxkQwkULdqZk/z2noNinjmt69oF77tm7CHWL+7zXWPoBwxFD9+I6WzZ+DbsZnEW54Muga3CI2UuxQBuqIMf3FR0BnfAdauPcHnC+sRitaa0lmP4Pr6E7xb14fcTrjM2jo0QAK1CJqt5yB8u7ZGtByde9VSABwhBmpr+04kXHM/7pVLKH3lfpxjLsIxPMvMIYojqFyiFX7pUdHy+Qorl2YFuytZgHFsoIpW6NPf3k2r8G7bAIBr+WchtxMub946LMmdsbRNNqU9CdQiaLZelc+pI7lMy7X6S1R8IkbVM/FQxJ59Fba+w1GxCbS5/h8mjk7UxejSTcpdCiD4OtS1BfajCCdQl82bBXYH1i7dcS2fH3I74fLk5ZqydWiABGoRNKMquSuSz6ndK7/EnnESymoNuQ1ltdLu8bmkvJqDNfkYE0cn6mI9Jh20lnKXotG7kgVY2rTDkpgc8hIt7XFTsfAdnCeehfPUC3Cv/Rp/aXFIbYVDez14t23A6GbOtDdIoBaNYE3qgCUlFU+EMr99Bfn4dubVu21osCyxCY1+RiZCJ+UuRYCvIB+UwprSpdHXWsPI/HZ9Nx9/cREx4yfjHDEOfD5c2YtCaisc3p83gteDzYQ9vgMkUItGsfXKxBuhhDLX6qrn0/UU4hDNk2x6IgJ8u3dgadcJZbM3+tpwlmiVz5uFJakDjmGnY+s3EhWfiGv5vJDaCofZGd8ggVo0kq1nJt7tG/GXHzS9bfeqpaiEJFOqzYjoknKXIsBXsL3Ra6gDjK698O/5BX9ZSaOu8x/YS8U3nxJz+iSUYUMZBo5hp+NaPi/qy7Q8eWvBZq9OjjODBGrRKLZemaB19W+NZnKvWlK5ftoi/1m2NFLuUgSEstlJgLWqOIdvx5ZGXVf+xbvg9RAzbnL1e46R4/Hv/RVvFGsUAHjzcjHS+phaRlf+RRSNEqna1L7d2/Ht2hrysizR9IzO6XhlidZRTWtduX1oSuMyvgOqq2jlN276u3z+mxjdB2Dr+dtqEceIymWZru+im/3tyVuHzcREMohe9axblFI/KKXWKaXeUko5o9GvMJ8lpQuWtimmJ5S5qtZP2wePNrVdET3WLt2k3OVRThfvAVd56FPfXbqBUni3B19Fy7t9I5713x9WcMfariO23oOpiOJzat/+Qvx7fsHo0cICtVKqC3AjMFRr3R+wApMi3a+IDKUURs+BeDabe0ftXvUlKrE9Rno/U9sV0WMck44uK5Fyl0exxtahrk05YrB2PLZRCWVl898Ei4WY039/2DHHyPF4fliO/8DekMbTWF6TdyQLiNbUtwHEKKUMIBbYFaV+RQTYeg3Cu3U92u0yrU33qi9xDDxZnk+3YJL5LQJ1qC2N3OykJmvXnviCnPrWfj/l82fjGHY61vadDjvuGDEO/H5cK6JTtNETgYxvqAygEaW13qmUmgFsB8qBBVrrBZHuV0SOrdcg8Hrwbl2PrfegsNvz/rIN368/E3fJTeEPTjSZQ8pd9h1mWrulb87AlX14nfH6KKtBwh8fPOSZpYg8X0HVZichTn1D5XPq8vlvorVusF6Be9WX+At2EPOnh4543NZnGKpNO1zL5xEz9qKQxxQsb946LO06YU3qYGq70Zj6TgLOAdKBzkCcUmpyrXOuUUplK6WyCwsLIz0kESZbr8AOZeZMf7ur1k83pv60aH4iUe5S+/2UvvEw3u2b0W5X0H/cuV9TOnuGaeMQwfEV5IPdgSWMqn1G157ogwfw7yto8NzyebNQ8Yk4TzrriMeV1YpjeBau7+aj/f6QxxQsz5ZcDBO3Dg2I+B01cBqwVWtdCKCU+gA4AZgVOEFrPROYCTB06FDJRGnmrMeko+LamJb57V75JZbEZIy0Pqa0J5pGJMpd+vI3o8tKaHPjY8ROmBr0dcX/vImyT1/BX7IPS0KSaeMR9QtkfIdTua8683v7JqztOtZ5nr+slIqlH+I87ZJ6q+M5R46nYuHbeDauxN5naMjjaoj2evFuW0/cBdeZ3nY0HghuB0YqpWJV5U9vLLAhCv2KCFEWC7aemaYU59Ba41r1JfZBo+T5dCtQWe7SvCVanh9XAmDrPbhR18VOmApuV+X6WhE1vt07wpr2BrB2rdwopKHn1BVLP0KXHyR23OR6z3MMPx2UivgyLW/+ZvC4I7JhU8T/ZdRafwe8B6wE1lb1OTPS/YrIsvXKxLMlF+31htWO75et+At2YM8cZdLIRFMyqpZomcWzaSXYnRjHNW62xeg1CKNbf8rnvm7aWETDfAU7wt5j39qhK9gdDWZ+l8+fhbVzOrYBJ9R7nqVtMrY+wyK+nah3Sy5gfsY3RCnrW2t9j9b6eK11f631FK21eenCokkYvQaBqxzvjuDXOx6Je+WXgKyfbi2sndNNLXfp2bgKW48MlNG4p3RKKWImXI7nx2w8W9ebMhZRP+314N/zS6PLW9amrFaMLt3rDdS+3Ttwr1xCzLjJQU2zO0aOx7NhBb79kcuB8uStBcOGcWxv09uWuUYRElug5GWYz6ndq5diSeqAcdzxZgxLNDEzy11qvx/P5tWNnvYOiMm6FKwG5XNfC3ssomG+ol3g94c99Q1gTe1Z76Yn5Z+/BVoTM+7SoNpzjBgHWuP6/vOwx1YXb95ajOOOD6kYSUMkUIuQGF17gSMGbxi1qaufT2eOCiv5RDQfZpa7DCSShRqorW1TcJxwJuULZqO9nrDHI+rnD7EO9ZEYx/bCt+unIz5a01pTNu8N7BknYVQtCWyIrfdgLG1TcC2P3HNqT97aiEx7gwRqESJlGNh6ZIS1lahvZx7+wp2m1J8WzYOZm56EmkhWU+yEy/HvK2iScodHm8CuZOFsdhJgdO0JXg++3YfPzHg2ZOPbvomY8fUnkdWkLBYcI8bh+n4B2ucLe3y1+Yv34C/cGZGlWSCBWoShMvN7dcjrE92rKp9POySRrNUws9xlqIlkNTlGjMfSriNln0lSWaT5zLyjDizROsJz6vJ5b4DdiXP0+Y1q0zFyPPrAXjwbVoQ9vto8P60DwNY9MiV6JVCLkNl6ZaIPHgh5OY5r1ZeVu/hEIPlCNI1AuUvvzvCXaHk2rsLWc2CjE8kOGY9hEJN1Ka5v5uILYgMNETpfwXZUm3ZYYuPDbuu3cpeHBmrtdlG+6D84R52DJT6xUW06ho0FiyUisyuBjG+ztw4NkEAtQmbrWVXyMoT11Fpr3KuWVq6flufTrYrRpVvYz6irE8l6hb9FbcyEqeDzUr5gdthtibr5CvLDzvgOsCQmo+LbHraqpOLbz9AH9h5WKSuoNtu0w9ZvZETWU3vy1mFpm4Klng1awiGBWoTMSO8Lho2KRf9BV5Q16lrfjk349/wi9adbIWvn9LDLXYabSFaTLa0Ptj7DKJ/7upTgjCDf7h2mTHtDVZW+Y3sdNvVdPn8WlvbH4BgyNqR2nSPH49m4Et+eX80YZjVvXi5GjwERu+mQQC1CpuwO4s7/MxVffkjB5AzKF70X9D+E1fWnB8nz6dbGjHKXZiSS1RQz4XK8W3/As3GlKe2Jw5mxK1lNRteeeHds+a39/YW4vv2MmNMnhfw4xDFiHACu782rC6W9Xjxb12PrFplpb5BALcLU5vpHaf/0F1jaJLH/3svYe/M4PHnrGrzOvepLLMmdsab2jMIoRTSZkfltRiJZTTFjLga7U9ZUR4i/rARdut/UQG1N7Ym/YEf1bF3FF++Cz0vM+Ckht2n0HIil/TGmLtPy7dwC7oqIbB0aIIFahM0+8CSSX1xOm9uexpO3lqIrh1H8xM11FmvXWuNevRT7oFPk+XQrdEi5yxCZkUhWkyWhLc5R51C+8B20q8KUNsVvAkuzzJr6hhqZ3zvzgMpKWUbPTGzd+oXcplKqcpnWis/D3v44wLOlsgZ1pNZQgwRqYRJltRJ3zjV0mP0DsROvpuyjFyi4rD8H//viYesWvT//iH/vbhwy7d0qhVvu0sxEsppiz7gcXbqfiq8+NrVdAb7d24Hw6lDXVrOKlmfrejwbVxLbiLXTdXGMHI8uLcbzw/Kw2wLw/LQWrEZEd1eUQC1MZWnTjsRbnyL5399hS+vLgceup+iaE3Cv/ab6nMD6abskkrVK1eUuQ1yiZWYiWU32wadi6dCV8s9k+tts/gjcUVtTewCVa6nL580Cq4HztEvCbtcxdAxYDSpMWqblzVuLcWxvlN1hSntHEvFArZTqrZRaXePPAaXUzZHuVzQtW48M2j31OW3vmYV/fxF7rjuVffdfga9wZ+X+3imp1VOkovWxdg59iZbZiWQBymoldvxkXCsWVk/VCnP4du8Ai6VywxuTWGLisKSk4v35R8o/fwvHiHFYkzqE3258IvYBJ5i2TMuzZW3E1k8HRKPM5UatdabWOhMYApQBH0a6X9H0lFLEjL2IlFm5xF9+FxVffkDh5AG4ls/DMVieT7dmRtUSrVCYnUhWU8wZU0Bryue/aXrbRzPf7h1YkruYllMQYHTtQcXSj/AX7WrUlqENcYwch3dLLr7CnWG14y/Zh79gR0SfT0P0p77HAnla6/BL64gWwxITR8JV95Ly+mrsQ8agyw9WL5MQrVM45S7NTiSryejSHfvAkymb+5qsqTZRZR1q86a9A4yuPcFVjopvi/OEM01r1zFiPEDYd9WBFS5Gj9YVqCcBb9V+Uyl1jVIqWymVXVgYuXqhomkZnbvR7v/eo8N/NuMce3FTD0dEUKjlLrXfj2fTKtMTyWqKmXA5vp15eGrkTYjw+Ap2mLYrWU1G114AxIy9yNRnwEa3flhSUqn4Nrzn1N68yq1DW80dtVLKDkwE/lP7mNZ6ptZ6qNZ6aEpKSrSGJJqIteOxMu3dyoVa7tK3YxO6vNT059M1OU85HxUTR9lcKdRhBu33V20fav4dta3PULBaiTnzD6a2q5TCOXIc7pxFIc36BHjy1qES25v6bP5IonlHfQawUmu9O4p9CiGaQPWmJ43M/PZsXAWYn0hWkyU2HuepF1Kx+D38ZaUR6+do4d9XAB53RKa+7QNOoOPHv2A/fojpbTtGjkeXlRyyIqWxvFU1qCN94xHNQP17jjDtLYRofUItdxnJRLKaYidMRZeXUvHlBxHt52jw22Yn5k99A42ukhUs+5BTwbCFXE1L+3x4floX8WlviFKgVkrFAacD8n+FEEcBZbFgHJPe6G1EI5lIVpNtwAlYU3tQLtPfYauuQ93x2CYeSeNYYhOwDzwp5IQy3648cJVHfGkWRClQa60Paq3ba62Lo9GfEKLpWTunN+oZdTQSyQKUUsSecTnuNcuqt6gUofEVmL8rWbQ4Ro7Hu3U93kYmPcJvGd+27pHb4ztAdiYTQkREY8tdRiORrKaYcZeBxUL5Z29Epb/Wyl+Qj3LGohKSmnoojVZdTSuEu2rvllywWDDSIvuYBiRQCyEipLHlLn9LJDM/cehIrB1ScQwdS9m8WYftRy+C59u9A0uHri1yJYdx3PFYOx2HK4RlWp68tRhde6EczgiM7FASqIUQEdHYcpeeTSvBERPR4ga1xZwxFX/BDtwrF0etz9bG7DrU0aSUwjFyPO6Vi9FuV1DXaI8bb/4WPJtWR7S0ZU2RzdgQQhy1qstd7voJ+g5r8HzPxlXYemREPJGsJudJZ6Pi21L22es4hp0WtX5bE19BPo4oJFRFiuN34yn76AXca5bhGHYaWmt08R68u7bi+2Urvl1bK78PvC7YAX4/ALYILBs7EgnUQoiICJS7DOaOOpBIZuZ+zsFQDicxp11C2dzX8Jfsx5LQNqr9N0RrTfmnr4LNjq1HRmWVJpu9qYdVTbtd+Pf+2mLvqAEcg0aD3UHxk7eg7M7KvIqykkPOsbTrhLVzOvaME7F2Tsd6TDpGl27Y+o6IyhglUAshIqKy3GWnoNZSRzuRrKaYCVMp++gFyhe9S9w510S9//q4vvmU4kev/e2NqrrHth4ZGN37Y+uegdF9ANb2nZpkfL7CqjXULThQK2cssWdfhTtnEdYOqdgHnozROb0yIHfuhrXTcVhi4pp0jBKohRARE+wSrWgnktVk6z0YI70f5XNfb1aBWvv9lLx4D9Yu3Ul64F2829bj2ZKLN28trlVfUr5gdvW5lqQOlYG72wCMHhnY0vth7XQsqk27iCZ5RXqzk2hJvOnxph5CvSRQCyEixuicjnvNVw2e1xSJZAFKKWImXE7Js/+De/332PsOj/oYjqRi4Tt4f1pH23vewNa9P7bu/YmpUczGX7wHT95avHlrq78e/Oh5qJkU5YjBmtIFa4dUrCmpWDukYulQ43VKl7CCefVmJxHY51v8RgK1ECJirJ3T8X3+FtrjrvfZalMkktUUe9Y0Dr71OAeeuo32z32JsjTtghjtcVPy0r0YPQfiPPXCI55jSWyPY/BoHINH/3ad14s3fzPebRvwFezAX7ATX2E+voKduFZ9iX/PLqi9FK0qmNv7jaDNTf9s1JadvwXqln1H3dxJoBZCREzNcpdG155HPKepEslqssS1IeGPD1L80FWUz3+T2DOmNNlYAMo+eRnfL9tIeuSjRv3SoAwDW1ofbHVswqG9Xvz7duMryMdXuBN/QX7l9wU7KF/4Dp5Nq2n36EdBbwfqK9iOpW0KyhET9BhF40mgFkJEjFG9lvqnOgN1dSJZlJa61CVm3GWUzXmRkhf+ivPkiRErBtEQf/lBSl97CHvGSThGjje1bWUYlVPhKV0OO+bKWcS+v02i6I8nk/TwB0FVrPIX5LfoRLKWQjY8EUJEjLVLYC113Qll1YlkvaKf8V2Tslhoc+Pj+PcVUPra/zXZOMrefw7/3l9J+OP9Ud3tyzFkTOW0v93BnhvGUrHsvw1eE9iVTERWtKpntVVKvaeU+lEptUEp9bto9CuEaFqWdp2gam1qXZoykaw2e5+hxEy4goPvPYP35x+j3r+/ZB+ls2fg+N0Z2AecEPX+bWl9aP/8Mmzd+rPvfy+h9N0n69yrXWtduSuZPJ+OuGjdUT8JzNNaHw8MBDZEqV8hRBOqLHeZVu+mJ02dSFZbwjX3oZyxFD91W9AFRcxSOvsxdOl+Eq6+L6r91mRt15H2Ty7AOepcSp75CweeuBnt9R52ni4tRpeXytR3FEQ8UCulEoFRwEsAWmu31np/pPsVQjQP9a2ljmZpy2BZkzqQ8Ie/4V6xENfXn0StX1/RLxx87xmcp03CFqU9pOuinLG0/fts4n5/K2UfPs++uy/AX2u3Ll9By6xD3RJF4446HSgEXlFKrVJK/Vspdcg2L0qpa5RS2Uqp7MLCwigMSQgRLfWVu2wuiWS1xZ7/J4y0Phx45g60qyIqfZa+/hB4PSRcOT0q/TVEWSy0+dNDtLntGVwrPmfP9WOqNzgB8O1uuXWoW5poBGoDGAz8S2s9CDgI3FnzBK31TK31UK310JSUlCgMSQgRLfWVu2wuiWS1KcNGmxsfw7drK6XvPBHx/rw78yj7+CViz/oDRpfuEe+vMeLOuZp2j3yEb9dWiq49Gc+m1UDr2ZWsJYhGoM4H8rXW31W9fo/KwC2EOApYayzRqq05JZLV5hg6Fueoczk465HqjT0ipeTl+8GwET/17oj2EyrH8CzaP7sELFb23DCGim/nVv6dGLbKhEERUREP1FrrX4EdSqneVW+NBdZHul8hRPNgrbpDPFLmd3NLJKst4bpH0H4/B56PXAD15K2jYuHbxF1wHdbkzhHrJ1y27v1Jfn4p1q692HfXBVQsfKdyC9Im3sXtaBCtv+EbgDeVUrlAJtB0ixSFEFFl1FHusjqRrAkqZgXLOCaN+Etvo+KLd3GtXhaRPkpenI6Ka0P8ZbdHpH0zWZM70/7pL3D8bgK+3dtlj+8oiUqg1lqvrnoGnaG1PldrvS8a/Qohmp5yxh6x3GVTlrZsjPhLb8fa8VgOPHnLEZcphcO99htc33xK/O9vw5KQZGrbkWKJiSPpgXeJv/IeYs/9Y1MP56jQPOebavF4POTn51NREZ3sS9G0nE4nqamp2Gy2ph6KMMmRlmg110Sy2pQzloTrHmH/9N9T9vG/iTvv2oYvCoLWmpKZ07G060jshdeb0ma0KKuVhGb6PL01ahGBOj8/n4SEBNLS0qK6pZ6IPq01e/bsIT8/n/T09KYejjDJkcpdNudEstqcp5yHfdBoSv59LzFjLsKS2D7sNl3fL8C9Zhltbn4CS0xcwxeIo1aLyAKoqKigffv2EqSPAkop2rdvL7MnrYy1czq+gh1C+8eQAAAgAElEQVToGrWSm3siWU1KKdrc+Bi67AAlL90bdnva76dk5t+wHpNG7NlXhj9A0aq1iEANSJA+isjPuvWpLne5+2egZSSS1Wbr3p/Yc/9I2Zx/49m8Jqy2Kha/j3fzGuKnTa+3TrcQ0IICtRCi5TKqqmgFMr9bSiJZbQnTpmNJaEfxk7eEvA+49nooeelejPS+xJw2yeQRitZIAnWQfv31VyZNmkT37t0ZMmQIEyZMYNOmTfVeEx8fD8CuXbu48MILQ+p39OjRZGdnH/b+hAkT2L//8C3T09LSKCoqqn69ZMkSzjrrrJD6rm3btm3079/flLbE0SWw6Ukg87ulJJLVZklIIuGa+/Dkfk3FF++G1Eb5Z6/jy99CwtX3oaxWk0coWiMJ1EHQWnPeeecxevRo8vLyyMnJ4aGHHmL37t1BXd+5c2fee+89U8c0d+5c2rZta2qbAF6Tl58IAYeXu2xJiWS1xUy4AqPXIA786y78ZaWNula7yil55QFs/UbiONGcX6BF69f8sziagcWLF2Oz2bj22t+WZQwcOBCA0tJSzjnnHPbt24fH4+GBBx7gnHPOOeT6bdu2cdZZZ7Fu3TpeffVV5syZQ1lZGXl5eZx33nk8+uij+Hw+rrzySrKzs1FKMW3aNG655ZbqNvx+P9OmTSM1NZUHHniAtLQ0srOzSU5ODvpzfP/999x0001UVFQQExPDK6+8Qu/evXn11Vf54IMPKC0txefz8emnn9b5mbxeL5dddhkrV66kX79+vP7668TGxnLffffx8ccfU15ezgknnMALL7yAUoqnnnqK559/HsMw6Nu3L2+//TYTJkxg165dAGzdupWnnnqKqVOnhvzzEc1f7XKXlYlkA1tEIlltymol8abH2XPdqRz4503Yh40N+lrP2m/wF+2i7d9elVwMEbQW939J8VO34d2Sa2qbRo8MEm98rM7j69atY8iQI1f3cTqdfPjhh7Rp04aioiJGjhzJxIkT6/2fcPXq1axatQqHw0Hv3r254YYbKCgoYOfOnaxbtw7gkGntQHDs378/f/3rXxv8PKeeeirWqim10tJSjj++8q7l+OOPZ9myZRiGwcKFC7n77rt5//33AVi5ciW5ubm0a9cOr9d7xM8EsHHjRl566SVOPPFEpk2bxnPPPcftt9/O9ddfz/TplVV/pkyZwieffMLZZ5/Nww8/zNatW3E4HNWfae7cuQDk5OTwhz/8gXPPPbfBzyRavsBa6kAiWcwZU5p6SCGzDziBmLOmUf7Jy5TPn9Woax0jx+MYdEqERiZaoxYXqJsbrTV33303S5cuxWKxsHPnTnbv3k2nTnVvVD927FgSExMB6Nu3Lz///DP9+vXjp59+4oYbbuDMM88kKyur+vw//vGPXHzxxUEFaaicAQjcaS9ZsoQZM2YAUFxczNSpU9m8eTNKKTweT/U1p59+Ou3atav3MwF07dqVE088EYDJkyfz1FNPcfvtt7N48WIeffRRysrK2Lt3L/369ePss88mIyODyy67jHPPPfeQgFxUVMSUKVN49913q/8uROtm7ZyOe/WyFptIVlviHc8RP/kO8PsbdZ1suykaq8UF6vrufCOlX79+dT5jfvPNNyksLCQnJwebzUZaWlqDa4AdDkf191arFa/XS1JSEmvWrGH+/Pk8//zzvPvuu7z88ssAnHDCCSxevJjbbrsNp9MZ8uf429/+xqmnnsqHH37Itm3bGD16dPWxuLjfNlyo7zPVnilQSlFRUcGf//xnsrOz6dq1K/fee2/1+Z9++ilLly7l448/5sEH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+9//bpIxBQL1pZdeClQG6uzsbCZMmNAk4wHwer0YhvwnJYQQNfl+/RldWoytx8CQrpe9voPwyy+/kJycjMPhACA5OZnOnTsDMHr06CPupObz+bj66qvp168fWVlZlJeXA5UBdeTIkWRkZHDeeeexb9++w9opKioisI2qz+fjjjvuYNiwYWRkZPDCCy8AcOedd7Js2TIyMzN55JFHmD59Ou+88w6ZmZm88847HDx4kGnTpjF8+HAGDRrEf//73yN+rlGjRpGZmUn//v1ZtmwZAPPmzWPw4MEMHDiQsWPHArB3717OPfdcMjIyGDlyJLm5uQDce++9TJkyhRNPPJEpU6ZQWFjIBRdcwLBhwxg2bBhff/21KT8DIYRoqbxb1gBghBioW9ztT/FTt+Hdkmtqm0aPDBJvfKzO41lZWdx333306tWL0047jUsuuYRTTjmlzvMBNm/ezFtvvcWLL77IxRdfzPvvv8/kyZO5/PLLefrppznllFOYPn06f//733niiSfqbOell14iMTGRFStW4HK5OPHEE8nKyuLhhx9mxowZfPLJJwB07NiR7OxsnnnmGQDuvvtuxowZw8svv8z+/fsZPnw4p512GnFxcdVtz549m3HjxvHXv/4Vn89HWVkZhYWFXH311SxdupT09HT27t0LwD333MOgQYP46KOPWLRoEZdffjmrV68GYP369Xz11VfExMRw6aWXcsstt3DSSSexfft2xo0bx4YNG4L7QQghRCvk2ZwLFgu2bv1Cur7FBeqmEB8fT05ODsuWLWPx4sVccsklPPzww1xxxRV1XpOenk5mZuXOqUOGDGHbtm0UFxezf//+6iA/depULrroonr7XrBgAbm5ubz33nsAFBcXs3nzZux2e4PXzZkzhxkzZgCVmfPbt2+nT58+1ecMGzaMadOm4fF4OPfcc8nMzGTJkiWMGjWqeulUu3btAPjqq694//33ARgzZgx79uzhwIEDAEycOJGYmBgAFi5cWP3MHuDAgQOUlpYSHx9f73iFEKK18mxZg9G1F8oZG9L1LS5Q13fnG0lWq5XRo0czevRoBgwYwGuvvVZvoA5MkweuDUx918UwDPx+P8AhS5e01jz99NOMGzfukPOXLFlSb3taa95//3169+5d5zmjRo1i6dKlfPrpp1xxxRXceuutJCUl1dvukdS8S/f7/Sxfvhyns/Fr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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OIPRILPRlrOm" + }, + "source": [ + "Note that the x axes is extended from the 0.30 to 0.64 the clustering range as explained in the previous paragraph \n", + "\n", + "For the illustration we will use 0.47 as the optimal threshold " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xVuPxJGjoJ_z" + }, + "source": [ + "best_threshold = '0.47'" + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TMpM4vXj86sz" + }, + "source": [ + "# Detect cluster types" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "A_MUTSBA1Zqy" + }, + "source": [ + "# defining detect_type as fuction is better than defining it in the example walkthrough\n", + "from portraits.detect_type import detect_type " + ], + "execution_count": 19, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "VX_FGeSf4P--" + }, + "source": [ + "final_clusters = detect_type(clustering_metrics, best_threshold, signature_scores_scaled)" + ], + "execution_count": 18, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "onR0QdkV8suB", + "outputId": "58da9aeb-240a-48c1-e1bf-69343a7879a3" + }, + "source": [ + "final_clusters.head(3)" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "GSM478912 D\n", + "GSM478913 D\n", + "GSM478937 D\n", + "Name: MFP, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iUMI0wCw8xV1" + }, + "source": [ + "# Exporting " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "eAu38vGW80za" + }, + "source": [ + "final_clusters.to_csv('final_clusters.tsv', sep='\\t', index=True)" + ], + "execution_count": 21, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "KNQ-pIcu9NXx" + }, "source": [ "" ],