From e84793ede90b041f41225cb58aa19b6a29745fb9 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 1 Jun 2018 11:14:21 -0700 Subject: [PATCH 01/26] Add backend to cellxgene repo --- .gitignore | 33 +++ README.md | 10 +- backend/app/__init__.py | 63 +++++ .../app/driver/__init__.py | 0 backend/app/driver/driver.py | 57 +++++ .../app/rest_api/__init__.py | 0 backend/app/rest_api/rest.py | 215 ++++++++++++++++++ .../app/scanpy_engine/__init__.py | 0 backend/app/scanpy_engine/scanpy_engine.py | 86 +++++++ backend/app/util/__init__.py | 0 backend/app/util/filter.py | 62 +++++ backend/app/util/schema_parse.py | 7 + backend/app/util/utils.py | 34 +++ backend/app/web/__init__.py | 0 backend/app/web/templates/swagger.html | 97 ++++++++ backend/app/web/webapp.py | 22 ++ backend/run.py | 3 + backend/test/test_api.py | 38 ++++ .../configuration}/babel/babel.dev.js | 0 .../configuration}/babel/babel.prod.js | 0 .../configuration}/babel/babel.test.js | 0 .../configuration}/eslint/eslint.js | 0 .../configuration}/polyfills/polyfills.js | 0 .../webpack/webpack.config.dev.js | 0 .../webpack/webpack.config.prod.js | 0 favicon.png => cellxgene/favicon.png | Bin index.html => cellxgene/index.html | 0 .../index_template.html | 0 package.json => cellxgene/package.json | 0 {server => cellxgene/server}/development.js | 0 {server => cellxgene/server}/production.js | 0 {server => cellxgene/server}/utils.js | 0 {src => cellxgene/src}/actions/index.js | 0 .../_experimentalWebGLHeatmap/heatmap.js | 0 .../orbit-control.js | 0 .../_experimentalWebGLHeatmap/popup.js | 0 {src => cellxgene/src}/components/app.js | 0 .../components/categorical/categorical.css | 0 .../components/categorical/categorical.js | 0 .../src}/components/categorical/util.js | 0 .../src}/components/categorical/value.js | 0 .../src}/components/continuous/continuous.js | 0 .../src}/components/continuous/drawAxes.js | 0 .../components/continuous/drawLinesCanvas.js | 0 .../components/continuous/histogramBrush.js | 0 .../src}/components/continuous/parallel.js | 0 .../continuous/parallelCoordinates.css | 0 .../continuous/setupParallelCoordinates.js | 0 .../src}/components/continuous/util.js | 0 .../src}/components/continuousLegend/index.js | 0 .../components/expression/cellSetButtons.js | 0 .../components/expression/diffExpHeatmap.js | 0 .../src/components/expression/expression.css | 0 .../expression/expressionButtons.js | 0 .../src}/components/framework/buttons.css | 0 .../src}/components/framework/container.css | 0 .../src}/components/framework/container.js | 0 .../src}/components/framework/header.css | 0 .../src}/components/framework/header.js | 0 .../components/framework/sectionHeader.js | 0 .../src}/components/graph/drawPointsRegl.js | 0 .../src}/components/graph/graph.css | 0 .../src}/components/graph/graph.js | 0 .../src}/components/graph/setupSVGandBrush.js | 0 .../src}/components/graph/util.js | 0 .../src}/components/joy/drawJoy.js | 0 {src => cellxgene/src}/components/joy/joy.css | 0 {src => cellxgene/src}/components/joy/joy.js | 0 .../src}/components/joy/joyParser.js | 0 .../src}/components/leftsidebar.js | 0 .../components/scatterplot/drawPointsRegl.js | 0 .../components/scatterplot/scatterplot.css | 0 .../components/scatterplot/scatterplot.js | 0 .../scatterplot/setupScatterplot.js | 0 .../src}/components/scatterplot/util.js | 0 {src => cellxgene/src}/globals.js | 0 cellxgene/src/index.css | 0 {src => cellxgene/src}/index.js | 0 .../src}/middleware/updateCellColors.js | 0 .../updateCellSelectionMiddleware.js | 0 .../src}/middleware/updateURLMiddleware.js | 0 {src => cellxgene/src}/reducers/cells.js | 0 {src => cellxgene/src}/reducers/controls.js | 0 .../src}/reducers/differential.js | 0 {src => cellxgene/src}/reducers/expression.js | 0 {src => cellxgene/src}/reducers/index.js | 0 {src => cellxgene/src}/reducers/initialize.js | 0 {src => cellxgene/src}/reducers/responsive.js | 0 {src => cellxgene/src}/util/camera.js | 0 {src => cellxgene/src}/util/parseRGB.js | 0 {src => cellxgene/src}/util/renderQueue.js | 0 {src => cellxgene/src}/util/scaleLinear.js | 0 {src => cellxgene/src}/util/scaleRGB.js | 0 {src => cellxgene/src}/util/schema.js | 0 .../src}/util/typedCrossfilter/bitArray.js | 0 .../src}/util/typedCrossfilter/index.js | 0 .../typedCrossfilter/positiveIntervals.js | 0 .../src}/util/typedCrossfilter/util.js | 0 98 files changed, 718 insertions(+), 9 deletions(-) create mode 100644 backend/app/__init__.py rename src/components/categorical/categorical.css => backend/app/driver/__init__.py (100%) create mode 100644 backend/app/driver/driver.py rename src/components/expression/expression.css => backend/app/rest_api/__init__.py (100%) create mode 100644 backend/app/rest_api/rest.py rename src/index.css => backend/app/scanpy_engine/__init__.py (100%) create mode 100644 backend/app/scanpy_engine/scanpy_engine.py create mode 100644 backend/app/util/__init__.py create mode 100644 backend/app/util/filter.py create mode 100644 backend/app/util/schema_parse.py create mode 100644 backend/app/util/utils.py create mode 100644 backend/app/web/__init__.py create mode 100644 backend/app/web/templates/swagger.html create mode 100644 backend/app/web/webapp.py create mode 100644 backend/run.py create mode 100644 backend/test/test_api.py rename {configuration => cellxgene/configuration}/babel/babel.dev.js (100%) rename {configuration => cellxgene/configuration}/babel/babel.prod.js (100%) rename {configuration => cellxgene/configuration}/babel/babel.test.js (100%) rename {configuration => cellxgene/configuration}/eslint/eslint.js (100%) rename {configuration => cellxgene/configuration}/polyfills/polyfills.js (100%) rename {configuration => cellxgene/configuration}/webpack/webpack.config.dev.js (100%) rename {configuration => cellxgene/configuration}/webpack/webpack.config.prod.js (100%) rename favicon.png => cellxgene/favicon.png (100%) rename index.html => cellxgene/index.html (100%) rename index_template.html => cellxgene/index_template.html (100%) rename package.json => cellxgene/package.json (100%) rename {server => cellxgene/server}/development.js (100%) rename {server => cellxgene/server}/production.js (100%) rename {server => cellxgene/server}/utils.js (100%) rename {src => cellxgene/src}/actions/index.js (100%) rename {src => cellxgene/src}/components/_experimentalWebGLHeatmap/heatmap.js (100%) rename {src => cellxgene/src}/components/_experimentalWebGLHeatmap/orbit-control.js (100%) rename {src => cellxgene/src}/components/_experimentalWebGLHeatmap/popup.js (100%) rename {src => cellxgene/src}/components/app.js (100%) create mode 100644 cellxgene/src/components/categorical/categorical.css rename {src => cellxgene/src}/components/categorical/categorical.js (100%) rename {src => cellxgene/src}/components/categorical/util.js (100%) rename {src => cellxgene/src}/components/categorical/value.js (100%) rename {src => cellxgene/src}/components/continuous/continuous.js (100%) rename {src => cellxgene/src}/components/continuous/drawAxes.js (100%) rename {src => cellxgene/src}/components/continuous/drawLinesCanvas.js (100%) rename {src => cellxgene/src}/components/continuous/histogramBrush.js (100%) rename {src => cellxgene/src}/components/continuous/parallel.js (100%) rename {src => cellxgene/src}/components/continuous/parallelCoordinates.css (100%) rename {src => cellxgene/src}/components/continuous/setupParallelCoordinates.js (100%) rename {src => cellxgene/src}/components/continuous/util.js (100%) rename {src => cellxgene/src}/components/continuousLegend/index.js (100%) rename {src => cellxgene/src}/components/expression/cellSetButtons.js (100%) rename {src => cellxgene/src}/components/expression/diffExpHeatmap.js (100%) create mode 100644 cellxgene/src/components/expression/expression.css rename {src => cellxgene/src}/components/expression/expressionButtons.js (100%) rename {src => cellxgene/src}/components/framework/buttons.css (100%) rename {src => cellxgene/src}/components/framework/container.css (100%) rename {src => cellxgene/src}/components/framework/container.js (100%) rename {src => cellxgene/src}/components/framework/header.css (100%) rename {src => cellxgene/src}/components/framework/header.js (100%) rename {src => cellxgene/src}/components/framework/sectionHeader.js (100%) rename {src => cellxgene/src}/components/graph/drawPointsRegl.js (100%) rename {src => cellxgene/src}/components/graph/graph.css (100%) rename {src => cellxgene/src}/components/graph/graph.js (100%) rename {src => cellxgene/src}/components/graph/setupSVGandBrush.js (100%) rename {src => cellxgene/src}/components/graph/util.js (100%) rename {src => cellxgene/src}/components/joy/drawJoy.js (100%) rename {src => cellxgene/src}/components/joy/joy.css (100%) rename {src => cellxgene/src}/components/joy/joy.js (100%) rename {src => cellxgene/src}/components/joy/joyParser.js (100%) rename {src => cellxgene/src}/components/leftsidebar.js (100%) rename {src => cellxgene/src}/components/scatterplot/drawPointsRegl.js (100%) rename {src => cellxgene/src}/components/scatterplot/scatterplot.css (100%) rename {src => cellxgene/src}/components/scatterplot/scatterplot.js (100%) rename {src => cellxgene/src}/components/scatterplot/setupScatterplot.js (100%) rename {src => cellxgene/src}/components/scatterplot/util.js (100%) rename {src => cellxgene/src}/globals.js (100%) create mode 100644 cellxgene/src/index.css rename {src => cellxgene/src}/index.js (100%) rename {src => cellxgene/src}/middleware/updateCellColors.js (100%) rename {src => cellxgene/src}/middleware/updateCellSelectionMiddleware.js (100%) rename {src => cellxgene/src}/middleware/updateURLMiddleware.js (100%) rename {src => cellxgene/src}/reducers/cells.js (100%) rename {src => cellxgene/src}/reducers/controls.js (100%) rename {src => cellxgene/src}/reducers/differential.js (100%) rename {src => cellxgene/src}/reducers/expression.js (100%) rename {src => cellxgene/src}/reducers/index.js (100%) rename {src => cellxgene/src}/reducers/initialize.js (100%) rename {src => cellxgene/src}/reducers/responsive.js (100%) rename {src => cellxgene/src}/util/camera.js (100%) rename {src => cellxgene/src}/util/parseRGB.js (100%) rename {src => cellxgene/src}/util/renderQueue.js (100%) rename {src => cellxgene/src}/util/scaleLinear.js (100%) rename {src => cellxgene/src}/util/scaleRGB.js (100%) rename {src => cellxgene/src}/util/schema.js (100%) rename {src => cellxgene/src}/util/typedCrossfilter/bitArray.js (100%) rename {src => cellxgene/src}/util/typedCrossfilter/index.js (100%) rename {src => cellxgene/src}/util/typedCrossfilter/positiveIntervals.js (100%) rename {src => cellxgene/src}/util/typedCrossfilter/util.js (100%) diff --git a/.gitignore b/.gitignore index cd52f01f..25803157 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,36 @@ npm-debug.log .vscode data + + +*.idea* + +__pycache__ +*.DS_Store* + +# Elastic Beanstalk Files +.elasticbeanstalk/* +!.elasticbeanstalk/*.cfg.yml +!.elasticbeanstalk/*.global.yml + +GBM +venv +extesting + +Dockerfile-* +*-data/* +data/* +runServer.py +templates/favicon.png +templates/index.html +templates/service-worker.js +templates/static/* +Graph.dot* + +backend/app/web/static/css/ + +backend/app/web/static/img/ + +backend/app/web/static/js/ + +backend/app/web/templates/index\.html diff --git a/README.md b/README.md index 6a645a93..c0ab504b 100644 --- a/README.md +++ b/README.md @@ -1,9 +1 @@ -# cellxgene - -A React + Redux web application for exploring large scale single cell RNA sequence data. - -##### Quickstart: - -* `npm install` -* `npm start` -* `localhost:3000` +cxg-v2 diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 00000000..2bc0d452 --- /dev/null +++ b/backend/app/__init__.py @@ -0,0 +1,63 @@ +import os + +from flask import Flask, url_for, g +from flask_compress import Compress +from flask_cors import CORS +from flask_restful_swagger_2 import get_swagger_blueprint + +# from werkzeug.contrib.profiler import ProfilerMiddleware + +from .web import webapp +from .rest_api.rest import get_api_resources + +app = Flask(__name__) +Compress(app) +CORS(app) + +#Config +CONFIG_FILE = os.environ.get("CXG_CONFIG_FILE", default="scanpy-test.cfg") +CXG_DIR = os.environ.get("CXG_DIRECTORY", default="/Users/charlotteweaver/Documents/Git/cxg-v2/") +SECRET_KEY = os.environ.get("CXG_SECRET_KEY", default="SparkleAndShine") +# TODO remove the 2 when this is prod +CXG_API_BASE = os.environ.get("CXG_API_BASE2", default="http://0.0.0.0:5005/api/") + +if not CONFIG_FILE: + raise ValueError("No config file set for Flask application") + +app.config.from_pyfile(os.path.join(CXG_DIR, "config", CONFIG_FILE), silent=True) +app.config.update( + SECRET_KEY=SECRET_KEY, + CXG_API_BASE=CXG_API_BASE, +) +app.config.update( + DATA=os.path.join(CXG_DIR, app.config["DATA_DIR"]), +) + +app.config['PROFILE'] = True +# app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[15]) + +# Application Data +data = None +if app.config["ENGINE"] == "scanpy": + from .scanpy_engine.scanpy_engine import ScanpyEngine + data = ScanpyEngine(app.config["DATA"]) + +REACTIVE_LIMIT = 1_000_000 + +# A list of swagger document objects +docs = [] +resources = get_api_resources() +docs.append(resources.get_swagger_doc()) + + +app.register_blueprint(webapp.bp) +app.register_blueprint(resources.blueprint) +app.register_blueprint(get_swagger_blueprint(docs, '/api/swagger', produces=["application/json"], title="cellxgene rest api", + description='An API connecting ExpressionMatrix2 clustering algorithm to cellxgene')) + + +app.add_url_rule('/', endpoint='index') + + +if __name__ == "__main__": + app.run(host='0.0.0.0', debug=True, port=5005) \ No newline at end of file diff --git a/src/components/categorical/categorical.css b/backend/app/driver/__init__.py similarity index 100% rename from src/components/categorical/categorical.css rename to backend/app/driver/__init__.py diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py new file mode 100644 index 00000000..bc49c107 --- /dev/null +++ b/backend/app/driver/driver.py @@ -0,0 +1,57 @@ +from abc import ABC, abstractmethod + +class CXGDriver(metaclass=abc.ABCMeta): + + def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): + self.data = _load_data(data) + + @abstractmethod + @staticmethod + def _load_data(data): + pass + + @abstractmethod + def cells(self): + pass + + @abstractmethod + def cellids(self): + pass + + @abstractmethod + def genes(self): + pass + + @abstractmethod + def filter_cells(self, filter): + """ + Filter cells from data and return a subset of the data + :param filter: + :return: iterator through cells + """ + pass + + @abstractmethod + def metadata_ranges(self, cells_iterator): + """ + """ + pass + + @abstractmethod + def metadata(self, cells_iterator): + """ + """ + pass + + @abstractmethod + def create_graph(self, cells_iterator): + """ + """ + pass + + + @abstractmethod + def diffexp(self, cells_iterator): + """ + """ + pass diff --git a/src/components/expression/expression.css b/backend/app/rest_api/__init__.py similarity index 100% rename from src/components/expression/expression.css rename to backend/app/rest_api/__init__.py diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py new file mode 100644 index 00000000..e33b7aac --- /dev/null +++ b/backend/app/rest_api/rest.py @@ -0,0 +1,215 @@ +from flask import ( + Blueprint, render_template, request, url_for +) +from flask_restful_swagger_2 import Api, swagger, Resource +from ..util.utils import make_payload +from ..util.filter import parse_filter, QueryStringError + + + +class InitializeAPI(Resource): + @swagger.doc({ + 'summary': 'get metadata schema, ranges for values, and cell count to initialize cellxgene app', + 'tags': ['initialize'], + 'parameters': [], + 'responses': { + '200': { + 'description': 'initialization data for UI', + 'examples': { + 'application/json': { + "data": { + "cellcount": 3589, + "options": { + "Sample.type": { + "options": { + "Glioblastoma": 3589 + } + }, + "Selection": { + "options": { + "Astrocytes(HEPACAM)": 714, + "Endothelial(BSC)": 123, + "Microglia(CD45)": 1108, + "Neurons(Thy1)": 685, + "Oligodendrocytes(GC)": 294, + "Unpanned": 665 + } + }, + "Splice_sites_AT.AC": { + "range": { + "max": 1025, + "min": 152 + } + }, + "Splice_sites_Annotated": { + "range": { + "max": 1075869, + "min": 26 + } + } + }, + "schema": { + "CellName": { + "displayname": "Name", + "type": "string", + "variabletype": "categorical" + }, + "Class": { + "displayname": "Class", + "type": "string", + "variabletype": "categorical" + }, + "ERCC_reads": { + "displayname": "ERCC Reads", + "type": "int", + "variabletype": "continuous" + }, + "ERCC_to_non_ERCC": { + "displayname": "ERCC:Non-ERCC", + "type": "float", + "variabletype": "continuous" + }, + "Genes_detected": { + "displayname": "Genes Detected", + "type": "int", + "variabletype": "continuous" + } + }, + "genes": ["1/2-SBSRNA4", "A1BG", "A1BG-AS1"] + + }, + "status": { + "error": False, + "errormessage": "" + } + } + } + } + } + }) + def get(self): + from cxg import data, REACTIVE_LIMIT + return make_payload({ + "schema": data.schema, + "ranges": data.metadata_ranges(data.ADATA, data.schema), + "cellcount": data.cell_count(), + "reactivelimit": REACTIVE_LIMIT, + "genes": data.all_genes(), + }) + +class CellsAPI(Resource): + @swagger.doc({ + 'summary': 'filter based on metadata fields to get a subset cells, expression data, and metadata', + 'tags': ['cells'], + 'description': "Cells takes query parameters defined in the schema retrieved from the /initialize enpoint. " + "
For categorical metadata keys filter based on `key=value`
" + " For continuous metadata keys filter by `key=min,max`
Either value " + "can be replaced by a \*. To have only a minimum value `key=min,\*` To have only a maximum " + "value `key=\*,max`
Graph data (if retrieved) is normalized" + " To only retrieve cells that don't have a value for the key filter by `key`", + 'parameters': [], + + 'responses': { + '200': { + 'description': 'initialization data for UI', + 'examples': { + 'application/json': { + "data": { + "badmetadatacount": 0, + "cellcount": 0, + "cellids": ["..."], + "metadata": [ + { + "CellName": "1001000173.G8", + "Class": "Neoplastic", + "Cluster_2d": "11", + "Cluster_2d_color": "#8C564B", + "Cluster_CNV": "1", + "Cluster_CNV_color": "#1F77B4", + "ERCC_reads": "152104", + "ERCC_to_non_ERCC": "0.562454470489481", + "Genes_detected": "1962", + "Location": "Tumor", + "Location.color": "#FF7F0E", + "Multimapping_reads_percent": "2.67", + "Neoplastic": "Neoplastic", + "Non_ERCC_reads": "270429", + "Sample.name": "BT_S2", + "Sample.name.color": "#AEC7E8", + "Sample.type": "Glioblastoma", + "Sample.type.color": "#1F77B4", + "Selection": "Unpanned", + "Selection.color": "#98DF8A", + "Splice_sites_AT.AC": "102", + "Splice_sites_Annotated": "122397", + "Splice_sites_GC.AG": "761", + "Splice_sites_GT.AG": "125741", + "Splice_sites_non_canonical": "56", + "Splice_sites_total": "126660", + "Total_reads": "1741039", + "Unique_reads": "1400382", + "Unique_reads_percent": "80.43", + "Unmapped_mismatch": "2.15", + "Unmapped_other": "0.18", + "Unmapped_short": "14.56", + "housekeeping_cluster": "2", + "housekeeping_cluster_color": "#AEC7E8", + "recluster_myeloid": "NA", + "recluster_myeloid_color": "NA" + }, + ], + "reactive": True, + "graph": [ + [ + "1001000173.G8", + 0.93836, + 0.28623 + ], + + [ + "1001000173.D4", + 0.1662, + 0.79438 + ] + + ], + "status": { + "error": False, + "errormessage": "" + } + + }, + } + }, + }, + + '400': { + 'description': 'bad query params', + } + } + }) + def get(self): + from cxg import data + payload = { + "cellids": [], + "metadata": [], + "cellcount": 0, + "graph": [], + "ranges": {}, + } + # get query params + filter = parse_filter(request.args, data.schema) + filtered_data = data.filter_cells(filter) + payload["metadata"], payload["cellids"] = data.metadata(filtered_data) + payload["ranges"] = data.metadata_ranges(filtered_data, data.schema) + payload["cellcount"] = len(payload["cellids"]) + payload["graph"] = data.create_graph(filtered_data) + return make_payload(payload) + + +def get_api_resources(): + bp = Blueprint('api', __name__, url_prefix='/api/v2.0') + api = Api(bp, add_api_spec_resource=False) + api.add_resource(InitializeAPI, "/initialize") + api.add_resource(CellsAPI, "/cells") + return api \ No newline at end of file diff --git a/src/index.css b/backend/app/scanpy_engine/__init__.py similarity index 100% rename from src/index.css rename to backend/app/scanpy_engine/__init__.py diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py new file mode 100644 index 00000000..31cec9d7 --- /dev/null +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -0,0 +1,86 @@ +from os.path import join + +import scanpy.api as sc +import numpy as np + +from ..util.schema_parse import parse_schema + +class ScanpyEngine(): + + def __init__(self, dataloc): + self.ADATA = sc.read(join(dataloc, "data.h5ad")) + self.cell_count = self._cell_count + self.schema = parse_schema(join(dataloc, "data_schema.json")) + + def _cell_count(self): + return len(self.ADATA.obs.index) + + def all_cells(self): + return self.ADATA.obs.index.tolist() + + def all_genes(self): + return self.ADATA.var.index.tolist() + + def gene_count(self): + return len(self.ADATA.var.index) + + def filter_cells(self, filter): + cell_idx = np.ones((self.cell_count(),), dtype=bool) + for key, value in filter.items(): + if value["variable_type"] == "categorical": + key_idx = np.in1d(getattr(self.ADATA.obs, key), value["query"]) + cell_idx = np.logical_and(cell_idx, key_idx) + else: + min_ = value["query"]["min"] + max_ = value["query"]["max"] + if min_: + key_idx = np.array((getattr(self.ADATA.obs, key) >= min_).data) + cell_idx = np.logical_and(cell_idx, key_idx) + if max_: + key_idx = np.array((getattr(self.ADATA.obs, key) <= min_).data) + cell_idx = np.logical_and(cell_idx, key_idx) + return self.ADATA[cell_idx, :] + + @staticmethod + def metadata_ranges(data, schema): + metadata_ranges = {} + for field in schema: + if schema[field]["variabletype"] == "categorical": + group_by = field + if group_by == "CellName": + group_by = 'index' + metadata_ranges[field] = {"options": data.obs.groupby(group_by).size().to_dict()} + else: + metadata_ranges[field] = { + "range": { + "min": data.obs[field].min(), + "max": data.obs[field].max() + } + } + return metadata_ranges + + @staticmethod + def metadata(data): + cell_ids = [] + metadata = data.obs.to_dict(orient="records") + # Do i have to loop twice? + for idx, cell_name in enumerate(data.obs.index): + metadata[idx]["CellName"] = cell_name + cell_ids.append(cell_name) + return metadata, cell_ids + + @staticmethod + # TODO cache this + # TODO accept n-dim versions too + # TODO allow optional kw params to function + def create_graph(data, graph_method="umap"): + # Run the graph method + getattr(sc.tl, graph_method)(data) + graph = data.obsm["X_{graph_method}".format(graph_method=graph_method)] + normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) + return np.hstack((data.obs.index.values.reshape(len(data.obs.index), 1), normalized_graph)).tolist() + + + + + diff --git a/backend/app/util/__init__.py b/backend/app/util/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/app/util/filter.py b/backend/app/util/filter.py new file mode 100644 index 00000000..049cf335 --- /dev/null +++ b/backend/app/util/filter.py @@ -0,0 +1,62 @@ +class QueryStringError(Exception): + pass + +def _convert_variable(datatype, variable): + """ + Convert variable to number (float/int) + Used for dataset metadata and for query string + :param datatype: type to convert to + :param variable: value of variable + :return: converted variable + :raises: ValueError + """ + try: + if variable and datatype == "int": + variable = int(variable) + elif variable and datatype == "float": + variable = float(variable) + return variable + except ValueError: + raise + +def parse_filter(filter, schema): + """ + {key: variable_type + value_type + query + + :param filter: + :param schema: + :return: + """ + query = {} + for key in filter: + value = filter.getlist(key) + if key not in schema: + raise QueryStringError("Error: key {} not in metadata schema".format(key)) + query[key] = { + "variable_type": schema[key]["variabletype"], + "value_type": schema[key]["type"] + } + if query[key]["variable_type"] == "categorical": + query[key]["query"] = _convert_variable(query[key]["value_type"], value) + elif query[key]["variable_type"] == "continuous": + value = value[0] + try: + min, max = value.split(",") + except ValueError: + raise QueryStringError("Error: min,max format required for range for key {}, got {}".format(key, value)) + if min == "*": + min = None + if max == "*": + max = None + try: + query[key]["query"] = { + "min": _convert_variable(query[key]["value_type"], min), + "max": _convert_variable(query[key]["value_type"], max) + } + except ValueError: + raise QueryStringError( + "Error: expected type {} for key {}, got {}".format(query[key]["type"], key, value) + ) + return query diff --git a/backend/app/util/schema_parse.py b/backend/app/util/schema_parse.py new file mode 100644 index 00000000..48665e40 --- /dev/null +++ b/backend/app/util/schema_parse.py @@ -0,0 +1,7 @@ +import json + + +def parse_schema(filename): + with open(filename) as fh: + schema = json.load(fh) + return schema diff --git a/backend/app/util/utils.py b/backend/app/util/utils.py new file mode 100644 index 00000000..26fe85eb --- /dev/null +++ b/backend/app/util/utils.py @@ -0,0 +1,34 @@ +import json +from numpy import float32, integer +from flask import make_response, jsonify + +class Float32JSONEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, float32): + return float(obj) + elif isinstance(obj, integer): + return int(obj) + return json.JSONEncoder.default(self, obj) + +def make_payload(data, errormessage="", errorcode=200): + """ + Creates JSON respons for requests + :param data: json data + :param errormessage: error message + :param errorcode: http error code + :return: flask json repsonse + """ + error = False + if errormessage: + error = True + # Questionable + data = json.loads(json.dumps(data, cls=Float32JSONEncoder)) + return make_response(jsonify({ + "data": data, + "status": { + "error": error, + "errormessage": errormessage, + } + }), errorcode) + + diff --git a/backend/app/web/__init__.py b/backend/app/web/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/app/web/templates/swagger.html b/backend/app/web/templates/swagger.html new file mode 100644 index 00000000..e404fec4 --- /dev/null +++ b/backend/app/web/templates/swagger.html @@ -0,0 +1,97 @@ + + + + + CellxGene REST API - Swagger definition + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + diff --git a/backend/app/web/webapp.py b/backend/app/web/webapp.py new file mode 100644 index 00000000..065c169f --- /dev/null +++ b/backend/app/web/webapp.py @@ -0,0 +1,22 @@ +from flask import ( + Blueprint, render_template, request, url_for, current_app +) + +bp = Blueprint('webapp', __name__, template_folder='templates') + +@bp.route('/') +def index(): + url_base = current_app.config["CXG_API_BASE"] + dataset_title = current_app.config["DATASET_TITLE"] + return render_template("index.html", prefix=url_base, datasetTitle=dataset_title) + + +# renders swagger documentation +@bp.route('/swagger') +def swag(): + return render_template("swagger.html") + +# renders swagger documentation +@bp.route('/favicon.png') +def favicon(): + return url_for("static", filename="img/favicon.png") diff --git a/backend/run.py b/backend/run.py new file mode 100644 index 00000000..b7608b65 --- /dev/null +++ b/backend/run.py @@ -0,0 +1,3 @@ +from cxg import app + +app.run(host='0.0.0.0', debug=True, port=5005) diff --git a/backend/test/test_api.py b/backend/test/test_api.py new file mode 100644 index 00000000..36e0e8bd --- /dev/null +++ b/backend/test/test_api.py @@ -0,0 +1,38 @@ +import unittest +import requests +import os + + +class EndPoints(unittest.TestCase): + """Test Case for endpoints""" + + def setUp(self): + # Local + self.url_base = "http://0.0.0.0:5005/api/" + "v2.0/" + # Dev + # self.url_base = "http://api-dev.clustering.czi.technology/api/v0.1/" + # Prod + # self.url_base = "http://api.clustering.czi.technology/api/v0.1/" + self.session = requests.Session() + + def test_cells(self): + url = "{base}{endpoint}?{params}".format(base=self.url_base, endpoint="cells", params="&".join( + [ "louvain=B cells"])) + result = self.session.get(url) + assert result.status_code == 200 + result_data = result.json() + assert "B cells" in result_data["data"]["ranges"]["louvain"]["options"] + url = "{base}{endpoint}?{params}".format(base=self.url_base, endpoint="cells", params="&".join( + ["louvain=B cells", "louvain=Megakaryocytes"])) + result = self.session.get(url) + assert result.status_code == 200 + result_data = result.json() + assert "Megakaryocytes" in result_data["data"]["ranges"]["louvain"]["options"] + + def test_initialize(self): + url = "{base}{endpoint}".format(base=self.url_base, endpoint="initialize") + result = self.session.get(url) + assert result.status_code == 200 + result_data = result.json() + data = {'data': {'cellcount': 2638, 'genes': ['TNFRSF4', 'CPSF3L', 'ATAD3C', 'C1orf86', 'RER1', 'TNFRSF25', 'TNFRSF9', 'CTNNBIP1', 'SRM', 'UBIAD1', 'DRAXIN', 'TNFRSF1B', 'PRDM2', 'EFHD2', 'DDI2', 'SPEN', 'SDHB', 'CAPZB', 'CAMK2N1', 'CDA', 'C1QA', 'C1QC', 'C1QB', 'ZNF436', 'MDS2', 'PITHD1', 'HMGCL', 'TMEM50A', 'LDLRAP1', 'RP11-70P17.1', 'STMN1', 'PDIK1L', 'ZNF593', 'TMEM222', 'PPP1R8', 'PTAFR', 'PHACTR4', 'SNHG12', 'TAF12', 'YTHDF2', 'PUM1', 'SPOCD1', 'TMEM234', 'HDAC1', 'MARCKSL1', 'SMIM12', 'AGO4', 'TRAPPC3', 'EVA1B', 'RRAGC', 'PPIE', 'TRIT1', 'PPT1', 'SMAP2', 'ZFP69', 'CITED4', 'C1orf50', 'EBNA1BP2', 'ST3GAL3', 'DMAP1', 'ERI3', 'PRDX1', 'FAAH', 'ATPAF1', 'EFCAB14', 'PDZK1IP1', 'TAL1', 'SPATA6', 'ZCCHC11', 'SCP2', 'HSPB11', 'SSBP3', 'ACOT11', 'PARS2', 'ATG4C', 'PGM1', 'LRRIQ3', 'ACADM', 'USP33', 'IFI44', 'RP5-887A10.1', 'PRKACB', 'SH3GLB1', 'PKN2', 'GTF2B', 'GBP1', 'GBP4', 'LRRC8C', 'TMED5', 'RP11-421L21.3', 'HENMT1', 'TMEM167B', 'SARS', 'LAMTOR5', 'DRAM2', 'CEPT1', 'DENND2D', 'CHI3L2', 'C1orf162', 'ST7L', 'LRIG2', 'AP4B1-AS1', 'RP5-1073O3.7', 'CD2', 'WARS2', 'FCGR1B', 'LIX1L', 'CD160', 'FCGR1A', 'BOLA1', 'CTSS', 'FAM63A', 'PRUNE', 'MLLT11', 'PI4KB', 'C2CD4D', 'THEM4', 'S100A11', 'S100A12', 'S100A8', 'S100A6', 'SNAPIN', 'CRTC2', 'SLC39A1', 'UBE2Q1', 'CKS1B', 'SLC50A1', 'RIT1', 'PMF1', 'BGLAP', 'GPATCH4', 'ISG20L2', 'HDGF', 'FCRL2', 'CD1C', 'AIM2', 'FCER1A', 'FCRL6', 'DCAF8', 'PEX19', 'CD48', 'F11R', 'PFDN2', 'NIT1', 'DEDD', 'FCER1G', 'FCGR2A', 'FCGR3A', 'FCGR2B', 'FCGR3B', 'FCRLA', 'TMCO1', 'CD247', 'MPC2', 'XCL2', 'XCL1', 'BLZF1', 'F5', 'SELL', 'FMO4', 'KIAA0040', 'QSOX1', 'DHX9', 'NCF2', 'COLGALT2', 'RGS18', 'ZBTB41', 'CSRP1', 'IPO9-AS1', 'PTPN7', 'RABIF', 'SOX13', 'IL24', 'CR1', 'RP1-28O10.1', 'G0S2', 'TRAF3IP3', 'LPGAT1', 'DUSP10', 'RP11-378J18.3', 'DISP1', 'TP53BP2', 'CNIH4', 'LBR', 'SRP9', 'ACBD3', 'PARP1', 'SNAP47', 'C1orf35', 'OBSCN', 'RNF187', 'URB2', 'C1orf198', 'GNPAT', 'SPRTN', 'RP5-827C21.4', 'COA6', 'RP4-781K5.2', 'FH', 'SDCCAG8', 'ACP1', 'TMEM18', 'TSSC1', 'TRAPPC12-AS1', 'ID2', 'KLF11', 'ODC1', 'LPIN1', 'DDX1', 'RDH14', 'ITSN2', 'DNAJC27', 'DNMT3A', 'ASXL2', 'KIF3C', 'MPV17', 'SNX17', 'FOSL2', 'DPY30', 'FAM98A', 'CDC42EP3', 'LINC00211', 'PIGF', 'FBXO11', 'EML6', 'MTIF2', 'CCT4', 'PELI1', 'LGALSL', 'CEP68', 'ACTR2', 'NFU1', 'SNRNP27', 'MPHOSPH10', 'CCT7', 'STAMBP', 'BOLA3', 'PCGF1', 'MRPL19', 'TRABD2A', 'TGOLN2', 'MAT2A', 'VAMP8', 'VAMP5', 'GNLY', 'RMND5A', 'MAL', 'ZAP70', 'EIF5B', 'TGFBRAP1', 'TMEM87B', 'IL1B', 'RABL2A', 'RP11-141B14.1', 'C2orf76', 'TMEM177', 'CCDC115', 'PLEKHB2', 'ZRANB3', 'R3HDM1', 'UBXN4', 'ACVR2A', 'MMADHC', 'PSMD14', 'GCA', 'FASTKD1', 'PPIG', 'METTL8', 'SLC25A12', 'MLTK', 'OLA1', 'NFE2L2', 'TTC30A', 'PLEKHA3', 'TTN-AS1', 'DNAJC10', 'ZC3H15', 'SLC40A1', 'ANKAR', 'C2orf88', 'NABP1', 'SDPR', 'SF3B1', 'PLCL1', 'TYW5', 'ORC2', 'NOP58', 'BMPR2', 'ICOS', 'NDUFS1', 'METTL21A', 'IDH1', 'TNS1', 'CXCR1', 'RNF25', 'CYP27A1', 'GMPPA', 'STK11IP', 'SERPINE2', 'DOCK10', 'MFF', 'TRIP12', 'ATG16L1', 'RAMP1', 'NDUFA10', 'GPR35', 'MTERFD2', 'PASK', 'HDLBP', 'DTYMK', 'ING5', 'PDCD1', 'THUMPD3', 'SETD5', 'ARPC4', 'RPUSD3', 'JAGN1', 'ATG7', 'TMEM40', 'SLC6A6', 'CCDC174', 'UBE2E1', 'TOP2B', 'SLC4A7', 'CMTM7', 'GLB1', 'CRTAP', 'CSRNP1', 'EIF1B', 'ENTPD3-AS1', 'CTNNB1', 'VIPR1', 'NKTR', 'ABHD5', 'ELP6', 'NME6', 'TREX1', 'UQCRC1', 'ARIH2OS', 'QRICH1', 'USP19', 'GPX1', 'TCTA', 'IP6K1', 'FAM212A', 'RBM5', 'GNAI2', 'NPRL2', 'C3orf18', 'HEMK1', 'CISH', 'GLYCTK', 'PBRM1', 'PRKCD', 'CCDC66', 'ARF4', 'DENND6A', 'DNASE1L3', 'THOC7', 'SUCLG2', 'EOGT', 'ARL6IP5', 'PROK2', 'C3orf38', 'MINA', 'TBC1D23', 'NIT2', 'BBX', 'CD47', 'CD96', 'TIGIT', 'B4GALT4', 'TIMMDC1', 'FSTL1', 'HGD', 'GOLGB1', 'EAF2', 'KPNA1', 'PDIA5', 'GATA2', 'RAB7A', 'GP9', 'ISY1', 'ACPP', 'NPHP3', 'UBA5', 'CDV3', 'RAB6B', 'ANAPC13', 'NMNAT3', 'RNF7', 'U2SURP', 'GYG1', 'SIAH2', 'GPR171', 'MBNL1-AS1', 'LINC00886', 'MFSD1', 'SPTSSB', 'RPL22L1', 'TNFSF10', 'ZMAT3', 'RP11-145M9.4', 'ACTL6A', 'TTC14', 'LAMP3', 'KLHL6', 'KLHL24', 'YEATS2', 'PARL', 'SENP2', 'RPL39L', 'RP11-211G3.2', 'IL1RAP', 'FAM43A', 'PPP1R2', 'PCYT1A', 'RNF168', 'PIGX', 'ZNF718', 'PDE6B', 'IDUA', 'SPON2', 'MAEA', 'SLBP', 'ZFYVE28', 'ADD1', 'MFSD10', 'LYAR', 'STX18', 'JAKMIP1', 'AC093323.3', 'S100P', 'GRPEL1', 'FGFBP2', 'MED28', 'DHX15', 'ANAPC4', 'RBPJ', 'PGM2', 'RFC1', 'SMIM14', 'UBE2K', 'COMMD8', 'OCIAD1', 'CHIC2', 'TMEM165', 'PAICS', 'SRP72', 'HOPX', 'IGFBP7', 'YTHDC1', 'IGJ', 'GRSF1', 'IL8', 'PF4', 'PPBP', 'CXCL3', 'CXCL2', 'EREG', 'RCHY1', 'SDAD1', 'CXCL10', 'NUP54', 'SEPT11', 'MRPL1', 'ANTXR2', 'SEC31A', 'COPS4', 'HELQ', 'ARHGAP24', 'SNCA', 'DNAJB14', 'MANBA', 'UBE2D3', 'PPA2', 'INTS12', 'TBCK', 'OSTC', 'PLA2G12A', 'SNHG8', 'C4orf3', 'SPRY1', 'PGRMC2', 'C4orf33', 'RP11-102N12.3', 'ZNF330', 'USP38', 'LSM6', 'LRBA', 'RP11-18H21.1', 'PLRG1', 'PALLD', 'RWDD4', 'RP11-701P16.5', 'KIAA1430', 'MARCH6', 'C5orf42', 'FYB', 'FBXO4', 'NNT-AS1', 'EMB', 'MOCS2', 'GZMK', 'GZMA', 'ZSWIM6', 'DIMT1', 'CWC27', 'TRIM23', 'PIK3R1', 'NAIP', 'GTF2H2', 'NSA2', 'CTD-2015H6.3', 'ZCCHC9', 'ARRDC3', 'RIOK2', 'DCP2', 'AP3S1', 'COMMD10', 'CEP120', 'ISOC1', 'HINT1', 'SLC22A4', 'C5orf56', 'KIF3A', 'C5orf15', 'CTB-113I20.2', 'PPP2CA', 'DDX46', 'H2AFY', 'KDM3B', 'MZB1', 'UBE2D2', 'PURA', 'HBEGF', 'ANKHD1', 'SRA1', 'NDUFA2', 'WDR55', 'DIAPH1', 'RNF14', 'NR3C1', 'YIPF5', 'PRELID2', 'LARS', 'CSNK1A1', 'CCDC69', 'SPARC', 'FAXDC2', 'HAVCR2', 'MED7', 'UBLCP1', 'TTC1', 'CCNG1', 'RARS', 'ATP6V0E1', 'UIMC1', 'LMAN2', 'RGS14', 'DOK3', 'SCGB3A1', 'RP11-532F6.3', 'SERPINB1', 'LYRM4', 'F13A1', 'RIOK1', 'TMEM14C', 'TMEM14B', 'PHACTR1', 'NOL7', 'MCUR1', 'JARID2', 'GMPR', 'ACOT13', 'RP11-367G6.3', 'HIST1H2AC', 'BTN3A2', 'BTN3A1', 'ABT1', 'HIST1H2BJ', 'HIST1H2AH', 'HIST1H1B', 'FLOT1', 'IER3', 'XXbac-BPG299F13.17', 'NFKBIL1', 'LTB', 'LST1', 'NCR3', 'AIF1', 'CSNK2B', 'LY6G5B', 'LY6G6F', 'C6orf25', 'EHMT2', 'PPT2-EGFL8', 'AGPAT1', 'HLA-DRB1', 'HLA-DQA1', 'HLA-DQB1', 'HLA-DOB', 'PSMB8', 'HLA-DMB', 'HLA-DMA', 'HLA-DPA1', 'HLA-DPB1', 'RGL2', 'TAPBP', 'DEF6', 'FKBP5', 'STK38', 'SRSF3', 'OARD1', 'TREML1', 'RPL7L1', 'PTCRA', 'CNPY3', 'KLC4', 'CRIP3', 'ABCC10', 'YIPF3', 'GTPBP2', 'RSPH9', 'MRPS18A', 'PLA2G7', 'CD2AP', 'MCM3', 'PHF3', 'SH3BGRL2', 'ELOVL4', 'SNX14', 'SLC35A1', 'PNRC1', 'LYRM2', 'MAP3K7', 'MANEA-AS1', 'NDUFAF4', 'SNX3', 'CDC40', 'CDK19', 'HDAC2', 'ZUFSP', 'CEP85L', 'SMPDL3A', 'ECHDC1', 'ARHGAP18', 'SAMD3', 'LINC01013', 'TBPL1', 'SGK1', 'RP3-325F22.5', 'ABRACL', 'LTV1', 'SF3B5', 'STX11', 'RP11-545I5.3', 'PPIL4', 'GINM1', 'PCMT1', 'TMEM242', 'SNX9', 'SERAC1', 'DYNLT1', 'RP1-111C20.4', 'WTAP', 'ACAT2', 'TCP1', 'AC147651.3', 'NUDT1', 'BRAT1', 'IQCE', 'TNRC18', 'DAGLB', 'C7orf26', 'PHF14', 'ARL4A', 'HDAC9', 'IL6', 'NUPL2', 'AC005082.12', 'SKAP2', 'JAZF1', 'CHN2', 'GARS', 'NT5C3A', 'HERPUD2', 'STK17A', 'BLVRA', 'URGCP', 'UBE2D4', 'LINC00957', 'AEBP1', 'POLD2', 'DDX56', 'CCM2', 'CCT6A', 'ERV3-1', 'ZNF92', 'GUSB', 'RP11-792A8.4', 'LAT2', 'RFC2', 'YWHAG', 'FGL2', 'TMEM60', 'ABCB1', 'RBM48', 'SAMD9L', 'GNG11', 'BET1', 'ARPC1B', 'LRCH4', 'ALKBH4', 'DNAJC2', 'CTB-152G17.6', 'PRKAR2B', 'HBP1', 'PNPLA8', 'CAPZA2', 'SND1', 'ATP6V1F', 'TSPAN33', 'RP11-138A9.2', 'MKLN1', 'EXOC4', 'TMEM140', 'WDR91', 'MRPS33', 'RP5-894A10.2', 'SSBP1', 'ZYX', 'ZNF212', 'ZNF467', 'ATP6V0E2', 'GIMAP7', 'GIMAP4', 'GIMAP2', 'GIMAP5', 'CHPF2', 'SMARCD3', 'LINC01003', 'RP11-5C23.1', 'PAXIP1-AS1', 'PTPRN2', 'GTPBP6', 'ARSD', 'RP11-706O15.1', 'HCCS', 'ARHGAP6', 'PRPS2', 'RAB9A', 'REPS2', 'SH3KBP1', 'SMS', 'PRDX4', 'SAT1', 'ZFX', 'MID1IP1', 'KRBOX4', 'CDK16', 'RBM3', 'PQBP1', 'SLC35A2', 'OTUD5', 'PRAF2', 'WDR45', 'GPKOW', 'SYP', 'CCDC22', 'MAGEH1', 'PJA1', 'PDZD11', 'NONO', 'P2RY10', 'ITM2A', 'SYTL4', 'BTK', 'ARMCX5', 'BEX4', 'TCEAL8', 'TCEAL4', 'MORF4L2', 'NXT2', 'WDR44', 'PGRMC1', 'RNF113A', 'NKAP', 'LAMP2', 'CUL4B', 'C1GALT1C1', 'RP1-315G1.3', 'SLC25A14', 'HPRT1', 'FAM127A', 'FHL1', 'IDH3G', 'PDZD4', 'TKTL1', 'MPP1', 'FBXO25', 'TDRP', 'MYOM2', 'LONRF1', 'DMTN', 'SLC39A14', 'ADAM28', 'CLU', 'PNOC', 'HMBOX1', 'IDO1', 'RP11-589C21.6', 'AP3M2', 'VDAC3', 'SLC20A2', 'FNTA', 'LYPLA1', 'NSMAF', 'RAB2A', 'CHD7', 'RRS1', 'C8orf44', 'STAU2', 'ZBTB10', 'RP11-219B4.7', 'CA2', 'TMEM55A', 'KIAA1429', 'DPY19L4', 'MTERFD1', 'CPQ', 'POLR2K', 'ATP6V1C1', 'NUDCD1', 'MED30', 'DERL1', 'WDYHV1', 'RNF139', 'KIAA0196', 'SLA', 'CASC7', 'LYPD2', 'TOP1MT', 'NAPRT1', 'SHARPIN', 'MAF1', 'VPS28', 'RCL1', 'CD274', 'CDKN2A', 'DNAJA1', 'AQP3', 'ENHO', 'GALT', 'STOML2', 'CD72', 'TPM2', 'GNE', 'PAX5', 'FXN', 'ABHD17B', 'VPS13A', 'TLE4', 'SPIN1', 'FAM120A', 'C9orf3', 'PTCH1', 'ERCC6L2', 'HEMGN', 'TRIM14', 'INVS', 'SMC2', 'CTNNAL1', 'INIP', 'GSN', 'PTGS1', 'ARPC5L', 'GOLGA1', 'SCAI', 'PPP6C', 'PTGES2', 'C9orf16', 'TRUB2', 'TOR1A', 'USP20', 'POMT1', 'UCK1', 'SETX', 'GFI1B', 'GBGT1', 'SURF6', 'SURF1', 'SARDH', 'RXRA', 'FCN1', 'C9orf69', 'EGFL7', 'TMEM141', 'RABL6', 'PHPT1', 'PTGDS', 'C9orf142', 'CLIC3', 'NELFB', 'MRPL41', 'C9orf37', 'IDI1', 'AKR1C3', 'ATP5C1', 'SEC61A2', 'NUDT5', 'CDC123', 'CAMK1D', 'FAM107B', 'RP11-398C13.6', 'RP11-390B4.5', 'MLLT10', 'ARHGAP21', 'ENKUR', 'MAP3K8', 'KIF5B', 'RP11-324I22.4', 'RP11-162G10.5', 'ZNF32', 'ZFAND4', 'NCOA4', 'ZWINT', 'CISD1', 'UBE2D1', 'TFAM', 'REEP3', 'SIRT1', 'PBLD', 'HNRNPH3', 'SRGN', 'TACR2', 'TSPAN15', 'PRF1', 'MICU1', 'CAMK2G', 'RP11-178G16.4', 'ZNF503', 'PPIF', 'ATAD1', 'IFIT2', 'IFIT1', 'IFIT5', 'MARCH5', 'EXOC6', 'BLNK', 'ARHGAP19', 'FRAT1', 'NDUFB8-1', 'MRPL43', 'LZTS2', 'FBXW4', 'TRIM8', 'C10orf32', 'GSTO1', 'XPNPEP1', 'SHOC2', 'VTI1A', 'PRDX3', 'PLEKHA1', 'BUB3', 'OAT', 'CTBP2', 'MGMT', 'GLRX3', 'STK32C', 'ECHS1', 'SYCE1', 'SCGB1C1', 'IFITM3', 'PHRF1', 'IRF7', 'TMEM80', 'TALDO1', 'MOB2', 'TNNI2', 'KCNQ1OT1', 'SLC22A18AS', 'NAP1L4', 'CARS', 'ZNF195', 'TIMM10B', 'TAF10', 'RIC3', 'TMEM9B', 'DENND5A', 'SWAP70', 'ZBED5-AS1', 'PSMA1', 'SAAL1', 'CAT', 'PRR5L', 'API5', 'CD82', 'PEX16', 'DGKZ', 'DDB2', 'MADD', 'CELF1', 'MTCH2', 'FNBP4', 'UBE2L6', 'TMX2', 'CTNND1', 'RP11-142C4.6', 'MS4A6A', 'MS4A1', 'PTGDR2', 'PRPF19', 'TMEM138', 'SDHAF2', 'FADS1', 'AP003733.1', 'UBXN1', 'GNG3', 'TAF6L', 'RP11-727F15.9', 'OTUB1', 'FERMT3', 'RASGRP2', 'AP001462.6', 'ARL2', 'SYVN1', 'CTSW', 'PACS1', 'RAB1B', 'RBM4', 'RCE1', 'AP003419.16', 'PTPRCAP', 'CORO1B', 'PITPNM1', 'GSTP1', 'MRPL21', 'CTTN', 'LAMTOR1', 'FOLR3', 'ARAP1', 'RELT', 'PGM2L1', 'XRRA1', 'AP001189.4', 'CLNS1A', 'PICALM', 'PRSS23', 'RAB38', 'SMCO4', 'TAF1D', 'MRE11A', 'CWC15', 'CASP4', 'PPP2R1B', 'RBM7', 'REXO2', 'PCSK7', 'CEP164', 'RNF26', 'NRGN', 'ESAM', 'STT3A', 'RPUSD4', 'SRPR', 'SENCR', 'JAM3', 'VPS26B', 'THYN1', 'WNK1', 'FBXL14', 'ADIPOR2', 'CCND2', 'CD9', 'TNFRSF1A', 'MRPL51', 'IFFO1', 'ACRBP', 'USP5', 'SPSB2', 'EMG1', 'CLSTN3', 'CD163', 'CLEC4C', 'KLRG1', 'KLRB1', 'CLEC2B', 'CLEC1B', 'KLRC1', 'RP11-291B21.2', 'PLBD1', 'GOLT1B', 'TM7SF3', 'CCDC91', 'DENND5B', 'RP11-428G5.5', 'SLC2A13', 'LRRK2', 'PRICKLE1', 'IRAK4', 'RP11-493L12.4', 'SLC48A1', 'ASB8', 'RHEBL1', 'TMBIM6', 'BCDIN3D', 'SMARCD1', 'ITGB7', 'C12orf10', 'CBX5', 'NCKAP1L', 'BLOC1S1', 'GDF11', 'ORMDL2', 'WIBG', 'SUOX', 'SMARCC2', 'IL23A', 'BAZ2A', 'TMEM194A', 'R3HDM2', 'DTX3', 'XPOT', 'GNS', 'TMBIM4-1', 'THAP2', 'RAB21', 'TBC1D15', 'ATXN7L3B', 'PAWR', 'TMTC2', 'LINC00936', 'MRPL42', 'NDUFA12', 'NR2C1', 'ACTR6', 'GNPTAB', 'TDG', 'HCFC2', 'C12orf45', 'PWP1', 'SELPLG', 'CORO1C', 'USP30', 'GLTP', 'GIT2', 'HVCN1', 'ALDH2', 'TMEM116', 'NAA25', 'RPH3A', 'OAS1', 'FBXO21', 'RFC5', 'TAOK3', 'DYNLL1', 'MLEC', 'OASL', 'ORAI1', 'SETD1B', 'CLIP1', 'RILPL2', 'SNRNP35', 'EIF2B1', 'NCOR2', 'NOC4L', 'MRP63', 'GTF3A', 'MTIF3', 'FRY-AS1', 'N4BP2L1', 'SPG20', 'ALG5', 'EXOSC8', 'MTRF1', 'DNAJC15', 'CCDC122', 'TSC22D1', 'DLEU7', 'RNASEH2B', 'MZT1', 'DIS3', 'MYCBP2', 'RBM26-AS1', 'UBAC2', 'GPR183', 'CLYBL', 'ARGLU1', 'ABHD13', 'TNFSF13B', 'ARHGEF7', 'MCF2L', 'CDC16', 'RPPH1', 'METTL3', 'CMTM5', 'DHRS4', 'PSME1', 'RP11-468E2.4', 'IRF9', 'CHMP4A', 'MDP1', 'GMPR2', 'TINF2', 'CIDEB', 'LTB4R', 'GZMH', 'GZMB', 'SCFD1', 'AP4S1', 'EAPP', 'PPP2R3C', 'FBXO33', 'FKBP3', 'MIS18BP1', 'NEMF', 'ARF6', 'C14orf166', 'PTGDR', 'PSMC6', 'CGRRF1', 'MAPK1IP1L', 'LGALS3', 'RP11-349A22.5', 'ARID4A', 'JKAMP', 'MNAT1', 'CTD-2302E22.4', 'ATP6V1D', 'EIF2S1', 'ARG2', 'VTI1B', 'RAD51B', 'DCAF5', 'ERH', 'SRSF5', 'PCNX', 'RBM25', 'NUMB', 'LIN52', 'NPC2', 'ISCA2', 'DLST', 'RPS6KL1', 'RP11-950C14.3', 'C14orf1', 'RP11-488C13.5', 'GSTZ1', 'AHSA1', 'SNW1', 'SEL1L', 'SPATA7', 'TTC8', 'TRIP11', 'ATXN3', 'IFI27', 'DICER1', 'TCL1B', 'TCL1A', 'RP11-164H13.1', 'HSP90AA1', 'ANKRD9', 'CDC42BPB', 'TNFAIP2', 'EIF5', 'TRMT61A', 'BAG5', 'SIVA1', 'PLD4', 'C14orf80', 'AL928768.3', 'KIAA0125', 'UBE3A', 'ATP10A', 'KLF13', 'RP11-1000B6.3', 'ARHGAP11A', 'DPH6', 'THBS1', 'EIF2AK4', 'PLCB2', 'C15orf57', 'RPUSD2', 'RMDN3', 'TMEM87A', 'ZNF106', 'TMEM62', 'ADAL', 'PDIA3', 'CASC4', 'TRIM69', 'USP8', 'SPPL2A', 'RP11-430B1.2', 'ARPP19', 'RP11-139H15.1', 'TCF12', 'LINC00926', 'ADAM10', 'MYO1E', 'BNIP2', 'NARG2', 'RP11-219B17.1', 'RORA', 'VPS13C', 'TPM1', 'RAB8B', 'APH1B', 'FAM96A', 'KIAA0101', 'CLPX', 'AAGAB', 'C15orf61', 'FEM1B', 'EDC3', 'COMMD4', 'NEIL1', 'SIN3A', 'SCAPER', 'RCN2', 'HMG20A', 'ST20', 'BCL2A1', 'MESDC2', 'IL16', 'WHAMM', 'HOMER2', 'FANCI', 'IDH2', 'UNC45A', 'HDDC3', 'CHD2', 'ARRDC4', 'LYSMD4', 'TARSL2', 'POLR3K', 'HBA1', 'LUC7L', 'RAB40C', 'C16orf13', 'STUB1', 'FAM173A', 'RPUSD1', 'NME3', 'HAGH', 'NDUFB10', 'GFER', 'IL32', 'ZNF263', 'CORO7', 'DNAJA3', 'NUDT16L1', 'CARHSP1', 'USP7', 'ATF7IP2', 'DEXI', 'LITAF', 'TNFRSF17', 'PDXDC1', 'FOPNL', 'COQ7', 'CCP110', 'IGSF6', 'C16orf52', 'POLR3E', 'GGA2', 'EARS2', 'PRKCB', 'RBBP6', 'RABEP2', 'CD19', 'SPNS1', 'SNX29P2', 'C16orf54', 'TMEM219', 'TAOK2', 'YPEL3', 'SEPHS2', 'ZNF747', 'ZNF688', 'PHKG2', 'STX4', 'FUS', 'PYCARD', 'TGFB1I1', 'C16orf58', 'RP11-42I10.1', 'CNEP1R1', 'SNX20', 'AKTIP', 'BBS2', 'CPNE2', 'ARL2BP', 'CIAPIN1', 'GPR56', 'KIFC3', 'C16orf80', 'GOT2', 'FAM96B', 'CES4A', 'TMEM208', 'ACD', 'TANGO6', 'CYB5B', 'NFAT5', 'ST3GAL2', 'RP11-432I5.1', 'ATXN1L', 'HP', 'PSMD7', 'RP11-252A24.3', 'GABARAPL2', 'KARS', 'TERF2IP', 'COTL1', 'C16orf74', 'IRF8', 'BANP', 'CYBA', 'MVD', 'SPG7', 'ZNF276', 'TIMM22', 'YWHAE', 'PITPNA-AS1', 'PRPF8', 'SERPINF1', 'SMYD4', 'PAFAH1B1', 'SHPK-1', 'P2RX5', 'ARRB2', 'PSMB6', 'GP1BA', 'SLC25A11', 'ZNF232', 'ZNF594', 'TXNDC17', 'ALOX12', 'CLEC10A', 'ASGR1', 'ACADVL', 'ELP5', 'ACAP1', 'TMEM102', 'TNFSF12', 'AC113189.5', 'SAT2', 'C17orf59', 'ADPRM', 'UBB', 'TRPV2', 'PLD6', 'NT5M', 'MED9', 'RASD1', 'PEMT', 'SREBF1', 'TRIM16L', 'GRAP', 'IFT20', 'POLDIP2', 'TMEM199', 'PROCA1', 'RAB34', 'NEK8', 'PHF12', 'ADAP2', 'NF1', 'UTP6', 'CCL2', 'SLFN5', 'SLFN12', 'CCL5', 'CCL3', 'CCL4', 'CCL4L1', 'GGNBP2', 'MRM1', 'AATF', 'TADA2A', 'MLLT6', 'RARA', 'CTD-2267D19.2', 'RP5-1028K7.2', 'DNAJC7', 'NKIRAS2', 'RP11-400F19.6', 'MLX', 'TUBG2', 'VPS25', 'RUNDC1', 'IFI35', 'NBR1', 'DHX8', 'RP11-527L4.5', 'HDAC5', 'GRN', 'ITGA2B', 'HEXIM2', 'RP11-798G7.6', 'GOSR2', 'ITGB3', 'OSBPL7', 'ABI3', 'PDK2', 'SAMD14', 'LRRC59', 'ABCC3', 'LUC7L3', 'MMD', 'NOG', 'SCPEP1', 'MRPS23', 'BZRAP1-AS1', 'SEPT4', 'YPEL2', 'INTS2', 'CYB561', 'LIMD2', 'PSMC5', 'CD79B', 'ICAM2', 'TEX2', 'NOL11', 'ARSG', 'CTD-2006K23.1', 'NAT9', 'TMEM104', 'ATP5H', 'SLC16A5', 'ARMC7', 'NT5C', 'GGA3', 'GRB2', 'SMIM5', 'GALK1', 'SPHK1', 'USP36', 'RNF213', 'RP11-1055B8.7', 'OXLD1', 'ARL16', 'ARHGDIA', 'STRA13', 'RFNG', 'GPS1', 'C17orf62', 'FN3KRP', 'YES1', 'SMCHD1', 'RP13-270P17.3', 'RALBP1', 'VAPA', 'PSMG2', 'OSBPL1A', 'RNF125', 'ZNF397', 'INO80C', 'ATP5A1', 'CXXC1', 'NARS', 'MALT1', 'RP11-879F14.2', 'TMX3', 'NFATC1', 'RBCK1', 'RP11-314N13.3', 'SIRPG', 'SNRPB', 'ITPA', 'C20orf27', 'PRNP', 'PCNA', 'CRLS1', 'ANKEF1', 'MKKS', 'TASP1', 'SNX5', 'RIN2', 'NAA20', 'CD93', 'CST3', 'CST7', 'ABHD12', 'PLAGL2', 'SNTA1', 'NECAB3', 'PXMP4', 'RALY', 'PIGU', 'UQCC1', 'RBM39', 'AAR2', 'MYL9', 'RPN2', 'BLCAP', 'CTNNBL1', 'MAFB', 'SRSF6', 'TTPAL', 'PKIG', 'YWHAB', 'DNTTIP1', 'UBE2C', 'MMP9', 'LINC00494', 'STAU1', 'CEBPB', 'KCNG1', 'ATP9A', 'FAM210B', 'RTFDC1', 'ZBP1', 'PMEPA1', 'STX16', 'TUBB1', 'PSMA7', 'DIDO1', 'GID8', 'TPD52L2', 'TCEA2', 'RGS19', 'PRSS57', 'ELANE', 'POLR2E', 'ATP5D', 'C19orf24', 'MUM1', 'ATP8B3', 'PLEKHJ1', 'GADD45B', 'SLC39A3', 'NFIC', 'DOHH', 'TBXA2R', 'SIRT6', 'CCDC94', 'FEM1A', 'SAFB2', 'DUS3L', 'VMAC', 'ALKBH7', 'DENND1C', 'PCP2', 'RETN', 'MAP2K7', 'CD320', 'RAB11B', 'MARCH2', 'HNRNPM', 'ZNF559', 'ZNF561', 'CDC37', 'S1PR5', 'ILF3-AS1', 'ILF3', 'C19orf52', 'SMARCA4', 'TMEM205', 'ZNF653', 'ECSIT', 'ELOF1', 'ZNF69', 'ZNF799', 'FBXW9', 'HOOK2', 'RAD23A', 'IL27RA', 'SAMD1', 'PRKACA', 'ZNF333', 'AC004257.3', 'AKAP8', 'TPM4', 'FAM32A', 'CHERP', 'SMIM7', 'MYO9B', 'BABAM1', 'MVB12A', 'SLC27A1', 'COLGALT1', 'INSL3', 'CCDC124', 'IFI30', 'JUND', 'ELL', 'CRTC1', 'RFXANK', 'NR2C2AP', 'ZNF682', 'ZNF493', 'LINC00662', 'PLEKHF1', 'ANKRD27', 'LSM14A', 'PDCD2L', 'ARHGAP33', 'TYROBP', 'POLR2I', 'TBCB', 'AC092295.7', 'AC074138.3', 'ZNF567', 'PPP1R14A', 'C19orf33', 'KCNK6', 'RASGRP4', 'ACTN4', 'CAPN12', 'HNRNPL', 'MRPS12', 'SAMD4B', 'EID2', 'PSMC4', 'TMEM91', 'ATP5SL', 'CEACAM4', 'CD79A', 'CTC-378H22.1', 'ETHE1', 'ZNF404', 'ZNF45', 'TOMM40', 'RELB', 'PRKD2', 'BBC3', 'C5AR1', 'C5AR2', 'DHX34', 'NAPA-AS1', 'PLA2G4C', 'CYTH2', 'GYS1', 'TRPM4', 'CD37', 'FCGRT', 'PRRG2', 'IL4I1', 'SPIB', 'NKG7', 'ZNF175', 'SIGLEC14', 'FPR1', 'ZNF350', 'ZNF615', 'ZNF841', 'ZNF836', 'ZNF528', 'ZNF468', 'MYADM', 'OSCAR', 'PRPF31', 'MBOAT7', 'LILRA4', 'LAIR1', 'KIR2DL3', 'KIR3DL2', 'FCAR', 'PPP6R1', 'SUV420H2', 'ISOC2', 'ZNF628', 'CTD-2537I9.12', 'EPN1', 'AURKC', 'CTC-444N24.11', 'ZNF587B', 'ZNF256', 'CTD-2368P22.1', 'AC010642.1', 'EIF1AY', 'TPTEP1', 'CECR5', 'PEX26', 'MRPL40', 'CLDN5', 'SEPT5', 'ARVCF', 'PPIL2', 'IGLL5', 'DDT', 'GUCD1', 'EWSR1', 'GAS2L1', 'NEFH', 'ZMAT5', 'RFPL2', 'FBXO7', 'HMGXB4', 'EIF3D', 'PVALB', 'MPST', 'LGALS2', 'SH3BP1', 'LGALS1', 'ANKRD54', 'DDX17', 'APOBEC3A', 'APOBEC3B', 'APOBEC3G', 'RPS19BP1', 'ADSL', 'PHF5A', 'DESI1', 'WBP2NL', 'SMDT1', 'PACSIN2', 'PARVB', 'LDOC1L', 'PRR5', 'ATXN10', 'TTC38', 'CTA-29F11.1', 'CRELD2', 'LMF2', 'TYMP', 'RABL2B', 'SAMSN1', 'USP25', 'MAP3K7CL', 'BACH1', 'MIS18A', 'ATP5O', 'KCNE1', 'TTC3', 'DSCR3', 'BRWD1', 'BACE2', 'SIK1', 'C21orf33', 'ICOSLG', 'SUMO3', 'SLC19A1', 'S100B', 'PRMT2'], 'ranges': {'CellName': {'options': {'AAACATACAACCAC-1': 1, 'AAACATTGAGCTAC-1': 1, 'AAACATTGATCAGC-1': 1, 'AAACCGTGCTTCCG-1': 1, 'AAACCGTGTATGCG-1': 1, 'AAACGCACTGGTAC-1': 1, 'AAACGCTGACCAGT-1': 1, 'AAACGCTGGTTCTT-1': 1, 'AAACGCTGTAGCCA-1': 1, 'AAACGCTGTTTCTG-1': 1, 'AAACTTGAAAAACG-1': 1, 'AAACTTGATCCAGA-1': 1, 'AAAGAGACGAGATA-1': 1, 'AAAGAGACGCGAGA-1': 1, 'AAAGAGACGGACTT-1': 1, 'AAAGAGACGGCATT-1': 1, 'AAAGCAGATATCGG-1': 1, 'AAAGCCTGTATGCG-1': 1, 'AAAGGCCTGTCTAG-1': 1, 'AAAGTTTGATCACG-1': 1, 'AAAGTTTGGGGTGA-1': 1, 'AAAGTTTGTAGAGA-1': 1, 'AAAGTTTGTAGCGT-1': 1, 'AAATCAACAATGCC-1': 1, 'AAATCAACACCAGT-1': 1, 'AAATCAACCAGGAG-1': 1, 'AAATCAACCCTATT-1': 1, 'AAATCAACGGAAGC-1': 1, 'AAATCAACTCGCAA-1': 1, 'AAATCATGACCACA-1': 1, 'AAATCCCTCCACAA-1': 1, 'AAATCCCTGCTATG-1': 1, 'AAATGTTGAACGAA-1': 1, 'AAATGTTGCCACAA-1': 1, 'AAATGTTGTGGCAT-1': 1, 'AAATTCGAAGGTTC-1': 1, 'AAATTCGAATCACG-1': 1, 'AAATTCGAGCTGAT-1': 1, 'AAATTCGAGGAGTG-1': 1, 'AAATTCGATTCTCA-1': 1, 'AAATTGACACGACT-1': 1, 'AAATTGACTCGCTC-1': 1, 'AACAAACTCATTTC-1': 1, 'AACAAACTTTCGTT-1': 1, 'AACAATACGACGAG-1': 1, 'AACACGTGCAGAGG-1': 1, 'AACACGTGGAAAGT-1': 1, 'AACACGTGGAACCT-1': 1, 'AACACGTGGCTACA-1': 1, 'AACACGTGTACGAC-1': 1, 'AACAGCACAAGAGT-1': 1, 'AACATTGATGGGAG-1': 1, 'AACCAGTGATACCG-1': 1, 'AACCCAGATCGCTC-1': 1, 'AACCGATGCTCCCA-1': 1, 'AACCGATGGTCATG-1': 1, 'AACCGATGTTCTAC-1': 1, 'AACCGCCTAGCGTT-1': 1, 'AACCGCCTCTACGA-1': 1, 'AACCTACTGTGAGG-1': 1, 'AACCTACTGTGTTG-1': 1, 'AACCTTACGAGACG-1': 1, 'AACCTTACGCGAGA-1': 1, 'AACCTTACTAACGC-1': 1, 'AACCTTTGGACGGA-1': 1, 'AACCTTTGTACGCA-1': 1, 'AACGCAACAAGTAG-1': 1, 'AACGCATGACCCAA-1': 1, 'AACGCATGCCTTCG-1': 1, 'AACGCATGTACTTC-1': 1, 'AACGCCCTCGGGAA-1': 1, 'AACGCCCTCGTACA-1': 1, 'AACGCCCTGGCATT-1': 1, 'AACGTCGAGTATCG-1': 1, 'AACGTGTGAAAGCA-1': 1, 'AACGTGTGGCGGAA-1': 1, 'AACGTGTGTCCAAG-1': 1, 'AACGTGTGTGCTTT-1': 1, 'AACTACCTTAGAGA-1': 1, 'AACTCACTCAAGCT-1': 1, 'AACTCACTTGGAGG-1': 1, 'AACTCGGAAAGTGA-1': 1, 'AACTCGGAAGGTCT-1': 1, 'AACTCTTGCAGGAG-1': 1, 'AACTGTCTCCCTTG-1': 1, 'AACTTGCTACGCTA-1': 1, 'AACTTGCTGGGACA-1': 1, 'AAGAACGAGTGTTG-1': 1, 'AAGAAGACGTAGGG-1': 1, 'AAGACAGAAGTCTG-1': 1, 'AAGACAGAGGATCT-1': 1, 'AAGACAGATTACCT-1': 1, 'AAGAGATGGGTAGG-1': 1, 'AAGATGGAAAACAG-1': 1, 'AAGATGGAGAACTC-1': 1, 'AAGATGGAGATAAG-1': 1, 'AAGATTACAACCTG-1': 1, 'AAGATTACAGATCC-1': 1, 'AAGATTACCCGTTC-1': 1, 'AAGATTACCGCCTT-1': 1, 'AAGATTACCTCAAG-1': 1, 'AAGATTACTCCTCG-1': 1, 'AAGCAAGAGCGAGA-1': 1, 'AAGCAAGAGCTTAG-1': 1, 'AAGCAAGAGGTGTT-1': 1, 'AAGCACTGAGCAAA-1': 1, 'AAGCACTGCATACG-1': 1, 'AAGCACTGGTTCTT-1': 1, 'AAGCCAACGTGTTG-1': 1, 'AAGCCATGAACTGC-1': 1, 'AAGCCATGACACGT-1': 1, 'AAGCCATGCGTGAT-1': 1, 'AAGCCATGTCTCGC-1': 1, 'AAGCCTGACATGCA-1': 1, 'AAGCCTGACCGAAT-1': 1, 'AAGCGACTCCTCAC-1': 1, 'AAGCGACTGTGTCA-1': 1, 'AAGCGACTTACAGC-1': 1, 'AAGCGACTTTGACG-1': 1, 'AAGCGTACGTCTTT-1': 1, 'AAGGCTTGCGAACT-1': 1, 'AAGGTCACGGTTAC-1': 1, 'AAGGTCACTGTTTC-1': 1, 'AAGGTCACTTCCCG-1': 1, 'AAGGTCTGACAGTC-1': 1, 'AAGGTCTGCAGATC-1': 1, 'AAGTAACTCTGAAC-1': 1, 'AAGTAACTGAGATA-1': 1, 'AAGTAGGATACAGC-1': 1, 'AAGTATACCGAACT-1': 1, 'AAGTCCGACTTGTT-1': 1, 'AAGTCCGATAGAAG-1': 1, 'AAGTCTCTAGTCGT-1': 1, 'AAGTCTCTCGGAGA-1': 1, 'AAGTGGCTTGGAGG-1': 1, 'AAGTTCCTCATTCT-1': 1, 'AAGTTCCTTCTTAC-1': 1, 'AATAAGCTCGAATC-1': 1, 'AATAAGCTCGTTGA-1': 1, 'AATACCCTGGACGA-1': 1, 'AATACCCTGGCATT-1': 1, 'AATACTGAAAGGGC-1': 1, 'AATACTGAATTGGC-1': 1, 'AATAGGGAACCCTC-1': 1, 'AATAGGGAGAATGA-1': 1, 'AATCAAACTATCGG-1': 1, 'AATCCGGAATGCTG-1': 1, 'AATCCTACCGGTAT-1': 1, 'AATCCTTGACGGGA-1': 1, 'AATCCTTGGTGAGG-1': 1, 'AATCGGTGGAACTC-1': 1, 'AATCGGTGTGCTTT-1': 1, 'AATCTAGAAAAGTG-1': 1, 'AATCTAGAATCGGT-1': 1, 'AATCTCACAGCCTA-1': 1, 'AATCTCACTCTAGG-1': 1, 'AATCTCTGAACAGA-1': 1, 'AATCTCTGCTTTAC-1': 1, 'AATGATACACCAAC-1': 1, 'AATGATACGGTCAT-1': 1, 'AATGCGTGACACCA-1': 1, 'AATGCGTGGACGGA-1': 1, 'AATGCGTGGCTATG-1': 1, 'AATGGAGAATCGTG-1': 1, 'AATGGAGATCCTTA-1': 1, 'AATGGCTGACACCA-1': 1, 'AATGGCTGCGTGAT-1': 1, 'AATGGCTGTAAAGG-1': 1, 'AATGGCTGTACTCT-1': 1, 'AATGGCTGTGAAGA-1': 1, 'AATGTAACGGTGGA-1': 1, 'AATGTCCTCTTCTA-1': 1, 'AATGTTGACAGTCA-1': 1, 'AATGTTGAGTTGAC-1': 1, 'AATGTTGATCTACT-1': 1, 'AATTACGAATTCCT-1': 1, 'AATTACGACTTCTA-1': 1, 'AATTACGAGTGAGG-1': 1, 'AATTACGATTGGCA-1': 1, 'AATTCCTGCTCAGA-1': 1, 'AATTGATGTCGCAA-1': 1, 'AATTGTGACTTGGA-1': 1, 'ACAAAGGAGGGTGA-1': 1, 'ACAAATTGATTCTC-1': 1, 'ACAAATTGCTCAGA-1': 1, 'ACAAATTGTTGCGA-1': 1, 'ACAACCGAGGGATG-1': 1, 'ACAACCGAGTTACG-1': 1, 'ACAAGAGAAGTCGT-1': 1, 'ACAAGAGACTTATC-1': 1, 'ACAAGAGAGTTGAC-1': 1, 'ACAATCCTAACCGT-1': 1, 'ACAATCCTTAGCGT-1': 1, 'ACAATTGACTGACA-1': 1, 'ACAATTGATGACTG-1': 1, 'ACACAGACCATACG-1': 1, 'ACACCAGAGGGCAA-1': 1, 'ACACCCTGGTGTTG-1': 1, 'ACACGAACAGTTCG-1': 1, 'ACACGATGACGCAT-1': 1, 'ACACGATGATGTGC-1': 1, 'ACACGATGTCGTAG-1': 1, 'ACACGATGTGGTCA-1': 1, 'ACAGACACGGCATT-1': 1, 'ACAGACACGTTGTG-1': 1, 'ACAGCAACACCTAG-1': 1, 'ACAGCAACCTCAAG-1': 1, 'ACAGGTACCCCACT-1': 1, 'ACAGGTACGCTGTA-1': 1, 'ACAGGTACTGGTGT-1': 1, 'ACAGTCGACCCAAA-1': 1, 'ACAGTCGACCGATA-1': 1, 'ACAGTGACTCACCC-1': 1, 'ACAGTGACTCTATC-1': 1, 'ACAGTGTGGTCACA-1': 1, 'ACAGTGTGTTGCGA-1': 1, 'ACATCACTCTACTT-1': 1, 'ACATGGTGAAGCCT-1': 1, 'ACATGGTGCAACCA-1': 1, 'ACATGGTGCGAGTT-1': 1, 'ACATTCTGGCATAC-1': 1, 'ACATTCTGGGAACG-1': 1, 'ACCAACGACATGCA-1': 1, 'ACCACAGAAAGTAG-1': 1, 'ACCACAGAGTTGGT-1': 1, 'ACCACCTGTGTGCA-1': 1, 'ACCACGCTACAGCT-1': 1, 'ACCACGCTACCCAA-1': 1, 'ACCACGCTGCGAGA-1': 1, 'ACCACGCTGCTGTA-1': 1, 'ACCAGCCTGACAGG-1': 1, 'ACCAGTGAACGGTT-1': 1, 'ACCAGTGAATACCG-1': 1, 'ACCAGTGAGGGATG-1': 1, 'ACCAGTGATGACTG-1': 1, 'ACCATTACCTTCTA-1': 1, 'ACCATTACGAGATA-1': 1, 'ACCATTTGTCATTC-1': 1, 'ACCCAAGAACTGTG-1': 1, 'ACCCAAGAATTCCT-1': 1, 'ACCCAAGAGGACAG-1': 1, 'ACCCAAGATTCACT-1': 1, 'ACCCACTGCGCCTT-1': 1, 'ACCCACTGGACAGG-1': 1, 'ACCCACTGGTTCAG-1': 1, 'ACCCACTGTCGTAG-1': 1, 'ACCCAGCTCAGAAA-1': 1, 'ACCCAGCTGTTAGC-1': 1, 'ACCCAGCTTGCTTT-1': 1, 'ACCCGTTGATGACC-1': 1, 'ACCCGTTGCTGCAA-1': 1, 'ACCCGTTGCTTCTA-1': 1, 'ACCCTCGACCTATT-1': 1, 'ACCCTCGACGGTAT-1': 1, 'ACCCTCGATAAGGA-1': 1, 'ACCCTCGATCAAGC-1': 1, 'ACCGTGCTACCAGT-1': 1, 'ACCGTGCTGGAACG-1': 1, 'ACCTATTGCTGAGT-1': 1, 'ACCTATTGTGCCCT-1': 1, 'ACCTCCGAGTCCTC-1': 1, 'ACCTCCGATATGCG-1': 1, 'ACCTCCGATGCTGA-1': 1, 'ACCTCGTGAACCAC-1': 1, 'ACCTGAGATATCGG-1': 1, 'ACCTGGCTAAGTAG-1': 1, 'ACCTTTGACTCCCA-1': 1, 'ACCTTTGAGGAACG-1': 1, 'ACCTTTGAGGAAGC-1': 1, 'ACGAACACCTTGTT-1': 1, 'ACGAACTGGCTATG-1': 1, 'ACGAAGCTCTCCAC-1': 1, 'ACGAAGCTCTGAGT-1': 1, 'ACGACCCTATCTCT-1': 1, 'ACGACCCTGATGAA-1': 1, 'ACGACCCTTGACAC-1': 1, 'ACGACCCTTGACCA-1': 1, 'ACGAGGGACAGGAG-1': 1, 'ACGAGGGACGAACT-1': 1, 'ACGAGGGATGTAGC-1': 1, 'ACGAGTACCCTAAG-1': 1, 'ACGAGTACGAATCC-1': 1, 'ACGATCGAGGACTT-1': 1, 'ACGATCGAGTCACA-1': 1, 'ACGATGACAATGCC-1': 1, 'ACGATGACTGGTCA-1': 1, 'ACGATTCTACGGGA-1': 1, 'ACGCAATGGTTCAG-1': 1, 'ACGCACCTGTTAGC-1': 1, 'ACGCCACTGAACTC-1': 1, 'ACGCCGGAAACCAC-1': 1, 'ACGCCGGAAAGCCT-1': 1, 'ACGCCGGAAATGCC-1': 1, 'ACGCCTTGCTCCCA-1': 1, 'ACGCGGTGGCGAGA-1': 1, 'ACGCGGTGTGTGGT-1': 1, 'ACGCGGTGTTTGCT-1': 1, 'ACGCTCACAGTACC-1': 1, 'ACGCTCACCCTTGC-1': 1, 'ACGCTGCTGTTCTT-1': 1, 'ACGGAACTCAGATC-1': 1, 'ACGGAACTGTCGTA-1': 1, 'ACGGAGGACTCTTA-1': 1, 'ACGGATTGGGAGGT-1': 1, 'ACGGATTGGTTAGC-1': 1, 'ACGGCTCTGAGCAG-1': 1, 'ACGGCTCTTGCACA-1': 1, 'ACGGTAACCGCTAA-1': 1, 'ACGGTAACCTTCGC-1': 1, 'ACGGTAACGGTGGA-1': 1, 'ACGGTAACTCGCAA-1': 1, 'ACGGTATGAGTCGT-1': 1, 'ACGGTATGGGTATC-1': 1, 'ACGGTATGGTTGTG-1': 1, 'ACGGTCCTAACGGG-1': 1, 'ACGGTCCTCGGGAA-1': 1, 'ACGTAGACAACCAC-1': 1, 'ACGTAGACTACAGC-1': 1, 'ACGTCAGAAACGAA-1': 1, 'ACGTCAGAGAGCTT-1': 1, 'ACGTCAGAGGGATG-1': 1, 'ACGTCCTGATAAGG-1': 1, 'ACGTCCTGTGAACC-1': 1, 'ACGTCGCTCCTGAA-1': 1, 'ACGTCGCTCTATTC-1': 1, 'ACGTCGCTTCTCAT-1': 1, 'ACGTGATGCCATGA-1': 1, 'ACGTGATGGGTCTA-1': 1, 'ACGTGATGTAACCG-1': 1, 'ACGTGATGTGACAC-1': 1, 'ACGTGCCTCCGTAA-1': 1, 'ACGTGCCTTCTATC-1': 1, 'ACGTTACTTTCCAT-1': 1, 'ACGTTGGAAAAGCA-1': 1, 'ACGTTGGAAACCTG-1': 1, 'ACGTTGGACCGTAA-1': 1, 'ACGTTGGAGCCAAT-1': 1, 'ACGTTGGATATGGC-1': 1, 'ACGTTGGATCAGGT-1': 1, 'ACGTTTACATCAGC-1': 1, 'ACTAAAACCCACAA-1': 1, 'ACTAAAACTCGACA-1': 1, 'ACTACGGAATTTCC-1': 1, 'ACTACGGACCTATT-1': 1, 'ACTACGGATCGCTC-1': 1, 'ACTACTACTAAGGA-1': 1, 'ACTAGGTGGAACCT-1': 1, 'ACTAGGTGGAACTC-1': 1, 'ACTATCACCTTGGA-1': 1, 'ACTATCACTGCCAA-1': 1, 'ACTCAGGACTGAAC-1': 1, 'ACTCAGGATCTATC-1': 1, 'ACTCAGGATTCGTT-1': 1, 'ACTCCTCTCAACTG-1': 1, 'ACTCGCACGAAAGT-1': 1, 'ACTCGCACTACGAC-1': 1, 'ACTCTCCTGACACT-1': 1, 'ACTCTCCTGCATAC-1': 1, 'ACTCTCCTGTTTGG-1': 1, 'ACTGAGACAACCAC-1': 1, 'ACTGAGACCCATAG-1': 1, 'ACTGAGACGTTGGT-1': 1, 'ACTGCCACACACGT-1': 1, 'ACTGCCACTCCGTC-1': 1, 'ACTGGCCTTCAGTG-1': 1, 'ACTGTGGACGTGTA-1': 1, 'ACTGTGGATCTAGG-1': 1, 'ACTGTTACCCACAA-1': 1, 'ACTGTTACTGCAGT-1': 1, 'ACTTAAGAACCACA-1': 1, 'ACTTAAGATTACTC-1': 1, 'ACTTAGCTGCGTAT-1': 1, 'ACTTAGCTGGGAGT-1': 1, 'ACTTCAACAAGCAA-1': 1, 'ACTTCAACGTAGGG-1': 1, 'ACTTCCCTTTCCGC-1': 1, 'ACTTCTGACATGCA-1': 1, 'ACTTGACTCCACAA-1': 1, 'ACTTGGGAGAAAGT-1': 1, 'ACTTGGGAGGTTTG-1': 1, 'ACTTGGGATGTGAC-1': 1, 'ACTTGGGATTGACG-1': 1, 'ACTTGTACCTGTCC-1': 1, 'ACTTTGTGGAAAGT-1': 1, 'ACTTTGTGGATAGA-1': 1, 'AGAAACGAAAGTAG-1': 1, 'AGAAAGTGCGCAAT-1': 1, 'AGAAAGTGGGGATG-1': 1, 'AGAACAGAAATGCC-1': 1, 'AGAACAGACGACTA-1': 1, 'AGAACAGAGACAAA-1': 1, 'AGAACGCTTTGCTT-1': 1, 'AGAAGATGTGACTG-1': 1, 'AGAATGGAAGAAGT-1': 1, 'AGAATTTGTAACCG-1': 1, 'AGAATTTGTAGAGA-1': 1, 'AGACACACTGTAGC-1': 1, 'AGACACTGTCAAGC-1': 1, 'AGACCTGAAGTAGA-1': 1, 'AGACCTGACCAACA-1': 1, 'AGACCTGAGGAAGC-1': 1, 'AGACGTACAGAGGC-1': 1, 'AGACGTACCCCTAC-1': 1, 'AGACGTACCTCTTA-1': 1, 'AGACGTACTCGTGA-1': 1, 'AGACTGACCATCAG-1': 1, 'AGACTGACCCTTTA-1': 1, 'AGACTTCTCATGCA-1': 1, 'AGAGATGACAGTCA-1': 1, 'AGAGATGACTGAAC-1': 1, 'AGAGATGAGGTTTG-1': 1, 'AGAGATGATCTCGC-1': 1, 'AGAGATGATTGTGG-1': 1, 'AGAGCGGAGGCAAG-1': 1, 'AGAGTCTGGTCGTA-1': 1, 'AGAGTGCTCAGCTA-1': 1, 'AGAGTGCTCGAATC-1': 1, 'AGAGTGCTGTCATG-1': 1, 'AGAGTGCTGTCCTC-1': 1, 'AGAGTGCTGTGTTG-1': 1, 'AGATATACCCGTAA-1': 1, 'AGATATACGATGAA-1': 1, 'AGATATACTGTTCT-1': 1, 'AGATATTGCCTACC-1': 1, 'AGATATTGGCCAAT-1': 1, 'AGATCGTGTCTGGA-1': 1, 'AGATCGTGTTTGTC-1': 1, 'AGATCTCTATCACG-1': 1, 'AGATTAACGTTCTT-1': 1, 'AGATTCCTATCGTG-1': 1, 'AGATTCCTCACTTT-1': 1, 'AGATTCCTGACGAG-1': 1, 'AGATTCCTGTTCAG-1': 1, 'AGCAAAGATATGCG-1': 1, 'AGCACAACAGTCTG-1': 1, 'AGCACTGAGGGAGT-1': 1, 'AGCACTGATATGCG-1': 1, 'AGCACTGATGCTTT-1': 1, 'AGCACTGATTGCGA-1': 1, 'AGCATCGAAGATCC-1': 1, 'AGCATCGAAGGGTG-1': 1, 'AGCATCGAGCTTCC-1': 1, 'AGCATCGAGTGAGG-1': 1, 'AGCATCGATAACCG-1': 1, 'AGCATGACGATGAA-1': 1, 'AGCCAATGGGGAGT-1': 1, 'AGCCAATGTATCTC-1': 1, 'AGCCACCTGGATCT-1': 1, 'AGCCGGTGCCAATG-1': 1, 'AGCCGGTGTGTTTC-1': 1, 'AGCCGTCTCAATCG-1': 1, 'AGCCGTCTGAGAGC-1': 1, 'AGCCTCACGTTCGA-1': 1, 'AGCCTCACTGTCAG-1': 1, 'AGCCTCTGCAGTTG-1': 1, 'AGCCTCTGCCAATG-1': 1, 'AGCGAACTGGATCT-1': 1, 'AGCGAACTTACTGG-1': 1, 'AGCGATACGGAGCA-1': 1, 'AGCGATTGAGATCC-1': 1, 'AGCGCCGAATCTCT-1': 1, 'AGCGCCGACAGAGG-1': 1, 'AGCGCTCTACCTTT-1': 1, 'AGCGGCACCGGGAA-1': 1, 'AGCGGCTGATGTGC-1': 1, 'AGCGGGCTTGCCAA-1': 1, 'AGCGTAACATGCTG-1': 1, 'AGCGTAACTGAGAA-1': 1, 'AGCTCGCTACTGGT-1': 1, 'AGCTCGCTCTGCTC-1': 1, 'AGCTGAACCATACG-1': 1, 'AGCTGAACCTCTCG-1': 1, 'AGCTGCCTTGGGAG-1': 1, 'AGCTGCCTTTCATC-1': 1, 'AGCTGCCTTTCTGT-1': 1, 'AGCTGTGATCCAAG-1': 1, 'AGCTTTACAAGTAG-1': 1, 'AGCTTTACACCAAC-1': 1, 'AGCTTTACTCTCAT-1': 1, 'AGGAAATGAGGAGC-1': 1, 'AGGAACCTCTTAGG-1': 1, 'AGGAACCTTGCCTC-1': 1, 'AGGAATGATAACGC-1': 1, 'AGGAATGATTTGTC-1': 1, 'AGGAGTCTGGTTTG-1': 1, 'AGGAGTCTTGTCAG-1': 1, 'AGGATAGACATTTC-1': 1, 'AGGATAGAGGATTC-1': 1, 'AGGATGCTACTAGC-1': 1, 'AGGATGCTTTAGGC-1': 1, 'AGGCAACTGAAGGC-1': 1, 'AGGCAGGAGTACCA-1': 1, 'AGGCCTCTAGTCGT-1': 1, 'AGGCCTCTCGGAGA-1': 1, 'AGGCCTCTCGTAAC-1': 1, 'AGGGACGACGTTGA-1': 1, 'AGGGACGAGTCAAC-1': 1, 'AGGGACGAGTTGTG-1': 1, 'AGGGACGATAGAGA-1': 1, 'AGGGACGATGCATG-1': 1, 'AGGGAGTGAGCCTA-1': 1, 'AGGGCCACCATACG-1': 1, 'AGGGCGCTAACCAC-1': 1, 'AGGGCGCTATGGTC-1': 1, 'AGGGTGGACAGTCA-1': 1, 'AGGGTGGACTCAAG-1': 1, 'AGGGTGGAGTTGCA-1': 1, 'AGGGTTTGTTCATC-1': 1, 'AGGTCATGAGTGTC-1': 1, 'AGGTCATGCTTATC-1': 1, 'AGGTCTGATTCTCA-1': 1, 'AGGTGGGAAGAATG-1': 1, 'AGGTGGGAAGTTCG-1': 1, 'AGGTGTTGGTTACG-1': 1, 'AGGTTCGAACCTCC-1': 1, 'AGGTTCGAACGTAC-1': 1, 'AGGTTCGAGGGTGA-1': 1, 'AGTAAGGAGTTTGG-1': 1, 'AGTAAGGATTCTTG-1': 1, 'AGTAATACATCACG-1': 1, 'AGTAATACCGAACT-1': 1, 'AGTAATTGTCCCAC-1': 1, 'AGTACGTGAGGGTG-1': 1, 'AGTACGTGCTGCAA-1': 1, 'AGTACGTGCTTGGA-1': 1, 'AGTACTCTACGTGT-1': 1, 'AGTACTCTCAACCA-1': 1, 'AGTACTCTCGGTAT-1': 1, 'AGTAGGCTTGCCTC-1': 1, 'AGTATAACTTGTCT-1': 1, 'AGTATCCTAGAACA-1': 1, 'AGTCACGATGAGCT-1': 1, 'AGTCAGACGAATAG-1': 1, 'AGTCAGACGCTTAG-1': 1, 'AGTCAGACTAGAGA-1': 1, 'AGTCAGACTGCACA-1': 1, 'AGTCCAGATATCTC-1': 1, 'AGTCCAGATTTCAC-1': 1, 'AGTCGAACCAACCA-1': 1, 'AGTCGCCTCCGTAA-1': 1, 'AGTCTACTAGGGTG-1': 1, 'AGTCTACTTGCATG-1': 1, 'AGTCTTACACCACA-1': 1, 'AGTCTTACTTCGCC-1': 1, 'AGTCTTACTTCGGA-1': 1, 'AGTGACTGCAACTG-1': 1, 'AGTGTTCTAACCTG-1': 1, 'AGTGTTCTATAAGG-1': 1, 'AGTGTTCTCACTTT-1': 1, 'AGTTAAACCACTTT-1': 1, 'AGTTATGAACAGTC-1': 1, 'AGTTATGACTGAGT-1': 1, 'AGTTATGAGTTCAG-1': 1, 'AGTTCTACCAGCTA-1': 1, 'AGTTCTTGAAGCCT-1': 1, 'AGTTGTCTACTACG-1': 1, 'AGTTTAGATGGTCA-1': 1, 'AGTTTCACGGTCTA-1': 1, 'AGTTTGCTACAGTC-1': 1, 'AGTTTGCTACTGGT-1': 1, 'AGTTTGCTCCAAGT-1': 1, 'ATAAACACAGTGCT-1': 1, 'ATAAACACCACCAA-1': 1, 'ATAACAACATGCTG-1': 1, 'ATAACAACGTCTAG-1': 1, 'ATAACAACTTTGTC-1': 1, 'ATAACATGTACTCT-1': 1, 'ATAACCCTGTTGGT-1': 1, 'ATAACCCTTGGTAC-1': 1, 'ATAAGTACGAATGA-1': 1, 'ATAAGTTGGTACGT-1': 1, 'ATAAGTTGTCTAGG-1': 1, 'ATAATCGAGCTGAT-1': 1, 'ATAATCGATGGTTG-1': 1, 'ATAATGACCTACTT-1': 1, 'ATAATGACTCGTGA-1': 1, 'ATACAATGTTAGGC-1': 1, 'ATACCACTCGTACA-1': 1, 'ATACCACTCTAAGC-1': 1, 'ATACCACTGCCAAT-1': 1, 'ATACCGGAATGCTG-1': 1, 'ATACCGGACATTTC-1': 1, 'ATACCGGACTTCGC-1': 1, 'ATACCGGAGGTGTT-1': 1, 'ATACCGGATCTCGC-1': 1, 'ATACCTACGCATCA-1': 1, 'ATACCTTGGGGCAA-1': 1, 'ATACGGACAGACTC-1': 1, 'ATACGGACCTACTT-1': 1, 'ATACGGACGAGGTG-1': 1, 'ATACGGACTATGCG-1': 1, 'ATACGGACTCTGGA-1': 1, 'ATACGTCTTAACGC-1': 1, 'ATACTCTGCTTCGC-1': 1, 'ATACTCTGGTATGC-1': 1, 'ATAGATACCATGGT-1': 1, 'ATAGATACGACGAG-1': 1, 'ATAGATTGGTGTAC-1': 1, 'ATAGCCGAACGGAG-1': 1, 'ATAGCGTGCAGATC-1': 1, 'ATAGCGTGCCCTTG-1': 1, 'ATAGCGTGGTATCG-1': 1, 'ATAGCGTGTCTCTA-1': 1, 'ATAGCTCTCTGATG-1': 1, 'ATAGCTCTGAGGTG-1': 1, 'ATAGGAGAAACAGA-1': 1, 'ATAGGCTGTCAGAC-1': 1, 'ATAGTCCTAGTGTC-1': 1, 'ATAGTCCTTGCATG-1': 1, 'ATAGTCCTTGTCGA-1': 1, 'ATAGTTGACAACTG-1': 1, 'ATAGTTGACCCTCA-1': 1, 'ATAGTTGAGACGTT-1': 1, 'ATAGTTGATAAGCC-1': 1, 'ATATACGAAGCCAT-1': 1, 'ATATACGAATTGGC-1': 1, 'ATATAGTGGAATGA-1': 1, 'ATATGCCTAGATCC-1': 1, 'ATATGCCTGGACAG-1': 1, 'ATATGCCTTCTCTA-1': 1, 'ATATGCCTTGGTAC-1': 1, 'ATCAAATGAGCCTA-1': 1, 'ATCAAATGGGTAAA-1': 1, 'ATCAACCTAAACGA-1': 1, 'ATCAACCTGAGGAC-1': 1, 'ATCAACCTTCTCTA-1': 1, 'ATCAACCTTTGTCT-1': 1, 'ATCACACTTTGTCT-1': 1, 'ATCACGGATTTCGT-1': 1, 'ATCATCTGACACCA-1': 1, 'ATCATGCTAGAGTA-1': 1, 'ATCATGCTGAACCT-1': 1, 'ATCCAGGACGCTAA-1': 1, 'ATCCAGGATGGAAA-1': 1, 'ATCCATACTCCTTA-1': 1, 'ATCCATACTTCATC-1': 1, 'ATCCCGTGCAGTCA-1': 1, 'ATCCCGTGCATGCA-1': 1, 'ATCCCGTGGCTGAT-1': 1, 'ATCCGCACGCATCA-1': 1, 'ATCCTAACGACGGA-1': 1, 'ATCCTAACGCTACA-1': 1, 'ATCGACGAAACTGC-1': 1, 'ATCGACGAATGACC-1': 1, 'ATCGAGTGGACGTT-1': 1, 'ATCGCAGAATCTCT-1': 1, 'ATCGCAGAGTGTCA-1': 1, 'ATCGCCACTGAGGG-1': 1, 'ATCGCCTGGGTCAT-1': 1, 'ATCGCCTGTGGCAT-1': 1, 'ATCGCGCTCAGAGG-1': 1, 'ATCGCGCTGGGATG-1': 1, 'ATCGCGCTTTTCGT-1': 1, 'ATCGGAACCAGTCA-1': 1, 'ATCGGTGAGTCAAC-1': 1, 'ATCGGTGATTGCAG-1': 1, 'ATCGTTTGCCTACC-1': 1, 'ATCGTTTGGGTACT-1': 1, 'ATCGTTTGTGCCAA-1': 1, 'ATCTACACCCGCTT-1': 1, 'ATCTACACCGGGAA-1': 1, 'ATCTCAACAGGAGC-1': 1, 'ATCTCAACCTCGAA-1': 1, 'ATCTCAACCTTGTT-1': 1, 'ATCTGGGAAACCAC-1': 1, 'ATCTGGGAAGTGTC-1': 1, 'ATCTGGGATTCCGC-1': 1, 'ATCTGTTGAACGGG-1': 1, 'ATCTGTTGACCTCC-1': 1, 'ATCTGTTGCCTTCG-1': 1, 'ATCTGTTGGTTGCA-1': 1, 'ATCTTGACACCAAC-1': 1, 'ATCTTGACCTCCCA-1': 1, 'ATCTTTCTGCATCA-1': 1, 'ATCTTTCTGTTTCT-1': 1, 'ATCTTTCTTGTCCC-1': 1, 'ATGAAACTCTGTGA-1': 1, 'ATGAAACTGAGGCA-1': 1, 'ATGAAGGAACAGCT-1': 1, 'ATGAAGGACCTGTC-1': 1, 'ATGAAGGACCTTAT-1': 1, 'ATGAAGGACTAGTG-1': 1, 'ATGAAGGACTTGCC-1': 1, 'ATGACGTGACGACT-1': 1, 'ATGACGTGATCGGT-1': 1, 'ATGAGAGAAAGTGA-1': 1, 'ATGAGAGAACGCAT-1': 1, 'ATGAGAGAAGTAGA-1': 1, 'ATGAGCACACAGCT-1': 1, 'ATGAGCACATCTTC-1': 1, 'ATGATAACTTCACT-1': 1, 'ATGATATGAAACAG-1': 1, 'ATGATATGACTGGT-1': 1, 'ATGATATGAGCACT-1': 1, 'ATGATATGGTCATG-1': 1, 'ATGATATGGTGCTA-1': 1, 'ATGATATGTTGTCT-1': 1, 'ATGCACGAATGTCG-1': 1, 'ATGCACGACTGTAG-1': 1, 'ATGCACGAGAACCT-1': 1, 'ATGCACGAGTTCGA-1': 1, 'ATGCACGATTGGTG-1': 1, 'ATGCAGTGTTACCT-1': 1, 'ATGCAGTGTTCTAC-1': 1, 'ATGCCAGAACGACT-1': 1, 'ATGCCAGACAGTCA-1': 1, 'ATGCCGCTTGAACC-1': 1, 'ATGCGATGCTATGG-1': 1, 'ATGCGATGCTGAGT-1': 1, 'ATGCGATGGTTACG-1': 1, 'ATGCGCCTTCATTC-1': 1, 'ATGCTTTGCGAATC-1': 1, 'ATGCTTTGGGCGAA-1': 1, 'ATGCTTTGTAGTCG-1': 1, 'ATGGACACATCGGT-1': 1, 'ATGGACACGCATCA-1': 1, 'ATGGGTACAACCTG-1': 1, 'ATGGGTACATCGGT-1': 1, 'ATGGGTACTATTCC-1': 1, 'ATGGGTACTGGGAG-1': 1, 'ATGTAAACACCTCC-1': 1, 'ATGTAAACCCGCTT-1': 1, 'ATGTAAACGGGATG-1': 1, 'ATGTAAACTCTCCG-1': 1, 'ATGTAAACTTCACT-1': 1, 'ATGTACCTCAGTCA-1': 1, 'ATGTACCTTAGTCG-1': 1, 'ATGTACCTTTATCC-1': 1, 'ATGTACCTTTCACT-1': 1, 'ATGTCACTAATGCC-1': 1, 'ATGTCACTCTGCTC-1': 1, 'ATGTCGGAGGTGAG-1': 1, 'ATGTTCACAGTCTG-1': 1, 'ATGTTCACCGTAGT-1': 1, 'ATGTTGCTTTCAGG-1': 1, 'ATTAACGATGAGAA-1': 1, 'ATTAACGATGCAAC-1': 1, 'ATTAAGACTGCAGT-1': 1, 'ATTACCTGCCTTAT-1': 1, 'ATTACCTGGAGGAC-1': 1, 'ATTAGATGTTTCAC-1': 1, 'ATTATGGAATCTCT-1': 1, 'ATTCAAGAACGGGA-1': 1, 'ATTCAAGACCTTTA-1': 1, 'ATTCAGCTCATTGG-1': 1, 'ATTCCAACCATTGG-1': 1, 'ATTCCAACTTAGGC-1': 1, 'ATTCGACTCACTAG-1': 1, 'ATTCGACTGAATAG-1': 1, 'ATTCGACTTTTGTC-1': 1, 'ATTCGGGAAAGGCG-1': 1, 'ATTCGGGATTAGGC-1': 1, 'ATTCTTCTGATACC-1': 1, 'ATTGAATGGACGGA-1': 1, 'ATTGATGAAGGTTC-1': 1, 'ATTGATGACTGAGT-1': 1, 'ATTGATGAGCGAAG-1': 1, 'ATTGATGATCTATC-1': 1, 'ATTGCACTGACGGA-1': 1, 'ATTGCACTGAGAGC-1': 1, 'ATTGCACTGGAGCA-1': 1, 'ATTGCACTTAGCCA-1': 1, 'ATTGCACTTGCTTT-1': 1, 'ATTGCTTGTTACTC-1': 1, 'ATTGGTCTGACTAC-1': 1, 'ATTGGTCTTGTCTT-1': 1, 'ATTGTAGATTCCCG-1': 1, 'ATTGTAGATTGCAG-1': 1, 'ATTGTCTGCGTACA-1': 1, 'ATTTAGGAACCATG-1': 1, 'ATTTAGGACAGAGG-1': 1, 'ATTTCCGAGATGAA-1': 1, 'ATTTCCGAGTGCTA-1': 1, 'ATTTCGTGTATGGC-1': 1, 'ATTTCTCTACTTTC-1': 1, 'ATTTCTCTAGCAAA-1': 1, 'ATTTCTCTCACTTT-1': 1, 'ATTTCTCTTCCCAC-1': 1, 'ATTTGCACAAGATG-1': 1, 'CAAAGCACAGCTCA-1': 1, 'CAAAGCACCGTAAC-1': 1, 'CAAAGCACGGTAAA-1': 1, 'CAAAGCTGAAAGTG-1': 1, 'CAAAGCTGTTGCTT-1': 1, 'CAAATATGTGACAC-1': 1, 'CAAATTGAGGGCAA-1': 1, 'CAAATTGATGGAGG-1': 1, 'CAACCAGAAAAGTG-1': 1, 'CAACCAGAAGTGCT-1': 1, 'CAACCAGAGTTCAG-1': 1, 'CAACCAGATAGAAG-1': 1, 'CAACCGCTGTTCAG-1': 1, 'CAACCGCTTTGAGC-1': 1, 'CAACGATGCGCAAT-1': 1, 'CAACGTGACTCCAC-1': 1, 'CAACGTGAGCCATA-1': 1, 'CAACGTGATCAAGC-1': 1, 'CAAGAAGACCACAA-1': 1, 'CAAGAAGACGTCTC-1': 1, 'CAAGAAGATTCTAC-1': 1, 'CAAGACTGACCTGA-1': 1, 'CAAGACTGAGTAGA-1': 1, 'CAAGCTGACCATAG-1': 1, 'CAAGCTGATCTATC-1': 1, 'CAAGGACTGTTCAG-1': 1, 'CAAGGACTTCTTTG-1': 1, 'CAAGGTTGCTCCAC-1': 1, 'CAAGGTTGTCATTC-1': 1, 'CAAGGTTGTCTGGA-1': 1, 'CAAGTCGAAACAGA-1': 1, 'CAAGTCGATAGCGT-1': 1, 'CAATAAACGCCATA-1': 1, 'CAATAATGAACTGC-1': 1, 'CAATATGACATGGT-1': 1, 'CAATATGACCTTCG-1': 1, 'CAATATGACGTTAG-1': 1, 'CAATATGAGGAGCA-1': 1, 'CAATCGGAGAAACA-1': 1, 'CAATCTACTGACTG-1': 1, 'CAATTCACCCAACA-1': 1, 'CAATTCACGATAGA-1': 1, 'CAATTCACTTGTGG-1': 1, 'CAATTCTGCTTGTT-1': 1, 'CAATTCTGGCGTAT-1': 1, 'CACAACGATACGAC-1': 1, 'CACAATCTTGTTCT-1': 1, 'CACAATCTTTCCAT-1': 1, 'CACACCTGCTTGAG-1': 1, 'CACACCTGTATGGC-1': 1, 'CACAGAACCCTTGC-1': 1, 'CACAGAACCTGATG-1': 1, 'CACAGATGGGATTC-1': 1, 'CACAGATGGTTTCT-1': 1, 'CACAGCCTGATACC-1': 1, 'CACAGCCTTGCCAA-1': 1, 'CACAGCCTTGTAGC-1': 1, 'CACAGTGATGAAGA-1': 1, 'CACATACTACAGCT-1': 1, 'CACATGGAACACGT-1': 1, 'CACATGGAAGTCGT-1': 1, 'CACCACTGCCAACA-1': 1, 'CACCACTGGCGAAG-1': 1, 'CACCCATGTTCTGT-1': 1, 'CACCGGGAATCGAC-1': 1, 'CACCGGGACGAGAG-1': 1, 'CACCGGGACGTGTA-1': 1, 'CACCGGGACTTCTA-1': 1, 'CACCGGGACTTGCC-1': 1, 'CACCGGGATTCGGA-1': 1, 'CACCGTACTAAGGA-1': 1, 'CACCGTACTAGCGT-1': 1, 'CACCTGACACCCAA-1': 1, 'CACCTGACCAGAAA-1': 1, 'CACCTGACCTCAAG-1': 1, 'CACCTGACGAAAGT-1': 1, 'CACCTGACTCGTAG-1': 1, 'CACGAAACTTCCGC-1': 1, 'CACGACCTCGATAC-1': 1, 'CACGCTACAGAAGT-1': 1, 'CACGCTACTGTTCT-1': 1, 'CACGGGACAGAGTA-1': 1, 'CACGGGACATAAGG-1': 1, 'CACGGGACGTAGGG-1': 1, 'CACGGGTGCTTCGC-1': 1, 'CACGGGTGGAGGAC-1': 1, 'CACGGGTGTGTTTC-1': 1, 'CACTAACTCCTAAG-1': 1, 'CACTAACTGAAAGT-1': 1, 'CACTAGGATGATGC-1': 1, 'CACTATACCCCGTT-1': 1, 'CACTATACGTTTGG-1': 1, 'CACTGAGACAGTCA-1': 1, 'CACTGCACTTCATC-1': 1, 'CACTGCTGAGACTC-1': 1, 'CACTGCTGGAAAGT-1': 1, 'CACTTAACCGAATC-1': 1, 'CACTTAACCGTACA-1': 1, 'CACTTTGACTCTAT-1': 1, 'CACTTTGAGCTGTA-1': 1, 'CAGAAGCTCTCAAG-1': 1, 'CAGACATGAACGGG-1': 1, 'CAGACATGTCGACA-1': 1, 'CAGACCCTAAGGTA-1': 1, 'CAGACCCTAATGCC-1': 1, 'CAGACCCTAGGAGC-1': 1, 'CAGACTGAGTATGC-1': 1, 'CAGATCGAATGTCG-1': 1, 'CAGATCGACCTGAA-1': 1, 'CAGATCGATATGGC-1': 1, 'CAGATGACATTCTC-1': 1, 'CAGCAATGCCTTCG-1': 1, 'CAGCAATGGAGGGT-1': 1, 'CAGCAATGGTGCTA-1': 1, 'CAGCAATGTCTACT-1': 1, 'CAGCAATGTGACCA-1': 1, 'CAGCAATGTGAGGG-1': 1, 'CAGCACCTAAGCCT-1': 1, 'CAGCACCTAGGCGA-1': 1, 'CAGCACCTGTAGGG-1': 1, 'CAGCATGACAACCA-1': 1, 'CAGCATGAGACGTT-1': 1, 'CAGCCTACCCAACA-1': 1, 'CAGCCTTGCTACCC-1': 1, 'CAGCCTTGGGGACA-1': 1, 'CAGCGGACACCCTC-1': 1, 'CAGCGGACCTTTAC-1': 1, 'CAGCGTCTAAAGCA-1': 1, 'CAGCGTCTTATCGG-1': 1, 'CAGCTAGATGTGAC-1': 1, 'CAGCTCTGAGGCGA-1': 1, 'CAGCTCTGCAAGCT-1': 1, 'CAGCTCTGTCGTAG-1': 1, 'CAGCTCTGTGTGGT-1': 1, 'CAGGAACTAACTGC-1': 1, 'CAGGAACTCTCAGA-1': 1, 'CAGGCCGAACACCA-1': 1, 'CAGGCCGAACACGT-1': 1, 'CAGGCCGAACGACT-1': 1, 'CAGGCCGAATCTCT-1': 1, 'CAGGCCGACTAGCA-1': 1, 'CAGGGCACCATACG-1': 1, 'CAGGGCACCCAACA-1': 1, 'CAGGGCACTCCCGT-1': 1, 'CAGGTAACAGACTC-1': 1, 'CAGGTATGAGTCGT-1': 1, 'CAGGTATGTGCTTT-1': 1, 'CAGGTTGAGGATCT-1': 1, 'CAGTGATGGACGGA-1': 1, 'CAGTGATGGCTAAC-1': 1, 'CAGTGATGGGACAG-1': 1, 'CAGTGATGTAAGGA-1': 1, 'CAGTGATGTACGCA-1': 1, 'CAGTGTGATGTCAG-1': 1, 'CAGTTACTAAGGTA-1': 1, 'CAGTTACTGATAGA-1': 1, 'CAGTTGGAAAGAGT-1': 1, 'CAGTTGGACATACG-1': 1, 'CAGTTTACACACGT-1': 1, 'CAGTTTACCCCAAA-1': 1, 'CATAAAACGGAGCA-1': 1, 'CATAAATGAACTGC-1': 1, 'CATAACCTTCTCCG-1': 1, 'CATACTACCTCGAA-1': 1, 'CATACTACCTGAAC-1': 1, 'CATACTACGTACCA-1': 1, 'CATACTTGGGTTAC-1': 1, 'CATAGTCTAATCGC-1': 1, 'CATAGTCTCACTTT-1': 1, 'CATATAGACTAAGC-1': 1, 'CATATAGATCAGGT-1': 1, 'CATCAACTAGAAGT-1': 1, 'CATCAACTCCCTCA-1': 1, 'CATCAGGACTTCCG-1': 1, 'CATCAGGATAGCCA-1': 1, 'CATCAGGATCCTAT-1': 1, 'CATCAGGATGCACA-1': 1, 'CATCAGGATTTCGT-1': 1, 'CATCATACCGCATA-1': 1, 'CATCATACGGAGCA-1': 1, 'CATCATACTCAAGC-1': 1, 'CATCGCTGGGATCT-1': 1, 'CATCGCTGTGGCAT-1': 1, 'CATCGGCTATGCTG-1': 1, 'CATCGGCTTTGGCA-1': 1, 'CATCTCCTATGTGC-1': 1, 'CATCTCCTCGAACT-1': 1, 'CATGAGACACGGGA-1': 1, 'CATGAGACGTTGAC-1': 1, 'CATGAGACTCGCCT-1': 1, 'CATGCCACGGGTGA-1': 1, 'CATGCCACTGCCAA-1': 1, 'CATGCGCTAGTCAC-1': 1, 'CATGCGCTCAGATC-1': 1, 'CATGCGCTTTGCAG-1': 1, 'CATGGCCTAGGGTG-1': 1, 'CATGGCCTGTGCAT-1': 1, 'CATGTACTATCGTG-1': 1, 'CATGTTACAGTCGT-1': 1, 'CATGTTACCTGAGT-1': 1, 'CATGTTTGGGGATG-1': 1, 'CATTACACACGGAG-1': 1, 'CATTACACCAACTG-1': 1, 'CATTACACGGAGTG-1': 1, 'CATTACACTACTCT-1': 1, 'CATTAGCTCCACAA-1': 1, 'CATTGACTAGCGGA-1': 1, 'CATTGGGACTCGAA-1': 1, 'CATTGTACAGCGTT-1': 1, 'CATTGTACTCGATG-1': 1, 'CATTGTACTTATCC-1': 1, 'CATTGTACTTTGCT-1': 1, 'CATTGTTGCTAGTG-1': 1, 'CATTTCGACTCTAT-1': 1, 'CATTTCGAGATACC-1': 1, 'CATTTGACCACACA-1': 1, 'CATTTGACCCTGAA-1': 1, 'CATTTGTGACGACT-1': 1, 'CATTTGTGCATTGG-1': 1, 'CATTTGTGCGGAGA-1': 1, 'CATTTGTGGGATCT-1': 1, 'CCAAAGTGCTACGA-1': 1, 'CCAAAGTGTGAGAA-1': 1, 'CCAACCTGAAGTAG-1': 1, 'CCAACCTGACGTAC-1': 1, 'CCAACCTGTTCGCC-1': 1, 'CCAAGAACCCAATG-1': 1, 'CCAAGAACGTAGCT-1': 1, 'CCAAGAACGTGTCA-1': 1, 'CCAAGAACTACTGG-1': 1, 'CCAAGAACTCCTAT-1': 1, 'CCAAGATGTCATTC-1': 1, 'CCAAGATGTTTCAC-1': 1, 'CCAAGTGAGGAACG-1': 1, 'CCAAGTGATCAAGC-1': 1, 'CCAATTTGAACGTC-1': 1, 'CCACCATGAACGTC-1': 1, 'CCACCATGATCGGT-1': 1, 'CCACCATGGACGAG-1': 1, 'CCACCATGGGGAGT-1': 1, 'CCACCATGTCCTGC-1': 1, 'CCACTGACCCGCTT-1': 1, 'CCACTGTGGGAAGC-1': 1, 'CCACTGTGTGTAGC-1': 1, 'CCACTTCTCGGGAA-1': 1, 'CCAGAAACCCTGTC-1': 1, 'CCAGAAACGAACTC-1': 1, 'CCAGAAACGGTCTA-1': 1, 'CCAGACCTCTGAGT-1': 1, 'CCAGACCTTGTGGT-1': 1, 'CCAGCACTGCGATT-1': 1, 'CCAGCGGAAAGGCG-1': 1, 'CCAGCGGACGACTA-1': 1, 'CCAGCGGATGGGAG-1': 1, 'CCAGCTACACAGTC-1': 1, 'CCAGCTACCAGCTA-1': 1, 'CCAGGTCTACACCA-1': 1, 'CCAGGTCTAGCATC-1': 1, 'CCAGGTCTATGGTC-1': 1, 'CCAGTCACACTGGT-1': 1, 'CCAGTCACACTGTG-1': 1, 'CCAGTCACGTTGTG-1': 1, 'CCAGTGCTAACCAC-1': 1, 'CCAGTGCTCGTAGT-1': 1, 'CCATCCGAAAGCAA-1': 1, 'CCATCCGAACGACT-1': 1, 'CCATCCGAAGGTTC-1': 1, 'CCATCCGATTCGCC-1': 1, 'CCATCGTGAACGGG-1': 1, 'CCATCGTGCTAGAC-1': 1, 'CCCAACACCTCGCT-1': 1, 'CCCAACACGCATCA-1': 1, 'CCCAACACTTTGTC-1': 1, 'CCCAACTGCAATCG-1': 1, 'CCCAGACTGCCTTC-1': 1, 'CCCAGACTGGTTTG-1': 1, 'CCCAGACTTTCGCC-1': 1, 'CCCAGTTGCAGTTG-1': 1, 'CCCAGTTGGGTACT-1': 1, 'CCCAGTTGTCTATC-1': 1, 'CCCGATTGTGTTTC-1': 1, 'CCCGGAGAAGGGTG-1': 1, 'CCCTACGAATTGGC-1': 1, 'CCCTAGTGCAAAGA-1': 1, 'CCCTCAGACACTTT-1': 1, 'CCCTCAGACGAGAG-1': 1, 'CCCTCAGAGGTCAT-1': 1, 'CCCTGAACTAAAGG-1': 1, 'CCCTGATGCAACCA-1': 1, 'CCCTGATGCAAGCT-1': 1, 'CCCTTACTAACCAC-1': 1, 'CCCTTACTGCAGTT-1': 1, 'CCGAAAACCTTGTT-1': 1, 'CCGACACTGGTTTG-1': 1, 'CCGACTACCCAGTA-1': 1, 'CCGACTACCGTGTA-1': 1, 'CCGACTACTGAGGG-1': 1, 'CCGATAGACCTAAG-1': 1, 'CCGATAGAGTTGGT-1': 1, 'CCGCGAGACACACA-1': 1, 'CCGCGAGAGGTTCA-1': 1, 'CCGCTATGGGACGA-1': 1, 'CCGCTATGTGCAAC-1': 1, 'CCGCTATGTGCACA-1': 1, 'CCGGTACTGTCCTC-1': 1, 'CCGTACACAAGCAA-1': 1, 'CCGTACACAGCGTT-1': 1, 'CCGTACACGTCATG-1': 1, 'CCGTACACGTTGGT-1': 1, 'CCGTACACTAACGC-1': 1, 'CCTAAACTTTCGTT-1': 1, 'CCTAAGGACCCAAA-1': 1, 'CCTAAGGACTAGCA-1': 1, 'CCTAAGGAGGGCAA-1': 1, 'CCTAAGGATGATGC-1': 1, 'CCTAAGGATGTCAG-1': 1, 'CCTACCGACTCTTA-1': 1, 'CCTACCGAGGGATG-1': 1, 'CCTAGAGAGGTGAG-1': 1, 'CCTATAACCAAAGA-1': 1, 'CCTATAACGAGACG-1': 1, 'CCTATAACTCAGAC-1': 1, 'CCTATAACTGCATG-1': 1, 'CCTCGAACACTTTC-1': 1, 'CCTCGAACCCGTAA-1': 1, 'CCTCGAACGTATCG-1': 1, 'CCTCGAACTTACTC-1': 1, 'CCTCTACTCTTCGC-1': 1, 'CCTCTACTGGCATT-1': 1, 'CCTGACTGAAGTAG-1': 1, 'CCTGACTGGGGAGT-1': 1, 'CCTGACTGTGTCTT-1': 1, 'CCTGCAACACGTTG-1': 1, 'CCTGGACTCGTGAT-1': 1, 'CCTTAATGCCCAAA-1': 1, 'CCTTAATGTTCTAC-1': 1, 'CCTTCACTACGACT-1': 1, 'CCTTCACTCAGTCA-1': 1, 'CCTTCACTGGAGTG-1': 1, 'CCTTTAGATTCATC-1': 1, 'CGAACATGCCCTAC-1': 1, 'CGAACATGTCAGAC-1': 1, 'CGAAGACTGGAACG-1': 1, 'CGAAGACTGTTACG-1': 1, 'CGAAGGGAAACCTG-1': 1, 'CGAAGGGATCCGAA-1': 1, 'CGAAGTACCAACTG-1': 1, 'CGAATCGAGGAGCA-1': 1, 'CGAATCGAGGAGGT-1': 1, 'CGACAAACCCATAG-1': 1, 'CGACAAACCGACAT-1': 1, 'CGACCACTAAAGTG-1': 1, 'CGACCACTGCCAAT-1': 1, 'CGACCGGAAGGTCT-1': 1, 'CGACCGGATGGAAA-1': 1, 'CGACCTTGCTAGTG-1': 1, 'CGACGTCTATCGTG-1': 1, 'CGACGTCTCGTGTA-1': 1, 'CGACGTCTGAGGCA-1': 1, 'CGACTCACGTCGTA-1': 1, 'CGACTCACGTTGCA-1': 1, 'CGACTCTGTGTGAC-1': 1, 'CGACTGCTTCCTCG-1': 1, 'CGAGAACTAAGGCG-1': 1, 'CGAGAACTACGTTG-1': 1, 'CGAGAACTTGTTCT-1': 1, 'CGAGATTGGACACT-1': 1, 'CGAGATTGGCCATA-1': 1, 'CGAGCCGAACACCA-1': 1, 'CGAGCCGAGGCGAA-1': 1, 'CGAGCGTGCTCCAC-1': 1, 'CGAGCGTGGATACC-1': 1, 'CGAGCGTGTATGCG-1': 1, 'CGAGGAGACCTCCA-1': 1, 'CGAGGAGATGTCGA-1': 1, 'CGAGGCACCTATGG-1': 1, 'CGAGGCACTATGCG-1': 1, 'CGAGGCACTCTTCA-1': 1, 'CGAGGCTGACGCTA-1': 1, 'CGAGGCTGGCAGTT-1': 1, 'CGAGGGCTACGACT-1': 1, 'CGAGGGCTCGAATC-1': 1, 'CGAGTATGTCACCC-1': 1, 'CGATACGAACAGTC-1': 1, 'CGATACGACAGGAG-1': 1, 'CGATACGATTCACT-1': 1, 'CGATAGACCCGTAA-1': 1, 'CGATAGACCGTACA-1': 1, 'CGATAGACGTAGGG-1': 1, 'CGATAGACTGTTCT-1': 1, 'CGATCAGAAGAACA-1': 1, 'CGATCAGAGAGGGT-1': 1, 'CGATCAGAGGTACT-1': 1, 'CGATCAGATGTGAC-1': 1, 'CGATCCACCGGGAA-1': 1, 'CGATCCACTTCCAT-1': 1, 'CGCAAATGCTCGAA-1': 1, 'CGCAACCTCCTTGC-1': 1, 'CGCAACCTGGACGA-1': 1, 'CGCACGGAGGACGA-1': 1, 'CGCACGGATCTTTG-1': 1, 'CGCACTACAGAATG-1': 1, 'CGCACTACAGCCAT-1': 1, 'CGCACTACATTGGC-1': 1, 'CGCACTACTCGCCT-1': 1, 'CGCACTACTCGTGA-1': 1, 'CGCACTTGTCACGA-1': 1, 'CGCAGGACAGATCC-1': 1, 'CGCAGGACCTACTT-1': 1, 'CGCAGGACTTGTCT-1': 1, 'CGCAGGTGCACTGA-1': 1, 'CGCAGGTGCCATAG-1': 1, 'CGCAGGTGGGAACG-1': 1, 'CGCATAGATCACGA-1': 1, 'CGCCATACTGCAAC-1': 1, 'CGCCATTGAGAGGC-1': 1, 'CGCCATTGCTATGG-1': 1, 'CGCCATTGGAGACG-1': 1, 'CGCCATTGGAGCAG-1': 1, 'CGCCATTGTACTGG-1': 1, 'CGCCGAGAGCTTAG-1': 1, 'CGCCTAACGAATGA-1': 1, 'CGCCTAACTGCTCC-1': 1, 'CGCGAGACACAGCT-1': 1, 'CGCGAGACAGGTCT-1': 1, 'CGCGAGACGCTACA-1': 1, 'CGCGATCTCAGTCA-1': 1, 'CGCGATCTGTTGAC-1': 1, 'CGCGATCTTTCTTG-1': 1, 'CGCGGATGGCCAAT-1': 1, 'CGCTAAGAATGTCG-1': 1, 'CGCTAAGACAACTG-1': 1, 'CGCTAAGACCCTTG-1': 1, 'CGCTACTGAACAGA-1': 1, 'CGCTACTGAGAACA-1': 1, 'CGCTACTGTGAGCT-1': 1, 'CGCTACTGTTCCCG-1': 1, 'CGCTCATGCATTTC-1': 1, 'CGGAATTGGTTTGG-1': 1, 'CGGAATTGTGGAGG-1': 1, 'CGGACCGATGCGTA-1': 1, 'CGGACCGATGGGAG-1': 1, 'CGGACTCTAAACAG-1': 1, 'CGGACTCTCCAATG-1': 1, 'CGGACTCTCCTCGT-1': 1, 'CGGAGGCTATTCCT-1': 1, 'CGGAGGCTTGGATC-1': 1, 'CGGATAACAACGAA-1': 1, 'CGGATAACAGCTCA-1': 1, 'CGGATAACTCAGTG-1': 1, 'CGGCACGAACTCAG-1': 1, 'CGGCACGAAGGGTG-1': 1, 'CGGCACGACTACGA-1': 1, 'CGGCATCTTAGAAG-1': 1, 'CGGCATCTTCGTAG-1': 1, 'CGGCCAGAAAGGTA-1': 1, 'CGGCCAGAGAGGCA-1': 1, 'CGGCGAACCAGTCA-1': 1, 'CGGCGAACGACAAA-1': 1, 'CGGCGAACGGTCTA-1': 1, 'CGGCGAACTACTTC-1': 1, 'CGGGACTGCGTGTA-1': 1, 'CGGGACTGGAATAG-1': 1, 'CGGGCATGACCCAA-1': 1, 'CGGGCATGTCTCTA-1': 1, 'CGGGCATGTTGTGG-1': 1, 'CGGTAAACTCGCAA-1': 1, 'CGGTCACTGTTTGG-1': 1, 'CGGTCACTTACTTC-1': 1, 'CGTAACGATCGCCT-1': 1, 'CGTACCACACACAC-1': 1, 'CGTACCACACGTTG-1': 1, 'CGTACCACCTCATT-1': 1, 'CGTACCACGGAGCA-1': 1, 'CGTACCTGGCATCA-1': 1, 'CGTAGCCTCTCTCG-1': 1, 'CGTAGCCTGCGAAG-1': 1, 'CGTAGCCTGTATGC-1': 1, 'CGTCAAGAAAGGTA-1': 1, 'CGTCAAGAACGTGT-1': 1, 'CGTCAAGACAGAGG-1': 1, 'CGTCAAGACAGGAG-1': 1, 'CGTCCATGCTCTTA-1': 1, 'CGTCGACTTTCCGC-1': 1, 'CGTGATGACGCTAA-1': 1, 'CGTGATGAGGTTCA-1': 1, 'CGTGCACTTATGGC-1': 1, 'CGTGTAGAAAAACG-1': 1, 'CGTGTAGACGATAC-1': 1, 'CGTGTAGAGTTACG-1': 1, 'CGTGTAGAGTTCAG-1': 1, 'CGTGTAGATTCGGA-1': 1, 'CGTTAGGAAACCAC-1': 1, 'CGTTAGGATCATTC-1': 1, 'CGTTATACCCTGAA-1': 1, 'CGTTTAACTGGTCA-1': 1, 'CTAAACCTCTGACA-1': 1, 'CTAAACCTGTGCAT-1': 1, 'CTAACACTAACGTC-1': 1, 'CTAACACTAGTGCT-1': 1, 'CTAACGGAACCGAT-1': 1, 'CTAACGGATTTCTG-1': 1, 'CTAACTACGGCAAG-1': 1, 'CTAAGGACACCATG-1': 1, 'CTAAGGACCGTTAG-1': 1, 'CTAAGGACGCCATA-1': 1, 'CTAAGGTGCCTAAG-1': 1, 'CTAAGGTGTTGCAG-1': 1, 'CTAAGGTGTTTCTG-1': 1, 'CTAATAGAGCTATG-1': 1, 'CTAATGCTTGTGGT-1': 1, 'CTACAACTCCCGTT-1': 1, 'CTACCTCTCAACCA-1': 1, 'CTACGCACACCTAG-1': 1, 'CTACGCACTCTCCG-1': 1, 'CTACGCACTGGTCA-1': 1, 'CTACGGCTTTCTTG-1': 1, 'CTACTATGAACCAC-1': 1, 'CTACTATGATGTGC-1': 1, 'CTACTATGCTAAGC-1': 1, 'CTACTATGTAAAGG-1': 1, 'CTACTCCTATGTCG-1': 1, 'CTACTCCTGCCATA-1': 1, 'CTAGAGACACTTTC-1': 1, 'CTAGAGACAGCATC-1': 1, 'CTAGAGACTTTGGG-1': 1, 'CTAGATCTCTCTAT-1': 1, 'CTAGATCTTCGACA-1': 1, 'CTAGGATGAGCCTA-1': 1, 'CTAGGATGATCGTG-1': 1, 'CTAGGCCTCTCAGA-1': 1, 'CTAGGTGATGGTTG-1': 1, 'CTAGTTACCAGAGG-1': 1, 'CTAGTTACCGCATA-1': 1, 'CTAGTTACGAAACA-1': 1, 'CTATAAGATCGTTT-1': 1, 'CTATACTGAGGTTC-1': 1, 'CTATACTGCCAGTA-1': 1, 'CTATACTGCGCTAA-1': 1, 'CTATACTGCTACGA-1': 1, 'CTATACTGTCTCAT-1': 1, 'CTATACTGTTCGTT-1': 1, 'CTATAGCTGTCACA-1': 1, 'CTATAGCTTCGCTC-1': 1, 'CTATAGCTTGCCTC-1': 1, 'CTATCAACGAACTC-1': 1, 'CTATCAACGCAGAG-1': 1, 'CTATCAACTTTGGG-1': 1, 'CTATCCCTCCACCT-1': 1, 'CTATGTACGAGAGC-1': 1, 'CTATGTACGCTTAG-1': 1, 'CTATGTACTGTTTC-1': 1, 'CTATGTTGAAAGCA-1': 1, 'CTATGTTGTCCTCG-1': 1, 'CTATGTTGTCTCGC-1': 1, 'CTATTGACAAACGA-1': 1, 'CTATTGACACTGGT-1': 1, 'CTATTGACGGTGAG-1': 1, 'CTATTGTGGCAAGG-1': 1, 'CTCAATTGGTTCAG-1': 1, 'CTCAATTGGTTGCA-1': 1, 'CTCAGAGATAGAAG-1': 1, 'CTCAGCACTCTAGG-1': 1, 'CTCAGCACTGAACC-1': 1, 'CTCAGCACTTGCAG-1': 1, 'CTCAGCTGAACCTG-1': 1, 'CTCAGCTGCAGTTG-1': 1, 'CTCAGGCTCGTTGA-1': 1, 'CTCAGGCTGCTAAC-1': 1, 'CTCATTGACCTTAT-1': 1, 'CTCATTGATGCTTT-1': 1, 'CTCCACGAGAGATA-1': 1, 'CTCCATCTCTTAGG-1': 1, 'CTCCATCTGACGAG-1': 1, 'CTCCGAACAAGTGA-1': 1, 'CTCCTACTGCCTTC-1': 1, 'CTCGAAGATGTGGT-1': 1, 'CTCGAAGATTAGGC-1': 1, 'CTCGACTGCTCTAT-1': 1, 'CTCGACTGGGTGAG-1': 1, 'CTCGACTGGTTGAC-1': 1, 'CTCGAGCTCTGGAT-1': 1, 'CTCGCATGACTTTC-1': 1, 'CTCGCATGCTTAGG-1': 1, 'CTCTAAACCTCGAA-1': 1, 'CTCTAAACGGCGAA-1': 1, 'CTCTAATGTCCAAG-1': 1, 'CTGAACGACAGTCA-1': 1, 'CTGAACGATGAGGG-1': 1, 'CTGAAGACCCAACA-1': 1, 'CTGAAGACGTGCAT-1': 1, 'CTGAAGTGAAGCCT-1': 1, 'CTGAAGTGCAGCTA-1': 1, 'CTGAAGTGGCTATG-1': 1, 'CTGAAGTGTCCAGA-1': 1, 'CTGAATCTGAATAG-1': 1, 'CTGACAGAATCGTG-1': 1, 'CTGACCACAGCAAA-1': 1, 'CTGAGAACCGGGAA-1': 1, 'CTGAGAACGTAAAG-1': 1, 'CTGATACTAGTAGA-1': 1, 'CTGATTTGGTGTTG-1': 1, 'CTGCAGCTAACCGT-1': 1, 'CTGCAGCTGACACT-1': 1, 'CTGCAGCTGGATTC-1': 1, 'CTGCAGCTTGGCAT-1': 1, 'CTGCCAACAGGAGC-1': 1, 'CTGCCAACCAGCTA-1': 1, 'CTGCCAACTAACCG-1': 1, 'CTGCCAACTGCTCC-1': 1, 'CTGCCAACTTGCAG-1': 1, 'CTGCCAACTTGCTT-1': 1, 'CTGCGACTCCACCT-1': 1, 'CTGGAAACAAACGA-1': 1, 'CTGGAAACATCGAC-1': 1, 'CTGGATGACTGGAT-1': 1, 'CTGGATGACTTGTT-1': 1, 'CTGGATGATGTGAC-1': 1, 'CTGGCACTCAAGCT-1': 1, 'CTGTAACTAACCAC-1': 1, 'CTGTAACTAGCGTT-1': 1, 'CTGTATACGTAAAG-1': 1, 'CTGTATACGTACGT-1': 1, 'CTGTATACGTTGGT-1': 1, 'CTGTGAGACAACCA-1': 1, 'CTGTGAGACCTTGC-1': 1, 'CTGTGAGACGAACT-1': 1, 'CTGTGAGACTGTAG-1': 1, 'CTTAAAGAACCTGA-1': 1, 'CTTAACACCTGTAG-1': 1, 'CTTAACACTATCGG-1': 1, 'CTTAAGCTACCTAG-1': 1, 'CTTAAGCTAGTACC-1': 1, 'CTTAAGCTCATCAG-1': 1, 'CTTAAGCTCCGCTT-1': 1, 'CTTACAACTAACGC-1': 1, 'CTTACAACTCCCGT-1': 1, 'CTTACTGACGTACA-1': 1, 'CTTAGACTAAACGA-1': 1, 'CTTAGGGACTTGCC-1': 1, 'CTTAGGGAGAATCC-1': 1, 'CTTATCGACTCATT-1': 1, 'CTTCACCTACCTGA-1': 1, 'CTTCATGAAGCATC-1': 1, 'CTTCATGAAGTACC-1': 1, 'CTTCATGACCGAAT-1': 1, 'CTTGAACTACGCAT-1': 1, 'CTTGATTGAGGTTC-1': 1, 'CTTGATTGATCTTC-1': 1, 'CTTGATTGCATTCT-1': 1, 'CTTGATTGTTTCGT-1': 1, 'CTTGTATGACACCA-1': 1, 'CTTGTATGCGCAAT-1': 1, 'CTTTACGAGCGAAG-1': 1, 'CTTTAGACCGTGAT-1': 1, 'CTTTAGACGAGACG-1': 1, 'CTTTAGACGATACC-1': 1, 'CTTTAGACGTTGGT-1': 1, 'CTTTAGACTCATTC-1': 1, 'CTTTAGTGACGGGA-1': 1, 'CTTTAGTGGGTGGA-1': 1, 'CTTTCAGAGAAACA-1': 1, 'CTTTGATGAGCACT-1': 1, 'CTTTGATGTCTAGG-1': 1, 'CTTTGATGTGTCCC-1': 1, 'CTTTGATGTGTGGT-1': 1, 'GAAACAGAACTACG-1': 1, 'GAAACAGAATCACG-1': 1, 'GAAACAGACATTCT-1': 1, 'GAAACCTGATCGTG-1': 1, 'GAAACCTGATGCCA-1': 1, 'GAAACCTGCTTATC-1': 1, 'GAAACCTGGACTAC-1': 1, 'GAAACCTGTGCTAG-1': 1, 'GAAAGATGATTTCC-1': 1, 'GAAAGATGCTGATG-1': 1, 'GAAAGATGCTTCGC-1': 1, 'GAAAGATGTAAGGA-1': 1, 'GAAAGCCTACGTTG-1': 1, 'GAAAGTGAAAGTGA-1': 1, 'GAAAGTGACCACAA-1': 1, 'GAAAGTGACTCAAG-1': 1, 'GAAATACTACCAAC-1': 1, 'GAAATACTCTTAGG-1': 1, 'GAAATACTTCCTCG-1': 1, 'GAACACACGTGCAT-1': 1, 'GAACACACTGCCTC-1': 1, 'GAACAGCTAACTGC-1': 1, 'GAACAGCTCTCAGA-1': 1, 'GAACCAACCACAAC-1': 1, 'GAACCAACTTCCGC-1': 1, 'GAACCTGAACGTGT-1': 1, 'GAACCTGAGAGACG-1': 1, 'GAACCTGATGAACC-1': 1, 'GAACGGGATACTTC-1': 1, 'GAACTGTGACCTGA-1': 1, 'GAACTGTGCCAGTA-1': 1, 'GAAGAATGCAATCG-1': 1, 'GAAGCGGACCTATT-1': 1, 'GAAGCTACGAATGA-1': 1, 'GAAGCTACGGTTTG-1': 1, 'GAAGGGTGAAAGTG-1': 1, 'GAAGGGTGCTTAGG-1': 1, 'GAAGGTCTGAAAGT-1': 1, 'GAAGGTCTGTTGCA-1': 1, 'GAAGGTCTTAAAGG-1': 1, 'GAAGTAGACTCCCA-1': 1, 'GAAGTAGATCCAAG-1': 1, 'GAAGTCACCCTCGT-1': 1, 'GAAGTCACCCTGTC-1': 1, 'GAAGTCTGTCGCAA-1': 1, 'GAAGTCTGTTCTGT-1': 1, 'GAAGTGCTAAACGA-1': 1, 'GAAGTGCTCCGCTT-1': 1, 'GAAGTGCTTAACCG-1': 1, 'GAATGCACCCTAAG-1': 1, 'GAATGCACCTTCGC-1': 1, 'GAATGCTGCGGTAT-1': 1, 'GAATTAACGATAAG-1': 1, 'GAATTAACGGTCAT-1': 1, 'GAATTAACGTCGTA-1': 1, 'GAATTAACTGAAGA-1': 1, 'GACAACACAGGCGA-1': 1, 'GACAACACATCGTG-1': 1, 'GACAACACTCGCCT-1': 1, 'GACAACTGAGGTTC-1': 1, 'GACAGGGAAGAGTA-1': 1, 'GACAGGGAATGCCA-1': 1, 'GACAGTACGAGCTT-1': 1, 'GACAGTACTTCGGA-1': 1, 'GACAGTTGAGTAGA-1': 1, 'GACATTCTCCACCT-1': 1, 'GACCAAACGACTAC-1': 1, 'GACCAAACGTATCG-1': 1, 'GACCCTACTAAAGG-1': 1, 'GACCTAGACCTCAC-1': 1, 'GACCTAGACGAGAG-1': 1, 'GACCTCACAAGGTA-1': 1, 'GACCTCACGTACGT-1': 1, 'GACCTCTGCATCAG-1': 1, 'GACGAACTCCCACT-1': 1, 'GACGATTGCCAATG-1': 1, 'GACGCCGACCTTCG-1': 1, 'GACGCTCTCTCTCG-1': 1, 'GACGGCACACGGGA-1': 1, 'GACGGCACGAGATA-1': 1, 'GACGTAACCTATGG-1': 1, 'GACGTAACCTGTGA-1': 1, 'GACGTAACTATGGC-1': 1, 'GACGTATGTTGACG-1': 1, 'GACGTATGTTTGCT-1': 1, 'GACGTCCTACGGAG-1': 1, 'GACGTCCTCTCAAG-1': 1, 'GACGTCCTGATAAG-1': 1, 'GACTACGATGGTCA-1': 1, 'GACTCCTGCTCGCT-1': 1, 'GACTCCTGGGTTAC-1': 1, 'GACTCCTGTTATCC-1': 1, 'GACTCCTGTTGGTG-1': 1, 'GACTGAACCAATCG-1': 1, 'GACTGATGTGATGC-1': 1, 'GACTTTACATGCCA-1': 1, 'GACTTTACGACAGG-1': 1, 'GAGAAATGTTCTCA-1': 1, 'GAGATAGAAAAAGC-1': 1, 'GAGATCACGACAAA-1': 1, 'GAGATGCTCTGGAT-1': 1, 'GAGATGCTGAATGA-1': 1, 'GAGCAGGATTCCCG-1': 1, 'GAGCATACTTTGCT-1': 1, 'GAGCGCACGCGTAT-1': 1, 'GAGCGCACGGTGAG-1': 1, 'GAGCGCTGAAGATG-1': 1, 'GAGCGCTGTCTTAC-1': 1, 'GAGCGGCTGGGAGT-1': 1, 'GAGGACGACTCAGA-1': 1, 'GAGGATCTGAAAGT-1': 1, 'GAGGCAGACTTGCC-1': 1, 'GAGGGAACACCAGT-1': 1, 'GAGGGAACGAGGGT-1': 1, 'GAGGGATGGGAAAT-1': 1, 'GAGGGCCTTCACCC-1': 1, 'GAGGGTGAAGAGTA-1': 1, 'GAGGTACTACGGTT-1': 1, 'GAGGTACTACTCAG-1': 1, 'GAGGTACTGACACT-1': 1, 'GAGGTACTGGGAGT-1': 1, 'GAGGTACTTAGCGT-1': 1, 'GAGGTGGAGTACGT-1': 1, 'GAGGTGGATCCTCG-1': 1, 'GAGGTTACTCGTTT-1': 1, 'GAGGTTTGTAAGCC-1': 1, 'GAGTCAACCATTCT-1': 1, 'GAGTCAACGGGAGT-1': 1, 'GAGTCTGATCGTGA-1': 1, 'GAGTCTGATTTGGG-1': 1, 'GAGTGACTCAGCTA-1': 1, 'GAGTGACTCGGTAT-1': 1, 'GAGTGACTCTTGCC-1': 1, 'GAGTGACTGACTAC-1': 1, 'GAGTGACTGTCTAG-1': 1, 'GAGTGGGAGTCTTT-1': 1, 'GAGTGGGATGCCCT-1': 1, 'GAGTGGGATGCTGA-1': 1, 'GAGTGTTGCTGTAG-1': 1, 'GAGTGTTGTGGTCA-1': 1, 'GAGTTGTGCATGGT-1': 1, 'GAGTTGTGCTGAGT-1': 1, 'GAGTTGTGGCGAGA-1': 1, 'GAGTTGTGGTAGCT-1': 1, 'GAGTTGTGTATGCG-1': 1, 'GATAAGGAGAAACA-1': 1, 'GATAAGGATTCACT-1': 1, 'GATACTCTATCGGT-1': 1, 'GATACTCTTACTTC-1': 1, 'GATACTCTTGACTG-1': 1, 'GATAGAGAAGGGTG-1': 1, 'GATAGAGACTGTGA-1': 1, 'GATAGAGATCACGA-1': 1, 'GATAGCACCCATAG-1': 1, 'GATAGCACGAAGGC-1': 1, 'GATAGCACTTGTCT-1': 1, 'GATATAACAAGGTA-1': 1, 'GATATAACACGCAT-1': 1, 'GATATATGCTGGAT-1': 1, 'GATATATGTCCGTC-1': 1, 'GATATATGTGGAGG-1': 1, 'GATATCCTAGAAGT-1': 1, 'GATATCCTCCCGTT-1': 1, 'GATATTGACAGGAG-1': 1, 'GATATTGACGAGTT-1': 1, 'GATATTGAGCCAAT-1': 1, 'GATCCCTGACCTTT-1': 1, 'GATCCCTGTGTAGC-1': 1, 'GATCCGCTGGTCAT-1': 1, 'GATCGAACCGAGAG-1': 1, 'GATCGATGACTAGC-1': 1, 'GATCGATGGTAAAG-1': 1, 'GATCGATGTAAGGA-1': 1, 'GATCGTGACACTAG-1': 1, 'GATCGTGATTCACT-1': 1, 'GATCTACTGGTGAG-1': 1, 'GATCTACTTTGCAG-1': 1, 'GATCTTACACCCAA-1': 1, 'GATCTTACCCTACC-1': 1, 'GATCTTACGAATAG-1': 1, 'GATCTTACGAGATA-1': 1, 'GATGCAACTCCAGA-1': 1, 'GATGCCCTACGTAC-1': 1, 'GATGCCCTCTCATT-1': 1, 'GATGCCCTGGCAAG-1': 1, 'GATGCCCTTTTGCT-1': 1, 'GATTACCTTGTTCT-1': 1, 'GATTCGGAACGACT-1': 1, 'GATTCGGACAGGAG-1': 1, 'GATTCGGAGAAGGC-1': 1, 'GATTCTTGATTCGG-1': 1, 'GATTCTTGCCGATA-1': 1, 'GATTCTTGCGAGTT-1': 1, 'GATTGGACCCGTTC-1': 1, 'GATTGGACGGTGTT-1': 1, 'GATTGGACTTTCGT-1': 1, 'GATTGGTGTGTCAG-1': 1, 'GATTTAGACACTCC-1': 1, 'GATTTAGACTAAGC-1': 1, 'GATTTAGATTCGTT-1': 1, 'GATTTGCTAACGAA-1': 1, 'GATTTGCTAACGGG-1': 1, 'GCAACCCTCCTCGT-1': 1, 'GCAACTGATTGCGA-1': 1, 'GCAAGACTACTGGT-1': 1, 'GCAAGACTAGGTCT-1': 1, 'GCAAGACTCCCTTG-1': 1, 'GCAATCGACTGCAA-1': 1, 'GCAATCGAGACGTT-1': 1, 'GCAATCGATCCTTA-1': 1, 'GCAATTCTCGTGTA-1': 1, 'GCAATTCTTCTCCG-1': 1, 'GCACAAACAATGCC-1': 1, 'GCACAAACGGTACT-1': 1, 'GCACAATGGTGCAT-1': 1, 'GCACACCTGTGCTA-1': 1, 'GCACCACTCATGAC-1': 1, 'GCACCACTGTTTGG-1': 1, 'GCACCACTTCCTTA-1': 1, 'GCACCACTTTCGGA-1': 1, 'GCACCTACGCGATT-1': 1, 'GCACCTTGGCTGTA-1': 1, 'GCACCTTGGGGAGT-1': 1, 'GCACGGACCAGCTA-1': 1, 'GCACGGTGACCTCC-1': 1, 'GCACGGTGCTATGG-1': 1, 'GCACTAGAACGGGA-1': 1, 'GCACTAGAAGATGA-1': 1, 'GCACTAGACCTTTA-1': 1, 'GCACTAGACGTAAC-1': 1, 'GCACTAGAGTCGTA-1': 1, 'GCACTAGATGCAAC-1': 1, 'GCACTGCTGAGGCA-1': 1, 'GCAGATACAGCGTT-1': 1, 'GCAGATACGACGGA-1': 1, 'GCAGATACGCAGAG-1': 1, 'GCAGCCGACAGTCA-1': 1, 'GCAGCGTGCACTCC-1': 1, 'GCAGCTCTCAATCG-1': 1, 'GCAGCTCTGTTTCT-1': 1, 'GCAGGGCTAAGAAC-1': 1, 'GCAGGGCTAAGGGC-1': 1, 'GCAGGGCTATCGAC-1': 1, 'GCAGGGCTTGGGAG-1': 1, 'GCAGTCCTAACTGC-1': 1, 'GCAGTCCTCTCTTA-1': 1, 'GCATCAGATGCGTA-1': 1, 'GCATGTGACAAGCT-1': 1, 'GCATTGGAGAAGGC-1': 1, 'GCCAAAACGAGGCA-1': 1, 'GCCAAATGATCGAC-1': 1, 'GCCAACCTACGGTT-1': 1, 'GCCAACCTCGCCTT-1': 1, 'GCCACGGAGGCGAA-1': 1, 'GCCACGGATACTGG-1': 1, 'GCCACTACGTCTTT-1': 1, 'GCCCAACTACCGAT-1': 1, 'GCCCAACTATGGTC-1': 1, 'GCCCATACAGCGTT-1': 1, 'GCCGACGAACTCTT-1': 1, 'GCCGAGTGCGTTGA-1': 1, 'GCCGGAACGAACTC-1': 1, 'GCCGGAACGTTCTT-1': 1, 'GCCGGAACTGCACA-1': 1, 'GCCGGAACTTACTC-1': 1, 'GCCGTACTACCTGA-1': 1, 'GCCGTACTGGCAAG-1': 1, 'GCCTACACAGTTCG-1': 1, 'GCCTACACCACTGA-1': 1, 'GCCTACACCTTGAG-1': 1, 'GCCTAGCTACGGAG-1': 1, 'GCCTAGCTCTATTC-1': 1, 'GCCTAGCTTCTCAT-1': 1, 'GCCTAGCTTCTCTA-1': 1, 'GCCTCAACCATGGT-1': 1, 'GCCTCAACTCTTTG-1': 1, 'GCCTCATGTCTTAC-1': 1, 'GCCTGACTCTCAAG-1': 1, 'GCGAAGGAACTCTT-1': 1, 'GCGAAGGATGCCAA-1': 1, 'GCGAGAGAGGGACA-1': 1, 'GCGAGCACTGTCGA-1': 1, 'GCGAGCACTTGACG-1': 1, 'GCGAGCACTTGCTT-1': 1, 'GCGATATGGTACGT-1': 1, 'GCGATATGGTGTTG-1': 1, 'GCGCACGAAGTCGT-1': 1, 'GCGCACGACTTTAC-1': 1, 'GCGCATCTAGGTCT-1': 1, 'GCGCATCTGGTTAC-1': 1, 'GCGCATCTTCGATG-1': 1, 'GCGCATCTTGCTCC-1': 1, 'GCGCATCTTTCTAC-1': 1, 'GCGCGAACGTTCTT-1': 1, 'GCGCGATGAACGGG-1': 1, 'GCGCGATGGTGCAT-1': 1, 'GCGGAGCTCCTGAA-1': 1, 'GCGGCAACCCGATA-1': 1, 'GCGGCAACGGAGGT-1': 1, 'GCGGCAACTGTCGA-1': 1, 'GCGTAAACACGGTT-1': 1, 'GCGTAATGCACCAA-1': 1, 'GCGTATGAACACCA-1': 1, 'GCGTATGATGAGAA-1': 1, 'GCTACAGAAAGGTA-1': 1, 'GCTACAGAATCTTC-1': 1, 'GCTACCTGAGAAGT-1': 1, 'GCTACCTGATCACG-1': 1, 'GCTACGCTAGAATG-1': 1, 'GCTACGCTAGCTAC-1': 1, 'GCTACGCTCCCTAC-1': 1, 'GCTAGAACAGAGGC-1': 1, 'GCTAGAACGGATCT-1': 1, 'GCTAGAACTCCCGT-1': 1, 'GCTAGATGAGCTCA-1': 1, 'GCTAGATGGCGATT-1': 1, 'GCTATACTAAGGCG-1': 1, 'GCTATACTAGCGTT-1': 1, 'GCTATACTCTCTTA-1': 1, 'GCTATACTGGACGA-1': 1, 'GCTCAAGAACCATG-1': 1, 'GCTCAAGAAGTCAC-1': 1, 'GCTCAGCTGTCTAG-1': 1, 'GCTCCATGAGAAGT-1': 1, 'GCTCCATGCCGAAT-1': 1, 'GCTCGACTCTAGTG-1': 1, 'GCTGATGAGGTATC-1': 1, 'GCTTAACTACAGTC-1': 1, 'GCTTAACTACTGGT-1': 1, 'GCTTAACTGCTGAT-1': 1, 'GCTTAACTTAGACC-1': 1, 'GCTTAACTTCAGTG-1': 1, 'GGAACACTCACTTT-1': 1, 'GGAACACTTCAGAC-1': 1, 'GGAACTACTACTTC-1': 1, 'GGAACTTGAAGGTA-1': 1, 'GGAACTTGAGAATG-1': 1, 'GGAACTTGCTCCAC-1': 1, 'GGAACTTGGGTAGG-1': 1, 'GGAAGGACATCGGT-1': 1, 'GGAAGGACCACTAG-1': 1, 'GGAAGGACGAGGGT-1': 1, 'GGAAGGACGCGAAG-1': 1, 'GGAAGGTGGCGAGA-1': 1, 'GGAATCTGAAGGGC-1': 1, 'GGAATCTGAGGAGC-1': 1, 'GGAATCTGCTTAGG-1': 1, 'GGAATCTGCTTGTT-1': 1, 'GGAATCTGGGAGGT-1': 1, 'GGAATGCTTTCTAC-1': 1, 'GGACAGGAAAGGGC-1': 1, 'GGACAGGAGTGCTA-1': 1, 'GGACAGGATCTCGC-1': 1, 'GGACCCGAAGCTAC-1': 1, 'GGACCGTGCTTACT-1': 1, 'GGACCGTGGGAACG-1': 1, 'GGACCGTGTAACGC-1': 1, 'GGACCTCTGTAAGA-1': 1, 'GGACCTCTTTTCTG-1': 1, 'GGACGAGAGTGTCA-1': 1, 'GGACGCTGACGCAT-1': 1, 'GGACGCTGCTAGCA-1': 1, 'GGACGCTGTCCTCG-1': 1, 'GGAGAGACGTGAGG-1': 1, 'GGAGCAGATTCAGG-1': 1, 'GGAGCCACCTTCTA-1': 1, 'GGAGCGCTACGCAT-1': 1, 'GGAGCGCTCCGAAT-1': 1, 'GGAGGATGCCACCT-1': 1, 'GGAGGATGGTTGAC-1': 1, 'GGAGGATGTCAGTG-1': 1, 'GGAGGCCTCGTTGA-1': 1, 'GGAGGCCTTTCTTG-1': 1, 'GGAGGTGATACGCA-1': 1, 'GGAGGTGATCGCTC-1': 1, 'GGATACTGCAGCTA-1': 1, 'GGATACTGTCTAGG-1': 1, 'GGATAGCTCGTCTC-1': 1, 'GGATAGCTCTGAAC-1': 1, 'GGATGTACCAAAGA-1': 1, 'GGATGTACGCGAAG-1': 1, 'GGATGTACGTCTTT-1': 1, 'GGATGTACGTGTCA-1': 1, 'GGATTTCTAGGTTC-1': 1, 'GGATTTCTTTGTCT-1': 1, 'GGCAAGGAAAAAGC-1': 1, 'GGCAAGGAAGAAGT-1': 1, 'GGCAAGGACTTGGA-1': 1, 'GGCAAGGAGGACTT-1': 1, 'GGCAATACGCTAAC-1': 1, 'GGCAATACGGCATT-1': 1, 'GGCAATACGTTTCT-1': 1, 'GGCACGTGGCTTAG-1': 1, 'GGCACTCTTTTGTC-1': 1, 'GGCATATGCTTATC-1': 1, 'GGCATATGGGGAGT-1': 1, 'GGCATATGTGTGAC-1': 1, 'GGCCACGACAGAGG-1': 1, 'GGCCAGACTGGTTG-1': 1, 'GGCCCAGAAAGTAG-1': 1, 'GGCCGAACAACGAA-1': 1, 'GGCCGAACGCAGAG-1': 1, 'GGCCGAACGTAGGG-1': 1, 'GGCCGAACTCTAGG-1': 1, 'GGCCGATGCAGGAG-1': 1, 'GGCCGATGCCGAAT-1': 1, 'GGCCGATGTACTCT-1': 1, 'GGCGACACTGCCCT-1': 1, 'GGCGACTGCGTAAC-1': 1, 'GGCGCATGCCTAAG-1': 1, 'GGCGCATGCTCCAC-1': 1, 'GGCGCATGTGGAAA-1': 1, 'GGCGGACTAGAGGC-1': 1, 'GGCGGACTAGGAGC-1': 1, 'GGCGGACTCTGACA-1': 1, 'GGCGGACTCTTGGA-1': 1, 'GGCGGACTTACTGG-1': 1, 'GGCGGACTTGAACC-1': 1, 'GGCTAAACACCTGA-1': 1, 'GGCTAAACTCTTAC-1': 1, 'GGCTAATGAGCACT-1': 1, 'GGCTAATGGTCTAG-1': 1, 'GGCTCACTACTCAG-1': 1, 'GGGAACGAAGCTCA-1': 1, 'GGGAACGACACAAC-1': 1, 'GGGAACGAGTGTCA-1': 1, 'GGGAAGTGTTGAGC-1': 1, 'GGGACCACACGTTG-1': 1, 'GGGACCACAGAACA-1': 1, 'GGGACCACGAATAG-1': 1, 'GGGACCACGTCATG-1': 1, 'GGGACCACTCAAGC-1': 1, 'GGGACCACTCGTGA-1': 1, 'GGGACCACTGCATG-1': 1, 'GGGACCTGACCCTC-1': 1, 'GGGACCTGCTTGCC-1': 1, 'GGGACCTGTGGAGG-1': 1, 'GGGATGGACGACAT-1': 1, 'GGGATGGATACTTC-1': 1, 'GGGATGGATGGTTG-1': 1, 'GGGATTACGTCTAG-1': 1, 'GGGCAAGATGCATG-1': 1, 'GGGCACACGGTGAG-1': 1, 'GGGCACACGTTGCA-1': 1, 'GGGCAGCTTGGGAG-1': 1, 'GGGCAGCTTTTCTG-1': 1, 'GGGCCAACCTTGGA-1': 1, 'GGGCCAACGCGTTA-1': 1, 'GGGCCAACTACGCA-1': 1, 'GGGCCAACTCCAAG-1': 1, 'GGGCCATGATGGTC-1': 1, 'GGGCCATGTTGACG-1': 1, 'GGGTAACTCAGCTA-1': 1, 'GGGTAACTCTAGTG-1': 1, 'GGGTAACTCTGGAT-1': 1, 'GGGTTAACGTGCAT-1': 1, 'GGTAAAGAGCTAAC-1': 1, 'GGTACAACTGCAAC-1': 1, 'GGTACATGAAAGCA-1': 1, 'GGTACATGAGCTCA-1': 1, 'GGTACATGCGGTAT-1': 1, 'GGTACATGGTTACG-1': 1, 'GGTACATGTGGGAG-1': 1, 'GGTACTGAACTCTT-1': 1, 'GGTAGTACACCACA-1': 1, 'GGTAGTACACTAGC-1': 1, 'GGTAGTACCCTGTC-1': 1, 'GGTAGTACGCCATA-1': 1, 'GGTAGTACTGTCTT-1': 1, 'GGTATCGAGACAAA-1': 1, 'GGTATCGATGAACC-1': 1, 'GGTCAAACCAAAGA-1': 1, 'GGTCTAGAGAAACA-1': 1, 'GGTCTAGATAGCGT-1': 1, 'GGTGATACCGACTA-1': 1, 'GGTGATACGACTAC-1': 1, 'GGTGATACTGTTTC-1': 1, 'GGTGGAGAAACGGG-1': 1, 'GGTGGAGAAGTAGA-1': 1, 'GGTGGAGACAGATC-1': 1, 'GGTGGAGATCGATG-1': 1, 'GGTGGAGATCTCTA-1': 1, 'GGTGGAGATTACTC-1': 1, 'GGTTTACTACGCAT-1': 1, 'GTAACGTGACCTCC-1': 1, 'GTAACGTGATCGGT-1': 1, 'GTAACGTGCAGCTA-1': 1, 'GTAACGTGGTTGAC-1': 1, 'GTAAGCACAACGGG-1': 1, 'GTAAGCACTCATTC-1': 1, 'GTAAGCTGGTACCA-1': 1, 'GTAATAACCTTCTA-1': 1, 'GTAATAACGTTGTG-1': 1, 'GTACCCTGACAGTC-1': 1, 'GTACCCTGGAGCTT-1': 1, 'GTACCCTGTCCTTA-1': 1, 'GTACCCTGTGAACC-1': 1, 'GTACGTGAACGTTG-1': 1, 'GTACTTTGTCGACA-1': 1, 'GTAGACTGAGATGA-1': 1, 'GTAGACTGTATTCC-1': 1, 'GTAGCAACAGTCGT-1': 1, 'GTAGCAACCATTTC-1': 1, 'GTAGCAACGGTAGG-1': 1, 'GTAGCATGCACTCC-1': 1, 'GTAGCATGTAAGCC-1': 1, 'GTAGCCCTGACGTT-1': 1, 'GTAGCTGAAGCTAC-1': 1, 'GTAGCTGAATTCGG-1': 1, 'GTAGGTACACGGGA-1': 1, 'GTAGTGACCTCATT-1': 1, 'GTAGTGTGAGCGGA-1': 1, 'GTAGTGTGAGGCGA-1': 1, 'GTAGTGTGTGGTTG-1': 1, 'GTATCACTGGTAGG-1': 1, 'GTATCTACAGAAGT-1': 1, 'GTATCTACGACGAG-1': 1, 'GTATCTACGTTACG-1': 1, 'GTATTAGAAACAGA-1': 1, 'GTATTAGAGGTCTA-1': 1, 'GTATTCACACAGCT-1': 1, 'GTATTCACGGGTGA-1': 1, 'GTCAACGACACTGA-1': 1, 'GTCAACGAGTGTAC-1': 1, 'GTCAATCTACACCA-1': 1, 'GTCAATCTGTAGCT-1': 1, 'GTCAATCTTGTGGT-1': 1, 'GTCACCTGCCTCCA-1': 1, 'GTCACCTGTCCCGT-1': 1, 'GTCATACTAATCGC-1': 1, 'GTCATACTGCGATT-1': 1, 'GTCATACTTCGCCT-1': 1, 'GTCATACTTTACCT-1': 1, 'GTCATACTTTGACG-1': 1, 'GTCCAAGAAAAACG-1': 1, 'GTCCACTGACCTCC-1': 1, 'GTCCACTGGGTACT-1': 1, 'GTCCAGCTACGGGA-1': 1, 'GTCCCATGTGGTGT-1': 1, 'GTCGAATGAAGGCG-1': 1, 'GTCGACCTGAATGA-1': 1, 'GTCGACCTGTTCAG-1': 1, 'GTCGCACTTGAGAA-1': 1, 'GTCTAACTGGTCTA-1': 1, 'GTCTAGGAGCTTCC-1': 1, 'GTGAACACACTCTT-1': 1, 'GTGAACACTCAGGT-1': 1, 'GTGACCCTTAAGCC-1': 1, 'GTGATGACAAGTGA-1': 1, 'GTGATGACCTGAGT-1': 1, 'GTGATGACGGTTTG-1': 1, 'GTGATTCTCATTTC-1': 1, 'GTGATTCTCTCTCG-1': 1, 'GTGATTCTGGTTCA-1': 1, 'GTGATTCTGTCGAT-1': 1, 'GTGATTCTTAGCGT-1': 1, 'GTGCCACTCAGGAG-1': 1, 'GTGGATTGCACTAG-1': 1, 'GTGGATTGCGGAGA-1': 1, 'GTGGATTGTAACGC-1': 1, 'GTGTACGATCAGTG-1': 1, 'GTGTAGTGGGTACT-1': 1, 'GTGTATCTAGCCTA-1': 1, 'GTGTATCTAGTAGA-1': 1, 'GTGTATCTGTTACG-1': 1, 'GTGTCAGAAGCGTT-1': 1, 'GTTAAAACCGAGAG-1': 1, 'GTTAAATGCTCGAA-1': 1, 'GTTAAATGTCGACA-1': 1, 'GTTAACCTAGCTAC-1': 1, 'GTTAACCTTGCTTT-1': 1, 'GTTAGGTGCACTCC-1': 1, 'GTTAGGTGCCAGTA-1': 1, 'GTTAGGTGCCCAAA-1': 1, 'GTTAGGTGGAACTC-1': 1, 'GTTAGTCTAAGAAC-1': 1, 'GTTATAGAGGACAG-1': 1, 'GTTATGCTTTCATC-1': 1, 'GTTCAACTGGGACA-1': 1, 'GTTCAACTTATGCG-1': 1, 'GTTGACGAGCCCTT-1': 1, 'GTTGACGATATCGG-1': 1, 'GTTGAGTGGTCTTT-1': 1, 'GTTGAGTGTGCTTT-1': 1, 'GTTGATCTGGGACA-1': 1, 'GTTGATCTTTTCAC-1': 1, 'GTTGGATGTTTACC-1': 1, 'GTTGTACTATTCCT-1': 1, 'GTTGTACTTTTGGG-1': 1, 'GTTTAAGACCATGA-1': 1, 'GTTTAAGACTGTCC-1': 1, 'TAAACAACCAACCA-1': 1, 'TAAACAACGAATCC-1': 1, 'TAAAGACTCAGGAG-1': 1, 'TAAATCGATGAGGG-1': 1, 'TAACAATGTGCCCT-1': 1, 'TAACACCTTCGCTC-1': 1, 'TAACACCTTCGTAG-1': 1, 'TAACACCTTGTTTC-1': 1, 'TAACATGACACTAG-1': 1, 'TAACCGGACTTACT-1': 1, 'TAACGTCTCAACCA-1': 1, 'TAACGTCTCATTGG-1': 1, 'TAACTAGAATTTCC-1': 1, 'TAACTAGACTTAGG-1': 1, 'TAACTAGATCTGGA-1': 1, 'TAACTCACGAGGAC-1': 1, 'TAACTCACGTACAC-1': 1, 'TAACTCACGTATCG-1': 1, 'TAACTCACTCTACT-1': 1, 'TAAGAACTGTGTCA-1': 1, 'TAAGAGGACTAAGC-1': 1, 'TAAGAGGACTTGTT-1': 1, 'TAAGATACGGTTCA-1': 1, 'TAAGATTGCGTAGT-1': 1, 'TAAGATTGTTGCTT-1': 1, 'TAAGCGTGAGGTTC-1': 1, 'TAAGCGTGGACAAA-1': 1, 'TAAGCGTGGGAAAT-1': 1, 'TAAGCGTGTGCTCC-1': 1, 'TAAGGCTGCCATGA-1': 1, 'TAAGGCTGCTGCTC-1': 1, 'TAAGGCTGTCTCGC-1': 1, 'TAAGGGCTGCTGTA-1': 1, 'TAAGGGCTTTACTC-1': 1, 'TAAGTAACCGAGAG-1': 1, 'TAAGTAACCTCCAC-1': 1, 'TAAGTAACCTGTAG-1': 1, 'TAAGTAACTTGTCT-1': 1, 'TAATGATGAGCGGA-1': 1, 'TAATGCCTCATGAC-1': 1, 'TAATGCCTCGTCTC-1': 1, 'TAATGTGAAGATGA-1': 1, 'TAATGTGACTGCAA-1': 1, 'TAATGTGATTACTC-1': 1, 'TACAAATGGGTACT-1': 1, 'TACAATGAAAACAG-1': 1, 'TACAATGACTTAGG-1': 1, 'TACAATGATGCTAG-1': 1, 'TACACACTCACACA-1': 1, 'TACACACTCTTACT-1': 1, 'TACATAGAACGCAT-1': 1, 'TACATCACACGGGA-1': 1, 'TACATCACCTGTTT-1': 1, 'TACATCACGCTAAC-1': 1, 'TACATCACTGAACC-1': 1, 'TACCATTGAGGTTC-1': 1, 'TACCATTGCGGGAA-1': 1, 'TACCATTGGGGATG-1': 1, 'TACCATTGTGAGGG-1': 1, 'TACCGGCTGTTGGT-1': 1, 'TACGAGTGATCTCT-1': 1, 'TACGAGTGATGCTG-1': 1, 'TACGAGTGCGGAGA-1': 1, 'TACGAGTGGTTGGT-1': 1, 'TACGATCTAGTGTC-1': 1, 'TACGATCTCACTGA-1': 1, 'TACGATCTTACGAC-1': 1, 'TACGCAGAGAATCC-1': 1, 'TACGCCACATTCCT-1': 1, 'TACGCCACTCCCAC-1': 1, 'TACGCCACTCCGAA-1': 1, 'TACGGAACGCGTTA-1': 1, 'TACGGCCTGGGACA-1': 1, 'TACGTACTACGGAG-1': 1, 'TACGTACTCAGTTG-1': 1, 'TACGTACTCCCGTT-1': 1, 'TACGTTACAGAAGT-1': 1, 'TACGTTACCAAGCT-1': 1, 'TACTAAGAAAGGTA-1': 1, 'TACTAAGAATCACG-1': 1, 'TACTAAGATGATGC-1': 1, 'TACTAAGATTGCGA-1': 1, 'TACTACACGAGAGC-1': 1, 'TACTACACTTACCT-1': 1, 'TACTACTGAACCTG-1': 1, 'TACTACTGATGTCG-1': 1, 'TACTACTGATTCTC-1': 1, 'TACTACTGTATGGC-1': 1, 'TACTCAACGGTCTA-1': 1, 'TACTCAACTGCTAG-1': 1, 'TACTCCCTCAGTTG-1': 1, 'TACTCTGAATCGAC-1': 1, 'TACTCTGACGAGTT-1': 1, 'TACTCTGATTGACG-1': 1, 'TACTGGGATCGATG-1': 1, 'TACTGTTGAAAGCA-1': 1, 'TACTGTTGAGGCGA-1': 1, 'TACTGTTGCTGAAC-1': 1, 'TACTTGACTCCTCG-1': 1, 'TACTTGACTGGTGT-1': 1, 'TACTTTCTTTTGGG-1': 1, 'TAGAAACTAATCGC-1': 1, 'TAGAAACTGCTTCC-1': 1, 'TAGAAACTGGGATG-1': 1, 'TAGAATTGCGACAT-1': 1, 'TAGAATTGTATCGG-1': 1, 'TAGACGTGCTTGAG-1': 1, 'TAGACGTGTCGCTC-1': 1, 'TAGAGCACCTTACT-1': 1, 'TAGATTGACTTGTT-1': 1, 'TAGATTGAGGCATT-1': 1, 'TAGCATCTCAGCTA-1': 1, 'TAGCATCTCCCTCA-1': 1, 'TAGCATCTGCTGTA-1': 1, 'TAGCATCTGGGACA-1': 1, 'TAGCATCTTGTCGA-1': 1, 'TAGCCCACAAAAGC-1': 1, 'TAGCCCACAGCCAT-1': 1, 'TAGCCCACAGCTAC-1': 1, 'TAGCCCACCCACAA-1': 1, 'TAGCCCTGCGGAGA-1': 1, 'TAGCCGCTTACGAC-1': 1, 'TAGCCGCTTACTTC-1': 1, 'TAGCCGCTTTCCAT-1': 1, 'TAGCTACTGAATAG-1': 1, 'TAGCTACTGTAGCT-1': 1, 'TAGCTACTTTTGCT-1': 1, 'TAGGACTGTGCTGA-1': 1, 'TAGGAGCTAAGGCG-1': 1, 'TAGGAGCTGAGGGT-1': 1, 'TAGGAGCTTGCATG-1': 1, 'TAGGCAACCGTCTC-1': 1, 'TAGGCATGCTCTCG-1': 1, 'TAGGCATGGCGAGA-1': 1, 'TAGGCTGATGCCTC-1': 1, 'TAGGGACTGAACTC-1': 1, 'TAGGTCGACACTGA-1': 1, 'TAGGTCGAGGATCT-1': 1, 'TAGGTGACACACTG-1': 1, 'TAGGTGACACGTTG-1': 1, 'TAGGTGTGTTCTGT-1': 1, 'TAGGTTCTGAAGGC-1': 1, 'TAGGTTCTTCTTAC-1': 1, 'TAGGTTCTTGCTGA-1': 1, 'TAGTAAACCTCGCT-1': 1, 'TAGTAAACGTCACA-1': 1, 'TAGTAATGAGATCC-1': 1, 'TAGTACCTAAGAAC-1': 1, 'TAGTATGATCTTAC-1': 1, 'TAGTATGATTCTCA-1': 1, 'TAGTCTTGGCTGTA-1': 1, 'TAGTCTTGGGACTT-1': 1, 'TAGTCTTGTGGAAA-1': 1, 'TAGTGGTGAAGTGA-1': 1, 'TAGTTAGAACCACA-1': 1, 'TAGTTAGATGAACC-1': 1, 'TATAAGACAACAGA-1': 1, 'TATAAGACAGCTCA-1': 1, 'TATAAGTGACACCA-1': 1, 'TATAAGTGTATCGG-1': 1, 'TATAAGTGTGGTGT-1': 1, 'TATACAGAACCCTC-1': 1, 'TATACAGAAGAACA-1': 1, 'TATACAGATCCAGA-1': 1, 'TATACCACCTGATG-1': 1, 'TATACGCTACCAAC-1': 1, 'TATAGATGGACGGA-1': 1, 'TATAGATGTTCCGC-1': 1, 'TATCCAACCAGCTA-1': 1, 'TATCCAACTCTCTA-1': 1, 'TATCGACTACTAGC-1': 1, 'TATCGACTCGATAC-1': 1, 'TATCGTACAGATGA-1': 1, 'TATCGTACATTCCT-1': 1, 'TATCTCGAGAGATA-1': 1, 'TATCTGACAGGTTC-1': 1, 'TATCTGACTGTTTC-1': 1, 'TATCTTCTAAACAG-1': 1, 'TATGAATGGAGGAC-1': 1, 'TATGAATGTTTGCT-1': 1, 'TATGCGGATAACCG-1': 1, 'TATGGGTGCATCAG-1': 1, 'TATGGGTGCTAGCA-1': 1, 'TATGGTCTCTACCC-1': 1, 'TATGTCACGGAACG-1': 1, 'TATGTCACTAACCG-1': 1, 'TATGTCACTTCTCA-1': 1, 'TATGTGCTCCGATA-1': 1, 'TATGTGCTGGATTC-1': 1, 'TATTGCTGAAGAAC-1': 1, 'TATTGCTGCCGTTC-1': 1, 'TATTGCTGTCTGGA-1': 1, 'TATTGCTGTGCACA-1': 1, 'TATTTCCTATTGGC-1': 1, 'TATTTCCTGGAGGT-1': 1, 'TATTTCCTGGTGTT-1': 1, 'TCAACACTGTTTGG-1': 1, 'TCAAGGACAGCGTT-1': 1, 'TCAAGGACATTCTC-1': 1, 'TCAAGGACGGTGTT-1': 1, 'TCAATCACACTCTT-1': 1, 'TCAATCACAGTCGT-1': 1, 'TCACAACTATGTGC-1': 1, 'TCACAACTTTGCTT-1': 1, 'TCACATACACTTTC-1': 1, 'TCACATACAGGGTG-1': 1, 'TCACCCGAGACGGA-1': 1, 'TCACCGTGCTCGCT-1': 1, 'TCACCTCTACGACT-1': 1, 'TCACCTCTTCCAAG-1': 1, 'TCACGAGAGGAGGT-1': 1, 'TCACTATGGGGCAA-1': 1, 'TCACTATGGTTGTG-1': 1, 'TCAGACGACGCTAA-1': 1, 'TCAGACGACGTTAG-1': 1, 'TCAGAGACTCCAGA-1': 1, 'TCAGCAGACTCCAC-1': 1, 'TCAGCGCTCTAGTG-1': 1, 'TCAGCGCTGGATCT-1': 1, 'TCAGCGCTGGTATC-1': 1, 'TCAGGATGAAGTAG-1': 1, 'TCAGGATGCCTTTA-1': 1, 'TCAGTGGAAGATCC-1': 1, 'TCAGTTACCTACGA-1': 1, 'TCAGTTACTAGAAG-1': 1, 'TCATCAACCCGATA-1': 1, 'TCATCAACTGTTCT-1': 1, 'TCATCATGCAGTTG-1': 1, 'TCATCCCTTACTGG-1': 1, 'TCATTCGATACAGC-1': 1, 'TCCACGTGGAAACA-1': 1, 'TCCACTCTACACTG-1': 1, 'TCCACTCTGAGCTT-1': 1, 'TCCACTCTTACTTC-1': 1, 'TCCATAACAAAGTG-1': 1, 'TCCATAACCGTAGT-1': 1, 'TCCATAACGATGAA-1': 1, 'TCCATAACTACGCA-1': 1, 'TCCATCCTCCCTAC-1': 1, 'TCCCACGATCATTC-1': 1, 'TCCCATCTCAAAGA-1': 1, 'TCCCGAACACAGTC-1': 1, 'TCCCGAACTTCGCC-1': 1, 'TCCCGATGAGATCC-1': 1, 'TCCCGATGCCTGAA-1': 1, 'TCCCTACTCAACTG-1': 1, 'TCCGAAGACAATCG-1': 1, 'TCCGAAGACGTTAG-1': 1, 'TCCGGACTGAGGTG-1': 1, 'TCCGGACTGTACGT-1': 1, 'TCCTAAACATCGAC-1': 1, 'TCCTAAACCGAGAG-1': 1, 'TCCTAAACCGCATA-1': 1, 'TCCTAATGGTTTGG-1': 1, 'TCCTACCTGTCGTA-1': 1, 'TCCTATGAAAAGCA-1': 1, 'TCGAATCTCTGGTA-1': 1, 'TCGACCTGCCGATA-1': 1, 'TCGACGCTTCTATC-1': 1, 'TCGACGCTTTGACG-1': 1, 'TCGAGAACGACAGG-1': 1, 'TCGAGAACGTTAGC-1': 1, 'TCGAGCCTATCAGC-1': 1, 'TCGAGCCTGCGAGA-1': 1, 'TCGAGCCTTGTGAC-1': 1, 'TCGATACTATTCCT-1': 1, 'TCGATACTTGCACA-1': 1, 'TCGATTTGATGCCA-1': 1, 'TCGATTTGCACTCC-1': 1, 'TCGATTTGCAGCTA-1': 1, 'TCGATTTGCCTACC-1': 1, 'TCGATTTGTCGTGA-1': 1, 'TCGCAGCTAGATCC-1': 1, 'TCGCCATGAGACTC-1': 1, 'TCGCCATGTGGTCA-1': 1, 'TCGGACCTAACAGA-1': 1, 'TCGGACCTATAAGG-1': 1, 'TCGGACCTGTACAC-1': 1, 'TCGGTAGAGTAGGG-1': 1, 'TCGGTAGATCCCAC-1': 1, 'TCGTAGGATCGACA-1': 1, 'TCGTTATGGACAAA-1': 1, 'TCTAACACCAGTTG-1': 1, 'TCTAACACGAGCAG-1': 1, 'TCTAACTGAACCAC-1': 1, 'TCTAAGCTAATGCC-1': 1, 'TCTAAGCTTAGTCG-1': 1, 'TCTAAGCTTCTAGG-1': 1, 'TCTAAGCTTGTTCT-1': 1, 'TCTAAGCTTTCGCC-1': 1, 'TCTACAACGACTAC-1': 1, 'TCTAGACTTAGAAG-1': 1, 'TCTAGTTGCACCAA-1': 1, 'TCTATGTGAAGAGT-1': 1, 'TCTATGTGAGTCTG-1': 1, 'TCTCAAACCTAAGC-1': 1, 'TCTCTAGAATTTCC-1': 1, 'TCTGATACACGTGT-1': 1, 'TCTGATACTCGCCT-1': 1, 'TCTTACGAACCTGA-1': 1, 'TCTTCAGAGCTACA-1': 1, 'TCTTGATGCGGAGA-1': 1, 'TGAAATTGGTGAGG-1': 1, 'TGAACCGAAAACGA-1': 1, 'TGAACCGACTACTT-1': 1, 'TGAACCGATTCGGA-1': 1, 'TGAAGCACTCACGA-1': 1, 'TGAAGCTGAACGAA-1': 1, 'TGAAGCTGCATGGT-1': 1, 'TGAAGCTGCGTAAC-1': 1, 'TGAATAACCACTTT-1': 1, 'TGAATAACTCCCAC-1': 1, 'TGACACGACCTTAT-1': 1, 'TGACCAGACAACCA-1': 1, 'TGACCAGAGGATTC-1': 1, 'TGACCGCTAAAAGC-1': 1, 'TGACCGCTCTGCAA-1': 1, 'TGACGATGCAAAGA-1': 1, 'TGACGCCTGTACCA-1': 1, 'TGACGCCTTTACTC-1': 1, 'TGACTGGAAGAGAT-1': 1, 'TGACTGGACCGTAA-1': 1, 'TGACTGGACGCAAT-1': 1, 'TGACTGGAGGACAG-1': 1, 'TGACTGGATTCTCA-1': 1, 'TGACTTACACACCA-1': 1, 'TGACTTACAGTCTG-1': 1, 'TGACTTTGCGCATA-1': 1, 'TGACTTTGTTTGTC-1': 1, 'TGAGACACAAGGTA-1': 1, 'TGAGACACTCAAGC-1': 1, 'TGAGCTGAATGCTG-1': 1, 'TGAGCTGACTGGAT-1': 1, 'TGAGCTGATGCTAG-1': 1, 'TGAGGACTCTCATT-1': 1, 'TGAGGACTTCATTC-1': 1, 'TGAGGTACGAACCT-1': 1, 'TGAGTCGAGTTACG-1': 1, 'TGAGTGACTGAGCT-1': 1, 'TGATAAACGAATCC-1': 1, 'TGATAAACTCCGTC-1': 1, 'TGATAAACTTTCAC-1': 1, 'TGATACCTCACTAG-1': 1, 'TGATACCTGTTGGT-1': 1, 'TGATACCTTATGCG-1': 1, 'TGATACCTTGAAGA-1': 1, 'TGATATGAACCTTT-1': 1, 'TGATCACTAGCATC-1': 1, 'TGATCACTCTCGCT-1': 1, 'TGATCACTTCTACT-1': 1, 'TGATCGGACTGACA-1': 1, 'TGATCGGAGGAGCA-1': 1, 'TGATCGGATATGCG-1': 1, 'TGATTAGACATTGG-1': 1, 'TGATTAGATGACTG-1': 1, 'TGATTAGATGCTAG-1': 1, 'TGATTCACTATGCG-1': 1, 'TGATTCACTGTCAG-1': 1, 'TGATTCTGCCGAAT-1': 1, 'TGATTCTGCTCTTA-1': 1, 'TGCAAGTGAGAACA-1': 1, 'TGCAAGTGGGTAGG-1': 1, 'TGCAATCTTCAGGT-1': 1, 'TGCACAGACGACAT-1': 1, 'TGCCAAGAGCAGTT-1': 1, 'TGCCAAGATCTCTA-1': 1, 'TGCCACTGAACGTC-1': 1, 'TGCCACTGCGATAC-1': 1, 'TGCCAGCTTGGCAT-1': 1, 'TGCCCAACAGCAAA-1': 1, 'TGCCCAACCGCATA-1': 1, 'TGCCGACTCTCCCA-1': 1, 'TGCGAAACAGTCAC-1': 1, 'TGCGAAACGTTGCA-1': 1, 'TGCGATGAACGGTT-1': 1, 'TGCGATGACCTCGT-1': 1, 'TGCGATGACTAGTG-1': 1, 'TGCGATGACTGCTC-1': 1, 'TGCGATGACTTGCC-1': 1, 'TGCGATGAGTGCTA-1': 1, 'TGCGCACTCTTGAG-1': 1, 'TGCGTAGAATAAGG-1': 1, 'TGCGTAGACGGGAA-1': 1, 'TGCGTAGATGGTCA-1': 1, 'TGCTAGGAAACCGT-1': 1, 'TGCTAGGATAGTCG-1': 1, 'TGCTATACGGTTCA-1': 1, 'TGCTATACTGCTGA-1': 1, 'TGCTGAGAGAGCAG-1': 1, 'TGCTGAGATTATCC-1': 1, 'TGGAAAGACTCTCG-1': 1, 'TGGAAAGAGCGATT-1': 1, 'TGGAAAGAGGTCAT-1': 1, 'TGGAAAGATATGGC-1': 1, 'TGGAACACAAACAG-1': 1, 'TGGAACACGCTAAC-1': 1, 'TGGAAGCTCAGATC-1': 1, 'TGGACCCTACACTG-1': 1, 'TGGACCCTCATGGT-1': 1, 'TGGACCCTGGTACT-1': 1, 'TGGACTGAGTATGC-1': 1, 'TGGAGACTATCAGC-1': 1, 'TGGAGACTTCAAGC-1': 1, 'TGGAGACTTGACCA-1': 1, 'TGGAGGGACGGAGA-1': 1, 'TGGAGGGAGCTATG-1': 1, 'TGGATCGATAAAGG-1': 1, 'TGGATGTGACCTAG-1': 1, 'TGGATGTGTGAAGA-1': 1, 'TGGATTCTCATACG-1': 1, 'TGGCAATGCTTGTT-1': 1, 'TGGCACCTTCACGA-1': 1, 'TGGCACCTTCAGTG-1': 1, 'TGGGTATGAAGAGT-1': 1, 'TGGGTATGCACAAC-1': 1, 'TGGGTATGGTACGT-1': 1, 'TGGGTATGTTTGGG-1': 1, 'TGGTAGACATGCCA-1': 1, 'TGGTAGACCCTCAC-1': 1, 'TGGTAGACCTGATG-1': 1, 'TGGTAGTGCACTGA-1': 1, 'TGGTATCTAAACAG-1': 1, 'TGGTATCTCTTCCG-1': 1, 'TGGTCAGACCCAAA-1': 1, 'TGGTTACTGACGTT-1': 1, 'TGGTTACTGTTCTT-1': 1, 'TGTAACCTAGAGGC-1': 1, 'TGTAACCTTGCCTC-1': 1, 'TGTAATGACACAAC-1': 1, 'TGTAATGAGGTAAA-1': 1, 'TGTACTTGCTCTAT-1': 1, 'TGTAGGTGCGAGAG-1': 1, 'TGTAGGTGCTATGG-1': 1, 'TGTAGGTGCTCTAT-1': 1, 'TGTAGGTGTGCTGA-1': 1, 'TGTAGTCTTCCAGA-1': 1, 'TGTAGTCTTGCACA-1': 1, 'TGTATCTGTTAGGC-1': 1, 'TGTATGCTCATGGT-1': 1, 'TGTATGCTGTAGGG-1': 1, 'TGTATGCTTTCATC-1': 1, 'TGTCAGGAATACCG-1': 1, 'TGTCAGGAGATGAA-1': 1, 'TGTCTAACCCCTTG-1': 1, 'TGTGACGATTCTCA-1': 1, 'TGTGAGACTGTCAG-1': 1, 'TGTGAGACTTGAGC-1': 1, 'TGTGAGTGACCACA-1': 1, 'TGTGAGTGAGTGCT-1': 1, 'TGTGAGTGGAGATA-1': 1, 'TGTGATCTCTCTAT-1': 1, 'TGTGATCTGACACT-1': 1, 'TGTGGATGGCCAAT-1': 1, 'TGTTAAGACAAAGA-1': 1, 'TGTTAAGATAAGGA-1': 1, 'TGTTACACCGCATA-1': 1, 'TGTTACACGACTAC-1': 1, 'TGTTACTGGCTACA-1': 1, 'TGTTACTGTAGTCG-1': 1, 'TTAACCACCGTAAC-1': 1, 'TTAACCACTAAGGA-1': 1, 'TTAACCACTCAGAC-1': 1, 'TTACACACGTGTTG-1': 1, 'TTACACACTCCTAT-1': 1, 'TTACCATGAATCGC-1': 1, 'TTACCATGGTTGAC-1': 1, 'TTACCATGTGTCTT-1': 1, 'TTACCATGTTGTGG-1': 1, 'TTACGACTGAGAGC-1': 1, 'TTACGACTTGACAC-1': 1, 'TTACGTACGTTCAG-1': 1, 'TTACTCGAAGAATG-1': 1, 'TTACTCGACGCAAT-1': 1, 'TTACTCGAGGGTGA-1': 1, 'TTACTCGATCTACT-1': 1, 'TTAGAATGTGGTGT-1': 1, 'TTAGAATGTGTAGC-1': 1, 'TTAGACCTCCTACC-1': 1, 'TTAGACCTCCTTTA-1': 1, 'TTAGCTACAACCGT-1': 1, 'TTAGCTACTGTCCC-1': 1, 'TTAGCTACTTTCGT-1': 1, 'TTAGGGACGCGAAG-1': 1, 'TTAGGGTGCTGGAT-1': 1, 'TTAGGGTGTCCTGC-1': 1, 'TTAGGTCTACTTTC-1': 1, 'TTAGTCACCAGTTG-1': 1, 'TTAGTCTGAAAGCA-1': 1, 'TTAGTCTGCCAACA-1': 1, 'TTAGTCTGTGCACA-1': 1, 'TTATCCGACTAGTG-1': 1, 'TTATCCGAGAAAGT-1': 1, 'TTATGAGAGATAAG-1': 1, 'TTATGCACGTCACA-1': 1, 'TTATGGCTTATGGC-1': 1, 'TTATTCCTATGCTG-1': 1, 'TTATTCCTGGACAG-1': 1, 'TTATTCCTGGTACT-1': 1, 'TTATTCCTTCGTGA-1': 1, 'TTCAAAGATAAAGG-1': 1, 'TTCAACACAACAGA-1': 1, 'TTCAACACCCCAAA-1': 1, 'TTCAACACGGACGA-1': 1, 'TTCAAGCTAAGAAC-1': 1, 'TTCAAGCTAGATGA-1': 1, 'TTCAAGCTGTTGAC-1': 1, 'TTCAAGCTTGATGC-1': 1, 'TTCAAGCTTTCGCC-1': 1, 'TTCACAACCCGTTC-1': 1, 'TTCACAACGTCTGA-1': 1, 'TTCAGACTACCCAA-1': 1, 'TTCAGACTCTCGAA-1': 1, 'TTCAGTACCGACTA-1': 1, 'TTCAGTACTCAAGC-1': 1, 'TTCAGTACTCCTAT-1': 1, 'TTCAGTTGCCAAGT-1': 1, 'TTCAGTTGTCCTTA-1': 1, 'TTCAGTTGTCTAGG-1': 1, 'TTCAGTTGTCTCGC-1': 1, 'TTCATCGAGGTGGA-1': 1, 'TTCATGTGTGGTGT-1': 1, 'TTCATTCTATGTCG-1': 1, 'TTCATTCTTCTCTA-1': 1, 'TTCCAAACCTATGG-1': 1, 'TTCCAAACCTCCCA-1': 1, 'TTCCAAACTCCCAC-1': 1, 'TTCCAAACTTGACG-1': 1, 'TTCCATGACGAGAG-1': 1, 'TTCCATGACTGTCC-1': 1, 'TTCCCACTTGAGGG-1': 1, 'TTCCCACTTGTCTT-1': 1, 'TTCCTAGAAAGTGA-1': 1, 'TTCCTAGACTAGTG-1': 1, 'TTCGAGGACTCTAT-1': 1, 'TTCGAGGAGGGCAA-1': 1, 'TTCGAGGATAGAAG-1': 1, 'TTCGATTGAGCATC-1': 1, 'TTCGGAGAATGCCA-1': 1, 'TTCGGAGATGTGCA-1': 1, 'TTCGTATGAAAAGC-1': 1, 'TTCGTATGGATAGA-1': 1, 'TTCGTATGGTCTGA-1': 1, 'TTCGTATGTCCTTA-1': 1, 'TTCTACGAACGTAC-1': 1, 'TTCTACGAGTTGGT-1': 1, 'TTCTAGTGACACGT-1': 1, 'TTCTAGTGCATGAC-1': 1, 'TTCTAGTGGAGAGC-1': 1, 'TTCTAGTGGTCACA-1': 1, 'TTCTCAGAAGAGAT-1': 1, 'TTCTCAGAAGCATC-1': 1, 'TTCTCAGATGGAGG-1': 1, 'TTCTGATGGAGACG-1': 1, 'TTCTTACTCTGGAT-1': 1, 'TTGAACCTCCTTGC-1': 1, 'TTGAATGAACTACG-1': 1, 'TTGAATGACTTACT-1': 1, 'TTGAATGATCTCAT-1': 1, 'TTGACACTCTGTAG-1': 1, 'TTGACACTGATAAG-1': 1, 'TTGAGGACAGAACA-1': 1, 'TTGAGGACTACGCA-1': 1, 'TTGAGGTGGACGGA-1': 1, 'TTGCATTGAGCTAC-1': 1, 'TTGCATTGCTAAGC-1': 1, 'TTGCATTGTGACTG-1': 1, 'TTGCTAACACCAAC-1': 1, 'TTGCTAACACGCTA-1': 1, 'TTGCTAACCACTCC-1': 1, 'TTGCTATGGTACGT-1': 1, 'TTGCTATGGTAGGG-1': 1, 'TTGGAGACCAATCG-1': 1, 'TTGGAGACGCTATG-1': 1, 'TTGGAGACTATGGC-1': 1, 'TTGGGAACTGAACC-1': 1, 'TTGGTACTACTGGT-1': 1, 'TTGGTACTCTTAGG-1': 1, 'TTGGTACTGAATCC-1': 1, 'TTGGTACTGGATTC-1': 1, 'TTGTACACGTTGTG-1': 1, 'TTGTACACTTGCAG-1': 1, 'TTGTAGCTAGCTCA-1': 1, 'TTGTAGCTCTCTTA-1': 1, 'TTGTCATGGACGGA-1': 1, 'TTTAGAGATCCTCG-1': 1, 'TTTAGCTGATACCG-1': 1, 'TTTAGCTGGATACC-1': 1, 'TTTAGCTGTACTCT-1': 1, 'TTTAGGCTCCTTTA-1': 1, 'TTTATCCTGTTGTG-1': 1, 'TTTCACGAGGTTCA-1': 1, 'TTTCAGTGGAAGGC-1': 1, 'TTTCAGTGTCACGA-1': 1, 'TTTCAGTGTCTATC-1': 1, 'TTTCAGTGTGCAGT-1': 1, 'TTTCCAGAGGTGAG-1': 1, 'TTTCGAACACCTGA-1': 1, 'TTTCGAACTCTCAT-1': 1, 'TTTCTACTGAGGCA-1': 1, 'TTTCTACTTCCTCG-1': 1, 'TTTGCATGAGAGGC-1': 1, 'TTTGCATGCCTCAC-1': 1}}, 'louvain': {'options': {'B cells': 342, 'CD14+ Monocytes': 480, 'CD4 T cells': 1144, 'CD8 T cells': 316, 'Dendritic cells': 37, 'FCGR3A+ Monocytes': 150, 'Megakaryocytes': 15, 'NK cells': 154}}, 'n_counts': {'range': {'max': 8875.0, 'min': 556.0}}, 'n_genes': {'range': {'max': 2455, 'min': 212}}, 'percent_mito': {'range': {'max': 0.049938347190618515, 'min': 0.0}}}, 'reactivelimit': 1000000, 'schema': {'CellName': {'displayname': 'Name', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, 'louvain': {'displayname': 'Louvain Cluster', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, 'n_counts': {'displayname': 'Num Counts', 'include': True, 'type': 'float', 'variabletype': 'continuous'}, 'n_genes': {'displayname': 'Num Genes', 'include': True, 'type': 'int', 'variabletype': 'continuous'}, 'percent_mito': {'displayname': 'Mitochondrial Percentage', 'include': True, 'type': 'float', 'variabletype': 'continuous'}}}, 'status': {'error': False, 'errormessage': ''}} + assert data == result_data diff --git a/configuration/babel/babel.dev.js b/cellxgene/configuration/babel/babel.dev.js similarity index 100% rename from configuration/babel/babel.dev.js rename to cellxgene/configuration/babel/babel.dev.js diff --git a/configuration/babel/babel.prod.js b/cellxgene/configuration/babel/babel.prod.js similarity index 100% rename from configuration/babel/babel.prod.js rename to cellxgene/configuration/babel/babel.prod.js diff --git a/configuration/babel/babel.test.js b/cellxgene/configuration/babel/babel.test.js similarity index 100% rename from configuration/babel/babel.test.js rename to cellxgene/configuration/babel/babel.test.js diff --git a/configuration/eslint/eslint.js b/cellxgene/configuration/eslint/eslint.js similarity index 100% rename from configuration/eslint/eslint.js rename to cellxgene/configuration/eslint/eslint.js diff --git a/configuration/polyfills/polyfills.js b/cellxgene/configuration/polyfills/polyfills.js similarity index 100% rename from configuration/polyfills/polyfills.js rename to cellxgene/configuration/polyfills/polyfills.js diff --git a/configuration/webpack/webpack.config.dev.js b/cellxgene/configuration/webpack/webpack.config.dev.js similarity index 100% rename from configuration/webpack/webpack.config.dev.js rename to cellxgene/configuration/webpack/webpack.config.dev.js diff --git a/configuration/webpack/webpack.config.prod.js b/cellxgene/configuration/webpack/webpack.config.prod.js similarity index 100% rename from configuration/webpack/webpack.config.prod.js rename to cellxgene/configuration/webpack/webpack.config.prod.js diff --git a/favicon.png b/cellxgene/favicon.png similarity index 100% rename from favicon.png rename to cellxgene/favicon.png diff --git a/index.html b/cellxgene/index.html similarity index 100% rename from index.html rename to cellxgene/index.html diff --git a/index_template.html b/cellxgene/index_template.html similarity index 100% rename from index_template.html rename to cellxgene/index_template.html diff --git a/package.json b/cellxgene/package.json similarity index 100% rename from package.json rename to cellxgene/package.json diff --git a/server/development.js b/cellxgene/server/development.js similarity index 100% rename from server/development.js rename to cellxgene/server/development.js diff --git a/server/production.js b/cellxgene/server/production.js similarity index 100% rename from server/production.js rename to cellxgene/server/production.js diff --git a/server/utils.js b/cellxgene/server/utils.js similarity index 100% rename from server/utils.js rename to cellxgene/server/utils.js diff --git a/src/actions/index.js b/cellxgene/src/actions/index.js similarity index 100% rename from src/actions/index.js rename to cellxgene/src/actions/index.js diff --git a/src/components/_experimentalWebGLHeatmap/heatmap.js b/cellxgene/src/components/_experimentalWebGLHeatmap/heatmap.js similarity index 100% rename from src/components/_experimentalWebGLHeatmap/heatmap.js rename to cellxgene/src/components/_experimentalWebGLHeatmap/heatmap.js diff --git a/src/components/_experimentalWebGLHeatmap/orbit-control.js b/cellxgene/src/components/_experimentalWebGLHeatmap/orbit-control.js similarity index 100% rename from src/components/_experimentalWebGLHeatmap/orbit-control.js rename to cellxgene/src/components/_experimentalWebGLHeatmap/orbit-control.js diff --git a/src/components/_experimentalWebGLHeatmap/popup.js b/cellxgene/src/components/_experimentalWebGLHeatmap/popup.js similarity index 100% rename from src/components/_experimentalWebGLHeatmap/popup.js rename to cellxgene/src/components/_experimentalWebGLHeatmap/popup.js diff --git a/src/components/app.js b/cellxgene/src/components/app.js similarity index 100% rename from src/components/app.js rename to cellxgene/src/components/app.js diff --git a/cellxgene/src/components/categorical/categorical.css b/cellxgene/src/components/categorical/categorical.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/categorical/categorical.js b/cellxgene/src/components/categorical/categorical.js similarity index 100% rename from src/components/categorical/categorical.js rename to cellxgene/src/components/categorical/categorical.js diff --git a/src/components/categorical/util.js b/cellxgene/src/components/categorical/util.js similarity index 100% rename from src/components/categorical/util.js rename to cellxgene/src/components/categorical/util.js diff --git a/src/components/categorical/value.js b/cellxgene/src/components/categorical/value.js similarity index 100% rename from src/components/categorical/value.js rename to cellxgene/src/components/categorical/value.js diff --git a/src/components/continuous/continuous.js b/cellxgene/src/components/continuous/continuous.js similarity index 100% rename from src/components/continuous/continuous.js rename to cellxgene/src/components/continuous/continuous.js diff --git a/src/components/continuous/drawAxes.js b/cellxgene/src/components/continuous/drawAxes.js similarity index 100% rename from src/components/continuous/drawAxes.js rename to cellxgene/src/components/continuous/drawAxes.js diff --git a/src/components/continuous/drawLinesCanvas.js b/cellxgene/src/components/continuous/drawLinesCanvas.js similarity index 100% rename from src/components/continuous/drawLinesCanvas.js rename to cellxgene/src/components/continuous/drawLinesCanvas.js diff --git a/src/components/continuous/histogramBrush.js b/cellxgene/src/components/continuous/histogramBrush.js similarity index 100% rename from src/components/continuous/histogramBrush.js rename to cellxgene/src/components/continuous/histogramBrush.js diff --git a/src/components/continuous/parallel.js b/cellxgene/src/components/continuous/parallel.js similarity index 100% rename from src/components/continuous/parallel.js rename to cellxgene/src/components/continuous/parallel.js diff --git a/src/components/continuous/parallelCoordinates.css b/cellxgene/src/components/continuous/parallelCoordinates.css similarity index 100% rename from src/components/continuous/parallelCoordinates.css rename to cellxgene/src/components/continuous/parallelCoordinates.css diff --git a/src/components/continuous/setupParallelCoordinates.js b/cellxgene/src/components/continuous/setupParallelCoordinates.js similarity index 100% rename from src/components/continuous/setupParallelCoordinates.js rename to cellxgene/src/components/continuous/setupParallelCoordinates.js diff --git a/src/components/continuous/util.js b/cellxgene/src/components/continuous/util.js similarity index 100% rename from src/components/continuous/util.js rename to cellxgene/src/components/continuous/util.js diff --git a/src/components/continuousLegend/index.js b/cellxgene/src/components/continuousLegend/index.js similarity index 100% rename from src/components/continuousLegend/index.js rename to cellxgene/src/components/continuousLegend/index.js diff --git a/src/components/expression/cellSetButtons.js b/cellxgene/src/components/expression/cellSetButtons.js similarity index 100% rename from src/components/expression/cellSetButtons.js rename to cellxgene/src/components/expression/cellSetButtons.js diff --git a/src/components/expression/diffExpHeatmap.js b/cellxgene/src/components/expression/diffExpHeatmap.js similarity index 100% rename from src/components/expression/diffExpHeatmap.js rename to cellxgene/src/components/expression/diffExpHeatmap.js diff --git a/cellxgene/src/components/expression/expression.css b/cellxgene/src/components/expression/expression.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/expression/expressionButtons.js b/cellxgene/src/components/expression/expressionButtons.js similarity index 100% rename from src/components/expression/expressionButtons.js rename to cellxgene/src/components/expression/expressionButtons.js diff --git a/src/components/framework/buttons.css b/cellxgene/src/components/framework/buttons.css similarity index 100% rename from src/components/framework/buttons.css rename to cellxgene/src/components/framework/buttons.css diff --git a/src/components/framework/container.css b/cellxgene/src/components/framework/container.css similarity index 100% rename from src/components/framework/container.css rename to cellxgene/src/components/framework/container.css diff --git a/src/components/framework/container.js b/cellxgene/src/components/framework/container.js similarity index 100% rename from src/components/framework/container.js rename to cellxgene/src/components/framework/container.js diff --git a/src/components/framework/header.css b/cellxgene/src/components/framework/header.css similarity index 100% rename from src/components/framework/header.css rename to cellxgene/src/components/framework/header.css diff --git a/src/components/framework/header.js b/cellxgene/src/components/framework/header.js similarity index 100% rename from src/components/framework/header.js rename to cellxgene/src/components/framework/header.js diff --git a/src/components/framework/sectionHeader.js b/cellxgene/src/components/framework/sectionHeader.js similarity index 100% rename from src/components/framework/sectionHeader.js rename to cellxgene/src/components/framework/sectionHeader.js diff --git a/src/components/graph/drawPointsRegl.js b/cellxgene/src/components/graph/drawPointsRegl.js similarity index 100% rename from src/components/graph/drawPointsRegl.js rename to cellxgene/src/components/graph/drawPointsRegl.js diff --git a/src/components/graph/graph.css b/cellxgene/src/components/graph/graph.css similarity index 100% rename from src/components/graph/graph.css rename to cellxgene/src/components/graph/graph.css diff --git a/src/components/graph/graph.js b/cellxgene/src/components/graph/graph.js similarity index 100% rename from src/components/graph/graph.js rename to cellxgene/src/components/graph/graph.js diff --git a/src/components/graph/setupSVGandBrush.js b/cellxgene/src/components/graph/setupSVGandBrush.js similarity index 100% rename from src/components/graph/setupSVGandBrush.js rename to cellxgene/src/components/graph/setupSVGandBrush.js diff --git a/src/components/graph/util.js b/cellxgene/src/components/graph/util.js similarity index 100% rename from src/components/graph/util.js rename to cellxgene/src/components/graph/util.js diff --git a/src/components/joy/drawJoy.js b/cellxgene/src/components/joy/drawJoy.js similarity index 100% rename from src/components/joy/drawJoy.js rename to cellxgene/src/components/joy/drawJoy.js diff --git a/src/components/joy/joy.css b/cellxgene/src/components/joy/joy.css similarity index 100% rename from src/components/joy/joy.css rename to cellxgene/src/components/joy/joy.css diff --git a/src/components/joy/joy.js b/cellxgene/src/components/joy/joy.js similarity index 100% rename from src/components/joy/joy.js rename to cellxgene/src/components/joy/joy.js diff --git a/src/components/joy/joyParser.js b/cellxgene/src/components/joy/joyParser.js similarity index 100% rename from src/components/joy/joyParser.js rename to cellxgene/src/components/joy/joyParser.js diff --git a/src/components/leftsidebar.js b/cellxgene/src/components/leftsidebar.js similarity index 100% rename from src/components/leftsidebar.js rename to cellxgene/src/components/leftsidebar.js diff --git a/src/components/scatterplot/drawPointsRegl.js b/cellxgene/src/components/scatterplot/drawPointsRegl.js similarity index 100% rename from src/components/scatterplot/drawPointsRegl.js rename to cellxgene/src/components/scatterplot/drawPointsRegl.js diff --git a/src/components/scatterplot/scatterplot.css b/cellxgene/src/components/scatterplot/scatterplot.css similarity index 100% rename from src/components/scatterplot/scatterplot.css rename to cellxgene/src/components/scatterplot/scatterplot.css diff --git a/src/components/scatterplot/scatterplot.js b/cellxgene/src/components/scatterplot/scatterplot.js similarity index 100% rename from src/components/scatterplot/scatterplot.js rename to cellxgene/src/components/scatterplot/scatterplot.js diff --git a/src/components/scatterplot/setupScatterplot.js b/cellxgene/src/components/scatterplot/setupScatterplot.js similarity index 100% rename from src/components/scatterplot/setupScatterplot.js rename to cellxgene/src/components/scatterplot/setupScatterplot.js diff --git a/src/components/scatterplot/util.js b/cellxgene/src/components/scatterplot/util.js similarity index 100% rename from src/components/scatterplot/util.js rename to cellxgene/src/components/scatterplot/util.js diff --git a/src/globals.js b/cellxgene/src/globals.js similarity index 100% rename from src/globals.js rename to cellxgene/src/globals.js diff --git a/cellxgene/src/index.css b/cellxgene/src/index.css new file mode 100644 index 00000000..e69de29b diff --git a/src/index.js b/cellxgene/src/index.js similarity index 100% rename from src/index.js rename to cellxgene/src/index.js diff --git a/src/middleware/updateCellColors.js b/cellxgene/src/middleware/updateCellColors.js similarity index 100% rename from src/middleware/updateCellColors.js rename to cellxgene/src/middleware/updateCellColors.js diff --git a/src/middleware/updateCellSelectionMiddleware.js b/cellxgene/src/middleware/updateCellSelectionMiddleware.js similarity index 100% rename from src/middleware/updateCellSelectionMiddleware.js rename to cellxgene/src/middleware/updateCellSelectionMiddleware.js diff --git a/src/middleware/updateURLMiddleware.js b/cellxgene/src/middleware/updateURLMiddleware.js similarity index 100% rename from src/middleware/updateURLMiddleware.js rename to cellxgene/src/middleware/updateURLMiddleware.js diff --git a/src/reducers/cells.js b/cellxgene/src/reducers/cells.js similarity index 100% rename from src/reducers/cells.js rename to cellxgene/src/reducers/cells.js diff --git a/src/reducers/controls.js b/cellxgene/src/reducers/controls.js similarity index 100% rename from src/reducers/controls.js rename to cellxgene/src/reducers/controls.js diff --git a/src/reducers/differential.js b/cellxgene/src/reducers/differential.js similarity index 100% rename from src/reducers/differential.js rename to cellxgene/src/reducers/differential.js diff --git a/src/reducers/expression.js b/cellxgene/src/reducers/expression.js similarity index 100% rename from src/reducers/expression.js rename to cellxgene/src/reducers/expression.js diff --git a/src/reducers/index.js b/cellxgene/src/reducers/index.js similarity index 100% rename from src/reducers/index.js rename to cellxgene/src/reducers/index.js diff --git a/src/reducers/initialize.js b/cellxgene/src/reducers/initialize.js similarity index 100% rename from src/reducers/initialize.js rename to cellxgene/src/reducers/initialize.js diff --git a/src/reducers/responsive.js b/cellxgene/src/reducers/responsive.js similarity index 100% rename from src/reducers/responsive.js rename to cellxgene/src/reducers/responsive.js diff --git a/src/util/camera.js b/cellxgene/src/util/camera.js similarity index 100% rename from src/util/camera.js rename to cellxgene/src/util/camera.js diff --git a/src/util/parseRGB.js b/cellxgene/src/util/parseRGB.js similarity index 100% rename from src/util/parseRGB.js rename to cellxgene/src/util/parseRGB.js diff --git a/src/util/renderQueue.js b/cellxgene/src/util/renderQueue.js similarity index 100% rename from src/util/renderQueue.js rename to cellxgene/src/util/renderQueue.js diff --git a/src/util/scaleLinear.js b/cellxgene/src/util/scaleLinear.js similarity index 100% rename from src/util/scaleLinear.js rename to cellxgene/src/util/scaleLinear.js diff --git a/src/util/scaleRGB.js b/cellxgene/src/util/scaleRGB.js similarity index 100% rename from src/util/scaleRGB.js rename to cellxgene/src/util/scaleRGB.js diff --git a/src/util/schema.js b/cellxgene/src/util/schema.js similarity index 100% rename from src/util/schema.js rename to cellxgene/src/util/schema.js diff --git a/src/util/typedCrossfilter/bitArray.js b/cellxgene/src/util/typedCrossfilter/bitArray.js similarity index 100% rename from src/util/typedCrossfilter/bitArray.js rename to cellxgene/src/util/typedCrossfilter/bitArray.js diff --git a/src/util/typedCrossfilter/index.js b/cellxgene/src/util/typedCrossfilter/index.js similarity index 100% rename from src/util/typedCrossfilter/index.js rename to cellxgene/src/util/typedCrossfilter/index.js diff --git a/src/util/typedCrossfilter/positiveIntervals.js b/cellxgene/src/util/typedCrossfilter/positiveIntervals.js similarity index 100% rename from src/util/typedCrossfilter/positiveIntervals.js rename to cellxgene/src/util/typedCrossfilter/positiveIntervals.js diff --git a/src/util/typedCrossfilter/util.js b/cellxgene/src/util/typedCrossfilter/util.js similarity index 100% rename from src/util/typedCrossfilter/util.js rename to cellxgene/src/util/typedCrossfilter/util.js From 9cf300caeb15414d53544aa871db1f0a45f55e86 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 5 Jun 2018 16:05:04 -0700 Subject: [PATCH 02/26] Fleshed out documentation and params for methods Given feedback from designing rest v2.0 --- backend/app/driver/driver.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index bc49c107..bb1027c0 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -27,31 +27,42 @@ class CXGDriver(metaclass=abc.ABCMeta): """ Filter cells from data and return a subset of the data :param filter: - :return: iterator through cells + :return: iterator through cell ids """ pass + # Should this return the order of metadata fields as the first value? @abstractmethod - def metadata_ranges(self, cells_iterator): + def metadata(self, cells_iterator, fields=None): """ + Generator for metadata. Gets the metadata values cell by cell and returns all value + or only certain values if names is not None + + :param cells_iterator: from filter cells, iterator for cellids + :param fields: list of keys for metadata to return, returns all metadata values if not set. + :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] """ + pass - @abstractmethod - def metadata(self, cells_iterator): - """ - """ - pass @abstractmethod def create_graph(self, cells_iterator): """ + Computes a n-d layout for cells through dimensionality reduction. + :param cells_iterator: from filter cells, iterator for cellids + :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] """ pass @abstractmethod - def diffexp(self, cells_iterator): + def diffexp(self, cells_iterator_1, cells_iterator_2): """ + Computes the top differentially expressed genes between two clusters + + :param cells_iterator_1: First set of cell ids + :param cells_iterator_2: Second set of cell ids + :return: Up in the air: I recommend [gene name, mean_expression_cells1, mean_expression_cells2, average_difference, statistic_value] """ pass From fabd3ca2ff2ae4bb0e5a88c898724e3ef7527b01 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Thu, 7 Jun 2018 15:22:32 -0700 Subject: [PATCH 03/26] Implement driver class for scanpy --- backend/app/driver/driver.py | 14 ++- backend/app/scanpy_engine/scanpy_engine.py | 139 +++++++++++++-------- 2 files changed, 96 insertions(+), 57 deletions(-) diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index bb1027c0..07fc1187 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -1,15 +1,23 @@ -from abc import ABC, abstractmethod +from abc import ABCMeta, abstractmethod -class CXGDriver(metaclass=abc.ABCMeta): +class CXGDriver(metaclass=ABCMeta): def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): - self.data = _load_data(data) + self.data = self._load_data(data) @abstractmethod @staticmethod def _load_data(data): pass + @abstractmethod + def _load_or_infer_schema(data): + pass + + @abstractmethod + def _set_cell_ids(self): + pass + @abstractmethod def cells(self): pass diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index 31cec9d7..f42bad54 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -1,84 +1,115 @@ -from os.path import join - import scanpy.api as sc import numpy as np from ..util.schema_parse import parse_schema +from ..driver import CXGDriver -class ScanpyEngine(): - def __init__(self, dataloc): - self.ADATA = sc.read(join(dataloc, "data.h5ad")) - self.cell_count = self._cell_count - self.schema = parse_schema(join(dataloc, "data_schema.json")) +class ScanpyEngine(CXGDriver): - def _cell_count(self): - return len(self.ADATA.obs.index) + def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): + self.data = self._load_data(data) + self.schema = self._load_or_infer_schema(schema) + self._set_cell_ids() + self.cell_count = self.data.shape[0] + # TODO Do I need this? + self.gene_count = self.data.shape[1] + self.graph_method = graph_method + self.diffexp_method = diffexp_method - def all_cells(self): - return self.ADATA.obs.index.tolist() - def all_genes(self): - return self.ADATA.var.index.tolist() + @staticmethod + def _load_data(data): + return sc.read(data) - def gene_count(self): - return len(self.ADATA.var.index) + def _load_or_infer_schema(schema): + data_schema = None + if not schema: + pass + else: + data_schema = parse_schema(schema) + return data_schema + + def _set_cell_ids(self): + self.data.obs['cxg_cell_id'] = list(range(self.data.obs.shape[0])) + self.data.obs["cell_name"] = list(self.data.obs.index) + self.data.obs.set_index('cxg_cell_id', inplace=True) + + def cells(self): + return list(self.data.obs.index) + + def cellids(self): + return list(self.data.obs.index) + + def genes(self): + return self.data.var.index.tolist() def filter_cells(self, filter): + """ + Filter cells from data and return a subset of the data + :param filter: + :return: iterator through cell ids + """ cell_idx = np.ones((self.cell_count(),), dtype=bool) + # TODO does this need to be a generator too? for key, value in filter.items(): if value["variable_type"] == "categorical": - key_idx = np.in1d(getattr(self.ADATA.obs, key), value["query"]) + key_idx = np.in1d(getattr(self.data.obs, key), value["query"]) cell_idx = np.logical_and(cell_idx, key_idx) else: min_ = value["query"]["min"] max_ = value["query"]["max"] if min_: - key_idx = np.array((getattr(self.ADATA.obs, key) >= min_).data) + key_idx = np.array((getattr(self.data.obs, key) >= min_).data) cell_idx = np.logical_and(cell_idx, key_idx) if max_: - key_idx = np.array((getattr(self.ADATA.obs, key) <= min_).data) + key_idx = np.array((getattr(self.data.obs, key) <= min_).data) cell_idx = np.logical_and(cell_idx, key_idx) - return self.ADATA[cell_idx, :] + # If this is slow, could vectorize with logical array and then loop through that + for idx in self.cell_count: + if cell_idx[idx]: + yield self.data.obs['cxg_cell_id'][idx] - @staticmethod - def metadata_ranges(data, schema): - metadata_ranges = {} - for field in schema: - if schema[field]["variabletype"] == "categorical": - group_by = field - if group_by == "CellName": - group_by = 'index' - metadata_ranges[field] = {"options": data.obs.groupby(group_by).size().to_dict()} - else: - metadata_ranges[field] = { - "range": { - "min": data.obs[field].min(), - "max": data.obs[field].max() - } - } - return metadata_ranges + # Should this return the order of metadata fields as the first value? + def metadata(self, cells_iterator, fields=None): + """ + Generator for metadata. Gets the metadata values cell by cell and returns all value + or only certain values if names is not None - @staticmethod - def metadata(data): - cell_ids = [] - metadata = data.obs.to_dict(orient="records") - # Do i have to loop twice? - for idx, cell_name in enumerate(data.obs.index): - metadata[idx]["CellName"] = cell_name - cell_ids.append(cell_name) - return metadata, cell_ids + :param cells_iterator: from filter cells, iterator for cellids + :param fields: list of keys for metadata to return, returns all metadata values if not set. + :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] + """ + if not fields: + fields = self.data.obs.columns.tolist() + for cell_id in cells_iterator: + yield [cell_id] + self.data.obs.loc[cell_id, [fields]].tolist() - @staticmethod - # TODO cache this - # TODO accept n-dim versions too - # TODO allow optional kw params to function - def create_graph(data, graph_method="umap"): - # Run the graph method - getattr(sc.tl, graph_method)(data) - graph = data.obsm["X_{graph_method}".format(graph_method=graph_method)] + + def create_graph(self, cells_iterator): + """ + Computes a n-d layout for cells through dimensionality reduction. + :param cells_iterator: from filter cells, iterator for cellids + :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] + """ + cell_ids = list(cells_iterator) + getattr(sc.tl, self.graph_method)(self.data[self.data.obs.index.isin(cell_ids)]) + graph = self.data.obsm["X_{graph_method}".format(graph_method=self.graph_method)] normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) - return np.hstack((data.obs.index.values.reshape(len(data.obs.index), 1), normalized_graph)).tolist() + for idx, cell_id in enumerate(cell_ids): + yield [cell_id] + normalized_graph[idx].tolist() + + + def diffexp(self, cells_iterator_1, cells_iterator_2): + """ + Computes the top differentially expressed genes between two clusters + + :param cells_iterator_1: First set of cell ids + :param cells_iterator_2: Second set of cell ids + :return: Up in the air: I recommend [gene name, mean_expression_cells1, mean_expression_cells2, average_difference, statistic_value] + """ + pass + From 1621d20bc4e799b3a2388ddd367becd243f595f0 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 22 Jun 2018 10:01:52 -0700 Subject: [PATCH 04/26] Minimum working iterator version Checkpointing. This is a minimum working version using the iterator. I basically hacked consuming the iterator since I want to switch directions, but this is a good place to come back to. --- backend/app/__init__.py | 10 ++--- backend/app/driver/driver.py | 3 +- backend/app/rest_api/rest.py | 28 +++++++----- backend/app/scanpy_engine/scanpy_engine.py | 52 +++++++++++++++++----- backend/app/util/utils.py | 11 ++++- backend/run.py | 2 +- 6 files changed, 74 insertions(+), 32 deletions(-) diff --git a/backend/app/__init__.py b/backend/app/__init__.py index 2bc0d452..166bc39b 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -16,8 +16,9 @@ CORS(app) #Config CONFIG_FILE = os.environ.get("CXG_CONFIG_FILE", default="scanpy-test.cfg") -CXG_DIR = os.environ.get("CXG_DIRECTORY", default="/Users/charlotteweaver/Documents/Git/cxg-v2/") +CXG_DIR = os.environ.get("CXG_DIRECTORY", default="/Users/charlotteweaver/Documents/Git/cxg-v2/data/") SECRET_KEY = os.environ.get("CXG_SECRET_KEY", default="SparkleAndShine") +ENGINE = os.environ.get("CXG_ENGINE", default="scanpy") # TODO remove the 2 when this is prod CXG_API_BASE = os.environ.get("CXG_API_BASE2", default="http://0.0.0.0:5005/api/") @@ -28,9 +29,8 @@ app.config.from_pyfile(os.path.join(CXG_DIR, "config", CONFIG_FILE), silent=True app.config.update( SECRET_KEY=SECRET_KEY, CXG_API_BASE=CXG_API_BASE, -) -app.config.update( - DATA=os.path.join(CXG_DIR, app.config["DATA_DIR"]), + ENGINE=ENGINE, + DATA=CXG_DIR ) app.config['PROFILE'] = True @@ -40,7 +40,7 @@ app.config['PROFILE'] = True data = None if app.config["ENGINE"] == "scanpy": from .scanpy_engine.scanpy_engine import ScanpyEngine - data = ScanpyEngine(app.config["DATA"]) + data = ScanpyEngine(app.config["DATA"], schema="data_schema.json") REACTIVE_LIMIT = 1_000_000 diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index 07fc1187..085ae8ba 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -1,12 +1,13 @@ from abc import ABCMeta, abstractmethod + class CXGDriver(metaclass=ABCMeta): def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): self.data = self._load_data(data) - @abstractmethod @staticmethod + @abstractmethod def _load_data(data): pass diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py index e33b7aac..6603f4b7 100644 --- a/backend/app/rest_api/rest.py +++ b/backend/app/rest_api/rest.py @@ -1,10 +1,10 @@ from flask import ( - Blueprint, render_template, request, url_for + Blueprint, request ) from flask_restful_swagger_2 import Api, swagger, Resource -from ..util.utils import make_payload -from ..util.filter import parse_filter, QueryStringError +from ..util.utils import make_payload +from ..util.filter import parse_filter class InitializeAPI(Resource): @@ -88,15 +88,17 @@ class InitializeAPI(Resource): } }) def get(self): - from cxg import data, REACTIVE_LIMIT + from app import data, REACTIVE_LIMIT return make_payload({ "schema": data.schema, - "ranges": data.metadata_ranges(data.ADATA, data.schema), - "cellcount": data.cell_count(), + "cellcount": data.cell_count, "reactivelimit": REACTIVE_LIMIT, - "genes": data.all_genes(), + "genes": data.genes(), + "ranges": data.metadata_ranges(), + }) + class CellsAPI(Resource): @swagger.doc({ 'summary': 'filter based on metadata fields to get a subset cells, expression data, and metadata', @@ -189,7 +191,7 @@ class CellsAPI(Resource): } }) def get(self): - from cxg import data + from app import data payload = { "cellids": [], "metadata": [], @@ -199,14 +201,16 @@ class CellsAPI(Resource): } # get query params filter = parse_filter(request.args, data.schema) - filtered_data = data.filter_cells(filter) - payload["metadata"], payload["cellids"] = data.metadata(filtered_data) - payload["ranges"] = data.metadata_ranges(filtered_data, data.schema) + filtered_data = list(data.filter_cells(filter)) + payload["metadata"] = list(data.metadata(filtered_data)) + payload["ranges"] = list(data.metadata_ranges(filtered_data)) + payload["cellids"] = filtered_data payload["cellcount"] = len(payload["cellids"]) - payload["graph"] = data.create_graph(filtered_data) + payload["graph"] = list(data.create_graph(filtered_data)) return make_payload(payload) + def get_api_resources(): bp = Blueprint('api', __name__, url_prefix='/api/v2.0') api = Api(bp, add_api_spec_resource=False) diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index f42bad54..e70fa53c 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -1,15 +1,16 @@ import scanpy.api as sc import numpy as np +import os from ..util.schema_parse import parse_schema -from ..driver import CXGDriver +from ..driver.driver import CXGDriver class ScanpyEngine(CXGDriver): - def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): + def __init__(self, data, schema=None, graph_method="umap", diffexp_method="ttest"): self.data = self._load_data(data) - self.schema = self._load_or_infer_schema(schema) + self.schema = self._load_or_infer_schema(data, schema) self._set_cell_ids() self.cell_count = self.data.shape[0] # TODO Do I need this? @@ -20,14 +21,15 @@ class ScanpyEngine(CXGDriver): @staticmethod def _load_data(data): - return sc.read(data) + return sc.read(os.path.join(data, "data.h5ad")) - def _load_or_infer_schema(schema): + @staticmethod + def _load_or_infer_schema(data, schema): data_schema = None if not schema: pass else: - data_schema = parse_schema(schema) + data_schema = parse_schema(os.path.join(data,schema)) return data_schema def _set_cell_ids(self): @@ -38,8 +40,12 @@ class ScanpyEngine(CXGDriver): def cells(self): return list(self.data.obs.index) - def cellids(self): - return list(self.data.obs.index) + def cellids(self, cells_iterator=None): + if cells_iterator: + data = self.data.obs.iloc[[i for i in cells_iterator], :] + else: + data = self.data.obs + return list(data.index) def genes(self): return self.data.var.index.tolist() @@ -50,7 +56,7 @@ class ScanpyEngine(CXGDriver): :param filter: :return: iterator through cell ids """ - cell_idx = np.ones((self.cell_count(),), dtype=bool) + cell_idx = np.ones((self.cell_count,), dtype=bool) # TODO does this need to be a generator too? for key, value in filter.items(): if value["variable_type"] == "categorical": @@ -66,9 +72,31 @@ class ScanpyEngine(CXGDriver): key_idx = np.array((getattr(self.data.obs, key) <= min_).data) cell_idx = np.logical_and(cell_idx, key_idx) # If this is slow, could vectorize with logical array and then loop through that - for idx in self.cell_count: + for idx in range(self.cell_count): if cell_idx[idx]: - yield self.data.obs['cxg_cell_id'][idx] + yield self.data.obs.index[idx] + + + def metadata_ranges(self, cells_iterator=None): + metadata_ranges = {} + if cells_iterator: + data = self.data.obs.iloc[[i for i in cells_iterator], :] + else: + data = self.data.obs + for field in self.schema: + if self.schema[field]["variabletype"] == "categorical": + group_by = field + if group_by == "CellName": + group_by = 'cell_name' + metadata_ranges[field] = {"options": data.groupby(group_by).size().to_dict()} + else: + metadata_ranges[field] = { + "range": { + "min": data[field].min(), + "max": data[field].max() + } + } + return metadata_ranges # Should this return the order of metadata fields as the first value? def metadata(self, cells_iterator, fields=None): @@ -83,7 +111,7 @@ class ScanpyEngine(CXGDriver): if not fields: fields = self.data.obs.columns.tolist() for cell_id in cells_iterator: - yield [cell_id] + self.data.obs.loc[cell_id, [fields]].tolist() + yield [cell_id] + self.data.obs.loc[cell_id, fields].tolist() def create_graph(self, cells_iterator): diff --git a/backend/app/util/utils.py b/backend/app/util/utils.py index 26fe85eb..4f0fff77 100644 --- a/backend/app/util/utils.py +++ b/backend/app/util/utils.py @@ -1,6 +1,6 @@ import json from numpy import float32, integer -from flask import make_response, jsonify +from flask import make_response, jsonify, Response class Float32JSONEncoder(json.JSONEncoder): def default(self, obj): @@ -31,4 +31,13 @@ def make_payload(data, errormessage="", errorcode=200): } }), errorcode) +def make_streaming_response(data_generator, errorcode=200, content_type="application/json"): + # TODO headers + return Response(data_generator, status=errorcode, content_type=content_type) + + + + + + diff --git a/backend/run.py b/backend/run.py index b7608b65..6a8dee0c 100644 --- a/backend/run.py +++ b/backend/run.py @@ -1,3 +1,3 @@ -from cxg import app +from app import app app.run(host='0.0.0.0', debug=True, port=5005) From 9b4bcb7f7b482edc43900771b75fcd2977b05658 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 22 Jun 2018 11:00:22 -0700 Subject: [PATCH 05/26] Original /initialize working --- backend/app/driver/driver.py | 20 ++++++++------ backend/app/rest_api/rest.py | 4 +-- backend/app/scanpy_engine/scanpy_engine.py | 32 +++++++--------------- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index 085ae8ba..66d5b9e6 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -36,18 +36,18 @@ class CXGDriver(metaclass=ABCMeta): """ Filter cells from data and return a subset of the data :param filter: - :return: iterator through cell ids + :return: filtered dataframe """ pass # Should this return the order of metadata fields as the first value? @abstractmethod - def metadata(self, cells_iterator, fields=None): + def metadata(self, df, fields=None): """ Generator for metadata. Gets the metadata values cell by cell and returns all value or only certain values if names is not None - :param cells_iterator: from filter cells, iterator for cellids + :param df: from filter_cells, dataframe :param fields: list of keys for metadata to return, returns all metadata values if not set. :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] """ @@ -56,22 +56,26 @@ class CXGDriver(metaclass=ABCMeta): @abstractmethod - def create_graph(self, cells_iterator): + def create_graph(self, df): """ Computes a n-d layout for cells through dimensionality reduction. - :param cells_iterator: from filter cells, iterator for cellids + :param df: from filter_cells, dataframe :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] """ pass @abstractmethod - def diffexp(self, cells_iterator_1, cells_iterator_2): + def diffexp(self, df1, df2): """ Computes the top differentially expressed genes between two clusters - :param cells_iterator_1: First set of cell ids - :param cells_iterator_2: Second set of cell ids + :param df1: First set of cells + :param df2: Second set of cells :return: Up in the air: I recommend [gene name, mean_expression_cells1, mean_expression_cells2, average_difference, statistic_value] """ pass + + @abstractmethod + def expression(self, df): + pass diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py index 6603f4b7..411db278 100644 --- a/backend/app/rest_api/rest.py +++ b/backend/app/rest_api/rest.py @@ -201,9 +201,9 @@ class CellsAPI(Resource): } # get query params filter = parse_filter(request.args, data.schema) - filtered_data = list(data.filter_cells(filter)) + filtered_data = data.filter_cells(filter) payload["metadata"] = list(data.metadata(filtered_data)) - payload["ranges"] = list(data.metadata_ranges(filtered_data)) + payload["ranges"] = data.metadata_ranges(filtered_data) payload["cellids"] = filtered_data payload["cellcount"] = len(payload["cellids"]) payload["graph"] = list(data.create_graph(filtered_data)) diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index e70fa53c..1103b486 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -56,8 +56,7 @@ class ScanpyEngine(CXGDriver): :param filter: :return: iterator through cell ids """ - cell_idx = np.ones((self.cell_count,), dtype=bool) - # TODO does this need to be a generator too? + cell_idx = np.ones((self.cell_count(),), dtype=bool) for key, value in filter.items(): if value["variable_type"] == "categorical": key_idx = np.in1d(getattr(self.data.obs, key), value["query"]) @@ -71,34 +70,27 @@ class ScanpyEngine(CXGDriver): if max_: key_idx = np.array((getattr(self.data.obs, key) <= min_).data) cell_idx = np.logical_and(cell_idx, key_idx) - # If this is slow, could vectorize with logical array and then loop through that - for idx in range(self.cell_count): - if cell_idx[idx]: - yield self.data.obs.index[idx] + return self.data[cell_idx, :] - - def metadata_ranges(self, cells_iterator=None): + def metadata_ranges(self, df=None): metadata_ranges = {} - if cells_iterator: - data = self.data.obs.iloc[[i for i in cells_iterator], :] - else: - data = self.data.obs + if not df: + df = self.data for field in self.schema: if self.schema[field]["variabletype"] == "categorical": group_by = field if group_by == "CellName": group_by = 'cell_name' - metadata_ranges[field] = {"options": data.groupby(group_by).size().to_dict()} + metadata_ranges[field] = {"options": df.obs.groupby(group_by).size().to_dict()} else: metadata_ranges[field] = { "range": { - "min": data[field].min(), - "max": data[field].max() + "min": df.obs[field].min(), + "max": df.obs[field].max() } } return metadata_ranges - # Should this return the order of metadata fields as the first value? def metadata(self, cells_iterator, fields=None): """ Generator for metadata. Gets the metadata values cell by cell and returns all value @@ -129,13 +121,9 @@ class ScanpyEngine(CXGDriver): def diffexp(self, cells_iterator_1, cells_iterator_2): - """ - Computes the top differentially expressed genes between two clusters + pass - :param cells_iterator_1: First set of cell ids - :param cells_iterator_2: Second set of cell ids - :return: Up in the air: I recommend [gene name, mean_expression_cells1, mean_expression_cells2, average_difference, statistic_value] - """ + def expression(self, ): pass From ee8bb510ff825e87d96d04d3e3771b5fc691882c Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 22 Jun 2018 11:52:05 -0700 Subject: [PATCH 06/26] /cells is working --- backend/app/rest_api/rest.py | 6 ++-- backend/app/scanpy_engine/scanpy_engine.py | 36 +++++++++------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py index 411db278..eb5ea411 100644 --- a/backend/app/rest_api/rest.py +++ b/backend/app/rest_api/rest.py @@ -202,11 +202,11 @@ class CellsAPI(Resource): # get query params filter = parse_filter(request.args, data.schema) filtered_data = data.filter_cells(filter) - payload["metadata"] = list(data.metadata(filtered_data)) + payload["metadata"] = data.metadata(filtered_data) payload["ranges"] = data.metadata_ranges(filtered_data) - payload["cellids"] = filtered_data + payload["graph"] = data.create_graph(filtered_data) + payload["cellids"] = data.cellids(filtered_data) payload["cellcount"] = len(payload["cellids"]) - payload["graph"] = list(data.create_graph(filtered_data)) return make_payload(payload) diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index 1103b486..06250cd0 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -40,12 +40,11 @@ class ScanpyEngine(CXGDriver): def cells(self): return list(self.data.obs.index) - def cellids(self, cells_iterator=None): - if cells_iterator: - data = self.data.obs.iloc[[i for i in cells_iterator], :] + def cellids(self, df=None): + if df: + return list(df.obs.index) else: - data = self.data.obs - return list(data.index) + return list(self.data.obs.index) def genes(self): return self.data.var.index.tolist() @@ -56,7 +55,7 @@ class ScanpyEngine(CXGDriver): :param filter: :return: iterator through cell ids """ - cell_idx = np.ones((self.cell_count(),), dtype=bool) + cell_idx = np.ones((self.cell_count,), dtype=bool) for key, value in filter.items(): if value["variable_type"] == "categorical": key_idx = np.in1d(getattr(self.data.obs, key), value["query"]) @@ -91,33 +90,26 @@ class ScanpyEngine(CXGDriver): } return metadata_ranges - def metadata(self, cells_iterator, fields=None): + def metadata(self, df, fields=None): """ Generator for metadata. Gets the metadata values cell by cell and returns all value or only certain values if names is not None - :param cells_iterator: from filter cells, iterator for cellids - :param fields: list of keys for metadata to return, returns all metadata values if not set. - :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] """ - if not fields: - fields = self.data.obs.columns.tolist() - for cell_id in cells_iterator: - yield [cell_id] + self.data.obs.loc[cell_id, fields].tolist() + metadata = df.obs.to_dict(orient="records") + for idx in range(len(metadata)): + metadata[idx]["CellName"] = metadata[idx].pop("cell_name", None) + return metadata - def create_graph(self, cells_iterator): + def create_graph(self, df): """ Computes a n-d layout for cells through dimensionality reduction. - :param cells_iterator: from filter cells, iterator for cellids - :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] """ - cell_ids = list(cells_iterator) - getattr(sc.tl, self.graph_method)(self.data[self.data.obs.index.isin(cell_ids)]) - graph = self.data.obsm["X_{graph_method}".format(graph_method=self.graph_method)] + getattr(sc.tl, self.graph_method)(df) + graph = df.obsm["X_{graph_method}".format(graph_method=self.graph_method)] normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) - for idx, cell_id in enumerate(cell_ids): - yield [cell_id] + normalized_graph[idx].tolist() + return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() def diffexp(self, cells_iterator_1, cells_iterator_2): From 15ce4cc3386adf37e927ea16915631240ba7e302 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 22 Jun 2018 17:18:22 -0700 Subject: [PATCH 07/26] Add back in /expression and /diffexp endpoints --- backend/app/rest_api/rest.py | 220 +++++++++++++++++++++ backend/app/scanpy_engine/scanpy_engine.py | 78 +++++++- 2 files changed, 294 insertions(+), 4 deletions(-) diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py index eb5ea411..b297a481 100644 --- a/backend/app/rest_api/rest.py +++ b/backend/app/rest_api/rest.py @@ -210,10 +210,230 @@ class CellsAPI(Resource): return make_payload(payload) +class ExpressionAPI(Resource): + @swagger.doc({ + 'summary': 'Json with gene list and expression data by cell, limited to first 40 cells', + 'tags': ['expression'], + 'parameters': [ + { + 'name': 'include_unexpressed_genes', + 'description': "Include genes that have 0 expression across all cells in set", + 'in': 'path', + 'type': 'bool', + } + ], + 'responses': { + '200': { + 'description': 'Json for heatmap', + 'examples': { + 'application/json': { + "data": { + "cells": [ + { + "cellname": "1/2-SBSRNA4", + "e": [0, 0, 214, 0, 0] + }, + ], + "genes": [ + "1001000173.G8", + "1001000173.D4", + "1001000173.B4", + "1001000173.A2", + "1001000173.E2" + ], + "nonzero_gene_count": 2857 + }, + "status": { + "error": False, + "errormessage": "" + } + } + } + } + } + }) + def get(self): + from app import data + expression_data = data.expression() + return make_payload(expression_data) + + @swagger.doc({ + 'summary': 'Json with gene list and expression data by cell', + 'tags': ['expression'], + 'parameters': [ + { + 'name': 'body', + 'in': 'body', + "schema": { + "example": { + "celllist": ["1001000173.G8", "1001000173.D4"], + "genelist": ["1/2-SBSRNA4", "A1BG", "A1BG-AS1", "A1CF", "A2LD1", "A2M", "A2ML1", "A2MP1", + "A4GALT"], + "include_unexpressed_genes": True, + } + + } + }, + ], + 'responses': { + '200': { + 'description': 'Json for expressiondata', + 'examples': { + 'application/json': { + "data": { + "cells": [ + { + "cellname": "1001000173.D4", + "e": [0, 0] + }, + { + "cellname": "1001000173.G8", + "e": [0, 0] + } + ], + "genes": [ + "ABCD4", + "ZWINT" + ], + "nonzero_gene_count": 2857 + }, + "status": { + "error": False, + "errormessage": "" + } + + } + } + }, + '400': { + 'description': 'Required parameter missing/incorrect', + } + } + }) + def post(self): + from app import data + args = request.get_json() + cell_list = args.get('celllist', []) + gene_list = args.get('genelist', []) + if not (cell_list) and not (gene_list): + return make_payload([], "must include celllist and/or genelist parameter", 400) + + expression_data = data.expression(cell_list, gene_list) + + if cell_list and len(expression_data['cells']) < len(cell_list): + return make_payload([], "Some cell ids not available", 400) + if gene_list and len(expression_data['genes']) < len(gene_list): + return make_payload([], "Some genes not available", 400) + + return make_payload(expression_data) + +class DifferentialExpressionAPI(Resource): + @swagger.doc({ + 'summary': 'Get the top expressed genes for two cell sets. Calculated using t-test', + 'tags': ['expression'], + 'parameters': [ + { + 'name': 'body', + 'in': 'body', + 'schema': { + "example": { + "celllist1": ["1001000176.C12", "1001000176.C7", "1001000177.F11"], + "celllist2": ["1001000012.D2", "1001000017.F10", "1001000033.C3", "1001000229.D4"], + "num_genes": 5, + "pval": 0.000001, + }, + } + } + ], + "responses": { + '200': { + 'description': 'top expressed genes for cellset1, cellset2', + 'examples': { + 'application/json': { + "data": { + "celllist1": { + "ave_diff": [ + 432.0132935431362, + 12470.5623982637, + 957.0246880086814 + ], + "mean_expression_cellset1": [ + 438.6185567010309, + 13315.536082474227, + 1076.5773195876288 + ], + "mean_expression_cellset2": [ + 6.605263157894737, + 844.9736842105264, + 119.55263157894737 + ], + "pval": [ + 3.8906598089944563e-35, + 1.9086226376018916e-25, + 7.847480544069826e-21 + ], + "topgenes": [ + "TMSB10", + "FTL", + "TMSB4X" + ] + }, + "celllist2": { + "ave_diff": [ + -6860.599158979924, + -519.1314432989691, + -10278.328269126423 + ], + "mean_expression_cellset1": [ + 2.8350515463917527, + 0.6185567010309279, + 23.09278350515464 + ], + "mean_expression_cellset2": [ + 6863.434210526316, + 519.75, + 10301.421052631578 + ], + "pval": [ + 4.662891833748732e-44, + 3.6278087029927103e-37, + 8.396825170618402e-35 + ], + "topgenes": [ + "SPARCL1", + "C1orf61", + "CLU" + ] + } + }, + "status": { + "error": False, + "errormessage": "" + } + } + } + } + } + }) + def post(self): + from app import data + args = request.get_json() + cell_list_1 = args.get('celllist1', []) + cell_list_2 = args.get('celllist2', []) + num_genes = args.get("num_genes", 7) + pval = args.get('pval', 0.5) + if not (cell_list_1 and cell_list_2): + return make_payload([], + "must include celllist1 and celllist2 parameters", + 400) + data = data.diffexp(cell_list_1, cell_list_2, pval, num_genes) + return make_payload(data) def get_api_resources(): bp = Blueprint('api', __name__, url_prefix='/api/v2.0') api = Api(bp, add_api_spec_resource=False) api.add_resource(InitializeAPI, "/initialize") api.add_resource(CellsAPI, "/cells") + api.add_resource(ExpressionAPI, "/expression") + api.add_resource(DifferentialExpressionAPI, "/diffexp") return api \ No newline at end of file diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index 06250cd0..7fae78f7 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -1,5 +1,6 @@ import scanpy.api as sc import numpy as np +from scipy import stats import os from ..util.schema_parse import parse_schema @@ -112,11 +113,80 @@ class ScanpyEngine(CXGDriver): return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() - def diffexp(self, cells_iterator_1, cells_iterator_2): - pass + def diffexp(self, cell_list_1, cell_list_2, pval, num_genes): + cells_idx_1 = np.in1d(self.data.obs["cell_name"], cell_list_1) + cells_idx_2 = np.in1d(self.data.obs["cell_name"], cell_list_2) + expression_1 = self.data.X[cells_idx_1,:] + expression_2 = self.data.X[cells_idx_2,:] + diff_exp = stats.ttest_ind(expression_1, expression_2) + set1 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic > 0) + set2 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic < 0) + stat1 = diff_exp.statistic[set1] + stat2 = diff_exp.statistic[set2] + sort_set1 = np.argsort(stat1)[::-1] + sort_set2 = np.argsort(stat2) + pval1 = diff_exp.pvalue[set1][sort_set1] + pval2 = diff_exp.pvalue[set2][sort_set2] + mean_ex1_set1 = np.mean(expression_1[:, set1], axis=0)[sort_set1] + mean_ex2_set1 = np.mean(expression_2[:, set1], axis=0)[sort_set1] + mean_ex1_set2 = np.mean(expression_1[:, set2], axis=0)[sort_set2] + mean_ex2_set2 = np.mean(expression_2[:, set2], axis=0)[sort_set2] + mean_diff1 = mean_ex1_set1 - mean_ex2_set1 + mean_diff2 = mean_ex1_set2 - mean_ex2_set2 + genes_cellset_1 = self.data.var_names[set1][sort_set1] + genes_cellset_2 = self.data.var_names[set2][sort_set2] + return { + "celllist1": { + "topgenes": genes_cellset_1.tolist()[:num_genes], + "mean_expression_cellset1": mean_ex1_set1.tolist()[:num_genes], + "mean_expression_cellset2": mean_ex2_set1.tolist()[:num_genes], + "pval": pval1.tolist()[:num_genes], + "ave_diff": mean_diff1.tolist()[:num_genes] + }, + "celllist2": { + "topgenes": genes_cellset_2.tolist()[:num_genes], + "mean_expression_cellset1": mean_ex1_set2.tolist()[:num_genes], + "mean_expression_cellset2": mean_ex2_set2.tolist()[:num_genes], + "pval": pval2.tolist()[:num_genes], + "ave_diff": mean_diff2.tolist()[:num_genes] + }, + } + + def expression(self, cells=None, genes=None): + """ + :param df: + :return: + """ + if cells: + cells_idx = np.in1d(self.data.obs["cell_name"], cells) + else: + cells_idx = np.ones((self.cell_count,), dtype=bool) + if genes: + genes_idx = np.in1d(self.data.var_names, genes) + else: + genes_idx = np.ones((self.gene_count,), dtype=bool) + index = np.ix_(cells_idx, genes_idx) + expression = self.data.X[index] + + if not genes: + genes = self.data.var.index.tolist() + if not cells: + cells = self.data.obs["cell_name"].tolist() + + cell_data = [] + for idx, cell in enumerate(cells): + cell_data.append({ + "cellname": cell, + "e": list(expression[idx]), + }) + + return { + "genes": genes, + "cells": cell_data, + "nonzero_gene_count": int(np.sum(expression.any(axis=0))) + } + - def expression(self, ): - pass From ca16447115bf622943aa252c31c2f943b426335d Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 22 Jun 2018 17:43:10 -0700 Subject: [PATCH 08/26] Style guide cleanup --- backend/app/__init__.py | 17 +- backend/app/driver/driver.py | 7 +- backend/app/rest_api/rest.py | 6 +- backend/app/scanpy_engine/scanpy_engine.py | 27 +- backend/app/util/filter.py | 2 + backend/app/util/utils.py | 11 +- backend/app/web/webapp.py | 4 +- backend/test/test_api.py | 901 ++++++++++++++++++++- 8 files changed, 930 insertions(+), 45 deletions(-) diff --git a/backend/app/__init__.py b/backend/app/__init__.py index 166bc39b..e56776b8 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -1,12 +1,10 @@ import os -from flask import Flask, url_for, g +from flask import Flask from flask_compress import Compress from flask_cors import CORS from flask_restful_swagger_2 import get_swagger_blueprint -# from werkzeug.contrib.profiler import ProfilerMiddleware - from .web import webapp from .rest_api.rest import get_api_resources @@ -14,11 +12,12 @@ app = Flask(__name__) Compress(app) CORS(app) -#Config +# Config CONFIG_FILE = os.environ.get("CXG_CONFIG_FILE", default="scanpy-test.cfg") CXG_DIR = os.environ.get("CXG_DIRECTORY", default="/Users/charlotteweaver/Documents/Git/cxg-v2/data/") SECRET_KEY = os.environ.get("CXG_SECRET_KEY", default="SparkleAndShine") ENGINE = os.environ.get("CXG_ENGINE", default="scanpy") +TITLE = os.environ.get("DATASET_TITLE", default="PBMC 3K") # TODO remove the 2 when this is prod CXG_API_BASE = os.environ.get("CXG_API_BASE2", default="http://0.0.0.0:5005/api/") @@ -30,7 +29,8 @@ app.config.update( SECRET_KEY=SECRET_KEY, CXG_API_BASE=CXG_API_BASE, ENGINE=ENGINE, - DATA=CXG_DIR + DATA=CXG_DIR, + DATASET_TITLE=TITLE ) app.config['PROFILE'] = True @@ -52,12 +52,13 @@ docs.append(resources.get_swagger_doc()) app.register_blueprint(webapp.bp) app.register_blueprint(resources.blueprint) -app.register_blueprint(get_swagger_blueprint(docs, '/api/swagger', produces=["application/json"], title="cellxgene rest api", - description='An API connecting ExpressionMatrix2 clustering algorithm to cellxgene')) +app.register_blueprint( + get_swagger_blueprint(docs, '/api/swagger', produces=["application/json"], title="cellxgene rest api", + description='An API connecting ExpressionMatrix2 clustering algorithm to cellxgene')) app.add_url_rule('/', endpoint='index') if __name__ == "__main__": - app.run(host='0.0.0.0', debug=True, port=5005) \ No newline at end of file + app.run(host='0.0.0.0', debug=True, port=5005) diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index 66d5b9e6..5fafcb0a 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -2,7 +2,6 @@ from abc import ABCMeta, abstractmethod class CXGDriver(metaclass=ABCMeta): - def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): self.data = self._load_data(data) @@ -51,10 +50,8 @@ class CXGDriver(metaclass=ABCMeta): :param fields: list of keys for metadata to return, returns all metadata values if not set. :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] """ - pass - @abstractmethod def create_graph(self, df): """ @@ -64,7 +61,6 @@ class CXGDriver(metaclass=ABCMeta): """ pass - @abstractmethod def diffexp(self, df1, df2): """ @@ -72,7 +68,8 @@ class CXGDriver(metaclass=ABCMeta): :param df1: First set of cells :param df2: Second set of cells - :return: Up in the air: I recommend [gene name, mean_expression_cells1, mean_expression_cells2, average_difference, statistic_value] + :return: Up in the air: I recommend [gene name, mean_expression_cells1, + mean_expression_cells2, average_difference, statistic_value] """ pass diff --git a/backend/app/rest_api/rest.py b/backend/app/rest_api/rest.py index b297a481..4262957f 100644 --- a/backend/app/rest_api/rest.py +++ b/backend/app/rest_api/rest.py @@ -315,7 +315,7 @@ class ExpressionAPI(Resource): args = request.get_json() cell_list = args.get('celllist', []) gene_list = args.get('genelist', []) - if not (cell_list) and not (gene_list): + if not cell_list and not gene_list: return make_payload([], "must include celllist and/or genelist parameter", 400) expression_data = data.expression(cell_list, gene_list) @@ -327,6 +327,7 @@ class ExpressionAPI(Resource): return make_payload(expression_data) + class DifferentialExpressionAPI(Resource): @swagger.doc({ 'summary': 'Get the top expressed genes for two cell sets. Calculated using t-test', @@ -429,6 +430,7 @@ class DifferentialExpressionAPI(Resource): data = data.diffexp(cell_list_1, cell_list_2, pval, num_genes) return make_payload(data) + def get_api_resources(): bp = Blueprint('api', __name__, url_prefix='/api/v2.0') api = Api(bp, add_api_spec_resource=False) @@ -436,4 +438,4 @@ def get_api_resources(): api.add_resource(CellsAPI, "/cells") api.add_resource(ExpressionAPI, "/expression") api.add_resource(DifferentialExpressionAPI, "/diffexp") - return api \ No newline at end of file + return api diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index 7fae78f7..7156e503 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -1,8 +1,9 @@ -import scanpy.api as sc -import numpy as np -from scipy import stats import os +import numpy as np +import scanpy.api as sc +from scipy import stats + from ..util.schema_parse import parse_schema from ..driver.driver import CXGDriver @@ -14,12 +15,10 @@ class ScanpyEngine(CXGDriver): self.schema = self._load_or_infer_schema(data, schema) self._set_cell_ids() self.cell_count = self.data.shape[0] - # TODO Do I need this? self.gene_count = self.data.shape[1] self.graph_method = graph_method self.diffexp_method = diffexp_method - @staticmethod def _load_data(data): return sc.read(os.path.join(data, "data.h5ad")) @@ -30,7 +29,7 @@ class ScanpyEngine(CXGDriver): if not schema: pass else: - data_schema = parse_schema(os.path.join(data,schema)) + data_schema = parse_schema(os.path.join(data, schema)) return data_schema def _set_cell_ids(self): @@ -102,7 +101,6 @@ class ScanpyEngine(CXGDriver): metadata[idx]["CellName"] = metadata[idx].pop("cell_name", None) return metadata - def create_graph(self, df): """ Computes a n-d layout for cells through dimensionality reduction. @@ -112,12 +110,11 @@ class ScanpyEngine(CXGDriver): normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() - def diffexp(self, cell_list_1, cell_list_2, pval, num_genes): cells_idx_1 = np.in1d(self.data.obs["cell_name"], cell_list_1) cells_idx_2 = np.in1d(self.data.obs["cell_name"], cell_list_2) - expression_1 = self.data.X[cells_idx_1,:] - expression_2 = self.data.X[cells_idx_2,:] + expression_1 = self.data.X[cells_idx_1, :] + expression_2 = self.data.X[cells_idx_2, :] diff_exp = stats.ttest_ind(expression_1, expression_2) set1 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic > 0) set2 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic < 0) @@ -151,7 +148,7 @@ class ScanpyEngine(CXGDriver): "ave_diff": mean_diff2.tolist()[:num_genes] }, } - + def expression(self, cells=None, genes=None): """ :param df: @@ -185,11 +182,3 @@ class ScanpyEngine(CXGDriver): "cells": cell_data, "nonzero_gene_count": int(np.sum(expression.any(axis=0))) } - - - - - - - - diff --git a/backend/app/util/filter.py b/backend/app/util/filter.py index 049cf335..12769362 100644 --- a/backend/app/util/filter.py +++ b/backend/app/util/filter.py @@ -1,6 +1,7 @@ class QueryStringError(Exception): pass + def _convert_variable(datatype, variable): """ Convert variable to number (float/int) @@ -19,6 +20,7 @@ def _convert_variable(datatype, variable): except ValueError: raise + def parse_filter(filter, schema): """ {key: variable_type diff --git a/backend/app/util/utils.py b/backend/app/util/utils.py index 4f0fff77..0ef8f98c 100644 --- a/backend/app/util/utils.py +++ b/backend/app/util/utils.py @@ -1,7 +1,9 @@ import json + from numpy import float32, integer from flask import make_response, jsonify, Response + class Float32JSONEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, float32): @@ -10,6 +12,7 @@ class Float32JSONEncoder(json.JSONEncoder): return int(obj) return json.JSONEncoder.default(self, obj) + def make_payload(data, errormessage="", errorcode=200): """ Creates JSON respons for requests @@ -31,13 +34,7 @@ def make_payload(data, errormessage="", errorcode=200): } }), errorcode) + def make_streaming_response(data_generator, errorcode=200, content_type="application/json"): # TODO headers return Response(data_generator, status=errorcode, content_type=content_type) - - - - - - - diff --git a/backend/app/web/webapp.py b/backend/app/web/webapp.py index 065c169f..045121a8 100644 --- a/backend/app/web/webapp.py +++ b/backend/app/web/webapp.py @@ -1,9 +1,10 @@ from flask import ( - Blueprint, render_template, request, url_for, current_app + Blueprint, render_template, url_for, current_app ) bp = Blueprint('webapp', __name__, template_folder='templates') + @bp.route('/') def index(): url_base = current_app.config["CXG_API_BASE"] @@ -16,6 +17,7 @@ def index(): def swag(): return render_template("swagger.html") + # renders swagger documentation @bp.route('/favicon.png') def favicon(): diff --git a/backend/test/test_api.py b/backend/test/test_api.py index 36e0e8bd..c1a04522 100644 --- a/backend/test/test_api.py +++ b/backend/test/test_api.py @@ -1,6 +1,5 @@ import unittest import requests -import os class EndPoints(unittest.TestCase): @@ -17,7 +16,7 @@ class EndPoints(unittest.TestCase): def test_cells(self): url = "{base}{endpoint}?{params}".format(base=self.url_base, endpoint="cells", params="&".join( - [ "louvain=B cells"])) + ["louvain=B cells"])) result = self.session.get(url) assert result.status_code == 200 result_data = result.json() @@ -34,5 +33,901 @@ class EndPoints(unittest.TestCase): result = self.session.get(url) assert result.status_code == 200 result_data = result.json() - data = {'data': {'cellcount': 2638, 'genes': ['TNFRSF4', 'CPSF3L', 'ATAD3C', 'C1orf86', 'RER1', 'TNFRSF25', 'TNFRSF9', 'CTNNBIP1', 'SRM', 'UBIAD1', 'DRAXIN', 'TNFRSF1B', 'PRDM2', 'EFHD2', 'DDI2', 'SPEN', 'SDHB', 'CAPZB', 'CAMK2N1', 'CDA', 'C1QA', 'C1QC', 'C1QB', 'ZNF436', 'MDS2', 'PITHD1', 'HMGCL', 'TMEM50A', 'LDLRAP1', 'RP11-70P17.1', 'STMN1', 'PDIK1L', 'ZNF593', 'TMEM222', 'PPP1R8', 'PTAFR', 'PHACTR4', 'SNHG12', 'TAF12', 'YTHDF2', 'PUM1', 'SPOCD1', 'TMEM234', 'HDAC1', 'MARCKSL1', 'SMIM12', 'AGO4', 'TRAPPC3', 'EVA1B', 'RRAGC', 'PPIE', 'TRIT1', 'PPT1', 'SMAP2', 'ZFP69', 'CITED4', 'C1orf50', 'EBNA1BP2', 'ST3GAL3', 'DMAP1', 'ERI3', 'PRDX1', 'FAAH', 'ATPAF1', 'EFCAB14', 'PDZK1IP1', 'TAL1', 'SPATA6', 'ZCCHC11', 'SCP2', 'HSPB11', 'SSBP3', 'ACOT11', 'PARS2', 'ATG4C', 'PGM1', 'LRRIQ3', 'ACADM', 'USP33', 'IFI44', 'RP5-887A10.1', 'PRKACB', 'SH3GLB1', 'PKN2', 'GTF2B', 'GBP1', 'GBP4', 'LRRC8C', 'TMED5', 'RP11-421L21.3', 'HENMT1', 'TMEM167B', 'SARS', 'LAMTOR5', 'DRAM2', 'CEPT1', 'DENND2D', 'CHI3L2', 'C1orf162', 'ST7L', 'LRIG2', 'AP4B1-AS1', 'RP5-1073O3.7', 'CD2', 'WARS2', 'FCGR1B', 'LIX1L', 'CD160', 'FCGR1A', 'BOLA1', 'CTSS', 'FAM63A', 'PRUNE', 'MLLT11', 'PI4KB', 'C2CD4D', 'THEM4', 'S100A11', 'S100A12', 'S100A8', 'S100A6', 'SNAPIN', 'CRTC2', 'SLC39A1', 'UBE2Q1', 'CKS1B', 'SLC50A1', 'RIT1', 'PMF1', 'BGLAP', 'GPATCH4', 'ISG20L2', 'HDGF', 'FCRL2', 'CD1C', 'AIM2', 'FCER1A', 'FCRL6', 'DCAF8', 'PEX19', 'CD48', 'F11R', 'PFDN2', 'NIT1', 'DEDD', 'FCER1G', 'FCGR2A', 'FCGR3A', 'FCGR2B', 'FCGR3B', 'FCRLA', 'TMCO1', 'CD247', 'MPC2', 'XCL2', 'XCL1', 'BLZF1', 'F5', 'SELL', 'FMO4', 'KIAA0040', 'QSOX1', 'DHX9', 'NCF2', 'COLGALT2', 'RGS18', 'ZBTB41', 'CSRP1', 'IPO9-AS1', 'PTPN7', 'RABIF', 'SOX13', 'IL24', 'CR1', 'RP1-28O10.1', 'G0S2', 'TRAF3IP3', 'LPGAT1', 'DUSP10', 'RP11-378J18.3', 'DISP1', 'TP53BP2', 'CNIH4', 'LBR', 'SRP9', 'ACBD3', 'PARP1', 'SNAP47', 'C1orf35', 'OBSCN', 'RNF187', 'URB2', 'C1orf198', 'GNPAT', 'SPRTN', 'RP5-827C21.4', 'COA6', 'RP4-781K5.2', 'FH', 'SDCCAG8', 'ACP1', 'TMEM18', 'TSSC1', 'TRAPPC12-AS1', 'ID2', 'KLF11', 'ODC1', 'LPIN1', 'DDX1', 'RDH14', 'ITSN2', 'DNAJC27', 'DNMT3A', 'ASXL2', 'KIF3C', 'MPV17', 'SNX17', 'FOSL2', 'DPY30', 'FAM98A', 'CDC42EP3', 'LINC00211', 'PIGF', 'FBXO11', 'EML6', 'MTIF2', 'CCT4', 'PELI1', 'LGALSL', 'CEP68', 'ACTR2', 'NFU1', 'SNRNP27', 'MPHOSPH10', 'CCT7', 'STAMBP', 'BOLA3', 'PCGF1', 'MRPL19', 'TRABD2A', 'TGOLN2', 'MAT2A', 'VAMP8', 'VAMP5', 'GNLY', 'RMND5A', 'MAL', 'ZAP70', 'EIF5B', 'TGFBRAP1', 'TMEM87B', 'IL1B', 'RABL2A', 'RP11-141B14.1', 'C2orf76', 'TMEM177', 'CCDC115', 'PLEKHB2', 'ZRANB3', 'R3HDM1', 'UBXN4', 'ACVR2A', 'MMADHC', 'PSMD14', 'GCA', 'FASTKD1', 'PPIG', 'METTL8', 'SLC25A12', 'MLTK', 'OLA1', 'NFE2L2', 'TTC30A', 'PLEKHA3', 'TTN-AS1', 'DNAJC10', 'ZC3H15', 'SLC40A1', 'ANKAR', 'C2orf88', 'NABP1', 'SDPR', 'SF3B1', 'PLCL1', 'TYW5', 'ORC2', 'NOP58', 'BMPR2', 'ICOS', 'NDUFS1', 'METTL21A', 'IDH1', 'TNS1', 'CXCR1', 'RNF25', 'CYP27A1', 'GMPPA', 'STK11IP', 'SERPINE2', 'DOCK10', 'MFF', 'TRIP12', 'ATG16L1', 'RAMP1', 'NDUFA10', 'GPR35', 'MTERFD2', 'PASK', 'HDLBP', 'DTYMK', 'ING5', 'PDCD1', 'THUMPD3', 'SETD5', 'ARPC4', 'RPUSD3', 'JAGN1', 'ATG7', 'TMEM40', 'SLC6A6', 'CCDC174', 'UBE2E1', 'TOP2B', 'SLC4A7', 'CMTM7', 'GLB1', 'CRTAP', 'CSRNP1', 'EIF1B', 'ENTPD3-AS1', 'CTNNB1', 'VIPR1', 'NKTR', 'ABHD5', 'ELP6', 'NME6', 'TREX1', 'UQCRC1', 'ARIH2OS', 'QRICH1', 'USP19', 'GPX1', 'TCTA', 'IP6K1', 'FAM212A', 'RBM5', 'GNAI2', 'NPRL2', 'C3orf18', 'HEMK1', 'CISH', 'GLYCTK', 'PBRM1', 'PRKCD', 'CCDC66', 'ARF4', 'DENND6A', 'DNASE1L3', 'THOC7', 'SUCLG2', 'EOGT', 'ARL6IP5', 'PROK2', 'C3orf38', 'MINA', 'TBC1D23', 'NIT2', 'BBX', 'CD47', 'CD96', 'TIGIT', 'B4GALT4', 'TIMMDC1', 'FSTL1', 'HGD', 'GOLGB1', 'EAF2', 'KPNA1', 'PDIA5', 'GATA2', 'RAB7A', 'GP9', 'ISY1', 'ACPP', 'NPHP3', 'UBA5', 'CDV3', 'RAB6B', 'ANAPC13', 'NMNAT3', 'RNF7', 'U2SURP', 'GYG1', 'SIAH2', 'GPR171', 'MBNL1-AS1', 'LINC00886', 'MFSD1', 'SPTSSB', 'RPL22L1', 'TNFSF10', 'ZMAT3', 'RP11-145M9.4', 'ACTL6A', 'TTC14', 'LAMP3', 'KLHL6', 'KLHL24', 'YEATS2', 'PARL', 'SENP2', 'RPL39L', 'RP11-211G3.2', 'IL1RAP', 'FAM43A', 'PPP1R2', 'PCYT1A', 'RNF168', 'PIGX', 'ZNF718', 'PDE6B', 'IDUA', 'SPON2', 'MAEA', 'SLBP', 'ZFYVE28', 'ADD1', 'MFSD10', 'LYAR', 'STX18', 'JAKMIP1', 'AC093323.3', 'S100P', 'GRPEL1', 'FGFBP2', 'MED28', 'DHX15', 'ANAPC4', 'RBPJ', 'PGM2', 'RFC1', 'SMIM14', 'UBE2K', 'COMMD8', 'OCIAD1', 'CHIC2', 'TMEM165', 'PAICS', 'SRP72', 'HOPX', 'IGFBP7', 'YTHDC1', 'IGJ', 'GRSF1', 'IL8', 'PF4', 'PPBP', 'CXCL3', 'CXCL2', 'EREG', 'RCHY1', 'SDAD1', 'CXCL10', 'NUP54', 'SEPT11', 'MRPL1', 'ANTXR2', 'SEC31A', 'COPS4', 'HELQ', 'ARHGAP24', 'SNCA', 'DNAJB14', 'MANBA', 'UBE2D3', 'PPA2', 'INTS12', 'TBCK', 'OSTC', 'PLA2G12A', 'SNHG8', 'C4orf3', 'SPRY1', 'PGRMC2', 'C4orf33', 'RP11-102N12.3', 'ZNF330', 'USP38', 'LSM6', 'LRBA', 'RP11-18H21.1', 'PLRG1', 'PALLD', 'RWDD4', 'RP11-701P16.5', 'KIAA1430', 'MARCH6', 'C5orf42', 'FYB', 'FBXO4', 'NNT-AS1', 'EMB', 'MOCS2', 'GZMK', 'GZMA', 'ZSWIM6', 'DIMT1', 'CWC27', 'TRIM23', 'PIK3R1', 'NAIP', 'GTF2H2', 'NSA2', 'CTD-2015H6.3', 'ZCCHC9', 'ARRDC3', 'RIOK2', 'DCP2', 'AP3S1', 'COMMD10', 'CEP120', 'ISOC1', 'HINT1', 'SLC22A4', 'C5orf56', 'KIF3A', 'C5orf15', 'CTB-113I20.2', 'PPP2CA', 'DDX46', 'H2AFY', 'KDM3B', 'MZB1', 'UBE2D2', 'PURA', 'HBEGF', 'ANKHD1', 'SRA1', 'NDUFA2', 'WDR55', 'DIAPH1', 'RNF14', 'NR3C1', 'YIPF5', 'PRELID2', 'LARS', 'CSNK1A1', 'CCDC69', 'SPARC', 'FAXDC2', 'HAVCR2', 'MED7', 'UBLCP1', 'TTC1', 'CCNG1', 'RARS', 'ATP6V0E1', 'UIMC1', 'LMAN2', 'RGS14', 'DOK3', 'SCGB3A1', 'RP11-532F6.3', 'SERPINB1', 'LYRM4', 'F13A1', 'RIOK1', 'TMEM14C', 'TMEM14B', 'PHACTR1', 'NOL7', 'MCUR1', 'JARID2', 'GMPR', 'ACOT13', 'RP11-367G6.3', 'HIST1H2AC', 'BTN3A2', 'BTN3A1', 'ABT1', 'HIST1H2BJ', 'HIST1H2AH', 'HIST1H1B', 'FLOT1', 'IER3', 'XXbac-BPG299F13.17', 'NFKBIL1', 'LTB', 'LST1', 'NCR3', 'AIF1', 'CSNK2B', 'LY6G5B', 'LY6G6F', 'C6orf25', 'EHMT2', 'PPT2-EGFL8', 'AGPAT1', 'HLA-DRB1', 'HLA-DQA1', 'HLA-DQB1', 'HLA-DOB', 'PSMB8', 'HLA-DMB', 'HLA-DMA', 'HLA-DPA1', 'HLA-DPB1', 'RGL2', 'TAPBP', 'DEF6', 'FKBP5', 'STK38', 'SRSF3', 'OARD1', 'TREML1', 'RPL7L1', 'PTCRA', 'CNPY3', 'KLC4', 'CRIP3', 'ABCC10', 'YIPF3', 'GTPBP2', 'RSPH9', 'MRPS18A', 'PLA2G7', 'CD2AP', 'MCM3', 'PHF3', 'SH3BGRL2', 'ELOVL4', 'SNX14', 'SLC35A1', 'PNRC1', 'LYRM2', 'MAP3K7', 'MANEA-AS1', 'NDUFAF4', 'SNX3', 'CDC40', 'CDK19', 'HDAC2', 'ZUFSP', 'CEP85L', 'SMPDL3A', 'ECHDC1', 'ARHGAP18', 'SAMD3', 'LINC01013', 'TBPL1', 'SGK1', 'RP3-325F22.5', 'ABRACL', 'LTV1', 'SF3B5', 'STX11', 'RP11-545I5.3', 'PPIL4', 'GINM1', 'PCMT1', 'TMEM242', 'SNX9', 'SERAC1', 'DYNLT1', 'RP1-111C20.4', 'WTAP', 'ACAT2', 'TCP1', 'AC147651.3', 'NUDT1', 'BRAT1', 'IQCE', 'TNRC18', 'DAGLB', 'C7orf26', 'PHF14', 'ARL4A', 'HDAC9', 'IL6', 'NUPL2', 'AC005082.12', 'SKAP2', 'JAZF1', 'CHN2', 'GARS', 'NT5C3A', 'HERPUD2', 'STK17A', 'BLVRA', 'URGCP', 'UBE2D4', 'LINC00957', 'AEBP1', 'POLD2', 'DDX56', 'CCM2', 'CCT6A', 'ERV3-1', 'ZNF92', 'GUSB', 'RP11-792A8.4', 'LAT2', 'RFC2', 'YWHAG', 'FGL2', 'TMEM60', 'ABCB1', 'RBM48', 'SAMD9L', 'GNG11', 'BET1', 'ARPC1B', 'LRCH4', 'ALKBH4', 'DNAJC2', 'CTB-152G17.6', 'PRKAR2B', 'HBP1', 'PNPLA8', 'CAPZA2', 'SND1', 'ATP6V1F', 'TSPAN33', 'RP11-138A9.2', 'MKLN1', 'EXOC4', 'TMEM140', 'WDR91', 'MRPS33', 'RP5-894A10.2', 'SSBP1', 'ZYX', 'ZNF212', 'ZNF467', 'ATP6V0E2', 'GIMAP7', 'GIMAP4', 'GIMAP2', 'GIMAP5', 'CHPF2', 'SMARCD3', 'LINC01003', 'RP11-5C23.1', 'PAXIP1-AS1', 'PTPRN2', 'GTPBP6', 'ARSD', 'RP11-706O15.1', 'HCCS', 'ARHGAP6', 'PRPS2', 'RAB9A', 'REPS2', 'SH3KBP1', 'SMS', 'PRDX4', 'SAT1', 'ZFX', 'MID1IP1', 'KRBOX4', 'CDK16', 'RBM3', 'PQBP1', 'SLC35A2', 'OTUD5', 'PRAF2', 'WDR45', 'GPKOW', 'SYP', 'CCDC22', 'MAGEH1', 'PJA1', 'PDZD11', 'NONO', 'P2RY10', 'ITM2A', 'SYTL4', 'BTK', 'ARMCX5', 'BEX4', 'TCEAL8', 'TCEAL4', 'MORF4L2', 'NXT2', 'WDR44', 'PGRMC1', 'RNF113A', 'NKAP', 'LAMP2', 'CUL4B', 'C1GALT1C1', 'RP1-315G1.3', 'SLC25A14', 'HPRT1', 'FAM127A', 'FHL1', 'IDH3G', 'PDZD4', 'TKTL1', 'MPP1', 'FBXO25', 'TDRP', 'MYOM2', 'LONRF1', 'DMTN', 'SLC39A14', 'ADAM28', 'CLU', 'PNOC', 'HMBOX1', 'IDO1', 'RP11-589C21.6', 'AP3M2', 'VDAC3', 'SLC20A2', 'FNTA', 'LYPLA1', 'NSMAF', 'RAB2A', 'CHD7', 'RRS1', 'C8orf44', 'STAU2', 'ZBTB10', 'RP11-219B4.7', 'CA2', 'TMEM55A', 'KIAA1429', 'DPY19L4', 'MTERFD1', 'CPQ', 'POLR2K', 'ATP6V1C1', 'NUDCD1', 'MED30', 'DERL1', 'WDYHV1', 'RNF139', 'KIAA0196', 'SLA', 'CASC7', 'LYPD2', 'TOP1MT', 'NAPRT1', 'SHARPIN', 'MAF1', 'VPS28', 'RCL1', 'CD274', 'CDKN2A', 'DNAJA1', 'AQP3', 'ENHO', 'GALT', 'STOML2', 'CD72', 'TPM2', 'GNE', 'PAX5', 'FXN', 'ABHD17B', 'VPS13A', 'TLE4', 'SPIN1', 'FAM120A', 'C9orf3', 'PTCH1', 'ERCC6L2', 'HEMGN', 'TRIM14', 'INVS', 'SMC2', 'CTNNAL1', 'INIP', 'GSN', 'PTGS1', 'ARPC5L', 'GOLGA1', 'SCAI', 'PPP6C', 'PTGES2', 'C9orf16', 'TRUB2', 'TOR1A', 'USP20', 'POMT1', 'UCK1', 'SETX', 'GFI1B', 'GBGT1', 'SURF6', 'SURF1', 'SARDH', 'RXRA', 'FCN1', 'C9orf69', 'EGFL7', 'TMEM141', 'RABL6', 'PHPT1', 'PTGDS', 'C9orf142', 'CLIC3', 'NELFB', 'MRPL41', 'C9orf37', 'IDI1', 'AKR1C3', 'ATP5C1', 'SEC61A2', 'NUDT5', 'CDC123', 'CAMK1D', 'FAM107B', 'RP11-398C13.6', 'RP11-390B4.5', 'MLLT10', 'ARHGAP21', 'ENKUR', 'MAP3K8', 'KIF5B', 'RP11-324I22.4', 'RP11-162G10.5', 'ZNF32', 'ZFAND4', 'NCOA4', 'ZWINT', 'CISD1', 'UBE2D1', 'TFAM', 'REEP3', 'SIRT1', 'PBLD', 'HNRNPH3', 'SRGN', 'TACR2', 'TSPAN15', 'PRF1', 'MICU1', 'CAMK2G', 'RP11-178G16.4', 'ZNF503', 'PPIF', 'ATAD1', 'IFIT2', 'IFIT1', 'IFIT5', 'MARCH5', 'EXOC6', 'BLNK', 'ARHGAP19', 'FRAT1', 'NDUFB8-1', 'MRPL43', 'LZTS2', 'FBXW4', 'TRIM8', 'C10orf32', 'GSTO1', 'XPNPEP1', 'SHOC2', 'VTI1A', 'PRDX3', 'PLEKHA1', 'BUB3', 'OAT', 'CTBP2', 'MGMT', 'GLRX3', 'STK32C', 'ECHS1', 'SYCE1', 'SCGB1C1', 'IFITM3', 'PHRF1', 'IRF7', 'TMEM80', 'TALDO1', 'MOB2', 'TNNI2', 'KCNQ1OT1', 'SLC22A18AS', 'NAP1L4', 'CARS', 'ZNF195', 'TIMM10B', 'TAF10', 'RIC3', 'TMEM9B', 'DENND5A', 'SWAP70', 'ZBED5-AS1', 'PSMA1', 'SAAL1', 'CAT', 'PRR5L', 'API5', 'CD82', 'PEX16', 'DGKZ', 'DDB2', 'MADD', 'CELF1', 'MTCH2', 'FNBP4', 'UBE2L6', 'TMX2', 'CTNND1', 'RP11-142C4.6', 'MS4A6A', 'MS4A1', 'PTGDR2', 'PRPF19', 'TMEM138', 'SDHAF2', 'FADS1', 'AP003733.1', 'UBXN1', 'GNG3', 'TAF6L', 'RP11-727F15.9', 'OTUB1', 'FERMT3', 'RASGRP2', 'AP001462.6', 'ARL2', 'SYVN1', 'CTSW', 'PACS1', 'RAB1B', 'RBM4', 'RCE1', 'AP003419.16', 'PTPRCAP', 'CORO1B', 'PITPNM1', 'GSTP1', 'MRPL21', 'CTTN', 'LAMTOR1', 'FOLR3', 'ARAP1', 'RELT', 'PGM2L1', 'XRRA1', 'AP001189.4', 'CLNS1A', 'PICALM', 'PRSS23', 'RAB38', 'SMCO4', 'TAF1D', 'MRE11A', 'CWC15', 'CASP4', 'PPP2R1B', 'RBM7', 'REXO2', 'PCSK7', 'CEP164', 'RNF26', 'NRGN', 'ESAM', 'STT3A', 'RPUSD4', 'SRPR', 'SENCR', 'JAM3', 'VPS26B', 'THYN1', 'WNK1', 'FBXL14', 'ADIPOR2', 'CCND2', 'CD9', 'TNFRSF1A', 'MRPL51', 'IFFO1', 'ACRBP', 'USP5', 'SPSB2', 'EMG1', 'CLSTN3', 'CD163', 'CLEC4C', 'KLRG1', 'KLRB1', 'CLEC2B', 'CLEC1B', 'KLRC1', 'RP11-291B21.2', 'PLBD1', 'GOLT1B', 'TM7SF3', 'CCDC91', 'DENND5B', 'RP11-428G5.5', 'SLC2A13', 'LRRK2', 'PRICKLE1', 'IRAK4', 'RP11-493L12.4', 'SLC48A1', 'ASB8', 'RHEBL1', 'TMBIM6', 'BCDIN3D', 'SMARCD1', 'ITGB7', 'C12orf10', 'CBX5', 'NCKAP1L', 'BLOC1S1', 'GDF11', 'ORMDL2', 'WIBG', 'SUOX', 'SMARCC2', 'IL23A', 'BAZ2A', 'TMEM194A', 'R3HDM2', 'DTX3', 'XPOT', 'GNS', 'TMBIM4-1', 'THAP2', 'RAB21', 'TBC1D15', 'ATXN7L3B', 'PAWR', 'TMTC2', 'LINC00936', 'MRPL42', 'NDUFA12', 'NR2C1', 'ACTR6', 'GNPTAB', 'TDG', 'HCFC2', 'C12orf45', 'PWP1', 'SELPLG', 'CORO1C', 'USP30', 'GLTP', 'GIT2', 'HVCN1', 'ALDH2', 'TMEM116', 'NAA25', 'RPH3A', 'OAS1', 'FBXO21', 'RFC5', 'TAOK3', 'DYNLL1', 'MLEC', 'OASL', 'ORAI1', 'SETD1B', 'CLIP1', 'RILPL2', 'SNRNP35', 'EIF2B1', 'NCOR2', 'NOC4L', 'MRP63', 'GTF3A', 'MTIF3', 'FRY-AS1', 'N4BP2L1', 'SPG20', 'ALG5', 'EXOSC8', 'MTRF1', 'DNAJC15', 'CCDC122', 'TSC22D1', 'DLEU7', 'RNASEH2B', 'MZT1', 'DIS3', 'MYCBP2', 'RBM26-AS1', 'UBAC2', 'GPR183', 'CLYBL', 'ARGLU1', 'ABHD13', 'TNFSF13B', 'ARHGEF7', 'MCF2L', 'CDC16', 'RPPH1', 'METTL3', 'CMTM5', 'DHRS4', 'PSME1', 'RP11-468E2.4', 'IRF9', 'CHMP4A', 'MDP1', 'GMPR2', 'TINF2', 'CIDEB', 'LTB4R', 'GZMH', 'GZMB', 'SCFD1', 'AP4S1', 'EAPP', 'PPP2R3C', 'FBXO33', 'FKBP3', 'MIS18BP1', 'NEMF', 'ARF6', 'C14orf166', 'PTGDR', 'PSMC6', 'CGRRF1', 'MAPK1IP1L', 'LGALS3', 'RP11-349A22.5', 'ARID4A', 'JKAMP', 'MNAT1', 'CTD-2302E22.4', 'ATP6V1D', 'EIF2S1', 'ARG2', 'VTI1B', 'RAD51B', 'DCAF5', 'ERH', 'SRSF5', 'PCNX', 'RBM25', 'NUMB', 'LIN52', 'NPC2', 'ISCA2', 'DLST', 'RPS6KL1', 'RP11-950C14.3', 'C14orf1', 'RP11-488C13.5', 'GSTZ1', 'AHSA1', 'SNW1', 'SEL1L', 'SPATA7', 'TTC8', 'TRIP11', 'ATXN3', 'IFI27', 'DICER1', 'TCL1B', 'TCL1A', 'RP11-164H13.1', 'HSP90AA1', 'ANKRD9', 'CDC42BPB', 'TNFAIP2', 'EIF5', 'TRMT61A', 'BAG5', 'SIVA1', 'PLD4', 'C14orf80', 'AL928768.3', 'KIAA0125', 'UBE3A', 'ATP10A', 'KLF13', 'RP11-1000B6.3', 'ARHGAP11A', 'DPH6', 'THBS1', 'EIF2AK4', 'PLCB2', 'C15orf57', 'RPUSD2', 'RMDN3', 'TMEM87A', 'ZNF106', 'TMEM62', 'ADAL', 'PDIA3', 'CASC4', 'TRIM69', 'USP8', 'SPPL2A', 'RP11-430B1.2', 'ARPP19', 'RP11-139H15.1', 'TCF12', 'LINC00926', 'ADAM10', 'MYO1E', 'BNIP2', 'NARG2', 'RP11-219B17.1', 'RORA', 'VPS13C', 'TPM1', 'RAB8B', 'APH1B', 'FAM96A', 'KIAA0101', 'CLPX', 'AAGAB', 'C15orf61', 'FEM1B', 'EDC3', 'COMMD4', 'NEIL1', 'SIN3A', 'SCAPER', 'RCN2', 'HMG20A', 'ST20', 'BCL2A1', 'MESDC2', 'IL16', 'WHAMM', 'HOMER2', 'FANCI', 'IDH2', 'UNC45A', 'HDDC3', 'CHD2', 'ARRDC4', 'LYSMD4', 'TARSL2', 'POLR3K', 'HBA1', 'LUC7L', 'RAB40C', 'C16orf13', 'STUB1', 'FAM173A', 'RPUSD1', 'NME3', 'HAGH', 'NDUFB10', 'GFER', 'IL32', 'ZNF263', 'CORO7', 'DNAJA3', 'NUDT16L1', 'CARHSP1', 'USP7', 'ATF7IP2', 'DEXI', 'LITAF', 'TNFRSF17', 'PDXDC1', 'FOPNL', 'COQ7', 'CCP110', 'IGSF6', 'C16orf52', 'POLR3E', 'GGA2', 'EARS2', 'PRKCB', 'RBBP6', 'RABEP2', 'CD19', 'SPNS1', 'SNX29P2', 'C16orf54', 'TMEM219', 'TAOK2', 'YPEL3', 'SEPHS2', 'ZNF747', 'ZNF688', 'PHKG2', 'STX4', 'FUS', 'PYCARD', 'TGFB1I1', 'C16orf58', 'RP11-42I10.1', 'CNEP1R1', 'SNX20', 'AKTIP', 'BBS2', 'CPNE2', 'ARL2BP', 'CIAPIN1', 'GPR56', 'KIFC3', 'C16orf80', 'GOT2', 'FAM96B', 'CES4A', 'TMEM208', 'ACD', 'TANGO6', 'CYB5B', 'NFAT5', 'ST3GAL2', 'RP11-432I5.1', 'ATXN1L', 'HP', 'PSMD7', 'RP11-252A24.3', 'GABARAPL2', 'KARS', 'TERF2IP', 'COTL1', 'C16orf74', 'IRF8', 'BANP', 'CYBA', 'MVD', 'SPG7', 'ZNF276', 'TIMM22', 'YWHAE', 'PITPNA-AS1', 'PRPF8', 'SERPINF1', 'SMYD4', 'PAFAH1B1', 'SHPK-1', 'P2RX5', 'ARRB2', 'PSMB6', 'GP1BA', 'SLC25A11', 'ZNF232', 'ZNF594', 'TXNDC17', 'ALOX12', 'CLEC10A', 'ASGR1', 'ACADVL', 'ELP5', 'ACAP1', 'TMEM102', 'TNFSF12', 'AC113189.5', 'SAT2', 'C17orf59', 'ADPRM', 'UBB', 'TRPV2', 'PLD6', 'NT5M', 'MED9', 'RASD1', 'PEMT', 'SREBF1', 'TRIM16L', 'GRAP', 'IFT20', 'POLDIP2', 'TMEM199', 'PROCA1', 'RAB34', 'NEK8', 'PHF12', 'ADAP2', 'NF1', 'UTP6', 'CCL2', 'SLFN5', 'SLFN12', 'CCL5', 'CCL3', 'CCL4', 'CCL4L1', 'GGNBP2', 'MRM1', 'AATF', 'TADA2A', 'MLLT6', 'RARA', 'CTD-2267D19.2', 'RP5-1028K7.2', 'DNAJC7', 'NKIRAS2', 'RP11-400F19.6', 'MLX', 'TUBG2', 'VPS25', 'RUNDC1', 'IFI35', 'NBR1', 'DHX8', 'RP11-527L4.5', 'HDAC5', 'GRN', 'ITGA2B', 'HEXIM2', 'RP11-798G7.6', 'GOSR2', 'ITGB3', 'OSBPL7', 'ABI3', 'PDK2', 'SAMD14', 'LRRC59', 'ABCC3', 'LUC7L3', 'MMD', 'NOG', 'SCPEP1', 'MRPS23', 'BZRAP1-AS1', 'SEPT4', 'YPEL2', 'INTS2', 'CYB561', 'LIMD2', 'PSMC5', 'CD79B', 'ICAM2', 'TEX2', 'NOL11', 'ARSG', 'CTD-2006K23.1', 'NAT9', 'TMEM104', 'ATP5H', 'SLC16A5', 'ARMC7', 'NT5C', 'GGA3', 'GRB2', 'SMIM5', 'GALK1', 'SPHK1', 'USP36', 'RNF213', 'RP11-1055B8.7', 'OXLD1', 'ARL16', 'ARHGDIA', 'STRA13', 'RFNG', 'GPS1', 'C17orf62', 'FN3KRP', 'YES1', 'SMCHD1', 'RP13-270P17.3', 'RALBP1', 'VAPA', 'PSMG2', 'OSBPL1A', 'RNF125', 'ZNF397', 'INO80C', 'ATP5A1', 'CXXC1', 'NARS', 'MALT1', 'RP11-879F14.2', 'TMX3', 'NFATC1', 'RBCK1', 'RP11-314N13.3', 'SIRPG', 'SNRPB', 'ITPA', 'C20orf27', 'PRNP', 'PCNA', 'CRLS1', 'ANKEF1', 'MKKS', 'TASP1', 'SNX5', 'RIN2', 'NAA20', 'CD93', 'CST3', 'CST7', 'ABHD12', 'PLAGL2', 'SNTA1', 'NECAB3', 'PXMP4', 'RALY', 'PIGU', 'UQCC1', 'RBM39', 'AAR2', 'MYL9', 'RPN2', 'BLCAP', 'CTNNBL1', 'MAFB', 'SRSF6', 'TTPAL', 'PKIG', 'YWHAB', 'DNTTIP1', 'UBE2C', 'MMP9', 'LINC00494', 'STAU1', 'CEBPB', 'KCNG1', 'ATP9A', 'FAM210B', 'RTFDC1', 'ZBP1', 'PMEPA1', 'STX16', 'TUBB1', 'PSMA7', 'DIDO1', 'GID8', 'TPD52L2', 'TCEA2', 'RGS19', 'PRSS57', 'ELANE', 'POLR2E', 'ATP5D', 'C19orf24', 'MUM1', 'ATP8B3', 'PLEKHJ1', 'GADD45B', 'SLC39A3', 'NFIC', 'DOHH', 'TBXA2R', 'SIRT6', 'CCDC94', 'FEM1A', 'SAFB2', 'DUS3L', 'VMAC', 'ALKBH7', 'DENND1C', 'PCP2', 'RETN', 'MAP2K7', 'CD320', 'RAB11B', 'MARCH2', 'HNRNPM', 'ZNF559', 'ZNF561', 'CDC37', 'S1PR5', 'ILF3-AS1', 'ILF3', 'C19orf52', 'SMARCA4', 'TMEM205', 'ZNF653', 'ECSIT', 'ELOF1', 'ZNF69', 'ZNF799', 'FBXW9', 'HOOK2', 'RAD23A', 'IL27RA', 'SAMD1', 'PRKACA', 'ZNF333', 'AC004257.3', 'AKAP8', 'TPM4', 'FAM32A', 'CHERP', 'SMIM7', 'MYO9B', 'BABAM1', 'MVB12A', 'SLC27A1', 'COLGALT1', 'INSL3', 'CCDC124', 'IFI30', 'JUND', 'ELL', 'CRTC1', 'RFXANK', 'NR2C2AP', 'ZNF682', 'ZNF493', 'LINC00662', 'PLEKHF1', 'ANKRD27', 'LSM14A', 'PDCD2L', 'ARHGAP33', 'TYROBP', 'POLR2I', 'TBCB', 'AC092295.7', 'AC074138.3', 'ZNF567', 'PPP1R14A', 'C19orf33', 'KCNK6', 'RASGRP4', 'ACTN4', 'CAPN12', 'HNRNPL', 'MRPS12', 'SAMD4B', 'EID2', 'PSMC4', 'TMEM91', 'ATP5SL', 'CEACAM4', 'CD79A', 'CTC-378H22.1', 'ETHE1', 'ZNF404', 'ZNF45', 'TOMM40', 'RELB', 'PRKD2', 'BBC3', 'C5AR1', 'C5AR2', 'DHX34', 'NAPA-AS1', 'PLA2G4C', 'CYTH2', 'GYS1', 'TRPM4', 'CD37', 'FCGRT', 'PRRG2', 'IL4I1', 'SPIB', 'NKG7', 'ZNF175', 'SIGLEC14', 'FPR1', 'ZNF350', 'ZNF615', 'ZNF841', 'ZNF836', 'ZNF528', 'ZNF468', 'MYADM', 'OSCAR', 'PRPF31', 'MBOAT7', 'LILRA4', 'LAIR1', 'KIR2DL3', 'KIR3DL2', 'FCAR', 'PPP6R1', 'SUV420H2', 'ISOC2', 'ZNF628', 'CTD-2537I9.12', 'EPN1', 'AURKC', 'CTC-444N24.11', 'ZNF587B', 'ZNF256', 'CTD-2368P22.1', 'AC010642.1', 'EIF1AY', 'TPTEP1', 'CECR5', 'PEX26', 'MRPL40', 'CLDN5', 'SEPT5', 'ARVCF', 'PPIL2', 'IGLL5', 'DDT', 'GUCD1', 'EWSR1', 'GAS2L1', 'NEFH', 'ZMAT5', 'RFPL2', 'FBXO7', 'HMGXB4', 'EIF3D', 'PVALB', 'MPST', 'LGALS2', 'SH3BP1', 'LGALS1', 'ANKRD54', 'DDX17', 'APOBEC3A', 'APOBEC3B', 'APOBEC3G', 'RPS19BP1', 'ADSL', 'PHF5A', 'DESI1', 'WBP2NL', 'SMDT1', 'PACSIN2', 'PARVB', 'LDOC1L', 'PRR5', 'ATXN10', 'TTC38', 'CTA-29F11.1', 'CRELD2', 'LMF2', 'TYMP', 'RABL2B', 'SAMSN1', 'USP25', 'MAP3K7CL', 'BACH1', 'MIS18A', 'ATP5O', 'KCNE1', 'TTC3', 'DSCR3', 'BRWD1', 'BACE2', 'SIK1', 'C21orf33', 'ICOSLG', 'SUMO3', 'SLC19A1', 'S100B', 'PRMT2'], 'ranges': {'CellName': {'options': {'AAACATACAACCAC-1': 1, 'AAACATTGAGCTAC-1': 1, 'AAACATTGATCAGC-1': 1, 'AAACCGTGCTTCCG-1': 1, 'AAACCGTGTATGCG-1': 1, 'AAACGCACTGGTAC-1': 1, 'AAACGCTGACCAGT-1': 1, 'AAACGCTGGTTCTT-1': 1, 'AAACGCTGTAGCCA-1': 1, 'AAACGCTGTTTCTG-1': 1, 'AAACTTGAAAAACG-1': 1, 'AAACTTGATCCAGA-1': 1, 'AAAGAGACGAGATA-1': 1, 'AAAGAGACGCGAGA-1': 1, 'AAAGAGACGGACTT-1': 1, 'AAAGAGACGGCATT-1': 1, 'AAAGCAGATATCGG-1': 1, 'AAAGCCTGTATGCG-1': 1, 'AAAGGCCTGTCTAG-1': 1, 'AAAGTTTGATCACG-1': 1, 'AAAGTTTGGGGTGA-1': 1, 'AAAGTTTGTAGAGA-1': 1, 'AAAGTTTGTAGCGT-1': 1, 'AAATCAACAATGCC-1': 1, 'AAATCAACACCAGT-1': 1, 'AAATCAACCAGGAG-1': 1, 'AAATCAACCCTATT-1': 1, 'AAATCAACGGAAGC-1': 1, 'AAATCAACTCGCAA-1': 1, 'AAATCATGACCACA-1': 1, 'AAATCCCTCCACAA-1': 1, 'AAATCCCTGCTATG-1': 1, 'AAATGTTGAACGAA-1': 1, 'AAATGTTGCCACAA-1': 1, 'AAATGTTGTGGCAT-1': 1, 'AAATTCGAAGGTTC-1': 1, 'AAATTCGAATCACG-1': 1, 'AAATTCGAGCTGAT-1': 1, 'AAATTCGAGGAGTG-1': 1, 'AAATTCGATTCTCA-1': 1, 'AAATTGACACGACT-1': 1, 'AAATTGACTCGCTC-1': 1, 'AACAAACTCATTTC-1': 1, 'AACAAACTTTCGTT-1': 1, 'AACAATACGACGAG-1': 1, 'AACACGTGCAGAGG-1': 1, 'AACACGTGGAAAGT-1': 1, 'AACACGTGGAACCT-1': 1, 'AACACGTGGCTACA-1': 1, 'AACACGTGTACGAC-1': 1, 'AACAGCACAAGAGT-1': 1, 'AACATTGATGGGAG-1': 1, 'AACCAGTGATACCG-1': 1, 'AACCCAGATCGCTC-1': 1, 'AACCGATGCTCCCA-1': 1, 'AACCGATGGTCATG-1': 1, 'AACCGATGTTCTAC-1': 1, 'AACCGCCTAGCGTT-1': 1, 'AACCGCCTCTACGA-1': 1, 'AACCTACTGTGAGG-1': 1, 'AACCTACTGTGTTG-1': 1, 'AACCTTACGAGACG-1': 1, 'AACCTTACGCGAGA-1': 1, 'AACCTTACTAACGC-1': 1, 'AACCTTTGGACGGA-1': 1, 'AACCTTTGTACGCA-1': 1, 'AACGCAACAAGTAG-1': 1, 'AACGCATGACCCAA-1': 1, 'AACGCATGCCTTCG-1': 1, 'AACGCATGTACTTC-1': 1, 'AACGCCCTCGGGAA-1': 1, 'AACGCCCTCGTACA-1': 1, 'AACGCCCTGGCATT-1': 1, 'AACGTCGAGTATCG-1': 1, 'AACGTGTGAAAGCA-1': 1, 'AACGTGTGGCGGAA-1': 1, 'AACGTGTGTCCAAG-1': 1, 'AACGTGTGTGCTTT-1': 1, 'AACTACCTTAGAGA-1': 1, 'AACTCACTCAAGCT-1': 1, 'AACTCACTTGGAGG-1': 1, 'AACTCGGAAAGTGA-1': 1, 'AACTCGGAAGGTCT-1': 1, 'AACTCTTGCAGGAG-1': 1, 'AACTGTCTCCCTTG-1': 1, 'AACTTGCTACGCTA-1': 1, 'AACTTGCTGGGACA-1': 1, 'AAGAACGAGTGTTG-1': 1, 'AAGAAGACGTAGGG-1': 1, 'AAGACAGAAGTCTG-1': 1, 'AAGACAGAGGATCT-1': 1, 'AAGACAGATTACCT-1': 1, 'AAGAGATGGGTAGG-1': 1, 'AAGATGGAAAACAG-1': 1, 'AAGATGGAGAACTC-1': 1, 'AAGATGGAGATAAG-1': 1, 'AAGATTACAACCTG-1': 1, 'AAGATTACAGATCC-1': 1, 'AAGATTACCCGTTC-1': 1, 'AAGATTACCGCCTT-1': 1, 'AAGATTACCTCAAG-1': 1, 'AAGATTACTCCTCG-1': 1, 'AAGCAAGAGCGAGA-1': 1, 'AAGCAAGAGCTTAG-1': 1, 'AAGCAAGAGGTGTT-1': 1, 'AAGCACTGAGCAAA-1': 1, 'AAGCACTGCATACG-1': 1, 'AAGCACTGGTTCTT-1': 1, 'AAGCCAACGTGTTG-1': 1, 'AAGCCATGAACTGC-1': 1, 'AAGCCATGACACGT-1': 1, 'AAGCCATGCGTGAT-1': 1, 'AAGCCATGTCTCGC-1': 1, 'AAGCCTGACATGCA-1': 1, 'AAGCCTGACCGAAT-1': 1, 'AAGCGACTCCTCAC-1': 1, 'AAGCGACTGTGTCA-1': 1, 'AAGCGACTTACAGC-1': 1, 'AAGCGACTTTGACG-1': 1, 'AAGCGTACGTCTTT-1': 1, 'AAGGCTTGCGAACT-1': 1, 'AAGGTCACGGTTAC-1': 1, 'AAGGTCACTGTTTC-1': 1, 'AAGGTCACTTCCCG-1': 1, 'AAGGTCTGACAGTC-1': 1, 'AAGGTCTGCAGATC-1': 1, 'AAGTAACTCTGAAC-1': 1, 'AAGTAACTGAGATA-1': 1, 'AAGTAGGATACAGC-1': 1, 'AAGTATACCGAACT-1': 1, 'AAGTCCGACTTGTT-1': 1, 'AAGTCCGATAGAAG-1': 1, 'AAGTCTCTAGTCGT-1': 1, 'AAGTCTCTCGGAGA-1': 1, 'AAGTGGCTTGGAGG-1': 1, 'AAGTTCCTCATTCT-1': 1, 'AAGTTCCTTCTTAC-1': 1, 'AATAAGCTCGAATC-1': 1, 'AATAAGCTCGTTGA-1': 1, 'AATACCCTGGACGA-1': 1, 'AATACCCTGGCATT-1': 1, 'AATACTGAAAGGGC-1': 1, 'AATACTGAATTGGC-1': 1, 'AATAGGGAACCCTC-1': 1, 'AATAGGGAGAATGA-1': 1, 'AATCAAACTATCGG-1': 1, 'AATCCGGAATGCTG-1': 1, 'AATCCTACCGGTAT-1': 1, 'AATCCTTGACGGGA-1': 1, 'AATCCTTGGTGAGG-1': 1, 'AATCGGTGGAACTC-1': 1, 'AATCGGTGTGCTTT-1': 1, 'AATCTAGAAAAGTG-1': 1, 'AATCTAGAATCGGT-1': 1, 'AATCTCACAGCCTA-1': 1, 'AATCTCACTCTAGG-1': 1, 'AATCTCTGAACAGA-1': 1, 'AATCTCTGCTTTAC-1': 1, 'AATGATACACCAAC-1': 1, 'AATGATACGGTCAT-1': 1, 'AATGCGTGACACCA-1': 1, 'AATGCGTGGACGGA-1': 1, 'AATGCGTGGCTATG-1': 1, 'AATGGAGAATCGTG-1': 1, 'AATGGAGATCCTTA-1': 1, 'AATGGCTGACACCA-1': 1, 'AATGGCTGCGTGAT-1': 1, 'AATGGCTGTAAAGG-1': 1, 'AATGGCTGTACTCT-1': 1, 'AATGGCTGTGAAGA-1': 1, 'AATGTAACGGTGGA-1': 1, 'AATGTCCTCTTCTA-1': 1, 'AATGTTGACAGTCA-1': 1, 'AATGTTGAGTTGAC-1': 1, 'AATGTTGATCTACT-1': 1, 'AATTACGAATTCCT-1': 1, 'AATTACGACTTCTA-1': 1, 'AATTACGAGTGAGG-1': 1, 'AATTACGATTGGCA-1': 1, 'AATTCCTGCTCAGA-1': 1, 'AATTGATGTCGCAA-1': 1, 'AATTGTGACTTGGA-1': 1, 'ACAAAGGAGGGTGA-1': 1, 'ACAAATTGATTCTC-1': 1, 'ACAAATTGCTCAGA-1': 1, 'ACAAATTGTTGCGA-1': 1, 'ACAACCGAGGGATG-1': 1, 'ACAACCGAGTTACG-1': 1, 'ACAAGAGAAGTCGT-1': 1, 'ACAAGAGACTTATC-1': 1, 'ACAAGAGAGTTGAC-1': 1, 'ACAATCCTAACCGT-1': 1, 'ACAATCCTTAGCGT-1': 1, 'ACAATTGACTGACA-1': 1, 'ACAATTGATGACTG-1': 1, 'ACACAGACCATACG-1': 1, 'ACACCAGAGGGCAA-1': 1, 'ACACCCTGGTGTTG-1': 1, 'ACACGAACAGTTCG-1': 1, 'ACACGATGACGCAT-1': 1, 'ACACGATGATGTGC-1': 1, 'ACACGATGTCGTAG-1': 1, 'ACACGATGTGGTCA-1': 1, 'ACAGACACGGCATT-1': 1, 'ACAGACACGTTGTG-1': 1, 'ACAGCAACACCTAG-1': 1, 'ACAGCAACCTCAAG-1': 1, 'ACAGGTACCCCACT-1': 1, 'ACAGGTACGCTGTA-1': 1, 'ACAGGTACTGGTGT-1': 1, 'ACAGTCGACCCAAA-1': 1, 'ACAGTCGACCGATA-1': 1, 'ACAGTGACTCACCC-1': 1, 'ACAGTGACTCTATC-1': 1, 'ACAGTGTGGTCACA-1': 1, 'ACAGTGTGTTGCGA-1': 1, 'ACATCACTCTACTT-1': 1, 'ACATGGTGAAGCCT-1': 1, 'ACATGGTGCAACCA-1': 1, 'ACATGGTGCGAGTT-1': 1, 'ACATTCTGGCATAC-1': 1, 'ACATTCTGGGAACG-1': 1, 'ACCAACGACATGCA-1': 1, 'ACCACAGAAAGTAG-1': 1, 'ACCACAGAGTTGGT-1': 1, 'ACCACCTGTGTGCA-1': 1, 'ACCACGCTACAGCT-1': 1, 'ACCACGCTACCCAA-1': 1, 'ACCACGCTGCGAGA-1': 1, 'ACCACGCTGCTGTA-1': 1, 'ACCAGCCTGACAGG-1': 1, 'ACCAGTGAACGGTT-1': 1, 'ACCAGTGAATACCG-1': 1, 'ACCAGTGAGGGATG-1': 1, 'ACCAGTGATGACTG-1': 1, 'ACCATTACCTTCTA-1': 1, 'ACCATTACGAGATA-1': 1, 'ACCATTTGTCATTC-1': 1, 'ACCCAAGAACTGTG-1': 1, 'ACCCAAGAATTCCT-1': 1, 'ACCCAAGAGGACAG-1': 1, 'ACCCAAGATTCACT-1': 1, 'ACCCACTGCGCCTT-1': 1, 'ACCCACTGGACAGG-1': 1, 'ACCCACTGGTTCAG-1': 1, 'ACCCACTGTCGTAG-1': 1, 'ACCCAGCTCAGAAA-1': 1, 'ACCCAGCTGTTAGC-1': 1, 'ACCCAGCTTGCTTT-1': 1, 'ACCCGTTGATGACC-1': 1, 'ACCCGTTGCTGCAA-1': 1, 'ACCCGTTGCTTCTA-1': 1, 'ACCCTCGACCTATT-1': 1, 'ACCCTCGACGGTAT-1': 1, 'ACCCTCGATAAGGA-1': 1, 'ACCCTCGATCAAGC-1': 1, 'ACCGTGCTACCAGT-1': 1, 'ACCGTGCTGGAACG-1': 1, 'ACCTATTGCTGAGT-1': 1, 'ACCTATTGTGCCCT-1': 1, 'ACCTCCGAGTCCTC-1': 1, 'ACCTCCGATATGCG-1': 1, 'ACCTCCGATGCTGA-1': 1, 'ACCTCGTGAACCAC-1': 1, 'ACCTGAGATATCGG-1': 1, 'ACCTGGCTAAGTAG-1': 1, 'ACCTTTGACTCCCA-1': 1, 'ACCTTTGAGGAACG-1': 1, 'ACCTTTGAGGAAGC-1': 1, 'ACGAACACCTTGTT-1': 1, 'ACGAACTGGCTATG-1': 1, 'ACGAAGCTCTCCAC-1': 1, 'ACGAAGCTCTGAGT-1': 1, 'ACGACCCTATCTCT-1': 1, 'ACGACCCTGATGAA-1': 1, 'ACGACCCTTGACAC-1': 1, 'ACGACCCTTGACCA-1': 1, 'ACGAGGGACAGGAG-1': 1, 'ACGAGGGACGAACT-1': 1, 'ACGAGGGATGTAGC-1': 1, 'ACGAGTACCCTAAG-1': 1, 'ACGAGTACGAATCC-1': 1, 'ACGATCGAGGACTT-1': 1, 'ACGATCGAGTCACA-1': 1, 'ACGATGACAATGCC-1': 1, 'ACGATGACTGGTCA-1': 1, 'ACGATTCTACGGGA-1': 1, 'ACGCAATGGTTCAG-1': 1, 'ACGCACCTGTTAGC-1': 1, 'ACGCCACTGAACTC-1': 1, 'ACGCCGGAAACCAC-1': 1, 'ACGCCGGAAAGCCT-1': 1, 'ACGCCGGAAATGCC-1': 1, 'ACGCCTTGCTCCCA-1': 1, 'ACGCGGTGGCGAGA-1': 1, 'ACGCGGTGTGTGGT-1': 1, 'ACGCGGTGTTTGCT-1': 1, 'ACGCTCACAGTACC-1': 1, 'ACGCTCACCCTTGC-1': 1, 'ACGCTGCTGTTCTT-1': 1, 'ACGGAACTCAGATC-1': 1, 'ACGGAACTGTCGTA-1': 1, 'ACGGAGGACTCTTA-1': 1, 'ACGGATTGGGAGGT-1': 1, 'ACGGATTGGTTAGC-1': 1, 'ACGGCTCTGAGCAG-1': 1, 'ACGGCTCTTGCACA-1': 1, 'ACGGTAACCGCTAA-1': 1, 'ACGGTAACCTTCGC-1': 1, 'ACGGTAACGGTGGA-1': 1, 'ACGGTAACTCGCAA-1': 1, 'ACGGTATGAGTCGT-1': 1, 'ACGGTATGGGTATC-1': 1, 'ACGGTATGGTTGTG-1': 1, 'ACGGTCCTAACGGG-1': 1, 'ACGGTCCTCGGGAA-1': 1, 'ACGTAGACAACCAC-1': 1, 'ACGTAGACTACAGC-1': 1, 'ACGTCAGAAACGAA-1': 1, 'ACGTCAGAGAGCTT-1': 1, 'ACGTCAGAGGGATG-1': 1, 'ACGTCCTGATAAGG-1': 1, 'ACGTCCTGTGAACC-1': 1, 'ACGTCGCTCCTGAA-1': 1, 'ACGTCGCTCTATTC-1': 1, 'ACGTCGCTTCTCAT-1': 1, 'ACGTGATGCCATGA-1': 1, 'ACGTGATGGGTCTA-1': 1, 'ACGTGATGTAACCG-1': 1, 'ACGTGATGTGACAC-1': 1, 'ACGTGCCTCCGTAA-1': 1, 'ACGTGCCTTCTATC-1': 1, 'ACGTTACTTTCCAT-1': 1, 'ACGTTGGAAAAGCA-1': 1, 'ACGTTGGAAACCTG-1': 1, 'ACGTTGGACCGTAA-1': 1, 'ACGTTGGAGCCAAT-1': 1, 'ACGTTGGATATGGC-1': 1, 'ACGTTGGATCAGGT-1': 1, 'ACGTTTACATCAGC-1': 1, 'ACTAAAACCCACAA-1': 1, 'ACTAAAACTCGACA-1': 1, 'ACTACGGAATTTCC-1': 1, 'ACTACGGACCTATT-1': 1, 'ACTACGGATCGCTC-1': 1, 'ACTACTACTAAGGA-1': 1, 'ACTAGGTGGAACCT-1': 1, 'ACTAGGTGGAACTC-1': 1, 'ACTATCACCTTGGA-1': 1, 'ACTATCACTGCCAA-1': 1, 'ACTCAGGACTGAAC-1': 1, 'ACTCAGGATCTATC-1': 1, 'ACTCAGGATTCGTT-1': 1, 'ACTCCTCTCAACTG-1': 1, 'ACTCGCACGAAAGT-1': 1, 'ACTCGCACTACGAC-1': 1, 'ACTCTCCTGACACT-1': 1, 'ACTCTCCTGCATAC-1': 1, 'ACTCTCCTGTTTGG-1': 1, 'ACTGAGACAACCAC-1': 1, 'ACTGAGACCCATAG-1': 1, 'ACTGAGACGTTGGT-1': 1, 'ACTGCCACACACGT-1': 1, 'ACTGCCACTCCGTC-1': 1, 'ACTGGCCTTCAGTG-1': 1, 'ACTGTGGACGTGTA-1': 1, 'ACTGTGGATCTAGG-1': 1, 'ACTGTTACCCACAA-1': 1, 'ACTGTTACTGCAGT-1': 1, 'ACTTAAGAACCACA-1': 1, 'ACTTAAGATTACTC-1': 1, 'ACTTAGCTGCGTAT-1': 1, 'ACTTAGCTGGGAGT-1': 1, 'ACTTCAACAAGCAA-1': 1, 'ACTTCAACGTAGGG-1': 1, 'ACTTCCCTTTCCGC-1': 1, 'ACTTCTGACATGCA-1': 1, 'ACTTGACTCCACAA-1': 1, 'ACTTGGGAGAAAGT-1': 1, 'ACTTGGGAGGTTTG-1': 1, 'ACTTGGGATGTGAC-1': 1, 'ACTTGGGATTGACG-1': 1, 'ACTTGTACCTGTCC-1': 1, 'ACTTTGTGGAAAGT-1': 1, 'ACTTTGTGGATAGA-1': 1, 'AGAAACGAAAGTAG-1': 1, 'AGAAAGTGCGCAAT-1': 1, 'AGAAAGTGGGGATG-1': 1, 'AGAACAGAAATGCC-1': 1, 'AGAACAGACGACTA-1': 1, 'AGAACAGAGACAAA-1': 1, 'AGAACGCTTTGCTT-1': 1, 'AGAAGATGTGACTG-1': 1, 'AGAATGGAAGAAGT-1': 1, 'AGAATTTGTAACCG-1': 1, 'AGAATTTGTAGAGA-1': 1, 'AGACACACTGTAGC-1': 1, 'AGACACTGTCAAGC-1': 1, 'AGACCTGAAGTAGA-1': 1, 'AGACCTGACCAACA-1': 1, 'AGACCTGAGGAAGC-1': 1, 'AGACGTACAGAGGC-1': 1, 'AGACGTACCCCTAC-1': 1, 'AGACGTACCTCTTA-1': 1, 'AGACGTACTCGTGA-1': 1, 'AGACTGACCATCAG-1': 1, 'AGACTGACCCTTTA-1': 1, 'AGACTTCTCATGCA-1': 1, 'AGAGATGACAGTCA-1': 1, 'AGAGATGACTGAAC-1': 1, 'AGAGATGAGGTTTG-1': 1, 'AGAGATGATCTCGC-1': 1, 'AGAGATGATTGTGG-1': 1, 'AGAGCGGAGGCAAG-1': 1, 'AGAGTCTGGTCGTA-1': 1, 'AGAGTGCTCAGCTA-1': 1, 'AGAGTGCTCGAATC-1': 1, 'AGAGTGCTGTCATG-1': 1, 'AGAGTGCTGTCCTC-1': 1, 'AGAGTGCTGTGTTG-1': 1, 'AGATATACCCGTAA-1': 1, 'AGATATACGATGAA-1': 1, 'AGATATACTGTTCT-1': 1, 'AGATATTGCCTACC-1': 1, 'AGATATTGGCCAAT-1': 1, 'AGATCGTGTCTGGA-1': 1, 'AGATCGTGTTTGTC-1': 1, 'AGATCTCTATCACG-1': 1, 'AGATTAACGTTCTT-1': 1, 'AGATTCCTATCGTG-1': 1, 'AGATTCCTCACTTT-1': 1, 'AGATTCCTGACGAG-1': 1, 'AGATTCCTGTTCAG-1': 1, 'AGCAAAGATATGCG-1': 1, 'AGCACAACAGTCTG-1': 1, 'AGCACTGAGGGAGT-1': 1, 'AGCACTGATATGCG-1': 1, 'AGCACTGATGCTTT-1': 1, 'AGCACTGATTGCGA-1': 1, 'AGCATCGAAGATCC-1': 1, 'AGCATCGAAGGGTG-1': 1, 'AGCATCGAGCTTCC-1': 1, 'AGCATCGAGTGAGG-1': 1, 'AGCATCGATAACCG-1': 1, 'AGCATGACGATGAA-1': 1, 'AGCCAATGGGGAGT-1': 1, 'AGCCAATGTATCTC-1': 1, 'AGCCACCTGGATCT-1': 1, 'AGCCGGTGCCAATG-1': 1, 'AGCCGGTGTGTTTC-1': 1, 'AGCCGTCTCAATCG-1': 1, 'AGCCGTCTGAGAGC-1': 1, 'AGCCTCACGTTCGA-1': 1, 'AGCCTCACTGTCAG-1': 1, 'AGCCTCTGCAGTTG-1': 1, 'AGCCTCTGCCAATG-1': 1, 'AGCGAACTGGATCT-1': 1, 'AGCGAACTTACTGG-1': 1, 'AGCGATACGGAGCA-1': 1, 'AGCGATTGAGATCC-1': 1, 'AGCGCCGAATCTCT-1': 1, 'AGCGCCGACAGAGG-1': 1, 'AGCGCTCTACCTTT-1': 1, 'AGCGGCACCGGGAA-1': 1, 'AGCGGCTGATGTGC-1': 1, 'AGCGGGCTTGCCAA-1': 1, 'AGCGTAACATGCTG-1': 1, 'AGCGTAACTGAGAA-1': 1, 'AGCTCGCTACTGGT-1': 1, 'AGCTCGCTCTGCTC-1': 1, 'AGCTGAACCATACG-1': 1, 'AGCTGAACCTCTCG-1': 1, 'AGCTGCCTTGGGAG-1': 1, 'AGCTGCCTTTCATC-1': 1, 'AGCTGCCTTTCTGT-1': 1, 'AGCTGTGATCCAAG-1': 1, 'AGCTTTACAAGTAG-1': 1, 'AGCTTTACACCAAC-1': 1, 'AGCTTTACTCTCAT-1': 1, 'AGGAAATGAGGAGC-1': 1, 'AGGAACCTCTTAGG-1': 1, 'AGGAACCTTGCCTC-1': 1, 'AGGAATGATAACGC-1': 1, 'AGGAATGATTTGTC-1': 1, 'AGGAGTCTGGTTTG-1': 1, 'AGGAGTCTTGTCAG-1': 1, 'AGGATAGACATTTC-1': 1, 'AGGATAGAGGATTC-1': 1, 'AGGATGCTACTAGC-1': 1, 'AGGATGCTTTAGGC-1': 1, 'AGGCAACTGAAGGC-1': 1, 'AGGCAGGAGTACCA-1': 1, 'AGGCCTCTAGTCGT-1': 1, 'AGGCCTCTCGGAGA-1': 1, 'AGGCCTCTCGTAAC-1': 1, 'AGGGACGACGTTGA-1': 1, 'AGGGACGAGTCAAC-1': 1, 'AGGGACGAGTTGTG-1': 1, 'AGGGACGATAGAGA-1': 1, 'AGGGACGATGCATG-1': 1, 'AGGGAGTGAGCCTA-1': 1, 'AGGGCCACCATACG-1': 1, 'AGGGCGCTAACCAC-1': 1, 'AGGGCGCTATGGTC-1': 1, 'AGGGTGGACAGTCA-1': 1, 'AGGGTGGACTCAAG-1': 1, 'AGGGTGGAGTTGCA-1': 1, 'AGGGTTTGTTCATC-1': 1, 'AGGTCATGAGTGTC-1': 1, 'AGGTCATGCTTATC-1': 1, 'AGGTCTGATTCTCA-1': 1, 'AGGTGGGAAGAATG-1': 1, 'AGGTGGGAAGTTCG-1': 1, 'AGGTGTTGGTTACG-1': 1, 'AGGTTCGAACCTCC-1': 1, 'AGGTTCGAACGTAC-1': 1, 'AGGTTCGAGGGTGA-1': 1, 'AGTAAGGAGTTTGG-1': 1, 'AGTAAGGATTCTTG-1': 1, 'AGTAATACATCACG-1': 1, 'AGTAATACCGAACT-1': 1, 'AGTAATTGTCCCAC-1': 1, 'AGTACGTGAGGGTG-1': 1, 'AGTACGTGCTGCAA-1': 1, 'AGTACGTGCTTGGA-1': 1, 'AGTACTCTACGTGT-1': 1, 'AGTACTCTCAACCA-1': 1, 'AGTACTCTCGGTAT-1': 1, 'AGTAGGCTTGCCTC-1': 1, 'AGTATAACTTGTCT-1': 1, 'AGTATCCTAGAACA-1': 1, 'AGTCACGATGAGCT-1': 1, 'AGTCAGACGAATAG-1': 1, 'AGTCAGACGCTTAG-1': 1, 'AGTCAGACTAGAGA-1': 1, 'AGTCAGACTGCACA-1': 1, 'AGTCCAGATATCTC-1': 1, 'AGTCCAGATTTCAC-1': 1, 'AGTCGAACCAACCA-1': 1, 'AGTCGCCTCCGTAA-1': 1, 'AGTCTACTAGGGTG-1': 1, 'AGTCTACTTGCATG-1': 1, 'AGTCTTACACCACA-1': 1, 'AGTCTTACTTCGCC-1': 1, 'AGTCTTACTTCGGA-1': 1, 'AGTGACTGCAACTG-1': 1, 'AGTGTTCTAACCTG-1': 1, 'AGTGTTCTATAAGG-1': 1, 'AGTGTTCTCACTTT-1': 1, 'AGTTAAACCACTTT-1': 1, 'AGTTATGAACAGTC-1': 1, 'AGTTATGACTGAGT-1': 1, 'AGTTATGAGTTCAG-1': 1, 'AGTTCTACCAGCTA-1': 1, 'AGTTCTTGAAGCCT-1': 1, 'AGTTGTCTACTACG-1': 1, 'AGTTTAGATGGTCA-1': 1, 'AGTTTCACGGTCTA-1': 1, 'AGTTTGCTACAGTC-1': 1, 'AGTTTGCTACTGGT-1': 1, 'AGTTTGCTCCAAGT-1': 1, 'ATAAACACAGTGCT-1': 1, 'ATAAACACCACCAA-1': 1, 'ATAACAACATGCTG-1': 1, 'ATAACAACGTCTAG-1': 1, 'ATAACAACTTTGTC-1': 1, 'ATAACATGTACTCT-1': 1, 'ATAACCCTGTTGGT-1': 1, 'ATAACCCTTGGTAC-1': 1, 'ATAAGTACGAATGA-1': 1, 'ATAAGTTGGTACGT-1': 1, 'ATAAGTTGTCTAGG-1': 1, 'ATAATCGAGCTGAT-1': 1, 'ATAATCGATGGTTG-1': 1, 'ATAATGACCTACTT-1': 1, 'ATAATGACTCGTGA-1': 1, 'ATACAATGTTAGGC-1': 1, 'ATACCACTCGTACA-1': 1, 'ATACCACTCTAAGC-1': 1, 'ATACCACTGCCAAT-1': 1, 'ATACCGGAATGCTG-1': 1, 'ATACCGGACATTTC-1': 1, 'ATACCGGACTTCGC-1': 1, 'ATACCGGAGGTGTT-1': 1, 'ATACCGGATCTCGC-1': 1, 'ATACCTACGCATCA-1': 1, 'ATACCTTGGGGCAA-1': 1, 'ATACGGACAGACTC-1': 1, 'ATACGGACCTACTT-1': 1, 'ATACGGACGAGGTG-1': 1, 'ATACGGACTATGCG-1': 1, 'ATACGGACTCTGGA-1': 1, 'ATACGTCTTAACGC-1': 1, 'ATACTCTGCTTCGC-1': 1, 'ATACTCTGGTATGC-1': 1, 'ATAGATACCATGGT-1': 1, 'ATAGATACGACGAG-1': 1, 'ATAGATTGGTGTAC-1': 1, 'ATAGCCGAACGGAG-1': 1, 'ATAGCGTGCAGATC-1': 1, 'ATAGCGTGCCCTTG-1': 1, 'ATAGCGTGGTATCG-1': 1, 'ATAGCGTGTCTCTA-1': 1, 'ATAGCTCTCTGATG-1': 1, 'ATAGCTCTGAGGTG-1': 1, 'ATAGGAGAAACAGA-1': 1, 'ATAGGCTGTCAGAC-1': 1, 'ATAGTCCTAGTGTC-1': 1, 'ATAGTCCTTGCATG-1': 1, 'ATAGTCCTTGTCGA-1': 1, 'ATAGTTGACAACTG-1': 1, 'ATAGTTGACCCTCA-1': 1, 'ATAGTTGAGACGTT-1': 1, 'ATAGTTGATAAGCC-1': 1, 'ATATACGAAGCCAT-1': 1, 'ATATACGAATTGGC-1': 1, 'ATATAGTGGAATGA-1': 1, 'ATATGCCTAGATCC-1': 1, 'ATATGCCTGGACAG-1': 1, 'ATATGCCTTCTCTA-1': 1, 'ATATGCCTTGGTAC-1': 1, 'ATCAAATGAGCCTA-1': 1, 'ATCAAATGGGTAAA-1': 1, 'ATCAACCTAAACGA-1': 1, 'ATCAACCTGAGGAC-1': 1, 'ATCAACCTTCTCTA-1': 1, 'ATCAACCTTTGTCT-1': 1, 'ATCACACTTTGTCT-1': 1, 'ATCACGGATTTCGT-1': 1, 'ATCATCTGACACCA-1': 1, 'ATCATGCTAGAGTA-1': 1, 'ATCATGCTGAACCT-1': 1, 'ATCCAGGACGCTAA-1': 1, 'ATCCAGGATGGAAA-1': 1, 'ATCCATACTCCTTA-1': 1, 'ATCCATACTTCATC-1': 1, 'ATCCCGTGCAGTCA-1': 1, 'ATCCCGTGCATGCA-1': 1, 'ATCCCGTGGCTGAT-1': 1, 'ATCCGCACGCATCA-1': 1, 'ATCCTAACGACGGA-1': 1, 'ATCCTAACGCTACA-1': 1, 'ATCGACGAAACTGC-1': 1, 'ATCGACGAATGACC-1': 1, 'ATCGAGTGGACGTT-1': 1, 'ATCGCAGAATCTCT-1': 1, 'ATCGCAGAGTGTCA-1': 1, 'ATCGCCACTGAGGG-1': 1, 'ATCGCCTGGGTCAT-1': 1, 'ATCGCCTGTGGCAT-1': 1, 'ATCGCGCTCAGAGG-1': 1, 'ATCGCGCTGGGATG-1': 1, 'ATCGCGCTTTTCGT-1': 1, 'ATCGGAACCAGTCA-1': 1, 'ATCGGTGAGTCAAC-1': 1, 'ATCGGTGATTGCAG-1': 1, 'ATCGTTTGCCTACC-1': 1, 'ATCGTTTGGGTACT-1': 1, 'ATCGTTTGTGCCAA-1': 1, 'ATCTACACCCGCTT-1': 1, 'ATCTACACCGGGAA-1': 1, 'ATCTCAACAGGAGC-1': 1, 'ATCTCAACCTCGAA-1': 1, 'ATCTCAACCTTGTT-1': 1, 'ATCTGGGAAACCAC-1': 1, 'ATCTGGGAAGTGTC-1': 1, 'ATCTGGGATTCCGC-1': 1, 'ATCTGTTGAACGGG-1': 1, 'ATCTGTTGACCTCC-1': 1, 'ATCTGTTGCCTTCG-1': 1, 'ATCTGTTGGTTGCA-1': 1, 'ATCTTGACACCAAC-1': 1, 'ATCTTGACCTCCCA-1': 1, 'ATCTTTCTGCATCA-1': 1, 'ATCTTTCTGTTTCT-1': 1, 'ATCTTTCTTGTCCC-1': 1, 'ATGAAACTCTGTGA-1': 1, 'ATGAAACTGAGGCA-1': 1, 'ATGAAGGAACAGCT-1': 1, 'ATGAAGGACCTGTC-1': 1, 'ATGAAGGACCTTAT-1': 1, 'ATGAAGGACTAGTG-1': 1, 'ATGAAGGACTTGCC-1': 1, 'ATGACGTGACGACT-1': 1, 'ATGACGTGATCGGT-1': 1, 'ATGAGAGAAAGTGA-1': 1, 'ATGAGAGAACGCAT-1': 1, 'ATGAGAGAAGTAGA-1': 1, 'ATGAGCACACAGCT-1': 1, 'ATGAGCACATCTTC-1': 1, 'ATGATAACTTCACT-1': 1, 'ATGATATGAAACAG-1': 1, 'ATGATATGACTGGT-1': 1, 'ATGATATGAGCACT-1': 1, 'ATGATATGGTCATG-1': 1, 'ATGATATGGTGCTA-1': 1, 'ATGATATGTTGTCT-1': 1, 'ATGCACGAATGTCG-1': 1, 'ATGCACGACTGTAG-1': 1, 'ATGCACGAGAACCT-1': 1, 'ATGCACGAGTTCGA-1': 1, 'ATGCACGATTGGTG-1': 1, 'ATGCAGTGTTACCT-1': 1, 'ATGCAGTGTTCTAC-1': 1, 'ATGCCAGAACGACT-1': 1, 'ATGCCAGACAGTCA-1': 1, 'ATGCCGCTTGAACC-1': 1, 'ATGCGATGCTATGG-1': 1, 'ATGCGATGCTGAGT-1': 1, 'ATGCGATGGTTACG-1': 1, 'ATGCGCCTTCATTC-1': 1, 'ATGCTTTGCGAATC-1': 1, 'ATGCTTTGGGCGAA-1': 1, 'ATGCTTTGTAGTCG-1': 1, 'ATGGACACATCGGT-1': 1, 'ATGGACACGCATCA-1': 1, 'ATGGGTACAACCTG-1': 1, 'ATGGGTACATCGGT-1': 1, 'ATGGGTACTATTCC-1': 1, 'ATGGGTACTGGGAG-1': 1, 'ATGTAAACACCTCC-1': 1, 'ATGTAAACCCGCTT-1': 1, 'ATGTAAACGGGATG-1': 1, 'ATGTAAACTCTCCG-1': 1, 'ATGTAAACTTCACT-1': 1, 'ATGTACCTCAGTCA-1': 1, 'ATGTACCTTAGTCG-1': 1, 'ATGTACCTTTATCC-1': 1, 'ATGTACCTTTCACT-1': 1, 'ATGTCACTAATGCC-1': 1, 'ATGTCACTCTGCTC-1': 1, 'ATGTCGGAGGTGAG-1': 1, 'ATGTTCACAGTCTG-1': 1, 'ATGTTCACCGTAGT-1': 1, 'ATGTTGCTTTCAGG-1': 1, 'ATTAACGATGAGAA-1': 1, 'ATTAACGATGCAAC-1': 1, 'ATTAAGACTGCAGT-1': 1, 'ATTACCTGCCTTAT-1': 1, 'ATTACCTGGAGGAC-1': 1, 'ATTAGATGTTTCAC-1': 1, 'ATTATGGAATCTCT-1': 1, 'ATTCAAGAACGGGA-1': 1, 'ATTCAAGACCTTTA-1': 1, 'ATTCAGCTCATTGG-1': 1, 'ATTCCAACCATTGG-1': 1, 'ATTCCAACTTAGGC-1': 1, 'ATTCGACTCACTAG-1': 1, 'ATTCGACTGAATAG-1': 1, 'ATTCGACTTTTGTC-1': 1, 'ATTCGGGAAAGGCG-1': 1, 'ATTCGGGATTAGGC-1': 1, 'ATTCTTCTGATACC-1': 1, 'ATTGAATGGACGGA-1': 1, 'ATTGATGAAGGTTC-1': 1, 'ATTGATGACTGAGT-1': 1, 'ATTGATGAGCGAAG-1': 1, 'ATTGATGATCTATC-1': 1, 'ATTGCACTGACGGA-1': 1, 'ATTGCACTGAGAGC-1': 1, 'ATTGCACTGGAGCA-1': 1, 'ATTGCACTTAGCCA-1': 1, 'ATTGCACTTGCTTT-1': 1, 'ATTGCTTGTTACTC-1': 1, 'ATTGGTCTGACTAC-1': 1, 'ATTGGTCTTGTCTT-1': 1, 'ATTGTAGATTCCCG-1': 1, 'ATTGTAGATTGCAG-1': 1, 'ATTGTCTGCGTACA-1': 1, 'ATTTAGGAACCATG-1': 1, 'ATTTAGGACAGAGG-1': 1, 'ATTTCCGAGATGAA-1': 1, 'ATTTCCGAGTGCTA-1': 1, 'ATTTCGTGTATGGC-1': 1, 'ATTTCTCTACTTTC-1': 1, 'ATTTCTCTAGCAAA-1': 1, 'ATTTCTCTCACTTT-1': 1, 'ATTTCTCTTCCCAC-1': 1, 'ATTTGCACAAGATG-1': 1, 'CAAAGCACAGCTCA-1': 1, 'CAAAGCACCGTAAC-1': 1, 'CAAAGCACGGTAAA-1': 1, 'CAAAGCTGAAAGTG-1': 1, 'CAAAGCTGTTGCTT-1': 1, 'CAAATATGTGACAC-1': 1, 'CAAATTGAGGGCAA-1': 1, 'CAAATTGATGGAGG-1': 1, 'CAACCAGAAAAGTG-1': 1, 'CAACCAGAAGTGCT-1': 1, 'CAACCAGAGTTCAG-1': 1, 'CAACCAGATAGAAG-1': 1, 'CAACCGCTGTTCAG-1': 1, 'CAACCGCTTTGAGC-1': 1, 'CAACGATGCGCAAT-1': 1, 'CAACGTGACTCCAC-1': 1, 'CAACGTGAGCCATA-1': 1, 'CAACGTGATCAAGC-1': 1, 'CAAGAAGACCACAA-1': 1, 'CAAGAAGACGTCTC-1': 1, 'CAAGAAGATTCTAC-1': 1, 'CAAGACTGACCTGA-1': 1, 'CAAGACTGAGTAGA-1': 1, 'CAAGCTGACCATAG-1': 1, 'CAAGCTGATCTATC-1': 1, 'CAAGGACTGTTCAG-1': 1, 'CAAGGACTTCTTTG-1': 1, 'CAAGGTTGCTCCAC-1': 1, 'CAAGGTTGTCATTC-1': 1, 'CAAGGTTGTCTGGA-1': 1, 'CAAGTCGAAACAGA-1': 1, 'CAAGTCGATAGCGT-1': 1, 'CAATAAACGCCATA-1': 1, 'CAATAATGAACTGC-1': 1, 'CAATATGACATGGT-1': 1, 'CAATATGACCTTCG-1': 1, 'CAATATGACGTTAG-1': 1, 'CAATATGAGGAGCA-1': 1, 'CAATCGGAGAAACA-1': 1, 'CAATCTACTGACTG-1': 1, 'CAATTCACCCAACA-1': 1, 'CAATTCACGATAGA-1': 1, 'CAATTCACTTGTGG-1': 1, 'CAATTCTGCTTGTT-1': 1, 'CAATTCTGGCGTAT-1': 1, 'CACAACGATACGAC-1': 1, 'CACAATCTTGTTCT-1': 1, 'CACAATCTTTCCAT-1': 1, 'CACACCTGCTTGAG-1': 1, 'CACACCTGTATGGC-1': 1, 'CACAGAACCCTTGC-1': 1, 'CACAGAACCTGATG-1': 1, 'CACAGATGGGATTC-1': 1, 'CACAGATGGTTTCT-1': 1, 'CACAGCCTGATACC-1': 1, 'CACAGCCTTGCCAA-1': 1, 'CACAGCCTTGTAGC-1': 1, 'CACAGTGATGAAGA-1': 1, 'CACATACTACAGCT-1': 1, 'CACATGGAACACGT-1': 1, 'CACATGGAAGTCGT-1': 1, 'CACCACTGCCAACA-1': 1, 'CACCACTGGCGAAG-1': 1, 'CACCCATGTTCTGT-1': 1, 'CACCGGGAATCGAC-1': 1, 'CACCGGGACGAGAG-1': 1, 'CACCGGGACGTGTA-1': 1, 'CACCGGGACTTCTA-1': 1, 'CACCGGGACTTGCC-1': 1, 'CACCGGGATTCGGA-1': 1, 'CACCGTACTAAGGA-1': 1, 'CACCGTACTAGCGT-1': 1, 'CACCTGACACCCAA-1': 1, 'CACCTGACCAGAAA-1': 1, 'CACCTGACCTCAAG-1': 1, 'CACCTGACGAAAGT-1': 1, 'CACCTGACTCGTAG-1': 1, 'CACGAAACTTCCGC-1': 1, 'CACGACCTCGATAC-1': 1, 'CACGCTACAGAAGT-1': 1, 'CACGCTACTGTTCT-1': 1, 'CACGGGACAGAGTA-1': 1, 'CACGGGACATAAGG-1': 1, 'CACGGGACGTAGGG-1': 1, 'CACGGGTGCTTCGC-1': 1, 'CACGGGTGGAGGAC-1': 1, 'CACGGGTGTGTTTC-1': 1, 'CACTAACTCCTAAG-1': 1, 'CACTAACTGAAAGT-1': 1, 'CACTAGGATGATGC-1': 1, 'CACTATACCCCGTT-1': 1, 'CACTATACGTTTGG-1': 1, 'CACTGAGACAGTCA-1': 1, 'CACTGCACTTCATC-1': 1, 'CACTGCTGAGACTC-1': 1, 'CACTGCTGGAAAGT-1': 1, 'CACTTAACCGAATC-1': 1, 'CACTTAACCGTACA-1': 1, 'CACTTTGACTCTAT-1': 1, 'CACTTTGAGCTGTA-1': 1, 'CAGAAGCTCTCAAG-1': 1, 'CAGACATGAACGGG-1': 1, 'CAGACATGTCGACA-1': 1, 'CAGACCCTAAGGTA-1': 1, 'CAGACCCTAATGCC-1': 1, 'CAGACCCTAGGAGC-1': 1, 'CAGACTGAGTATGC-1': 1, 'CAGATCGAATGTCG-1': 1, 'CAGATCGACCTGAA-1': 1, 'CAGATCGATATGGC-1': 1, 'CAGATGACATTCTC-1': 1, 'CAGCAATGCCTTCG-1': 1, 'CAGCAATGGAGGGT-1': 1, 'CAGCAATGGTGCTA-1': 1, 'CAGCAATGTCTACT-1': 1, 'CAGCAATGTGACCA-1': 1, 'CAGCAATGTGAGGG-1': 1, 'CAGCACCTAAGCCT-1': 1, 'CAGCACCTAGGCGA-1': 1, 'CAGCACCTGTAGGG-1': 1, 'CAGCATGACAACCA-1': 1, 'CAGCATGAGACGTT-1': 1, 'CAGCCTACCCAACA-1': 1, 'CAGCCTTGCTACCC-1': 1, 'CAGCCTTGGGGACA-1': 1, 'CAGCGGACACCCTC-1': 1, 'CAGCGGACCTTTAC-1': 1, 'CAGCGTCTAAAGCA-1': 1, 'CAGCGTCTTATCGG-1': 1, 'CAGCTAGATGTGAC-1': 1, 'CAGCTCTGAGGCGA-1': 1, 'CAGCTCTGCAAGCT-1': 1, 'CAGCTCTGTCGTAG-1': 1, 'CAGCTCTGTGTGGT-1': 1, 'CAGGAACTAACTGC-1': 1, 'CAGGAACTCTCAGA-1': 1, 'CAGGCCGAACACCA-1': 1, 'CAGGCCGAACACGT-1': 1, 'CAGGCCGAACGACT-1': 1, 'CAGGCCGAATCTCT-1': 1, 'CAGGCCGACTAGCA-1': 1, 'CAGGGCACCATACG-1': 1, 'CAGGGCACCCAACA-1': 1, 'CAGGGCACTCCCGT-1': 1, 'CAGGTAACAGACTC-1': 1, 'CAGGTATGAGTCGT-1': 1, 'CAGGTATGTGCTTT-1': 1, 'CAGGTTGAGGATCT-1': 1, 'CAGTGATGGACGGA-1': 1, 'CAGTGATGGCTAAC-1': 1, 'CAGTGATGGGACAG-1': 1, 'CAGTGATGTAAGGA-1': 1, 'CAGTGATGTACGCA-1': 1, 'CAGTGTGATGTCAG-1': 1, 'CAGTTACTAAGGTA-1': 1, 'CAGTTACTGATAGA-1': 1, 'CAGTTGGAAAGAGT-1': 1, 'CAGTTGGACATACG-1': 1, 'CAGTTTACACACGT-1': 1, 'CAGTTTACCCCAAA-1': 1, 'CATAAAACGGAGCA-1': 1, 'CATAAATGAACTGC-1': 1, 'CATAACCTTCTCCG-1': 1, 'CATACTACCTCGAA-1': 1, 'CATACTACCTGAAC-1': 1, 'CATACTACGTACCA-1': 1, 'CATACTTGGGTTAC-1': 1, 'CATAGTCTAATCGC-1': 1, 'CATAGTCTCACTTT-1': 1, 'CATATAGACTAAGC-1': 1, 'CATATAGATCAGGT-1': 1, 'CATCAACTAGAAGT-1': 1, 'CATCAACTCCCTCA-1': 1, 'CATCAGGACTTCCG-1': 1, 'CATCAGGATAGCCA-1': 1, 'CATCAGGATCCTAT-1': 1, 'CATCAGGATGCACA-1': 1, 'CATCAGGATTTCGT-1': 1, 'CATCATACCGCATA-1': 1, 'CATCATACGGAGCA-1': 1, 'CATCATACTCAAGC-1': 1, 'CATCGCTGGGATCT-1': 1, 'CATCGCTGTGGCAT-1': 1, 'CATCGGCTATGCTG-1': 1, 'CATCGGCTTTGGCA-1': 1, 'CATCTCCTATGTGC-1': 1, 'CATCTCCTCGAACT-1': 1, 'CATGAGACACGGGA-1': 1, 'CATGAGACGTTGAC-1': 1, 'CATGAGACTCGCCT-1': 1, 'CATGCCACGGGTGA-1': 1, 'CATGCCACTGCCAA-1': 1, 'CATGCGCTAGTCAC-1': 1, 'CATGCGCTCAGATC-1': 1, 'CATGCGCTTTGCAG-1': 1, 'CATGGCCTAGGGTG-1': 1, 'CATGGCCTGTGCAT-1': 1, 'CATGTACTATCGTG-1': 1, 'CATGTTACAGTCGT-1': 1, 'CATGTTACCTGAGT-1': 1, 'CATGTTTGGGGATG-1': 1, 'CATTACACACGGAG-1': 1, 'CATTACACCAACTG-1': 1, 'CATTACACGGAGTG-1': 1, 'CATTACACTACTCT-1': 1, 'CATTAGCTCCACAA-1': 1, 'CATTGACTAGCGGA-1': 1, 'CATTGGGACTCGAA-1': 1, 'CATTGTACAGCGTT-1': 1, 'CATTGTACTCGATG-1': 1, 'CATTGTACTTATCC-1': 1, 'CATTGTACTTTGCT-1': 1, 'CATTGTTGCTAGTG-1': 1, 'CATTTCGACTCTAT-1': 1, 'CATTTCGAGATACC-1': 1, 'CATTTGACCACACA-1': 1, 'CATTTGACCCTGAA-1': 1, 'CATTTGTGACGACT-1': 1, 'CATTTGTGCATTGG-1': 1, 'CATTTGTGCGGAGA-1': 1, 'CATTTGTGGGATCT-1': 1, 'CCAAAGTGCTACGA-1': 1, 'CCAAAGTGTGAGAA-1': 1, 'CCAACCTGAAGTAG-1': 1, 'CCAACCTGACGTAC-1': 1, 'CCAACCTGTTCGCC-1': 1, 'CCAAGAACCCAATG-1': 1, 'CCAAGAACGTAGCT-1': 1, 'CCAAGAACGTGTCA-1': 1, 'CCAAGAACTACTGG-1': 1, 'CCAAGAACTCCTAT-1': 1, 'CCAAGATGTCATTC-1': 1, 'CCAAGATGTTTCAC-1': 1, 'CCAAGTGAGGAACG-1': 1, 'CCAAGTGATCAAGC-1': 1, 'CCAATTTGAACGTC-1': 1, 'CCACCATGAACGTC-1': 1, 'CCACCATGATCGGT-1': 1, 'CCACCATGGACGAG-1': 1, 'CCACCATGGGGAGT-1': 1, 'CCACCATGTCCTGC-1': 1, 'CCACTGACCCGCTT-1': 1, 'CCACTGTGGGAAGC-1': 1, 'CCACTGTGTGTAGC-1': 1, 'CCACTTCTCGGGAA-1': 1, 'CCAGAAACCCTGTC-1': 1, 'CCAGAAACGAACTC-1': 1, 'CCAGAAACGGTCTA-1': 1, 'CCAGACCTCTGAGT-1': 1, 'CCAGACCTTGTGGT-1': 1, 'CCAGCACTGCGATT-1': 1, 'CCAGCGGAAAGGCG-1': 1, 'CCAGCGGACGACTA-1': 1, 'CCAGCGGATGGGAG-1': 1, 'CCAGCTACACAGTC-1': 1, 'CCAGCTACCAGCTA-1': 1, 'CCAGGTCTACACCA-1': 1, 'CCAGGTCTAGCATC-1': 1, 'CCAGGTCTATGGTC-1': 1, 'CCAGTCACACTGGT-1': 1, 'CCAGTCACACTGTG-1': 1, 'CCAGTCACGTTGTG-1': 1, 'CCAGTGCTAACCAC-1': 1, 'CCAGTGCTCGTAGT-1': 1, 'CCATCCGAAAGCAA-1': 1, 'CCATCCGAACGACT-1': 1, 'CCATCCGAAGGTTC-1': 1, 'CCATCCGATTCGCC-1': 1, 'CCATCGTGAACGGG-1': 1, 'CCATCGTGCTAGAC-1': 1, 'CCCAACACCTCGCT-1': 1, 'CCCAACACGCATCA-1': 1, 'CCCAACACTTTGTC-1': 1, 'CCCAACTGCAATCG-1': 1, 'CCCAGACTGCCTTC-1': 1, 'CCCAGACTGGTTTG-1': 1, 'CCCAGACTTTCGCC-1': 1, 'CCCAGTTGCAGTTG-1': 1, 'CCCAGTTGGGTACT-1': 1, 'CCCAGTTGTCTATC-1': 1, 'CCCGATTGTGTTTC-1': 1, 'CCCGGAGAAGGGTG-1': 1, 'CCCTACGAATTGGC-1': 1, 'CCCTAGTGCAAAGA-1': 1, 'CCCTCAGACACTTT-1': 1, 'CCCTCAGACGAGAG-1': 1, 'CCCTCAGAGGTCAT-1': 1, 'CCCTGAACTAAAGG-1': 1, 'CCCTGATGCAACCA-1': 1, 'CCCTGATGCAAGCT-1': 1, 'CCCTTACTAACCAC-1': 1, 'CCCTTACTGCAGTT-1': 1, 'CCGAAAACCTTGTT-1': 1, 'CCGACACTGGTTTG-1': 1, 'CCGACTACCCAGTA-1': 1, 'CCGACTACCGTGTA-1': 1, 'CCGACTACTGAGGG-1': 1, 'CCGATAGACCTAAG-1': 1, 'CCGATAGAGTTGGT-1': 1, 'CCGCGAGACACACA-1': 1, 'CCGCGAGAGGTTCA-1': 1, 'CCGCTATGGGACGA-1': 1, 'CCGCTATGTGCAAC-1': 1, 'CCGCTATGTGCACA-1': 1, 'CCGGTACTGTCCTC-1': 1, 'CCGTACACAAGCAA-1': 1, 'CCGTACACAGCGTT-1': 1, 'CCGTACACGTCATG-1': 1, 'CCGTACACGTTGGT-1': 1, 'CCGTACACTAACGC-1': 1, 'CCTAAACTTTCGTT-1': 1, 'CCTAAGGACCCAAA-1': 1, 'CCTAAGGACTAGCA-1': 1, 'CCTAAGGAGGGCAA-1': 1, 'CCTAAGGATGATGC-1': 1, 'CCTAAGGATGTCAG-1': 1, 'CCTACCGACTCTTA-1': 1, 'CCTACCGAGGGATG-1': 1, 'CCTAGAGAGGTGAG-1': 1, 'CCTATAACCAAAGA-1': 1, 'CCTATAACGAGACG-1': 1, 'CCTATAACTCAGAC-1': 1, 'CCTATAACTGCATG-1': 1, 'CCTCGAACACTTTC-1': 1, 'CCTCGAACCCGTAA-1': 1, 'CCTCGAACGTATCG-1': 1, 'CCTCGAACTTACTC-1': 1, 'CCTCTACTCTTCGC-1': 1, 'CCTCTACTGGCATT-1': 1, 'CCTGACTGAAGTAG-1': 1, 'CCTGACTGGGGAGT-1': 1, 'CCTGACTGTGTCTT-1': 1, 'CCTGCAACACGTTG-1': 1, 'CCTGGACTCGTGAT-1': 1, 'CCTTAATGCCCAAA-1': 1, 'CCTTAATGTTCTAC-1': 1, 'CCTTCACTACGACT-1': 1, 'CCTTCACTCAGTCA-1': 1, 'CCTTCACTGGAGTG-1': 1, 'CCTTTAGATTCATC-1': 1, 'CGAACATGCCCTAC-1': 1, 'CGAACATGTCAGAC-1': 1, 'CGAAGACTGGAACG-1': 1, 'CGAAGACTGTTACG-1': 1, 'CGAAGGGAAACCTG-1': 1, 'CGAAGGGATCCGAA-1': 1, 'CGAAGTACCAACTG-1': 1, 'CGAATCGAGGAGCA-1': 1, 'CGAATCGAGGAGGT-1': 1, 'CGACAAACCCATAG-1': 1, 'CGACAAACCGACAT-1': 1, 'CGACCACTAAAGTG-1': 1, 'CGACCACTGCCAAT-1': 1, 'CGACCGGAAGGTCT-1': 1, 'CGACCGGATGGAAA-1': 1, 'CGACCTTGCTAGTG-1': 1, 'CGACGTCTATCGTG-1': 1, 'CGACGTCTCGTGTA-1': 1, 'CGACGTCTGAGGCA-1': 1, 'CGACTCACGTCGTA-1': 1, 'CGACTCACGTTGCA-1': 1, 'CGACTCTGTGTGAC-1': 1, 'CGACTGCTTCCTCG-1': 1, 'CGAGAACTAAGGCG-1': 1, 'CGAGAACTACGTTG-1': 1, 'CGAGAACTTGTTCT-1': 1, 'CGAGATTGGACACT-1': 1, 'CGAGATTGGCCATA-1': 1, 'CGAGCCGAACACCA-1': 1, 'CGAGCCGAGGCGAA-1': 1, 'CGAGCGTGCTCCAC-1': 1, 'CGAGCGTGGATACC-1': 1, 'CGAGCGTGTATGCG-1': 1, 'CGAGGAGACCTCCA-1': 1, 'CGAGGAGATGTCGA-1': 1, 'CGAGGCACCTATGG-1': 1, 'CGAGGCACTATGCG-1': 1, 'CGAGGCACTCTTCA-1': 1, 'CGAGGCTGACGCTA-1': 1, 'CGAGGCTGGCAGTT-1': 1, 'CGAGGGCTACGACT-1': 1, 'CGAGGGCTCGAATC-1': 1, 'CGAGTATGTCACCC-1': 1, 'CGATACGAACAGTC-1': 1, 'CGATACGACAGGAG-1': 1, 'CGATACGATTCACT-1': 1, 'CGATAGACCCGTAA-1': 1, 'CGATAGACCGTACA-1': 1, 'CGATAGACGTAGGG-1': 1, 'CGATAGACTGTTCT-1': 1, 'CGATCAGAAGAACA-1': 1, 'CGATCAGAGAGGGT-1': 1, 'CGATCAGAGGTACT-1': 1, 'CGATCAGATGTGAC-1': 1, 'CGATCCACCGGGAA-1': 1, 'CGATCCACTTCCAT-1': 1, 'CGCAAATGCTCGAA-1': 1, 'CGCAACCTCCTTGC-1': 1, 'CGCAACCTGGACGA-1': 1, 'CGCACGGAGGACGA-1': 1, 'CGCACGGATCTTTG-1': 1, 'CGCACTACAGAATG-1': 1, 'CGCACTACAGCCAT-1': 1, 'CGCACTACATTGGC-1': 1, 'CGCACTACTCGCCT-1': 1, 'CGCACTACTCGTGA-1': 1, 'CGCACTTGTCACGA-1': 1, 'CGCAGGACAGATCC-1': 1, 'CGCAGGACCTACTT-1': 1, 'CGCAGGACTTGTCT-1': 1, 'CGCAGGTGCACTGA-1': 1, 'CGCAGGTGCCATAG-1': 1, 'CGCAGGTGGGAACG-1': 1, 'CGCATAGATCACGA-1': 1, 'CGCCATACTGCAAC-1': 1, 'CGCCATTGAGAGGC-1': 1, 'CGCCATTGCTATGG-1': 1, 'CGCCATTGGAGACG-1': 1, 'CGCCATTGGAGCAG-1': 1, 'CGCCATTGTACTGG-1': 1, 'CGCCGAGAGCTTAG-1': 1, 'CGCCTAACGAATGA-1': 1, 'CGCCTAACTGCTCC-1': 1, 'CGCGAGACACAGCT-1': 1, 'CGCGAGACAGGTCT-1': 1, 'CGCGAGACGCTACA-1': 1, 'CGCGATCTCAGTCA-1': 1, 'CGCGATCTGTTGAC-1': 1, 'CGCGATCTTTCTTG-1': 1, 'CGCGGATGGCCAAT-1': 1, 'CGCTAAGAATGTCG-1': 1, 'CGCTAAGACAACTG-1': 1, 'CGCTAAGACCCTTG-1': 1, 'CGCTACTGAACAGA-1': 1, 'CGCTACTGAGAACA-1': 1, 'CGCTACTGTGAGCT-1': 1, 'CGCTACTGTTCCCG-1': 1, 'CGCTCATGCATTTC-1': 1, 'CGGAATTGGTTTGG-1': 1, 'CGGAATTGTGGAGG-1': 1, 'CGGACCGATGCGTA-1': 1, 'CGGACCGATGGGAG-1': 1, 'CGGACTCTAAACAG-1': 1, 'CGGACTCTCCAATG-1': 1, 'CGGACTCTCCTCGT-1': 1, 'CGGAGGCTATTCCT-1': 1, 'CGGAGGCTTGGATC-1': 1, 'CGGATAACAACGAA-1': 1, 'CGGATAACAGCTCA-1': 1, 'CGGATAACTCAGTG-1': 1, 'CGGCACGAACTCAG-1': 1, 'CGGCACGAAGGGTG-1': 1, 'CGGCACGACTACGA-1': 1, 'CGGCATCTTAGAAG-1': 1, 'CGGCATCTTCGTAG-1': 1, 'CGGCCAGAAAGGTA-1': 1, 'CGGCCAGAGAGGCA-1': 1, 'CGGCGAACCAGTCA-1': 1, 'CGGCGAACGACAAA-1': 1, 'CGGCGAACGGTCTA-1': 1, 'CGGCGAACTACTTC-1': 1, 'CGGGACTGCGTGTA-1': 1, 'CGGGACTGGAATAG-1': 1, 'CGGGCATGACCCAA-1': 1, 'CGGGCATGTCTCTA-1': 1, 'CGGGCATGTTGTGG-1': 1, 'CGGTAAACTCGCAA-1': 1, 'CGGTCACTGTTTGG-1': 1, 'CGGTCACTTACTTC-1': 1, 'CGTAACGATCGCCT-1': 1, 'CGTACCACACACAC-1': 1, 'CGTACCACACGTTG-1': 1, 'CGTACCACCTCATT-1': 1, 'CGTACCACGGAGCA-1': 1, 'CGTACCTGGCATCA-1': 1, 'CGTAGCCTCTCTCG-1': 1, 'CGTAGCCTGCGAAG-1': 1, 'CGTAGCCTGTATGC-1': 1, 'CGTCAAGAAAGGTA-1': 1, 'CGTCAAGAACGTGT-1': 1, 'CGTCAAGACAGAGG-1': 1, 'CGTCAAGACAGGAG-1': 1, 'CGTCCATGCTCTTA-1': 1, 'CGTCGACTTTCCGC-1': 1, 'CGTGATGACGCTAA-1': 1, 'CGTGATGAGGTTCA-1': 1, 'CGTGCACTTATGGC-1': 1, 'CGTGTAGAAAAACG-1': 1, 'CGTGTAGACGATAC-1': 1, 'CGTGTAGAGTTACG-1': 1, 'CGTGTAGAGTTCAG-1': 1, 'CGTGTAGATTCGGA-1': 1, 'CGTTAGGAAACCAC-1': 1, 'CGTTAGGATCATTC-1': 1, 'CGTTATACCCTGAA-1': 1, 'CGTTTAACTGGTCA-1': 1, 'CTAAACCTCTGACA-1': 1, 'CTAAACCTGTGCAT-1': 1, 'CTAACACTAACGTC-1': 1, 'CTAACACTAGTGCT-1': 1, 'CTAACGGAACCGAT-1': 1, 'CTAACGGATTTCTG-1': 1, 'CTAACTACGGCAAG-1': 1, 'CTAAGGACACCATG-1': 1, 'CTAAGGACCGTTAG-1': 1, 'CTAAGGACGCCATA-1': 1, 'CTAAGGTGCCTAAG-1': 1, 'CTAAGGTGTTGCAG-1': 1, 'CTAAGGTGTTTCTG-1': 1, 'CTAATAGAGCTATG-1': 1, 'CTAATGCTTGTGGT-1': 1, 'CTACAACTCCCGTT-1': 1, 'CTACCTCTCAACCA-1': 1, 'CTACGCACACCTAG-1': 1, 'CTACGCACTCTCCG-1': 1, 'CTACGCACTGGTCA-1': 1, 'CTACGGCTTTCTTG-1': 1, 'CTACTATGAACCAC-1': 1, 'CTACTATGATGTGC-1': 1, 'CTACTATGCTAAGC-1': 1, 'CTACTATGTAAAGG-1': 1, 'CTACTCCTATGTCG-1': 1, 'CTACTCCTGCCATA-1': 1, 'CTAGAGACACTTTC-1': 1, 'CTAGAGACAGCATC-1': 1, 'CTAGAGACTTTGGG-1': 1, 'CTAGATCTCTCTAT-1': 1, 'CTAGATCTTCGACA-1': 1, 'CTAGGATGAGCCTA-1': 1, 'CTAGGATGATCGTG-1': 1, 'CTAGGCCTCTCAGA-1': 1, 'CTAGGTGATGGTTG-1': 1, 'CTAGTTACCAGAGG-1': 1, 'CTAGTTACCGCATA-1': 1, 'CTAGTTACGAAACA-1': 1, 'CTATAAGATCGTTT-1': 1, 'CTATACTGAGGTTC-1': 1, 'CTATACTGCCAGTA-1': 1, 'CTATACTGCGCTAA-1': 1, 'CTATACTGCTACGA-1': 1, 'CTATACTGTCTCAT-1': 1, 'CTATACTGTTCGTT-1': 1, 'CTATAGCTGTCACA-1': 1, 'CTATAGCTTCGCTC-1': 1, 'CTATAGCTTGCCTC-1': 1, 'CTATCAACGAACTC-1': 1, 'CTATCAACGCAGAG-1': 1, 'CTATCAACTTTGGG-1': 1, 'CTATCCCTCCACCT-1': 1, 'CTATGTACGAGAGC-1': 1, 'CTATGTACGCTTAG-1': 1, 'CTATGTACTGTTTC-1': 1, 'CTATGTTGAAAGCA-1': 1, 'CTATGTTGTCCTCG-1': 1, 'CTATGTTGTCTCGC-1': 1, 'CTATTGACAAACGA-1': 1, 'CTATTGACACTGGT-1': 1, 'CTATTGACGGTGAG-1': 1, 'CTATTGTGGCAAGG-1': 1, 'CTCAATTGGTTCAG-1': 1, 'CTCAATTGGTTGCA-1': 1, 'CTCAGAGATAGAAG-1': 1, 'CTCAGCACTCTAGG-1': 1, 'CTCAGCACTGAACC-1': 1, 'CTCAGCACTTGCAG-1': 1, 'CTCAGCTGAACCTG-1': 1, 'CTCAGCTGCAGTTG-1': 1, 'CTCAGGCTCGTTGA-1': 1, 'CTCAGGCTGCTAAC-1': 1, 'CTCATTGACCTTAT-1': 1, 'CTCATTGATGCTTT-1': 1, 'CTCCACGAGAGATA-1': 1, 'CTCCATCTCTTAGG-1': 1, 'CTCCATCTGACGAG-1': 1, 'CTCCGAACAAGTGA-1': 1, 'CTCCTACTGCCTTC-1': 1, 'CTCGAAGATGTGGT-1': 1, 'CTCGAAGATTAGGC-1': 1, 'CTCGACTGCTCTAT-1': 1, 'CTCGACTGGGTGAG-1': 1, 'CTCGACTGGTTGAC-1': 1, 'CTCGAGCTCTGGAT-1': 1, 'CTCGCATGACTTTC-1': 1, 'CTCGCATGCTTAGG-1': 1, 'CTCTAAACCTCGAA-1': 1, 'CTCTAAACGGCGAA-1': 1, 'CTCTAATGTCCAAG-1': 1, 'CTGAACGACAGTCA-1': 1, 'CTGAACGATGAGGG-1': 1, 'CTGAAGACCCAACA-1': 1, 'CTGAAGACGTGCAT-1': 1, 'CTGAAGTGAAGCCT-1': 1, 'CTGAAGTGCAGCTA-1': 1, 'CTGAAGTGGCTATG-1': 1, 'CTGAAGTGTCCAGA-1': 1, 'CTGAATCTGAATAG-1': 1, 'CTGACAGAATCGTG-1': 1, 'CTGACCACAGCAAA-1': 1, 'CTGAGAACCGGGAA-1': 1, 'CTGAGAACGTAAAG-1': 1, 'CTGATACTAGTAGA-1': 1, 'CTGATTTGGTGTTG-1': 1, 'CTGCAGCTAACCGT-1': 1, 'CTGCAGCTGACACT-1': 1, 'CTGCAGCTGGATTC-1': 1, 'CTGCAGCTTGGCAT-1': 1, 'CTGCCAACAGGAGC-1': 1, 'CTGCCAACCAGCTA-1': 1, 'CTGCCAACTAACCG-1': 1, 'CTGCCAACTGCTCC-1': 1, 'CTGCCAACTTGCAG-1': 1, 'CTGCCAACTTGCTT-1': 1, 'CTGCGACTCCACCT-1': 1, 'CTGGAAACAAACGA-1': 1, 'CTGGAAACATCGAC-1': 1, 'CTGGATGACTGGAT-1': 1, 'CTGGATGACTTGTT-1': 1, 'CTGGATGATGTGAC-1': 1, 'CTGGCACTCAAGCT-1': 1, 'CTGTAACTAACCAC-1': 1, 'CTGTAACTAGCGTT-1': 1, 'CTGTATACGTAAAG-1': 1, 'CTGTATACGTACGT-1': 1, 'CTGTATACGTTGGT-1': 1, 'CTGTGAGACAACCA-1': 1, 'CTGTGAGACCTTGC-1': 1, 'CTGTGAGACGAACT-1': 1, 'CTGTGAGACTGTAG-1': 1, 'CTTAAAGAACCTGA-1': 1, 'CTTAACACCTGTAG-1': 1, 'CTTAACACTATCGG-1': 1, 'CTTAAGCTACCTAG-1': 1, 'CTTAAGCTAGTACC-1': 1, 'CTTAAGCTCATCAG-1': 1, 'CTTAAGCTCCGCTT-1': 1, 'CTTACAACTAACGC-1': 1, 'CTTACAACTCCCGT-1': 1, 'CTTACTGACGTACA-1': 1, 'CTTAGACTAAACGA-1': 1, 'CTTAGGGACTTGCC-1': 1, 'CTTAGGGAGAATCC-1': 1, 'CTTATCGACTCATT-1': 1, 'CTTCACCTACCTGA-1': 1, 'CTTCATGAAGCATC-1': 1, 'CTTCATGAAGTACC-1': 1, 'CTTCATGACCGAAT-1': 1, 'CTTGAACTACGCAT-1': 1, 'CTTGATTGAGGTTC-1': 1, 'CTTGATTGATCTTC-1': 1, 'CTTGATTGCATTCT-1': 1, 'CTTGATTGTTTCGT-1': 1, 'CTTGTATGACACCA-1': 1, 'CTTGTATGCGCAAT-1': 1, 'CTTTACGAGCGAAG-1': 1, 'CTTTAGACCGTGAT-1': 1, 'CTTTAGACGAGACG-1': 1, 'CTTTAGACGATACC-1': 1, 'CTTTAGACGTTGGT-1': 1, 'CTTTAGACTCATTC-1': 1, 'CTTTAGTGACGGGA-1': 1, 'CTTTAGTGGGTGGA-1': 1, 'CTTTCAGAGAAACA-1': 1, 'CTTTGATGAGCACT-1': 1, 'CTTTGATGTCTAGG-1': 1, 'CTTTGATGTGTCCC-1': 1, 'CTTTGATGTGTGGT-1': 1, 'GAAACAGAACTACG-1': 1, 'GAAACAGAATCACG-1': 1, 'GAAACAGACATTCT-1': 1, 'GAAACCTGATCGTG-1': 1, 'GAAACCTGATGCCA-1': 1, 'GAAACCTGCTTATC-1': 1, 'GAAACCTGGACTAC-1': 1, 'GAAACCTGTGCTAG-1': 1, 'GAAAGATGATTTCC-1': 1, 'GAAAGATGCTGATG-1': 1, 'GAAAGATGCTTCGC-1': 1, 'GAAAGATGTAAGGA-1': 1, 'GAAAGCCTACGTTG-1': 1, 'GAAAGTGAAAGTGA-1': 1, 'GAAAGTGACCACAA-1': 1, 'GAAAGTGACTCAAG-1': 1, 'GAAATACTACCAAC-1': 1, 'GAAATACTCTTAGG-1': 1, 'GAAATACTTCCTCG-1': 1, 'GAACACACGTGCAT-1': 1, 'GAACACACTGCCTC-1': 1, 'GAACAGCTAACTGC-1': 1, 'GAACAGCTCTCAGA-1': 1, 'GAACCAACCACAAC-1': 1, 'GAACCAACTTCCGC-1': 1, 'GAACCTGAACGTGT-1': 1, 'GAACCTGAGAGACG-1': 1, 'GAACCTGATGAACC-1': 1, 'GAACGGGATACTTC-1': 1, 'GAACTGTGACCTGA-1': 1, 'GAACTGTGCCAGTA-1': 1, 'GAAGAATGCAATCG-1': 1, 'GAAGCGGACCTATT-1': 1, 'GAAGCTACGAATGA-1': 1, 'GAAGCTACGGTTTG-1': 1, 'GAAGGGTGAAAGTG-1': 1, 'GAAGGGTGCTTAGG-1': 1, 'GAAGGTCTGAAAGT-1': 1, 'GAAGGTCTGTTGCA-1': 1, 'GAAGGTCTTAAAGG-1': 1, 'GAAGTAGACTCCCA-1': 1, 'GAAGTAGATCCAAG-1': 1, 'GAAGTCACCCTCGT-1': 1, 'GAAGTCACCCTGTC-1': 1, 'GAAGTCTGTCGCAA-1': 1, 'GAAGTCTGTTCTGT-1': 1, 'GAAGTGCTAAACGA-1': 1, 'GAAGTGCTCCGCTT-1': 1, 'GAAGTGCTTAACCG-1': 1, 'GAATGCACCCTAAG-1': 1, 'GAATGCACCTTCGC-1': 1, 'GAATGCTGCGGTAT-1': 1, 'GAATTAACGATAAG-1': 1, 'GAATTAACGGTCAT-1': 1, 'GAATTAACGTCGTA-1': 1, 'GAATTAACTGAAGA-1': 1, 'GACAACACAGGCGA-1': 1, 'GACAACACATCGTG-1': 1, 'GACAACACTCGCCT-1': 1, 'GACAACTGAGGTTC-1': 1, 'GACAGGGAAGAGTA-1': 1, 'GACAGGGAATGCCA-1': 1, 'GACAGTACGAGCTT-1': 1, 'GACAGTACTTCGGA-1': 1, 'GACAGTTGAGTAGA-1': 1, 'GACATTCTCCACCT-1': 1, 'GACCAAACGACTAC-1': 1, 'GACCAAACGTATCG-1': 1, 'GACCCTACTAAAGG-1': 1, 'GACCTAGACCTCAC-1': 1, 'GACCTAGACGAGAG-1': 1, 'GACCTCACAAGGTA-1': 1, 'GACCTCACGTACGT-1': 1, 'GACCTCTGCATCAG-1': 1, 'GACGAACTCCCACT-1': 1, 'GACGATTGCCAATG-1': 1, 'GACGCCGACCTTCG-1': 1, 'GACGCTCTCTCTCG-1': 1, 'GACGGCACACGGGA-1': 1, 'GACGGCACGAGATA-1': 1, 'GACGTAACCTATGG-1': 1, 'GACGTAACCTGTGA-1': 1, 'GACGTAACTATGGC-1': 1, 'GACGTATGTTGACG-1': 1, 'GACGTATGTTTGCT-1': 1, 'GACGTCCTACGGAG-1': 1, 'GACGTCCTCTCAAG-1': 1, 'GACGTCCTGATAAG-1': 1, 'GACTACGATGGTCA-1': 1, 'GACTCCTGCTCGCT-1': 1, 'GACTCCTGGGTTAC-1': 1, 'GACTCCTGTTATCC-1': 1, 'GACTCCTGTTGGTG-1': 1, 'GACTGAACCAATCG-1': 1, 'GACTGATGTGATGC-1': 1, 'GACTTTACATGCCA-1': 1, 'GACTTTACGACAGG-1': 1, 'GAGAAATGTTCTCA-1': 1, 'GAGATAGAAAAAGC-1': 1, 'GAGATCACGACAAA-1': 1, 'GAGATGCTCTGGAT-1': 1, 'GAGATGCTGAATGA-1': 1, 'GAGCAGGATTCCCG-1': 1, 'GAGCATACTTTGCT-1': 1, 'GAGCGCACGCGTAT-1': 1, 'GAGCGCACGGTGAG-1': 1, 'GAGCGCTGAAGATG-1': 1, 'GAGCGCTGTCTTAC-1': 1, 'GAGCGGCTGGGAGT-1': 1, 'GAGGACGACTCAGA-1': 1, 'GAGGATCTGAAAGT-1': 1, 'GAGGCAGACTTGCC-1': 1, 'GAGGGAACACCAGT-1': 1, 'GAGGGAACGAGGGT-1': 1, 'GAGGGATGGGAAAT-1': 1, 'GAGGGCCTTCACCC-1': 1, 'GAGGGTGAAGAGTA-1': 1, 'GAGGTACTACGGTT-1': 1, 'GAGGTACTACTCAG-1': 1, 'GAGGTACTGACACT-1': 1, 'GAGGTACTGGGAGT-1': 1, 'GAGGTACTTAGCGT-1': 1, 'GAGGTGGAGTACGT-1': 1, 'GAGGTGGATCCTCG-1': 1, 'GAGGTTACTCGTTT-1': 1, 'GAGGTTTGTAAGCC-1': 1, 'GAGTCAACCATTCT-1': 1, 'GAGTCAACGGGAGT-1': 1, 'GAGTCTGATCGTGA-1': 1, 'GAGTCTGATTTGGG-1': 1, 'GAGTGACTCAGCTA-1': 1, 'GAGTGACTCGGTAT-1': 1, 'GAGTGACTCTTGCC-1': 1, 'GAGTGACTGACTAC-1': 1, 'GAGTGACTGTCTAG-1': 1, 'GAGTGGGAGTCTTT-1': 1, 'GAGTGGGATGCCCT-1': 1, 'GAGTGGGATGCTGA-1': 1, 'GAGTGTTGCTGTAG-1': 1, 'GAGTGTTGTGGTCA-1': 1, 'GAGTTGTGCATGGT-1': 1, 'GAGTTGTGCTGAGT-1': 1, 'GAGTTGTGGCGAGA-1': 1, 'GAGTTGTGGTAGCT-1': 1, 'GAGTTGTGTATGCG-1': 1, 'GATAAGGAGAAACA-1': 1, 'GATAAGGATTCACT-1': 1, 'GATACTCTATCGGT-1': 1, 'GATACTCTTACTTC-1': 1, 'GATACTCTTGACTG-1': 1, 'GATAGAGAAGGGTG-1': 1, 'GATAGAGACTGTGA-1': 1, 'GATAGAGATCACGA-1': 1, 'GATAGCACCCATAG-1': 1, 'GATAGCACGAAGGC-1': 1, 'GATAGCACTTGTCT-1': 1, 'GATATAACAAGGTA-1': 1, 'GATATAACACGCAT-1': 1, 'GATATATGCTGGAT-1': 1, 'GATATATGTCCGTC-1': 1, 'GATATATGTGGAGG-1': 1, 'GATATCCTAGAAGT-1': 1, 'GATATCCTCCCGTT-1': 1, 'GATATTGACAGGAG-1': 1, 'GATATTGACGAGTT-1': 1, 'GATATTGAGCCAAT-1': 1, 'GATCCCTGACCTTT-1': 1, 'GATCCCTGTGTAGC-1': 1, 'GATCCGCTGGTCAT-1': 1, 'GATCGAACCGAGAG-1': 1, 'GATCGATGACTAGC-1': 1, 'GATCGATGGTAAAG-1': 1, 'GATCGATGTAAGGA-1': 1, 'GATCGTGACACTAG-1': 1, 'GATCGTGATTCACT-1': 1, 'GATCTACTGGTGAG-1': 1, 'GATCTACTTTGCAG-1': 1, 'GATCTTACACCCAA-1': 1, 'GATCTTACCCTACC-1': 1, 'GATCTTACGAATAG-1': 1, 'GATCTTACGAGATA-1': 1, 'GATGCAACTCCAGA-1': 1, 'GATGCCCTACGTAC-1': 1, 'GATGCCCTCTCATT-1': 1, 'GATGCCCTGGCAAG-1': 1, 'GATGCCCTTTTGCT-1': 1, 'GATTACCTTGTTCT-1': 1, 'GATTCGGAACGACT-1': 1, 'GATTCGGACAGGAG-1': 1, 'GATTCGGAGAAGGC-1': 1, 'GATTCTTGATTCGG-1': 1, 'GATTCTTGCCGATA-1': 1, 'GATTCTTGCGAGTT-1': 1, 'GATTGGACCCGTTC-1': 1, 'GATTGGACGGTGTT-1': 1, 'GATTGGACTTTCGT-1': 1, 'GATTGGTGTGTCAG-1': 1, 'GATTTAGACACTCC-1': 1, 'GATTTAGACTAAGC-1': 1, 'GATTTAGATTCGTT-1': 1, 'GATTTGCTAACGAA-1': 1, 'GATTTGCTAACGGG-1': 1, 'GCAACCCTCCTCGT-1': 1, 'GCAACTGATTGCGA-1': 1, 'GCAAGACTACTGGT-1': 1, 'GCAAGACTAGGTCT-1': 1, 'GCAAGACTCCCTTG-1': 1, 'GCAATCGACTGCAA-1': 1, 'GCAATCGAGACGTT-1': 1, 'GCAATCGATCCTTA-1': 1, 'GCAATTCTCGTGTA-1': 1, 'GCAATTCTTCTCCG-1': 1, 'GCACAAACAATGCC-1': 1, 'GCACAAACGGTACT-1': 1, 'GCACAATGGTGCAT-1': 1, 'GCACACCTGTGCTA-1': 1, 'GCACCACTCATGAC-1': 1, 'GCACCACTGTTTGG-1': 1, 'GCACCACTTCCTTA-1': 1, 'GCACCACTTTCGGA-1': 1, 'GCACCTACGCGATT-1': 1, 'GCACCTTGGCTGTA-1': 1, 'GCACCTTGGGGAGT-1': 1, 'GCACGGACCAGCTA-1': 1, 'GCACGGTGACCTCC-1': 1, 'GCACGGTGCTATGG-1': 1, 'GCACTAGAACGGGA-1': 1, 'GCACTAGAAGATGA-1': 1, 'GCACTAGACCTTTA-1': 1, 'GCACTAGACGTAAC-1': 1, 'GCACTAGAGTCGTA-1': 1, 'GCACTAGATGCAAC-1': 1, 'GCACTGCTGAGGCA-1': 1, 'GCAGATACAGCGTT-1': 1, 'GCAGATACGACGGA-1': 1, 'GCAGATACGCAGAG-1': 1, 'GCAGCCGACAGTCA-1': 1, 'GCAGCGTGCACTCC-1': 1, 'GCAGCTCTCAATCG-1': 1, 'GCAGCTCTGTTTCT-1': 1, 'GCAGGGCTAAGAAC-1': 1, 'GCAGGGCTAAGGGC-1': 1, 'GCAGGGCTATCGAC-1': 1, 'GCAGGGCTTGGGAG-1': 1, 'GCAGTCCTAACTGC-1': 1, 'GCAGTCCTCTCTTA-1': 1, 'GCATCAGATGCGTA-1': 1, 'GCATGTGACAAGCT-1': 1, 'GCATTGGAGAAGGC-1': 1, 'GCCAAAACGAGGCA-1': 1, 'GCCAAATGATCGAC-1': 1, 'GCCAACCTACGGTT-1': 1, 'GCCAACCTCGCCTT-1': 1, 'GCCACGGAGGCGAA-1': 1, 'GCCACGGATACTGG-1': 1, 'GCCACTACGTCTTT-1': 1, 'GCCCAACTACCGAT-1': 1, 'GCCCAACTATGGTC-1': 1, 'GCCCATACAGCGTT-1': 1, 'GCCGACGAACTCTT-1': 1, 'GCCGAGTGCGTTGA-1': 1, 'GCCGGAACGAACTC-1': 1, 'GCCGGAACGTTCTT-1': 1, 'GCCGGAACTGCACA-1': 1, 'GCCGGAACTTACTC-1': 1, 'GCCGTACTACCTGA-1': 1, 'GCCGTACTGGCAAG-1': 1, 'GCCTACACAGTTCG-1': 1, 'GCCTACACCACTGA-1': 1, 'GCCTACACCTTGAG-1': 1, 'GCCTAGCTACGGAG-1': 1, 'GCCTAGCTCTATTC-1': 1, 'GCCTAGCTTCTCAT-1': 1, 'GCCTAGCTTCTCTA-1': 1, 'GCCTCAACCATGGT-1': 1, 'GCCTCAACTCTTTG-1': 1, 'GCCTCATGTCTTAC-1': 1, 'GCCTGACTCTCAAG-1': 1, 'GCGAAGGAACTCTT-1': 1, 'GCGAAGGATGCCAA-1': 1, 'GCGAGAGAGGGACA-1': 1, 'GCGAGCACTGTCGA-1': 1, 'GCGAGCACTTGACG-1': 1, 'GCGAGCACTTGCTT-1': 1, 'GCGATATGGTACGT-1': 1, 'GCGATATGGTGTTG-1': 1, 'GCGCACGAAGTCGT-1': 1, 'GCGCACGACTTTAC-1': 1, 'GCGCATCTAGGTCT-1': 1, 'GCGCATCTGGTTAC-1': 1, 'GCGCATCTTCGATG-1': 1, 'GCGCATCTTGCTCC-1': 1, 'GCGCATCTTTCTAC-1': 1, 'GCGCGAACGTTCTT-1': 1, 'GCGCGATGAACGGG-1': 1, 'GCGCGATGGTGCAT-1': 1, 'GCGGAGCTCCTGAA-1': 1, 'GCGGCAACCCGATA-1': 1, 'GCGGCAACGGAGGT-1': 1, 'GCGGCAACTGTCGA-1': 1, 'GCGTAAACACGGTT-1': 1, 'GCGTAATGCACCAA-1': 1, 'GCGTATGAACACCA-1': 1, 'GCGTATGATGAGAA-1': 1, 'GCTACAGAAAGGTA-1': 1, 'GCTACAGAATCTTC-1': 1, 'GCTACCTGAGAAGT-1': 1, 'GCTACCTGATCACG-1': 1, 'GCTACGCTAGAATG-1': 1, 'GCTACGCTAGCTAC-1': 1, 'GCTACGCTCCCTAC-1': 1, 'GCTAGAACAGAGGC-1': 1, 'GCTAGAACGGATCT-1': 1, 'GCTAGAACTCCCGT-1': 1, 'GCTAGATGAGCTCA-1': 1, 'GCTAGATGGCGATT-1': 1, 'GCTATACTAAGGCG-1': 1, 'GCTATACTAGCGTT-1': 1, 'GCTATACTCTCTTA-1': 1, 'GCTATACTGGACGA-1': 1, 'GCTCAAGAACCATG-1': 1, 'GCTCAAGAAGTCAC-1': 1, 'GCTCAGCTGTCTAG-1': 1, 'GCTCCATGAGAAGT-1': 1, 'GCTCCATGCCGAAT-1': 1, 'GCTCGACTCTAGTG-1': 1, 'GCTGATGAGGTATC-1': 1, 'GCTTAACTACAGTC-1': 1, 'GCTTAACTACTGGT-1': 1, 'GCTTAACTGCTGAT-1': 1, 'GCTTAACTTAGACC-1': 1, 'GCTTAACTTCAGTG-1': 1, 'GGAACACTCACTTT-1': 1, 'GGAACACTTCAGAC-1': 1, 'GGAACTACTACTTC-1': 1, 'GGAACTTGAAGGTA-1': 1, 'GGAACTTGAGAATG-1': 1, 'GGAACTTGCTCCAC-1': 1, 'GGAACTTGGGTAGG-1': 1, 'GGAAGGACATCGGT-1': 1, 'GGAAGGACCACTAG-1': 1, 'GGAAGGACGAGGGT-1': 1, 'GGAAGGACGCGAAG-1': 1, 'GGAAGGTGGCGAGA-1': 1, 'GGAATCTGAAGGGC-1': 1, 'GGAATCTGAGGAGC-1': 1, 'GGAATCTGCTTAGG-1': 1, 'GGAATCTGCTTGTT-1': 1, 'GGAATCTGGGAGGT-1': 1, 'GGAATGCTTTCTAC-1': 1, 'GGACAGGAAAGGGC-1': 1, 'GGACAGGAGTGCTA-1': 1, 'GGACAGGATCTCGC-1': 1, 'GGACCCGAAGCTAC-1': 1, 'GGACCGTGCTTACT-1': 1, 'GGACCGTGGGAACG-1': 1, 'GGACCGTGTAACGC-1': 1, 'GGACCTCTGTAAGA-1': 1, 'GGACCTCTTTTCTG-1': 1, 'GGACGAGAGTGTCA-1': 1, 'GGACGCTGACGCAT-1': 1, 'GGACGCTGCTAGCA-1': 1, 'GGACGCTGTCCTCG-1': 1, 'GGAGAGACGTGAGG-1': 1, 'GGAGCAGATTCAGG-1': 1, 'GGAGCCACCTTCTA-1': 1, 'GGAGCGCTACGCAT-1': 1, 'GGAGCGCTCCGAAT-1': 1, 'GGAGGATGCCACCT-1': 1, 'GGAGGATGGTTGAC-1': 1, 'GGAGGATGTCAGTG-1': 1, 'GGAGGCCTCGTTGA-1': 1, 'GGAGGCCTTTCTTG-1': 1, 'GGAGGTGATACGCA-1': 1, 'GGAGGTGATCGCTC-1': 1, 'GGATACTGCAGCTA-1': 1, 'GGATACTGTCTAGG-1': 1, 'GGATAGCTCGTCTC-1': 1, 'GGATAGCTCTGAAC-1': 1, 'GGATGTACCAAAGA-1': 1, 'GGATGTACGCGAAG-1': 1, 'GGATGTACGTCTTT-1': 1, 'GGATGTACGTGTCA-1': 1, 'GGATTTCTAGGTTC-1': 1, 'GGATTTCTTTGTCT-1': 1, 'GGCAAGGAAAAAGC-1': 1, 'GGCAAGGAAGAAGT-1': 1, 'GGCAAGGACTTGGA-1': 1, 'GGCAAGGAGGACTT-1': 1, 'GGCAATACGCTAAC-1': 1, 'GGCAATACGGCATT-1': 1, 'GGCAATACGTTTCT-1': 1, 'GGCACGTGGCTTAG-1': 1, 'GGCACTCTTTTGTC-1': 1, 'GGCATATGCTTATC-1': 1, 'GGCATATGGGGAGT-1': 1, 'GGCATATGTGTGAC-1': 1, 'GGCCACGACAGAGG-1': 1, 'GGCCAGACTGGTTG-1': 1, 'GGCCCAGAAAGTAG-1': 1, 'GGCCGAACAACGAA-1': 1, 'GGCCGAACGCAGAG-1': 1, 'GGCCGAACGTAGGG-1': 1, 'GGCCGAACTCTAGG-1': 1, 'GGCCGATGCAGGAG-1': 1, 'GGCCGATGCCGAAT-1': 1, 'GGCCGATGTACTCT-1': 1, 'GGCGACACTGCCCT-1': 1, 'GGCGACTGCGTAAC-1': 1, 'GGCGCATGCCTAAG-1': 1, 'GGCGCATGCTCCAC-1': 1, 'GGCGCATGTGGAAA-1': 1, 'GGCGGACTAGAGGC-1': 1, 'GGCGGACTAGGAGC-1': 1, 'GGCGGACTCTGACA-1': 1, 'GGCGGACTCTTGGA-1': 1, 'GGCGGACTTACTGG-1': 1, 'GGCGGACTTGAACC-1': 1, 'GGCTAAACACCTGA-1': 1, 'GGCTAAACTCTTAC-1': 1, 'GGCTAATGAGCACT-1': 1, 'GGCTAATGGTCTAG-1': 1, 'GGCTCACTACTCAG-1': 1, 'GGGAACGAAGCTCA-1': 1, 'GGGAACGACACAAC-1': 1, 'GGGAACGAGTGTCA-1': 1, 'GGGAAGTGTTGAGC-1': 1, 'GGGACCACACGTTG-1': 1, 'GGGACCACAGAACA-1': 1, 'GGGACCACGAATAG-1': 1, 'GGGACCACGTCATG-1': 1, 'GGGACCACTCAAGC-1': 1, 'GGGACCACTCGTGA-1': 1, 'GGGACCACTGCATG-1': 1, 'GGGACCTGACCCTC-1': 1, 'GGGACCTGCTTGCC-1': 1, 'GGGACCTGTGGAGG-1': 1, 'GGGATGGACGACAT-1': 1, 'GGGATGGATACTTC-1': 1, 'GGGATGGATGGTTG-1': 1, 'GGGATTACGTCTAG-1': 1, 'GGGCAAGATGCATG-1': 1, 'GGGCACACGGTGAG-1': 1, 'GGGCACACGTTGCA-1': 1, 'GGGCAGCTTGGGAG-1': 1, 'GGGCAGCTTTTCTG-1': 1, 'GGGCCAACCTTGGA-1': 1, 'GGGCCAACGCGTTA-1': 1, 'GGGCCAACTACGCA-1': 1, 'GGGCCAACTCCAAG-1': 1, 'GGGCCATGATGGTC-1': 1, 'GGGCCATGTTGACG-1': 1, 'GGGTAACTCAGCTA-1': 1, 'GGGTAACTCTAGTG-1': 1, 'GGGTAACTCTGGAT-1': 1, 'GGGTTAACGTGCAT-1': 1, 'GGTAAAGAGCTAAC-1': 1, 'GGTACAACTGCAAC-1': 1, 'GGTACATGAAAGCA-1': 1, 'GGTACATGAGCTCA-1': 1, 'GGTACATGCGGTAT-1': 1, 'GGTACATGGTTACG-1': 1, 'GGTACATGTGGGAG-1': 1, 'GGTACTGAACTCTT-1': 1, 'GGTAGTACACCACA-1': 1, 'GGTAGTACACTAGC-1': 1, 'GGTAGTACCCTGTC-1': 1, 'GGTAGTACGCCATA-1': 1, 'GGTAGTACTGTCTT-1': 1, 'GGTATCGAGACAAA-1': 1, 'GGTATCGATGAACC-1': 1, 'GGTCAAACCAAAGA-1': 1, 'GGTCTAGAGAAACA-1': 1, 'GGTCTAGATAGCGT-1': 1, 'GGTGATACCGACTA-1': 1, 'GGTGATACGACTAC-1': 1, 'GGTGATACTGTTTC-1': 1, 'GGTGGAGAAACGGG-1': 1, 'GGTGGAGAAGTAGA-1': 1, 'GGTGGAGACAGATC-1': 1, 'GGTGGAGATCGATG-1': 1, 'GGTGGAGATCTCTA-1': 1, 'GGTGGAGATTACTC-1': 1, 'GGTTTACTACGCAT-1': 1, 'GTAACGTGACCTCC-1': 1, 'GTAACGTGATCGGT-1': 1, 'GTAACGTGCAGCTA-1': 1, 'GTAACGTGGTTGAC-1': 1, 'GTAAGCACAACGGG-1': 1, 'GTAAGCACTCATTC-1': 1, 'GTAAGCTGGTACCA-1': 1, 'GTAATAACCTTCTA-1': 1, 'GTAATAACGTTGTG-1': 1, 'GTACCCTGACAGTC-1': 1, 'GTACCCTGGAGCTT-1': 1, 'GTACCCTGTCCTTA-1': 1, 'GTACCCTGTGAACC-1': 1, 'GTACGTGAACGTTG-1': 1, 'GTACTTTGTCGACA-1': 1, 'GTAGACTGAGATGA-1': 1, 'GTAGACTGTATTCC-1': 1, 'GTAGCAACAGTCGT-1': 1, 'GTAGCAACCATTTC-1': 1, 'GTAGCAACGGTAGG-1': 1, 'GTAGCATGCACTCC-1': 1, 'GTAGCATGTAAGCC-1': 1, 'GTAGCCCTGACGTT-1': 1, 'GTAGCTGAAGCTAC-1': 1, 'GTAGCTGAATTCGG-1': 1, 'GTAGGTACACGGGA-1': 1, 'GTAGTGACCTCATT-1': 1, 'GTAGTGTGAGCGGA-1': 1, 'GTAGTGTGAGGCGA-1': 1, 'GTAGTGTGTGGTTG-1': 1, 'GTATCACTGGTAGG-1': 1, 'GTATCTACAGAAGT-1': 1, 'GTATCTACGACGAG-1': 1, 'GTATCTACGTTACG-1': 1, 'GTATTAGAAACAGA-1': 1, 'GTATTAGAGGTCTA-1': 1, 'GTATTCACACAGCT-1': 1, 'GTATTCACGGGTGA-1': 1, 'GTCAACGACACTGA-1': 1, 'GTCAACGAGTGTAC-1': 1, 'GTCAATCTACACCA-1': 1, 'GTCAATCTGTAGCT-1': 1, 'GTCAATCTTGTGGT-1': 1, 'GTCACCTGCCTCCA-1': 1, 'GTCACCTGTCCCGT-1': 1, 'GTCATACTAATCGC-1': 1, 'GTCATACTGCGATT-1': 1, 'GTCATACTTCGCCT-1': 1, 'GTCATACTTTACCT-1': 1, 'GTCATACTTTGACG-1': 1, 'GTCCAAGAAAAACG-1': 1, 'GTCCACTGACCTCC-1': 1, 'GTCCACTGGGTACT-1': 1, 'GTCCAGCTACGGGA-1': 1, 'GTCCCATGTGGTGT-1': 1, 'GTCGAATGAAGGCG-1': 1, 'GTCGACCTGAATGA-1': 1, 'GTCGACCTGTTCAG-1': 1, 'GTCGCACTTGAGAA-1': 1, 'GTCTAACTGGTCTA-1': 1, 'GTCTAGGAGCTTCC-1': 1, 'GTGAACACACTCTT-1': 1, 'GTGAACACTCAGGT-1': 1, 'GTGACCCTTAAGCC-1': 1, 'GTGATGACAAGTGA-1': 1, 'GTGATGACCTGAGT-1': 1, 'GTGATGACGGTTTG-1': 1, 'GTGATTCTCATTTC-1': 1, 'GTGATTCTCTCTCG-1': 1, 'GTGATTCTGGTTCA-1': 1, 'GTGATTCTGTCGAT-1': 1, 'GTGATTCTTAGCGT-1': 1, 'GTGCCACTCAGGAG-1': 1, 'GTGGATTGCACTAG-1': 1, 'GTGGATTGCGGAGA-1': 1, 'GTGGATTGTAACGC-1': 1, 'GTGTACGATCAGTG-1': 1, 'GTGTAGTGGGTACT-1': 1, 'GTGTATCTAGCCTA-1': 1, 'GTGTATCTAGTAGA-1': 1, 'GTGTATCTGTTACG-1': 1, 'GTGTCAGAAGCGTT-1': 1, 'GTTAAAACCGAGAG-1': 1, 'GTTAAATGCTCGAA-1': 1, 'GTTAAATGTCGACA-1': 1, 'GTTAACCTAGCTAC-1': 1, 'GTTAACCTTGCTTT-1': 1, 'GTTAGGTGCACTCC-1': 1, 'GTTAGGTGCCAGTA-1': 1, 'GTTAGGTGCCCAAA-1': 1, 'GTTAGGTGGAACTC-1': 1, 'GTTAGTCTAAGAAC-1': 1, 'GTTATAGAGGACAG-1': 1, 'GTTATGCTTTCATC-1': 1, 'GTTCAACTGGGACA-1': 1, 'GTTCAACTTATGCG-1': 1, 'GTTGACGAGCCCTT-1': 1, 'GTTGACGATATCGG-1': 1, 'GTTGAGTGGTCTTT-1': 1, 'GTTGAGTGTGCTTT-1': 1, 'GTTGATCTGGGACA-1': 1, 'GTTGATCTTTTCAC-1': 1, 'GTTGGATGTTTACC-1': 1, 'GTTGTACTATTCCT-1': 1, 'GTTGTACTTTTGGG-1': 1, 'GTTTAAGACCATGA-1': 1, 'GTTTAAGACTGTCC-1': 1, 'TAAACAACCAACCA-1': 1, 'TAAACAACGAATCC-1': 1, 'TAAAGACTCAGGAG-1': 1, 'TAAATCGATGAGGG-1': 1, 'TAACAATGTGCCCT-1': 1, 'TAACACCTTCGCTC-1': 1, 'TAACACCTTCGTAG-1': 1, 'TAACACCTTGTTTC-1': 1, 'TAACATGACACTAG-1': 1, 'TAACCGGACTTACT-1': 1, 'TAACGTCTCAACCA-1': 1, 'TAACGTCTCATTGG-1': 1, 'TAACTAGAATTTCC-1': 1, 'TAACTAGACTTAGG-1': 1, 'TAACTAGATCTGGA-1': 1, 'TAACTCACGAGGAC-1': 1, 'TAACTCACGTACAC-1': 1, 'TAACTCACGTATCG-1': 1, 'TAACTCACTCTACT-1': 1, 'TAAGAACTGTGTCA-1': 1, 'TAAGAGGACTAAGC-1': 1, 'TAAGAGGACTTGTT-1': 1, 'TAAGATACGGTTCA-1': 1, 'TAAGATTGCGTAGT-1': 1, 'TAAGATTGTTGCTT-1': 1, 'TAAGCGTGAGGTTC-1': 1, 'TAAGCGTGGACAAA-1': 1, 'TAAGCGTGGGAAAT-1': 1, 'TAAGCGTGTGCTCC-1': 1, 'TAAGGCTGCCATGA-1': 1, 'TAAGGCTGCTGCTC-1': 1, 'TAAGGCTGTCTCGC-1': 1, 'TAAGGGCTGCTGTA-1': 1, 'TAAGGGCTTTACTC-1': 1, 'TAAGTAACCGAGAG-1': 1, 'TAAGTAACCTCCAC-1': 1, 'TAAGTAACCTGTAG-1': 1, 'TAAGTAACTTGTCT-1': 1, 'TAATGATGAGCGGA-1': 1, 'TAATGCCTCATGAC-1': 1, 'TAATGCCTCGTCTC-1': 1, 'TAATGTGAAGATGA-1': 1, 'TAATGTGACTGCAA-1': 1, 'TAATGTGATTACTC-1': 1, 'TACAAATGGGTACT-1': 1, 'TACAATGAAAACAG-1': 1, 'TACAATGACTTAGG-1': 1, 'TACAATGATGCTAG-1': 1, 'TACACACTCACACA-1': 1, 'TACACACTCTTACT-1': 1, 'TACATAGAACGCAT-1': 1, 'TACATCACACGGGA-1': 1, 'TACATCACCTGTTT-1': 1, 'TACATCACGCTAAC-1': 1, 'TACATCACTGAACC-1': 1, 'TACCATTGAGGTTC-1': 1, 'TACCATTGCGGGAA-1': 1, 'TACCATTGGGGATG-1': 1, 'TACCATTGTGAGGG-1': 1, 'TACCGGCTGTTGGT-1': 1, 'TACGAGTGATCTCT-1': 1, 'TACGAGTGATGCTG-1': 1, 'TACGAGTGCGGAGA-1': 1, 'TACGAGTGGTTGGT-1': 1, 'TACGATCTAGTGTC-1': 1, 'TACGATCTCACTGA-1': 1, 'TACGATCTTACGAC-1': 1, 'TACGCAGAGAATCC-1': 1, 'TACGCCACATTCCT-1': 1, 'TACGCCACTCCCAC-1': 1, 'TACGCCACTCCGAA-1': 1, 'TACGGAACGCGTTA-1': 1, 'TACGGCCTGGGACA-1': 1, 'TACGTACTACGGAG-1': 1, 'TACGTACTCAGTTG-1': 1, 'TACGTACTCCCGTT-1': 1, 'TACGTTACAGAAGT-1': 1, 'TACGTTACCAAGCT-1': 1, 'TACTAAGAAAGGTA-1': 1, 'TACTAAGAATCACG-1': 1, 'TACTAAGATGATGC-1': 1, 'TACTAAGATTGCGA-1': 1, 'TACTACACGAGAGC-1': 1, 'TACTACACTTACCT-1': 1, 'TACTACTGAACCTG-1': 1, 'TACTACTGATGTCG-1': 1, 'TACTACTGATTCTC-1': 1, 'TACTACTGTATGGC-1': 1, 'TACTCAACGGTCTA-1': 1, 'TACTCAACTGCTAG-1': 1, 'TACTCCCTCAGTTG-1': 1, 'TACTCTGAATCGAC-1': 1, 'TACTCTGACGAGTT-1': 1, 'TACTCTGATTGACG-1': 1, 'TACTGGGATCGATG-1': 1, 'TACTGTTGAAAGCA-1': 1, 'TACTGTTGAGGCGA-1': 1, 'TACTGTTGCTGAAC-1': 1, 'TACTTGACTCCTCG-1': 1, 'TACTTGACTGGTGT-1': 1, 'TACTTTCTTTTGGG-1': 1, 'TAGAAACTAATCGC-1': 1, 'TAGAAACTGCTTCC-1': 1, 'TAGAAACTGGGATG-1': 1, 'TAGAATTGCGACAT-1': 1, 'TAGAATTGTATCGG-1': 1, 'TAGACGTGCTTGAG-1': 1, 'TAGACGTGTCGCTC-1': 1, 'TAGAGCACCTTACT-1': 1, 'TAGATTGACTTGTT-1': 1, 'TAGATTGAGGCATT-1': 1, 'TAGCATCTCAGCTA-1': 1, 'TAGCATCTCCCTCA-1': 1, 'TAGCATCTGCTGTA-1': 1, 'TAGCATCTGGGACA-1': 1, 'TAGCATCTTGTCGA-1': 1, 'TAGCCCACAAAAGC-1': 1, 'TAGCCCACAGCCAT-1': 1, 'TAGCCCACAGCTAC-1': 1, 'TAGCCCACCCACAA-1': 1, 'TAGCCCTGCGGAGA-1': 1, 'TAGCCGCTTACGAC-1': 1, 'TAGCCGCTTACTTC-1': 1, 'TAGCCGCTTTCCAT-1': 1, 'TAGCTACTGAATAG-1': 1, 'TAGCTACTGTAGCT-1': 1, 'TAGCTACTTTTGCT-1': 1, 'TAGGACTGTGCTGA-1': 1, 'TAGGAGCTAAGGCG-1': 1, 'TAGGAGCTGAGGGT-1': 1, 'TAGGAGCTTGCATG-1': 1, 'TAGGCAACCGTCTC-1': 1, 'TAGGCATGCTCTCG-1': 1, 'TAGGCATGGCGAGA-1': 1, 'TAGGCTGATGCCTC-1': 1, 'TAGGGACTGAACTC-1': 1, 'TAGGTCGACACTGA-1': 1, 'TAGGTCGAGGATCT-1': 1, 'TAGGTGACACACTG-1': 1, 'TAGGTGACACGTTG-1': 1, 'TAGGTGTGTTCTGT-1': 1, 'TAGGTTCTGAAGGC-1': 1, 'TAGGTTCTTCTTAC-1': 1, 'TAGGTTCTTGCTGA-1': 1, 'TAGTAAACCTCGCT-1': 1, 'TAGTAAACGTCACA-1': 1, 'TAGTAATGAGATCC-1': 1, 'TAGTACCTAAGAAC-1': 1, 'TAGTATGATCTTAC-1': 1, 'TAGTATGATTCTCA-1': 1, 'TAGTCTTGGCTGTA-1': 1, 'TAGTCTTGGGACTT-1': 1, 'TAGTCTTGTGGAAA-1': 1, 'TAGTGGTGAAGTGA-1': 1, 'TAGTTAGAACCACA-1': 1, 'TAGTTAGATGAACC-1': 1, 'TATAAGACAACAGA-1': 1, 'TATAAGACAGCTCA-1': 1, 'TATAAGTGACACCA-1': 1, 'TATAAGTGTATCGG-1': 1, 'TATAAGTGTGGTGT-1': 1, 'TATACAGAACCCTC-1': 1, 'TATACAGAAGAACA-1': 1, 'TATACAGATCCAGA-1': 1, 'TATACCACCTGATG-1': 1, 'TATACGCTACCAAC-1': 1, 'TATAGATGGACGGA-1': 1, 'TATAGATGTTCCGC-1': 1, 'TATCCAACCAGCTA-1': 1, 'TATCCAACTCTCTA-1': 1, 'TATCGACTACTAGC-1': 1, 'TATCGACTCGATAC-1': 1, 'TATCGTACAGATGA-1': 1, 'TATCGTACATTCCT-1': 1, 'TATCTCGAGAGATA-1': 1, 'TATCTGACAGGTTC-1': 1, 'TATCTGACTGTTTC-1': 1, 'TATCTTCTAAACAG-1': 1, 'TATGAATGGAGGAC-1': 1, 'TATGAATGTTTGCT-1': 1, 'TATGCGGATAACCG-1': 1, 'TATGGGTGCATCAG-1': 1, 'TATGGGTGCTAGCA-1': 1, 'TATGGTCTCTACCC-1': 1, 'TATGTCACGGAACG-1': 1, 'TATGTCACTAACCG-1': 1, 'TATGTCACTTCTCA-1': 1, 'TATGTGCTCCGATA-1': 1, 'TATGTGCTGGATTC-1': 1, 'TATTGCTGAAGAAC-1': 1, 'TATTGCTGCCGTTC-1': 1, 'TATTGCTGTCTGGA-1': 1, 'TATTGCTGTGCACA-1': 1, 'TATTTCCTATTGGC-1': 1, 'TATTTCCTGGAGGT-1': 1, 'TATTTCCTGGTGTT-1': 1, 'TCAACACTGTTTGG-1': 1, 'TCAAGGACAGCGTT-1': 1, 'TCAAGGACATTCTC-1': 1, 'TCAAGGACGGTGTT-1': 1, 'TCAATCACACTCTT-1': 1, 'TCAATCACAGTCGT-1': 1, 'TCACAACTATGTGC-1': 1, 'TCACAACTTTGCTT-1': 1, 'TCACATACACTTTC-1': 1, 'TCACATACAGGGTG-1': 1, 'TCACCCGAGACGGA-1': 1, 'TCACCGTGCTCGCT-1': 1, 'TCACCTCTACGACT-1': 1, 'TCACCTCTTCCAAG-1': 1, 'TCACGAGAGGAGGT-1': 1, 'TCACTATGGGGCAA-1': 1, 'TCACTATGGTTGTG-1': 1, 'TCAGACGACGCTAA-1': 1, 'TCAGACGACGTTAG-1': 1, 'TCAGAGACTCCAGA-1': 1, 'TCAGCAGACTCCAC-1': 1, 'TCAGCGCTCTAGTG-1': 1, 'TCAGCGCTGGATCT-1': 1, 'TCAGCGCTGGTATC-1': 1, 'TCAGGATGAAGTAG-1': 1, 'TCAGGATGCCTTTA-1': 1, 'TCAGTGGAAGATCC-1': 1, 'TCAGTTACCTACGA-1': 1, 'TCAGTTACTAGAAG-1': 1, 'TCATCAACCCGATA-1': 1, 'TCATCAACTGTTCT-1': 1, 'TCATCATGCAGTTG-1': 1, 'TCATCCCTTACTGG-1': 1, 'TCATTCGATACAGC-1': 1, 'TCCACGTGGAAACA-1': 1, 'TCCACTCTACACTG-1': 1, 'TCCACTCTGAGCTT-1': 1, 'TCCACTCTTACTTC-1': 1, 'TCCATAACAAAGTG-1': 1, 'TCCATAACCGTAGT-1': 1, 'TCCATAACGATGAA-1': 1, 'TCCATAACTACGCA-1': 1, 'TCCATCCTCCCTAC-1': 1, 'TCCCACGATCATTC-1': 1, 'TCCCATCTCAAAGA-1': 1, 'TCCCGAACACAGTC-1': 1, 'TCCCGAACTTCGCC-1': 1, 'TCCCGATGAGATCC-1': 1, 'TCCCGATGCCTGAA-1': 1, 'TCCCTACTCAACTG-1': 1, 'TCCGAAGACAATCG-1': 1, 'TCCGAAGACGTTAG-1': 1, 'TCCGGACTGAGGTG-1': 1, 'TCCGGACTGTACGT-1': 1, 'TCCTAAACATCGAC-1': 1, 'TCCTAAACCGAGAG-1': 1, 'TCCTAAACCGCATA-1': 1, 'TCCTAATGGTTTGG-1': 1, 'TCCTACCTGTCGTA-1': 1, 'TCCTATGAAAAGCA-1': 1, 'TCGAATCTCTGGTA-1': 1, 'TCGACCTGCCGATA-1': 1, 'TCGACGCTTCTATC-1': 1, 'TCGACGCTTTGACG-1': 1, 'TCGAGAACGACAGG-1': 1, 'TCGAGAACGTTAGC-1': 1, 'TCGAGCCTATCAGC-1': 1, 'TCGAGCCTGCGAGA-1': 1, 'TCGAGCCTTGTGAC-1': 1, 'TCGATACTATTCCT-1': 1, 'TCGATACTTGCACA-1': 1, 'TCGATTTGATGCCA-1': 1, 'TCGATTTGCACTCC-1': 1, 'TCGATTTGCAGCTA-1': 1, 'TCGATTTGCCTACC-1': 1, 'TCGATTTGTCGTGA-1': 1, 'TCGCAGCTAGATCC-1': 1, 'TCGCCATGAGACTC-1': 1, 'TCGCCATGTGGTCA-1': 1, 'TCGGACCTAACAGA-1': 1, 'TCGGACCTATAAGG-1': 1, 'TCGGACCTGTACAC-1': 1, 'TCGGTAGAGTAGGG-1': 1, 'TCGGTAGATCCCAC-1': 1, 'TCGTAGGATCGACA-1': 1, 'TCGTTATGGACAAA-1': 1, 'TCTAACACCAGTTG-1': 1, 'TCTAACACGAGCAG-1': 1, 'TCTAACTGAACCAC-1': 1, 'TCTAAGCTAATGCC-1': 1, 'TCTAAGCTTAGTCG-1': 1, 'TCTAAGCTTCTAGG-1': 1, 'TCTAAGCTTGTTCT-1': 1, 'TCTAAGCTTTCGCC-1': 1, 'TCTACAACGACTAC-1': 1, 'TCTAGACTTAGAAG-1': 1, 'TCTAGTTGCACCAA-1': 1, 'TCTATGTGAAGAGT-1': 1, 'TCTATGTGAGTCTG-1': 1, 'TCTCAAACCTAAGC-1': 1, 'TCTCTAGAATTTCC-1': 1, 'TCTGATACACGTGT-1': 1, 'TCTGATACTCGCCT-1': 1, 'TCTTACGAACCTGA-1': 1, 'TCTTCAGAGCTACA-1': 1, 'TCTTGATGCGGAGA-1': 1, 'TGAAATTGGTGAGG-1': 1, 'TGAACCGAAAACGA-1': 1, 'TGAACCGACTACTT-1': 1, 'TGAACCGATTCGGA-1': 1, 'TGAAGCACTCACGA-1': 1, 'TGAAGCTGAACGAA-1': 1, 'TGAAGCTGCATGGT-1': 1, 'TGAAGCTGCGTAAC-1': 1, 'TGAATAACCACTTT-1': 1, 'TGAATAACTCCCAC-1': 1, 'TGACACGACCTTAT-1': 1, 'TGACCAGACAACCA-1': 1, 'TGACCAGAGGATTC-1': 1, 'TGACCGCTAAAAGC-1': 1, 'TGACCGCTCTGCAA-1': 1, 'TGACGATGCAAAGA-1': 1, 'TGACGCCTGTACCA-1': 1, 'TGACGCCTTTACTC-1': 1, 'TGACTGGAAGAGAT-1': 1, 'TGACTGGACCGTAA-1': 1, 'TGACTGGACGCAAT-1': 1, 'TGACTGGAGGACAG-1': 1, 'TGACTGGATTCTCA-1': 1, 'TGACTTACACACCA-1': 1, 'TGACTTACAGTCTG-1': 1, 'TGACTTTGCGCATA-1': 1, 'TGACTTTGTTTGTC-1': 1, 'TGAGACACAAGGTA-1': 1, 'TGAGACACTCAAGC-1': 1, 'TGAGCTGAATGCTG-1': 1, 'TGAGCTGACTGGAT-1': 1, 'TGAGCTGATGCTAG-1': 1, 'TGAGGACTCTCATT-1': 1, 'TGAGGACTTCATTC-1': 1, 'TGAGGTACGAACCT-1': 1, 'TGAGTCGAGTTACG-1': 1, 'TGAGTGACTGAGCT-1': 1, 'TGATAAACGAATCC-1': 1, 'TGATAAACTCCGTC-1': 1, 'TGATAAACTTTCAC-1': 1, 'TGATACCTCACTAG-1': 1, 'TGATACCTGTTGGT-1': 1, 'TGATACCTTATGCG-1': 1, 'TGATACCTTGAAGA-1': 1, 'TGATATGAACCTTT-1': 1, 'TGATCACTAGCATC-1': 1, 'TGATCACTCTCGCT-1': 1, 'TGATCACTTCTACT-1': 1, 'TGATCGGACTGACA-1': 1, 'TGATCGGAGGAGCA-1': 1, 'TGATCGGATATGCG-1': 1, 'TGATTAGACATTGG-1': 1, 'TGATTAGATGACTG-1': 1, 'TGATTAGATGCTAG-1': 1, 'TGATTCACTATGCG-1': 1, 'TGATTCACTGTCAG-1': 1, 'TGATTCTGCCGAAT-1': 1, 'TGATTCTGCTCTTA-1': 1, 'TGCAAGTGAGAACA-1': 1, 'TGCAAGTGGGTAGG-1': 1, 'TGCAATCTTCAGGT-1': 1, 'TGCACAGACGACAT-1': 1, 'TGCCAAGAGCAGTT-1': 1, 'TGCCAAGATCTCTA-1': 1, 'TGCCACTGAACGTC-1': 1, 'TGCCACTGCGATAC-1': 1, 'TGCCAGCTTGGCAT-1': 1, 'TGCCCAACAGCAAA-1': 1, 'TGCCCAACCGCATA-1': 1, 'TGCCGACTCTCCCA-1': 1, 'TGCGAAACAGTCAC-1': 1, 'TGCGAAACGTTGCA-1': 1, 'TGCGATGAACGGTT-1': 1, 'TGCGATGACCTCGT-1': 1, 'TGCGATGACTAGTG-1': 1, 'TGCGATGACTGCTC-1': 1, 'TGCGATGACTTGCC-1': 1, 'TGCGATGAGTGCTA-1': 1, 'TGCGCACTCTTGAG-1': 1, 'TGCGTAGAATAAGG-1': 1, 'TGCGTAGACGGGAA-1': 1, 'TGCGTAGATGGTCA-1': 1, 'TGCTAGGAAACCGT-1': 1, 'TGCTAGGATAGTCG-1': 1, 'TGCTATACGGTTCA-1': 1, 'TGCTATACTGCTGA-1': 1, 'TGCTGAGAGAGCAG-1': 1, 'TGCTGAGATTATCC-1': 1, 'TGGAAAGACTCTCG-1': 1, 'TGGAAAGAGCGATT-1': 1, 'TGGAAAGAGGTCAT-1': 1, 'TGGAAAGATATGGC-1': 1, 'TGGAACACAAACAG-1': 1, 'TGGAACACGCTAAC-1': 1, 'TGGAAGCTCAGATC-1': 1, 'TGGACCCTACACTG-1': 1, 'TGGACCCTCATGGT-1': 1, 'TGGACCCTGGTACT-1': 1, 'TGGACTGAGTATGC-1': 1, 'TGGAGACTATCAGC-1': 1, 'TGGAGACTTCAAGC-1': 1, 'TGGAGACTTGACCA-1': 1, 'TGGAGGGACGGAGA-1': 1, 'TGGAGGGAGCTATG-1': 1, 'TGGATCGATAAAGG-1': 1, 'TGGATGTGACCTAG-1': 1, 'TGGATGTGTGAAGA-1': 1, 'TGGATTCTCATACG-1': 1, 'TGGCAATGCTTGTT-1': 1, 'TGGCACCTTCACGA-1': 1, 'TGGCACCTTCAGTG-1': 1, 'TGGGTATGAAGAGT-1': 1, 'TGGGTATGCACAAC-1': 1, 'TGGGTATGGTACGT-1': 1, 'TGGGTATGTTTGGG-1': 1, 'TGGTAGACATGCCA-1': 1, 'TGGTAGACCCTCAC-1': 1, 'TGGTAGACCTGATG-1': 1, 'TGGTAGTGCACTGA-1': 1, 'TGGTATCTAAACAG-1': 1, 'TGGTATCTCTTCCG-1': 1, 'TGGTCAGACCCAAA-1': 1, 'TGGTTACTGACGTT-1': 1, 'TGGTTACTGTTCTT-1': 1, 'TGTAACCTAGAGGC-1': 1, 'TGTAACCTTGCCTC-1': 1, 'TGTAATGACACAAC-1': 1, 'TGTAATGAGGTAAA-1': 1, 'TGTACTTGCTCTAT-1': 1, 'TGTAGGTGCGAGAG-1': 1, 'TGTAGGTGCTATGG-1': 1, 'TGTAGGTGCTCTAT-1': 1, 'TGTAGGTGTGCTGA-1': 1, 'TGTAGTCTTCCAGA-1': 1, 'TGTAGTCTTGCACA-1': 1, 'TGTATCTGTTAGGC-1': 1, 'TGTATGCTCATGGT-1': 1, 'TGTATGCTGTAGGG-1': 1, 'TGTATGCTTTCATC-1': 1, 'TGTCAGGAATACCG-1': 1, 'TGTCAGGAGATGAA-1': 1, 'TGTCTAACCCCTTG-1': 1, 'TGTGACGATTCTCA-1': 1, 'TGTGAGACTGTCAG-1': 1, 'TGTGAGACTTGAGC-1': 1, 'TGTGAGTGACCACA-1': 1, 'TGTGAGTGAGTGCT-1': 1, 'TGTGAGTGGAGATA-1': 1, 'TGTGATCTCTCTAT-1': 1, 'TGTGATCTGACACT-1': 1, 'TGTGGATGGCCAAT-1': 1, 'TGTTAAGACAAAGA-1': 1, 'TGTTAAGATAAGGA-1': 1, 'TGTTACACCGCATA-1': 1, 'TGTTACACGACTAC-1': 1, 'TGTTACTGGCTACA-1': 1, 'TGTTACTGTAGTCG-1': 1, 'TTAACCACCGTAAC-1': 1, 'TTAACCACTAAGGA-1': 1, 'TTAACCACTCAGAC-1': 1, 'TTACACACGTGTTG-1': 1, 'TTACACACTCCTAT-1': 1, 'TTACCATGAATCGC-1': 1, 'TTACCATGGTTGAC-1': 1, 'TTACCATGTGTCTT-1': 1, 'TTACCATGTTGTGG-1': 1, 'TTACGACTGAGAGC-1': 1, 'TTACGACTTGACAC-1': 1, 'TTACGTACGTTCAG-1': 1, 'TTACTCGAAGAATG-1': 1, 'TTACTCGACGCAAT-1': 1, 'TTACTCGAGGGTGA-1': 1, 'TTACTCGATCTACT-1': 1, 'TTAGAATGTGGTGT-1': 1, 'TTAGAATGTGTAGC-1': 1, 'TTAGACCTCCTACC-1': 1, 'TTAGACCTCCTTTA-1': 1, 'TTAGCTACAACCGT-1': 1, 'TTAGCTACTGTCCC-1': 1, 'TTAGCTACTTTCGT-1': 1, 'TTAGGGACGCGAAG-1': 1, 'TTAGGGTGCTGGAT-1': 1, 'TTAGGGTGTCCTGC-1': 1, 'TTAGGTCTACTTTC-1': 1, 'TTAGTCACCAGTTG-1': 1, 'TTAGTCTGAAAGCA-1': 1, 'TTAGTCTGCCAACA-1': 1, 'TTAGTCTGTGCACA-1': 1, 'TTATCCGACTAGTG-1': 1, 'TTATCCGAGAAAGT-1': 1, 'TTATGAGAGATAAG-1': 1, 'TTATGCACGTCACA-1': 1, 'TTATGGCTTATGGC-1': 1, 'TTATTCCTATGCTG-1': 1, 'TTATTCCTGGACAG-1': 1, 'TTATTCCTGGTACT-1': 1, 'TTATTCCTTCGTGA-1': 1, 'TTCAAAGATAAAGG-1': 1, 'TTCAACACAACAGA-1': 1, 'TTCAACACCCCAAA-1': 1, 'TTCAACACGGACGA-1': 1, 'TTCAAGCTAAGAAC-1': 1, 'TTCAAGCTAGATGA-1': 1, 'TTCAAGCTGTTGAC-1': 1, 'TTCAAGCTTGATGC-1': 1, 'TTCAAGCTTTCGCC-1': 1, 'TTCACAACCCGTTC-1': 1, 'TTCACAACGTCTGA-1': 1, 'TTCAGACTACCCAA-1': 1, 'TTCAGACTCTCGAA-1': 1, 'TTCAGTACCGACTA-1': 1, 'TTCAGTACTCAAGC-1': 1, 'TTCAGTACTCCTAT-1': 1, 'TTCAGTTGCCAAGT-1': 1, 'TTCAGTTGTCCTTA-1': 1, 'TTCAGTTGTCTAGG-1': 1, 'TTCAGTTGTCTCGC-1': 1, 'TTCATCGAGGTGGA-1': 1, 'TTCATGTGTGGTGT-1': 1, 'TTCATTCTATGTCG-1': 1, 'TTCATTCTTCTCTA-1': 1, 'TTCCAAACCTATGG-1': 1, 'TTCCAAACCTCCCA-1': 1, 'TTCCAAACTCCCAC-1': 1, 'TTCCAAACTTGACG-1': 1, 'TTCCATGACGAGAG-1': 1, 'TTCCATGACTGTCC-1': 1, 'TTCCCACTTGAGGG-1': 1, 'TTCCCACTTGTCTT-1': 1, 'TTCCTAGAAAGTGA-1': 1, 'TTCCTAGACTAGTG-1': 1, 'TTCGAGGACTCTAT-1': 1, 'TTCGAGGAGGGCAA-1': 1, 'TTCGAGGATAGAAG-1': 1, 'TTCGATTGAGCATC-1': 1, 'TTCGGAGAATGCCA-1': 1, 'TTCGGAGATGTGCA-1': 1, 'TTCGTATGAAAAGC-1': 1, 'TTCGTATGGATAGA-1': 1, 'TTCGTATGGTCTGA-1': 1, 'TTCGTATGTCCTTA-1': 1, 'TTCTACGAACGTAC-1': 1, 'TTCTACGAGTTGGT-1': 1, 'TTCTAGTGACACGT-1': 1, 'TTCTAGTGCATGAC-1': 1, 'TTCTAGTGGAGAGC-1': 1, 'TTCTAGTGGTCACA-1': 1, 'TTCTCAGAAGAGAT-1': 1, 'TTCTCAGAAGCATC-1': 1, 'TTCTCAGATGGAGG-1': 1, 'TTCTGATGGAGACG-1': 1, 'TTCTTACTCTGGAT-1': 1, 'TTGAACCTCCTTGC-1': 1, 'TTGAATGAACTACG-1': 1, 'TTGAATGACTTACT-1': 1, 'TTGAATGATCTCAT-1': 1, 'TTGACACTCTGTAG-1': 1, 'TTGACACTGATAAG-1': 1, 'TTGAGGACAGAACA-1': 1, 'TTGAGGACTACGCA-1': 1, 'TTGAGGTGGACGGA-1': 1, 'TTGCATTGAGCTAC-1': 1, 'TTGCATTGCTAAGC-1': 1, 'TTGCATTGTGACTG-1': 1, 'TTGCTAACACCAAC-1': 1, 'TTGCTAACACGCTA-1': 1, 'TTGCTAACCACTCC-1': 1, 'TTGCTATGGTACGT-1': 1, 'TTGCTATGGTAGGG-1': 1, 'TTGGAGACCAATCG-1': 1, 'TTGGAGACGCTATG-1': 1, 'TTGGAGACTATGGC-1': 1, 'TTGGGAACTGAACC-1': 1, 'TTGGTACTACTGGT-1': 1, 'TTGGTACTCTTAGG-1': 1, 'TTGGTACTGAATCC-1': 1, 'TTGGTACTGGATTC-1': 1, 'TTGTACACGTTGTG-1': 1, 'TTGTACACTTGCAG-1': 1, 'TTGTAGCTAGCTCA-1': 1, 'TTGTAGCTCTCTTA-1': 1, 'TTGTCATGGACGGA-1': 1, 'TTTAGAGATCCTCG-1': 1, 'TTTAGCTGATACCG-1': 1, 'TTTAGCTGGATACC-1': 1, 'TTTAGCTGTACTCT-1': 1, 'TTTAGGCTCCTTTA-1': 1, 'TTTATCCTGTTGTG-1': 1, 'TTTCACGAGGTTCA-1': 1, 'TTTCAGTGGAAGGC-1': 1, 'TTTCAGTGTCACGA-1': 1, 'TTTCAGTGTCTATC-1': 1, 'TTTCAGTGTGCAGT-1': 1, 'TTTCCAGAGGTGAG-1': 1, 'TTTCGAACACCTGA-1': 1, 'TTTCGAACTCTCAT-1': 1, 'TTTCTACTGAGGCA-1': 1, 'TTTCTACTTCCTCG-1': 1, 'TTTGCATGAGAGGC-1': 1, 'TTTGCATGCCTCAC-1': 1}}, 'louvain': {'options': {'B cells': 342, 'CD14+ Monocytes': 480, 'CD4 T cells': 1144, 'CD8 T cells': 316, 'Dendritic cells': 37, 'FCGR3A+ Monocytes': 150, 'Megakaryocytes': 15, 'NK cells': 154}}, 'n_counts': {'range': {'max': 8875.0, 'min': 556.0}}, 'n_genes': {'range': {'max': 2455, 'min': 212}}, 'percent_mito': {'range': {'max': 0.049938347190618515, 'min': 0.0}}}, 'reactivelimit': 1000000, 'schema': {'CellName': {'displayname': 'Name', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, 'louvain': {'displayname': 'Louvain Cluster', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, 'n_counts': {'displayname': 'Num Counts', 'include': True, 'type': 'float', 'variabletype': 'continuous'}, 'n_genes': {'displayname': 'Num Genes', 'include': True, 'type': 'int', 'variabletype': 'continuous'}, 'percent_mito': {'displayname': 'Mitochondrial Percentage', 'include': True, 'type': 'float', 'variabletype': 'continuous'}}}, 'status': {'error': False, 'errormessage': ''}} + data = {'data': {'cellcount': 2638, + 'genes': ['TNFRSF4', 'CPSF3L', 'ATAD3C', 'C1orf86', 'RER1', 'TNFRSF25', 'TNFRSF9', 'CTNNBIP1', + 'SRM', 'UBIAD1', 'DRAXIN', 'TNFRSF1B', 'PRDM2', 'EFHD2', 'DDI2', 'SPEN', 'SDHB', + 'CAPZB', 'CAMK2N1', 'CDA', 'C1QA', 'C1QC', 'C1QB', 'ZNF436', 'MDS2', 'PITHD1', + 'HMGCL', 'TMEM50A', 'LDLRAP1', 'RP11-70P17.1', 'STMN1', 'PDIK1L', 'ZNF593', + 'TMEM222', 'PPP1R8', 'PTAFR', 'PHACTR4', 'SNHG12', 'TAF12', 'YTHDF2', 'PUM1', + 'SPOCD1', 'TMEM234', 'HDAC1', 'MARCKSL1', 'SMIM12', 'AGO4', 'TRAPPC3', 'EVA1B', + 'RRAGC', 'PPIE', 'TRIT1', 'PPT1', 'SMAP2', 'ZFP69', 'CITED4', 'C1orf50', 'EBNA1BP2', + 'ST3GAL3', 'DMAP1', 'ERI3', 'PRDX1', 'FAAH', 'ATPAF1', 'EFCAB14', 'PDZK1IP1', 'TAL1', + 'SPATA6', 'ZCCHC11', 'SCP2', 'HSPB11', 'SSBP3', 'ACOT11', 'PARS2', 'ATG4C', 'PGM1', + 'LRRIQ3', 'ACADM', 'USP33', 'IFI44', 'RP5-887A10.1', 'PRKACB', 'SH3GLB1', 'PKN2', + 'GTF2B', 'GBP1', 'GBP4', 'LRRC8C', 'TMED5', 'RP11-421L21.3', 'HENMT1', 'TMEM167B', + 'SARS', 'LAMTOR5', 'DRAM2', 'CEPT1', 'DENND2D', 'CHI3L2', 'C1orf162', 'ST7L', + 'LRIG2', 'AP4B1-AS1', 'RP5-1073O3.7', 'CD2', 'WARS2', 'FCGR1B', 'LIX1L', 'CD160', + 'FCGR1A', 'BOLA1', 'CTSS', 'FAM63A', 'PRUNE', 'MLLT11', 'PI4KB', 'C2CD4D', 'THEM4', + 'S100A11', 'S100A12', 'S100A8', 'S100A6', 'SNAPIN', 'CRTC2', 'SLC39A1', 'UBE2Q1', + 'CKS1B', 'SLC50A1', 'RIT1', 'PMF1', 'BGLAP', 'GPATCH4', 'ISG20L2', 'HDGF', 'FCRL2', + 'CD1C', 'AIM2', 'FCER1A', 'FCRL6', 'DCAF8', 'PEX19', 'CD48', 'F11R', 'PFDN2', 'NIT1', + 'DEDD', 'FCER1G', 'FCGR2A', 'FCGR3A', 'FCGR2B', 'FCGR3B', 'FCRLA', 'TMCO1', 'CD247', + 'MPC2', 'XCL2', 'XCL1', 'BLZF1', 'F5', 'SELL', 'FMO4', 'KIAA0040', 'QSOX1', 'DHX9', + 'NCF2', 'COLGALT2', 'RGS18', 'ZBTB41', 'CSRP1', 'IPO9-AS1', 'PTPN7', 'RABIF', + 'SOX13', 'IL24', 'CR1', 'RP1-28O10.1', 'G0S2', 'TRAF3IP3', 'LPGAT1', 'DUSP10', + 'RP11-378J18.3', 'DISP1', 'TP53BP2', 'CNIH4', 'LBR', 'SRP9', 'ACBD3', 'PARP1', + 'SNAP47', 'C1orf35', 'OBSCN', 'RNF187', 'URB2', 'C1orf198', 'GNPAT', 'SPRTN', + 'RP5-827C21.4', 'COA6', 'RP4-781K5.2', 'FH', 'SDCCAG8', 'ACP1', 'TMEM18', 'TSSC1', + 'TRAPPC12-AS1', 'ID2', 'KLF11', 'ODC1', 'LPIN1', 'DDX1', 'RDH14', 'ITSN2', 'DNAJC27', + 'DNMT3A', 'ASXL2', 'KIF3C', 'MPV17', 'SNX17', 'FOSL2', 'DPY30', 'FAM98A', 'CDC42EP3', + 'LINC00211', 'PIGF', 'FBXO11', 'EML6', 'MTIF2', 'CCT4', 'PELI1', 'LGALSL', 'CEP68', + 'ACTR2', 'NFU1', 'SNRNP27', 'MPHOSPH10', 'CCT7', 'STAMBP', 'BOLA3', 'PCGF1', + 'MRPL19', 'TRABD2A', 'TGOLN2', 'MAT2A', 'VAMP8', 'VAMP5', 'GNLY', 'RMND5A', 'MAL', + 'ZAP70', 'EIF5B', 'TGFBRAP1', 'TMEM87B', 'IL1B', 'RABL2A', 'RP11-141B14.1', + 'C2orf76', 'TMEM177', 'CCDC115', 'PLEKHB2', 'ZRANB3', 'R3HDM1', 'UBXN4', 'ACVR2A', + 'MMADHC', 'PSMD14', 'GCA', 'FASTKD1', 'PPIG', 'METTL8', 'SLC25A12', 'MLTK', 'OLA1', + 'NFE2L2', 'TTC30A', 'PLEKHA3', 'TTN-AS1', 'DNAJC10', 'ZC3H15', 'SLC40A1', 'ANKAR', + 'C2orf88', 'NABP1', 'SDPR', 'SF3B1', 'PLCL1', 'TYW5', 'ORC2', 'NOP58', 'BMPR2', + 'ICOS', 'NDUFS1', 'METTL21A', 'IDH1', 'TNS1', 'CXCR1', 'RNF25', 'CYP27A1', 'GMPPA', + 'STK11IP', 'SERPINE2', 'DOCK10', 'MFF', 'TRIP12', 'ATG16L1', 'RAMP1', 'NDUFA10', + 'GPR35', 'MTERFD2', 'PASK', 'HDLBP', 'DTYMK', 'ING5', 'PDCD1', 'THUMPD3', 'SETD5', + 'ARPC4', 'RPUSD3', 'JAGN1', 'ATG7', 'TMEM40', 'SLC6A6', 'CCDC174', 'UBE2E1', 'TOP2B', + 'SLC4A7', 'CMTM7', 'GLB1', 'CRTAP', 'CSRNP1', 'EIF1B', 'ENTPD3-AS1', 'CTNNB1', + 'VIPR1', 'NKTR', 'ABHD5', 'ELP6', 'NME6', 'TREX1', 'UQCRC1', 'ARIH2OS', 'QRICH1', + 'USP19', 'GPX1', 'TCTA', 'IP6K1', 'FAM212A', 'RBM5', 'GNAI2', 'NPRL2', 'C3orf18', + 'HEMK1', 'CISH', 'GLYCTK', 'PBRM1', 'PRKCD', 'CCDC66', 'ARF4', 'DENND6A', 'DNASE1L3', + 'THOC7', 'SUCLG2', 'EOGT', 'ARL6IP5', 'PROK2', 'C3orf38', 'MINA', 'TBC1D23', 'NIT2', + 'BBX', 'CD47', 'CD96', 'TIGIT', 'B4GALT4', 'TIMMDC1', 'FSTL1', 'HGD', 'GOLGB1', + 'EAF2', 'KPNA1', 'PDIA5', 'GATA2', 'RAB7A', 'GP9', 'ISY1', 'ACPP', 'NPHP3', 'UBA5', + 'CDV3', 'RAB6B', 'ANAPC13', 'NMNAT3', 'RNF7', 'U2SURP', 'GYG1', 'SIAH2', 'GPR171', + 'MBNL1-AS1', 'LINC00886', 'MFSD1', 'SPTSSB', 'RPL22L1', 'TNFSF10', 'ZMAT3', + 'RP11-145M9.4', 'ACTL6A', 'TTC14', 'LAMP3', 'KLHL6', 'KLHL24', 'YEATS2', 'PARL', + 'SENP2', 'RPL39L', 'RP11-211G3.2', 'IL1RAP', 'FAM43A', 'PPP1R2', 'PCYT1A', 'RNF168', + 'PIGX', 'ZNF718', 'PDE6B', 'IDUA', 'SPON2', 'MAEA', 'SLBP', 'ZFYVE28', 'ADD1', + 'MFSD10', 'LYAR', 'STX18', 'JAKMIP1', 'AC093323.3', 'S100P', 'GRPEL1', 'FGFBP2', + 'MED28', 'DHX15', 'ANAPC4', 'RBPJ', 'PGM2', 'RFC1', 'SMIM14', 'UBE2K', 'COMMD8', + 'OCIAD1', 'CHIC2', 'TMEM165', 'PAICS', 'SRP72', 'HOPX', 'IGFBP7', 'YTHDC1', 'IGJ', + 'GRSF1', 'IL8', 'PF4', 'PPBP', 'CXCL3', 'CXCL2', 'EREG', 'RCHY1', 'SDAD1', 'CXCL10', + 'NUP54', 'SEPT11', 'MRPL1', 'ANTXR2', 'SEC31A', 'COPS4', 'HELQ', 'ARHGAP24', 'SNCA', + 'DNAJB14', 'MANBA', 'UBE2D3', 'PPA2', 'INTS12', 'TBCK', 'OSTC', 'PLA2G12A', 'SNHG8', + 'C4orf3', 'SPRY1', 'PGRMC2', 'C4orf33', 'RP11-102N12.3', 'ZNF330', 'USP38', 'LSM6', + 'LRBA', 'RP11-18H21.1', 'PLRG1', 'PALLD', 'RWDD4', 'RP11-701P16.5', 'KIAA1430', + 'MARCH6', 'C5orf42', 'FYB', 'FBXO4', 'NNT-AS1', 'EMB', 'MOCS2', 'GZMK', 'GZMA', + 'ZSWIM6', 'DIMT1', 'CWC27', 'TRIM23', 'PIK3R1', 'NAIP', 'GTF2H2', 'NSA2', + 'CTD-2015H6.3', 'ZCCHC9', 'ARRDC3', 'RIOK2', 'DCP2', 'AP3S1', 'COMMD10', 'CEP120', + 'ISOC1', 'HINT1', 'SLC22A4', 'C5orf56', 'KIF3A', 'C5orf15', 'CTB-113I20.2', 'PPP2CA', + 'DDX46', 'H2AFY', 'KDM3B', 'MZB1', 'UBE2D2', 'PURA', 'HBEGF', 'ANKHD1', 'SRA1', + 'NDUFA2', 'WDR55', 'DIAPH1', 'RNF14', 'NR3C1', 'YIPF5', 'PRELID2', 'LARS', 'CSNK1A1', + 'CCDC69', 'SPARC', 'FAXDC2', 'HAVCR2', 'MED7', 'UBLCP1', 'TTC1', 'CCNG1', 'RARS', + 'ATP6V0E1', 'UIMC1', 'LMAN2', 'RGS14', 'DOK3', 'SCGB3A1', 'RP11-532F6.3', 'SERPINB1', + 'LYRM4', 'F13A1', 'RIOK1', 'TMEM14C', 'TMEM14B', 'PHACTR1', 'NOL7', 'MCUR1', + 'JARID2', 'GMPR', 'ACOT13', 'RP11-367G6.3', 'HIST1H2AC', 'BTN3A2', 'BTN3A1', 'ABT1', + 'HIST1H2BJ', 'HIST1H2AH', 'HIST1H1B', 'FLOT1', 'IER3', 'XXbac-BPG299F13.17', + 'NFKBIL1', 'LTB', 'LST1', 'NCR3', 'AIF1', 'CSNK2B', 'LY6G5B', 'LY6G6F', 'C6orf25', + 'EHMT2', 'PPT2-EGFL8', 'AGPAT1', 'HLA-DRB1', 'HLA-DQA1', 'HLA-DQB1', 'HLA-DOB', + 'PSMB8', 'HLA-DMB', 'HLA-DMA', 'HLA-DPA1', 'HLA-DPB1', 'RGL2', 'TAPBP', 'DEF6', + 'FKBP5', 'STK38', 'SRSF3', 'OARD1', 'TREML1', 'RPL7L1', 'PTCRA', 'CNPY3', 'KLC4', + 'CRIP3', 'ABCC10', 'YIPF3', 'GTPBP2', 'RSPH9', 'MRPS18A', 'PLA2G7', 'CD2AP', 'MCM3', + 'PHF3', 'SH3BGRL2', 'ELOVL4', 'SNX14', 'SLC35A1', 'PNRC1', 'LYRM2', 'MAP3K7', + 'MANEA-AS1', 'NDUFAF4', 'SNX3', 'CDC40', 'CDK19', 'HDAC2', 'ZUFSP', 'CEP85L', + 'SMPDL3A', 'ECHDC1', 'ARHGAP18', 'SAMD3', 'LINC01013', 'TBPL1', 'SGK1', + 'RP3-325F22.5', 'ABRACL', 'LTV1', 'SF3B5', 'STX11', 'RP11-545I5.3', 'PPIL4', 'GINM1', + 'PCMT1', 'TMEM242', 'SNX9', 'SERAC1', 'DYNLT1', 'RP1-111C20.4', 'WTAP', 'ACAT2', + 'TCP1', 'AC147651.3', 'NUDT1', 'BRAT1', 'IQCE', 'TNRC18', 'DAGLB', 'C7orf26', + 'PHF14', 'ARL4A', 'HDAC9', 'IL6', 'NUPL2', 'AC005082.12', 'SKAP2', 'JAZF1', 'CHN2', + 'GARS', 'NT5C3A', 'HERPUD2', 'STK17A', 'BLVRA', 'URGCP', 'UBE2D4', 'LINC00957', + 'AEBP1', 'POLD2', 'DDX56', 'CCM2', 'CCT6A', 'ERV3-1', 'ZNF92', 'GUSB', + 'RP11-792A8.4', 'LAT2', 'RFC2', 'YWHAG', 'FGL2', 'TMEM60', 'ABCB1', 'RBM48', + 'SAMD9L', 'GNG11', 'BET1', 'ARPC1B', 'LRCH4', 'ALKBH4', 'DNAJC2', 'CTB-152G17.6', + 'PRKAR2B', 'HBP1', 'PNPLA8', 'CAPZA2', 'SND1', 'ATP6V1F', 'TSPAN33', 'RP11-138A9.2', + 'MKLN1', 'EXOC4', 'TMEM140', 'WDR91', 'MRPS33', 'RP5-894A10.2', 'SSBP1', 'ZYX', + 'ZNF212', 'ZNF467', 'ATP6V0E2', 'GIMAP7', 'GIMAP4', 'GIMAP2', 'GIMAP5', 'CHPF2', + 'SMARCD3', 'LINC01003', 'RP11-5C23.1', 'PAXIP1-AS1', 'PTPRN2', 'GTPBP6', 'ARSD', + 'RP11-706O15.1', 'HCCS', 'ARHGAP6', 'PRPS2', 'RAB9A', 'REPS2', 'SH3KBP1', 'SMS', + 'PRDX4', 'SAT1', 'ZFX', 'MID1IP1', 'KRBOX4', 'CDK16', 'RBM3', 'PQBP1', 'SLC35A2', + 'OTUD5', 'PRAF2', 'WDR45', 'GPKOW', 'SYP', 'CCDC22', 'MAGEH1', 'PJA1', 'PDZD11', + 'NONO', 'P2RY10', 'ITM2A', 'SYTL4', 'BTK', 'ARMCX5', 'BEX4', 'TCEAL8', 'TCEAL4', + 'MORF4L2', 'NXT2', 'WDR44', 'PGRMC1', 'RNF113A', 'NKAP', 'LAMP2', 'CUL4B', + 'C1GALT1C1', 'RP1-315G1.3', 'SLC25A14', 'HPRT1', 'FAM127A', 'FHL1', 'IDH3G', 'PDZD4', + 'TKTL1', 'MPP1', 'FBXO25', 'TDRP', 'MYOM2', 'LONRF1', 'DMTN', 'SLC39A14', 'ADAM28', + 'CLU', 'PNOC', 'HMBOX1', 'IDO1', 'RP11-589C21.6', 'AP3M2', 'VDAC3', 'SLC20A2', + 'FNTA', 'LYPLA1', 'NSMAF', 'RAB2A', 'CHD7', 'RRS1', 'C8orf44', 'STAU2', 'ZBTB10', + 'RP11-219B4.7', 'CA2', 'TMEM55A', 'KIAA1429', 'DPY19L4', 'MTERFD1', 'CPQ', 'POLR2K', + 'ATP6V1C1', 'NUDCD1', 'MED30', 'DERL1', 'WDYHV1', 'RNF139', 'KIAA0196', 'SLA', + 'CASC7', 'LYPD2', 'TOP1MT', 'NAPRT1', 'SHARPIN', 'MAF1', 'VPS28', 'RCL1', 'CD274', + 'CDKN2A', 'DNAJA1', 'AQP3', 'ENHO', 'GALT', 'STOML2', 'CD72', 'TPM2', 'GNE', 'PAX5', + 'FXN', 'ABHD17B', 'VPS13A', 'TLE4', 'SPIN1', 'FAM120A', 'C9orf3', 'PTCH1', 'ERCC6L2', + 'HEMGN', 'TRIM14', 'INVS', 'SMC2', 'CTNNAL1', 'INIP', 'GSN', 'PTGS1', 'ARPC5L', + 'GOLGA1', 'SCAI', 'PPP6C', 'PTGES2', 'C9orf16', 'TRUB2', 'TOR1A', 'USP20', 'POMT1', + 'UCK1', 'SETX', 'GFI1B', 'GBGT1', 'SURF6', 'SURF1', 'SARDH', 'RXRA', 'FCN1', + 'C9orf69', 'EGFL7', 'TMEM141', 'RABL6', 'PHPT1', 'PTGDS', 'C9orf142', 'CLIC3', + 'NELFB', 'MRPL41', 'C9orf37', 'IDI1', 'AKR1C3', 'ATP5C1', 'SEC61A2', 'NUDT5', + 'CDC123', 'CAMK1D', 'FAM107B', 'RP11-398C13.6', 'RP11-390B4.5', 'MLLT10', 'ARHGAP21', + 'ENKUR', 'MAP3K8', 'KIF5B', 'RP11-324I22.4', 'RP11-162G10.5', 'ZNF32', 'ZFAND4', + 'NCOA4', 'ZWINT', 'CISD1', 'UBE2D1', 'TFAM', 'REEP3', 'SIRT1', 'PBLD', 'HNRNPH3', + 'SRGN', 'TACR2', 'TSPAN15', 'PRF1', 'MICU1', 'CAMK2G', 'RP11-178G16.4', 'ZNF503', + 'PPIF', 'ATAD1', 'IFIT2', 'IFIT1', 'IFIT5', 'MARCH5', 'EXOC6', 'BLNK', 'ARHGAP19', + 'FRAT1', 'NDUFB8-1', 'MRPL43', 'LZTS2', 'FBXW4', 'TRIM8', 'C10orf32', 'GSTO1', + 'XPNPEP1', 'SHOC2', 'VTI1A', 'PRDX3', 'PLEKHA1', 'BUB3', 'OAT', 'CTBP2', 'MGMT', + 'GLRX3', 'STK32C', 'ECHS1', 'SYCE1', 'SCGB1C1', 'IFITM3', 'PHRF1', 'IRF7', 'TMEM80', + 'TALDO1', 'MOB2', 'TNNI2', 'KCNQ1OT1', 'SLC22A18AS', 'NAP1L4', 'CARS', 'ZNF195', + 'TIMM10B', 'TAF10', 'RIC3', 'TMEM9B', 'DENND5A', 'SWAP70', 'ZBED5-AS1', 'PSMA1', + 'SAAL1', 'CAT', 'PRR5L', 'API5', 'CD82', 'PEX16', 'DGKZ', 'DDB2', 'MADD', 'CELF1', + 'MTCH2', 'FNBP4', 'UBE2L6', 'TMX2', 'CTNND1', 'RP11-142C4.6', 'MS4A6A', 'MS4A1', + 'PTGDR2', 'PRPF19', 'TMEM138', 'SDHAF2', 'FADS1', 'AP003733.1', 'UBXN1', 'GNG3', + 'TAF6L', 'RP11-727F15.9', 'OTUB1', 'FERMT3', 'RASGRP2', 'AP001462.6', 'ARL2', + 'SYVN1', 'CTSW', 'PACS1', 'RAB1B', 'RBM4', 'RCE1', 'AP003419.16', 'PTPRCAP', + 'CORO1B', 'PITPNM1', 'GSTP1', 'MRPL21', 'CTTN', 'LAMTOR1', 'FOLR3', 'ARAP1', 'RELT', + 'PGM2L1', 'XRRA1', 'AP001189.4', 'CLNS1A', 'PICALM', 'PRSS23', 'RAB38', 'SMCO4', + 'TAF1D', 'MRE11A', 'CWC15', 'CASP4', 'PPP2R1B', 'RBM7', 'REXO2', 'PCSK7', 'CEP164', + 'RNF26', 'NRGN', 'ESAM', 'STT3A', 'RPUSD4', 'SRPR', 'SENCR', 'JAM3', 'VPS26B', + 'THYN1', 'WNK1', 'FBXL14', 'ADIPOR2', 'CCND2', 'CD9', 'TNFRSF1A', 'MRPL51', 'IFFO1', + 'ACRBP', 'USP5', 'SPSB2', 'EMG1', 'CLSTN3', 'CD163', 'CLEC4C', 'KLRG1', 'KLRB1', + 'CLEC2B', 'CLEC1B', 'KLRC1', 'RP11-291B21.2', 'PLBD1', 'GOLT1B', 'TM7SF3', 'CCDC91', + 'DENND5B', 'RP11-428G5.5', 'SLC2A13', 'LRRK2', 'PRICKLE1', 'IRAK4', 'RP11-493L12.4', + 'SLC48A1', 'ASB8', 'RHEBL1', 'TMBIM6', 'BCDIN3D', 'SMARCD1', 'ITGB7', 'C12orf10', + 'CBX5', 'NCKAP1L', 'BLOC1S1', 'GDF11', 'ORMDL2', 'WIBG', 'SUOX', 'SMARCC2', 'IL23A', + 'BAZ2A', 'TMEM194A', 'R3HDM2', 'DTX3', 'XPOT', 'GNS', 'TMBIM4-1', 'THAP2', 'RAB21', + 'TBC1D15', 'ATXN7L3B', 'PAWR', 'TMTC2', 'LINC00936', 'MRPL42', 'NDUFA12', 'NR2C1', + 'ACTR6', 'GNPTAB', 'TDG', 'HCFC2', 'C12orf45', 'PWP1', 'SELPLG', 'CORO1C', 'USP30', + 'GLTP', 'GIT2', 'HVCN1', 'ALDH2', 'TMEM116', 'NAA25', 'RPH3A', 'OAS1', 'FBXO21', + 'RFC5', 'TAOK3', 'DYNLL1', 'MLEC', 'OASL', 'ORAI1', 'SETD1B', 'CLIP1', 'RILPL2', + 'SNRNP35', 'EIF2B1', 'NCOR2', 'NOC4L', 'MRP63', 'GTF3A', 'MTIF3', 'FRY-AS1', + 'N4BP2L1', 'SPG20', 'ALG5', 'EXOSC8', 'MTRF1', 'DNAJC15', 'CCDC122', 'TSC22D1', + 'DLEU7', 'RNASEH2B', 'MZT1', 'DIS3', 'MYCBP2', 'RBM26-AS1', 'UBAC2', 'GPR183', + 'CLYBL', 'ARGLU1', 'ABHD13', 'TNFSF13B', 'ARHGEF7', 'MCF2L', 'CDC16', 'RPPH1', + 'METTL3', 'CMTM5', 'DHRS4', 'PSME1', 'RP11-468E2.4', 'IRF9', 'CHMP4A', 'MDP1', + 'GMPR2', 'TINF2', 'CIDEB', 'LTB4R', 'GZMH', 'GZMB', 'SCFD1', 'AP4S1', 'EAPP', + 'PPP2R3C', 'FBXO33', 'FKBP3', 'MIS18BP1', 'NEMF', 'ARF6', 'C14orf166', 'PTGDR', + 'PSMC6', 'CGRRF1', 'MAPK1IP1L', 'LGALS3', 'RP11-349A22.5', 'ARID4A', 'JKAMP', + 'MNAT1', 'CTD-2302E22.4', 'ATP6V1D', 'EIF2S1', 'ARG2', 'VTI1B', 'RAD51B', 'DCAF5', + 'ERH', 'SRSF5', 'PCNX', 'RBM25', 'NUMB', 'LIN52', 'NPC2', 'ISCA2', 'DLST', 'RPS6KL1', + 'RP11-950C14.3', 'C14orf1', 'RP11-488C13.5', 'GSTZ1', 'AHSA1', 'SNW1', 'SEL1L', + 'SPATA7', 'TTC8', 'TRIP11', 'ATXN3', 'IFI27', 'DICER1', 'TCL1B', 'TCL1A', + 'RP11-164H13.1', 'HSP90AA1', 'ANKRD9', 'CDC42BPB', 'TNFAIP2', 'EIF5', 'TRMT61A', + 'BAG5', 'SIVA1', 'PLD4', 'C14orf80', 'AL928768.3', 'KIAA0125', 'UBE3A', 'ATP10A', + 'KLF13', 'RP11-1000B6.3', 'ARHGAP11A', 'DPH6', 'THBS1', 'EIF2AK4', 'PLCB2', + 'C15orf57', 'RPUSD2', 'RMDN3', 'TMEM87A', 'ZNF106', 'TMEM62', 'ADAL', 'PDIA3', + 'CASC4', 'TRIM69', 'USP8', 'SPPL2A', 'RP11-430B1.2', 'ARPP19', 'RP11-139H15.1', + 'TCF12', 'LINC00926', 'ADAM10', 'MYO1E', 'BNIP2', 'NARG2', 'RP11-219B17.1', 'RORA', + 'VPS13C', 'TPM1', 'RAB8B', 'APH1B', 'FAM96A', 'KIAA0101', 'CLPX', 'AAGAB', + 'C15orf61', 'FEM1B', 'EDC3', 'COMMD4', 'NEIL1', 'SIN3A', 'SCAPER', 'RCN2', 'HMG20A', + 'ST20', 'BCL2A1', 'MESDC2', 'IL16', 'WHAMM', 'HOMER2', 'FANCI', 'IDH2', 'UNC45A', + 'HDDC3', 'CHD2', 'ARRDC4', 'LYSMD4', 'TARSL2', 'POLR3K', 'HBA1', 'LUC7L', 'RAB40C', + 'C16orf13', 'STUB1', 'FAM173A', 'RPUSD1', 'NME3', 'HAGH', 'NDUFB10', 'GFER', 'IL32', + 'ZNF263', 'CORO7', 'DNAJA3', 'NUDT16L1', 'CARHSP1', 'USP7', 'ATF7IP2', 'DEXI', + 'LITAF', 'TNFRSF17', 'PDXDC1', 'FOPNL', 'COQ7', 'CCP110', 'IGSF6', 'C16orf52', + 'POLR3E', 'GGA2', 'EARS2', 'PRKCB', 'RBBP6', 'RABEP2', 'CD19', 'SPNS1', 'SNX29P2', + 'C16orf54', 'TMEM219', 'TAOK2', 'YPEL3', 'SEPHS2', 'ZNF747', 'ZNF688', 'PHKG2', + 'STX4', 'FUS', 'PYCARD', 'TGFB1I1', 'C16orf58', 'RP11-42I10.1', 'CNEP1R1', 'SNX20', + 'AKTIP', 'BBS2', 'CPNE2', 'ARL2BP', 'CIAPIN1', 'GPR56', 'KIFC3', 'C16orf80', 'GOT2', + 'FAM96B', 'CES4A', 'TMEM208', 'ACD', 'TANGO6', 'CYB5B', 'NFAT5', 'ST3GAL2', + 'RP11-432I5.1', 'ATXN1L', 'HP', 'PSMD7', 'RP11-252A24.3', 'GABARAPL2', 'KARS', + 'TERF2IP', 'COTL1', 'C16orf74', 'IRF8', 'BANP', 'CYBA', 'MVD', 'SPG7', 'ZNF276', + 'TIMM22', 'YWHAE', 'PITPNA-AS1', 'PRPF8', 'SERPINF1', 'SMYD4', 'PAFAH1B1', 'SHPK-1', + 'P2RX5', 'ARRB2', 'PSMB6', 'GP1BA', 'SLC25A11', 'ZNF232', 'ZNF594', 'TXNDC17', + 'ALOX12', 'CLEC10A', 'ASGR1', 'ACADVL', 'ELP5', 'ACAP1', 'TMEM102', 'TNFSF12', + 'AC113189.5', 'SAT2', 'C17orf59', 'ADPRM', 'UBB', 'TRPV2', 'PLD6', 'NT5M', 'MED9', + 'RASD1', 'PEMT', 'SREBF1', 'TRIM16L', 'GRAP', 'IFT20', 'POLDIP2', 'TMEM199', + 'PROCA1', 'RAB34', 'NEK8', 'PHF12', 'ADAP2', 'NF1', 'UTP6', 'CCL2', 'SLFN5', + 'SLFN12', 'CCL5', 'CCL3', 'CCL4', 'CCL4L1', 'GGNBP2', 'MRM1', 'AATF', 'TADA2A', + 'MLLT6', 'RARA', 'CTD-2267D19.2', 'RP5-1028K7.2', 'DNAJC7', 'NKIRAS2', + 'RP11-400F19.6', 'MLX', 'TUBG2', 'VPS25', 'RUNDC1', 'IFI35', 'NBR1', 'DHX8', + 'RP11-527L4.5', 'HDAC5', 'GRN', 'ITGA2B', 'HEXIM2', 'RP11-798G7.6', 'GOSR2', 'ITGB3', + 'OSBPL7', 'ABI3', 'PDK2', 'SAMD14', 'LRRC59', 'ABCC3', 'LUC7L3', 'MMD', 'NOG', + 'SCPEP1', 'MRPS23', 'BZRAP1-AS1', 'SEPT4', 'YPEL2', 'INTS2', 'CYB561', 'LIMD2', + 'PSMC5', 'CD79B', 'ICAM2', 'TEX2', 'NOL11', 'ARSG', 'CTD-2006K23.1', 'NAT9', + 'TMEM104', 'ATP5H', 'SLC16A5', 'ARMC7', 'NT5C', 'GGA3', 'GRB2', 'SMIM5', 'GALK1', + 'SPHK1', 'USP36', 'RNF213', 'RP11-1055B8.7', 'OXLD1', 'ARL16', 'ARHGDIA', 'STRA13', + 'RFNG', 'GPS1', 'C17orf62', 'FN3KRP', 'YES1', 'SMCHD1', 'RP13-270P17.3', 'RALBP1', + 'VAPA', 'PSMG2', 'OSBPL1A', 'RNF125', 'ZNF397', 'INO80C', 'ATP5A1', 'CXXC1', 'NARS', + 'MALT1', 'RP11-879F14.2', 'TMX3', 'NFATC1', 'RBCK1', 'RP11-314N13.3', 'SIRPG', + 'SNRPB', 'ITPA', 'C20orf27', 'PRNP', 'PCNA', 'CRLS1', 'ANKEF1', 'MKKS', 'TASP1', + 'SNX5', 'RIN2', 'NAA20', 'CD93', 'CST3', 'CST7', 'ABHD12', 'PLAGL2', 'SNTA1', + 'NECAB3', 'PXMP4', 'RALY', 'PIGU', 'UQCC1', 'RBM39', 'AAR2', 'MYL9', 'RPN2', 'BLCAP', + 'CTNNBL1', 'MAFB', 'SRSF6', 'TTPAL', 'PKIG', 'YWHAB', 'DNTTIP1', 'UBE2C', 'MMP9', + 'LINC00494', 'STAU1', 'CEBPB', 'KCNG1', 'ATP9A', 'FAM210B', 'RTFDC1', 'ZBP1', + 'PMEPA1', 'STX16', 'TUBB1', 'PSMA7', 'DIDO1', 'GID8', 'TPD52L2', 'TCEA2', 'RGS19', + 'PRSS57', 'ELANE', 'POLR2E', 'ATP5D', 'C19orf24', 'MUM1', 'ATP8B3', 'PLEKHJ1', + 'GADD45B', 'SLC39A3', 'NFIC', 'DOHH', 'TBXA2R', 'SIRT6', 'CCDC94', 'FEM1A', 'SAFB2', + 'DUS3L', 'VMAC', 'ALKBH7', 'DENND1C', 'PCP2', 'RETN', 'MAP2K7', 'CD320', 'RAB11B', + 'MARCH2', 'HNRNPM', 'ZNF559', 'ZNF561', 'CDC37', 'S1PR5', 'ILF3-AS1', 'ILF3', + 'C19orf52', 'SMARCA4', 'TMEM205', 'ZNF653', 'ECSIT', 'ELOF1', 'ZNF69', 'ZNF799', + 'FBXW9', 'HOOK2', 'RAD23A', 'IL27RA', 'SAMD1', 'PRKACA', 'ZNF333', 'AC004257.3', + 'AKAP8', 'TPM4', 'FAM32A', 'CHERP', 'SMIM7', 'MYO9B', 'BABAM1', 'MVB12A', 'SLC27A1', + 'COLGALT1', 'INSL3', 'CCDC124', 'IFI30', 'JUND', 'ELL', 'CRTC1', 'RFXANK', 'NR2C2AP', + 'ZNF682', 'ZNF493', 'LINC00662', 'PLEKHF1', 'ANKRD27', 'LSM14A', 'PDCD2L', + 'ARHGAP33', 'TYROBP', 'POLR2I', 'TBCB', 'AC092295.7', 'AC074138.3', 'ZNF567', + 'PPP1R14A', 'C19orf33', 'KCNK6', 'RASGRP4', 'ACTN4', 'CAPN12', 'HNRNPL', 'MRPS12', + 'SAMD4B', 'EID2', 'PSMC4', 'TMEM91', 'ATP5SL', 'CEACAM4', 'CD79A', 'CTC-378H22.1', + 'ETHE1', 'ZNF404', 'ZNF45', 'TOMM40', 'RELB', 'PRKD2', 'BBC3', 'C5AR1', 'C5AR2', + 'DHX34', 'NAPA-AS1', 'PLA2G4C', 'CYTH2', 'GYS1', 'TRPM4', 'CD37', 'FCGRT', 'PRRG2', + 'IL4I1', 'SPIB', 'NKG7', 'ZNF175', 'SIGLEC14', 'FPR1', 'ZNF350', 'ZNF615', 'ZNF841', + 'ZNF836', 'ZNF528', 'ZNF468', 'MYADM', 'OSCAR', 'PRPF31', 'MBOAT7', 'LILRA4', + 'LAIR1', 'KIR2DL3', 'KIR3DL2', 'FCAR', 'PPP6R1', 'SUV420H2', 'ISOC2', 'ZNF628', + 'CTD-2537I9.12', 'EPN1', 'AURKC', 'CTC-444N24.11', 'ZNF587B', 'ZNF256', + 'CTD-2368P22.1', 'AC010642.1', 'EIF1AY', 'TPTEP1', 'CECR5', 'PEX26', 'MRPL40', + 'CLDN5', 'SEPT5', 'ARVCF', 'PPIL2', 'IGLL5', 'DDT', 'GUCD1', 'EWSR1', 'GAS2L1', + 'NEFH', 'ZMAT5', 'RFPL2', 'FBXO7', 'HMGXB4', 'EIF3D', 'PVALB', 'MPST', 'LGALS2', + 'SH3BP1', 'LGALS1', 'ANKRD54', 'DDX17', 'APOBEC3A', 'APOBEC3B', 'APOBEC3G', + 'RPS19BP1', 'ADSL', 'PHF5A', 'DESI1', 'WBP2NL', 'SMDT1', 'PACSIN2', 'PARVB', + 'LDOC1L', 'PRR5', 'ATXN10', 'TTC38', 'CTA-29F11.1', 'CRELD2', 'LMF2', 'TYMP', + 'RABL2B', 'SAMSN1', 'USP25', 'MAP3K7CL', 'BACH1', 'MIS18A', 'ATP5O', 'KCNE1', 'TTC3', + 'DSCR3', 'BRWD1', 'BACE2', 'SIK1', 'C21orf33', 'ICOSLG', 'SUMO3', 'SLC19A1', 'S100B', + 'PRMT2'], 'ranges': {'CellName': { + 'options': {'AAACATACAACCAC-1': 1, 'AAACATTGAGCTAC-1': 1, 'AAACATTGATCAGC-1': 1, 'AAACCGTGCTTCCG-1': 1, + 'AAACCGTGTATGCG-1': 1, 'AAACGCACTGGTAC-1': 1, 'AAACGCTGACCAGT-1': 1, 'AAACGCTGGTTCTT-1': 1, + 'AAACGCTGTAGCCA-1': 1, 'AAACGCTGTTTCTG-1': 1, 'AAACTTGAAAAACG-1': 1, 'AAACTTGATCCAGA-1': 1, + 'AAAGAGACGAGATA-1': 1, 'AAAGAGACGCGAGA-1': 1, 'AAAGAGACGGACTT-1': 1, 'AAAGAGACGGCATT-1': 1, + 'AAAGCAGATATCGG-1': 1, 'AAAGCCTGTATGCG-1': 1, 'AAAGGCCTGTCTAG-1': 1, 'AAAGTTTGATCACG-1': 1, + 'AAAGTTTGGGGTGA-1': 1, 'AAAGTTTGTAGAGA-1': 1, 'AAAGTTTGTAGCGT-1': 1, 'AAATCAACAATGCC-1': 1, + 'AAATCAACACCAGT-1': 1, 'AAATCAACCAGGAG-1': 1, 'AAATCAACCCTATT-1': 1, 'AAATCAACGGAAGC-1': 1, + 'AAATCAACTCGCAA-1': 1, 'AAATCATGACCACA-1': 1, 'AAATCCCTCCACAA-1': 1, 'AAATCCCTGCTATG-1': 1, + 'AAATGTTGAACGAA-1': 1, 'AAATGTTGCCACAA-1': 1, 'AAATGTTGTGGCAT-1': 1, 'AAATTCGAAGGTTC-1': 1, + 'AAATTCGAATCACG-1': 1, 'AAATTCGAGCTGAT-1': 1, 'AAATTCGAGGAGTG-1': 1, 'AAATTCGATTCTCA-1': 1, + 'AAATTGACACGACT-1': 1, 'AAATTGACTCGCTC-1': 1, 'AACAAACTCATTTC-1': 1, 'AACAAACTTTCGTT-1': 1, + 'AACAATACGACGAG-1': 1, 'AACACGTGCAGAGG-1': 1, 'AACACGTGGAAAGT-1': 1, 'AACACGTGGAACCT-1': 1, + 'AACACGTGGCTACA-1': 1, 'AACACGTGTACGAC-1': 1, 'AACAGCACAAGAGT-1': 1, 'AACATTGATGGGAG-1': 1, + 'AACCAGTGATACCG-1': 1, 'AACCCAGATCGCTC-1': 1, 'AACCGATGCTCCCA-1': 1, 'AACCGATGGTCATG-1': 1, + 'AACCGATGTTCTAC-1': 1, 'AACCGCCTAGCGTT-1': 1, 'AACCGCCTCTACGA-1': 1, 'AACCTACTGTGAGG-1': 1, + 'AACCTACTGTGTTG-1': 1, 'AACCTTACGAGACG-1': 1, 'AACCTTACGCGAGA-1': 1, 'AACCTTACTAACGC-1': 1, + 'AACCTTTGGACGGA-1': 1, 'AACCTTTGTACGCA-1': 1, 'AACGCAACAAGTAG-1': 1, 'AACGCATGACCCAA-1': 1, + 'AACGCATGCCTTCG-1': 1, 'AACGCATGTACTTC-1': 1, 'AACGCCCTCGGGAA-1': 1, 'AACGCCCTCGTACA-1': 1, + 'AACGCCCTGGCATT-1': 1, 'AACGTCGAGTATCG-1': 1, 'AACGTGTGAAAGCA-1': 1, 'AACGTGTGGCGGAA-1': 1, + 'AACGTGTGTCCAAG-1': 1, 'AACGTGTGTGCTTT-1': 1, 'AACTACCTTAGAGA-1': 1, 'AACTCACTCAAGCT-1': 1, + 'AACTCACTTGGAGG-1': 1, 'AACTCGGAAAGTGA-1': 1, 'AACTCGGAAGGTCT-1': 1, 'AACTCTTGCAGGAG-1': 1, + 'AACTGTCTCCCTTG-1': 1, 'AACTTGCTACGCTA-1': 1, 'AACTTGCTGGGACA-1': 1, 'AAGAACGAGTGTTG-1': 1, + 'AAGAAGACGTAGGG-1': 1, 'AAGACAGAAGTCTG-1': 1, 'AAGACAGAGGATCT-1': 1, 'AAGACAGATTACCT-1': 1, + 'AAGAGATGGGTAGG-1': 1, 'AAGATGGAAAACAG-1': 1, 'AAGATGGAGAACTC-1': 1, 'AAGATGGAGATAAG-1': 1, + 'AAGATTACAACCTG-1': 1, 'AAGATTACAGATCC-1': 1, 'AAGATTACCCGTTC-1': 1, 'AAGATTACCGCCTT-1': 1, + 'AAGATTACCTCAAG-1': 1, 'AAGATTACTCCTCG-1': 1, 'AAGCAAGAGCGAGA-1': 1, 'AAGCAAGAGCTTAG-1': 1, + 'AAGCAAGAGGTGTT-1': 1, 'AAGCACTGAGCAAA-1': 1, 'AAGCACTGCATACG-1': 1, 'AAGCACTGGTTCTT-1': 1, + 'AAGCCAACGTGTTG-1': 1, 'AAGCCATGAACTGC-1': 1, 'AAGCCATGACACGT-1': 1, 'AAGCCATGCGTGAT-1': 1, + 'AAGCCATGTCTCGC-1': 1, 'AAGCCTGACATGCA-1': 1, 'AAGCCTGACCGAAT-1': 1, 'AAGCGACTCCTCAC-1': 1, + 'AAGCGACTGTGTCA-1': 1, 'AAGCGACTTACAGC-1': 1, 'AAGCGACTTTGACG-1': 1, 'AAGCGTACGTCTTT-1': 1, + 'AAGGCTTGCGAACT-1': 1, 'AAGGTCACGGTTAC-1': 1, 'AAGGTCACTGTTTC-1': 1, 'AAGGTCACTTCCCG-1': 1, + 'AAGGTCTGACAGTC-1': 1, 'AAGGTCTGCAGATC-1': 1, 'AAGTAACTCTGAAC-1': 1, 'AAGTAACTGAGATA-1': 1, + 'AAGTAGGATACAGC-1': 1, 'AAGTATACCGAACT-1': 1, 'AAGTCCGACTTGTT-1': 1, 'AAGTCCGATAGAAG-1': 1, + 'AAGTCTCTAGTCGT-1': 1, 'AAGTCTCTCGGAGA-1': 1, 'AAGTGGCTTGGAGG-1': 1, 'AAGTTCCTCATTCT-1': 1, + 'AAGTTCCTTCTTAC-1': 1, 'AATAAGCTCGAATC-1': 1, 'AATAAGCTCGTTGA-1': 1, 'AATACCCTGGACGA-1': 1, + 'AATACCCTGGCATT-1': 1, 'AATACTGAAAGGGC-1': 1, 'AATACTGAATTGGC-1': 1, 'AATAGGGAACCCTC-1': 1, + 'AATAGGGAGAATGA-1': 1, 'AATCAAACTATCGG-1': 1, 'AATCCGGAATGCTG-1': 1, 'AATCCTACCGGTAT-1': 1, + 'AATCCTTGACGGGA-1': 1, 'AATCCTTGGTGAGG-1': 1, 'AATCGGTGGAACTC-1': 1, 'AATCGGTGTGCTTT-1': 1, + 'AATCTAGAAAAGTG-1': 1, 'AATCTAGAATCGGT-1': 1, 'AATCTCACAGCCTA-1': 1, 'AATCTCACTCTAGG-1': 1, + 'AATCTCTGAACAGA-1': 1, 'AATCTCTGCTTTAC-1': 1, 'AATGATACACCAAC-1': 1, 'AATGATACGGTCAT-1': 1, + 'AATGCGTGACACCA-1': 1, 'AATGCGTGGACGGA-1': 1, 'AATGCGTGGCTATG-1': 1, 'AATGGAGAATCGTG-1': 1, + 'AATGGAGATCCTTA-1': 1, 'AATGGCTGACACCA-1': 1, 'AATGGCTGCGTGAT-1': 1, 'AATGGCTGTAAAGG-1': 1, + 'AATGGCTGTACTCT-1': 1, 'AATGGCTGTGAAGA-1': 1, 'AATGTAACGGTGGA-1': 1, 'AATGTCCTCTTCTA-1': 1, + 'AATGTTGACAGTCA-1': 1, 'AATGTTGAGTTGAC-1': 1, 'AATGTTGATCTACT-1': 1, 'AATTACGAATTCCT-1': 1, + 'AATTACGACTTCTA-1': 1, 'AATTACGAGTGAGG-1': 1, 'AATTACGATTGGCA-1': 1, 'AATTCCTGCTCAGA-1': 1, + 'AATTGATGTCGCAA-1': 1, 'AATTGTGACTTGGA-1': 1, 'ACAAAGGAGGGTGA-1': 1, 'ACAAATTGATTCTC-1': 1, + 'ACAAATTGCTCAGA-1': 1, 'ACAAATTGTTGCGA-1': 1, 'ACAACCGAGGGATG-1': 1, 'ACAACCGAGTTACG-1': 1, + 'ACAAGAGAAGTCGT-1': 1, 'ACAAGAGACTTATC-1': 1, 'ACAAGAGAGTTGAC-1': 1, 'ACAATCCTAACCGT-1': 1, + 'ACAATCCTTAGCGT-1': 1, 'ACAATTGACTGACA-1': 1, 'ACAATTGATGACTG-1': 1, 'ACACAGACCATACG-1': 1, + 'ACACCAGAGGGCAA-1': 1, 'ACACCCTGGTGTTG-1': 1, 'ACACGAACAGTTCG-1': 1, 'ACACGATGACGCAT-1': 1, + 'ACACGATGATGTGC-1': 1, 'ACACGATGTCGTAG-1': 1, 'ACACGATGTGGTCA-1': 1, 'ACAGACACGGCATT-1': 1, + 'ACAGACACGTTGTG-1': 1, 'ACAGCAACACCTAG-1': 1, 'ACAGCAACCTCAAG-1': 1, 'ACAGGTACCCCACT-1': 1, + 'ACAGGTACGCTGTA-1': 1, 'ACAGGTACTGGTGT-1': 1, 'ACAGTCGACCCAAA-1': 1, 'ACAGTCGACCGATA-1': 1, + 'ACAGTGACTCACCC-1': 1, 'ACAGTGACTCTATC-1': 1, 'ACAGTGTGGTCACA-1': 1, 'ACAGTGTGTTGCGA-1': 1, + 'ACATCACTCTACTT-1': 1, 'ACATGGTGAAGCCT-1': 1, 'ACATGGTGCAACCA-1': 1, 'ACATGGTGCGAGTT-1': 1, + 'ACATTCTGGCATAC-1': 1, 'ACATTCTGGGAACG-1': 1, 'ACCAACGACATGCA-1': 1, 'ACCACAGAAAGTAG-1': 1, + 'ACCACAGAGTTGGT-1': 1, 'ACCACCTGTGTGCA-1': 1, 'ACCACGCTACAGCT-1': 1, 'ACCACGCTACCCAA-1': 1, + 'ACCACGCTGCGAGA-1': 1, 'ACCACGCTGCTGTA-1': 1, 'ACCAGCCTGACAGG-1': 1, 'ACCAGTGAACGGTT-1': 1, + 'ACCAGTGAATACCG-1': 1, 'ACCAGTGAGGGATG-1': 1, 'ACCAGTGATGACTG-1': 1, 'ACCATTACCTTCTA-1': 1, + 'ACCATTACGAGATA-1': 1, 'ACCATTTGTCATTC-1': 1, 'ACCCAAGAACTGTG-1': 1, 'ACCCAAGAATTCCT-1': 1, + 'ACCCAAGAGGACAG-1': 1, 'ACCCAAGATTCACT-1': 1, 'ACCCACTGCGCCTT-1': 1, 'ACCCACTGGACAGG-1': 1, + 'ACCCACTGGTTCAG-1': 1, 'ACCCACTGTCGTAG-1': 1, 'ACCCAGCTCAGAAA-1': 1, 'ACCCAGCTGTTAGC-1': 1, + 'ACCCAGCTTGCTTT-1': 1, 'ACCCGTTGATGACC-1': 1, 'ACCCGTTGCTGCAA-1': 1, 'ACCCGTTGCTTCTA-1': 1, + 'ACCCTCGACCTATT-1': 1, 'ACCCTCGACGGTAT-1': 1, 'ACCCTCGATAAGGA-1': 1, 'ACCCTCGATCAAGC-1': 1, + 'ACCGTGCTACCAGT-1': 1, 'ACCGTGCTGGAACG-1': 1, 'ACCTATTGCTGAGT-1': 1, 'ACCTATTGTGCCCT-1': 1, + 'ACCTCCGAGTCCTC-1': 1, 'ACCTCCGATATGCG-1': 1, 'ACCTCCGATGCTGA-1': 1, 'ACCTCGTGAACCAC-1': 1, + 'ACCTGAGATATCGG-1': 1, 'ACCTGGCTAAGTAG-1': 1, 'ACCTTTGACTCCCA-1': 1, 'ACCTTTGAGGAACG-1': 1, + 'ACCTTTGAGGAAGC-1': 1, 'ACGAACACCTTGTT-1': 1, 'ACGAACTGGCTATG-1': 1, 'ACGAAGCTCTCCAC-1': 1, + 'ACGAAGCTCTGAGT-1': 1, 'ACGACCCTATCTCT-1': 1, 'ACGACCCTGATGAA-1': 1, 'ACGACCCTTGACAC-1': 1, + 'ACGACCCTTGACCA-1': 1, 'ACGAGGGACAGGAG-1': 1, 'ACGAGGGACGAACT-1': 1, 'ACGAGGGATGTAGC-1': 1, + 'ACGAGTACCCTAAG-1': 1, 'ACGAGTACGAATCC-1': 1, 'ACGATCGAGGACTT-1': 1, 'ACGATCGAGTCACA-1': 1, + 'ACGATGACAATGCC-1': 1, 'ACGATGACTGGTCA-1': 1, 'ACGATTCTACGGGA-1': 1, 'ACGCAATGGTTCAG-1': 1, + 'ACGCACCTGTTAGC-1': 1, 'ACGCCACTGAACTC-1': 1, 'ACGCCGGAAACCAC-1': 1, 'ACGCCGGAAAGCCT-1': 1, + 'ACGCCGGAAATGCC-1': 1, 'ACGCCTTGCTCCCA-1': 1, 'ACGCGGTGGCGAGA-1': 1, 'ACGCGGTGTGTGGT-1': 1, + 'ACGCGGTGTTTGCT-1': 1, 'ACGCTCACAGTACC-1': 1, 'ACGCTCACCCTTGC-1': 1, 'ACGCTGCTGTTCTT-1': 1, + 'ACGGAACTCAGATC-1': 1, 'ACGGAACTGTCGTA-1': 1, 'ACGGAGGACTCTTA-1': 1, 'ACGGATTGGGAGGT-1': 1, + 'ACGGATTGGTTAGC-1': 1, 'ACGGCTCTGAGCAG-1': 1, 'ACGGCTCTTGCACA-1': 1, 'ACGGTAACCGCTAA-1': 1, + 'ACGGTAACCTTCGC-1': 1, 'ACGGTAACGGTGGA-1': 1, 'ACGGTAACTCGCAA-1': 1, 'ACGGTATGAGTCGT-1': 1, + 'ACGGTATGGGTATC-1': 1, 'ACGGTATGGTTGTG-1': 1, 'ACGGTCCTAACGGG-1': 1, 'ACGGTCCTCGGGAA-1': 1, + 'ACGTAGACAACCAC-1': 1, 'ACGTAGACTACAGC-1': 1, 'ACGTCAGAAACGAA-1': 1, 'ACGTCAGAGAGCTT-1': 1, + 'ACGTCAGAGGGATG-1': 1, 'ACGTCCTGATAAGG-1': 1, 'ACGTCCTGTGAACC-1': 1, 'ACGTCGCTCCTGAA-1': 1, + 'ACGTCGCTCTATTC-1': 1, 'ACGTCGCTTCTCAT-1': 1, 'ACGTGATGCCATGA-1': 1, 'ACGTGATGGGTCTA-1': 1, + 'ACGTGATGTAACCG-1': 1, 'ACGTGATGTGACAC-1': 1, 'ACGTGCCTCCGTAA-1': 1, 'ACGTGCCTTCTATC-1': 1, + 'ACGTTACTTTCCAT-1': 1, 'ACGTTGGAAAAGCA-1': 1, 'ACGTTGGAAACCTG-1': 1, 'ACGTTGGACCGTAA-1': 1, + 'ACGTTGGAGCCAAT-1': 1, 'ACGTTGGATATGGC-1': 1, 'ACGTTGGATCAGGT-1': 1, 'ACGTTTACATCAGC-1': 1, + 'ACTAAAACCCACAA-1': 1, 'ACTAAAACTCGACA-1': 1, 'ACTACGGAATTTCC-1': 1, 'ACTACGGACCTATT-1': 1, + 'ACTACGGATCGCTC-1': 1, 'ACTACTACTAAGGA-1': 1, 'ACTAGGTGGAACCT-1': 1, 'ACTAGGTGGAACTC-1': 1, + 'ACTATCACCTTGGA-1': 1, 'ACTATCACTGCCAA-1': 1, 'ACTCAGGACTGAAC-1': 1, 'ACTCAGGATCTATC-1': 1, + 'ACTCAGGATTCGTT-1': 1, 'ACTCCTCTCAACTG-1': 1, 'ACTCGCACGAAAGT-1': 1, 'ACTCGCACTACGAC-1': 1, + 'ACTCTCCTGACACT-1': 1, 'ACTCTCCTGCATAC-1': 1, 'ACTCTCCTGTTTGG-1': 1, 'ACTGAGACAACCAC-1': 1, + 'ACTGAGACCCATAG-1': 1, 'ACTGAGACGTTGGT-1': 1, 'ACTGCCACACACGT-1': 1, 'ACTGCCACTCCGTC-1': 1, + 'ACTGGCCTTCAGTG-1': 1, 'ACTGTGGACGTGTA-1': 1, 'ACTGTGGATCTAGG-1': 1, 'ACTGTTACCCACAA-1': 1, + 'ACTGTTACTGCAGT-1': 1, 'ACTTAAGAACCACA-1': 1, 'ACTTAAGATTACTC-1': 1, 'ACTTAGCTGCGTAT-1': 1, + 'ACTTAGCTGGGAGT-1': 1, 'ACTTCAACAAGCAA-1': 1, 'ACTTCAACGTAGGG-1': 1, 'ACTTCCCTTTCCGC-1': 1, + 'ACTTCTGACATGCA-1': 1, 'ACTTGACTCCACAA-1': 1, 'ACTTGGGAGAAAGT-1': 1, 'ACTTGGGAGGTTTG-1': 1, + 'ACTTGGGATGTGAC-1': 1, 'ACTTGGGATTGACG-1': 1, 'ACTTGTACCTGTCC-1': 1, 'ACTTTGTGGAAAGT-1': 1, + 'ACTTTGTGGATAGA-1': 1, 'AGAAACGAAAGTAG-1': 1, 'AGAAAGTGCGCAAT-1': 1, 'AGAAAGTGGGGATG-1': 1, + 'AGAACAGAAATGCC-1': 1, 'AGAACAGACGACTA-1': 1, 'AGAACAGAGACAAA-1': 1, 'AGAACGCTTTGCTT-1': 1, + 'AGAAGATGTGACTG-1': 1, 'AGAATGGAAGAAGT-1': 1, 'AGAATTTGTAACCG-1': 1, 'AGAATTTGTAGAGA-1': 1, + 'AGACACACTGTAGC-1': 1, 'AGACACTGTCAAGC-1': 1, 'AGACCTGAAGTAGA-1': 1, 'AGACCTGACCAACA-1': 1, + 'AGACCTGAGGAAGC-1': 1, 'AGACGTACAGAGGC-1': 1, 'AGACGTACCCCTAC-1': 1, 'AGACGTACCTCTTA-1': 1, + 'AGACGTACTCGTGA-1': 1, 'AGACTGACCATCAG-1': 1, 'AGACTGACCCTTTA-1': 1, 'AGACTTCTCATGCA-1': 1, + 'AGAGATGACAGTCA-1': 1, 'AGAGATGACTGAAC-1': 1, 'AGAGATGAGGTTTG-1': 1, 'AGAGATGATCTCGC-1': 1, + 'AGAGATGATTGTGG-1': 1, 'AGAGCGGAGGCAAG-1': 1, 'AGAGTCTGGTCGTA-1': 1, 'AGAGTGCTCAGCTA-1': 1, + 'AGAGTGCTCGAATC-1': 1, 'AGAGTGCTGTCATG-1': 1, 'AGAGTGCTGTCCTC-1': 1, 'AGAGTGCTGTGTTG-1': 1, + 'AGATATACCCGTAA-1': 1, 'AGATATACGATGAA-1': 1, 'AGATATACTGTTCT-1': 1, 'AGATATTGCCTACC-1': 1, + 'AGATATTGGCCAAT-1': 1, 'AGATCGTGTCTGGA-1': 1, 'AGATCGTGTTTGTC-1': 1, 'AGATCTCTATCACG-1': 1, + 'AGATTAACGTTCTT-1': 1, 'AGATTCCTATCGTG-1': 1, 'AGATTCCTCACTTT-1': 1, 'AGATTCCTGACGAG-1': 1, + 'AGATTCCTGTTCAG-1': 1, 'AGCAAAGATATGCG-1': 1, 'AGCACAACAGTCTG-1': 1, 'AGCACTGAGGGAGT-1': 1, + 'AGCACTGATATGCG-1': 1, 'AGCACTGATGCTTT-1': 1, 'AGCACTGATTGCGA-1': 1, 'AGCATCGAAGATCC-1': 1, + 'AGCATCGAAGGGTG-1': 1, 'AGCATCGAGCTTCC-1': 1, 'AGCATCGAGTGAGG-1': 1, 'AGCATCGATAACCG-1': 1, + 'AGCATGACGATGAA-1': 1, 'AGCCAATGGGGAGT-1': 1, 'AGCCAATGTATCTC-1': 1, 'AGCCACCTGGATCT-1': 1, + 'AGCCGGTGCCAATG-1': 1, 'AGCCGGTGTGTTTC-1': 1, 'AGCCGTCTCAATCG-1': 1, 'AGCCGTCTGAGAGC-1': 1, + 'AGCCTCACGTTCGA-1': 1, 'AGCCTCACTGTCAG-1': 1, 'AGCCTCTGCAGTTG-1': 1, 'AGCCTCTGCCAATG-1': 1, + 'AGCGAACTGGATCT-1': 1, 'AGCGAACTTACTGG-1': 1, 'AGCGATACGGAGCA-1': 1, 'AGCGATTGAGATCC-1': 1, + 'AGCGCCGAATCTCT-1': 1, 'AGCGCCGACAGAGG-1': 1, 'AGCGCTCTACCTTT-1': 1, 'AGCGGCACCGGGAA-1': 1, + 'AGCGGCTGATGTGC-1': 1, 'AGCGGGCTTGCCAA-1': 1, 'AGCGTAACATGCTG-1': 1, 'AGCGTAACTGAGAA-1': 1, + 'AGCTCGCTACTGGT-1': 1, 'AGCTCGCTCTGCTC-1': 1, 'AGCTGAACCATACG-1': 1, 'AGCTGAACCTCTCG-1': 1, + 'AGCTGCCTTGGGAG-1': 1, 'AGCTGCCTTTCATC-1': 1, 'AGCTGCCTTTCTGT-1': 1, 'AGCTGTGATCCAAG-1': 1, + 'AGCTTTACAAGTAG-1': 1, 'AGCTTTACACCAAC-1': 1, 'AGCTTTACTCTCAT-1': 1, 'AGGAAATGAGGAGC-1': 1, + 'AGGAACCTCTTAGG-1': 1, 'AGGAACCTTGCCTC-1': 1, 'AGGAATGATAACGC-1': 1, 'AGGAATGATTTGTC-1': 1, + 'AGGAGTCTGGTTTG-1': 1, 'AGGAGTCTTGTCAG-1': 1, 'AGGATAGACATTTC-1': 1, 'AGGATAGAGGATTC-1': 1, + 'AGGATGCTACTAGC-1': 1, 'AGGATGCTTTAGGC-1': 1, 'AGGCAACTGAAGGC-1': 1, 'AGGCAGGAGTACCA-1': 1, + 'AGGCCTCTAGTCGT-1': 1, 'AGGCCTCTCGGAGA-1': 1, 'AGGCCTCTCGTAAC-1': 1, 'AGGGACGACGTTGA-1': 1, + 'AGGGACGAGTCAAC-1': 1, 'AGGGACGAGTTGTG-1': 1, 'AGGGACGATAGAGA-1': 1, 'AGGGACGATGCATG-1': 1, + 'AGGGAGTGAGCCTA-1': 1, 'AGGGCCACCATACG-1': 1, 'AGGGCGCTAACCAC-1': 1, 'AGGGCGCTATGGTC-1': 1, + 'AGGGTGGACAGTCA-1': 1, 'AGGGTGGACTCAAG-1': 1, 'AGGGTGGAGTTGCA-1': 1, 'AGGGTTTGTTCATC-1': 1, + 'AGGTCATGAGTGTC-1': 1, 'AGGTCATGCTTATC-1': 1, 'AGGTCTGATTCTCA-1': 1, 'AGGTGGGAAGAATG-1': 1, + 'AGGTGGGAAGTTCG-1': 1, 'AGGTGTTGGTTACG-1': 1, 'AGGTTCGAACCTCC-1': 1, 'AGGTTCGAACGTAC-1': 1, + 'AGGTTCGAGGGTGA-1': 1, 'AGTAAGGAGTTTGG-1': 1, 'AGTAAGGATTCTTG-1': 1, 'AGTAATACATCACG-1': 1, + 'AGTAATACCGAACT-1': 1, 'AGTAATTGTCCCAC-1': 1, 'AGTACGTGAGGGTG-1': 1, 'AGTACGTGCTGCAA-1': 1, + 'AGTACGTGCTTGGA-1': 1, 'AGTACTCTACGTGT-1': 1, 'AGTACTCTCAACCA-1': 1, 'AGTACTCTCGGTAT-1': 1, + 'AGTAGGCTTGCCTC-1': 1, 'AGTATAACTTGTCT-1': 1, 'AGTATCCTAGAACA-1': 1, 'AGTCACGATGAGCT-1': 1, + 'AGTCAGACGAATAG-1': 1, 'AGTCAGACGCTTAG-1': 1, 'AGTCAGACTAGAGA-1': 1, 'AGTCAGACTGCACA-1': 1, + 'AGTCCAGATATCTC-1': 1, 'AGTCCAGATTTCAC-1': 1, 'AGTCGAACCAACCA-1': 1, 'AGTCGCCTCCGTAA-1': 1, + 'AGTCTACTAGGGTG-1': 1, 'AGTCTACTTGCATG-1': 1, 'AGTCTTACACCACA-1': 1, 'AGTCTTACTTCGCC-1': 1, + 'AGTCTTACTTCGGA-1': 1, 'AGTGACTGCAACTG-1': 1, 'AGTGTTCTAACCTG-1': 1, 'AGTGTTCTATAAGG-1': 1, + 'AGTGTTCTCACTTT-1': 1, 'AGTTAAACCACTTT-1': 1, 'AGTTATGAACAGTC-1': 1, 'AGTTATGACTGAGT-1': 1, + 'AGTTATGAGTTCAG-1': 1, 'AGTTCTACCAGCTA-1': 1, 'AGTTCTTGAAGCCT-1': 1, 'AGTTGTCTACTACG-1': 1, + 'AGTTTAGATGGTCA-1': 1, 'AGTTTCACGGTCTA-1': 1, 'AGTTTGCTACAGTC-1': 1, 'AGTTTGCTACTGGT-1': 1, + 'AGTTTGCTCCAAGT-1': 1, 'ATAAACACAGTGCT-1': 1, 'ATAAACACCACCAA-1': 1, 'ATAACAACATGCTG-1': 1, + 'ATAACAACGTCTAG-1': 1, 'ATAACAACTTTGTC-1': 1, 'ATAACATGTACTCT-1': 1, 'ATAACCCTGTTGGT-1': 1, + 'ATAACCCTTGGTAC-1': 1, 'ATAAGTACGAATGA-1': 1, 'ATAAGTTGGTACGT-1': 1, 'ATAAGTTGTCTAGG-1': 1, + 'ATAATCGAGCTGAT-1': 1, 'ATAATCGATGGTTG-1': 1, 'ATAATGACCTACTT-1': 1, 'ATAATGACTCGTGA-1': 1, + 'ATACAATGTTAGGC-1': 1, 'ATACCACTCGTACA-1': 1, 'ATACCACTCTAAGC-1': 1, 'ATACCACTGCCAAT-1': 1, + 'ATACCGGAATGCTG-1': 1, 'ATACCGGACATTTC-1': 1, 'ATACCGGACTTCGC-1': 1, 'ATACCGGAGGTGTT-1': 1, + 'ATACCGGATCTCGC-1': 1, 'ATACCTACGCATCA-1': 1, 'ATACCTTGGGGCAA-1': 1, 'ATACGGACAGACTC-1': 1, + 'ATACGGACCTACTT-1': 1, 'ATACGGACGAGGTG-1': 1, 'ATACGGACTATGCG-1': 1, 'ATACGGACTCTGGA-1': 1, + 'ATACGTCTTAACGC-1': 1, 'ATACTCTGCTTCGC-1': 1, 'ATACTCTGGTATGC-1': 1, 'ATAGATACCATGGT-1': 1, + 'ATAGATACGACGAG-1': 1, 'ATAGATTGGTGTAC-1': 1, 'ATAGCCGAACGGAG-1': 1, 'ATAGCGTGCAGATC-1': 1, + 'ATAGCGTGCCCTTG-1': 1, 'ATAGCGTGGTATCG-1': 1, 'ATAGCGTGTCTCTA-1': 1, 'ATAGCTCTCTGATG-1': 1, + 'ATAGCTCTGAGGTG-1': 1, 'ATAGGAGAAACAGA-1': 1, 'ATAGGCTGTCAGAC-1': 1, 'ATAGTCCTAGTGTC-1': 1, + 'ATAGTCCTTGCATG-1': 1, 'ATAGTCCTTGTCGA-1': 1, 'ATAGTTGACAACTG-1': 1, 'ATAGTTGACCCTCA-1': 1, + 'ATAGTTGAGACGTT-1': 1, 'ATAGTTGATAAGCC-1': 1, 'ATATACGAAGCCAT-1': 1, 'ATATACGAATTGGC-1': 1, + 'ATATAGTGGAATGA-1': 1, 'ATATGCCTAGATCC-1': 1, 'ATATGCCTGGACAG-1': 1, 'ATATGCCTTCTCTA-1': 1, + 'ATATGCCTTGGTAC-1': 1, 'ATCAAATGAGCCTA-1': 1, 'ATCAAATGGGTAAA-1': 1, 'ATCAACCTAAACGA-1': 1, + 'ATCAACCTGAGGAC-1': 1, 'ATCAACCTTCTCTA-1': 1, 'ATCAACCTTTGTCT-1': 1, 'ATCACACTTTGTCT-1': 1, + 'ATCACGGATTTCGT-1': 1, 'ATCATCTGACACCA-1': 1, 'ATCATGCTAGAGTA-1': 1, 'ATCATGCTGAACCT-1': 1, + 'ATCCAGGACGCTAA-1': 1, 'ATCCAGGATGGAAA-1': 1, 'ATCCATACTCCTTA-1': 1, 'ATCCATACTTCATC-1': 1, + 'ATCCCGTGCAGTCA-1': 1, 'ATCCCGTGCATGCA-1': 1, 'ATCCCGTGGCTGAT-1': 1, 'ATCCGCACGCATCA-1': 1, + 'ATCCTAACGACGGA-1': 1, 'ATCCTAACGCTACA-1': 1, 'ATCGACGAAACTGC-1': 1, 'ATCGACGAATGACC-1': 1, + 'ATCGAGTGGACGTT-1': 1, 'ATCGCAGAATCTCT-1': 1, 'ATCGCAGAGTGTCA-1': 1, 'ATCGCCACTGAGGG-1': 1, + 'ATCGCCTGGGTCAT-1': 1, 'ATCGCCTGTGGCAT-1': 1, 'ATCGCGCTCAGAGG-1': 1, 'ATCGCGCTGGGATG-1': 1, + 'ATCGCGCTTTTCGT-1': 1, 'ATCGGAACCAGTCA-1': 1, 'ATCGGTGAGTCAAC-1': 1, 'ATCGGTGATTGCAG-1': 1, + 'ATCGTTTGCCTACC-1': 1, 'ATCGTTTGGGTACT-1': 1, 'ATCGTTTGTGCCAA-1': 1, 'ATCTACACCCGCTT-1': 1, + 'ATCTACACCGGGAA-1': 1, 'ATCTCAACAGGAGC-1': 1, 'ATCTCAACCTCGAA-1': 1, 'ATCTCAACCTTGTT-1': 1, + 'ATCTGGGAAACCAC-1': 1, 'ATCTGGGAAGTGTC-1': 1, 'ATCTGGGATTCCGC-1': 1, 'ATCTGTTGAACGGG-1': 1, + 'ATCTGTTGACCTCC-1': 1, 'ATCTGTTGCCTTCG-1': 1, 'ATCTGTTGGTTGCA-1': 1, 'ATCTTGACACCAAC-1': 1, + 'ATCTTGACCTCCCA-1': 1, 'ATCTTTCTGCATCA-1': 1, 'ATCTTTCTGTTTCT-1': 1, 'ATCTTTCTTGTCCC-1': 1, + 'ATGAAACTCTGTGA-1': 1, 'ATGAAACTGAGGCA-1': 1, 'ATGAAGGAACAGCT-1': 1, 'ATGAAGGACCTGTC-1': 1, + 'ATGAAGGACCTTAT-1': 1, 'ATGAAGGACTAGTG-1': 1, 'ATGAAGGACTTGCC-1': 1, 'ATGACGTGACGACT-1': 1, + 'ATGACGTGATCGGT-1': 1, 'ATGAGAGAAAGTGA-1': 1, 'ATGAGAGAACGCAT-1': 1, 'ATGAGAGAAGTAGA-1': 1, + 'ATGAGCACACAGCT-1': 1, 'ATGAGCACATCTTC-1': 1, 'ATGATAACTTCACT-1': 1, 'ATGATATGAAACAG-1': 1, + 'ATGATATGACTGGT-1': 1, 'ATGATATGAGCACT-1': 1, 'ATGATATGGTCATG-1': 1, 'ATGATATGGTGCTA-1': 1, + 'ATGATATGTTGTCT-1': 1, 'ATGCACGAATGTCG-1': 1, 'ATGCACGACTGTAG-1': 1, 'ATGCACGAGAACCT-1': 1, + 'ATGCACGAGTTCGA-1': 1, 'ATGCACGATTGGTG-1': 1, 'ATGCAGTGTTACCT-1': 1, 'ATGCAGTGTTCTAC-1': 1, + 'ATGCCAGAACGACT-1': 1, 'ATGCCAGACAGTCA-1': 1, 'ATGCCGCTTGAACC-1': 1, 'ATGCGATGCTATGG-1': 1, + 'ATGCGATGCTGAGT-1': 1, 'ATGCGATGGTTACG-1': 1, 'ATGCGCCTTCATTC-1': 1, 'ATGCTTTGCGAATC-1': 1, + 'ATGCTTTGGGCGAA-1': 1, 'ATGCTTTGTAGTCG-1': 1, 'ATGGACACATCGGT-1': 1, 'ATGGACACGCATCA-1': 1, + 'ATGGGTACAACCTG-1': 1, 'ATGGGTACATCGGT-1': 1, 'ATGGGTACTATTCC-1': 1, 'ATGGGTACTGGGAG-1': 1, + 'ATGTAAACACCTCC-1': 1, 'ATGTAAACCCGCTT-1': 1, 'ATGTAAACGGGATG-1': 1, 'ATGTAAACTCTCCG-1': 1, + 'ATGTAAACTTCACT-1': 1, 'ATGTACCTCAGTCA-1': 1, 'ATGTACCTTAGTCG-1': 1, 'ATGTACCTTTATCC-1': 1, + 'ATGTACCTTTCACT-1': 1, 'ATGTCACTAATGCC-1': 1, 'ATGTCACTCTGCTC-1': 1, 'ATGTCGGAGGTGAG-1': 1, + 'ATGTTCACAGTCTG-1': 1, 'ATGTTCACCGTAGT-1': 1, 'ATGTTGCTTTCAGG-1': 1, 'ATTAACGATGAGAA-1': 1, + 'ATTAACGATGCAAC-1': 1, 'ATTAAGACTGCAGT-1': 1, 'ATTACCTGCCTTAT-1': 1, 'ATTACCTGGAGGAC-1': 1, + 'ATTAGATGTTTCAC-1': 1, 'ATTATGGAATCTCT-1': 1, 'ATTCAAGAACGGGA-1': 1, 'ATTCAAGACCTTTA-1': 1, + 'ATTCAGCTCATTGG-1': 1, 'ATTCCAACCATTGG-1': 1, 'ATTCCAACTTAGGC-1': 1, 'ATTCGACTCACTAG-1': 1, + 'ATTCGACTGAATAG-1': 1, 'ATTCGACTTTTGTC-1': 1, 'ATTCGGGAAAGGCG-1': 1, 'ATTCGGGATTAGGC-1': 1, + 'ATTCTTCTGATACC-1': 1, 'ATTGAATGGACGGA-1': 1, 'ATTGATGAAGGTTC-1': 1, 'ATTGATGACTGAGT-1': 1, + 'ATTGATGAGCGAAG-1': 1, 'ATTGATGATCTATC-1': 1, 'ATTGCACTGACGGA-1': 1, 'ATTGCACTGAGAGC-1': 1, + 'ATTGCACTGGAGCA-1': 1, 'ATTGCACTTAGCCA-1': 1, 'ATTGCACTTGCTTT-1': 1, 'ATTGCTTGTTACTC-1': 1, + 'ATTGGTCTGACTAC-1': 1, 'ATTGGTCTTGTCTT-1': 1, 'ATTGTAGATTCCCG-1': 1, 'ATTGTAGATTGCAG-1': 1, + 'ATTGTCTGCGTACA-1': 1, 'ATTTAGGAACCATG-1': 1, 'ATTTAGGACAGAGG-1': 1, 'ATTTCCGAGATGAA-1': 1, + 'ATTTCCGAGTGCTA-1': 1, 'ATTTCGTGTATGGC-1': 1, 'ATTTCTCTACTTTC-1': 1, 'ATTTCTCTAGCAAA-1': 1, + 'ATTTCTCTCACTTT-1': 1, 'ATTTCTCTTCCCAC-1': 1, 'ATTTGCACAAGATG-1': 1, 'CAAAGCACAGCTCA-1': 1, + 'CAAAGCACCGTAAC-1': 1, 'CAAAGCACGGTAAA-1': 1, 'CAAAGCTGAAAGTG-1': 1, 'CAAAGCTGTTGCTT-1': 1, + 'CAAATATGTGACAC-1': 1, 'CAAATTGAGGGCAA-1': 1, 'CAAATTGATGGAGG-1': 1, 'CAACCAGAAAAGTG-1': 1, + 'CAACCAGAAGTGCT-1': 1, 'CAACCAGAGTTCAG-1': 1, 'CAACCAGATAGAAG-1': 1, 'CAACCGCTGTTCAG-1': 1, + 'CAACCGCTTTGAGC-1': 1, 'CAACGATGCGCAAT-1': 1, 'CAACGTGACTCCAC-1': 1, 'CAACGTGAGCCATA-1': 1, + 'CAACGTGATCAAGC-1': 1, 'CAAGAAGACCACAA-1': 1, 'CAAGAAGACGTCTC-1': 1, 'CAAGAAGATTCTAC-1': 1, + 'CAAGACTGACCTGA-1': 1, 'CAAGACTGAGTAGA-1': 1, 'CAAGCTGACCATAG-1': 1, 'CAAGCTGATCTATC-1': 1, + 'CAAGGACTGTTCAG-1': 1, 'CAAGGACTTCTTTG-1': 1, 'CAAGGTTGCTCCAC-1': 1, 'CAAGGTTGTCATTC-1': 1, + 'CAAGGTTGTCTGGA-1': 1, 'CAAGTCGAAACAGA-1': 1, 'CAAGTCGATAGCGT-1': 1, 'CAATAAACGCCATA-1': 1, + 'CAATAATGAACTGC-1': 1, 'CAATATGACATGGT-1': 1, 'CAATATGACCTTCG-1': 1, 'CAATATGACGTTAG-1': 1, + 'CAATATGAGGAGCA-1': 1, 'CAATCGGAGAAACA-1': 1, 'CAATCTACTGACTG-1': 1, 'CAATTCACCCAACA-1': 1, + 'CAATTCACGATAGA-1': 1, 'CAATTCACTTGTGG-1': 1, 'CAATTCTGCTTGTT-1': 1, 'CAATTCTGGCGTAT-1': 1, + 'CACAACGATACGAC-1': 1, 'CACAATCTTGTTCT-1': 1, 'CACAATCTTTCCAT-1': 1, 'CACACCTGCTTGAG-1': 1, + 'CACACCTGTATGGC-1': 1, 'CACAGAACCCTTGC-1': 1, 'CACAGAACCTGATG-1': 1, 'CACAGATGGGATTC-1': 1, + 'CACAGATGGTTTCT-1': 1, 'CACAGCCTGATACC-1': 1, 'CACAGCCTTGCCAA-1': 1, 'CACAGCCTTGTAGC-1': 1, + 'CACAGTGATGAAGA-1': 1, 'CACATACTACAGCT-1': 1, 'CACATGGAACACGT-1': 1, 'CACATGGAAGTCGT-1': 1, + 'CACCACTGCCAACA-1': 1, 'CACCACTGGCGAAG-1': 1, 'CACCCATGTTCTGT-1': 1, 'CACCGGGAATCGAC-1': 1, + 'CACCGGGACGAGAG-1': 1, 'CACCGGGACGTGTA-1': 1, 'CACCGGGACTTCTA-1': 1, 'CACCGGGACTTGCC-1': 1, + 'CACCGGGATTCGGA-1': 1, 'CACCGTACTAAGGA-1': 1, 'CACCGTACTAGCGT-1': 1, 'CACCTGACACCCAA-1': 1, + 'CACCTGACCAGAAA-1': 1, 'CACCTGACCTCAAG-1': 1, 'CACCTGACGAAAGT-1': 1, 'CACCTGACTCGTAG-1': 1, + 'CACGAAACTTCCGC-1': 1, 'CACGACCTCGATAC-1': 1, 'CACGCTACAGAAGT-1': 1, 'CACGCTACTGTTCT-1': 1, + 'CACGGGACAGAGTA-1': 1, 'CACGGGACATAAGG-1': 1, 'CACGGGACGTAGGG-1': 1, 'CACGGGTGCTTCGC-1': 1, + 'CACGGGTGGAGGAC-1': 1, 'CACGGGTGTGTTTC-1': 1, 'CACTAACTCCTAAG-1': 1, 'CACTAACTGAAAGT-1': 1, + 'CACTAGGATGATGC-1': 1, 'CACTATACCCCGTT-1': 1, 'CACTATACGTTTGG-1': 1, 'CACTGAGACAGTCA-1': 1, + 'CACTGCACTTCATC-1': 1, 'CACTGCTGAGACTC-1': 1, 'CACTGCTGGAAAGT-1': 1, 'CACTTAACCGAATC-1': 1, + 'CACTTAACCGTACA-1': 1, 'CACTTTGACTCTAT-1': 1, 'CACTTTGAGCTGTA-1': 1, 'CAGAAGCTCTCAAG-1': 1, + 'CAGACATGAACGGG-1': 1, 'CAGACATGTCGACA-1': 1, 'CAGACCCTAAGGTA-1': 1, 'CAGACCCTAATGCC-1': 1, + 'CAGACCCTAGGAGC-1': 1, 'CAGACTGAGTATGC-1': 1, 'CAGATCGAATGTCG-1': 1, 'CAGATCGACCTGAA-1': 1, + 'CAGATCGATATGGC-1': 1, 'CAGATGACATTCTC-1': 1, 'CAGCAATGCCTTCG-1': 1, 'CAGCAATGGAGGGT-1': 1, + 'CAGCAATGGTGCTA-1': 1, 'CAGCAATGTCTACT-1': 1, 'CAGCAATGTGACCA-1': 1, 'CAGCAATGTGAGGG-1': 1, + 'CAGCACCTAAGCCT-1': 1, 'CAGCACCTAGGCGA-1': 1, 'CAGCACCTGTAGGG-1': 1, 'CAGCATGACAACCA-1': 1, + 'CAGCATGAGACGTT-1': 1, 'CAGCCTACCCAACA-1': 1, 'CAGCCTTGCTACCC-1': 1, 'CAGCCTTGGGGACA-1': 1, + 'CAGCGGACACCCTC-1': 1, 'CAGCGGACCTTTAC-1': 1, 'CAGCGTCTAAAGCA-1': 1, 'CAGCGTCTTATCGG-1': 1, + 'CAGCTAGATGTGAC-1': 1, 'CAGCTCTGAGGCGA-1': 1, 'CAGCTCTGCAAGCT-1': 1, 'CAGCTCTGTCGTAG-1': 1, + 'CAGCTCTGTGTGGT-1': 1, 'CAGGAACTAACTGC-1': 1, 'CAGGAACTCTCAGA-1': 1, 'CAGGCCGAACACCA-1': 1, + 'CAGGCCGAACACGT-1': 1, 'CAGGCCGAACGACT-1': 1, 'CAGGCCGAATCTCT-1': 1, 'CAGGCCGACTAGCA-1': 1, + 'CAGGGCACCATACG-1': 1, 'CAGGGCACCCAACA-1': 1, 'CAGGGCACTCCCGT-1': 1, 'CAGGTAACAGACTC-1': 1, + 'CAGGTATGAGTCGT-1': 1, 'CAGGTATGTGCTTT-1': 1, 'CAGGTTGAGGATCT-1': 1, 'CAGTGATGGACGGA-1': 1, + 'CAGTGATGGCTAAC-1': 1, 'CAGTGATGGGACAG-1': 1, 'CAGTGATGTAAGGA-1': 1, 'CAGTGATGTACGCA-1': 1, + 'CAGTGTGATGTCAG-1': 1, 'CAGTTACTAAGGTA-1': 1, 'CAGTTACTGATAGA-1': 1, 'CAGTTGGAAAGAGT-1': 1, + 'CAGTTGGACATACG-1': 1, 'CAGTTTACACACGT-1': 1, 'CAGTTTACCCCAAA-1': 1, 'CATAAAACGGAGCA-1': 1, + 'CATAAATGAACTGC-1': 1, 'CATAACCTTCTCCG-1': 1, 'CATACTACCTCGAA-1': 1, 'CATACTACCTGAAC-1': 1, + 'CATACTACGTACCA-1': 1, 'CATACTTGGGTTAC-1': 1, 'CATAGTCTAATCGC-1': 1, 'CATAGTCTCACTTT-1': 1, + 'CATATAGACTAAGC-1': 1, 'CATATAGATCAGGT-1': 1, 'CATCAACTAGAAGT-1': 1, 'CATCAACTCCCTCA-1': 1, + 'CATCAGGACTTCCG-1': 1, 'CATCAGGATAGCCA-1': 1, 'CATCAGGATCCTAT-1': 1, 'CATCAGGATGCACA-1': 1, + 'CATCAGGATTTCGT-1': 1, 'CATCATACCGCATA-1': 1, 'CATCATACGGAGCA-1': 1, 'CATCATACTCAAGC-1': 1, + 'CATCGCTGGGATCT-1': 1, 'CATCGCTGTGGCAT-1': 1, 'CATCGGCTATGCTG-1': 1, 'CATCGGCTTTGGCA-1': 1, + 'CATCTCCTATGTGC-1': 1, 'CATCTCCTCGAACT-1': 1, 'CATGAGACACGGGA-1': 1, 'CATGAGACGTTGAC-1': 1, + 'CATGAGACTCGCCT-1': 1, 'CATGCCACGGGTGA-1': 1, 'CATGCCACTGCCAA-1': 1, 'CATGCGCTAGTCAC-1': 1, + 'CATGCGCTCAGATC-1': 1, 'CATGCGCTTTGCAG-1': 1, 'CATGGCCTAGGGTG-1': 1, 'CATGGCCTGTGCAT-1': 1, + 'CATGTACTATCGTG-1': 1, 'CATGTTACAGTCGT-1': 1, 'CATGTTACCTGAGT-1': 1, 'CATGTTTGGGGATG-1': 1, + 'CATTACACACGGAG-1': 1, 'CATTACACCAACTG-1': 1, 'CATTACACGGAGTG-1': 1, 'CATTACACTACTCT-1': 1, + 'CATTAGCTCCACAA-1': 1, 'CATTGACTAGCGGA-1': 1, 'CATTGGGACTCGAA-1': 1, 'CATTGTACAGCGTT-1': 1, + 'CATTGTACTCGATG-1': 1, 'CATTGTACTTATCC-1': 1, 'CATTGTACTTTGCT-1': 1, 'CATTGTTGCTAGTG-1': 1, + 'CATTTCGACTCTAT-1': 1, 'CATTTCGAGATACC-1': 1, 'CATTTGACCACACA-1': 1, 'CATTTGACCCTGAA-1': 1, + 'CATTTGTGACGACT-1': 1, 'CATTTGTGCATTGG-1': 1, 'CATTTGTGCGGAGA-1': 1, 'CATTTGTGGGATCT-1': 1, + 'CCAAAGTGCTACGA-1': 1, 'CCAAAGTGTGAGAA-1': 1, 'CCAACCTGAAGTAG-1': 1, 'CCAACCTGACGTAC-1': 1, + 'CCAACCTGTTCGCC-1': 1, 'CCAAGAACCCAATG-1': 1, 'CCAAGAACGTAGCT-1': 1, 'CCAAGAACGTGTCA-1': 1, + 'CCAAGAACTACTGG-1': 1, 'CCAAGAACTCCTAT-1': 1, 'CCAAGATGTCATTC-1': 1, 'CCAAGATGTTTCAC-1': 1, + 'CCAAGTGAGGAACG-1': 1, 'CCAAGTGATCAAGC-1': 1, 'CCAATTTGAACGTC-1': 1, 'CCACCATGAACGTC-1': 1, + 'CCACCATGATCGGT-1': 1, 'CCACCATGGACGAG-1': 1, 'CCACCATGGGGAGT-1': 1, 'CCACCATGTCCTGC-1': 1, + 'CCACTGACCCGCTT-1': 1, 'CCACTGTGGGAAGC-1': 1, 'CCACTGTGTGTAGC-1': 1, 'CCACTTCTCGGGAA-1': 1, + 'CCAGAAACCCTGTC-1': 1, 'CCAGAAACGAACTC-1': 1, 'CCAGAAACGGTCTA-1': 1, 'CCAGACCTCTGAGT-1': 1, + 'CCAGACCTTGTGGT-1': 1, 'CCAGCACTGCGATT-1': 1, 'CCAGCGGAAAGGCG-1': 1, 'CCAGCGGACGACTA-1': 1, + 'CCAGCGGATGGGAG-1': 1, 'CCAGCTACACAGTC-1': 1, 'CCAGCTACCAGCTA-1': 1, 'CCAGGTCTACACCA-1': 1, + 'CCAGGTCTAGCATC-1': 1, 'CCAGGTCTATGGTC-1': 1, 'CCAGTCACACTGGT-1': 1, 'CCAGTCACACTGTG-1': 1, + 'CCAGTCACGTTGTG-1': 1, 'CCAGTGCTAACCAC-1': 1, 'CCAGTGCTCGTAGT-1': 1, 'CCATCCGAAAGCAA-1': 1, + 'CCATCCGAACGACT-1': 1, 'CCATCCGAAGGTTC-1': 1, 'CCATCCGATTCGCC-1': 1, 'CCATCGTGAACGGG-1': 1, + 'CCATCGTGCTAGAC-1': 1, 'CCCAACACCTCGCT-1': 1, 'CCCAACACGCATCA-1': 1, 'CCCAACACTTTGTC-1': 1, + 'CCCAACTGCAATCG-1': 1, 'CCCAGACTGCCTTC-1': 1, 'CCCAGACTGGTTTG-1': 1, 'CCCAGACTTTCGCC-1': 1, + 'CCCAGTTGCAGTTG-1': 1, 'CCCAGTTGGGTACT-1': 1, 'CCCAGTTGTCTATC-1': 1, 'CCCGATTGTGTTTC-1': 1, + 'CCCGGAGAAGGGTG-1': 1, 'CCCTACGAATTGGC-1': 1, 'CCCTAGTGCAAAGA-1': 1, 'CCCTCAGACACTTT-1': 1, + 'CCCTCAGACGAGAG-1': 1, 'CCCTCAGAGGTCAT-1': 1, 'CCCTGAACTAAAGG-1': 1, 'CCCTGATGCAACCA-1': 1, + 'CCCTGATGCAAGCT-1': 1, 'CCCTTACTAACCAC-1': 1, 'CCCTTACTGCAGTT-1': 1, 'CCGAAAACCTTGTT-1': 1, + 'CCGACACTGGTTTG-1': 1, 'CCGACTACCCAGTA-1': 1, 'CCGACTACCGTGTA-1': 1, 'CCGACTACTGAGGG-1': 1, + 'CCGATAGACCTAAG-1': 1, 'CCGATAGAGTTGGT-1': 1, 'CCGCGAGACACACA-1': 1, 'CCGCGAGAGGTTCA-1': 1, + 'CCGCTATGGGACGA-1': 1, 'CCGCTATGTGCAAC-1': 1, 'CCGCTATGTGCACA-1': 1, 'CCGGTACTGTCCTC-1': 1, + 'CCGTACACAAGCAA-1': 1, 'CCGTACACAGCGTT-1': 1, 'CCGTACACGTCATG-1': 1, 'CCGTACACGTTGGT-1': 1, + 'CCGTACACTAACGC-1': 1, 'CCTAAACTTTCGTT-1': 1, 'CCTAAGGACCCAAA-1': 1, 'CCTAAGGACTAGCA-1': 1, + 'CCTAAGGAGGGCAA-1': 1, 'CCTAAGGATGATGC-1': 1, 'CCTAAGGATGTCAG-1': 1, 'CCTACCGACTCTTA-1': 1, + 'CCTACCGAGGGATG-1': 1, 'CCTAGAGAGGTGAG-1': 1, 'CCTATAACCAAAGA-1': 1, 'CCTATAACGAGACG-1': 1, + 'CCTATAACTCAGAC-1': 1, 'CCTATAACTGCATG-1': 1, 'CCTCGAACACTTTC-1': 1, 'CCTCGAACCCGTAA-1': 1, + 'CCTCGAACGTATCG-1': 1, 'CCTCGAACTTACTC-1': 1, 'CCTCTACTCTTCGC-1': 1, 'CCTCTACTGGCATT-1': 1, + 'CCTGACTGAAGTAG-1': 1, 'CCTGACTGGGGAGT-1': 1, 'CCTGACTGTGTCTT-1': 1, 'CCTGCAACACGTTG-1': 1, + 'CCTGGACTCGTGAT-1': 1, 'CCTTAATGCCCAAA-1': 1, 'CCTTAATGTTCTAC-1': 1, 'CCTTCACTACGACT-1': 1, + 'CCTTCACTCAGTCA-1': 1, 'CCTTCACTGGAGTG-1': 1, 'CCTTTAGATTCATC-1': 1, 'CGAACATGCCCTAC-1': 1, + 'CGAACATGTCAGAC-1': 1, 'CGAAGACTGGAACG-1': 1, 'CGAAGACTGTTACG-1': 1, 'CGAAGGGAAACCTG-1': 1, + 'CGAAGGGATCCGAA-1': 1, 'CGAAGTACCAACTG-1': 1, 'CGAATCGAGGAGCA-1': 1, 'CGAATCGAGGAGGT-1': 1, + 'CGACAAACCCATAG-1': 1, 'CGACAAACCGACAT-1': 1, 'CGACCACTAAAGTG-1': 1, 'CGACCACTGCCAAT-1': 1, + 'CGACCGGAAGGTCT-1': 1, 'CGACCGGATGGAAA-1': 1, 'CGACCTTGCTAGTG-1': 1, 'CGACGTCTATCGTG-1': 1, + 'CGACGTCTCGTGTA-1': 1, 'CGACGTCTGAGGCA-1': 1, 'CGACTCACGTCGTA-1': 1, 'CGACTCACGTTGCA-1': 1, + 'CGACTCTGTGTGAC-1': 1, 'CGACTGCTTCCTCG-1': 1, 'CGAGAACTAAGGCG-1': 1, 'CGAGAACTACGTTG-1': 1, + 'CGAGAACTTGTTCT-1': 1, 'CGAGATTGGACACT-1': 1, 'CGAGATTGGCCATA-1': 1, 'CGAGCCGAACACCA-1': 1, + 'CGAGCCGAGGCGAA-1': 1, 'CGAGCGTGCTCCAC-1': 1, 'CGAGCGTGGATACC-1': 1, 'CGAGCGTGTATGCG-1': 1, + 'CGAGGAGACCTCCA-1': 1, 'CGAGGAGATGTCGA-1': 1, 'CGAGGCACCTATGG-1': 1, 'CGAGGCACTATGCG-1': 1, + 'CGAGGCACTCTTCA-1': 1, 'CGAGGCTGACGCTA-1': 1, 'CGAGGCTGGCAGTT-1': 1, 'CGAGGGCTACGACT-1': 1, + 'CGAGGGCTCGAATC-1': 1, 'CGAGTATGTCACCC-1': 1, 'CGATACGAACAGTC-1': 1, 'CGATACGACAGGAG-1': 1, + 'CGATACGATTCACT-1': 1, 'CGATAGACCCGTAA-1': 1, 'CGATAGACCGTACA-1': 1, 'CGATAGACGTAGGG-1': 1, + 'CGATAGACTGTTCT-1': 1, 'CGATCAGAAGAACA-1': 1, 'CGATCAGAGAGGGT-1': 1, 'CGATCAGAGGTACT-1': 1, + 'CGATCAGATGTGAC-1': 1, 'CGATCCACCGGGAA-1': 1, 'CGATCCACTTCCAT-1': 1, 'CGCAAATGCTCGAA-1': 1, + 'CGCAACCTCCTTGC-1': 1, 'CGCAACCTGGACGA-1': 1, 'CGCACGGAGGACGA-1': 1, 'CGCACGGATCTTTG-1': 1, + 'CGCACTACAGAATG-1': 1, 'CGCACTACAGCCAT-1': 1, 'CGCACTACATTGGC-1': 1, 'CGCACTACTCGCCT-1': 1, + 'CGCACTACTCGTGA-1': 1, 'CGCACTTGTCACGA-1': 1, 'CGCAGGACAGATCC-1': 1, 'CGCAGGACCTACTT-1': 1, + 'CGCAGGACTTGTCT-1': 1, 'CGCAGGTGCACTGA-1': 1, 'CGCAGGTGCCATAG-1': 1, 'CGCAGGTGGGAACG-1': 1, + 'CGCATAGATCACGA-1': 1, 'CGCCATACTGCAAC-1': 1, 'CGCCATTGAGAGGC-1': 1, 'CGCCATTGCTATGG-1': 1, + 'CGCCATTGGAGACG-1': 1, 'CGCCATTGGAGCAG-1': 1, 'CGCCATTGTACTGG-1': 1, 'CGCCGAGAGCTTAG-1': 1, + 'CGCCTAACGAATGA-1': 1, 'CGCCTAACTGCTCC-1': 1, 'CGCGAGACACAGCT-1': 1, 'CGCGAGACAGGTCT-1': 1, + 'CGCGAGACGCTACA-1': 1, 'CGCGATCTCAGTCA-1': 1, 'CGCGATCTGTTGAC-1': 1, 'CGCGATCTTTCTTG-1': 1, + 'CGCGGATGGCCAAT-1': 1, 'CGCTAAGAATGTCG-1': 1, 'CGCTAAGACAACTG-1': 1, 'CGCTAAGACCCTTG-1': 1, + 'CGCTACTGAACAGA-1': 1, 'CGCTACTGAGAACA-1': 1, 'CGCTACTGTGAGCT-1': 1, 'CGCTACTGTTCCCG-1': 1, + 'CGCTCATGCATTTC-1': 1, 'CGGAATTGGTTTGG-1': 1, 'CGGAATTGTGGAGG-1': 1, 'CGGACCGATGCGTA-1': 1, + 'CGGACCGATGGGAG-1': 1, 'CGGACTCTAAACAG-1': 1, 'CGGACTCTCCAATG-1': 1, 'CGGACTCTCCTCGT-1': 1, + 'CGGAGGCTATTCCT-1': 1, 'CGGAGGCTTGGATC-1': 1, 'CGGATAACAACGAA-1': 1, 'CGGATAACAGCTCA-1': 1, + 'CGGATAACTCAGTG-1': 1, 'CGGCACGAACTCAG-1': 1, 'CGGCACGAAGGGTG-1': 1, 'CGGCACGACTACGA-1': 1, + 'CGGCATCTTAGAAG-1': 1, 'CGGCATCTTCGTAG-1': 1, 'CGGCCAGAAAGGTA-1': 1, 'CGGCCAGAGAGGCA-1': 1, + 'CGGCGAACCAGTCA-1': 1, 'CGGCGAACGACAAA-1': 1, 'CGGCGAACGGTCTA-1': 1, 'CGGCGAACTACTTC-1': 1, + 'CGGGACTGCGTGTA-1': 1, 'CGGGACTGGAATAG-1': 1, 'CGGGCATGACCCAA-1': 1, 'CGGGCATGTCTCTA-1': 1, + 'CGGGCATGTTGTGG-1': 1, 'CGGTAAACTCGCAA-1': 1, 'CGGTCACTGTTTGG-1': 1, 'CGGTCACTTACTTC-1': 1, + 'CGTAACGATCGCCT-1': 1, 'CGTACCACACACAC-1': 1, 'CGTACCACACGTTG-1': 1, 'CGTACCACCTCATT-1': 1, + 'CGTACCACGGAGCA-1': 1, 'CGTACCTGGCATCA-1': 1, 'CGTAGCCTCTCTCG-1': 1, 'CGTAGCCTGCGAAG-1': 1, + 'CGTAGCCTGTATGC-1': 1, 'CGTCAAGAAAGGTA-1': 1, 'CGTCAAGAACGTGT-1': 1, 'CGTCAAGACAGAGG-1': 1, + 'CGTCAAGACAGGAG-1': 1, 'CGTCCATGCTCTTA-1': 1, 'CGTCGACTTTCCGC-1': 1, 'CGTGATGACGCTAA-1': 1, + 'CGTGATGAGGTTCA-1': 1, 'CGTGCACTTATGGC-1': 1, 'CGTGTAGAAAAACG-1': 1, 'CGTGTAGACGATAC-1': 1, + 'CGTGTAGAGTTACG-1': 1, 'CGTGTAGAGTTCAG-1': 1, 'CGTGTAGATTCGGA-1': 1, 'CGTTAGGAAACCAC-1': 1, + 'CGTTAGGATCATTC-1': 1, 'CGTTATACCCTGAA-1': 1, 'CGTTTAACTGGTCA-1': 1, 'CTAAACCTCTGACA-1': 1, + 'CTAAACCTGTGCAT-1': 1, 'CTAACACTAACGTC-1': 1, 'CTAACACTAGTGCT-1': 1, 'CTAACGGAACCGAT-1': 1, + 'CTAACGGATTTCTG-1': 1, 'CTAACTACGGCAAG-1': 1, 'CTAAGGACACCATG-1': 1, 'CTAAGGACCGTTAG-1': 1, + 'CTAAGGACGCCATA-1': 1, 'CTAAGGTGCCTAAG-1': 1, 'CTAAGGTGTTGCAG-1': 1, 'CTAAGGTGTTTCTG-1': 1, + 'CTAATAGAGCTATG-1': 1, 'CTAATGCTTGTGGT-1': 1, 'CTACAACTCCCGTT-1': 1, 'CTACCTCTCAACCA-1': 1, + 'CTACGCACACCTAG-1': 1, 'CTACGCACTCTCCG-1': 1, 'CTACGCACTGGTCA-1': 1, 'CTACGGCTTTCTTG-1': 1, + 'CTACTATGAACCAC-1': 1, 'CTACTATGATGTGC-1': 1, 'CTACTATGCTAAGC-1': 1, 'CTACTATGTAAAGG-1': 1, + 'CTACTCCTATGTCG-1': 1, 'CTACTCCTGCCATA-1': 1, 'CTAGAGACACTTTC-1': 1, 'CTAGAGACAGCATC-1': 1, + 'CTAGAGACTTTGGG-1': 1, 'CTAGATCTCTCTAT-1': 1, 'CTAGATCTTCGACA-1': 1, 'CTAGGATGAGCCTA-1': 1, + 'CTAGGATGATCGTG-1': 1, 'CTAGGCCTCTCAGA-1': 1, 'CTAGGTGATGGTTG-1': 1, 'CTAGTTACCAGAGG-1': 1, + 'CTAGTTACCGCATA-1': 1, 'CTAGTTACGAAACA-1': 1, 'CTATAAGATCGTTT-1': 1, 'CTATACTGAGGTTC-1': 1, + 'CTATACTGCCAGTA-1': 1, 'CTATACTGCGCTAA-1': 1, 'CTATACTGCTACGA-1': 1, 'CTATACTGTCTCAT-1': 1, + 'CTATACTGTTCGTT-1': 1, 'CTATAGCTGTCACA-1': 1, 'CTATAGCTTCGCTC-1': 1, 'CTATAGCTTGCCTC-1': 1, + 'CTATCAACGAACTC-1': 1, 'CTATCAACGCAGAG-1': 1, 'CTATCAACTTTGGG-1': 1, 'CTATCCCTCCACCT-1': 1, + 'CTATGTACGAGAGC-1': 1, 'CTATGTACGCTTAG-1': 1, 'CTATGTACTGTTTC-1': 1, 'CTATGTTGAAAGCA-1': 1, + 'CTATGTTGTCCTCG-1': 1, 'CTATGTTGTCTCGC-1': 1, 'CTATTGACAAACGA-1': 1, 'CTATTGACACTGGT-1': 1, + 'CTATTGACGGTGAG-1': 1, 'CTATTGTGGCAAGG-1': 1, 'CTCAATTGGTTCAG-1': 1, 'CTCAATTGGTTGCA-1': 1, + 'CTCAGAGATAGAAG-1': 1, 'CTCAGCACTCTAGG-1': 1, 'CTCAGCACTGAACC-1': 1, 'CTCAGCACTTGCAG-1': 1, + 'CTCAGCTGAACCTG-1': 1, 'CTCAGCTGCAGTTG-1': 1, 'CTCAGGCTCGTTGA-1': 1, 'CTCAGGCTGCTAAC-1': 1, + 'CTCATTGACCTTAT-1': 1, 'CTCATTGATGCTTT-1': 1, 'CTCCACGAGAGATA-1': 1, 'CTCCATCTCTTAGG-1': 1, + 'CTCCATCTGACGAG-1': 1, 'CTCCGAACAAGTGA-1': 1, 'CTCCTACTGCCTTC-1': 1, 'CTCGAAGATGTGGT-1': 1, + 'CTCGAAGATTAGGC-1': 1, 'CTCGACTGCTCTAT-1': 1, 'CTCGACTGGGTGAG-1': 1, 'CTCGACTGGTTGAC-1': 1, + 'CTCGAGCTCTGGAT-1': 1, 'CTCGCATGACTTTC-1': 1, 'CTCGCATGCTTAGG-1': 1, 'CTCTAAACCTCGAA-1': 1, + 'CTCTAAACGGCGAA-1': 1, 'CTCTAATGTCCAAG-1': 1, 'CTGAACGACAGTCA-1': 1, 'CTGAACGATGAGGG-1': 1, + 'CTGAAGACCCAACA-1': 1, 'CTGAAGACGTGCAT-1': 1, 'CTGAAGTGAAGCCT-1': 1, 'CTGAAGTGCAGCTA-1': 1, + 'CTGAAGTGGCTATG-1': 1, 'CTGAAGTGTCCAGA-1': 1, 'CTGAATCTGAATAG-1': 1, 'CTGACAGAATCGTG-1': 1, + 'CTGACCACAGCAAA-1': 1, 'CTGAGAACCGGGAA-1': 1, 'CTGAGAACGTAAAG-1': 1, 'CTGATACTAGTAGA-1': 1, + 'CTGATTTGGTGTTG-1': 1, 'CTGCAGCTAACCGT-1': 1, 'CTGCAGCTGACACT-1': 1, 'CTGCAGCTGGATTC-1': 1, + 'CTGCAGCTTGGCAT-1': 1, 'CTGCCAACAGGAGC-1': 1, 'CTGCCAACCAGCTA-1': 1, 'CTGCCAACTAACCG-1': 1, + 'CTGCCAACTGCTCC-1': 1, 'CTGCCAACTTGCAG-1': 1, 'CTGCCAACTTGCTT-1': 1, 'CTGCGACTCCACCT-1': 1, + 'CTGGAAACAAACGA-1': 1, 'CTGGAAACATCGAC-1': 1, 'CTGGATGACTGGAT-1': 1, 'CTGGATGACTTGTT-1': 1, + 'CTGGATGATGTGAC-1': 1, 'CTGGCACTCAAGCT-1': 1, 'CTGTAACTAACCAC-1': 1, 'CTGTAACTAGCGTT-1': 1, + 'CTGTATACGTAAAG-1': 1, 'CTGTATACGTACGT-1': 1, 'CTGTATACGTTGGT-1': 1, 'CTGTGAGACAACCA-1': 1, + 'CTGTGAGACCTTGC-1': 1, 'CTGTGAGACGAACT-1': 1, 'CTGTGAGACTGTAG-1': 1, 'CTTAAAGAACCTGA-1': 1, + 'CTTAACACCTGTAG-1': 1, 'CTTAACACTATCGG-1': 1, 'CTTAAGCTACCTAG-1': 1, 'CTTAAGCTAGTACC-1': 1, + 'CTTAAGCTCATCAG-1': 1, 'CTTAAGCTCCGCTT-1': 1, 'CTTACAACTAACGC-1': 1, 'CTTACAACTCCCGT-1': 1, + 'CTTACTGACGTACA-1': 1, 'CTTAGACTAAACGA-1': 1, 'CTTAGGGACTTGCC-1': 1, 'CTTAGGGAGAATCC-1': 1, + 'CTTATCGACTCATT-1': 1, 'CTTCACCTACCTGA-1': 1, 'CTTCATGAAGCATC-1': 1, 'CTTCATGAAGTACC-1': 1, + 'CTTCATGACCGAAT-1': 1, 'CTTGAACTACGCAT-1': 1, 'CTTGATTGAGGTTC-1': 1, 'CTTGATTGATCTTC-1': 1, + 'CTTGATTGCATTCT-1': 1, 'CTTGATTGTTTCGT-1': 1, 'CTTGTATGACACCA-1': 1, 'CTTGTATGCGCAAT-1': 1, + 'CTTTACGAGCGAAG-1': 1, 'CTTTAGACCGTGAT-1': 1, 'CTTTAGACGAGACG-1': 1, 'CTTTAGACGATACC-1': 1, + 'CTTTAGACGTTGGT-1': 1, 'CTTTAGACTCATTC-1': 1, 'CTTTAGTGACGGGA-1': 1, 'CTTTAGTGGGTGGA-1': 1, + 'CTTTCAGAGAAACA-1': 1, 'CTTTGATGAGCACT-1': 1, 'CTTTGATGTCTAGG-1': 1, 'CTTTGATGTGTCCC-1': 1, + 'CTTTGATGTGTGGT-1': 1, 'GAAACAGAACTACG-1': 1, 'GAAACAGAATCACG-1': 1, 'GAAACAGACATTCT-1': 1, + 'GAAACCTGATCGTG-1': 1, 'GAAACCTGATGCCA-1': 1, 'GAAACCTGCTTATC-1': 1, 'GAAACCTGGACTAC-1': 1, + 'GAAACCTGTGCTAG-1': 1, 'GAAAGATGATTTCC-1': 1, 'GAAAGATGCTGATG-1': 1, 'GAAAGATGCTTCGC-1': 1, + 'GAAAGATGTAAGGA-1': 1, 'GAAAGCCTACGTTG-1': 1, 'GAAAGTGAAAGTGA-1': 1, 'GAAAGTGACCACAA-1': 1, + 'GAAAGTGACTCAAG-1': 1, 'GAAATACTACCAAC-1': 1, 'GAAATACTCTTAGG-1': 1, 'GAAATACTTCCTCG-1': 1, + 'GAACACACGTGCAT-1': 1, 'GAACACACTGCCTC-1': 1, 'GAACAGCTAACTGC-1': 1, 'GAACAGCTCTCAGA-1': 1, + 'GAACCAACCACAAC-1': 1, 'GAACCAACTTCCGC-1': 1, 'GAACCTGAACGTGT-1': 1, 'GAACCTGAGAGACG-1': 1, + 'GAACCTGATGAACC-1': 1, 'GAACGGGATACTTC-1': 1, 'GAACTGTGACCTGA-1': 1, 'GAACTGTGCCAGTA-1': 1, + 'GAAGAATGCAATCG-1': 1, 'GAAGCGGACCTATT-1': 1, 'GAAGCTACGAATGA-1': 1, 'GAAGCTACGGTTTG-1': 1, + 'GAAGGGTGAAAGTG-1': 1, 'GAAGGGTGCTTAGG-1': 1, 'GAAGGTCTGAAAGT-1': 1, 'GAAGGTCTGTTGCA-1': 1, + 'GAAGGTCTTAAAGG-1': 1, 'GAAGTAGACTCCCA-1': 1, 'GAAGTAGATCCAAG-1': 1, 'GAAGTCACCCTCGT-1': 1, + 'GAAGTCACCCTGTC-1': 1, 'GAAGTCTGTCGCAA-1': 1, 'GAAGTCTGTTCTGT-1': 1, 'GAAGTGCTAAACGA-1': 1, + 'GAAGTGCTCCGCTT-1': 1, 'GAAGTGCTTAACCG-1': 1, 'GAATGCACCCTAAG-1': 1, 'GAATGCACCTTCGC-1': 1, + 'GAATGCTGCGGTAT-1': 1, 'GAATTAACGATAAG-1': 1, 'GAATTAACGGTCAT-1': 1, 'GAATTAACGTCGTA-1': 1, + 'GAATTAACTGAAGA-1': 1, 'GACAACACAGGCGA-1': 1, 'GACAACACATCGTG-1': 1, 'GACAACACTCGCCT-1': 1, + 'GACAACTGAGGTTC-1': 1, 'GACAGGGAAGAGTA-1': 1, 'GACAGGGAATGCCA-1': 1, 'GACAGTACGAGCTT-1': 1, + 'GACAGTACTTCGGA-1': 1, 'GACAGTTGAGTAGA-1': 1, 'GACATTCTCCACCT-1': 1, 'GACCAAACGACTAC-1': 1, + 'GACCAAACGTATCG-1': 1, 'GACCCTACTAAAGG-1': 1, 'GACCTAGACCTCAC-1': 1, 'GACCTAGACGAGAG-1': 1, + 'GACCTCACAAGGTA-1': 1, 'GACCTCACGTACGT-1': 1, 'GACCTCTGCATCAG-1': 1, 'GACGAACTCCCACT-1': 1, + 'GACGATTGCCAATG-1': 1, 'GACGCCGACCTTCG-1': 1, 'GACGCTCTCTCTCG-1': 1, 'GACGGCACACGGGA-1': 1, + 'GACGGCACGAGATA-1': 1, 'GACGTAACCTATGG-1': 1, 'GACGTAACCTGTGA-1': 1, 'GACGTAACTATGGC-1': 1, + 'GACGTATGTTGACG-1': 1, 'GACGTATGTTTGCT-1': 1, 'GACGTCCTACGGAG-1': 1, 'GACGTCCTCTCAAG-1': 1, + 'GACGTCCTGATAAG-1': 1, 'GACTACGATGGTCA-1': 1, 'GACTCCTGCTCGCT-1': 1, 'GACTCCTGGGTTAC-1': 1, + 'GACTCCTGTTATCC-1': 1, 'GACTCCTGTTGGTG-1': 1, 'GACTGAACCAATCG-1': 1, 'GACTGATGTGATGC-1': 1, + 'GACTTTACATGCCA-1': 1, 'GACTTTACGACAGG-1': 1, 'GAGAAATGTTCTCA-1': 1, 'GAGATAGAAAAAGC-1': 1, + 'GAGATCACGACAAA-1': 1, 'GAGATGCTCTGGAT-1': 1, 'GAGATGCTGAATGA-1': 1, 'GAGCAGGATTCCCG-1': 1, + 'GAGCATACTTTGCT-1': 1, 'GAGCGCACGCGTAT-1': 1, 'GAGCGCACGGTGAG-1': 1, 'GAGCGCTGAAGATG-1': 1, + 'GAGCGCTGTCTTAC-1': 1, 'GAGCGGCTGGGAGT-1': 1, 'GAGGACGACTCAGA-1': 1, 'GAGGATCTGAAAGT-1': 1, + 'GAGGCAGACTTGCC-1': 1, 'GAGGGAACACCAGT-1': 1, 'GAGGGAACGAGGGT-1': 1, 'GAGGGATGGGAAAT-1': 1, + 'GAGGGCCTTCACCC-1': 1, 'GAGGGTGAAGAGTA-1': 1, 'GAGGTACTACGGTT-1': 1, 'GAGGTACTACTCAG-1': 1, + 'GAGGTACTGACACT-1': 1, 'GAGGTACTGGGAGT-1': 1, 'GAGGTACTTAGCGT-1': 1, 'GAGGTGGAGTACGT-1': 1, + 'GAGGTGGATCCTCG-1': 1, 'GAGGTTACTCGTTT-1': 1, 'GAGGTTTGTAAGCC-1': 1, 'GAGTCAACCATTCT-1': 1, + 'GAGTCAACGGGAGT-1': 1, 'GAGTCTGATCGTGA-1': 1, 'GAGTCTGATTTGGG-1': 1, 'GAGTGACTCAGCTA-1': 1, + 'GAGTGACTCGGTAT-1': 1, 'GAGTGACTCTTGCC-1': 1, 'GAGTGACTGACTAC-1': 1, 'GAGTGACTGTCTAG-1': 1, + 'GAGTGGGAGTCTTT-1': 1, 'GAGTGGGATGCCCT-1': 1, 'GAGTGGGATGCTGA-1': 1, 'GAGTGTTGCTGTAG-1': 1, + 'GAGTGTTGTGGTCA-1': 1, 'GAGTTGTGCATGGT-1': 1, 'GAGTTGTGCTGAGT-1': 1, 'GAGTTGTGGCGAGA-1': 1, + 'GAGTTGTGGTAGCT-1': 1, 'GAGTTGTGTATGCG-1': 1, 'GATAAGGAGAAACA-1': 1, 'GATAAGGATTCACT-1': 1, + 'GATACTCTATCGGT-1': 1, 'GATACTCTTACTTC-1': 1, 'GATACTCTTGACTG-1': 1, 'GATAGAGAAGGGTG-1': 1, + 'GATAGAGACTGTGA-1': 1, 'GATAGAGATCACGA-1': 1, 'GATAGCACCCATAG-1': 1, 'GATAGCACGAAGGC-1': 1, + 'GATAGCACTTGTCT-1': 1, 'GATATAACAAGGTA-1': 1, 'GATATAACACGCAT-1': 1, 'GATATATGCTGGAT-1': 1, + 'GATATATGTCCGTC-1': 1, 'GATATATGTGGAGG-1': 1, 'GATATCCTAGAAGT-1': 1, 'GATATCCTCCCGTT-1': 1, + 'GATATTGACAGGAG-1': 1, 'GATATTGACGAGTT-1': 1, 'GATATTGAGCCAAT-1': 1, 'GATCCCTGACCTTT-1': 1, + 'GATCCCTGTGTAGC-1': 1, 'GATCCGCTGGTCAT-1': 1, 'GATCGAACCGAGAG-1': 1, 'GATCGATGACTAGC-1': 1, + 'GATCGATGGTAAAG-1': 1, 'GATCGATGTAAGGA-1': 1, 'GATCGTGACACTAG-1': 1, 'GATCGTGATTCACT-1': 1, + 'GATCTACTGGTGAG-1': 1, 'GATCTACTTTGCAG-1': 1, 'GATCTTACACCCAA-1': 1, 'GATCTTACCCTACC-1': 1, + 'GATCTTACGAATAG-1': 1, 'GATCTTACGAGATA-1': 1, 'GATGCAACTCCAGA-1': 1, 'GATGCCCTACGTAC-1': 1, + 'GATGCCCTCTCATT-1': 1, 'GATGCCCTGGCAAG-1': 1, 'GATGCCCTTTTGCT-1': 1, 'GATTACCTTGTTCT-1': 1, + 'GATTCGGAACGACT-1': 1, 'GATTCGGACAGGAG-1': 1, 'GATTCGGAGAAGGC-1': 1, 'GATTCTTGATTCGG-1': 1, + 'GATTCTTGCCGATA-1': 1, 'GATTCTTGCGAGTT-1': 1, 'GATTGGACCCGTTC-1': 1, 'GATTGGACGGTGTT-1': 1, + 'GATTGGACTTTCGT-1': 1, 'GATTGGTGTGTCAG-1': 1, 'GATTTAGACACTCC-1': 1, 'GATTTAGACTAAGC-1': 1, + 'GATTTAGATTCGTT-1': 1, 'GATTTGCTAACGAA-1': 1, 'GATTTGCTAACGGG-1': 1, 'GCAACCCTCCTCGT-1': 1, + 'GCAACTGATTGCGA-1': 1, 'GCAAGACTACTGGT-1': 1, 'GCAAGACTAGGTCT-1': 1, 'GCAAGACTCCCTTG-1': 1, + 'GCAATCGACTGCAA-1': 1, 'GCAATCGAGACGTT-1': 1, 'GCAATCGATCCTTA-1': 1, 'GCAATTCTCGTGTA-1': 1, + 'GCAATTCTTCTCCG-1': 1, 'GCACAAACAATGCC-1': 1, 'GCACAAACGGTACT-1': 1, 'GCACAATGGTGCAT-1': 1, + 'GCACACCTGTGCTA-1': 1, 'GCACCACTCATGAC-1': 1, 'GCACCACTGTTTGG-1': 1, 'GCACCACTTCCTTA-1': 1, + 'GCACCACTTTCGGA-1': 1, 'GCACCTACGCGATT-1': 1, 'GCACCTTGGCTGTA-1': 1, 'GCACCTTGGGGAGT-1': 1, + 'GCACGGACCAGCTA-1': 1, 'GCACGGTGACCTCC-1': 1, 'GCACGGTGCTATGG-1': 1, 'GCACTAGAACGGGA-1': 1, + 'GCACTAGAAGATGA-1': 1, 'GCACTAGACCTTTA-1': 1, 'GCACTAGACGTAAC-1': 1, 'GCACTAGAGTCGTA-1': 1, + 'GCACTAGATGCAAC-1': 1, 'GCACTGCTGAGGCA-1': 1, 'GCAGATACAGCGTT-1': 1, 'GCAGATACGACGGA-1': 1, + 'GCAGATACGCAGAG-1': 1, 'GCAGCCGACAGTCA-1': 1, 'GCAGCGTGCACTCC-1': 1, 'GCAGCTCTCAATCG-1': 1, + 'GCAGCTCTGTTTCT-1': 1, 'GCAGGGCTAAGAAC-1': 1, 'GCAGGGCTAAGGGC-1': 1, 'GCAGGGCTATCGAC-1': 1, + 'GCAGGGCTTGGGAG-1': 1, 'GCAGTCCTAACTGC-1': 1, 'GCAGTCCTCTCTTA-1': 1, 'GCATCAGATGCGTA-1': 1, + 'GCATGTGACAAGCT-1': 1, 'GCATTGGAGAAGGC-1': 1, 'GCCAAAACGAGGCA-1': 1, 'GCCAAATGATCGAC-1': 1, + 'GCCAACCTACGGTT-1': 1, 'GCCAACCTCGCCTT-1': 1, 'GCCACGGAGGCGAA-1': 1, 'GCCACGGATACTGG-1': 1, + 'GCCACTACGTCTTT-1': 1, 'GCCCAACTACCGAT-1': 1, 'GCCCAACTATGGTC-1': 1, 'GCCCATACAGCGTT-1': 1, + 'GCCGACGAACTCTT-1': 1, 'GCCGAGTGCGTTGA-1': 1, 'GCCGGAACGAACTC-1': 1, 'GCCGGAACGTTCTT-1': 1, + 'GCCGGAACTGCACA-1': 1, 'GCCGGAACTTACTC-1': 1, 'GCCGTACTACCTGA-1': 1, 'GCCGTACTGGCAAG-1': 1, + 'GCCTACACAGTTCG-1': 1, 'GCCTACACCACTGA-1': 1, 'GCCTACACCTTGAG-1': 1, 'GCCTAGCTACGGAG-1': 1, + 'GCCTAGCTCTATTC-1': 1, 'GCCTAGCTTCTCAT-1': 1, 'GCCTAGCTTCTCTA-1': 1, 'GCCTCAACCATGGT-1': 1, + 'GCCTCAACTCTTTG-1': 1, 'GCCTCATGTCTTAC-1': 1, 'GCCTGACTCTCAAG-1': 1, 'GCGAAGGAACTCTT-1': 1, + 'GCGAAGGATGCCAA-1': 1, 'GCGAGAGAGGGACA-1': 1, 'GCGAGCACTGTCGA-1': 1, 'GCGAGCACTTGACG-1': 1, + 'GCGAGCACTTGCTT-1': 1, 'GCGATATGGTACGT-1': 1, 'GCGATATGGTGTTG-1': 1, 'GCGCACGAAGTCGT-1': 1, + 'GCGCACGACTTTAC-1': 1, 'GCGCATCTAGGTCT-1': 1, 'GCGCATCTGGTTAC-1': 1, 'GCGCATCTTCGATG-1': 1, + 'GCGCATCTTGCTCC-1': 1, 'GCGCATCTTTCTAC-1': 1, 'GCGCGAACGTTCTT-1': 1, 'GCGCGATGAACGGG-1': 1, + 'GCGCGATGGTGCAT-1': 1, 'GCGGAGCTCCTGAA-1': 1, 'GCGGCAACCCGATA-1': 1, 'GCGGCAACGGAGGT-1': 1, + 'GCGGCAACTGTCGA-1': 1, 'GCGTAAACACGGTT-1': 1, 'GCGTAATGCACCAA-1': 1, 'GCGTATGAACACCA-1': 1, + 'GCGTATGATGAGAA-1': 1, 'GCTACAGAAAGGTA-1': 1, 'GCTACAGAATCTTC-1': 1, 'GCTACCTGAGAAGT-1': 1, + 'GCTACCTGATCACG-1': 1, 'GCTACGCTAGAATG-1': 1, 'GCTACGCTAGCTAC-1': 1, 'GCTACGCTCCCTAC-1': 1, + 'GCTAGAACAGAGGC-1': 1, 'GCTAGAACGGATCT-1': 1, 'GCTAGAACTCCCGT-1': 1, 'GCTAGATGAGCTCA-1': 1, + 'GCTAGATGGCGATT-1': 1, 'GCTATACTAAGGCG-1': 1, 'GCTATACTAGCGTT-1': 1, 'GCTATACTCTCTTA-1': 1, + 'GCTATACTGGACGA-1': 1, 'GCTCAAGAACCATG-1': 1, 'GCTCAAGAAGTCAC-1': 1, 'GCTCAGCTGTCTAG-1': 1, + 'GCTCCATGAGAAGT-1': 1, 'GCTCCATGCCGAAT-1': 1, 'GCTCGACTCTAGTG-1': 1, 'GCTGATGAGGTATC-1': 1, + 'GCTTAACTACAGTC-1': 1, 'GCTTAACTACTGGT-1': 1, 'GCTTAACTGCTGAT-1': 1, 'GCTTAACTTAGACC-1': 1, + 'GCTTAACTTCAGTG-1': 1, 'GGAACACTCACTTT-1': 1, 'GGAACACTTCAGAC-1': 1, 'GGAACTACTACTTC-1': 1, + 'GGAACTTGAAGGTA-1': 1, 'GGAACTTGAGAATG-1': 1, 'GGAACTTGCTCCAC-1': 1, 'GGAACTTGGGTAGG-1': 1, + 'GGAAGGACATCGGT-1': 1, 'GGAAGGACCACTAG-1': 1, 'GGAAGGACGAGGGT-1': 1, 'GGAAGGACGCGAAG-1': 1, + 'GGAAGGTGGCGAGA-1': 1, 'GGAATCTGAAGGGC-1': 1, 'GGAATCTGAGGAGC-1': 1, 'GGAATCTGCTTAGG-1': 1, + 'GGAATCTGCTTGTT-1': 1, 'GGAATCTGGGAGGT-1': 1, 'GGAATGCTTTCTAC-1': 1, 'GGACAGGAAAGGGC-1': 1, + 'GGACAGGAGTGCTA-1': 1, 'GGACAGGATCTCGC-1': 1, 'GGACCCGAAGCTAC-1': 1, 'GGACCGTGCTTACT-1': 1, + 'GGACCGTGGGAACG-1': 1, 'GGACCGTGTAACGC-1': 1, 'GGACCTCTGTAAGA-1': 1, 'GGACCTCTTTTCTG-1': 1, + 'GGACGAGAGTGTCA-1': 1, 'GGACGCTGACGCAT-1': 1, 'GGACGCTGCTAGCA-1': 1, 'GGACGCTGTCCTCG-1': 1, + 'GGAGAGACGTGAGG-1': 1, 'GGAGCAGATTCAGG-1': 1, 'GGAGCCACCTTCTA-1': 1, 'GGAGCGCTACGCAT-1': 1, + 'GGAGCGCTCCGAAT-1': 1, 'GGAGGATGCCACCT-1': 1, 'GGAGGATGGTTGAC-1': 1, 'GGAGGATGTCAGTG-1': 1, + 'GGAGGCCTCGTTGA-1': 1, 'GGAGGCCTTTCTTG-1': 1, 'GGAGGTGATACGCA-1': 1, 'GGAGGTGATCGCTC-1': 1, + 'GGATACTGCAGCTA-1': 1, 'GGATACTGTCTAGG-1': 1, 'GGATAGCTCGTCTC-1': 1, 'GGATAGCTCTGAAC-1': 1, + 'GGATGTACCAAAGA-1': 1, 'GGATGTACGCGAAG-1': 1, 'GGATGTACGTCTTT-1': 1, 'GGATGTACGTGTCA-1': 1, + 'GGATTTCTAGGTTC-1': 1, 'GGATTTCTTTGTCT-1': 1, 'GGCAAGGAAAAAGC-1': 1, 'GGCAAGGAAGAAGT-1': 1, + 'GGCAAGGACTTGGA-1': 1, 'GGCAAGGAGGACTT-1': 1, 'GGCAATACGCTAAC-1': 1, 'GGCAATACGGCATT-1': 1, + 'GGCAATACGTTTCT-1': 1, 'GGCACGTGGCTTAG-1': 1, 'GGCACTCTTTTGTC-1': 1, 'GGCATATGCTTATC-1': 1, + 'GGCATATGGGGAGT-1': 1, 'GGCATATGTGTGAC-1': 1, 'GGCCACGACAGAGG-1': 1, 'GGCCAGACTGGTTG-1': 1, + 'GGCCCAGAAAGTAG-1': 1, 'GGCCGAACAACGAA-1': 1, 'GGCCGAACGCAGAG-1': 1, 'GGCCGAACGTAGGG-1': 1, + 'GGCCGAACTCTAGG-1': 1, 'GGCCGATGCAGGAG-1': 1, 'GGCCGATGCCGAAT-1': 1, 'GGCCGATGTACTCT-1': 1, + 'GGCGACACTGCCCT-1': 1, 'GGCGACTGCGTAAC-1': 1, 'GGCGCATGCCTAAG-1': 1, 'GGCGCATGCTCCAC-1': 1, + 'GGCGCATGTGGAAA-1': 1, 'GGCGGACTAGAGGC-1': 1, 'GGCGGACTAGGAGC-1': 1, 'GGCGGACTCTGACA-1': 1, + 'GGCGGACTCTTGGA-1': 1, 'GGCGGACTTACTGG-1': 1, 'GGCGGACTTGAACC-1': 1, 'GGCTAAACACCTGA-1': 1, + 'GGCTAAACTCTTAC-1': 1, 'GGCTAATGAGCACT-1': 1, 'GGCTAATGGTCTAG-1': 1, 'GGCTCACTACTCAG-1': 1, + 'GGGAACGAAGCTCA-1': 1, 'GGGAACGACACAAC-1': 1, 'GGGAACGAGTGTCA-1': 1, 'GGGAAGTGTTGAGC-1': 1, + 'GGGACCACACGTTG-1': 1, 'GGGACCACAGAACA-1': 1, 'GGGACCACGAATAG-1': 1, 'GGGACCACGTCATG-1': 1, + 'GGGACCACTCAAGC-1': 1, 'GGGACCACTCGTGA-1': 1, 'GGGACCACTGCATG-1': 1, 'GGGACCTGACCCTC-1': 1, + 'GGGACCTGCTTGCC-1': 1, 'GGGACCTGTGGAGG-1': 1, 'GGGATGGACGACAT-1': 1, 'GGGATGGATACTTC-1': 1, + 'GGGATGGATGGTTG-1': 1, 'GGGATTACGTCTAG-1': 1, 'GGGCAAGATGCATG-1': 1, 'GGGCACACGGTGAG-1': 1, + 'GGGCACACGTTGCA-1': 1, 'GGGCAGCTTGGGAG-1': 1, 'GGGCAGCTTTTCTG-1': 1, 'GGGCCAACCTTGGA-1': 1, + 'GGGCCAACGCGTTA-1': 1, 'GGGCCAACTACGCA-1': 1, 'GGGCCAACTCCAAG-1': 1, 'GGGCCATGATGGTC-1': 1, + 'GGGCCATGTTGACG-1': 1, 'GGGTAACTCAGCTA-1': 1, 'GGGTAACTCTAGTG-1': 1, 'GGGTAACTCTGGAT-1': 1, + 'GGGTTAACGTGCAT-1': 1, 'GGTAAAGAGCTAAC-1': 1, 'GGTACAACTGCAAC-1': 1, 'GGTACATGAAAGCA-1': 1, + 'GGTACATGAGCTCA-1': 1, 'GGTACATGCGGTAT-1': 1, 'GGTACATGGTTACG-1': 1, 'GGTACATGTGGGAG-1': 1, + 'GGTACTGAACTCTT-1': 1, 'GGTAGTACACCACA-1': 1, 'GGTAGTACACTAGC-1': 1, 'GGTAGTACCCTGTC-1': 1, + 'GGTAGTACGCCATA-1': 1, 'GGTAGTACTGTCTT-1': 1, 'GGTATCGAGACAAA-1': 1, 'GGTATCGATGAACC-1': 1, + 'GGTCAAACCAAAGA-1': 1, 'GGTCTAGAGAAACA-1': 1, 'GGTCTAGATAGCGT-1': 1, 'GGTGATACCGACTA-1': 1, + 'GGTGATACGACTAC-1': 1, 'GGTGATACTGTTTC-1': 1, 'GGTGGAGAAACGGG-1': 1, 'GGTGGAGAAGTAGA-1': 1, + 'GGTGGAGACAGATC-1': 1, 'GGTGGAGATCGATG-1': 1, 'GGTGGAGATCTCTA-1': 1, 'GGTGGAGATTACTC-1': 1, + 'GGTTTACTACGCAT-1': 1, 'GTAACGTGACCTCC-1': 1, 'GTAACGTGATCGGT-1': 1, 'GTAACGTGCAGCTA-1': 1, + 'GTAACGTGGTTGAC-1': 1, 'GTAAGCACAACGGG-1': 1, 'GTAAGCACTCATTC-1': 1, 'GTAAGCTGGTACCA-1': 1, + 'GTAATAACCTTCTA-1': 1, 'GTAATAACGTTGTG-1': 1, 'GTACCCTGACAGTC-1': 1, 'GTACCCTGGAGCTT-1': 1, + 'GTACCCTGTCCTTA-1': 1, 'GTACCCTGTGAACC-1': 1, 'GTACGTGAACGTTG-1': 1, 'GTACTTTGTCGACA-1': 1, + 'GTAGACTGAGATGA-1': 1, 'GTAGACTGTATTCC-1': 1, 'GTAGCAACAGTCGT-1': 1, 'GTAGCAACCATTTC-1': 1, + 'GTAGCAACGGTAGG-1': 1, 'GTAGCATGCACTCC-1': 1, 'GTAGCATGTAAGCC-1': 1, 'GTAGCCCTGACGTT-1': 1, + 'GTAGCTGAAGCTAC-1': 1, 'GTAGCTGAATTCGG-1': 1, 'GTAGGTACACGGGA-1': 1, 'GTAGTGACCTCATT-1': 1, + 'GTAGTGTGAGCGGA-1': 1, 'GTAGTGTGAGGCGA-1': 1, 'GTAGTGTGTGGTTG-1': 1, 'GTATCACTGGTAGG-1': 1, + 'GTATCTACAGAAGT-1': 1, 'GTATCTACGACGAG-1': 1, 'GTATCTACGTTACG-1': 1, 'GTATTAGAAACAGA-1': 1, + 'GTATTAGAGGTCTA-1': 1, 'GTATTCACACAGCT-1': 1, 'GTATTCACGGGTGA-1': 1, 'GTCAACGACACTGA-1': 1, + 'GTCAACGAGTGTAC-1': 1, 'GTCAATCTACACCA-1': 1, 'GTCAATCTGTAGCT-1': 1, 'GTCAATCTTGTGGT-1': 1, + 'GTCACCTGCCTCCA-1': 1, 'GTCACCTGTCCCGT-1': 1, 'GTCATACTAATCGC-1': 1, 'GTCATACTGCGATT-1': 1, + 'GTCATACTTCGCCT-1': 1, 'GTCATACTTTACCT-1': 1, 'GTCATACTTTGACG-1': 1, 'GTCCAAGAAAAACG-1': 1, + 'GTCCACTGACCTCC-1': 1, 'GTCCACTGGGTACT-1': 1, 'GTCCAGCTACGGGA-1': 1, 'GTCCCATGTGGTGT-1': 1, + 'GTCGAATGAAGGCG-1': 1, 'GTCGACCTGAATGA-1': 1, 'GTCGACCTGTTCAG-1': 1, 'GTCGCACTTGAGAA-1': 1, + 'GTCTAACTGGTCTA-1': 1, 'GTCTAGGAGCTTCC-1': 1, 'GTGAACACACTCTT-1': 1, 'GTGAACACTCAGGT-1': 1, + 'GTGACCCTTAAGCC-1': 1, 'GTGATGACAAGTGA-1': 1, 'GTGATGACCTGAGT-1': 1, 'GTGATGACGGTTTG-1': 1, + 'GTGATTCTCATTTC-1': 1, 'GTGATTCTCTCTCG-1': 1, 'GTGATTCTGGTTCA-1': 1, 'GTGATTCTGTCGAT-1': 1, + 'GTGATTCTTAGCGT-1': 1, 'GTGCCACTCAGGAG-1': 1, 'GTGGATTGCACTAG-1': 1, 'GTGGATTGCGGAGA-1': 1, + 'GTGGATTGTAACGC-1': 1, 'GTGTACGATCAGTG-1': 1, 'GTGTAGTGGGTACT-1': 1, 'GTGTATCTAGCCTA-1': 1, + 'GTGTATCTAGTAGA-1': 1, 'GTGTATCTGTTACG-1': 1, 'GTGTCAGAAGCGTT-1': 1, 'GTTAAAACCGAGAG-1': 1, + 'GTTAAATGCTCGAA-1': 1, 'GTTAAATGTCGACA-1': 1, 'GTTAACCTAGCTAC-1': 1, 'GTTAACCTTGCTTT-1': 1, + 'GTTAGGTGCACTCC-1': 1, 'GTTAGGTGCCAGTA-1': 1, 'GTTAGGTGCCCAAA-1': 1, 'GTTAGGTGGAACTC-1': 1, + 'GTTAGTCTAAGAAC-1': 1, 'GTTATAGAGGACAG-1': 1, 'GTTATGCTTTCATC-1': 1, 'GTTCAACTGGGACA-1': 1, + 'GTTCAACTTATGCG-1': 1, 'GTTGACGAGCCCTT-1': 1, 'GTTGACGATATCGG-1': 1, 'GTTGAGTGGTCTTT-1': 1, + 'GTTGAGTGTGCTTT-1': 1, 'GTTGATCTGGGACA-1': 1, 'GTTGATCTTTTCAC-1': 1, 'GTTGGATGTTTACC-1': 1, + 'GTTGTACTATTCCT-1': 1, 'GTTGTACTTTTGGG-1': 1, 'GTTTAAGACCATGA-1': 1, 'GTTTAAGACTGTCC-1': 1, + 'TAAACAACCAACCA-1': 1, 'TAAACAACGAATCC-1': 1, 'TAAAGACTCAGGAG-1': 1, 'TAAATCGATGAGGG-1': 1, + 'TAACAATGTGCCCT-1': 1, 'TAACACCTTCGCTC-1': 1, 'TAACACCTTCGTAG-1': 1, 'TAACACCTTGTTTC-1': 1, + 'TAACATGACACTAG-1': 1, 'TAACCGGACTTACT-1': 1, 'TAACGTCTCAACCA-1': 1, 'TAACGTCTCATTGG-1': 1, + 'TAACTAGAATTTCC-1': 1, 'TAACTAGACTTAGG-1': 1, 'TAACTAGATCTGGA-1': 1, 'TAACTCACGAGGAC-1': 1, + 'TAACTCACGTACAC-1': 1, 'TAACTCACGTATCG-1': 1, 'TAACTCACTCTACT-1': 1, 'TAAGAACTGTGTCA-1': 1, + 'TAAGAGGACTAAGC-1': 1, 'TAAGAGGACTTGTT-1': 1, 'TAAGATACGGTTCA-1': 1, 'TAAGATTGCGTAGT-1': 1, + 'TAAGATTGTTGCTT-1': 1, 'TAAGCGTGAGGTTC-1': 1, 'TAAGCGTGGACAAA-1': 1, 'TAAGCGTGGGAAAT-1': 1, + 'TAAGCGTGTGCTCC-1': 1, 'TAAGGCTGCCATGA-1': 1, 'TAAGGCTGCTGCTC-1': 1, 'TAAGGCTGTCTCGC-1': 1, + 'TAAGGGCTGCTGTA-1': 1, 'TAAGGGCTTTACTC-1': 1, 'TAAGTAACCGAGAG-1': 1, 'TAAGTAACCTCCAC-1': 1, + 'TAAGTAACCTGTAG-1': 1, 'TAAGTAACTTGTCT-1': 1, 'TAATGATGAGCGGA-1': 1, 'TAATGCCTCATGAC-1': 1, + 'TAATGCCTCGTCTC-1': 1, 'TAATGTGAAGATGA-1': 1, 'TAATGTGACTGCAA-1': 1, 'TAATGTGATTACTC-1': 1, + 'TACAAATGGGTACT-1': 1, 'TACAATGAAAACAG-1': 1, 'TACAATGACTTAGG-1': 1, 'TACAATGATGCTAG-1': 1, + 'TACACACTCACACA-1': 1, 'TACACACTCTTACT-1': 1, 'TACATAGAACGCAT-1': 1, 'TACATCACACGGGA-1': 1, + 'TACATCACCTGTTT-1': 1, 'TACATCACGCTAAC-1': 1, 'TACATCACTGAACC-1': 1, 'TACCATTGAGGTTC-1': 1, + 'TACCATTGCGGGAA-1': 1, 'TACCATTGGGGATG-1': 1, 'TACCATTGTGAGGG-1': 1, 'TACCGGCTGTTGGT-1': 1, + 'TACGAGTGATCTCT-1': 1, 'TACGAGTGATGCTG-1': 1, 'TACGAGTGCGGAGA-1': 1, 'TACGAGTGGTTGGT-1': 1, + 'TACGATCTAGTGTC-1': 1, 'TACGATCTCACTGA-1': 1, 'TACGATCTTACGAC-1': 1, 'TACGCAGAGAATCC-1': 1, + 'TACGCCACATTCCT-1': 1, 'TACGCCACTCCCAC-1': 1, 'TACGCCACTCCGAA-1': 1, 'TACGGAACGCGTTA-1': 1, + 'TACGGCCTGGGACA-1': 1, 'TACGTACTACGGAG-1': 1, 'TACGTACTCAGTTG-1': 1, 'TACGTACTCCCGTT-1': 1, + 'TACGTTACAGAAGT-1': 1, 'TACGTTACCAAGCT-1': 1, 'TACTAAGAAAGGTA-1': 1, 'TACTAAGAATCACG-1': 1, + 'TACTAAGATGATGC-1': 1, 'TACTAAGATTGCGA-1': 1, 'TACTACACGAGAGC-1': 1, 'TACTACACTTACCT-1': 1, + 'TACTACTGAACCTG-1': 1, 'TACTACTGATGTCG-1': 1, 'TACTACTGATTCTC-1': 1, 'TACTACTGTATGGC-1': 1, + 'TACTCAACGGTCTA-1': 1, 'TACTCAACTGCTAG-1': 1, 'TACTCCCTCAGTTG-1': 1, 'TACTCTGAATCGAC-1': 1, + 'TACTCTGACGAGTT-1': 1, 'TACTCTGATTGACG-1': 1, 'TACTGGGATCGATG-1': 1, 'TACTGTTGAAAGCA-1': 1, + 'TACTGTTGAGGCGA-1': 1, 'TACTGTTGCTGAAC-1': 1, 'TACTTGACTCCTCG-1': 1, 'TACTTGACTGGTGT-1': 1, + 'TACTTTCTTTTGGG-1': 1, 'TAGAAACTAATCGC-1': 1, 'TAGAAACTGCTTCC-1': 1, 'TAGAAACTGGGATG-1': 1, + 'TAGAATTGCGACAT-1': 1, 'TAGAATTGTATCGG-1': 1, 'TAGACGTGCTTGAG-1': 1, 'TAGACGTGTCGCTC-1': 1, + 'TAGAGCACCTTACT-1': 1, 'TAGATTGACTTGTT-1': 1, 'TAGATTGAGGCATT-1': 1, 'TAGCATCTCAGCTA-1': 1, + 'TAGCATCTCCCTCA-1': 1, 'TAGCATCTGCTGTA-1': 1, 'TAGCATCTGGGACA-1': 1, 'TAGCATCTTGTCGA-1': 1, + 'TAGCCCACAAAAGC-1': 1, 'TAGCCCACAGCCAT-1': 1, 'TAGCCCACAGCTAC-1': 1, 'TAGCCCACCCACAA-1': 1, + 'TAGCCCTGCGGAGA-1': 1, 'TAGCCGCTTACGAC-1': 1, 'TAGCCGCTTACTTC-1': 1, 'TAGCCGCTTTCCAT-1': 1, + 'TAGCTACTGAATAG-1': 1, 'TAGCTACTGTAGCT-1': 1, 'TAGCTACTTTTGCT-1': 1, 'TAGGACTGTGCTGA-1': 1, + 'TAGGAGCTAAGGCG-1': 1, 'TAGGAGCTGAGGGT-1': 1, 'TAGGAGCTTGCATG-1': 1, 'TAGGCAACCGTCTC-1': 1, + 'TAGGCATGCTCTCG-1': 1, 'TAGGCATGGCGAGA-1': 1, 'TAGGCTGATGCCTC-1': 1, 'TAGGGACTGAACTC-1': 1, + 'TAGGTCGACACTGA-1': 1, 'TAGGTCGAGGATCT-1': 1, 'TAGGTGACACACTG-1': 1, 'TAGGTGACACGTTG-1': 1, + 'TAGGTGTGTTCTGT-1': 1, 'TAGGTTCTGAAGGC-1': 1, 'TAGGTTCTTCTTAC-1': 1, 'TAGGTTCTTGCTGA-1': 1, + 'TAGTAAACCTCGCT-1': 1, 'TAGTAAACGTCACA-1': 1, 'TAGTAATGAGATCC-1': 1, 'TAGTACCTAAGAAC-1': 1, + 'TAGTATGATCTTAC-1': 1, 'TAGTATGATTCTCA-1': 1, 'TAGTCTTGGCTGTA-1': 1, 'TAGTCTTGGGACTT-1': 1, + 'TAGTCTTGTGGAAA-1': 1, 'TAGTGGTGAAGTGA-1': 1, 'TAGTTAGAACCACA-1': 1, 'TAGTTAGATGAACC-1': 1, + 'TATAAGACAACAGA-1': 1, 'TATAAGACAGCTCA-1': 1, 'TATAAGTGACACCA-1': 1, 'TATAAGTGTATCGG-1': 1, + 'TATAAGTGTGGTGT-1': 1, 'TATACAGAACCCTC-1': 1, 'TATACAGAAGAACA-1': 1, 'TATACAGATCCAGA-1': 1, + 'TATACCACCTGATG-1': 1, 'TATACGCTACCAAC-1': 1, 'TATAGATGGACGGA-1': 1, 'TATAGATGTTCCGC-1': 1, + 'TATCCAACCAGCTA-1': 1, 'TATCCAACTCTCTA-1': 1, 'TATCGACTACTAGC-1': 1, 'TATCGACTCGATAC-1': 1, + 'TATCGTACAGATGA-1': 1, 'TATCGTACATTCCT-1': 1, 'TATCTCGAGAGATA-1': 1, 'TATCTGACAGGTTC-1': 1, + 'TATCTGACTGTTTC-1': 1, 'TATCTTCTAAACAG-1': 1, 'TATGAATGGAGGAC-1': 1, 'TATGAATGTTTGCT-1': 1, + 'TATGCGGATAACCG-1': 1, 'TATGGGTGCATCAG-1': 1, 'TATGGGTGCTAGCA-1': 1, 'TATGGTCTCTACCC-1': 1, + 'TATGTCACGGAACG-1': 1, 'TATGTCACTAACCG-1': 1, 'TATGTCACTTCTCA-1': 1, 'TATGTGCTCCGATA-1': 1, + 'TATGTGCTGGATTC-1': 1, 'TATTGCTGAAGAAC-1': 1, 'TATTGCTGCCGTTC-1': 1, 'TATTGCTGTCTGGA-1': 1, + 'TATTGCTGTGCACA-1': 1, 'TATTTCCTATTGGC-1': 1, 'TATTTCCTGGAGGT-1': 1, 'TATTTCCTGGTGTT-1': 1, + 'TCAACACTGTTTGG-1': 1, 'TCAAGGACAGCGTT-1': 1, 'TCAAGGACATTCTC-1': 1, 'TCAAGGACGGTGTT-1': 1, + 'TCAATCACACTCTT-1': 1, 'TCAATCACAGTCGT-1': 1, 'TCACAACTATGTGC-1': 1, 'TCACAACTTTGCTT-1': 1, + 'TCACATACACTTTC-1': 1, 'TCACATACAGGGTG-1': 1, 'TCACCCGAGACGGA-1': 1, 'TCACCGTGCTCGCT-1': 1, + 'TCACCTCTACGACT-1': 1, 'TCACCTCTTCCAAG-1': 1, 'TCACGAGAGGAGGT-1': 1, 'TCACTATGGGGCAA-1': 1, + 'TCACTATGGTTGTG-1': 1, 'TCAGACGACGCTAA-1': 1, 'TCAGACGACGTTAG-1': 1, 'TCAGAGACTCCAGA-1': 1, + 'TCAGCAGACTCCAC-1': 1, 'TCAGCGCTCTAGTG-1': 1, 'TCAGCGCTGGATCT-1': 1, 'TCAGCGCTGGTATC-1': 1, + 'TCAGGATGAAGTAG-1': 1, 'TCAGGATGCCTTTA-1': 1, 'TCAGTGGAAGATCC-1': 1, 'TCAGTTACCTACGA-1': 1, + 'TCAGTTACTAGAAG-1': 1, 'TCATCAACCCGATA-1': 1, 'TCATCAACTGTTCT-1': 1, 'TCATCATGCAGTTG-1': 1, + 'TCATCCCTTACTGG-1': 1, 'TCATTCGATACAGC-1': 1, 'TCCACGTGGAAACA-1': 1, 'TCCACTCTACACTG-1': 1, + 'TCCACTCTGAGCTT-1': 1, 'TCCACTCTTACTTC-1': 1, 'TCCATAACAAAGTG-1': 1, 'TCCATAACCGTAGT-1': 1, + 'TCCATAACGATGAA-1': 1, 'TCCATAACTACGCA-1': 1, 'TCCATCCTCCCTAC-1': 1, 'TCCCACGATCATTC-1': 1, + 'TCCCATCTCAAAGA-1': 1, 'TCCCGAACACAGTC-1': 1, 'TCCCGAACTTCGCC-1': 1, 'TCCCGATGAGATCC-1': 1, + 'TCCCGATGCCTGAA-1': 1, 'TCCCTACTCAACTG-1': 1, 'TCCGAAGACAATCG-1': 1, 'TCCGAAGACGTTAG-1': 1, + 'TCCGGACTGAGGTG-1': 1, 'TCCGGACTGTACGT-1': 1, 'TCCTAAACATCGAC-1': 1, 'TCCTAAACCGAGAG-1': 1, + 'TCCTAAACCGCATA-1': 1, 'TCCTAATGGTTTGG-1': 1, 'TCCTACCTGTCGTA-1': 1, 'TCCTATGAAAAGCA-1': 1, + 'TCGAATCTCTGGTA-1': 1, 'TCGACCTGCCGATA-1': 1, 'TCGACGCTTCTATC-1': 1, 'TCGACGCTTTGACG-1': 1, + 'TCGAGAACGACAGG-1': 1, 'TCGAGAACGTTAGC-1': 1, 'TCGAGCCTATCAGC-1': 1, 'TCGAGCCTGCGAGA-1': 1, + 'TCGAGCCTTGTGAC-1': 1, 'TCGATACTATTCCT-1': 1, 'TCGATACTTGCACA-1': 1, 'TCGATTTGATGCCA-1': 1, + 'TCGATTTGCACTCC-1': 1, 'TCGATTTGCAGCTA-1': 1, 'TCGATTTGCCTACC-1': 1, 'TCGATTTGTCGTGA-1': 1, + 'TCGCAGCTAGATCC-1': 1, 'TCGCCATGAGACTC-1': 1, 'TCGCCATGTGGTCA-1': 1, 'TCGGACCTAACAGA-1': 1, + 'TCGGACCTATAAGG-1': 1, 'TCGGACCTGTACAC-1': 1, 'TCGGTAGAGTAGGG-1': 1, 'TCGGTAGATCCCAC-1': 1, + 'TCGTAGGATCGACA-1': 1, 'TCGTTATGGACAAA-1': 1, 'TCTAACACCAGTTG-1': 1, 'TCTAACACGAGCAG-1': 1, + 'TCTAACTGAACCAC-1': 1, 'TCTAAGCTAATGCC-1': 1, 'TCTAAGCTTAGTCG-1': 1, 'TCTAAGCTTCTAGG-1': 1, + 'TCTAAGCTTGTTCT-1': 1, 'TCTAAGCTTTCGCC-1': 1, 'TCTACAACGACTAC-1': 1, 'TCTAGACTTAGAAG-1': 1, + 'TCTAGTTGCACCAA-1': 1, 'TCTATGTGAAGAGT-1': 1, 'TCTATGTGAGTCTG-1': 1, 'TCTCAAACCTAAGC-1': 1, + 'TCTCTAGAATTTCC-1': 1, 'TCTGATACACGTGT-1': 1, 'TCTGATACTCGCCT-1': 1, 'TCTTACGAACCTGA-1': 1, + 'TCTTCAGAGCTACA-1': 1, 'TCTTGATGCGGAGA-1': 1, 'TGAAATTGGTGAGG-1': 1, 'TGAACCGAAAACGA-1': 1, + 'TGAACCGACTACTT-1': 1, 'TGAACCGATTCGGA-1': 1, 'TGAAGCACTCACGA-1': 1, 'TGAAGCTGAACGAA-1': 1, + 'TGAAGCTGCATGGT-1': 1, 'TGAAGCTGCGTAAC-1': 1, 'TGAATAACCACTTT-1': 1, 'TGAATAACTCCCAC-1': 1, + 'TGACACGACCTTAT-1': 1, 'TGACCAGACAACCA-1': 1, 'TGACCAGAGGATTC-1': 1, 'TGACCGCTAAAAGC-1': 1, + 'TGACCGCTCTGCAA-1': 1, 'TGACGATGCAAAGA-1': 1, 'TGACGCCTGTACCA-1': 1, 'TGACGCCTTTACTC-1': 1, + 'TGACTGGAAGAGAT-1': 1, 'TGACTGGACCGTAA-1': 1, 'TGACTGGACGCAAT-1': 1, 'TGACTGGAGGACAG-1': 1, + 'TGACTGGATTCTCA-1': 1, 'TGACTTACACACCA-1': 1, 'TGACTTACAGTCTG-1': 1, 'TGACTTTGCGCATA-1': 1, + 'TGACTTTGTTTGTC-1': 1, 'TGAGACACAAGGTA-1': 1, 'TGAGACACTCAAGC-1': 1, 'TGAGCTGAATGCTG-1': 1, + 'TGAGCTGACTGGAT-1': 1, 'TGAGCTGATGCTAG-1': 1, 'TGAGGACTCTCATT-1': 1, 'TGAGGACTTCATTC-1': 1, + 'TGAGGTACGAACCT-1': 1, 'TGAGTCGAGTTACG-1': 1, 'TGAGTGACTGAGCT-1': 1, 'TGATAAACGAATCC-1': 1, + 'TGATAAACTCCGTC-1': 1, 'TGATAAACTTTCAC-1': 1, 'TGATACCTCACTAG-1': 1, 'TGATACCTGTTGGT-1': 1, + 'TGATACCTTATGCG-1': 1, 'TGATACCTTGAAGA-1': 1, 'TGATATGAACCTTT-1': 1, 'TGATCACTAGCATC-1': 1, + 'TGATCACTCTCGCT-1': 1, 'TGATCACTTCTACT-1': 1, 'TGATCGGACTGACA-1': 1, 'TGATCGGAGGAGCA-1': 1, + 'TGATCGGATATGCG-1': 1, 'TGATTAGACATTGG-1': 1, 'TGATTAGATGACTG-1': 1, 'TGATTAGATGCTAG-1': 1, + 'TGATTCACTATGCG-1': 1, 'TGATTCACTGTCAG-1': 1, 'TGATTCTGCCGAAT-1': 1, 'TGATTCTGCTCTTA-1': 1, + 'TGCAAGTGAGAACA-1': 1, 'TGCAAGTGGGTAGG-1': 1, 'TGCAATCTTCAGGT-1': 1, 'TGCACAGACGACAT-1': 1, + 'TGCCAAGAGCAGTT-1': 1, 'TGCCAAGATCTCTA-1': 1, 'TGCCACTGAACGTC-1': 1, 'TGCCACTGCGATAC-1': 1, + 'TGCCAGCTTGGCAT-1': 1, 'TGCCCAACAGCAAA-1': 1, 'TGCCCAACCGCATA-1': 1, 'TGCCGACTCTCCCA-1': 1, + 'TGCGAAACAGTCAC-1': 1, 'TGCGAAACGTTGCA-1': 1, 'TGCGATGAACGGTT-1': 1, 'TGCGATGACCTCGT-1': 1, + 'TGCGATGACTAGTG-1': 1, 'TGCGATGACTGCTC-1': 1, 'TGCGATGACTTGCC-1': 1, 'TGCGATGAGTGCTA-1': 1, + 'TGCGCACTCTTGAG-1': 1, 'TGCGTAGAATAAGG-1': 1, 'TGCGTAGACGGGAA-1': 1, 'TGCGTAGATGGTCA-1': 1, + 'TGCTAGGAAACCGT-1': 1, 'TGCTAGGATAGTCG-1': 1, 'TGCTATACGGTTCA-1': 1, 'TGCTATACTGCTGA-1': 1, + 'TGCTGAGAGAGCAG-1': 1, 'TGCTGAGATTATCC-1': 1, 'TGGAAAGACTCTCG-1': 1, 'TGGAAAGAGCGATT-1': 1, + 'TGGAAAGAGGTCAT-1': 1, 'TGGAAAGATATGGC-1': 1, 'TGGAACACAAACAG-1': 1, 'TGGAACACGCTAAC-1': 1, + 'TGGAAGCTCAGATC-1': 1, 'TGGACCCTACACTG-1': 1, 'TGGACCCTCATGGT-1': 1, 'TGGACCCTGGTACT-1': 1, + 'TGGACTGAGTATGC-1': 1, 'TGGAGACTATCAGC-1': 1, 'TGGAGACTTCAAGC-1': 1, 'TGGAGACTTGACCA-1': 1, + 'TGGAGGGACGGAGA-1': 1, 'TGGAGGGAGCTATG-1': 1, 'TGGATCGATAAAGG-1': 1, 'TGGATGTGACCTAG-1': 1, + 'TGGATGTGTGAAGA-1': 1, 'TGGATTCTCATACG-1': 1, 'TGGCAATGCTTGTT-1': 1, 'TGGCACCTTCACGA-1': 1, + 'TGGCACCTTCAGTG-1': 1, 'TGGGTATGAAGAGT-1': 1, 'TGGGTATGCACAAC-1': 1, 'TGGGTATGGTACGT-1': 1, + 'TGGGTATGTTTGGG-1': 1, 'TGGTAGACATGCCA-1': 1, 'TGGTAGACCCTCAC-1': 1, 'TGGTAGACCTGATG-1': 1, + 'TGGTAGTGCACTGA-1': 1, 'TGGTATCTAAACAG-1': 1, 'TGGTATCTCTTCCG-1': 1, 'TGGTCAGACCCAAA-1': 1, + 'TGGTTACTGACGTT-1': 1, 'TGGTTACTGTTCTT-1': 1, 'TGTAACCTAGAGGC-1': 1, 'TGTAACCTTGCCTC-1': 1, + 'TGTAATGACACAAC-1': 1, 'TGTAATGAGGTAAA-1': 1, 'TGTACTTGCTCTAT-1': 1, 'TGTAGGTGCGAGAG-1': 1, + 'TGTAGGTGCTATGG-1': 1, 'TGTAGGTGCTCTAT-1': 1, 'TGTAGGTGTGCTGA-1': 1, 'TGTAGTCTTCCAGA-1': 1, + 'TGTAGTCTTGCACA-1': 1, 'TGTATCTGTTAGGC-1': 1, 'TGTATGCTCATGGT-1': 1, 'TGTATGCTGTAGGG-1': 1, + 'TGTATGCTTTCATC-1': 1, 'TGTCAGGAATACCG-1': 1, 'TGTCAGGAGATGAA-1': 1, 'TGTCTAACCCCTTG-1': 1, + 'TGTGACGATTCTCA-1': 1, 'TGTGAGACTGTCAG-1': 1, 'TGTGAGACTTGAGC-1': 1, 'TGTGAGTGACCACA-1': 1, + 'TGTGAGTGAGTGCT-1': 1, 'TGTGAGTGGAGATA-1': 1, 'TGTGATCTCTCTAT-1': 1, 'TGTGATCTGACACT-1': 1, + 'TGTGGATGGCCAAT-1': 1, 'TGTTAAGACAAAGA-1': 1, 'TGTTAAGATAAGGA-1': 1, 'TGTTACACCGCATA-1': 1, + 'TGTTACACGACTAC-1': 1, 'TGTTACTGGCTACA-1': 1, 'TGTTACTGTAGTCG-1': 1, 'TTAACCACCGTAAC-1': 1, + 'TTAACCACTAAGGA-1': 1, 'TTAACCACTCAGAC-1': 1, 'TTACACACGTGTTG-1': 1, 'TTACACACTCCTAT-1': 1, + 'TTACCATGAATCGC-1': 1, 'TTACCATGGTTGAC-1': 1, 'TTACCATGTGTCTT-1': 1, 'TTACCATGTTGTGG-1': 1, + 'TTACGACTGAGAGC-1': 1, 'TTACGACTTGACAC-1': 1, 'TTACGTACGTTCAG-1': 1, 'TTACTCGAAGAATG-1': 1, + 'TTACTCGACGCAAT-1': 1, 'TTACTCGAGGGTGA-1': 1, 'TTACTCGATCTACT-1': 1, 'TTAGAATGTGGTGT-1': 1, + 'TTAGAATGTGTAGC-1': 1, 'TTAGACCTCCTACC-1': 1, 'TTAGACCTCCTTTA-1': 1, 'TTAGCTACAACCGT-1': 1, + 'TTAGCTACTGTCCC-1': 1, 'TTAGCTACTTTCGT-1': 1, 'TTAGGGACGCGAAG-1': 1, 'TTAGGGTGCTGGAT-1': 1, + 'TTAGGGTGTCCTGC-1': 1, 'TTAGGTCTACTTTC-1': 1, 'TTAGTCACCAGTTG-1': 1, 'TTAGTCTGAAAGCA-1': 1, + 'TTAGTCTGCCAACA-1': 1, 'TTAGTCTGTGCACA-1': 1, 'TTATCCGACTAGTG-1': 1, 'TTATCCGAGAAAGT-1': 1, + 'TTATGAGAGATAAG-1': 1, 'TTATGCACGTCACA-1': 1, 'TTATGGCTTATGGC-1': 1, 'TTATTCCTATGCTG-1': 1, + 'TTATTCCTGGACAG-1': 1, 'TTATTCCTGGTACT-1': 1, 'TTATTCCTTCGTGA-1': 1, 'TTCAAAGATAAAGG-1': 1, + 'TTCAACACAACAGA-1': 1, 'TTCAACACCCCAAA-1': 1, 'TTCAACACGGACGA-1': 1, 'TTCAAGCTAAGAAC-1': 1, + 'TTCAAGCTAGATGA-1': 1, 'TTCAAGCTGTTGAC-1': 1, 'TTCAAGCTTGATGC-1': 1, 'TTCAAGCTTTCGCC-1': 1, + 'TTCACAACCCGTTC-1': 1, 'TTCACAACGTCTGA-1': 1, 'TTCAGACTACCCAA-1': 1, 'TTCAGACTCTCGAA-1': 1, + 'TTCAGTACCGACTA-1': 1, 'TTCAGTACTCAAGC-1': 1, 'TTCAGTACTCCTAT-1': 1, 'TTCAGTTGCCAAGT-1': 1, + 'TTCAGTTGTCCTTA-1': 1, 'TTCAGTTGTCTAGG-1': 1, 'TTCAGTTGTCTCGC-1': 1, 'TTCATCGAGGTGGA-1': 1, + 'TTCATGTGTGGTGT-1': 1, 'TTCATTCTATGTCG-1': 1, 'TTCATTCTTCTCTA-1': 1, 'TTCCAAACCTATGG-1': 1, + 'TTCCAAACCTCCCA-1': 1, 'TTCCAAACTCCCAC-1': 1, 'TTCCAAACTTGACG-1': 1, 'TTCCATGACGAGAG-1': 1, + 'TTCCATGACTGTCC-1': 1, 'TTCCCACTTGAGGG-1': 1, 'TTCCCACTTGTCTT-1': 1, 'TTCCTAGAAAGTGA-1': 1, + 'TTCCTAGACTAGTG-1': 1, 'TTCGAGGACTCTAT-1': 1, 'TTCGAGGAGGGCAA-1': 1, 'TTCGAGGATAGAAG-1': 1, + 'TTCGATTGAGCATC-1': 1, 'TTCGGAGAATGCCA-1': 1, 'TTCGGAGATGTGCA-1': 1, 'TTCGTATGAAAAGC-1': 1, + 'TTCGTATGGATAGA-1': 1, 'TTCGTATGGTCTGA-1': 1, 'TTCGTATGTCCTTA-1': 1, 'TTCTACGAACGTAC-1': 1, + 'TTCTACGAGTTGGT-1': 1, 'TTCTAGTGACACGT-1': 1, 'TTCTAGTGCATGAC-1': 1, 'TTCTAGTGGAGAGC-1': 1, + 'TTCTAGTGGTCACA-1': 1, 'TTCTCAGAAGAGAT-1': 1, 'TTCTCAGAAGCATC-1': 1, 'TTCTCAGATGGAGG-1': 1, + 'TTCTGATGGAGACG-1': 1, 'TTCTTACTCTGGAT-1': 1, 'TTGAACCTCCTTGC-1': 1, 'TTGAATGAACTACG-1': 1, + 'TTGAATGACTTACT-1': 1, 'TTGAATGATCTCAT-1': 1, 'TTGACACTCTGTAG-1': 1, 'TTGACACTGATAAG-1': 1, + 'TTGAGGACAGAACA-1': 1, 'TTGAGGACTACGCA-1': 1, 'TTGAGGTGGACGGA-1': 1, 'TTGCATTGAGCTAC-1': 1, + 'TTGCATTGCTAAGC-1': 1, 'TTGCATTGTGACTG-1': 1, 'TTGCTAACACCAAC-1': 1, 'TTGCTAACACGCTA-1': 1, + 'TTGCTAACCACTCC-1': 1, 'TTGCTATGGTACGT-1': 1, 'TTGCTATGGTAGGG-1': 1, 'TTGGAGACCAATCG-1': 1, + 'TTGGAGACGCTATG-1': 1, 'TTGGAGACTATGGC-1': 1, 'TTGGGAACTGAACC-1': 1, 'TTGGTACTACTGGT-1': 1, + 'TTGGTACTCTTAGG-1': 1, 'TTGGTACTGAATCC-1': 1, 'TTGGTACTGGATTC-1': 1, 'TTGTACACGTTGTG-1': 1, + 'TTGTACACTTGCAG-1': 1, 'TTGTAGCTAGCTCA-1': 1, 'TTGTAGCTCTCTTA-1': 1, 'TTGTCATGGACGGA-1': 1, + 'TTTAGAGATCCTCG-1': 1, 'TTTAGCTGATACCG-1': 1, 'TTTAGCTGGATACC-1': 1, 'TTTAGCTGTACTCT-1': 1, + 'TTTAGGCTCCTTTA-1': 1, 'TTTATCCTGTTGTG-1': 1, 'TTTCACGAGGTTCA-1': 1, 'TTTCAGTGGAAGGC-1': 1, + 'TTTCAGTGTCACGA-1': 1, 'TTTCAGTGTCTATC-1': 1, 'TTTCAGTGTGCAGT-1': 1, 'TTTCCAGAGGTGAG-1': 1, + 'TTTCGAACACCTGA-1': 1, 'TTTCGAACTCTCAT-1': 1, 'TTTCTACTGAGGCA-1': 1, 'TTTCTACTTCCTCG-1': 1, + 'TTTGCATGAGAGGC-1': 1, 'TTTGCATGCCTCAC-1': 1}}, 'louvain': { + 'options': {'B cells': 342, 'CD14+ Monocytes': 480, 'CD4 T cells': 1144, 'CD8 T cells': 316, + 'Dendritic cells': 37, 'FCGR3A+ Monocytes': 150, 'Megakaryocytes': 15, 'NK cells': 154}}, + 'n_counts': {'range': {'max': 8875.0, 'min': 556.0}}, + 'n_genes': {'range': {'max': 2455, 'min': 212}}, + 'percent_mito': { + 'range': {'max': 0.049938347190618515, 'min': 0.0}}}, + 'reactivelimit': 1000000, 'schema': { + 'CellName': {'displayname': 'Name', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, + 'louvain': {'displayname': 'Louvain Cluster', 'include': True, 'type': 'string', + 'variabletype': 'categorical'}, + 'n_counts': {'displayname': 'Num Counts', 'include': True, 'type': 'float', + 'variabletype': 'continuous'}, + 'n_genes': {'displayname': 'Num Genes', 'include': True, 'type': 'int', 'variabletype': 'continuous'}, + 'percent_mito': {'displayname': 'Mitochondrial Percentage', 'include': True, 'type': 'float', + 'variabletype': 'continuous'}}}, 'status': {'error': False, 'errormessage': ''}} assert data == result_data From 67f2e19f39b5b55ea391d75a417dee6c1f10ac2b Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Mon, 25 Jun 2018 15:43:18 -0700 Subject: [PATCH 09/26] Added tests for all endpoints --- backend/test/test_api.py | 925 +-------------------------------------- 1 file changed, 23 insertions(+), 902 deletions(-) diff --git a/backend/test/test_api.py b/backend/test/test_api.py index c1a04522..944cf589 100644 --- a/backend/test/test_api.py +++ b/backend/test/test_api.py @@ -1,5 +1,6 @@ import unittest import requests +import json class EndPoints(unittest.TestCase): @@ -8,10 +9,6 @@ class EndPoints(unittest.TestCase): def setUp(self): # Local self.url_base = "http://0.0.0.0:5005/api/" + "v2.0/" - # Dev - # self.url_base = "http://api-dev.clustering.czi.technology/api/v0.1/" - # Prod - # self.url_base = "http://api.clustering.czi.technology/api/v0.1/" self.session = requests.Session() def test_cells(self): @@ -33,901 +30,25 @@ class EndPoints(unittest.TestCase): result = self.session.get(url) assert result.status_code == 200 result_data = result.json() - data = {'data': {'cellcount': 2638, - 'genes': ['TNFRSF4', 'CPSF3L', 'ATAD3C', 'C1orf86', 'RER1', 'TNFRSF25', 'TNFRSF9', 'CTNNBIP1', - 'SRM', 'UBIAD1', 'DRAXIN', 'TNFRSF1B', 'PRDM2', 'EFHD2', 'DDI2', 'SPEN', 'SDHB', - 'CAPZB', 'CAMK2N1', 'CDA', 'C1QA', 'C1QC', 'C1QB', 'ZNF436', 'MDS2', 'PITHD1', - 'HMGCL', 'TMEM50A', 'LDLRAP1', 'RP11-70P17.1', 'STMN1', 'PDIK1L', 'ZNF593', - 'TMEM222', 'PPP1R8', 'PTAFR', 'PHACTR4', 'SNHG12', 'TAF12', 'YTHDF2', 'PUM1', - 'SPOCD1', 'TMEM234', 'HDAC1', 'MARCKSL1', 'SMIM12', 'AGO4', 'TRAPPC3', 'EVA1B', - 'RRAGC', 'PPIE', 'TRIT1', 'PPT1', 'SMAP2', 'ZFP69', 'CITED4', 'C1orf50', 'EBNA1BP2', - 'ST3GAL3', 'DMAP1', 'ERI3', 'PRDX1', 'FAAH', 'ATPAF1', 'EFCAB14', 'PDZK1IP1', 'TAL1', - 'SPATA6', 'ZCCHC11', 'SCP2', 'HSPB11', 'SSBP3', 'ACOT11', 'PARS2', 'ATG4C', 'PGM1', - 'LRRIQ3', 'ACADM', 'USP33', 'IFI44', 'RP5-887A10.1', 'PRKACB', 'SH3GLB1', 'PKN2', - 'GTF2B', 'GBP1', 'GBP4', 'LRRC8C', 'TMED5', 'RP11-421L21.3', 'HENMT1', 'TMEM167B', - 'SARS', 'LAMTOR5', 'DRAM2', 'CEPT1', 'DENND2D', 'CHI3L2', 'C1orf162', 'ST7L', - 'LRIG2', 'AP4B1-AS1', 'RP5-1073O3.7', 'CD2', 'WARS2', 'FCGR1B', 'LIX1L', 'CD160', - 'FCGR1A', 'BOLA1', 'CTSS', 'FAM63A', 'PRUNE', 'MLLT11', 'PI4KB', 'C2CD4D', 'THEM4', - 'S100A11', 'S100A12', 'S100A8', 'S100A6', 'SNAPIN', 'CRTC2', 'SLC39A1', 'UBE2Q1', - 'CKS1B', 'SLC50A1', 'RIT1', 'PMF1', 'BGLAP', 'GPATCH4', 'ISG20L2', 'HDGF', 'FCRL2', - 'CD1C', 'AIM2', 'FCER1A', 'FCRL6', 'DCAF8', 'PEX19', 'CD48', 'F11R', 'PFDN2', 'NIT1', - 'DEDD', 'FCER1G', 'FCGR2A', 'FCGR3A', 'FCGR2B', 'FCGR3B', 'FCRLA', 'TMCO1', 'CD247', - 'MPC2', 'XCL2', 'XCL1', 'BLZF1', 'F5', 'SELL', 'FMO4', 'KIAA0040', 'QSOX1', 'DHX9', - 'NCF2', 'COLGALT2', 'RGS18', 'ZBTB41', 'CSRP1', 'IPO9-AS1', 'PTPN7', 'RABIF', - 'SOX13', 'IL24', 'CR1', 'RP1-28O10.1', 'G0S2', 'TRAF3IP3', 'LPGAT1', 'DUSP10', - 'RP11-378J18.3', 'DISP1', 'TP53BP2', 'CNIH4', 'LBR', 'SRP9', 'ACBD3', 'PARP1', - 'SNAP47', 'C1orf35', 'OBSCN', 'RNF187', 'URB2', 'C1orf198', 'GNPAT', 'SPRTN', - 'RP5-827C21.4', 'COA6', 'RP4-781K5.2', 'FH', 'SDCCAG8', 'ACP1', 'TMEM18', 'TSSC1', - 'TRAPPC12-AS1', 'ID2', 'KLF11', 'ODC1', 'LPIN1', 'DDX1', 'RDH14', 'ITSN2', 'DNAJC27', - 'DNMT3A', 'ASXL2', 'KIF3C', 'MPV17', 'SNX17', 'FOSL2', 'DPY30', 'FAM98A', 'CDC42EP3', - 'LINC00211', 'PIGF', 'FBXO11', 'EML6', 'MTIF2', 'CCT4', 'PELI1', 'LGALSL', 'CEP68', - 'ACTR2', 'NFU1', 'SNRNP27', 'MPHOSPH10', 'CCT7', 'STAMBP', 'BOLA3', 'PCGF1', - 'MRPL19', 'TRABD2A', 'TGOLN2', 'MAT2A', 'VAMP8', 'VAMP5', 'GNLY', 'RMND5A', 'MAL', - 'ZAP70', 'EIF5B', 'TGFBRAP1', 'TMEM87B', 'IL1B', 'RABL2A', 'RP11-141B14.1', - 'C2orf76', 'TMEM177', 'CCDC115', 'PLEKHB2', 'ZRANB3', 'R3HDM1', 'UBXN4', 'ACVR2A', - 'MMADHC', 'PSMD14', 'GCA', 'FASTKD1', 'PPIG', 'METTL8', 'SLC25A12', 'MLTK', 'OLA1', - 'NFE2L2', 'TTC30A', 'PLEKHA3', 'TTN-AS1', 'DNAJC10', 'ZC3H15', 'SLC40A1', 'ANKAR', - 'C2orf88', 'NABP1', 'SDPR', 'SF3B1', 'PLCL1', 'TYW5', 'ORC2', 'NOP58', 'BMPR2', - 'ICOS', 'NDUFS1', 'METTL21A', 'IDH1', 'TNS1', 'CXCR1', 'RNF25', 'CYP27A1', 'GMPPA', - 'STK11IP', 'SERPINE2', 'DOCK10', 'MFF', 'TRIP12', 'ATG16L1', 'RAMP1', 'NDUFA10', - 'GPR35', 'MTERFD2', 'PASK', 'HDLBP', 'DTYMK', 'ING5', 'PDCD1', 'THUMPD3', 'SETD5', - 'ARPC4', 'RPUSD3', 'JAGN1', 'ATG7', 'TMEM40', 'SLC6A6', 'CCDC174', 'UBE2E1', 'TOP2B', - 'SLC4A7', 'CMTM7', 'GLB1', 'CRTAP', 'CSRNP1', 'EIF1B', 'ENTPD3-AS1', 'CTNNB1', - 'VIPR1', 'NKTR', 'ABHD5', 'ELP6', 'NME6', 'TREX1', 'UQCRC1', 'ARIH2OS', 'QRICH1', - 'USP19', 'GPX1', 'TCTA', 'IP6K1', 'FAM212A', 'RBM5', 'GNAI2', 'NPRL2', 'C3orf18', - 'HEMK1', 'CISH', 'GLYCTK', 'PBRM1', 'PRKCD', 'CCDC66', 'ARF4', 'DENND6A', 'DNASE1L3', - 'THOC7', 'SUCLG2', 'EOGT', 'ARL6IP5', 'PROK2', 'C3orf38', 'MINA', 'TBC1D23', 'NIT2', - 'BBX', 'CD47', 'CD96', 'TIGIT', 'B4GALT4', 'TIMMDC1', 'FSTL1', 'HGD', 'GOLGB1', - 'EAF2', 'KPNA1', 'PDIA5', 'GATA2', 'RAB7A', 'GP9', 'ISY1', 'ACPP', 'NPHP3', 'UBA5', - 'CDV3', 'RAB6B', 'ANAPC13', 'NMNAT3', 'RNF7', 'U2SURP', 'GYG1', 'SIAH2', 'GPR171', - 'MBNL1-AS1', 'LINC00886', 'MFSD1', 'SPTSSB', 'RPL22L1', 'TNFSF10', 'ZMAT3', - 'RP11-145M9.4', 'ACTL6A', 'TTC14', 'LAMP3', 'KLHL6', 'KLHL24', 'YEATS2', 'PARL', - 'SENP2', 'RPL39L', 'RP11-211G3.2', 'IL1RAP', 'FAM43A', 'PPP1R2', 'PCYT1A', 'RNF168', - 'PIGX', 'ZNF718', 'PDE6B', 'IDUA', 'SPON2', 'MAEA', 'SLBP', 'ZFYVE28', 'ADD1', - 'MFSD10', 'LYAR', 'STX18', 'JAKMIP1', 'AC093323.3', 'S100P', 'GRPEL1', 'FGFBP2', - 'MED28', 'DHX15', 'ANAPC4', 'RBPJ', 'PGM2', 'RFC1', 'SMIM14', 'UBE2K', 'COMMD8', - 'OCIAD1', 'CHIC2', 'TMEM165', 'PAICS', 'SRP72', 'HOPX', 'IGFBP7', 'YTHDC1', 'IGJ', - 'GRSF1', 'IL8', 'PF4', 'PPBP', 'CXCL3', 'CXCL2', 'EREG', 'RCHY1', 'SDAD1', 'CXCL10', - 'NUP54', 'SEPT11', 'MRPL1', 'ANTXR2', 'SEC31A', 'COPS4', 'HELQ', 'ARHGAP24', 'SNCA', - 'DNAJB14', 'MANBA', 'UBE2D3', 'PPA2', 'INTS12', 'TBCK', 'OSTC', 'PLA2G12A', 'SNHG8', - 'C4orf3', 'SPRY1', 'PGRMC2', 'C4orf33', 'RP11-102N12.3', 'ZNF330', 'USP38', 'LSM6', - 'LRBA', 'RP11-18H21.1', 'PLRG1', 'PALLD', 'RWDD4', 'RP11-701P16.5', 'KIAA1430', - 'MARCH6', 'C5orf42', 'FYB', 'FBXO4', 'NNT-AS1', 'EMB', 'MOCS2', 'GZMK', 'GZMA', - 'ZSWIM6', 'DIMT1', 'CWC27', 'TRIM23', 'PIK3R1', 'NAIP', 'GTF2H2', 'NSA2', - 'CTD-2015H6.3', 'ZCCHC9', 'ARRDC3', 'RIOK2', 'DCP2', 'AP3S1', 'COMMD10', 'CEP120', - 'ISOC1', 'HINT1', 'SLC22A4', 'C5orf56', 'KIF3A', 'C5orf15', 'CTB-113I20.2', 'PPP2CA', - 'DDX46', 'H2AFY', 'KDM3B', 'MZB1', 'UBE2D2', 'PURA', 'HBEGF', 'ANKHD1', 'SRA1', - 'NDUFA2', 'WDR55', 'DIAPH1', 'RNF14', 'NR3C1', 'YIPF5', 'PRELID2', 'LARS', 'CSNK1A1', - 'CCDC69', 'SPARC', 'FAXDC2', 'HAVCR2', 'MED7', 'UBLCP1', 'TTC1', 'CCNG1', 'RARS', - 'ATP6V0E1', 'UIMC1', 'LMAN2', 'RGS14', 'DOK3', 'SCGB3A1', 'RP11-532F6.3', 'SERPINB1', - 'LYRM4', 'F13A1', 'RIOK1', 'TMEM14C', 'TMEM14B', 'PHACTR1', 'NOL7', 'MCUR1', - 'JARID2', 'GMPR', 'ACOT13', 'RP11-367G6.3', 'HIST1H2AC', 'BTN3A2', 'BTN3A1', 'ABT1', - 'HIST1H2BJ', 'HIST1H2AH', 'HIST1H1B', 'FLOT1', 'IER3', 'XXbac-BPG299F13.17', - 'NFKBIL1', 'LTB', 'LST1', 'NCR3', 'AIF1', 'CSNK2B', 'LY6G5B', 'LY6G6F', 'C6orf25', - 'EHMT2', 'PPT2-EGFL8', 'AGPAT1', 'HLA-DRB1', 'HLA-DQA1', 'HLA-DQB1', 'HLA-DOB', - 'PSMB8', 'HLA-DMB', 'HLA-DMA', 'HLA-DPA1', 'HLA-DPB1', 'RGL2', 'TAPBP', 'DEF6', - 'FKBP5', 'STK38', 'SRSF3', 'OARD1', 'TREML1', 'RPL7L1', 'PTCRA', 'CNPY3', 'KLC4', - 'CRIP3', 'ABCC10', 'YIPF3', 'GTPBP2', 'RSPH9', 'MRPS18A', 'PLA2G7', 'CD2AP', 'MCM3', - 'PHF3', 'SH3BGRL2', 'ELOVL4', 'SNX14', 'SLC35A1', 'PNRC1', 'LYRM2', 'MAP3K7', - 'MANEA-AS1', 'NDUFAF4', 'SNX3', 'CDC40', 'CDK19', 'HDAC2', 'ZUFSP', 'CEP85L', - 'SMPDL3A', 'ECHDC1', 'ARHGAP18', 'SAMD3', 'LINC01013', 'TBPL1', 'SGK1', - 'RP3-325F22.5', 'ABRACL', 'LTV1', 'SF3B5', 'STX11', 'RP11-545I5.3', 'PPIL4', 'GINM1', - 'PCMT1', 'TMEM242', 'SNX9', 'SERAC1', 'DYNLT1', 'RP1-111C20.4', 'WTAP', 'ACAT2', - 'TCP1', 'AC147651.3', 'NUDT1', 'BRAT1', 'IQCE', 'TNRC18', 'DAGLB', 'C7orf26', - 'PHF14', 'ARL4A', 'HDAC9', 'IL6', 'NUPL2', 'AC005082.12', 'SKAP2', 'JAZF1', 'CHN2', - 'GARS', 'NT5C3A', 'HERPUD2', 'STK17A', 'BLVRA', 'URGCP', 'UBE2D4', 'LINC00957', - 'AEBP1', 'POLD2', 'DDX56', 'CCM2', 'CCT6A', 'ERV3-1', 'ZNF92', 'GUSB', - 'RP11-792A8.4', 'LAT2', 'RFC2', 'YWHAG', 'FGL2', 'TMEM60', 'ABCB1', 'RBM48', - 'SAMD9L', 'GNG11', 'BET1', 'ARPC1B', 'LRCH4', 'ALKBH4', 'DNAJC2', 'CTB-152G17.6', - 'PRKAR2B', 'HBP1', 'PNPLA8', 'CAPZA2', 'SND1', 'ATP6V1F', 'TSPAN33', 'RP11-138A9.2', - 'MKLN1', 'EXOC4', 'TMEM140', 'WDR91', 'MRPS33', 'RP5-894A10.2', 'SSBP1', 'ZYX', - 'ZNF212', 'ZNF467', 'ATP6V0E2', 'GIMAP7', 'GIMAP4', 'GIMAP2', 'GIMAP5', 'CHPF2', - 'SMARCD3', 'LINC01003', 'RP11-5C23.1', 'PAXIP1-AS1', 'PTPRN2', 'GTPBP6', 'ARSD', - 'RP11-706O15.1', 'HCCS', 'ARHGAP6', 'PRPS2', 'RAB9A', 'REPS2', 'SH3KBP1', 'SMS', - 'PRDX4', 'SAT1', 'ZFX', 'MID1IP1', 'KRBOX4', 'CDK16', 'RBM3', 'PQBP1', 'SLC35A2', - 'OTUD5', 'PRAF2', 'WDR45', 'GPKOW', 'SYP', 'CCDC22', 'MAGEH1', 'PJA1', 'PDZD11', - 'NONO', 'P2RY10', 'ITM2A', 'SYTL4', 'BTK', 'ARMCX5', 'BEX4', 'TCEAL8', 'TCEAL4', - 'MORF4L2', 'NXT2', 'WDR44', 'PGRMC1', 'RNF113A', 'NKAP', 'LAMP2', 'CUL4B', - 'C1GALT1C1', 'RP1-315G1.3', 'SLC25A14', 'HPRT1', 'FAM127A', 'FHL1', 'IDH3G', 'PDZD4', - 'TKTL1', 'MPP1', 'FBXO25', 'TDRP', 'MYOM2', 'LONRF1', 'DMTN', 'SLC39A14', 'ADAM28', - 'CLU', 'PNOC', 'HMBOX1', 'IDO1', 'RP11-589C21.6', 'AP3M2', 'VDAC3', 'SLC20A2', - 'FNTA', 'LYPLA1', 'NSMAF', 'RAB2A', 'CHD7', 'RRS1', 'C8orf44', 'STAU2', 'ZBTB10', - 'RP11-219B4.7', 'CA2', 'TMEM55A', 'KIAA1429', 'DPY19L4', 'MTERFD1', 'CPQ', 'POLR2K', - 'ATP6V1C1', 'NUDCD1', 'MED30', 'DERL1', 'WDYHV1', 'RNF139', 'KIAA0196', 'SLA', - 'CASC7', 'LYPD2', 'TOP1MT', 'NAPRT1', 'SHARPIN', 'MAF1', 'VPS28', 'RCL1', 'CD274', - 'CDKN2A', 'DNAJA1', 'AQP3', 'ENHO', 'GALT', 'STOML2', 'CD72', 'TPM2', 'GNE', 'PAX5', - 'FXN', 'ABHD17B', 'VPS13A', 'TLE4', 'SPIN1', 'FAM120A', 'C9orf3', 'PTCH1', 'ERCC6L2', - 'HEMGN', 'TRIM14', 'INVS', 'SMC2', 'CTNNAL1', 'INIP', 'GSN', 'PTGS1', 'ARPC5L', - 'GOLGA1', 'SCAI', 'PPP6C', 'PTGES2', 'C9orf16', 'TRUB2', 'TOR1A', 'USP20', 'POMT1', - 'UCK1', 'SETX', 'GFI1B', 'GBGT1', 'SURF6', 'SURF1', 'SARDH', 'RXRA', 'FCN1', - 'C9orf69', 'EGFL7', 'TMEM141', 'RABL6', 'PHPT1', 'PTGDS', 'C9orf142', 'CLIC3', - 'NELFB', 'MRPL41', 'C9orf37', 'IDI1', 'AKR1C3', 'ATP5C1', 'SEC61A2', 'NUDT5', - 'CDC123', 'CAMK1D', 'FAM107B', 'RP11-398C13.6', 'RP11-390B4.5', 'MLLT10', 'ARHGAP21', - 'ENKUR', 'MAP3K8', 'KIF5B', 'RP11-324I22.4', 'RP11-162G10.5', 'ZNF32', 'ZFAND4', - 'NCOA4', 'ZWINT', 'CISD1', 'UBE2D1', 'TFAM', 'REEP3', 'SIRT1', 'PBLD', 'HNRNPH3', - 'SRGN', 'TACR2', 'TSPAN15', 'PRF1', 'MICU1', 'CAMK2G', 'RP11-178G16.4', 'ZNF503', - 'PPIF', 'ATAD1', 'IFIT2', 'IFIT1', 'IFIT5', 'MARCH5', 'EXOC6', 'BLNK', 'ARHGAP19', - 'FRAT1', 'NDUFB8-1', 'MRPL43', 'LZTS2', 'FBXW4', 'TRIM8', 'C10orf32', 'GSTO1', - 'XPNPEP1', 'SHOC2', 'VTI1A', 'PRDX3', 'PLEKHA1', 'BUB3', 'OAT', 'CTBP2', 'MGMT', - 'GLRX3', 'STK32C', 'ECHS1', 'SYCE1', 'SCGB1C1', 'IFITM3', 'PHRF1', 'IRF7', 'TMEM80', - 'TALDO1', 'MOB2', 'TNNI2', 'KCNQ1OT1', 'SLC22A18AS', 'NAP1L4', 'CARS', 'ZNF195', - 'TIMM10B', 'TAF10', 'RIC3', 'TMEM9B', 'DENND5A', 'SWAP70', 'ZBED5-AS1', 'PSMA1', - 'SAAL1', 'CAT', 'PRR5L', 'API5', 'CD82', 'PEX16', 'DGKZ', 'DDB2', 'MADD', 'CELF1', - 'MTCH2', 'FNBP4', 'UBE2L6', 'TMX2', 'CTNND1', 'RP11-142C4.6', 'MS4A6A', 'MS4A1', - 'PTGDR2', 'PRPF19', 'TMEM138', 'SDHAF2', 'FADS1', 'AP003733.1', 'UBXN1', 'GNG3', - 'TAF6L', 'RP11-727F15.9', 'OTUB1', 'FERMT3', 'RASGRP2', 'AP001462.6', 'ARL2', - 'SYVN1', 'CTSW', 'PACS1', 'RAB1B', 'RBM4', 'RCE1', 'AP003419.16', 'PTPRCAP', - 'CORO1B', 'PITPNM1', 'GSTP1', 'MRPL21', 'CTTN', 'LAMTOR1', 'FOLR3', 'ARAP1', 'RELT', - 'PGM2L1', 'XRRA1', 'AP001189.4', 'CLNS1A', 'PICALM', 'PRSS23', 'RAB38', 'SMCO4', - 'TAF1D', 'MRE11A', 'CWC15', 'CASP4', 'PPP2R1B', 'RBM7', 'REXO2', 'PCSK7', 'CEP164', - 'RNF26', 'NRGN', 'ESAM', 'STT3A', 'RPUSD4', 'SRPR', 'SENCR', 'JAM3', 'VPS26B', - 'THYN1', 'WNK1', 'FBXL14', 'ADIPOR2', 'CCND2', 'CD9', 'TNFRSF1A', 'MRPL51', 'IFFO1', - 'ACRBP', 'USP5', 'SPSB2', 'EMG1', 'CLSTN3', 'CD163', 'CLEC4C', 'KLRG1', 'KLRB1', - 'CLEC2B', 'CLEC1B', 'KLRC1', 'RP11-291B21.2', 'PLBD1', 'GOLT1B', 'TM7SF3', 'CCDC91', - 'DENND5B', 'RP11-428G5.5', 'SLC2A13', 'LRRK2', 'PRICKLE1', 'IRAK4', 'RP11-493L12.4', - 'SLC48A1', 'ASB8', 'RHEBL1', 'TMBIM6', 'BCDIN3D', 'SMARCD1', 'ITGB7', 'C12orf10', - 'CBX5', 'NCKAP1L', 'BLOC1S1', 'GDF11', 'ORMDL2', 'WIBG', 'SUOX', 'SMARCC2', 'IL23A', - 'BAZ2A', 'TMEM194A', 'R3HDM2', 'DTX3', 'XPOT', 'GNS', 'TMBIM4-1', 'THAP2', 'RAB21', - 'TBC1D15', 'ATXN7L3B', 'PAWR', 'TMTC2', 'LINC00936', 'MRPL42', 'NDUFA12', 'NR2C1', - 'ACTR6', 'GNPTAB', 'TDG', 'HCFC2', 'C12orf45', 'PWP1', 'SELPLG', 'CORO1C', 'USP30', - 'GLTP', 'GIT2', 'HVCN1', 'ALDH2', 'TMEM116', 'NAA25', 'RPH3A', 'OAS1', 'FBXO21', - 'RFC5', 'TAOK3', 'DYNLL1', 'MLEC', 'OASL', 'ORAI1', 'SETD1B', 'CLIP1', 'RILPL2', - 'SNRNP35', 'EIF2B1', 'NCOR2', 'NOC4L', 'MRP63', 'GTF3A', 'MTIF3', 'FRY-AS1', - 'N4BP2L1', 'SPG20', 'ALG5', 'EXOSC8', 'MTRF1', 'DNAJC15', 'CCDC122', 'TSC22D1', - 'DLEU7', 'RNASEH2B', 'MZT1', 'DIS3', 'MYCBP2', 'RBM26-AS1', 'UBAC2', 'GPR183', - 'CLYBL', 'ARGLU1', 'ABHD13', 'TNFSF13B', 'ARHGEF7', 'MCF2L', 'CDC16', 'RPPH1', - 'METTL3', 'CMTM5', 'DHRS4', 'PSME1', 'RP11-468E2.4', 'IRF9', 'CHMP4A', 'MDP1', - 'GMPR2', 'TINF2', 'CIDEB', 'LTB4R', 'GZMH', 'GZMB', 'SCFD1', 'AP4S1', 'EAPP', - 'PPP2R3C', 'FBXO33', 'FKBP3', 'MIS18BP1', 'NEMF', 'ARF6', 'C14orf166', 'PTGDR', - 'PSMC6', 'CGRRF1', 'MAPK1IP1L', 'LGALS3', 'RP11-349A22.5', 'ARID4A', 'JKAMP', - 'MNAT1', 'CTD-2302E22.4', 'ATP6V1D', 'EIF2S1', 'ARG2', 'VTI1B', 'RAD51B', 'DCAF5', - 'ERH', 'SRSF5', 'PCNX', 'RBM25', 'NUMB', 'LIN52', 'NPC2', 'ISCA2', 'DLST', 'RPS6KL1', - 'RP11-950C14.3', 'C14orf1', 'RP11-488C13.5', 'GSTZ1', 'AHSA1', 'SNW1', 'SEL1L', - 'SPATA7', 'TTC8', 'TRIP11', 'ATXN3', 'IFI27', 'DICER1', 'TCL1B', 'TCL1A', - 'RP11-164H13.1', 'HSP90AA1', 'ANKRD9', 'CDC42BPB', 'TNFAIP2', 'EIF5', 'TRMT61A', - 'BAG5', 'SIVA1', 'PLD4', 'C14orf80', 'AL928768.3', 'KIAA0125', 'UBE3A', 'ATP10A', - 'KLF13', 'RP11-1000B6.3', 'ARHGAP11A', 'DPH6', 'THBS1', 'EIF2AK4', 'PLCB2', - 'C15orf57', 'RPUSD2', 'RMDN3', 'TMEM87A', 'ZNF106', 'TMEM62', 'ADAL', 'PDIA3', - 'CASC4', 'TRIM69', 'USP8', 'SPPL2A', 'RP11-430B1.2', 'ARPP19', 'RP11-139H15.1', - 'TCF12', 'LINC00926', 'ADAM10', 'MYO1E', 'BNIP2', 'NARG2', 'RP11-219B17.1', 'RORA', - 'VPS13C', 'TPM1', 'RAB8B', 'APH1B', 'FAM96A', 'KIAA0101', 'CLPX', 'AAGAB', - 'C15orf61', 'FEM1B', 'EDC3', 'COMMD4', 'NEIL1', 'SIN3A', 'SCAPER', 'RCN2', 'HMG20A', - 'ST20', 'BCL2A1', 'MESDC2', 'IL16', 'WHAMM', 'HOMER2', 'FANCI', 'IDH2', 'UNC45A', - 'HDDC3', 'CHD2', 'ARRDC4', 'LYSMD4', 'TARSL2', 'POLR3K', 'HBA1', 'LUC7L', 'RAB40C', - 'C16orf13', 'STUB1', 'FAM173A', 'RPUSD1', 'NME3', 'HAGH', 'NDUFB10', 'GFER', 'IL32', - 'ZNF263', 'CORO7', 'DNAJA3', 'NUDT16L1', 'CARHSP1', 'USP7', 'ATF7IP2', 'DEXI', - 'LITAF', 'TNFRSF17', 'PDXDC1', 'FOPNL', 'COQ7', 'CCP110', 'IGSF6', 'C16orf52', - 'POLR3E', 'GGA2', 'EARS2', 'PRKCB', 'RBBP6', 'RABEP2', 'CD19', 'SPNS1', 'SNX29P2', - 'C16orf54', 'TMEM219', 'TAOK2', 'YPEL3', 'SEPHS2', 'ZNF747', 'ZNF688', 'PHKG2', - 'STX4', 'FUS', 'PYCARD', 'TGFB1I1', 'C16orf58', 'RP11-42I10.1', 'CNEP1R1', 'SNX20', - 'AKTIP', 'BBS2', 'CPNE2', 'ARL2BP', 'CIAPIN1', 'GPR56', 'KIFC3', 'C16orf80', 'GOT2', - 'FAM96B', 'CES4A', 'TMEM208', 'ACD', 'TANGO6', 'CYB5B', 'NFAT5', 'ST3GAL2', - 'RP11-432I5.1', 'ATXN1L', 'HP', 'PSMD7', 'RP11-252A24.3', 'GABARAPL2', 'KARS', - 'TERF2IP', 'COTL1', 'C16orf74', 'IRF8', 'BANP', 'CYBA', 'MVD', 'SPG7', 'ZNF276', - 'TIMM22', 'YWHAE', 'PITPNA-AS1', 'PRPF8', 'SERPINF1', 'SMYD4', 'PAFAH1B1', 'SHPK-1', - 'P2RX5', 'ARRB2', 'PSMB6', 'GP1BA', 'SLC25A11', 'ZNF232', 'ZNF594', 'TXNDC17', - 'ALOX12', 'CLEC10A', 'ASGR1', 'ACADVL', 'ELP5', 'ACAP1', 'TMEM102', 'TNFSF12', - 'AC113189.5', 'SAT2', 'C17orf59', 'ADPRM', 'UBB', 'TRPV2', 'PLD6', 'NT5M', 'MED9', - 'RASD1', 'PEMT', 'SREBF1', 'TRIM16L', 'GRAP', 'IFT20', 'POLDIP2', 'TMEM199', - 'PROCA1', 'RAB34', 'NEK8', 'PHF12', 'ADAP2', 'NF1', 'UTP6', 'CCL2', 'SLFN5', - 'SLFN12', 'CCL5', 'CCL3', 'CCL4', 'CCL4L1', 'GGNBP2', 'MRM1', 'AATF', 'TADA2A', - 'MLLT6', 'RARA', 'CTD-2267D19.2', 'RP5-1028K7.2', 'DNAJC7', 'NKIRAS2', - 'RP11-400F19.6', 'MLX', 'TUBG2', 'VPS25', 'RUNDC1', 'IFI35', 'NBR1', 'DHX8', - 'RP11-527L4.5', 'HDAC5', 'GRN', 'ITGA2B', 'HEXIM2', 'RP11-798G7.6', 'GOSR2', 'ITGB3', - 'OSBPL7', 'ABI3', 'PDK2', 'SAMD14', 'LRRC59', 'ABCC3', 'LUC7L3', 'MMD', 'NOG', - 'SCPEP1', 'MRPS23', 'BZRAP1-AS1', 'SEPT4', 'YPEL2', 'INTS2', 'CYB561', 'LIMD2', - 'PSMC5', 'CD79B', 'ICAM2', 'TEX2', 'NOL11', 'ARSG', 'CTD-2006K23.1', 'NAT9', - 'TMEM104', 'ATP5H', 'SLC16A5', 'ARMC7', 'NT5C', 'GGA3', 'GRB2', 'SMIM5', 'GALK1', - 'SPHK1', 'USP36', 'RNF213', 'RP11-1055B8.7', 'OXLD1', 'ARL16', 'ARHGDIA', 'STRA13', - 'RFNG', 'GPS1', 'C17orf62', 'FN3KRP', 'YES1', 'SMCHD1', 'RP13-270P17.3', 'RALBP1', - 'VAPA', 'PSMG2', 'OSBPL1A', 'RNF125', 'ZNF397', 'INO80C', 'ATP5A1', 'CXXC1', 'NARS', - 'MALT1', 'RP11-879F14.2', 'TMX3', 'NFATC1', 'RBCK1', 'RP11-314N13.3', 'SIRPG', - 'SNRPB', 'ITPA', 'C20orf27', 'PRNP', 'PCNA', 'CRLS1', 'ANKEF1', 'MKKS', 'TASP1', - 'SNX5', 'RIN2', 'NAA20', 'CD93', 'CST3', 'CST7', 'ABHD12', 'PLAGL2', 'SNTA1', - 'NECAB3', 'PXMP4', 'RALY', 'PIGU', 'UQCC1', 'RBM39', 'AAR2', 'MYL9', 'RPN2', 'BLCAP', - 'CTNNBL1', 'MAFB', 'SRSF6', 'TTPAL', 'PKIG', 'YWHAB', 'DNTTIP1', 'UBE2C', 'MMP9', - 'LINC00494', 'STAU1', 'CEBPB', 'KCNG1', 'ATP9A', 'FAM210B', 'RTFDC1', 'ZBP1', - 'PMEPA1', 'STX16', 'TUBB1', 'PSMA7', 'DIDO1', 'GID8', 'TPD52L2', 'TCEA2', 'RGS19', - 'PRSS57', 'ELANE', 'POLR2E', 'ATP5D', 'C19orf24', 'MUM1', 'ATP8B3', 'PLEKHJ1', - 'GADD45B', 'SLC39A3', 'NFIC', 'DOHH', 'TBXA2R', 'SIRT6', 'CCDC94', 'FEM1A', 'SAFB2', - 'DUS3L', 'VMAC', 'ALKBH7', 'DENND1C', 'PCP2', 'RETN', 'MAP2K7', 'CD320', 'RAB11B', - 'MARCH2', 'HNRNPM', 'ZNF559', 'ZNF561', 'CDC37', 'S1PR5', 'ILF3-AS1', 'ILF3', - 'C19orf52', 'SMARCA4', 'TMEM205', 'ZNF653', 'ECSIT', 'ELOF1', 'ZNF69', 'ZNF799', - 'FBXW9', 'HOOK2', 'RAD23A', 'IL27RA', 'SAMD1', 'PRKACA', 'ZNF333', 'AC004257.3', - 'AKAP8', 'TPM4', 'FAM32A', 'CHERP', 'SMIM7', 'MYO9B', 'BABAM1', 'MVB12A', 'SLC27A1', - 'COLGALT1', 'INSL3', 'CCDC124', 'IFI30', 'JUND', 'ELL', 'CRTC1', 'RFXANK', 'NR2C2AP', - 'ZNF682', 'ZNF493', 'LINC00662', 'PLEKHF1', 'ANKRD27', 'LSM14A', 'PDCD2L', - 'ARHGAP33', 'TYROBP', 'POLR2I', 'TBCB', 'AC092295.7', 'AC074138.3', 'ZNF567', - 'PPP1R14A', 'C19orf33', 'KCNK6', 'RASGRP4', 'ACTN4', 'CAPN12', 'HNRNPL', 'MRPS12', - 'SAMD4B', 'EID2', 'PSMC4', 'TMEM91', 'ATP5SL', 'CEACAM4', 'CD79A', 'CTC-378H22.1', - 'ETHE1', 'ZNF404', 'ZNF45', 'TOMM40', 'RELB', 'PRKD2', 'BBC3', 'C5AR1', 'C5AR2', - 'DHX34', 'NAPA-AS1', 'PLA2G4C', 'CYTH2', 'GYS1', 'TRPM4', 'CD37', 'FCGRT', 'PRRG2', - 'IL4I1', 'SPIB', 'NKG7', 'ZNF175', 'SIGLEC14', 'FPR1', 'ZNF350', 'ZNF615', 'ZNF841', - 'ZNF836', 'ZNF528', 'ZNF468', 'MYADM', 'OSCAR', 'PRPF31', 'MBOAT7', 'LILRA4', - 'LAIR1', 'KIR2DL3', 'KIR3DL2', 'FCAR', 'PPP6R1', 'SUV420H2', 'ISOC2', 'ZNF628', - 'CTD-2537I9.12', 'EPN1', 'AURKC', 'CTC-444N24.11', 'ZNF587B', 'ZNF256', - 'CTD-2368P22.1', 'AC010642.1', 'EIF1AY', 'TPTEP1', 'CECR5', 'PEX26', 'MRPL40', - 'CLDN5', 'SEPT5', 'ARVCF', 'PPIL2', 'IGLL5', 'DDT', 'GUCD1', 'EWSR1', 'GAS2L1', - 'NEFH', 'ZMAT5', 'RFPL2', 'FBXO7', 'HMGXB4', 'EIF3D', 'PVALB', 'MPST', 'LGALS2', - 'SH3BP1', 'LGALS1', 'ANKRD54', 'DDX17', 'APOBEC3A', 'APOBEC3B', 'APOBEC3G', - 'RPS19BP1', 'ADSL', 'PHF5A', 'DESI1', 'WBP2NL', 'SMDT1', 'PACSIN2', 'PARVB', - 'LDOC1L', 'PRR5', 'ATXN10', 'TTC38', 'CTA-29F11.1', 'CRELD2', 'LMF2', 'TYMP', - 'RABL2B', 'SAMSN1', 'USP25', 'MAP3K7CL', 'BACH1', 'MIS18A', 'ATP5O', 'KCNE1', 'TTC3', - 'DSCR3', 'BRWD1', 'BACE2', 'SIK1', 'C21orf33', 'ICOSLG', 'SUMO3', 'SLC19A1', 'S100B', - 'PRMT2'], 'ranges': {'CellName': { - 'options': {'AAACATACAACCAC-1': 1, 'AAACATTGAGCTAC-1': 1, 'AAACATTGATCAGC-1': 1, 'AAACCGTGCTTCCG-1': 1, - 'AAACCGTGTATGCG-1': 1, 'AAACGCACTGGTAC-1': 1, 'AAACGCTGACCAGT-1': 1, 'AAACGCTGGTTCTT-1': 1, - 'AAACGCTGTAGCCA-1': 1, 'AAACGCTGTTTCTG-1': 1, 'AAACTTGAAAAACG-1': 1, 'AAACTTGATCCAGA-1': 1, - 'AAAGAGACGAGATA-1': 1, 'AAAGAGACGCGAGA-1': 1, 'AAAGAGACGGACTT-1': 1, 'AAAGAGACGGCATT-1': 1, - 'AAAGCAGATATCGG-1': 1, 'AAAGCCTGTATGCG-1': 1, 'AAAGGCCTGTCTAG-1': 1, 'AAAGTTTGATCACG-1': 1, - 'AAAGTTTGGGGTGA-1': 1, 'AAAGTTTGTAGAGA-1': 1, 'AAAGTTTGTAGCGT-1': 1, 'AAATCAACAATGCC-1': 1, - 'AAATCAACACCAGT-1': 1, 'AAATCAACCAGGAG-1': 1, 'AAATCAACCCTATT-1': 1, 'AAATCAACGGAAGC-1': 1, - 'AAATCAACTCGCAA-1': 1, 'AAATCATGACCACA-1': 1, 'AAATCCCTCCACAA-1': 1, 'AAATCCCTGCTATG-1': 1, - 'AAATGTTGAACGAA-1': 1, 'AAATGTTGCCACAA-1': 1, 'AAATGTTGTGGCAT-1': 1, 'AAATTCGAAGGTTC-1': 1, - 'AAATTCGAATCACG-1': 1, 'AAATTCGAGCTGAT-1': 1, 'AAATTCGAGGAGTG-1': 1, 'AAATTCGATTCTCA-1': 1, - 'AAATTGACACGACT-1': 1, 'AAATTGACTCGCTC-1': 1, 'AACAAACTCATTTC-1': 1, 'AACAAACTTTCGTT-1': 1, - 'AACAATACGACGAG-1': 1, 'AACACGTGCAGAGG-1': 1, 'AACACGTGGAAAGT-1': 1, 'AACACGTGGAACCT-1': 1, - 'AACACGTGGCTACA-1': 1, 'AACACGTGTACGAC-1': 1, 'AACAGCACAAGAGT-1': 1, 'AACATTGATGGGAG-1': 1, - 'AACCAGTGATACCG-1': 1, 'AACCCAGATCGCTC-1': 1, 'AACCGATGCTCCCA-1': 1, 'AACCGATGGTCATG-1': 1, - 'AACCGATGTTCTAC-1': 1, 'AACCGCCTAGCGTT-1': 1, 'AACCGCCTCTACGA-1': 1, 'AACCTACTGTGAGG-1': 1, - 'AACCTACTGTGTTG-1': 1, 'AACCTTACGAGACG-1': 1, 'AACCTTACGCGAGA-1': 1, 'AACCTTACTAACGC-1': 1, - 'AACCTTTGGACGGA-1': 1, 'AACCTTTGTACGCA-1': 1, 'AACGCAACAAGTAG-1': 1, 'AACGCATGACCCAA-1': 1, - 'AACGCATGCCTTCG-1': 1, 'AACGCATGTACTTC-1': 1, 'AACGCCCTCGGGAA-1': 1, 'AACGCCCTCGTACA-1': 1, - 'AACGCCCTGGCATT-1': 1, 'AACGTCGAGTATCG-1': 1, 'AACGTGTGAAAGCA-1': 1, 'AACGTGTGGCGGAA-1': 1, - 'AACGTGTGTCCAAG-1': 1, 'AACGTGTGTGCTTT-1': 1, 'AACTACCTTAGAGA-1': 1, 'AACTCACTCAAGCT-1': 1, - 'AACTCACTTGGAGG-1': 1, 'AACTCGGAAAGTGA-1': 1, 'AACTCGGAAGGTCT-1': 1, 'AACTCTTGCAGGAG-1': 1, - 'AACTGTCTCCCTTG-1': 1, 'AACTTGCTACGCTA-1': 1, 'AACTTGCTGGGACA-1': 1, 'AAGAACGAGTGTTG-1': 1, - 'AAGAAGACGTAGGG-1': 1, 'AAGACAGAAGTCTG-1': 1, 'AAGACAGAGGATCT-1': 1, 'AAGACAGATTACCT-1': 1, - 'AAGAGATGGGTAGG-1': 1, 'AAGATGGAAAACAG-1': 1, 'AAGATGGAGAACTC-1': 1, 'AAGATGGAGATAAG-1': 1, - 'AAGATTACAACCTG-1': 1, 'AAGATTACAGATCC-1': 1, 'AAGATTACCCGTTC-1': 1, 'AAGATTACCGCCTT-1': 1, - 'AAGATTACCTCAAG-1': 1, 'AAGATTACTCCTCG-1': 1, 'AAGCAAGAGCGAGA-1': 1, 'AAGCAAGAGCTTAG-1': 1, - 'AAGCAAGAGGTGTT-1': 1, 'AAGCACTGAGCAAA-1': 1, 'AAGCACTGCATACG-1': 1, 'AAGCACTGGTTCTT-1': 1, - 'AAGCCAACGTGTTG-1': 1, 'AAGCCATGAACTGC-1': 1, 'AAGCCATGACACGT-1': 1, 'AAGCCATGCGTGAT-1': 1, - 'AAGCCATGTCTCGC-1': 1, 'AAGCCTGACATGCA-1': 1, 'AAGCCTGACCGAAT-1': 1, 'AAGCGACTCCTCAC-1': 1, - 'AAGCGACTGTGTCA-1': 1, 'AAGCGACTTACAGC-1': 1, 'AAGCGACTTTGACG-1': 1, 'AAGCGTACGTCTTT-1': 1, - 'AAGGCTTGCGAACT-1': 1, 'AAGGTCACGGTTAC-1': 1, 'AAGGTCACTGTTTC-1': 1, 'AAGGTCACTTCCCG-1': 1, - 'AAGGTCTGACAGTC-1': 1, 'AAGGTCTGCAGATC-1': 1, 'AAGTAACTCTGAAC-1': 1, 'AAGTAACTGAGATA-1': 1, - 'AAGTAGGATACAGC-1': 1, 'AAGTATACCGAACT-1': 1, 'AAGTCCGACTTGTT-1': 1, 'AAGTCCGATAGAAG-1': 1, - 'AAGTCTCTAGTCGT-1': 1, 'AAGTCTCTCGGAGA-1': 1, 'AAGTGGCTTGGAGG-1': 1, 'AAGTTCCTCATTCT-1': 1, - 'AAGTTCCTTCTTAC-1': 1, 'AATAAGCTCGAATC-1': 1, 'AATAAGCTCGTTGA-1': 1, 'AATACCCTGGACGA-1': 1, - 'AATACCCTGGCATT-1': 1, 'AATACTGAAAGGGC-1': 1, 'AATACTGAATTGGC-1': 1, 'AATAGGGAACCCTC-1': 1, - 'AATAGGGAGAATGA-1': 1, 'AATCAAACTATCGG-1': 1, 'AATCCGGAATGCTG-1': 1, 'AATCCTACCGGTAT-1': 1, - 'AATCCTTGACGGGA-1': 1, 'AATCCTTGGTGAGG-1': 1, 'AATCGGTGGAACTC-1': 1, 'AATCGGTGTGCTTT-1': 1, - 'AATCTAGAAAAGTG-1': 1, 'AATCTAGAATCGGT-1': 1, 'AATCTCACAGCCTA-1': 1, 'AATCTCACTCTAGG-1': 1, - 'AATCTCTGAACAGA-1': 1, 'AATCTCTGCTTTAC-1': 1, 'AATGATACACCAAC-1': 1, 'AATGATACGGTCAT-1': 1, - 'AATGCGTGACACCA-1': 1, 'AATGCGTGGACGGA-1': 1, 'AATGCGTGGCTATG-1': 1, 'AATGGAGAATCGTG-1': 1, - 'AATGGAGATCCTTA-1': 1, 'AATGGCTGACACCA-1': 1, 'AATGGCTGCGTGAT-1': 1, 'AATGGCTGTAAAGG-1': 1, - 'AATGGCTGTACTCT-1': 1, 'AATGGCTGTGAAGA-1': 1, 'AATGTAACGGTGGA-1': 1, 'AATGTCCTCTTCTA-1': 1, - 'AATGTTGACAGTCA-1': 1, 'AATGTTGAGTTGAC-1': 1, 'AATGTTGATCTACT-1': 1, 'AATTACGAATTCCT-1': 1, - 'AATTACGACTTCTA-1': 1, 'AATTACGAGTGAGG-1': 1, 'AATTACGATTGGCA-1': 1, 'AATTCCTGCTCAGA-1': 1, - 'AATTGATGTCGCAA-1': 1, 'AATTGTGACTTGGA-1': 1, 'ACAAAGGAGGGTGA-1': 1, 'ACAAATTGATTCTC-1': 1, - 'ACAAATTGCTCAGA-1': 1, 'ACAAATTGTTGCGA-1': 1, 'ACAACCGAGGGATG-1': 1, 'ACAACCGAGTTACG-1': 1, - 'ACAAGAGAAGTCGT-1': 1, 'ACAAGAGACTTATC-1': 1, 'ACAAGAGAGTTGAC-1': 1, 'ACAATCCTAACCGT-1': 1, - 'ACAATCCTTAGCGT-1': 1, 'ACAATTGACTGACA-1': 1, 'ACAATTGATGACTG-1': 1, 'ACACAGACCATACG-1': 1, - 'ACACCAGAGGGCAA-1': 1, 'ACACCCTGGTGTTG-1': 1, 'ACACGAACAGTTCG-1': 1, 'ACACGATGACGCAT-1': 1, - 'ACACGATGATGTGC-1': 1, 'ACACGATGTCGTAG-1': 1, 'ACACGATGTGGTCA-1': 1, 'ACAGACACGGCATT-1': 1, - 'ACAGACACGTTGTG-1': 1, 'ACAGCAACACCTAG-1': 1, 'ACAGCAACCTCAAG-1': 1, 'ACAGGTACCCCACT-1': 1, - 'ACAGGTACGCTGTA-1': 1, 'ACAGGTACTGGTGT-1': 1, 'ACAGTCGACCCAAA-1': 1, 'ACAGTCGACCGATA-1': 1, - 'ACAGTGACTCACCC-1': 1, 'ACAGTGACTCTATC-1': 1, 'ACAGTGTGGTCACA-1': 1, 'ACAGTGTGTTGCGA-1': 1, - 'ACATCACTCTACTT-1': 1, 'ACATGGTGAAGCCT-1': 1, 'ACATGGTGCAACCA-1': 1, 'ACATGGTGCGAGTT-1': 1, - 'ACATTCTGGCATAC-1': 1, 'ACATTCTGGGAACG-1': 1, 'ACCAACGACATGCA-1': 1, 'ACCACAGAAAGTAG-1': 1, - 'ACCACAGAGTTGGT-1': 1, 'ACCACCTGTGTGCA-1': 1, 'ACCACGCTACAGCT-1': 1, 'ACCACGCTACCCAA-1': 1, - 'ACCACGCTGCGAGA-1': 1, 'ACCACGCTGCTGTA-1': 1, 'ACCAGCCTGACAGG-1': 1, 'ACCAGTGAACGGTT-1': 1, - 'ACCAGTGAATACCG-1': 1, 'ACCAGTGAGGGATG-1': 1, 'ACCAGTGATGACTG-1': 1, 'ACCATTACCTTCTA-1': 1, - 'ACCATTACGAGATA-1': 1, 'ACCATTTGTCATTC-1': 1, 'ACCCAAGAACTGTG-1': 1, 'ACCCAAGAATTCCT-1': 1, - 'ACCCAAGAGGACAG-1': 1, 'ACCCAAGATTCACT-1': 1, 'ACCCACTGCGCCTT-1': 1, 'ACCCACTGGACAGG-1': 1, - 'ACCCACTGGTTCAG-1': 1, 'ACCCACTGTCGTAG-1': 1, 'ACCCAGCTCAGAAA-1': 1, 'ACCCAGCTGTTAGC-1': 1, - 'ACCCAGCTTGCTTT-1': 1, 'ACCCGTTGATGACC-1': 1, 'ACCCGTTGCTGCAA-1': 1, 'ACCCGTTGCTTCTA-1': 1, - 'ACCCTCGACCTATT-1': 1, 'ACCCTCGACGGTAT-1': 1, 'ACCCTCGATAAGGA-1': 1, 'ACCCTCGATCAAGC-1': 1, - 'ACCGTGCTACCAGT-1': 1, 'ACCGTGCTGGAACG-1': 1, 'ACCTATTGCTGAGT-1': 1, 'ACCTATTGTGCCCT-1': 1, - 'ACCTCCGAGTCCTC-1': 1, 'ACCTCCGATATGCG-1': 1, 'ACCTCCGATGCTGA-1': 1, 'ACCTCGTGAACCAC-1': 1, - 'ACCTGAGATATCGG-1': 1, 'ACCTGGCTAAGTAG-1': 1, 'ACCTTTGACTCCCA-1': 1, 'ACCTTTGAGGAACG-1': 1, - 'ACCTTTGAGGAAGC-1': 1, 'ACGAACACCTTGTT-1': 1, 'ACGAACTGGCTATG-1': 1, 'ACGAAGCTCTCCAC-1': 1, - 'ACGAAGCTCTGAGT-1': 1, 'ACGACCCTATCTCT-1': 1, 'ACGACCCTGATGAA-1': 1, 'ACGACCCTTGACAC-1': 1, - 'ACGACCCTTGACCA-1': 1, 'ACGAGGGACAGGAG-1': 1, 'ACGAGGGACGAACT-1': 1, 'ACGAGGGATGTAGC-1': 1, - 'ACGAGTACCCTAAG-1': 1, 'ACGAGTACGAATCC-1': 1, 'ACGATCGAGGACTT-1': 1, 'ACGATCGAGTCACA-1': 1, - 'ACGATGACAATGCC-1': 1, 'ACGATGACTGGTCA-1': 1, 'ACGATTCTACGGGA-1': 1, 'ACGCAATGGTTCAG-1': 1, - 'ACGCACCTGTTAGC-1': 1, 'ACGCCACTGAACTC-1': 1, 'ACGCCGGAAACCAC-1': 1, 'ACGCCGGAAAGCCT-1': 1, - 'ACGCCGGAAATGCC-1': 1, 'ACGCCTTGCTCCCA-1': 1, 'ACGCGGTGGCGAGA-1': 1, 'ACGCGGTGTGTGGT-1': 1, - 'ACGCGGTGTTTGCT-1': 1, 'ACGCTCACAGTACC-1': 1, 'ACGCTCACCCTTGC-1': 1, 'ACGCTGCTGTTCTT-1': 1, - 'ACGGAACTCAGATC-1': 1, 'ACGGAACTGTCGTA-1': 1, 'ACGGAGGACTCTTA-1': 1, 'ACGGATTGGGAGGT-1': 1, - 'ACGGATTGGTTAGC-1': 1, 'ACGGCTCTGAGCAG-1': 1, 'ACGGCTCTTGCACA-1': 1, 'ACGGTAACCGCTAA-1': 1, - 'ACGGTAACCTTCGC-1': 1, 'ACGGTAACGGTGGA-1': 1, 'ACGGTAACTCGCAA-1': 1, 'ACGGTATGAGTCGT-1': 1, - 'ACGGTATGGGTATC-1': 1, 'ACGGTATGGTTGTG-1': 1, 'ACGGTCCTAACGGG-1': 1, 'ACGGTCCTCGGGAA-1': 1, - 'ACGTAGACAACCAC-1': 1, 'ACGTAGACTACAGC-1': 1, 'ACGTCAGAAACGAA-1': 1, 'ACGTCAGAGAGCTT-1': 1, - 'ACGTCAGAGGGATG-1': 1, 'ACGTCCTGATAAGG-1': 1, 'ACGTCCTGTGAACC-1': 1, 'ACGTCGCTCCTGAA-1': 1, - 'ACGTCGCTCTATTC-1': 1, 'ACGTCGCTTCTCAT-1': 1, 'ACGTGATGCCATGA-1': 1, 'ACGTGATGGGTCTA-1': 1, - 'ACGTGATGTAACCG-1': 1, 'ACGTGATGTGACAC-1': 1, 'ACGTGCCTCCGTAA-1': 1, 'ACGTGCCTTCTATC-1': 1, - 'ACGTTACTTTCCAT-1': 1, 'ACGTTGGAAAAGCA-1': 1, 'ACGTTGGAAACCTG-1': 1, 'ACGTTGGACCGTAA-1': 1, - 'ACGTTGGAGCCAAT-1': 1, 'ACGTTGGATATGGC-1': 1, 'ACGTTGGATCAGGT-1': 1, 'ACGTTTACATCAGC-1': 1, - 'ACTAAAACCCACAA-1': 1, 'ACTAAAACTCGACA-1': 1, 'ACTACGGAATTTCC-1': 1, 'ACTACGGACCTATT-1': 1, - 'ACTACGGATCGCTC-1': 1, 'ACTACTACTAAGGA-1': 1, 'ACTAGGTGGAACCT-1': 1, 'ACTAGGTGGAACTC-1': 1, - 'ACTATCACCTTGGA-1': 1, 'ACTATCACTGCCAA-1': 1, 'ACTCAGGACTGAAC-1': 1, 'ACTCAGGATCTATC-1': 1, - 'ACTCAGGATTCGTT-1': 1, 'ACTCCTCTCAACTG-1': 1, 'ACTCGCACGAAAGT-1': 1, 'ACTCGCACTACGAC-1': 1, - 'ACTCTCCTGACACT-1': 1, 'ACTCTCCTGCATAC-1': 1, 'ACTCTCCTGTTTGG-1': 1, 'ACTGAGACAACCAC-1': 1, - 'ACTGAGACCCATAG-1': 1, 'ACTGAGACGTTGGT-1': 1, 'ACTGCCACACACGT-1': 1, 'ACTGCCACTCCGTC-1': 1, - 'ACTGGCCTTCAGTG-1': 1, 'ACTGTGGACGTGTA-1': 1, 'ACTGTGGATCTAGG-1': 1, 'ACTGTTACCCACAA-1': 1, - 'ACTGTTACTGCAGT-1': 1, 'ACTTAAGAACCACA-1': 1, 'ACTTAAGATTACTC-1': 1, 'ACTTAGCTGCGTAT-1': 1, - 'ACTTAGCTGGGAGT-1': 1, 'ACTTCAACAAGCAA-1': 1, 'ACTTCAACGTAGGG-1': 1, 'ACTTCCCTTTCCGC-1': 1, - 'ACTTCTGACATGCA-1': 1, 'ACTTGACTCCACAA-1': 1, 'ACTTGGGAGAAAGT-1': 1, 'ACTTGGGAGGTTTG-1': 1, - 'ACTTGGGATGTGAC-1': 1, 'ACTTGGGATTGACG-1': 1, 'ACTTGTACCTGTCC-1': 1, 'ACTTTGTGGAAAGT-1': 1, - 'ACTTTGTGGATAGA-1': 1, 'AGAAACGAAAGTAG-1': 1, 'AGAAAGTGCGCAAT-1': 1, 'AGAAAGTGGGGATG-1': 1, - 'AGAACAGAAATGCC-1': 1, 'AGAACAGACGACTA-1': 1, 'AGAACAGAGACAAA-1': 1, 'AGAACGCTTTGCTT-1': 1, - 'AGAAGATGTGACTG-1': 1, 'AGAATGGAAGAAGT-1': 1, 'AGAATTTGTAACCG-1': 1, 'AGAATTTGTAGAGA-1': 1, - 'AGACACACTGTAGC-1': 1, 'AGACACTGTCAAGC-1': 1, 'AGACCTGAAGTAGA-1': 1, 'AGACCTGACCAACA-1': 1, - 'AGACCTGAGGAAGC-1': 1, 'AGACGTACAGAGGC-1': 1, 'AGACGTACCCCTAC-1': 1, 'AGACGTACCTCTTA-1': 1, - 'AGACGTACTCGTGA-1': 1, 'AGACTGACCATCAG-1': 1, 'AGACTGACCCTTTA-1': 1, 'AGACTTCTCATGCA-1': 1, - 'AGAGATGACAGTCA-1': 1, 'AGAGATGACTGAAC-1': 1, 'AGAGATGAGGTTTG-1': 1, 'AGAGATGATCTCGC-1': 1, - 'AGAGATGATTGTGG-1': 1, 'AGAGCGGAGGCAAG-1': 1, 'AGAGTCTGGTCGTA-1': 1, 'AGAGTGCTCAGCTA-1': 1, - 'AGAGTGCTCGAATC-1': 1, 'AGAGTGCTGTCATG-1': 1, 'AGAGTGCTGTCCTC-1': 1, 'AGAGTGCTGTGTTG-1': 1, - 'AGATATACCCGTAA-1': 1, 'AGATATACGATGAA-1': 1, 'AGATATACTGTTCT-1': 1, 'AGATATTGCCTACC-1': 1, - 'AGATATTGGCCAAT-1': 1, 'AGATCGTGTCTGGA-1': 1, 'AGATCGTGTTTGTC-1': 1, 'AGATCTCTATCACG-1': 1, - 'AGATTAACGTTCTT-1': 1, 'AGATTCCTATCGTG-1': 1, 'AGATTCCTCACTTT-1': 1, 'AGATTCCTGACGAG-1': 1, - 'AGATTCCTGTTCAG-1': 1, 'AGCAAAGATATGCG-1': 1, 'AGCACAACAGTCTG-1': 1, 'AGCACTGAGGGAGT-1': 1, - 'AGCACTGATATGCG-1': 1, 'AGCACTGATGCTTT-1': 1, 'AGCACTGATTGCGA-1': 1, 'AGCATCGAAGATCC-1': 1, - 'AGCATCGAAGGGTG-1': 1, 'AGCATCGAGCTTCC-1': 1, 'AGCATCGAGTGAGG-1': 1, 'AGCATCGATAACCG-1': 1, - 'AGCATGACGATGAA-1': 1, 'AGCCAATGGGGAGT-1': 1, 'AGCCAATGTATCTC-1': 1, 'AGCCACCTGGATCT-1': 1, - 'AGCCGGTGCCAATG-1': 1, 'AGCCGGTGTGTTTC-1': 1, 'AGCCGTCTCAATCG-1': 1, 'AGCCGTCTGAGAGC-1': 1, - 'AGCCTCACGTTCGA-1': 1, 'AGCCTCACTGTCAG-1': 1, 'AGCCTCTGCAGTTG-1': 1, 'AGCCTCTGCCAATG-1': 1, - 'AGCGAACTGGATCT-1': 1, 'AGCGAACTTACTGG-1': 1, 'AGCGATACGGAGCA-1': 1, 'AGCGATTGAGATCC-1': 1, - 'AGCGCCGAATCTCT-1': 1, 'AGCGCCGACAGAGG-1': 1, 'AGCGCTCTACCTTT-1': 1, 'AGCGGCACCGGGAA-1': 1, - 'AGCGGCTGATGTGC-1': 1, 'AGCGGGCTTGCCAA-1': 1, 'AGCGTAACATGCTG-1': 1, 'AGCGTAACTGAGAA-1': 1, - 'AGCTCGCTACTGGT-1': 1, 'AGCTCGCTCTGCTC-1': 1, 'AGCTGAACCATACG-1': 1, 'AGCTGAACCTCTCG-1': 1, - 'AGCTGCCTTGGGAG-1': 1, 'AGCTGCCTTTCATC-1': 1, 'AGCTGCCTTTCTGT-1': 1, 'AGCTGTGATCCAAG-1': 1, - 'AGCTTTACAAGTAG-1': 1, 'AGCTTTACACCAAC-1': 1, 'AGCTTTACTCTCAT-1': 1, 'AGGAAATGAGGAGC-1': 1, - 'AGGAACCTCTTAGG-1': 1, 'AGGAACCTTGCCTC-1': 1, 'AGGAATGATAACGC-1': 1, 'AGGAATGATTTGTC-1': 1, - 'AGGAGTCTGGTTTG-1': 1, 'AGGAGTCTTGTCAG-1': 1, 'AGGATAGACATTTC-1': 1, 'AGGATAGAGGATTC-1': 1, - 'AGGATGCTACTAGC-1': 1, 'AGGATGCTTTAGGC-1': 1, 'AGGCAACTGAAGGC-1': 1, 'AGGCAGGAGTACCA-1': 1, - 'AGGCCTCTAGTCGT-1': 1, 'AGGCCTCTCGGAGA-1': 1, 'AGGCCTCTCGTAAC-1': 1, 'AGGGACGACGTTGA-1': 1, - 'AGGGACGAGTCAAC-1': 1, 'AGGGACGAGTTGTG-1': 1, 'AGGGACGATAGAGA-1': 1, 'AGGGACGATGCATG-1': 1, - 'AGGGAGTGAGCCTA-1': 1, 'AGGGCCACCATACG-1': 1, 'AGGGCGCTAACCAC-1': 1, 'AGGGCGCTATGGTC-1': 1, - 'AGGGTGGACAGTCA-1': 1, 'AGGGTGGACTCAAG-1': 1, 'AGGGTGGAGTTGCA-1': 1, 'AGGGTTTGTTCATC-1': 1, - 'AGGTCATGAGTGTC-1': 1, 'AGGTCATGCTTATC-1': 1, 'AGGTCTGATTCTCA-1': 1, 'AGGTGGGAAGAATG-1': 1, - 'AGGTGGGAAGTTCG-1': 1, 'AGGTGTTGGTTACG-1': 1, 'AGGTTCGAACCTCC-1': 1, 'AGGTTCGAACGTAC-1': 1, - 'AGGTTCGAGGGTGA-1': 1, 'AGTAAGGAGTTTGG-1': 1, 'AGTAAGGATTCTTG-1': 1, 'AGTAATACATCACG-1': 1, - 'AGTAATACCGAACT-1': 1, 'AGTAATTGTCCCAC-1': 1, 'AGTACGTGAGGGTG-1': 1, 'AGTACGTGCTGCAA-1': 1, - 'AGTACGTGCTTGGA-1': 1, 'AGTACTCTACGTGT-1': 1, 'AGTACTCTCAACCA-1': 1, 'AGTACTCTCGGTAT-1': 1, - 'AGTAGGCTTGCCTC-1': 1, 'AGTATAACTTGTCT-1': 1, 'AGTATCCTAGAACA-1': 1, 'AGTCACGATGAGCT-1': 1, - 'AGTCAGACGAATAG-1': 1, 'AGTCAGACGCTTAG-1': 1, 'AGTCAGACTAGAGA-1': 1, 'AGTCAGACTGCACA-1': 1, - 'AGTCCAGATATCTC-1': 1, 'AGTCCAGATTTCAC-1': 1, 'AGTCGAACCAACCA-1': 1, 'AGTCGCCTCCGTAA-1': 1, - 'AGTCTACTAGGGTG-1': 1, 'AGTCTACTTGCATG-1': 1, 'AGTCTTACACCACA-1': 1, 'AGTCTTACTTCGCC-1': 1, - 'AGTCTTACTTCGGA-1': 1, 'AGTGACTGCAACTG-1': 1, 'AGTGTTCTAACCTG-1': 1, 'AGTGTTCTATAAGG-1': 1, - 'AGTGTTCTCACTTT-1': 1, 'AGTTAAACCACTTT-1': 1, 'AGTTATGAACAGTC-1': 1, 'AGTTATGACTGAGT-1': 1, - 'AGTTATGAGTTCAG-1': 1, 'AGTTCTACCAGCTA-1': 1, 'AGTTCTTGAAGCCT-1': 1, 'AGTTGTCTACTACG-1': 1, - 'AGTTTAGATGGTCA-1': 1, 'AGTTTCACGGTCTA-1': 1, 'AGTTTGCTACAGTC-1': 1, 'AGTTTGCTACTGGT-1': 1, - 'AGTTTGCTCCAAGT-1': 1, 'ATAAACACAGTGCT-1': 1, 'ATAAACACCACCAA-1': 1, 'ATAACAACATGCTG-1': 1, - 'ATAACAACGTCTAG-1': 1, 'ATAACAACTTTGTC-1': 1, 'ATAACATGTACTCT-1': 1, 'ATAACCCTGTTGGT-1': 1, - 'ATAACCCTTGGTAC-1': 1, 'ATAAGTACGAATGA-1': 1, 'ATAAGTTGGTACGT-1': 1, 'ATAAGTTGTCTAGG-1': 1, - 'ATAATCGAGCTGAT-1': 1, 'ATAATCGATGGTTG-1': 1, 'ATAATGACCTACTT-1': 1, 'ATAATGACTCGTGA-1': 1, - 'ATACAATGTTAGGC-1': 1, 'ATACCACTCGTACA-1': 1, 'ATACCACTCTAAGC-1': 1, 'ATACCACTGCCAAT-1': 1, - 'ATACCGGAATGCTG-1': 1, 'ATACCGGACATTTC-1': 1, 'ATACCGGACTTCGC-1': 1, 'ATACCGGAGGTGTT-1': 1, - 'ATACCGGATCTCGC-1': 1, 'ATACCTACGCATCA-1': 1, 'ATACCTTGGGGCAA-1': 1, 'ATACGGACAGACTC-1': 1, - 'ATACGGACCTACTT-1': 1, 'ATACGGACGAGGTG-1': 1, 'ATACGGACTATGCG-1': 1, 'ATACGGACTCTGGA-1': 1, - 'ATACGTCTTAACGC-1': 1, 'ATACTCTGCTTCGC-1': 1, 'ATACTCTGGTATGC-1': 1, 'ATAGATACCATGGT-1': 1, - 'ATAGATACGACGAG-1': 1, 'ATAGATTGGTGTAC-1': 1, 'ATAGCCGAACGGAG-1': 1, 'ATAGCGTGCAGATC-1': 1, - 'ATAGCGTGCCCTTG-1': 1, 'ATAGCGTGGTATCG-1': 1, 'ATAGCGTGTCTCTA-1': 1, 'ATAGCTCTCTGATG-1': 1, - 'ATAGCTCTGAGGTG-1': 1, 'ATAGGAGAAACAGA-1': 1, 'ATAGGCTGTCAGAC-1': 1, 'ATAGTCCTAGTGTC-1': 1, - 'ATAGTCCTTGCATG-1': 1, 'ATAGTCCTTGTCGA-1': 1, 'ATAGTTGACAACTG-1': 1, 'ATAGTTGACCCTCA-1': 1, - 'ATAGTTGAGACGTT-1': 1, 'ATAGTTGATAAGCC-1': 1, 'ATATACGAAGCCAT-1': 1, 'ATATACGAATTGGC-1': 1, - 'ATATAGTGGAATGA-1': 1, 'ATATGCCTAGATCC-1': 1, 'ATATGCCTGGACAG-1': 1, 'ATATGCCTTCTCTA-1': 1, - 'ATATGCCTTGGTAC-1': 1, 'ATCAAATGAGCCTA-1': 1, 'ATCAAATGGGTAAA-1': 1, 'ATCAACCTAAACGA-1': 1, - 'ATCAACCTGAGGAC-1': 1, 'ATCAACCTTCTCTA-1': 1, 'ATCAACCTTTGTCT-1': 1, 'ATCACACTTTGTCT-1': 1, - 'ATCACGGATTTCGT-1': 1, 'ATCATCTGACACCA-1': 1, 'ATCATGCTAGAGTA-1': 1, 'ATCATGCTGAACCT-1': 1, - 'ATCCAGGACGCTAA-1': 1, 'ATCCAGGATGGAAA-1': 1, 'ATCCATACTCCTTA-1': 1, 'ATCCATACTTCATC-1': 1, - 'ATCCCGTGCAGTCA-1': 1, 'ATCCCGTGCATGCA-1': 1, 'ATCCCGTGGCTGAT-1': 1, 'ATCCGCACGCATCA-1': 1, - 'ATCCTAACGACGGA-1': 1, 'ATCCTAACGCTACA-1': 1, 'ATCGACGAAACTGC-1': 1, 'ATCGACGAATGACC-1': 1, - 'ATCGAGTGGACGTT-1': 1, 'ATCGCAGAATCTCT-1': 1, 'ATCGCAGAGTGTCA-1': 1, 'ATCGCCACTGAGGG-1': 1, - 'ATCGCCTGGGTCAT-1': 1, 'ATCGCCTGTGGCAT-1': 1, 'ATCGCGCTCAGAGG-1': 1, 'ATCGCGCTGGGATG-1': 1, - 'ATCGCGCTTTTCGT-1': 1, 'ATCGGAACCAGTCA-1': 1, 'ATCGGTGAGTCAAC-1': 1, 'ATCGGTGATTGCAG-1': 1, - 'ATCGTTTGCCTACC-1': 1, 'ATCGTTTGGGTACT-1': 1, 'ATCGTTTGTGCCAA-1': 1, 'ATCTACACCCGCTT-1': 1, - 'ATCTACACCGGGAA-1': 1, 'ATCTCAACAGGAGC-1': 1, 'ATCTCAACCTCGAA-1': 1, 'ATCTCAACCTTGTT-1': 1, - 'ATCTGGGAAACCAC-1': 1, 'ATCTGGGAAGTGTC-1': 1, 'ATCTGGGATTCCGC-1': 1, 'ATCTGTTGAACGGG-1': 1, - 'ATCTGTTGACCTCC-1': 1, 'ATCTGTTGCCTTCG-1': 1, 'ATCTGTTGGTTGCA-1': 1, 'ATCTTGACACCAAC-1': 1, - 'ATCTTGACCTCCCA-1': 1, 'ATCTTTCTGCATCA-1': 1, 'ATCTTTCTGTTTCT-1': 1, 'ATCTTTCTTGTCCC-1': 1, - 'ATGAAACTCTGTGA-1': 1, 'ATGAAACTGAGGCA-1': 1, 'ATGAAGGAACAGCT-1': 1, 'ATGAAGGACCTGTC-1': 1, - 'ATGAAGGACCTTAT-1': 1, 'ATGAAGGACTAGTG-1': 1, 'ATGAAGGACTTGCC-1': 1, 'ATGACGTGACGACT-1': 1, - 'ATGACGTGATCGGT-1': 1, 'ATGAGAGAAAGTGA-1': 1, 'ATGAGAGAACGCAT-1': 1, 'ATGAGAGAAGTAGA-1': 1, - 'ATGAGCACACAGCT-1': 1, 'ATGAGCACATCTTC-1': 1, 'ATGATAACTTCACT-1': 1, 'ATGATATGAAACAG-1': 1, - 'ATGATATGACTGGT-1': 1, 'ATGATATGAGCACT-1': 1, 'ATGATATGGTCATG-1': 1, 'ATGATATGGTGCTA-1': 1, - 'ATGATATGTTGTCT-1': 1, 'ATGCACGAATGTCG-1': 1, 'ATGCACGACTGTAG-1': 1, 'ATGCACGAGAACCT-1': 1, - 'ATGCACGAGTTCGA-1': 1, 'ATGCACGATTGGTG-1': 1, 'ATGCAGTGTTACCT-1': 1, 'ATGCAGTGTTCTAC-1': 1, - 'ATGCCAGAACGACT-1': 1, 'ATGCCAGACAGTCA-1': 1, 'ATGCCGCTTGAACC-1': 1, 'ATGCGATGCTATGG-1': 1, - 'ATGCGATGCTGAGT-1': 1, 'ATGCGATGGTTACG-1': 1, 'ATGCGCCTTCATTC-1': 1, 'ATGCTTTGCGAATC-1': 1, - 'ATGCTTTGGGCGAA-1': 1, 'ATGCTTTGTAGTCG-1': 1, 'ATGGACACATCGGT-1': 1, 'ATGGACACGCATCA-1': 1, - 'ATGGGTACAACCTG-1': 1, 'ATGGGTACATCGGT-1': 1, 'ATGGGTACTATTCC-1': 1, 'ATGGGTACTGGGAG-1': 1, - 'ATGTAAACACCTCC-1': 1, 'ATGTAAACCCGCTT-1': 1, 'ATGTAAACGGGATG-1': 1, 'ATGTAAACTCTCCG-1': 1, - 'ATGTAAACTTCACT-1': 1, 'ATGTACCTCAGTCA-1': 1, 'ATGTACCTTAGTCG-1': 1, 'ATGTACCTTTATCC-1': 1, - 'ATGTACCTTTCACT-1': 1, 'ATGTCACTAATGCC-1': 1, 'ATGTCACTCTGCTC-1': 1, 'ATGTCGGAGGTGAG-1': 1, - 'ATGTTCACAGTCTG-1': 1, 'ATGTTCACCGTAGT-1': 1, 'ATGTTGCTTTCAGG-1': 1, 'ATTAACGATGAGAA-1': 1, - 'ATTAACGATGCAAC-1': 1, 'ATTAAGACTGCAGT-1': 1, 'ATTACCTGCCTTAT-1': 1, 'ATTACCTGGAGGAC-1': 1, - 'ATTAGATGTTTCAC-1': 1, 'ATTATGGAATCTCT-1': 1, 'ATTCAAGAACGGGA-1': 1, 'ATTCAAGACCTTTA-1': 1, - 'ATTCAGCTCATTGG-1': 1, 'ATTCCAACCATTGG-1': 1, 'ATTCCAACTTAGGC-1': 1, 'ATTCGACTCACTAG-1': 1, - 'ATTCGACTGAATAG-1': 1, 'ATTCGACTTTTGTC-1': 1, 'ATTCGGGAAAGGCG-1': 1, 'ATTCGGGATTAGGC-1': 1, - 'ATTCTTCTGATACC-1': 1, 'ATTGAATGGACGGA-1': 1, 'ATTGATGAAGGTTC-1': 1, 'ATTGATGACTGAGT-1': 1, - 'ATTGATGAGCGAAG-1': 1, 'ATTGATGATCTATC-1': 1, 'ATTGCACTGACGGA-1': 1, 'ATTGCACTGAGAGC-1': 1, - 'ATTGCACTGGAGCA-1': 1, 'ATTGCACTTAGCCA-1': 1, 'ATTGCACTTGCTTT-1': 1, 'ATTGCTTGTTACTC-1': 1, - 'ATTGGTCTGACTAC-1': 1, 'ATTGGTCTTGTCTT-1': 1, 'ATTGTAGATTCCCG-1': 1, 'ATTGTAGATTGCAG-1': 1, - 'ATTGTCTGCGTACA-1': 1, 'ATTTAGGAACCATG-1': 1, 'ATTTAGGACAGAGG-1': 1, 'ATTTCCGAGATGAA-1': 1, - 'ATTTCCGAGTGCTA-1': 1, 'ATTTCGTGTATGGC-1': 1, 'ATTTCTCTACTTTC-1': 1, 'ATTTCTCTAGCAAA-1': 1, - 'ATTTCTCTCACTTT-1': 1, 'ATTTCTCTTCCCAC-1': 1, 'ATTTGCACAAGATG-1': 1, 'CAAAGCACAGCTCA-1': 1, - 'CAAAGCACCGTAAC-1': 1, 'CAAAGCACGGTAAA-1': 1, 'CAAAGCTGAAAGTG-1': 1, 'CAAAGCTGTTGCTT-1': 1, - 'CAAATATGTGACAC-1': 1, 'CAAATTGAGGGCAA-1': 1, 'CAAATTGATGGAGG-1': 1, 'CAACCAGAAAAGTG-1': 1, - 'CAACCAGAAGTGCT-1': 1, 'CAACCAGAGTTCAG-1': 1, 'CAACCAGATAGAAG-1': 1, 'CAACCGCTGTTCAG-1': 1, - 'CAACCGCTTTGAGC-1': 1, 'CAACGATGCGCAAT-1': 1, 'CAACGTGACTCCAC-1': 1, 'CAACGTGAGCCATA-1': 1, - 'CAACGTGATCAAGC-1': 1, 'CAAGAAGACCACAA-1': 1, 'CAAGAAGACGTCTC-1': 1, 'CAAGAAGATTCTAC-1': 1, - 'CAAGACTGACCTGA-1': 1, 'CAAGACTGAGTAGA-1': 1, 'CAAGCTGACCATAG-1': 1, 'CAAGCTGATCTATC-1': 1, - 'CAAGGACTGTTCAG-1': 1, 'CAAGGACTTCTTTG-1': 1, 'CAAGGTTGCTCCAC-1': 1, 'CAAGGTTGTCATTC-1': 1, - 'CAAGGTTGTCTGGA-1': 1, 'CAAGTCGAAACAGA-1': 1, 'CAAGTCGATAGCGT-1': 1, 'CAATAAACGCCATA-1': 1, - 'CAATAATGAACTGC-1': 1, 'CAATATGACATGGT-1': 1, 'CAATATGACCTTCG-1': 1, 'CAATATGACGTTAG-1': 1, - 'CAATATGAGGAGCA-1': 1, 'CAATCGGAGAAACA-1': 1, 'CAATCTACTGACTG-1': 1, 'CAATTCACCCAACA-1': 1, - 'CAATTCACGATAGA-1': 1, 'CAATTCACTTGTGG-1': 1, 'CAATTCTGCTTGTT-1': 1, 'CAATTCTGGCGTAT-1': 1, - 'CACAACGATACGAC-1': 1, 'CACAATCTTGTTCT-1': 1, 'CACAATCTTTCCAT-1': 1, 'CACACCTGCTTGAG-1': 1, - 'CACACCTGTATGGC-1': 1, 'CACAGAACCCTTGC-1': 1, 'CACAGAACCTGATG-1': 1, 'CACAGATGGGATTC-1': 1, - 'CACAGATGGTTTCT-1': 1, 'CACAGCCTGATACC-1': 1, 'CACAGCCTTGCCAA-1': 1, 'CACAGCCTTGTAGC-1': 1, - 'CACAGTGATGAAGA-1': 1, 'CACATACTACAGCT-1': 1, 'CACATGGAACACGT-1': 1, 'CACATGGAAGTCGT-1': 1, - 'CACCACTGCCAACA-1': 1, 'CACCACTGGCGAAG-1': 1, 'CACCCATGTTCTGT-1': 1, 'CACCGGGAATCGAC-1': 1, - 'CACCGGGACGAGAG-1': 1, 'CACCGGGACGTGTA-1': 1, 'CACCGGGACTTCTA-1': 1, 'CACCGGGACTTGCC-1': 1, - 'CACCGGGATTCGGA-1': 1, 'CACCGTACTAAGGA-1': 1, 'CACCGTACTAGCGT-1': 1, 'CACCTGACACCCAA-1': 1, - 'CACCTGACCAGAAA-1': 1, 'CACCTGACCTCAAG-1': 1, 'CACCTGACGAAAGT-1': 1, 'CACCTGACTCGTAG-1': 1, - 'CACGAAACTTCCGC-1': 1, 'CACGACCTCGATAC-1': 1, 'CACGCTACAGAAGT-1': 1, 'CACGCTACTGTTCT-1': 1, - 'CACGGGACAGAGTA-1': 1, 'CACGGGACATAAGG-1': 1, 'CACGGGACGTAGGG-1': 1, 'CACGGGTGCTTCGC-1': 1, - 'CACGGGTGGAGGAC-1': 1, 'CACGGGTGTGTTTC-1': 1, 'CACTAACTCCTAAG-1': 1, 'CACTAACTGAAAGT-1': 1, - 'CACTAGGATGATGC-1': 1, 'CACTATACCCCGTT-1': 1, 'CACTATACGTTTGG-1': 1, 'CACTGAGACAGTCA-1': 1, - 'CACTGCACTTCATC-1': 1, 'CACTGCTGAGACTC-1': 1, 'CACTGCTGGAAAGT-1': 1, 'CACTTAACCGAATC-1': 1, - 'CACTTAACCGTACA-1': 1, 'CACTTTGACTCTAT-1': 1, 'CACTTTGAGCTGTA-1': 1, 'CAGAAGCTCTCAAG-1': 1, - 'CAGACATGAACGGG-1': 1, 'CAGACATGTCGACA-1': 1, 'CAGACCCTAAGGTA-1': 1, 'CAGACCCTAATGCC-1': 1, - 'CAGACCCTAGGAGC-1': 1, 'CAGACTGAGTATGC-1': 1, 'CAGATCGAATGTCG-1': 1, 'CAGATCGACCTGAA-1': 1, - 'CAGATCGATATGGC-1': 1, 'CAGATGACATTCTC-1': 1, 'CAGCAATGCCTTCG-1': 1, 'CAGCAATGGAGGGT-1': 1, - 'CAGCAATGGTGCTA-1': 1, 'CAGCAATGTCTACT-1': 1, 'CAGCAATGTGACCA-1': 1, 'CAGCAATGTGAGGG-1': 1, - 'CAGCACCTAAGCCT-1': 1, 'CAGCACCTAGGCGA-1': 1, 'CAGCACCTGTAGGG-1': 1, 'CAGCATGACAACCA-1': 1, - 'CAGCATGAGACGTT-1': 1, 'CAGCCTACCCAACA-1': 1, 'CAGCCTTGCTACCC-1': 1, 'CAGCCTTGGGGACA-1': 1, - 'CAGCGGACACCCTC-1': 1, 'CAGCGGACCTTTAC-1': 1, 'CAGCGTCTAAAGCA-1': 1, 'CAGCGTCTTATCGG-1': 1, - 'CAGCTAGATGTGAC-1': 1, 'CAGCTCTGAGGCGA-1': 1, 'CAGCTCTGCAAGCT-1': 1, 'CAGCTCTGTCGTAG-1': 1, - 'CAGCTCTGTGTGGT-1': 1, 'CAGGAACTAACTGC-1': 1, 'CAGGAACTCTCAGA-1': 1, 'CAGGCCGAACACCA-1': 1, - 'CAGGCCGAACACGT-1': 1, 'CAGGCCGAACGACT-1': 1, 'CAGGCCGAATCTCT-1': 1, 'CAGGCCGACTAGCA-1': 1, - 'CAGGGCACCATACG-1': 1, 'CAGGGCACCCAACA-1': 1, 'CAGGGCACTCCCGT-1': 1, 'CAGGTAACAGACTC-1': 1, - 'CAGGTATGAGTCGT-1': 1, 'CAGGTATGTGCTTT-1': 1, 'CAGGTTGAGGATCT-1': 1, 'CAGTGATGGACGGA-1': 1, - 'CAGTGATGGCTAAC-1': 1, 'CAGTGATGGGACAG-1': 1, 'CAGTGATGTAAGGA-1': 1, 'CAGTGATGTACGCA-1': 1, - 'CAGTGTGATGTCAG-1': 1, 'CAGTTACTAAGGTA-1': 1, 'CAGTTACTGATAGA-1': 1, 'CAGTTGGAAAGAGT-1': 1, - 'CAGTTGGACATACG-1': 1, 'CAGTTTACACACGT-1': 1, 'CAGTTTACCCCAAA-1': 1, 'CATAAAACGGAGCA-1': 1, - 'CATAAATGAACTGC-1': 1, 'CATAACCTTCTCCG-1': 1, 'CATACTACCTCGAA-1': 1, 'CATACTACCTGAAC-1': 1, - 'CATACTACGTACCA-1': 1, 'CATACTTGGGTTAC-1': 1, 'CATAGTCTAATCGC-1': 1, 'CATAGTCTCACTTT-1': 1, - 'CATATAGACTAAGC-1': 1, 'CATATAGATCAGGT-1': 1, 'CATCAACTAGAAGT-1': 1, 'CATCAACTCCCTCA-1': 1, - 'CATCAGGACTTCCG-1': 1, 'CATCAGGATAGCCA-1': 1, 'CATCAGGATCCTAT-1': 1, 'CATCAGGATGCACA-1': 1, - 'CATCAGGATTTCGT-1': 1, 'CATCATACCGCATA-1': 1, 'CATCATACGGAGCA-1': 1, 'CATCATACTCAAGC-1': 1, - 'CATCGCTGGGATCT-1': 1, 'CATCGCTGTGGCAT-1': 1, 'CATCGGCTATGCTG-1': 1, 'CATCGGCTTTGGCA-1': 1, - 'CATCTCCTATGTGC-1': 1, 'CATCTCCTCGAACT-1': 1, 'CATGAGACACGGGA-1': 1, 'CATGAGACGTTGAC-1': 1, - 'CATGAGACTCGCCT-1': 1, 'CATGCCACGGGTGA-1': 1, 'CATGCCACTGCCAA-1': 1, 'CATGCGCTAGTCAC-1': 1, - 'CATGCGCTCAGATC-1': 1, 'CATGCGCTTTGCAG-1': 1, 'CATGGCCTAGGGTG-1': 1, 'CATGGCCTGTGCAT-1': 1, - 'CATGTACTATCGTG-1': 1, 'CATGTTACAGTCGT-1': 1, 'CATGTTACCTGAGT-1': 1, 'CATGTTTGGGGATG-1': 1, - 'CATTACACACGGAG-1': 1, 'CATTACACCAACTG-1': 1, 'CATTACACGGAGTG-1': 1, 'CATTACACTACTCT-1': 1, - 'CATTAGCTCCACAA-1': 1, 'CATTGACTAGCGGA-1': 1, 'CATTGGGACTCGAA-1': 1, 'CATTGTACAGCGTT-1': 1, - 'CATTGTACTCGATG-1': 1, 'CATTGTACTTATCC-1': 1, 'CATTGTACTTTGCT-1': 1, 'CATTGTTGCTAGTG-1': 1, - 'CATTTCGACTCTAT-1': 1, 'CATTTCGAGATACC-1': 1, 'CATTTGACCACACA-1': 1, 'CATTTGACCCTGAA-1': 1, - 'CATTTGTGACGACT-1': 1, 'CATTTGTGCATTGG-1': 1, 'CATTTGTGCGGAGA-1': 1, 'CATTTGTGGGATCT-1': 1, - 'CCAAAGTGCTACGA-1': 1, 'CCAAAGTGTGAGAA-1': 1, 'CCAACCTGAAGTAG-1': 1, 'CCAACCTGACGTAC-1': 1, - 'CCAACCTGTTCGCC-1': 1, 'CCAAGAACCCAATG-1': 1, 'CCAAGAACGTAGCT-1': 1, 'CCAAGAACGTGTCA-1': 1, - 'CCAAGAACTACTGG-1': 1, 'CCAAGAACTCCTAT-1': 1, 'CCAAGATGTCATTC-1': 1, 'CCAAGATGTTTCAC-1': 1, - 'CCAAGTGAGGAACG-1': 1, 'CCAAGTGATCAAGC-1': 1, 'CCAATTTGAACGTC-1': 1, 'CCACCATGAACGTC-1': 1, - 'CCACCATGATCGGT-1': 1, 'CCACCATGGACGAG-1': 1, 'CCACCATGGGGAGT-1': 1, 'CCACCATGTCCTGC-1': 1, - 'CCACTGACCCGCTT-1': 1, 'CCACTGTGGGAAGC-1': 1, 'CCACTGTGTGTAGC-1': 1, 'CCACTTCTCGGGAA-1': 1, - 'CCAGAAACCCTGTC-1': 1, 'CCAGAAACGAACTC-1': 1, 'CCAGAAACGGTCTA-1': 1, 'CCAGACCTCTGAGT-1': 1, - 'CCAGACCTTGTGGT-1': 1, 'CCAGCACTGCGATT-1': 1, 'CCAGCGGAAAGGCG-1': 1, 'CCAGCGGACGACTA-1': 1, - 'CCAGCGGATGGGAG-1': 1, 'CCAGCTACACAGTC-1': 1, 'CCAGCTACCAGCTA-1': 1, 'CCAGGTCTACACCA-1': 1, - 'CCAGGTCTAGCATC-1': 1, 'CCAGGTCTATGGTC-1': 1, 'CCAGTCACACTGGT-1': 1, 'CCAGTCACACTGTG-1': 1, - 'CCAGTCACGTTGTG-1': 1, 'CCAGTGCTAACCAC-1': 1, 'CCAGTGCTCGTAGT-1': 1, 'CCATCCGAAAGCAA-1': 1, - 'CCATCCGAACGACT-1': 1, 'CCATCCGAAGGTTC-1': 1, 'CCATCCGATTCGCC-1': 1, 'CCATCGTGAACGGG-1': 1, - 'CCATCGTGCTAGAC-1': 1, 'CCCAACACCTCGCT-1': 1, 'CCCAACACGCATCA-1': 1, 'CCCAACACTTTGTC-1': 1, - 'CCCAACTGCAATCG-1': 1, 'CCCAGACTGCCTTC-1': 1, 'CCCAGACTGGTTTG-1': 1, 'CCCAGACTTTCGCC-1': 1, - 'CCCAGTTGCAGTTG-1': 1, 'CCCAGTTGGGTACT-1': 1, 'CCCAGTTGTCTATC-1': 1, 'CCCGATTGTGTTTC-1': 1, - 'CCCGGAGAAGGGTG-1': 1, 'CCCTACGAATTGGC-1': 1, 'CCCTAGTGCAAAGA-1': 1, 'CCCTCAGACACTTT-1': 1, - 'CCCTCAGACGAGAG-1': 1, 'CCCTCAGAGGTCAT-1': 1, 'CCCTGAACTAAAGG-1': 1, 'CCCTGATGCAACCA-1': 1, - 'CCCTGATGCAAGCT-1': 1, 'CCCTTACTAACCAC-1': 1, 'CCCTTACTGCAGTT-1': 1, 'CCGAAAACCTTGTT-1': 1, - 'CCGACACTGGTTTG-1': 1, 'CCGACTACCCAGTA-1': 1, 'CCGACTACCGTGTA-1': 1, 'CCGACTACTGAGGG-1': 1, - 'CCGATAGACCTAAG-1': 1, 'CCGATAGAGTTGGT-1': 1, 'CCGCGAGACACACA-1': 1, 'CCGCGAGAGGTTCA-1': 1, - 'CCGCTATGGGACGA-1': 1, 'CCGCTATGTGCAAC-1': 1, 'CCGCTATGTGCACA-1': 1, 'CCGGTACTGTCCTC-1': 1, - 'CCGTACACAAGCAA-1': 1, 'CCGTACACAGCGTT-1': 1, 'CCGTACACGTCATG-1': 1, 'CCGTACACGTTGGT-1': 1, - 'CCGTACACTAACGC-1': 1, 'CCTAAACTTTCGTT-1': 1, 'CCTAAGGACCCAAA-1': 1, 'CCTAAGGACTAGCA-1': 1, - 'CCTAAGGAGGGCAA-1': 1, 'CCTAAGGATGATGC-1': 1, 'CCTAAGGATGTCAG-1': 1, 'CCTACCGACTCTTA-1': 1, - 'CCTACCGAGGGATG-1': 1, 'CCTAGAGAGGTGAG-1': 1, 'CCTATAACCAAAGA-1': 1, 'CCTATAACGAGACG-1': 1, - 'CCTATAACTCAGAC-1': 1, 'CCTATAACTGCATG-1': 1, 'CCTCGAACACTTTC-1': 1, 'CCTCGAACCCGTAA-1': 1, - 'CCTCGAACGTATCG-1': 1, 'CCTCGAACTTACTC-1': 1, 'CCTCTACTCTTCGC-1': 1, 'CCTCTACTGGCATT-1': 1, - 'CCTGACTGAAGTAG-1': 1, 'CCTGACTGGGGAGT-1': 1, 'CCTGACTGTGTCTT-1': 1, 'CCTGCAACACGTTG-1': 1, - 'CCTGGACTCGTGAT-1': 1, 'CCTTAATGCCCAAA-1': 1, 'CCTTAATGTTCTAC-1': 1, 'CCTTCACTACGACT-1': 1, - 'CCTTCACTCAGTCA-1': 1, 'CCTTCACTGGAGTG-1': 1, 'CCTTTAGATTCATC-1': 1, 'CGAACATGCCCTAC-1': 1, - 'CGAACATGTCAGAC-1': 1, 'CGAAGACTGGAACG-1': 1, 'CGAAGACTGTTACG-1': 1, 'CGAAGGGAAACCTG-1': 1, - 'CGAAGGGATCCGAA-1': 1, 'CGAAGTACCAACTG-1': 1, 'CGAATCGAGGAGCA-1': 1, 'CGAATCGAGGAGGT-1': 1, - 'CGACAAACCCATAG-1': 1, 'CGACAAACCGACAT-1': 1, 'CGACCACTAAAGTG-1': 1, 'CGACCACTGCCAAT-1': 1, - 'CGACCGGAAGGTCT-1': 1, 'CGACCGGATGGAAA-1': 1, 'CGACCTTGCTAGTG-1': 1, 'CGACGTCTATCGTG-1': 1, - 'CGACGTCTCGTGTA-1': 1, 'CGACGTCTGAGGCA-1': 1, 'CGACTCACGTCGTA-1': 1, 'CGACTCACGTTGCA-1': 1, - 'CGACTCTGTGTGAC-1': 1, 'CGACTGCTTCCTCG-1': 1, 'CGAGAACTAAGGCG-1': 1, 'CGAGAACTACGTTG-1': 1, - 'CGAGAACTTGTTCT-1': 1, 'CGAGATTGGACACT-1': 1, 'CGAGATTGGCCATA-1': 1, 'CGAGCCGAACACCA-1': 1, - 'CGAGCCGAGGCGAA-1': 1, 'CGAGCGTGCTCCAC-1': 1, 'CGAGCGTGGATACC-1': 1, 'CGAGCGTGTATGCG-1': 1, - 'CGAGGAGACCTCCA-1': 1, 'CGAGGAGATGTCGA-1': 1, 'CGAGGCACCTATGG-1': 1, 'CGAGGCACTATGCG-1': 1, - 'CGAGGCACTCTTCA-1': 1, 'CGAGGCTGACGCTA-1': 1, 'CGAGGCTGGCAGTT-1': 1, 'CGAGGGCTACGACT-1': 1, - 'CGAGGGCTCGAATC-1': 1, 'CGAGTATGTCACCC-1': 1, 'CGATACGAACAGTC-1': 1, 'CGATACGACAGGAG-1': 1, - 'CGATACGATTCACT-1': 1, 'CGATAGACCCGTAA-1': 1, 'CGATAGACCGTACA-1': 1, 'CGATAGACGTAGGG-1': 1, - 'CGATAGACTGTTCT-1': 1, 'CGATCAGAAGAACA-1': 1, 'CGATCAGAGAGGGT-1': 1, 'CGATCAGAGGTACT-1': 1, - 'CGATCAGATGTGAC-1': 1, 'CGATCCACCGGGAA-1': 1, 'CGATCCACTTCCAT-1': 1, 'CGCAAATGCTCGAA-1': 1, - 'CGCAACCTCCTTGC-1': 1, 'CGCAACCTGGACGA-1': 1, 'CGCACGGAGGACGA-1': 1, 'CGCACGGATCTTTG-1': 1, - 'CGCACTACAGAATG-1': 1, 'CGCACTACAGCCAT-1': 1, 'CGCACTACATTGGC-1': 1, 'CGCACTACTCGCCT-1': 1, - 'CGCACTACTCGTGA-1': 1, 'CGCACTTGTCACGA-1': 1, 'CGCAGGACAGATCC-1': 1, 'CGCAGGACCTACTT-1': 1, - 'CGCAGGACTTGTCT-1': 1, 'CGCAGGTGCACTGA-1': 1, 'CGCAGGTGCCATAG-1': 1, 'CGCAGGTGGGAACG-1': 1, - 'CGCATAGATCACGA-1': 1, 'CGCCATACTGCAAC-1': 1, 'CGCCATTGAGAGGC-1': 1, 'CGCCATTGCTATGG-1': 1, - 'CGCCATTGGAGACG-1': 1, 'CGCCATTGGAGCAG-1': 1, 'CGCCATTGTACTGG-1': 1, 'CGCCGAGAGCTTAG-1': 1, - 'CGCCTAACGAATGA-1': 1, 'CGCCTAACTGCTCC-1': 1, 'CGCGAGACACAGCT-1': 1, 'CGCGAGACAGGTCT-1': 1, - 'CGCGAGACGCTACA-1': 1, 'CGCGATCTCAGTCA-1': 1, 'CGCGATCTGTTGAC-1': 1, 'CGCGATCTTTCTTG-1': 1, - 'CGCGGATGGCCAAT-1': 1, 'CGCTAAGAATGTCG-1': 1, 'CGCTAAGACAACTG-1': 1, 'CGCTAAGACCCTTG-1': 1, - 'CGCTACTGAACAGA-1': 1, 'CGCTACTGAGAACA-1': 1, 'CGCTACTGTGAGCT-1': 1, 'CGCTACTGTTCCCG-1': 1, - 'CGCTCATGCATTTC-1': 1, 'CGGAATTGGTTTGG-1': 1, 'CGGAATTGTGGAGG-1': 1, 'CGGACCGATGCGTA-1': 1, - 'CGGACCGATGGGAG-1': 1, 'CGGACTCTAAACAG-1': 1, 'CGGACTCTCCAATG-1': 1, 'CGGACTCTCCTCGT-1': 1, - 'CGGAGGCTATTCCT-1': 1, 'CGGAGGCTTGGATC-1': 1, 'CGGATAACAACGAA-1': 1, 'CGGATAACAGCTCA-1': 1, - 'CGGATAACTCAGTG-1': 1, 'CGGCACGAACTCAG-1': 1, 'CGGCACGAAGGGTG-1': 1, 'CGGCACGACTACGA-1': 1, - 'CGGCATCTTAGAAG-1': 1, 'CGGCATCTTCGTAG-1': 1, 'CGGCCAGAAAGGTA-1': 1, 'CGGCCAGAGAGGCA-1': 1, - 'CGGCGAACCAGTCA-1': 1, 'CGGCGAACGACAAA-1': 1, 'CGGCGAACGGTCTA-1': 1, 'CGGCGAACTACTTC-1': 1, - 'CGGGACTGCGTGTA-1': 1, 'CGGGACTGGAATAG-1': 1, 'CGGGCATGACCCAA-1': 1, 'CGGGCATGTCTCTA-1': 1, - 'CGGGCATGTTGTGG-1': 1, 'CGGTAAACTCGCAA-1': 1, 'CGGTCACTGTTTGG-1': 1, 'CGGTCACTTACTTC-1': 1, - 'CGTAACGATCGCCT-1': 1, 'CGTACCACACACAC-1': 1, 'CGTACCACACGTTG-1': 1, 'CGTACCACCTCATT-1': 1, - 'CGTACCACGGAGCA-1': 1, 'CGTACCTGGCATCA-1': 1, 'CGTAGCCTCTCTCG-1': 1, 'CGTAGCCTGCGAAG-1': 1, - 'CGTAGCCTGTATGC-1': 1, 'CGTCAAGAAAGGTA-1': 1, 'CGTCAAGAACGTGT-1': 1, 'CGTCAAGACAGAGG-1': 1, - 'CGTCAAGACAGGAG-1': 1, 'CGTCCATGCTCTTA-1': 1, 'CGTCGACTTTCCGC-1': 1, 'CGTGATGACGCTAA-1': 1, - 'CGTGATGAGGTTCA-1': 1, 'CGTGCACTTATGGC-1': 1, 'CGTGTAGAAAAACG-1': 1, 'CGTGTAGACGATAC-1': 1, - 'CGTGTAGAGTTACG-1': 1, 'CGTGTAGAGTTCAG-1': 1, 'CGTGTAGATTCGGA-1': 1, 'CGTTAGGAAACCAC-1': 1, - 'CGTTAGGATCATTC-1': 1, 'CGTTATACCCTGAA-1': 1, 'CGTTTAACTGGTCA-1': 1, 'CTAAACCTCTGACA-1': 1, - 'CTAAACCTGTGCAT-1': 1, 'CTAACACTAACGTC-1': 1, 'CTAACACTAGTGCT-1': 1, 'CTAACGGAACCGAT-1': 1, - 'CTAACGGATTTCTG-1': 1, 'CTAACTACGGCAAG-1': 1, 'CTAAGGACACCATG-1': 1, 'CTAAGGACCGTTAG-1': 1, - 'CTAAGGACGCCATA-1': 1, 'CTAAGGTGCCTAAG-1': 1, 'CTAAGGTGTTGCAG-1': 1, 'CTAAGGTGTTTCTG-1': 1, - 'CTAATAGAGCTATG-1': 1, 'CTAATGCTTGTGGT-1': 1, 'CTACAACTCCCGTT-1': 1, 'CTACCTCTCAACCA-1': 1, - 'CTACGCACACCTAG-1': 1, 'CTACGCACTCTCCG-1': 1, 'CTACGCACTGGTCA-1': 1, 'CTACGGCTTTCTTG-1': 1, - 'CTACTATGAACCAC-1': 1, 'CTACTATGATGTGC-1': 1, 'CTACTATGCTAAGC-1': 1, 'CTACTATGTAAAGG-1': 1, - 'CTACTCCTATGTCG-1': 1, 'CTACTCCTGCCATA-1': 1, 'CTAGAGACACTTTC-1': 1, 'CTAGAGACAGCATC-1': 1, - 'CTAGAGACTTTGGG-1': 1, 'CTAGATCTCTCTAT-1': 1, 'CTAGATCTTCGACA-1': 1, 'CTAGGATGAGCCTA-1': 1, - 'CTAGGATGATCGTG-1': 1, 'CTAGGCCTCTCAGA-1': 1, 'CTAGGTGATGGTTG-1': 1, 'CTAGTTACCAGAGG-1': 1, - 'CTAGTTACCGCATA-1': 1, 'CTAGTTACGAAACA-1': 1, 'CTATAAGATCGTTT-1': 1, 'CTATACTGAGGTTC-1': 1, - 'CTATACTGCCAGTA-1': 1, 'CTATACTGCGCTAA-1': 1, 'CTATACTGCTACGA-1': 1, 'CTATACTGTCTCAT-1': 1, - 'CTATACTGTTCGTT-1': 1, 'CTATAGCTGTCACA-1': 1, 'CTATAGCTTCGCTC-1': 1, 'CTATAGCTTGCCTC-1': 1, - 'CTATCAACGAACTC-1': 1, 'CTATCAACGCAGAG-1': 1, 'CTATCAACTTTGGG-1': 1, 'CTATCCCTCCACCT-1': 1, - 'CTATGTACGAGAGC-1': 1, 'CTATGTACGCTTAG-1': 1, 'CTATGTACTGTTTC-1': 1, 'CTATGTTGAAAGCA-1': 1, - 'CTATGTTGTCCTCG-1': 1, 'CTATGTTGTCTCGC-1': 1, 'CTATTGACAAACGA-1': 1, 'CTATTGACACTGGT-1': 1, - 'CTATTGACGGTGAG-1': 1, 'CTATTGTGGCAAGG-1': 1, 'CTCAATTGGTTCAG-1': 1, 'CTCAATTGGTTGCA-1': 1, - 'CTCAGAGATAGAAG-1': 1, 'CTCAGCACTCTAGG-1': 1, 'CTCAGCACTGAACC-1': 1, 'CTCAGCACTTGCAG-1': 1, - 'CTCAGCTGAACCTG-1': 1, 'CTCAGCTGCAGTTG-1': 1, 'CTCAGGCTCGTTGA-1': 1, 'CTCAGGCTGCTAAC-1': 1, - 'CTCATTGACCTTAT-1': 1, 'CTCATTGATGCTTT-1': 1, 'CTCCACGAGAGATA-1': 1, 'CTCCATCTCTTAGG-1': 1, - 'CTCCATCTGACGAG-1': 1, 'CTCCGAACAAGTGA-1': 1, 'CTCCTACTGCCTTC-1': 1, 'CTCGAAGATGTGGT-1': 1, - 'CTCGAAGATTAGGC-1': 1, 'CTCGACTGCTCTAT-1': 1, 'CTCGACTGGGTGAG-1': 1, 'CTCGACTGGTTGAC-1': 1, - 'CTCGAGCTCTGGAT-1': 1, 'CTCGCATGACTTTC-1': 1, 'CTCGCATGCTTAGG-1': 1, 'CTCTAAACCTCGAA-1': 1, - 'CTCTAAACGGCGAA-1': 1, 'CTCTAATGTCCAAG-1': 1, 'CTGAACGACAGTCA-1': 1, 'CTGAACGATGAGGG-1': 1, - 'CTGAAGACCCAACA-1': 1, 'CTGAAGACGTGCAT-1': 1, 'CTGAAGTGAAGCCT-1': 1, 'CTGAAGTGCAGCTA-1': 1, - 'CTGAAGTGGCTATG-1': 1, 'CTGAAGTGTCCAGA-1': 1, 'CTGAATCTGAATAG-1': 1, 'CTGACAGAATCGTG-1': 1, - 'CTGACCACAGCAAA-1': 1, 'CTGAGAACCGGGAA-1': 1, 'CTGAGAACGTAAAG-1': 1, 'CTGATACTAGTAGA-1': 1, - 'CTGATTTGGTGTTG-1': 1, 'CTGCAGCTAACCGT-1': 1, 'CTGCAGCTGACACT-1': 1, 'CTGCAGCTGGATTC-1': 1, - 'CTGCAGCTTGGCAT-1': 1, 'CTGCCAACAGGAGC-1': 1, 'CTGCCAACCAGCTA-1': 1, 'CTGCCAACTAACCG-1': 1, - 'CTGCCAACTGCTCC-1': 1, 'CTGCCAACTTGCAG-1': 1, 'CTGCCAACTTGCTT-1': 1, 'CTGCGACTCCACCT-1': 1, - 'CTGGAAACAAACGA-1': 1, 'CTGGAAACATCGAC-1': 1, 'CTGGATGACTGGAT-1': 1, 'CTGGATGACTTGTT-1': 1, - 'CTGGATGATGTGAC-1': 1, 'CTGGCACTCAAGCT-1': 1, 'CTGTAACTAACCAC-1': 1, 'CTGTAACTAGCGTT-1': 1, - 'CTGTATACGTAAAG-1': 1, 'CTGTATACGTACGT-1': 1, 'CTGTATACGTTGGT-1': 1, 'CTGTGAGACAACCA-1': 1, - 'CTGTGAGACCTTGC-1': 1, 'CTGTGAGACGAACT-1': 1, 'CTGTGAGACTGTAG-1': 1, 'CTTAAAGAACCTGA-1': 1, - 'CTTAACACCTGTAG-1': 1, 'CTTAACACTATCGG-1': 1, 'CTTAAGCTACCTAG-1': 1, 'CTTAAGCTAGTACC-1': 1, - 'CTTAAGCTCATCAG-1': 1, 'CTTAAGCTCCGCTT-1': 1, 'CTTACAACTAACGC-1': 1, 'CTTACAACTCCCGT-1': 1, - 'CTTACTGACGTACA-1': 1, 'CTTAGACTAAACGA-1': 1, 'CTTAGGGACTTGCC-1': 1, 'CTTAGGGAGAATCC-1': 1, - 'CTTATCGACTCATT-1': 1, 'CTTCACCTACCTGA-1': 1, 'CTTCATGAAGCATC-1': 1, 'CTTCATGAAGTACC-1': 1, - 'CTTCATGACCGAAT-1': 1, 'CTTGAACTACGCAT-1': 1, 'CTTGATTGAGGTTC-1': 1, 'CTTGATTGATCTTC-1': 1, - 'CTTGATTGCATTCT-1': 1, 'CTTGATTGTTTCGT-1': 1, 'CTTGTATGACACCA-1': 1, 'CTTGTATGCGCAAT-1': 1, - 'CTTTACGAGCGAAG-1': 1, 'CTTTAGACCGTGAT-1': 1, 'CTTTAGACGAGACG-1': 1, 'CTTTAGACGATACC-1': 1, - 'CTTTAGACGTTGGT-1': 1, 'CTTTAGACTCATTC-1': 1, 'CTTTAGTGACGGGA-1': 1, 'CTTTAGTGGGTGGA-1': 1, - 'CTTTCAGAGAAACA-1': 1, 'CTTTGATGAGCACT-1': 1, 'CTTTGATGTCTAGG-1': 1, 'CTTTGATGTGTCCC-1': 1, - 'CTTTGATGTGTGGT-1': 1, 'GAAACAGAACTACG-1': 1, 'GAAACAGAATCACG-1': 1, 'GAAACAGACATTCT-1': 1, - 'GAAACCTGATCGTG-1': 1, 'GAAACCTGATGCCA-1': 1, 'GAAACCTGCTTATC-1': 1, 'GAAACCTGGACTAC-1': 1, - 'GAAACCTGTGCTAG-1': 1, 'GAAAGATGATTTCC-1': 1, 'GAAAGATGCTGATG-1': 1, 'GAAAGATGCTTCGC-1': 1, - 'GAAAGATGTAAGGA-1': 1, 'GAAAGCCTACGTTG-1': 1, 'GAAAGTGAAAGTGA-1': 1, 'GAAAGTGACCACAA-1': 1, - 'GAAAGTGACTCAAG-1': 1, 'GAAATACTACCAAC-1': 1, 'GAAATACTCTTAGG-1': 1, 'GAAATACTTCCTCG-1': 1, - 'GAACACACGTGCAT-1': 1, 'GAACACACTGCCTC-1': 1, 'GAACAGCTAACTGC-1': 1, 'GAACAGCTCTCAGA-1': 1, - 'GAACCAACCACAAC-1': 1, 'GAACCAACTTCCGC-1': 1, 'GAACCTGAACGTGT-1': 1, 'GAACCTGAGAGACG-1': 1, - 'GAACCTGATGAACC-1': 1, 'GAACGGGATACTTC-1': 1, 'GAACTGTGACCTGA-1': 1, 'GAACTGTGCCAGTA-1': 1, - 'GAAGAATGCAATCG-1': 1, 'GAAGCGGACCTATT-1': 1, 'GAAGCTACGAATGA-1': 1, 'GAAGCTACGGTTTG-1': 1, - 'GAAGGGTGAAAGTG-1': 1, 'GAAGGGTGCTTAGG-1': 1, 'GAAGGTCTGAAAGT-1': 1, 'GAAGGTCTGTTGCA-1': 1, - 'GAAGGTCTTAAAGG-1': 1, 'GAAGTAGACTCCCA-1': 1, 'GAAGTAGATCCAAG-1': 1, 'GAAGTCACCCTCGT-1': 1, - 'GAAGTCACCCTGTC-1': 1, 'GAAGTCTGTCGCAA-1': 1, 'GAAGTCTGTTCTGT-1': 1, 'GAAGTGCTAAACGA-1': 1, - 'GAAGTGCTCCGCTT-1': 1, 'GAAGTGCTTAACCG-1': 1, 'GAATGCACCCTAAG-1': 1, 'GAATGCACCTTCGC-1': 1, - 'GAATGCTGCGGTAT-1': 1, 'GAATTAACGATAAG-1': 1, 'GAATTAACGGTCAT-1': 1, 'GAATTAACGTCGTA-1': 1, - 'GAATTAACTGAAGA-1': 1, 'GACAACACAGGCGA-1': 1, 'GACAACACATCGTG-1': 1, 'GACAACACTCGCCT-1': 1, - 'GACAACTGAGGTTC-1': 1, 'GACAGGGAAGAGTA-1': 1, 'GACAGGGAATGCCA-1': 1, 'GACAGTACGAGCTT-1': 1, - 'GACAGTACTTCGGA-1': 1, 'GACAGTTGAGTAGA-1': 1, 'GACATTCTCCACCT-1': 1, 'GACCAAACGACTAC-1': 1, - 'GACCAAACGTATCG-1': 1, 'GACCCTACTAAAGG-1': 1, 'GACCTAGACCTCAC-1': 1, 'GACCTAGACGAGAG-1': 1, - 'GACCTCACAAGGTA-1': 1, 'GACCTCACGTACGT-1': 1, 'GACCTCTGCATCAG-1': 1, 'GACGAACTCCCACT-1': 1, - 'GACGATTGCCAATG-1': 1, 'GACGCCGACCTTCG-1': 1, 'GACGCTCTCTCTCG-1': 1, 'GACGGCACACGGGA-1': 1, - 'GACGGCACGAGATA-1': 1, 'GACGTAACCTATGG-1': 1, 'GACGTAACCTGTGA-1': 1, 'GACGTAACTATGGC-1': 1, - 'GACGTATGTTGACG-1': 1, 'GACGTATGTTTGCT-1': 1, 'GACGTCCTACGGAG-1': 1, 'GACGTCCTCTCAAG-1': 1, - 'GACGTCCTGATAAG-1': 1, 'GACTACGATGGTCA-1': 1, 'GACTCCTGCTCGCT-1': 1, 'GACTCCTGGGTTAC-1': 1, - 'GACTCCTGTTATCC-1': 1, 'GACTCCTGTTGGTG-1': 1, 'GACTGAACCAATCG-1': 1, 'GACTGATGTGATGC-1': 1, - 'GACTTTACATGCCA-1': 1, 'GACTTTACGACAGG-1': 1, 'GAGAAATGTTCTCA-1': 1, 'GAGATAGAAAAAGC-1': 1, - 'GAGATCACGACAAA-1': 1, 'GAGATGCTCTGGAT-1': 1, 'GAGATGCTGAATGA-1': 1, 'GAGCAGGATTCCCG-1': 1, - 'GAGCATACTTTGCT-1': 1, 'GAGCGCACGCGTAT-1': 1, 'GAGCGCACGGTGAG-1': 1, 'GAGCGCTGAAGATG-1': 1, - 'GAGCGCTGTCTTAC-1': 1, 'GAGCGGCTGGGAGT-1': 1, 'GAGGACGACTCAGA-1': 1, 'GAGGATCTGAAAGT-1': 1, - 'GAGGCAGACTTGCC-1': 1, 'GAGGGAACACCAGT-1': 1, 'GAGGGAACGAGGGT-1': 1, 'GAGGGATGGGAAAT-1': 1, - 'GAGGGCCTTCACCC-1': 1, 'GAGGGTGAAGAGTA-1': 1, 'GAGGTACTACGGTT-1': 1, 'GAGGTACTACTCAG-1': 1, - 'GAGGTACTGACACT-1': 1, 'GAGGTACTGGGAGT-1': 1, 'GAGGTACTTAGCGT-1': 1, 'GAGGTGGAGTACGT-1': 1, - 'GAGGTGGATCCTCG-1': 1, 'GAGGTTACTCGTTT-1': 1, 'GAGGTTTGTAAGCC-1': 1, 'GAGTCAACCATTCT-1': 1, - 'GAGTCAACGGGAGT-1': 1, 'GAGTCTGATCGTGA-1': 1, 'GAGTCTGATTTGGG-1': 1, 'GAGTGACTCAGCTA-1': 1, - 'GAGTGACTCGGTAT-1': 1, 'GAGTGACTCTTGCC-1': 1, 'GAGTGACTGACTAC-1': 1, 'GAGTGACTGTCTAG-1': 1, - 'GAGTGGGAGTCTTT-1': 1, 'GAGTGGGATGCCCT-1': 1, 'GAGTGGGATGCTGA-1': 1, 'GAGTGTTGCTGTAG-1': 1, - 'GAGTGTTGTGGTCA-1': 1, 'GAGTTGTGCATGGT-1': 1, 'GAGTTGTGCTGAGT-1': 1, 'GAGTTGTGGCGAGA-1': 1, - 'GAGTTGTGGTAGCT-1': 1, 'GAGTTGTGTATGCG-1': 1, 'GATAAGGAGAAACA-1': 1, 'GATAAGGATTCACT-1': 1, - 'GATACTCTATCGGT-1': 1, 'GATACTCTTACTTC-1': 1, 'GATACTCTTGACTG-1': 1, 'GATAGAGAAGGGTG-1': 1, - 'GATAGAGACTGTGA-1': 1, 'GATAGAGATCACGA-1': 1, 'GATAGCACCCATAG-1': 1, 'GATAGCACGAAGGC-1': 1, - 'GATAGCACTTGTCT-1': 1, 'GATATAACAAGGTA-1': 1, 'GATATAACACGCAT-1': 1, 'GATATATGCTGGAT-1': 1, - 'GATATATGTCCGTC-1': 1, 'GATATATGTGGAGG-1': 1, 'GATATCCTAGAAGT-1': 1, 'GATATCCTCCCGTT-1': 1, - 'GATATTGACAGGAG-1': 1, 'GATATTGACGAGTT-1': 1, 'GATATTGAGCCAAT-1': 1, 'GATCCCTGACCTTT-1': 1, - 'GATCCCTGTGTAGC-1': 1, 'GATCCGCTGGTCAT-1': 1, 'GATCGAACCGAGAG-1': 1, 'GATCGATGACTAGC-1': 1, - 'GATCGATGGTAAAG-1': 1, 'GATCGATGTAAGGA-1': 1, 'GATCGTGACACTAG-1': 1, 'GATCGTGATTCACT-1': 1, - 'GATCTACTGGTGAG-1': 1, 'GATCTACTTTGCAG-1': 1, 'GATCTTACACCCAA-1': 1, 'GATCTTACCCTACC-1': 1, - 'GATCTTACGAATAG-1': 1, 'GATCTTACGAGATA-1': 1, 'GATGCAACTCCAGA-1': 1, 'GATGCCCTACGTAC-1': 1, - 'GATGCCCTCTCATT-1': 1, 'GATGCCCTGGCAAG-1': 1, 'GATGCCCTTTTGCT-1': 1, 'GATTACCTTGTTCT-1': 1, - 'GATTCGGAACGACT-1': 1, 'GATTCGGACAGGAG-1': 1, 'GATTCGGAGAAGGC-1': 1, 'GATTCTTGATTCGG-1': 1, - 'GATTCTTGCCGATA-1': 1, 'GATTCTTGCGAGTT-1': 1, 'GATTGGACCCGTTC-1': 1, 'GATTGGACGGTGTT-1': 1, - 'GATTGGACTTTCGT-1': 1, 'GATTGGTGTGTCAG-1': 1, 'GATTTAGACACTCC-1': 1, 'GATTTAGACTAAGC-1': 1, - 'GATTTAGATTCGTT-1': 1, 'GATTTGCTAACGAA-1': 1, 'GATTTGCTAACGGG-1': 1, 'GCAACCCTCCTCGT-1': 1, - 'GCAACTGATTGCGA-1': 1, 'GCAAGACTACTGGT-1': 1, 'GCAAGACTAGGTCT-1': 1, 'GCAAGACTCCCTTG-1': 1, - 'GCAATCGACTGCAA-1': 1, 'GCAATCGAGACGTT-1': 1, 'GCAATCGATCCTTA-1': 1, 'GCAATTCTCGTGTA-1': 1, - 'GCAATTCTTCTCCG-1': 1, 'GCACAAACAATGCC-1': 1, 'GCACAAACGGTACT-1': 1, 'GCACAATGGTGCAT-1': 1, - 'GCACACCTGTGCTA-1': 1, 'GCACCACTCATGAC-1': 1, 'GCACCACTGTTTGG-1': 1, 'GCACCACTTCCTTA-1': 1, - 'GCACCACTTTCGGA-1': 1, 'GCACCTACGCGATT-1': 1, 'GCACCTTGGCTGTA-1': 1, 'GCACCTTGGGGAGT-1': 1, - 'GCACGGACCAGCTA-1': 1, 'GCACGGTGACCTCC-1': 1, 'GCACGGTGCTATGG-1': 1, 'GCACTAGAACGGGA-1': 1, - 'GCACTAGAAGATGA-1': 1, 'GCACTAGACCTTTA-1': 1, 'GCACTAGACGTAAC-1': 1, 'GCACTAGAGTCGTA-1': 1, - 'GCACTAGATGCAAC-1': 1, 'GCACTGCTGAGGCA-1': 1, 'GCAGATACAGCGTT-1': 1, 'GCAGATACGACGGA-1': 1, - 'GCAGATACGCAGAG-1': 1, 'GCAGCCGACAGTCA-1': 1, 'GCAGCGTGCACTCC-1': 1, 'GCAGCTCTCAATCG-1': 1, - 'GCAGCTCTGTTTCT-1': 1, 'GCAGGGCTAAGAAC-1': 1, 'GCAGGGCTAAGGGC-1': 1, 'GCAGGGCTATCGAC-1': 1, - 'GCAGGGCTTGGGAG-1': 1, 'GCAGTCCTAACTGC-1': 1, 'GCAGTCCTCTCTTA-1': 1, 'GCATCAGATGCGTA-1': 1, - 'GCATGTGACAAGCT-1': 1, 'GCATTGGAGAAGGC-1': 1, 'GCCAAAACGAGGCA-1': 1, 'GCCAAATGATCGAC-1': 1, - 'GCCAACCTACGGTT-1': 1, 'GCCAACCTCGCCTT-1': 1, 'GCCACGGAGGCGAA-1': 1, 'GCCACGGATACTGG-1': 1, - 'GCCACTACGTCTTT-1': 1, 'GCCCAACTACCGAT-1': 1, 'GCCCAACTATGGTC-1': 1, 'GCCCATACAGCGTT-1': 1, - 'GCCGACGAACTCTT-1': 1, 'GCCGAGTGCGTTGA-1': 1, 'GCCGGAACGAACTC-1': 1, 'GCCGGAACGTTCTT-1': 1, - 'GCCGGAACTGCACA-1': 1, 'GCCGGAACTTACTC-1': 1, 'GCCGTACTACCTGA-1': 1, 'GCCGTACTGGCAAG-1': 1, - 'GCCTACACAGTTCG-1': 1, 'GCCTACACCACTGA-1': 1, 'GCCTACACCTTGAG-1': 1, 'GCCTAGCTACGGAG-1': 1, - 'GCCTAGCTCTATTC-1': 1, 'GCCTAGCTTCTCAT-1': 1, 'GCCTAGCTTCTCTA-1': 1, 'GCCTCAACCATGGT-1': 1, - 'GCCTCAACTCTTTG-1': 1, 'GCCTCATGTCTTAC-1': 1, 'GCCTGACTCTCAAG-1': 1, 'GCGAAGGAACTCTT-1': 1, - 'GCGAAGGATGCCAA-1': 1, 'GCGAGAGAGGGACA-1': 1, 'GCGAGCACTGTCGA-1': 1, 'GCGAGCACTTGACG-1': 1, - 'GCGAGCACTTGCTT-1': 1, 'GCGATATGGTACGT-1': 1, 'GCGATATGGTGTTG-1': 1, 'GCGCACGAAGTCGT-1': 1, - 'GCGCACGACTTTAC-1': 1, 'GCGCATCTAGGTCT-1': 1, 'GCGCATCTGGTTAC-1': 1, 'GCGCATCTTCGATG-1': 1, - 'GCGCATCTTGCTCC-1': 1, 'GCGCATCTTTCTAC-1': 1, 'GCGCGAACGTTCTT-1': 1, 'GCGCGATGAACGGG-1': 1, - 'GCGCGATGGTGCAT-1': 1, 'GCGGAGCTCCTGAA-1': 1, 'GCGGCAACCCGATA-1': 1, 'GCGGCAACGGAGGT-1': 1, - 'GCGGCAACTGTCGA-1': 1, 'GCGTAAACACGGTT-1': 1, 'GCGTAATGCACCAA-1': 1, 'GCGTATGAACACCA-1': 1, - 'GCGTATGATGAGAA-1': 1, 'GCTACAGAAAGGTA-1': 1, 'GCTACAGAATCTTC-1': 1, 'GCTACCTGAGAAGT-1': 1, - 'GCTACCTGATCACG-1': 1, 'GCTACGCTAGAATG-1': 1, 'GCTACGCTAGCTAC-1': 1, 'GCTACGCTCCCTAC-1': 1, - 'GCTAGAACAGAGGC-1': 1, 'GCTAGAACGGATCT-1': 1, 'GCTAGAACTCCCGT-1': 1, 'GCTAGATGAGCTCA-1': 1, - 'GCTAGATGGCGATT-1': 1, 'GCTATACTAAGGCG-1': 1, 'GCTATACTAGCGTT-1': 1, 'GCTATACTCTCTTA-1': 1, - 'GCTATACTGGACGA-1': 1, 'GCTCAAGAACCATG-1': 1, 'GCTCAAGAAGTCAC-1': 1, 'GCTCAGCTGTCTAG-1': 1, - 'GCTCCATGAGAAGT-1': 1, 'GCTCCATGCCGAAT-1': 1, 'GCTCGACTCTAGTG-1': 1, 'GCTGATGAGGTATC-1': 1, - 'GCTTAACTACAGTC-1': 1, 'GCTTAACTACTGGT-1': 1, 'GCTTAACTGCTGAT-1': 1, 'GCTTAACTTAGACC-1': 1, - 'GCTTAACTTCAGTG-1': 1, 'GGAACACTCACTTT-1': 1, 'GGAACACTTCAGAC-1': 1, 'GGAACTACTACTTC-1': 1, - 'GGAACTTGAAGGTA-1': 1, 'GGAACTTGAGAATG-1': 1, 'GGAACTTGCTCCAC-1': 1, 'GGAACTTGGGTAGG-1': 1, - 'GGAAGGACATCGGT-1': 1, 'GGAAGGACCACTAG-1': 1, 'GGAAGGACGAGGGT-1': 1, 'GGAAGGACGCGAAG-1': 1, - 'GGAAGGTGGCGAGA-1': 1, 'GGAATCTGAAGGGC-1': 1, 'GGAATCTGAGGAGC-1': 1, 'GGAATCTGCTTAGG-1': 1, - 'GGAATCTGCTTGTT-1': 1, 'GGAATCTGGGAGGT-1': 1, 'GGAATGCTTTCTAC-1': 1, 'GGACAGGAAAGGGC-1': 1, - 'GGACAGGAGTGCTA-1': 1, 'GGACAGGATCTCGC-1': 1, 'GGACCCGAAGCTAC-1': 1, 'GGACCGTGCTTACT-1': 1, - 'GGACCGTGGGAACG-1': 1, 'GGACCGTGTAACGC-1': 1, 'GGACCTCTGTAAGA-1': 1, 'GGACCTCTTTTCTG-1': 1, - 'GGACGAGAGTGTCA-1': 1, 'GGACGCTGACGCAT-1': 1, 'GGACGCTGCTAGCA-1': 1, 'GGACGCTGTCCTCG-1': 1, - 'GGAGAGACGTGAGG-1': 1, 'GGAGCAGATTCAGG-1': 1, 'GGAGCCACCTTCTA-1': 1, 'GGAGCGCTACGCAT-1': 1, - 'GGAGCGCTCCGAAT-1': 1, 'GGAGGATGCCACCT-1': 1, 'GGAGGATGGTTGAC-1': 1, 'GGAGGATGTCAGTG-1': 1, - 'GGAGGCCTCGTTGA-1': 1, 'GGAGGCCTTTCTTG-1': 1, 'GGAGGTGATACGCA-1': 1, 'GGAGGTGATCGCTC-1': 1, - 'GGATACTGCAGCTA-1': 1, 'GGATACTGTCTAGG-1': 1, 'GGATAGCTCGTCTC-1': 1, 'GGATAGCTCTGAAC-1': 1, - 'GGATGTACCAAAGA-1': 1, 'GGATGTACGCGAAG-1': 1, 'GGATGTACGTCTTT-1': 1, 'GGATGTACGTGTCA-1': 1, - 'GGATTTCTAGGTTC-1': 1, 'GGATTTCTTTGTCT-1': 1, 'GGCAAGGAAAAAGC-1': 1, 'GGCAAGGAAGAAGT-1': 1, - 'GGCAAGGACTTGGA-1': 1, 'GGCAAGGAGGACTT-1': 1, 'GGCAATACGCTAAC-1': 1, 'GGCAATACGGCATT-1': 1, - 'GGCAATACGTTTCT-1': 1, 'GGCACGTGGCTTAG-1': 1, 'GGCACTCTTTTGTC-1': 1, 'GGCATATGCTTATC-1': 1, - 'GGCATATGGGGAGT-1': 1, 'GGCATATGTGTGAC-1': 1, 'GGCCACGACAGAGG-1': 1, 'GGCCAGACTGGTTG-1': 1, - 'GGCCCAGAAAGTAG-1': 1, 'GGCCGAACAACGAA-1': 1, 'GGCCGAACGCAGAG-1': 1, 'GGCCGAACGTAGGG-1': 1, - 'GGCCGAACTCTAGG-1': 1, 'GGCCGATGCAGGAG-1': 1, 'GGCCGATGCCGAAT-1': 1, 'GGCCGATGTACTCT-1': 1, - 'GGCGACACTGCCCT-1': 1, 'GGCGACTGCGTAAC-1': 1, 'GGCGCATGCCTAAG-1': 1, 'GGCGCATGCTCCAC-1': 1, - 'GGCGCATGTGGAAA-1': 1, 'GGCGGACTAGAGGC-1': 1, 'GGCGGACTAGGAGC-1': 1, 'GGCGGACTCTGACA-1': 1, - 'GGCGGACTCTTGGA-1': 1, 'GGCGGACTTACTGG-1': 1, 'GGCGGACTTGAACC-1': 1, 'GGCTAAACACCTGA-1': 1, - 'GGCTAAACTCTTAC-1': 1, 'GGCTAATGAGCACT-1': 1, 'GGCTAATGGTCTAG-1': 1, 'GGCTCACTACTCAG-1': 1, - 'GGGAACGAAGCTCA-1': 1, 'GGGAACGACACAAC-1': 1, 'GGGAACGAGTGTCA-1': 1, 'GGGAAGTGTTGAGC-1': 1, - 'GGGACCACACGTTG-1': 1, 'GGGACCACAGAACA-1': 1, 'GGGACCACGAATAG-1': 1, 'GGGACCACGTCATG-1': 1, - 'GGGACCACTCAAGC-1': 1, 'GGGACCACTCGTGA-1': 1, 'GGGACCACTGCATG-1': 1, 'GGGACCTGACCCTC-1': 1, - 'GGGACCTGCTTGCC-1': 1, 'GGGACCTGTGGAGG-1': 1, 'GGGATGGACGACAT-1': 1, 'GGGATGGATACTTC-1': 1, - 'GGGATGGATGGTTG-1': 1, 'GGGATTACGTCTAG-1': 1, 'GGGCAAGATGCATG-1': 1, 'GGGCACACGGTGAG-1': 1, - 'GGGCACACGTTGCA-1': 1, 'GGGCAGCTTGGGAG-1': 1, 'GGGCAGCTTTTCTG-1': 1, 'GGGCCAACCTTGGA-1': 1, - 'GGGCCAACGCGTTA-1': 1, 'GGGCCAACTACGCA-1': 1, 'GGGCCAACTCCAAG-1': 1, 'GGGCCATGATGGTC-1': 1, - 'GGGCCATGTTGACG-1': 1, 'GGGTAACTCAGCTA-1': 1, 'GGGTAACTCTAGTG-1': 1, 'GGGTAACTCTGGAT-1': 1, - 'GGGTTAACGTGCAT-1': 1, 'GGTAAAGAGCTAAC-1': 1, 'GGTACAACTGCAAC-1': 1, 'GGTACATGAAAGCA-1': 1, - 'GGTACATGAGCTCA-1': 1, 'GGTACATGCGGTAT-1': 1, 'GGTACATGGTTACG-1': 1, 'GGTACATGTGGGAG-1': 1, - 'GGTACTGAACTCTT-1': 1, 'GGTAGTACACCACA-1': 1, 'GGTAGTACACTAGC-1': 1, 'GGTAGTACCCTGTC-1': 1, - 'GGTAGTACGCCATA-1': 1, 'GGTAGTACTGTCTT-1': 1, 'GGTATCGAGACAAA-1': 1, 'GGTATCGATGAACC-1': 1, - 'GGTCAAACCAAAGA-1': 1, 'GGTCTAGAGAAACA-1': 1, 'GGTCTAGATAGCGT-1': 1, 'GGTGATACCGACTA-1': 1, - 'GGTGATACGACTAC-1': 1, 'GGTGATACTGTTTC-1': 1, 'GGTGGAGAAACGGG-1': 1, 'GGTGGAGAAGTAGA-1': 1, - 'GGTGGAGACAGATC-1': 1, 'GGTGGAGATCGATG-1': 1, 'GGTGGAGATCTCTA-1': 1, 'GGTGGAGATTACTC-1': 1, - 'GGTTTACTACGCAT-1': 1, 'GTAACGTGACCTCC-1': 1, 'GTAACGTGATCGGT-1': 1, 'GTAACGTGCAGCTA-1': 1, - 'GTAACGTGGTTGAC-1': 1, 'GTAAGCACAACGGG-1': 1, 'GTAAGCACTCATTC-1': 1, 'GTAAGCTGGTACCA-1': 1, - 'GTAATAACCTTCTA-1': 1, 'GTAATAACGTTGTG-1': 1, 'GTACCCTGACAGTC-1': 1, 'GTACCCTGGAGCTT-1': 1, - 'GTACCCTGTCCTTA-1': 1, 'GTACCCTGTGAACC-1': 1, 'GTACGTGAACGTTG-1': 1, 'GTACTTTGTCGACA-1': 1, - 'GTAGACTGAGATGA-1': 1, 'GTAGACTGTATTCC-1': 1, 'GTAGCAACAGTCGT-1': 1, 'GTAGCAACCATTTC-1': 1, - 'GTAGCAACGGTAGG-1': 1, 'GTAGCATGCACTCC-1': 1, 'GTAGCATGTAAGCC-1': 1, 'GTAGCCCTGACGTT-1': 1, - 'GTAGCTGAAGCTAC-1': 1, 'GTAGCTGAATTCGG-1': 1, 'GTAGGTACACGGGA-1': 1, 'GTAGTGACCTCATT-1': 1, - 'GTAGTGTGAGCGGA-1': 1, 'GTAGTGTGAGGCGA-1': 1, 'GTAGTGTGTGGTTG-1': 1, 'GTATCACTGGTAGG-1': 1, - 'GTATCTACAGAAGT-1': 1, 'GTATCTACGACGAG-1': 1, 'GTATCTACGTTACG-1': 1, 'GTATTAGAAACAGA-1': 1, - 'GTATTAGAGGTCTA-1': 1, 'GTATTCACACAGCT-1': 1, 'GTATTCACGGGTGA-1': 1, 'GTCAACGACACTGA-1': 1, - 'GTCAACGAGTGTAC-1': 1, 'GTCAATCTACACCA-1': 1, 'GTCAATCTGTAGCT-1': 1, 'GTCAATCTTGTGGT-1': 1, - 'GTCACCTGCCTCCA-1': 1, 'GTCACCTGTCCCGT-1': 1, 'GTCATACTAATCGC-1': 1, 'GTCATACTGCGATT-1': 1, - 'GTCATACTTCGCCT-1': 1, 'GTCATACTTTACCT-1': 1, 'GTCATACTTTGACG-1': 1, 'GTCCAAGAAAAACG-1': 1, - 'GTCCACTGACCTCC-1': 1, 'GTCCACTGGGTACT-1': 1, 'GTCCAGCTACGGGA-1': 1, 'GTCCCATGTGGTGT-1': 1, - 'GTCGAATGAAGGCG-1': 1, 'GTCGACCTGAATGA-1': 1, 'GTCGACCTGTTCAG-1': 1, 'GTCGCACTTGAGAA-1': 1, - 'GTCTAACTGGTCTA-1': 1, 'GTCTAGGAGCTTCC-1': 1, 'GTGAACACACTCTT-1': 1, 'GTGAACACTCAGGT-1': 1, - 'GTGACCCTTAAGCC-1': 1, 'GTGATGACAAGTGA-1': 1, 'GTGATGACCTGAGT-1': 1, 'GTGATGACGGTTTG-1': 1, - 'GTGATTCTCATTTC-1': 1, 'GTGATTCTCTCTCG-1': 1, 'GTGATTCTGGTTCA-1': 1, 'GTGATTCTGTCGAT-1': 1, - 'GTGATTCTTAGCGT-1': 1, 'GTGCCACTCAGGAG-1': 1, 'GTGGATTGCACTAG-1': 1, 'GTGGATTGCGGAGA-1': 1, - 'GTGGATTGTAACGC-1': 1, 'GTGTACGATCAGTG-1': 1, 'GTGTAGTGGGTACT-1': 1, 'GTGTATCTAGCCTA-1': 1, - 'GTGTATCTAGTAGA-1': 1, 'GTGTATCTGTTACG-1': 1, 'GTGTCAGAAGCGTT-1': 1, 'GTTAAAACCGAGAG-1': 1, - 'GTTAAATGCTCGAA-1': 1, 'GTTAAATGTCGACA-1': 1, 'GTTAACCTAGCTAC-1': 1, 'GTTAACCTTGCTTT-1': 1, - 'GTTAGGTGCACTCC-1': 1, 'GTTAGGTGCCAGTA-1': 1, 'GTTAGGTGCCCAAA-1': 1, 'GTTAGGTGGAACTC-1': 1, - 'GTTAGTCTAAGAAC-1': 1, 'GTTATAGAGGACAG-1': 1, 'GTTATGCTTTCATC-1': 1, 'GTTCAACTGGGACA-1': 1, - 'GTTCAACTTATGCG-1': 1, 'GTTGACGAGCCCTT-1': 1, 'GTTGACGATATCGG-1': 1, 'GTTGAGTGGTCTTT-1': 1, - 'GTTGAGTGTGCTTT-1': 1, 'GTTGATCTGGGACA-1': 1, 'GTTGATCTTTTCAC-1': 1, 'GTTGGATGTTTACC-1': 1, - 'GTTGTACTATTCCT-1': 1, 'GTTGTACTTTTGGG-1': 1, 'GTTTAAGACCATGA-1': 1, 'GTTTAAGACTGTCC-1': 1, - 'TAAACAACCAACCA-1': 1, 'TAAACAACGAATCC-1': 1, 'TAAAGACTCAGGAG-1': 1, 'TAAATCGATGAGGG-1': 1, - 'TAACAATGTGCCCT-1': 1, 'TAACACCTTCGCTC-1': 1, 'TAACACCTTCGTAG-1': 1, 'TAACACCTTGTTTC-1': 1, - 'TAACATGACACTAG-1': 1, 'TAACCGGACTTACT-1': 1, 'TAACGTCTCAACCA-1': 1, 'TAACGTCTCATTGG-1': 1, - 'TAACTAGAATTTCC-1': 1, 'TAACTAGACTTAGG-1': 1, 'TAACTAGATCTGGA-1': 1, 'TAACTCACGAGGAC-1': 1, - 'TAACTCACGTACAC-1': 1, 'TAACTCACGTATCG-1': 1, 'TAACTCACTCTACT-1': 1, 'TAAGAACTGTGTCA-1': 1, - 'TAAGAGGACTAAGC-1': 1, 'TAAGAGGACTTGTT-1': 1, 'TAAGATACGGTTCA-1': 1, 'TAAGATTGCGTAGT-1': 1, - 'TAAGATTGTTGCTT-1': 1, 'TAAGCGTGAGGTTC-1': 1, 'TAAGCGTGGACAAA-1': 1, 'TAAGCGTGGGAAAT-1': 1, - 'TAAGCGTGTGCTCC-1': 1, 'TAAGGCTGCCATGA-1': 1, 'TAAGGCTGCTGCTC-1': 1, 'TAAGGCTGTCTCGC-1': 1, - 'TAAGGGCTGCTGTA-1': 1, 'TAAGGGCTTTACTC-1': 1, 'TAAGTAACCGAGAG-1': 1, 'TAAGTAACCTCCAC-1': 1, - 'TAAGTAACCTGTAG-1': 1, 'TAAGTAACTTGTCT-1': 1, 'TAATGATGAGCGGA-1': 1, 'TAATGCCTCATGAC-1': 1, - 'TAATGCCTCGTCTC-1': 1, 'TAATGTGAAGATGA-1': 1, 'TAATGTGACTGCAA-1': 1, 'TAATGTGATTACTC-1': 1, - 'TACAAATGGGTACT-1': 1, 'TACAATGAAAACAG-1': 1, 'TACAATGACTTAGG-1': 1, 'TACAATGATGCTAG-1': 1, - 'TACACACTCACACA-1': 1, 'TACACACTCTTACT-1': 1, 'TACATAGAACGCAT-1': 1, 'TACATCACACGGGA-1': 1, - 'TACATCACCTGTTT-1': 1, 'TACATCACGCTAAC-1': 1, 'TACATCACTGAACC-1': 1, 'TACCATTGAGGTTC-1': 1, - 'TACCATTGCGGGAA-1': 1, 'TACCATTGGGGATG-1': 1, 'TACCATTGTGAGGG-1': 1, 'TACCGGCTGTTGGT-1': 1, - 'TACGAGTGATCTCT-1': 1, 'TACGAGTGATGCTG-1': 1, 'TACGAGTGCGGAGA-1': 1, 'TACGAGTGGTTGGT-1': 1, - 'TACGATCTAGTGTC-1': 1, 'TACGATCTCACTGA-1': 1, 'TACGATCTTACGAC-1': 1, 'TACGCAGAGAATCC-1': 1, - 'TACGCCACATTCCT-1': 1, 'TACGCCACTCCCAC-1': 1, 'TACGCCACTCCGAA-1': 1, 'TACGGAACGCGTTA-1': 1, - 'TACGGCCTGGGACA-1': 1, 'TACGTACTACGGAG-1': 1, 'TACGTACTCAGTTG-1': 1, 'TACGTACTCCCGTT-1': 1, - 'TACGTTACAGAAGT-1': 1, 'TACGTTACCAAGCT-1': 1, 'TACTAAGAAAGGTA-1': 1, 'TACTAAGAATCACG-1': 1, - 'TACTAAGATGATGC-1': 1, 'TACTAAGATTGCGA-1': 1, 'TACTACACGAGAGC-1': 1, 'TACTACACTTACCT-1': 1, - 'TACTACTGAACCTG-1': 1, 'TACTACTGATGTCG-1': 1, 'TACTACTGATTCTC-1': 1, 'TACTACTGTATGGC-1': 1, - 'TACTCAACGGTCTA-1': 1, 'TACTCAACTGCTAG-1': 1, 'TACTCCCTCAGTTG-1': 1, 'TACTCTGAATCGAC-1': 1, - 'TACTCTGACGAGTT-1': 1, 'TACTCTGATTGACG-1': 1, 'TACTGGGATCGATG-1': 1, 'TACTGTTGAAAGCA-1': 1, - 'TACTGTTGAGGCGA-1': 1, 'TACTGTTGCTGAAC-1': 1, 'TACTTGACTCCTCG-1': 1, 'TACTTGACTGGTGT-1': 1, - 'TACTTTCTTTTGGG-1': 1, 'TAGAAACTAATCGC-1': 1, 'TAGAAACTGCTTCC-1': 1, 'TAGAAACTGGGATG-1': 1, - 'TAGAATTGCGACAT-1': 1, 'TAGAATTGTATCGG-1': 1, 'TAGACGTGCTTGAG-1': 1, 'TAGACGTGTCGCTC-1': 1, - 'TAGAGCACCTTACT-1': 1, 'TAGATTGACTTGTT-1': 1, 'TAGATTGAGGCATT-1': 1, 'TAGCATCTCAGCTA-1': 1, - 'TAGCATCTCCCTCA-1': 1, 'TAGCATCTGCTGTA-1': 1, 'TAGCATCTGGGACA-1': 1, 'TAGCATCTTGTCGA-1': 1, - 'TAGCCCACAAAAGC-1': 1, 'TAGCCCACAGCCAT-1': 1, 'TAGCCCACAGCTAC-1': 1, 'TAGCCCACCCACAA-1': 1, - 'TAGCCCTGCGGAGA-1': 1, 'TAGCCGCTTACGAC-1': 1, 'TAGCCGCTTACTTC-1': 1, 'TAGCCGCTTTCCAT-1': 1, - 'TAGCTACTGAATAG-1': 1, 'TAGCTACTGTAGCT-1': 1, 'TAGCTACTTTTGCT-1': 1, 'TAGGACTGTGCTGA-1': 1, - 'TAGGAGCTAAGGCG-1': 1, 'TAGGAGCTGAGGGT-1': 1, 'TAGGAGCTTGCATG-1': 1, 'TAGGCAACCGTCTC-1': 1, - 'TAGGCATGCTCTCG-1': 1, 'TAGGCATGGCGAGA-1': 1, 'TAGGCTGATGCCTC-1': 1, 'TAGGGACTGAACTC-1': 1, - 'TAGGTCGACACTGA-1': 1, 'TAGGTCGAGGATCT-1': 1, 'TAGGTGACACACTG-1': 1, 'TAGGTGACACGTTG-1': 1, - 'TAGGTGTGTTCTGT-1': 1, 'TAGGTTCTGAAGGC-1': 1, 'TAGGTTCTTCTTAC-1': 1, 'TAGGTTCTTGCTGA-1': 1, - 'TAGTAAACCTCGCT-1': 1, 'TAGTAAACGTCACA-1': 1, 'TAGTAATGAGATCC-1': 1, 'TAGTACCTAAGAAC-1': 1, - 'TAGTATGATCTTAC-1': 1, 'TAGTATGATTCTCA-1': 1, 'TAGTCTTGGCTGTA-1': 1, 'TAGTCTTGGGACTT-1': 1, - 'TAGTCTTGTGGAAA-1': 1, 'TAGTGGTGAAGTGA-1': 1, 'TAGTTAGAACCACA-1': 1, 'TAGTTAGATGAACC-1': 1, - 'TATAAGACAACAGA-1': 1, 'TATAAGACAGCTCA-1': 1, 'TATAAGTGACACCA-1': 1, 'TATAAGTGTATCGG-1': 1, - 'TATAAGTGTGGTGT-1': 1, 'TATACAGAACCCTC-1': 1, 'TATACAGAAGAACA-1': 1, 'TATACAGATCCAGA-1': 1, - 'TATACCACCTGATG-1': 1, 'TATACGCTACCAAC-1': 1, 'TATAGATGGACGGA-1': 1, 'TATAGATGTTCCGC-1': 1, - 'TATCCAACCAGCTA-1': 1, 'TATCCAACTCTCTA-1': 1, 'TATCGACTACTAGC-1': 1, 'TATCGACTCGATAC-1': 1, - 'TATCGTACAGATGA-1': 1, 'TATCGTACATTCCT-1': 1, 'TATCTCGAGAGATA-1': 1, 'TATCTGACAGGTTC-1': 1, - 'TATCTGACTGTTTC-1': 1, 'TATCTTCTAAACAG-1': 1, 'TATGAATGGAGGAC-1': 1, 'TATGAATGTTTGCT-1': 1, - 'TATGCGGATAACCG-1': 1, 'TATGGGTGCATCAG-1': 1, 'TATGGGTGCTAGCA-1': 1, 'TATGGTCTCTACCC-1': 1, - 'TATGTCACGGAACG-1': 1, 'TATGTCACTAACCG-1': 1, 'TATGTCACTTCTCA-1': 1, 'TATGTGCTCCGATA-1': 1, - 'TATGTGCTGGATTC-1': 1, 'TATTGCTGAAGAAC-1': 1, 'TATTGCTGCCGTTC-1': 1, 'TATTGCTGTCTGGA-1': 1, - 'TATTGCTGTGCACA-1': 1, 'TATTTCCTATTGGC-1': 1, 'TATTTCCTGGAGGT-1': 1, 'TATTTCCTGGTGTT-1': 1, - 'TCAACACTGTTTGG-1': 1, 'TCAAGGACAGCGTT-1': 1, 'TCAAGGACATTCTC-1': 1, 'TCAAGGACGGTGTT-1': 1, - 'TCAATCACACTCTT-1': 1, 'TCAATCACAGTCGT-1': 1, 'TCACAACTATGTGC-1': 1, 'TCACAACTTTGCTT-1': 1, - 'TCACATACACTTTC-1': 1, 'TCACATACAGGGTG-1': 1, 'TCACCCGAGACGGA-1': 1, 'TCACCGTGCTCGCT-1': 1, - 'TCACCTCTACGACT-1': 1, 'TCACCTCTTCCAAG-1': 1, 'TCACGAGAGGAGGT-1': 1, 'TCACTATGGGGCAA-1': 1, - 'TCACTATGGTTGTG-1': 1, 'TCAGACGACGCTAA-1': 1, 'TCAGACGACGTTAG-1': 1, 'TCAGAGACTCCAGA-1': 1, - 'TCAGCAGACTCCAC-1': 1, 'TCAGCGCTCTAGTG-1': 1, 'TCAGCGCTGGATCT-1': 1, 'TCAGCGCTGGTATC-1': 1, - 'TCAGGATGAAGTAG-1': 1, 'TCAGGATGCCTTTA-1': 1, 'TCAGTGGAAGATCC-1': 1, 'TCAGTTACCTACGA-1': 1, - 'TCAGTTACTAGAAG-1': 1, 'TCATCAACCCGATA-1': 1, 'TCATCAACTGTTCT-1': 1, 'TCATCATGCAGTTG-1': 1, - 'TCATCCCTTACTGG-1': 1, 'TCATTCGATACAGC-1': 1, 'TCCACGTGGAAACA-1': 1, 'TCCACTCTACACTG-1': 1, - 'TCCACTCTGAGCTT-1': 1, 'TCCACTCTTACTTC-1': 1, 'TCCATAACAAAGTG-1': 1, 'TCCATAACCGTAGT-1': 1, - 'TCCATAACGATGAA-1': 1, 'TCCATAACTACGCA-1': 1, 'TCCATCCTCCCTAC-1': 1, 'TCCCACGATCATTC-1': 1, - 'TCCCATCTCAAAGA-1': 1, 'TCCCGAACACAGTC-1': 1, 'TCCCGAACTTCGCC-1': 1, 'TCCCGATGAGATCC-1': 1, - 'TCCCGATGCCTGAA-1': 1, 'TCCCTACTCAACTG-1': 1, 'TCCGAAGACAATCG-1': 1, 'TCCGAAGACGTTAG-1': 1, - 'TCCGGACTGAGGTG-1': 1, 'TCCGGACTGTACGT-1': 1, 'TCCTAAACATCGAC-1': 1, 'TCCTAAACCGAGAG-1': 1, - 'TCCTAAACCGCATA-1': 1, 'TCCTAATGGTTTGG-1': 1, 'TCCTACCTGTCGTA-1': 1, 'TCCTATGAAAAGCA-1': 1, - 'TCGAATCTCTGGTA-1': 1, 'TCGACCTGCCGATA-1': 1, 'TCGACGCTTCTATC-1': 1, 'TCGACGCTTTGACG-1': 1, - 'TCGAGAACGACAGG-1': 1, 'TCGAGAACGTTAGC-1': 1, 'TCGAGCCTATCAGC-1': 1, 'TCGAGCCTGCGAGA-1': 1, - 'TCGAGCCTTGTGAC-1': 1, 'TCGATACTATTCCT-1': 1, 'TCGATACTTGCACA-1': 1, 'TCGATTTGATGCCA-1': 1, - 'TCGATTTGCACTCC-1': 1, 'TCGATTTGCAGCTA-1': 1, 'TCGATTTGCCTACC-1': 1, 'TCGATTTGTCGTGA-1': 1, - 'TCGCAGCTAGATCC-1': 1, 'TCGCCATGAGACTC-1': 1, 'TCGCCATGTGGTCA-1': 1, 'TCGGACCTAACAGA-1': 1, - 'TCGGACCTATAAGG-1': 1, 'TCGGACCTGTACAC-1': 1, 'TCGGTAGAGTAGGG-1': 1, 'TCGGTAGATCCCAC-1': 1, - 'TCGTAGGATCGACA-1': 1, 'TCGTTATGGACAAA-1': 1, 'TCTAACACCAGTTG-1': 1, 'TCTAACACGAGCAG-1': 1, - 'TCTAACTGAACCAC-1': 1, 'TCTAAGCTAATGCC-1': 1, 'TCTAAGCTTAGTCG-1': 1, 'TCTAAGCTTCTAGG-1': 1, - 'TCTAAGCTTGTTCT-1': 1, 'TCTAAGCTTTCGCC-1': 1, 'TCTACAACGACTAC-1': 1, 'TCTAGACTTAGAAG-1': 1, - 'TCTAGTTGCACCAA-1': 1, 'TCTATGTGAAGAGT-1': 1, 'TCTATGTGAGTCTG-1': 1, 'TCTCAAACCTAAGC-1': 1, - 'TCTCTAGAATTTCC-1': 1, 'TCTGATACACGTGT-1': 1, 'TCTGATACTCGCCT-1': 1, 'TCTTACGAACCTGA-1': 1, - 'TCTTCAGAGCTACA-1': 1, 'TCTTGATGCGGAGA-1': 1, 'TGAAATTGGTGAGG-1': 1, 'TGAACCGAAAACGA-1': 1, - 'TGAACCGACTACTT-1': 1, 'TGAACCGATTCGGA-1': 1, 'TGAAGCACTCACGA-1': 1, 'TGAAGCTGAACGAA-1': 1, - 'TGAAGCTGCATGGT-1': 1, 'TGAAGCTGCGTAAC-1': 1, 'TGAATAACCACTTT-1': 1, 'TGAATAACTCCCAC-1': 1, - 'TGACACGACCTTAT-1': 1, 'TGACCAGACAACCA-1': 1, 'TGACCAGAGGATTC-1': 1, 'TGACCGCTAAAAGC-1': 1, - 'TGACCGCTCTGCAA-1': 1, 'TGACGATGCAAAGA-1': 1, 'TGACGCCTGTACCA-1': 1, 'TGACGCCTTTACTC-1': 1, - 'TGACTGGAAGAGAT-1': 1, 'TGACTGGACCGTAA-1': 1, 'TGACTGGACGCAAT-1': 1, 'TGACTGGAGGACAG-1': 1, - 'TGACTGGATTCTCA-1': 1, 'TGACTTACACACCA-1': 1, 'TGACTTACAGTCTG-1': 1, 'TGACTTTGCGCATA-1': 1, - 'TGACTTTGTTTGTC-1': 1, 'TGAGACACAAGGTA-1': 1, 'TGAGACACTCAAGC-1': 1, 'TGAGCTGAATGCTG-1': 1, - 'TGAGCTGACTGGAT-1': 1, 'TGAGCTGATGCTAG-1': 1, 'TGAGGACTCTCATT-1': 1, 'TGAGGACTTCATTC-1': 1, - 'TGAGGTACGAACCT-1': 1, 'TGAGTCGAGTTACG-1': 1, 'TGAGTGACTGAGCT-1': 1, 'TGATAAACGAATCC-1': 1, - 'TGATAAACTCCGTC-1': 1, 'TGATAAACTTTCAC-1': 1, 'TGATACCTCACTAG-1': 1, 'TGATACCTGTTGGT-1': 1, - 'TGATACCTTATGCG-1': 1, 'TGATACCTTGAAGA-1': 1, 'TGATATGAACCTTT-1': 1, 'TGATCACTAGCATC-1': 1, - 'TGATCACTCTCGCT-1': 1, 'TGATCACTTCTACT-1': 1, 'TGATCGGACTGACA-1': 1, 'TGATCGGAGGAGCA-1': 1, - 'TGATCGGATATGCG-1': 1, 'TGATTAGACATTGG-1': 1, 'TGATTAGATGACTG-1': 1, 'TGATTAGATGCTAG-1': 1, - 'TGATTCACTATGCG-1': 1, 'TGATTCACTGTCAG-1': 1, 'TGATTCTGCCGAAT-1': 1, 'TGATTCTGCTCTTA-1': 1, - 'TGCAAGTGAGAACA-1': 1, 'TGCAAGTGGGTAGG-1': 1, 'TGCAATCTTCAGGT-1': 1, 'TGCACAGACGACAT-1': 1, - 'TGCCAAGAGCAGTT-1': 1, 'TGCCAAGATCTCTA-1': 1, 'TGCCACTGAACGTC-1': 1, 'TGCCACTGCGATAC-1': 1, - 'TGCCAGCTTGGCAT-1': 1, 'TGCCCAACAGCAAA-1': 1, 'TGCCCAACCGCATA-1': 1, 'TGCCGACTCTCCCA-1': 1, - 'TGCGAAACAGTCAC-1': 1, 'TGCGAAACGTTGCA-1': 1, 'TGCGATGAACGGTT-1': 1, 'TGCGATGACCTCGT-1': 1, - 'TGCGATGACTAGTG-1': 1, 'TGCGATGACTGCTC-1': 1, 'TGCGATGACTTGCC-1': 1, 'TGCGATGAGTGCTA-1': 1, - 'TGCGCACTCTTGAG-1': 1, 'TGCGTAGAATAAGG-1': 1, 'TGCGTAGACGGGAA-1': 1, 'TGCGTAGATGGTCA-1': 1, - 'TGCTAGGAAACCGT-1': 1, 'TGCTAGGATAGTCG-1': 1, 'TGCTATACGGTTCA-1': 1, 'TGCTATACTGCTGA-1': 1, - 'TGCTGAGAGAGCAG-1': 1, 'TGCTGAGATTATCC-1': 1, 'TGGAAAGACTCTCG-1': 1, 'TGGAAAGAGCGATT-1': 1, - 'TGGAAAGAGGTCAT-1': 1, 'TGGAAAGATATGGC-1': 1, 'TGGAACACAAACAG-1': 1, 'TGGAACACGCTAAC-1': 1, - 'TGGAAGCTCAGATC-1': 1, 'TGGACCCTACACTG-1': 1, 'TGGACCCTCATGGT-1': 1, 'TGGACCCTGGTACT-1': 1, - 'TGGACTGAGTATGC-1': 1, 'TGGAGACTATCAGC-1': 1, 'TGGAGACTTCAAGC-1': 1, 'TGGAGACTTGACCA-1': 1, - 'TGGAGGGACGGAGA-1': 1, 'TGGAGGGAGCTATG-1': 1, 'TGGATCGATAAAGG-1': 1, 'TGGATGTGACCTAG-1': 1, - 'TGGATGTGTGAAGA-1': 1, 'TGGATTCTCATACG-1': 1, 'TGGCAATGCTTGTT-1': 1, 'TGGCACCTTCACGA-1': 1, - 'TGGCACCTTCAGTG-1': 1, 'TGGGTATGAAGAGT-1': 1, 'TGGGTATGCACAAC-1': 1, 'TGGGTATGGTACGT-1': 1, - 'TGGGTATGTTTGGG-1': 1, 'TGGTAGACATGCCA-1': 1, 'TGGTAGACCCTCAC-1': 1, 'TGGTAGACCTGATG-1': 1, - 'TGGTAGTGCACTGA-1': 1, 'TGGTATCTAAACAG-1': 1, 'TGGTATCTCTTCCG-1': 1, 'TGGTCAGACCCAAA-1': 1, - 'TGGTTACTGACGTT-1': 1, 'TGGTTACTGTTCTT-1': 1, 'TGTAACCTAGAGGC-1': 1, 'TGTAACCTTGCCTC-1': 1, - 'TGTAATGACACAAC-1': 1, 'TGTAATGAGGTAAA-1': 1, 'TGTACTTGCTCTAT-1': 1, 'TGTAGGTGCGAGAG-1': 1, - 'TGTAGGTGCTATGG-1': 1, 'TGTAGGTGCTCTAT-1': 1, 'TGTAGGTGTGCTGA-1': 1, 'TGTAGTCTTCCAGA-1': 1, - 'TGTAGTCTTGCACA-1': 1, 'TGTATCTGTTAGGC-1': 1, 'TGTATGCTCATGGT-1': 1, 'TGTATGCTGTAGGG-1': 1, - 'TGTATGCTTTCATC-1': 1, 'TGTCAGGAATACCG-1': 1, 'TGTCAGGAGATGAA-1': 1, 'TGTCTAACCCCTTG-1': 1, - 'TGTGACGATTCTCA-1': 1, 'TGTGAGACTGTCAG-1': 1, 'TGTGAGACTTGAGC-1': 1, 'TGTGAGTGACCACA-1': 1, - 'TGTGAGTGAGTGCT-1': 1, 'TGTGAGTGGAGATA-1': 1, 'TGTGATCTCTCTAT-1': 1, 'TGTGATCTGACACT-1': 1, - 'TGTGGATGGCCAAT-1': 1, 'TGTTAAGACAAAGA-1': 1, 'TGTTAAGATAAGGA-1': 1, 'TGTTACACCGCATA-1': 1, - 'TGTTACACGACTAC-1': 1, 'TGTTACTGGCTACA-1': 1, 'TGTTACTGTAGTCG-1': 1, 'TTAACCACCGTAAC-1': 1, - 'TTAACCACTAAGGA-1': 1, 'TTAACCACTCAGAC-1': 1, 'TTACACACGTGTTG-1': 1, 'TTACACACTCCTAT-1': 1, - 'TTACCATGAATCGC-1': 1, 'TTACCATGGTTGAC-1': 1, 'TTACCATGTGTCTT-1': 1, 'TTACCATGTTGTGG-1': 1, - 'TTACGACTGAGAGC-1': 1, 'TTACGACTTGACAC-1': 1, 'TTACGTACGTTCAG-1': 1, 'TTACTCGAAGAATG-1': 1, - 'TTACTCGACGCAAT-1': 1, 'TTACTCGAGGGTGA-1': 1, 'TTACTCGATCTACT-1': 1, 'TTAGAATGTGGTGT-1': 1, - 'TTAGAATGTGTAGC-1': 1, 'TTAGACCTCCTACC-1': 1, 'TTAGACCTCCTTTA-1': 1, 'TTAGCTACAACCGT-1': 1, - 'TTAGCTACTGTCCC-1': 1, 'TTAGCTACTTTCGT-1': 1, 'TTAGGGACGCGAAG-1': 1, 'TTAGGGTGCTGGAT-1': 1, - 'TTAGGGTGTCCTGC-1': 1, 'TTAGGTCTACTTTC-1': 1, 'TTAGTCACCAGTTG-1': 1, 'TTAGTCTGAAAGCA-1': 1, - 'TTAGTCTGCCAACA-1': 1, 'TTAGTCTGTGCACA-1': 1, 'TTATCCGACTAGTG-1': 1, 'TTATCCGAGAAAGT-1': 1, - 'TTATGAGAGATAAG-1': 1, 'TTATGCACGTCACA-1': 1, 'TTATGGCTTATGGC-1': 1, 'TTATTCCTATGCTG-1': 1, - 'TTATTCCTGGACAG-1': 1, 'TTATTCCTGGTACT-1': 1, 'TTATTCCTTCGTGA-1': 1, 'TTCAAAGATAAAGG-1': 1, - 'TTCAACACAACAGA-1': 1, 'TTCAACACCCCAAA-1': 1, 'TTCAACACGGACGA-1': 1, 'TTCAAGCTAAGAAC-1': 1, - 'TTCAAGCTAGATGA-1': 1, 'TTCAAGCTGTTGAC-1': 1, 'TTCAAGCTTGATGC-1': 1, 'TTCAAGCTTTCGCC-1': 1, - 'TTCACAACCCGTTC-1': 1, 'TTCACAACGTCTGA-1': 1, 'TTCAGACTACCCAA-1': 1, 'TTCAGACTCTCGAA-1': 1, - 'TTCAGTACCGACTA-1': 1, 'TTCAGTACTCAAGC-1': 1, 'TTCAGTACTCCTAT-1': 1, 'TTCAGTTGCCAAGT-1': 1, - 'TTCAGTTGTCCTTA-1': 1, 'TTCAGTTGTCTAGG-1': 1, 'TTCAGTTGTCTCGC-1': 1, 'TTCATCGAGGTGGA-1': 1, - 'TTCATGTGTGGTGT-1': 1, 'TTCATTCTATGTCG-1': 1, 'TTCATTCTTCTCTA-1': 1, 'TTCCAAACCTATGG-1': 1, - 'TTCCAAACCTCCCA-1': 1, 'TTCCAAACTCCCAC-1': 1, 'TTCCAAACTTGACG-1': 1, 'TTCCATGACGAGAG-1': 1, - 'TTCCATGACTGTCC-1': 1, 'TTCCCACTTGAGGG-1': 1, 'TTCCCACTTGTCTT-1': 1, 'TTCCTAGAAAGTGA-1': 1, - 'TTCCTAGACTAGTG-1': 1, 'TTCGAGGACTCTAT-1': 1, 'TTCGAGGAGGGCAA-1': 1, 'TTCGAGGATAGAAG-1': 1, - 'TTCGATTGAGCATC-1': 1, 'TTCGGAGAATGCCA-1': 1, 'TTCGGAGATGTGCA-1': 1, 'TTCGTATGAAAAGC-1': 1, - 'TTCGTATGGATAGA-1': 1, 'TTCGTATGGTCTGA-1': 1, 'TTCGTATGTCCTTA-1': 1, 'TTCTACGAACGTAC-1': 1, - 'TTCTACGAGTTGGT-1': 1, 'TTCTAGTGACACGT-1': 1, 'TTCTAGTGCATGAC-1': 1, 'TTCTAGTGGAGAGC-1': 1, - 'TTCTAGTGGTCACA-1': 1, 'TTCTCAGAAGAGAT-1': 1, 'TTCTCAGAAGCATC-1': 1, 'TTCTCAGATGGAGG-1': 1, - 'TTCTGATGGAGACG-1': 1, 'TTCTTACTCTGGAT-1': 1, 'TTGAACCTCCTTGC-1': 1, 'TTGAATGAACTACG-1': 1, - 'TTGAATGACTTACT-1': 1, 'TTGAATGATCTCAT-1': 1, 'TTGACACTCTGTAG-1': 1, 'TTGACACTGATAAG-1': 1, - 'TTGAGGACAGAACA-1': 1, 'TTGAGGACTACGCA-1': 1, 'TTGAGGTGGACGGA-1': 1, 'TTGCATTGAGCTAC-1': 1, - 'TTGCATTGCTAAGC-1': 1, 'TTGCATTGTGACTG-1': 1, 'TTGCTAACACCAAC-1': 1, 'TTGCTAACACGCTA-1': 1, - 'TTGCTAACCACTCC-1': 1, 'TTGCTATGGTACGT-1': 1, 'TTGCTATGGTAGGG-1': 1, 'TTGGAGACCAATCG-1': 1, - 'TTGGAGACGCTATG-1': 1, 'TTGGAGACTATGGC-1': 1, 'TTGGGAACTGAACC-1': 1, 'TTGGTACTACTGGT-1': 1, - 'TTGGTACTCTTAGG-1': 1, 'TTGGTACTGAATCC-1': 1, 'TTGGTACTGGATTC-1': 1, 'TTGTACACGTTGTG-1': 1, - 'TTGTACACTTGCAG-1': 1, 'TTGTAGCTAGCTCA-1': 1, 'TTGTAGCTCTCTTA-1': 1, 'TTGTCATGGACGGA-1': 1, - 'TTTAGAGATCCTCG-1': 1, 'TTTAGCTGATACCG-1': 1, 'TTTAGCTGGATACC-1': 1, 'TTTAGCTGTACTCT-1': 1, - 'TTTAGGCTCCTTTA-1': 1, 'TTTATCCTGTTGTG-1': 1, 'TTTCACGAGGTTCA-1': 1, 'TTTCAGTGGAAGGC-1': 1, - 'TTTCAGTGTCACGA-1': 1, 'TTTCAGTGTCTATC-1': 1, 'TTTCAGTGTGCAGT-1': 1, 'TTTCCAGAGGTGAG-1': 1, - 'TTTCGAACACCTGA-1': 1, 'TTTCGAACTCTCAT-1': 1, 'TTTCTACTGAGGCA-1': 1, 'TTTCTACTTCCTCG-1': 1, - 'TTTGCATGAGAGGC-1': 1, 'TTTGCATGCCTCAC-1': 1}}, 'louvain': { - 'options': {'B cells': 342, 'CD14+ Monocytes': 480, 'CD4 T cells': 1144, 'CD8 T cells': 316, - 'Dendritic cells': 37, 'FCGR3A+ Monocytes': 150, 'Megakaryocytes': 15, 'NK cells': 154}}, - 'n_counts': {'range': {'max': 8875.0, 'min': 556.0}}, - 'n_genes': {'range': {'max': 2455, 'min': 212}}, - 'percent_mito': { - 'range': {'max': 0.049938347190618515, 'min': 0.0}}}, - 'reactivelimit': 1000000, 'schema': { - 'CellName': {'displayname': 'Name', 'include': True, 'type': 'string', 'variabletype': 'categorical'}, - 'louvain': {'displayname': 'Louvain Cluster', 'include': True, 'type': 'string', - 'variabletype': 'categorical'}, - 'n_counts': {'displayname': 'Num Counts', 'include': True, 'type': 'float', - 'variabletype': 'continuous'}, - 'n_genes': {'displayname': 'Num Genes', 'include': True, 'type': 'int', 'variabletype': 'continuous'}, - 'percent_mito': {'displayname': 'Mitochondrial Percentage', 'include': True, 'type': 'float', - 'variabletype': 'continuous'}}}, 'status': {'error': False, 'errormessage': ''}} - assert data == result_data + assert result_data["data"]["cellcount"] == 2638 + assert len(result_data["data"]['ranges']['CellName']['options']) == 2638 + + + def test_expression_get(self): + url = "{base}{endpoint}".format(base=self.url_base, endpoint="expression") + result = self.session.get(url) + assert result.status_code == 200 + + def test_expression_post(self): + url = "{base}{endpoint}".format(base=self.url_base, endpoint="expression") + result = self.session.post(url, data=json.dumps({"celllist": ["AAACATACAACCAC-1", "AACCGATGGTCATG-1"], "genelist": ["BACH1", "MIS18A", "ATP5O"]}), headers={'content-type': 'application/json'}) + assert result.status_code == 200 + result_data = result.json() + assert len(result_data["data"]["cells"]) == 2 + assert len(result_data["data"]["cells"][0]['e']) == 3 + + def test_diffexp(self): + url = "{base}{endpoint}".format(base=self.url_base, endpoint="diffexp") + result = self.session.post(url, data=json.dumps({"celllist1": ["AAACATACAACCAC-1", "AACCGATGGTCATG-1"], "celllist2": ["CCGATAGACCTAAG-1", "GGTGGAGAAGTAGA-1"]}), headers={'content-type': 'application/json'}) + assert result.status_code == 200 + \ No newline at end of file From c7f9dc0bb97e3c5f6f9e191146fcf5ca0d342695 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 26 Jun 2018 11:21:35 -0700 Subject: [PATCH 10/26] Remove redundant app start --- backend/app/__init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backend/app/__init__.py b/backend/app/__init__.py index e56776b8..8125c40d 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -24,6 +24,7 @@ CXG_API_BASE = os.environ.get("CXG_API_BASE2", default="http://0.0.0.0:5005/api/ if not CONFIG_FILE: raise ValueError("No config file set for Flask application") +# TODO check what is actually being configured here app.config.from_pyfile(os.path.join(CXG_DIR, "config", CONFIG_FILE), silent=True) app.config.update( SECRET_KEY=SECRET_KEY, @@ -58,7 +59,3 @@ app.register_blueprint( app.add_url_rule('/', endpoint='index') - - -if __name__ == "__main__": - app.run(host='0.0.0.0', debug=True, port=5005) From 59dcfe2bc47f4a5b3893e4f13dcabce77ecd5af3 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 26 Jun 2018 11:22:34 -0700 Subject: [PATCH 11/26] Correct tabs to spaces --- backend/app/driver/driver.py | 122 ++++---- backend/app/scanpy_engine/scanpy_engine.py | 311 ++++++++++----------- 2 files changed, 216 insertions(+), 217 deletions(-) diff --git a/backend/app/driver/driver.py b/backend/app/driver/driver.py index 5fafcb0a..7264d97f 100644 --- a/backend/app/driver/driver.py +++ b/backend/app/driver/driver.py @@ -2,77 +2,77 @@ from abc import ABCMeta, abstractmethod class CXGDriver(metaclass=ABCMeta): - def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): - self.data = self._load_data(data) + def __init__(self, data, schema=None, graph_method=None, diffexp_method=None): + self.data = self._load_data(data) - @staticmethod - @abstractmethod - def _load_data(data): - pass + @staticmethod + @abstractmethod + def _load_data(data): + pass - @abstractmethod - def _load_or_infer_schema(data): - pass + @abstractmethod + def _load_or_infer_schema(data): + pass - @abstractmethod - def _set_cell_ids(self): - pass + @abstractmethod + def _set_cell_ids(self): + pass - @abstractmethod - def cells(self): - pass + @abstractmethod + def cells(self): + pass - @abstractmethod - def cellids(self): - pass + @abstractmethod + def cellids(self): + pass - @abstractmethod - def genes(self): - pass + @abstractmethod + def genes(self): + pass - @abstractmethod - def filter_cells(self, filter): - """ - Filter cells from data and return a subset of the data - :param filter: - :return: filtered dataframe - """ - pass + @abstractmethod + def filter_cells(self, filter): + """ + Filter cells from data and return a subset of the data + :param filter: + :return: filtered dataframe + """ + pass - # Should this return the order of metadata fields as the first value? - @abstractmethod - def metadata(self, df, fields=None): - """ - Generator for metadata. Gets the metadata values cell by cell and returns all value - or only certain values if names is not None + # Should this return the order of metadata fields as the first value? + @abstractmethod + def metadata(self, df, fields=None): + """ + Generator for metadata. Gets the metadata values cell by cell and returns all value + or only certain values if names is not None - :param df: from filter_cells, dataframe - :param fields: list of keys for metadata to return, returns all metadata values if not set. - :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] - """ - pass + :param df: from filter_cells, dataframe + :param fields: list of keys for metadata to return, returns all metadata values if not set. + :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] + """ + pass - @abstractmethod - def create_graph(self, df): - """ - Computes a n-d layout for cells through dimensionality reduction. - :param df: from filter_cells, dataframe - :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] - """ - pass + @abstractmethod + def create_graph(self, df): + """ + Computes a n-d layout for cells through dimensionality reduction. + :param df: from filter_cells, dataframe + :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] + """ + pass - @abstractmethod - def diffexp(self, df1, df2): - """ - Computes the top differentially expressed genes between two clusters + @abstractmethod + def diffexp(self, df1, df2): + """ + Computes the top differentially expressed genes between two clusters - :param df1: First set of cells - :param df2: Second set of cells - :return: Up in the air: I recommend [gene name, mean_expression_cells1, - mean_expression_cells2, average_difference, statistic_value] - """ - pass + :param df1: First set of cells + :param df2: Second set of cells + :return: Up in the air: I recommend [gene name, mean_expression_cells1, + mean_expression_cells2, average_difference, statistic_value] + """ + pass - @abstractmethod - def expression(self, df): - pass + @abstractmethod + def expression(self, df): + pass diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/backend/app/scanpy_engine/scanpy_engine.py index 7156e503..a723c862 100644 --- a/backend/app/scanpy_engine/scanpy_engine.py +++ b/backend/app/scanpy_engine/scanpy_engine.py @@ -10,175 +10,174 @@ from ..driver.driver import CXGDriver class ScanpyEngine(CXGDriver): - def __init__(self, data, schema=None, graph_method="umap", diffexp_method="ttest"): - self.data = self._load_data(data) - self.schema = self._load_or_infer_schema(data, schema) - self._set_cell_ids() - self.cell_count = self.data.shape[0] - self.gene_count = self.data.shape[1] - self.graph_method = graph_method - self.diffexp_method = diffexp_method + def __init__(self, data, schema=None, graph_method="umap", diffexp_method="ttest"): + self.data = self._load_data(data) + self.schema = self._load_or_infer_schema(data, schema) + self._set_cell_ids() + self.cell_count = self.data.shape[0] + self.gene_count = self.data.shape[1] + self.graph_method = graph_method + self.diffexp_method = diffexp_method - @staticmethod - def _load_data(data): - return sc.read(os.path.join(data, "data.h5ad")) + @staticmethod + def _load_data(data): + return sc.read(os.path.join(data, "data.h5ad")) - @staticmethod - def _load_or_infer_schema(data, schema): - data_schema = None - if not schema: - pass - else: - data_schema = parse_schema(os.path.join(data, schema)) - return data_schema + @staticmethod + def _load_or_infer_schema(data, schema): + data_schema = None + if not schema: + pass + else: + data_schema = parse_schema(os.path.join(data, schema)) + return data_schema - def _set_cell_ids(self): - self.data.obs['cxg_cell_id'] = list(range(self.data.obs.shape[0])) - self.data.obs["cell_name"] = list(self.data.obs.index) - self.data.obs.set_index('cxg_cell_id', inplace=True) + def _set_cell_ids(self): + self.data.obs['cxg_cell_id'] = list(range(self.data.obs.shape[0])) + self.data.obs["cell_name"] = list(self.data.obs.index) + self.data.obs.set_index('cxg_cell_id', inplace=True) - def cells(self): - return list(self.data.obs.index) + def cells(self): + return list(self.data.obs.index) - def cellids(self, df=None): - if df: - return list(df.obs.index) - else: - return list(self.data.obs.index) + def cellids(self, df=None): + if df: + return list(df.obs.index) + else: + return list(self.data.obs.index) - def genes(self): - return self.data.var.index.tolist() + def genes(self): + return self.data.var.index.tolist() - def filter_cells(self, filter): - """ - Filter cells from data and return a subset of the data - :param filter: - :return: iterator through cell ids - """ - cell_idx = np.ones((self.cell_count,), dtype=bool) - for key, value in filter.items(): - if value["variable_type"] == "categorical": - key_idx = np.in1d(getattr(self.data.obs, key), value["query"]) - cell_idx = np.logical_and(cell_idx, key_idx) - else: - min_ = value["query"]["min"] - max_ = value["query"]["max"] - if min_: - key_idx = np.array((getattr(self.data.obs, key) >= min_).data) - cell_idx = np.logical_and(cell_idx, key_idx) - if max_: - key_idx = np.array((getattr(self.data.obs, key) <= min_).data) - cell_idx = np.logical_and(cell_idx, key_idx) - return self.data[cell_idx, :] + def filter_cells(self, filter): + """ + Filter cells from data and return a subset of the data + :param filter: + """ + cell_idx = np.ones((self.cell_count,), dtype=bool) + for key, value in filter.items(): + if value["variable_type"] == "categorical": + key_idx = np.in1d(getattr(self.data.obs, key), value["query"]) + cell_idx = np.logical_and(cell_idx, key_idx) + else: + min_ = value["query"]["min"] + max_ = value["query"]["max"] + if min_: + key_idx = np.array((getattr(self.data.obs, key) >= min_).data) + cell_idx = np.logical_and(cell_idx, key_idx) + if max_: + key_idx = np.array((getattr(self.data.obs, key) <= min_).data) + cell_idx = np.logical_and(cell_idx, key_idx) + return self.data[cell_idx, :] - def metadata_ranges(self, df=None): - metadata_ranges = {} - if not df: - df = self.data - for field in self.schema: - if self.schema[field]["variabletype"] == "categorical": - group_by = field - if group_by == "CellName": - group_by = 'cell_name' - metadata_ranges[field] = {"options": df.obs.groupby(group_by).size().to_dict()} - else: - metadata_ranges[field] = { - "range": { - "min": df.obs[field].min(), - "max": df.obs[field].max() - } - } - return metadata_ranges + def metadata_ranges(self, df=None): + metadata_ranges = {} + if not df: + df = self.data + for field in self.schema: + if self.schema[field]["variabletype"] == "categorical": + group_by = field + if group_by == "CellName": + group_by = 'cell_name' + metadata_ranges[field] = {"options": df.obs.groupby(group_by).size().to_dict()} + else: + metadata_ranges[field] = { + "range": { + "min": df.obs[field].min(), + "max": df.obs[field].max() + } + } + return metadata_ranges - def metadata(self, df, fields=None): - """ - Generator for metadata. Gets the metadata values cell by cell and returns all value - or only certain values if names is not None + def metadata(self, df, fields=None): + """ + Generator for metadata. Gets the metadata values cell by cell and returns all value + or only certain values if names is not None - """ - metadata = df.obs.to_dict(orient="records") - for idx in range(len(metadata)): - metadata[idx]["CellName"] = metadata[idx].pop("cell_name", None) - return metadata + """ + metadata = df.obs.to_dict(orient="records") + for idx in range(len(metadata)): + metadata[idx]["CellName"] = metadata[idx].pop("cell_name", None) + return metadata - def create_graph(self, df): - """ - Computes a n-d layout for cells through dimensionality reduction. - """ - getattr(sc.tl, self.graph_method)(df) - graph = df.obsm["X_{graph_method}".format(graph_method=self.graph_method)] - normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) - return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() + def create_graph(self, df): + """ + Computes a n-d layout for cells through dimensionality reduction. + """ + getattr(sc.tl, self.graph_method)(df) + graph = df.obsm["X_{graph_method}".format(graph_method=self.graph_method)] + normalized_graph = (graph - graph.min()) / (graph.max() - graph.min()) + return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() - def diffexp(self, cell_list_1, cell_list_2, pval, num_genes): - cells_idx_1 = np.in1d(self.data.obs["cell_name"], cell_list_1) - cells_idx_2 = np.in1d(self.data.obs["cell_name"], cell_list_2) - expression_1 = self.data.X[cells_idx_1, :] - expression_2 = self.data.X[cells_idx_2, :] - diff_exp = stats.ttest_ind(expression_1, expression_2) - set1 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic > 0) - set2 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic < 0) - stat1 = diff_exp.statistic[set1] - stat2 = diff_exp.statistic[set2] - sort_set1 = np.argsort(stat1)[::-1] - sort_set2 = np.argsort(stat2) - pval1 = diff_exp.pvalue[set1][sort_set1] - pval2 = diff_exp.pvalue[set2][sort_set2] - mean_ex1_set1 = np.mean(expression_1[:, set1], axis=0)[sort_set1] - mean_ex2_set1 = np.mean(expression_2[:, set1], axis=0)[sort_set1] - mean_ex1_set2 = np.mean(expression_1[:, set2], axis=0)[sort_set2] - mean_ex2_set2 = np.mean(expression_2[:, set2], axis=0)[sort_set2] - mean_diff1 = mean_ex1_set1 - mean_ex2_set1 - mean_diff2 = mean_ex1_set2 - mean_ex2_set2 - genes_cellset_1 = self.data.var_names[set1][sort_set1] - genes_cellset_2 = self.data.var_names[set2][sort_set2] - return { - "celllist1": { - "topgenes": genes_cellset_1.tolist()[:num_genes], - "mean_expression_cellset1": mean_ex1_set1.tolist()[:num_genes], - "mean_expression_cellset2": mean_ex2_set1.tolist()[:num_genes], - "pval": pval1.tolist()[:num_genes], - "ave_diff": mean_diff1.tolist()[:num_genes] - }, - "celllist2": { - "topgenes": genes_cellset_2.tolist()[:num_genes], - "mean_expression_cellset1": mean_ex1_set2.tolist()[:num_genes], - "mean_expression_cellset2": mean_ex2_set2.tolist()[:num_genes], - "pval": pval2.tolist()[:num_genes], - "ave_diff": mean_diff2.tolist()[:num_genes] - }, - } + def diffexp(self, cell_list_1, cell_list_2, pval, num_genes): + cells_idx_1 = np.in1d(self.data.obs["cell_name"], cell_list_1) + cells_idx_2 = np.in1d(self.data.obs["cell_name"], cell_list_2) + expression_1 = self.data.X[cells_idx_1, :] + expression_2 = self.data.X[cells_idx_2, :] + diff_exp = stats.ttest_ind(expression_1, expression_2) + set1 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic > 0) + set2 = np.logical_and(diff_exp.pvalue < pval, diff_exp.statistic < 0) + stat1 = diff_exp.statistic[set1] + stat2 = diff_exp.statistic[set2] + sort_set1 = np.argsort(stat1)[::-1] + sort_set2 = np.argsort(stat2) + pval1 = diff_exp.pvalue[set1][sort_set1] + pval2 = diff_exp.pvalue[set2][sort_set2] + mean_ex1_set1 = np.mean(expression_1[:, set1], axis=0)[sort_set1] + mean_ex2_set1 = np.mean(expression_2[:, set1], axis=0)[sort_set1] + mean_ex1_set2 = np.mean(expression_1[:, set2], axis=0)[sort_set2] + mean_ex2_set2 = np.mean(expression_2[:, set2], axis=0)[sort_set2] + mean_diff1 = mean_ex1_set1 - mean_ex2_set1 + mean_diff2 = mean_ex1_set2 - mean_ex2_set2 + genes_cellset_1 = self.data.var_names[set1][sort_set1] + genes_cellset_2 = self.data.var_names[set2][sort_set2] + return { + "celllist1": { + "topgenes": genes_cellset_1.tolist()[:num_genes], + "mean_expression_cellset1": mean_ex1_set1.tolist()[:num_genes], + "mean_expression_cellset2": mean_ex2_set1.tolist()[:num_genes], + "pval": pval1.tolist()[:num_genes], + "ave_diff": mean_diff1.tolist()[:num_genes] + }, + "celllist2": { + "topgenes": genes_cellset_2.tolist()[:num_genes], + "mean_expression_cellset1": mean_ex1_set2.tolist()[:num_genes], + "mean_expression_cellset2": mean_ex2_set2.tolist()[:num_genes], + "pval": pval2.tolist()[:num_genes], + "ave_diff": mean_diff2.tolist()[:num_genes] + }, + } - def expression(self, cells=None, genes=None): - """ - :param df: - :return: - """ - if cells: - cells_idx = np.in1d(self.data.obs["cell_name"], cells) - else: - cells_idx = np.ones((self.cell_count,), dtype=bool) - if genes: - genes_idx = np.in1d(self.data.var_names, genes) - else: - genes_idx = np.ones((self.gene_count,), dtype=bool) - index = np.ix_(cells_idx, genes_idx) - expression = self.data.X[index] + def expression(self, cells=None, genes=None): + """ + :param df: + :return: + """ + if cells: + cells_idx = np.in1d(self.data.obs["cell_name"], cells) + else: + cells_idx = np.ones((self.cell_count,), dtype=bool) + if genes: + genes_idx = np.in1d(self.data.var_names, genes) + else: + genes_idx = np.ones((self.gene_count,), dtype=bool) + index = np.ix_(cells_idx, genes_idx) + expression = self.data.X[index] - if not genes: - genes = self.data.var.index.tolist() - if not cells: - cells = self.data.obs["cell_name"].tolist() + if not genes: + genes = self.data.var.index.tolist() + if not cells: + cells = self.data.obs["cell_name"].tolist() - cell_data = [] - for idx, cell in enumerate(cells): - cell_data.append({ - "cellname": cell, - "e": list(expression[idx]), - }) + cell_data = [] + for idx, cell in enumerate(cells): + cell_data.append({ + "cellname": cell, + "e": list(expression[idx]), + }) - return { - "genes": genes, - "cells": cell_data, - "nonzero_gene_count": int(np.sum(expression.any(axis=0))) - } + return { + "genes": genes, + "cells": cell_data, + "nonzero_gene_count": int(np.sum(expression.any(axis=0))) + } From dd5fa57259e1f133cd29de97a84831ccaf7a3495 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 26 Jun 2018 11:32:41 -0700 Subject: [PATCH 12/26] renaming backend, cellxgene to server, client respectively --- .gitignore | 11 ++++------- .../configuration/babel/babel.dev.js | 0 .../configuration/babel/babel.prod.js | 0 .../configuration/babel/babel.test.js | 0 .../configuration/eslint/eslint.js | 0 .../configuration/polyfills/polyfills.js | 0 .../configuration/webpack/webpack.config.dev.js | 0 .../configuration/webpack/webpack.config.prod.js | 0 {cellxgene => client}/favicon.png | Bin {cellxgene => client}/index.html | 0 {cellxgene => client}/index_template.html | 0 {cellxgene => client}/package.json | 0 {cellxgene => client}/server/development.js | 0 {cellxgene => client}/server/production.js | 0 {cellxgene => client}/server/utils.js | 0 {cellxgene => client}/src/actions/index.js | 0 .../components/_experimentalWebGLHeatmap/heatmap.js | 0 .../_experimentalWebGLHeatmap/orbit-control.js | 0 .../components/_experimentalWebGLHeatmap/popup.js | 0 {cellxgene => client}/src/components/app.js | 0 .../src/components/categorical/categorical.css | 0 .../src/components/categorical/categorical.js | 0 .../src/components/categorical/util.js | 0 .../src/components/categorical/value.js | 0 .../src/components/continuous/continuous.js | 0 .../src/components/continuous/drawAxes.js | 0 .../src/components/continuous/drawLinesCanvas.js | 0 .../src/components/continuous/histogramBrush.js | 0 .../src/components/continuous/parallel.js | 0 .../components/continuous/parallelCoordinates.css | 0 .../continuous/setupParallelCoordinates.js | 0 .../src/components/continuous/util.js | 0 .../src/components/continuousLegend/index.js | 0 .../src/components/expression/cellSetButtons.js | 0 .../src/components/expression/diffExpHeatmap.js | 0 .../src/components/expression/expression.css | 0 .../src/components/expression/expressionButtons.js | 0 .../src/components/framework/buttons.css | 0 .../src/components/framework/container.css | 0 .../src/components/framework/container.js | 0 .../src/components/framework/header.css | 0 .../src/components/framework/header.js | 0 .../src/components/framework/sectionHeader.js | 0 .../src/components/graph/drawPointsRegl.js | 0 .../src/components/graph/graph.css | 0 {cellxgene => client}/src/components/graph/graph.js | 0 .../src/components/graph/setupSVGandBrush.js | 0 {cellxgene => client}/src/components/graph/util.js | 0 {cellxgene => client}/src/components/joy/drawJoy.js | 0 {cellxgene => client}/src/components/joy/joy.css | 0 {cellxgene => client}/src/components/joy/joy.js | 0 .../src/components/joy/joyParser.js | 0 {cellxgene => client}/src/components/leftsidebar.js | 0 .../src/components/scatterplot/drawPointsRegl.js | 0 .../src/components/scatterplot/scatterplot.css | 0 .../src/components/scatterplot/scatterplot.js | 0 .../src/components/scatterplot/setupScatterplot.js | 0 .../src/components/scatterplot/util.js | 0 {cellxgene => client}/src/globals.js | 0 {cellxgene => client}/src/index.css | 0 {cellxgene => client}/src/index.js | 0 .../src/middleware/updateCellColors.js | 0 .../src/middleware/updateCellSelectionMiddleware.js | 0 .../src/middleware/updateURLMiddleware.js | 0 {cellxgene => client}/src/reducers/cells.js | 0 {cellxgene => client}/src/reducers/controls.js | 0 {cellxgene => client}/src/reducers/differential.js | 0 {cellxgene => client}/src/reducers/expression.js | 0 {cellxgene => client}/src/reducers/index.js | 0 {cellxgene => client}/src/reducers/initialize.js | 0 {cellxgene => client}/src/reducers/responsive.js | 0 {cellxgene => client}/src/util/camera.js | 0 {cellxgene => client}/src/util/parseRGB.js | 0 {cellxgene => client}/src/util/renderQueue.js | 0 {cellxgene => client}/src/util/scaleLinear.js | 0 {cellxgene => client}/src/util/scaleRGB.js | 0 {cellxgene => client}/src/util/schema.js | 0 .../src/util/typedCrossfilter/bitArray.js | 0 .../src/util/typedCrossfilter/index.js | 0 .../src/util/typedCrossfilter/positiveIntervals.js | 0 .../src/util/typedCrossfilter/util.js | 0 {backend => server}/app/__init__.py | 0 {backend => server}/app/driver/__init__.py | 0 {backend => server}/app/driver/driver.py | 0 {backend => server}/app/rest_api/__init__.py | 0 {backend => server}/app/rest_api/rest.py | 0 {backend => server}/app/scanpy_engine/__init__.py | 0 .../app/scanpy_engine/scanpy_engine.py | 0 {backend => server}/app/util/__init__.py | 0 {backend => server}/app/util/filter.py | 0 {backend => server}/app/util/schema_parse.py | 0 {backend => server}/app/util/utils.py | 0 {backend => server}/app/web/__init__.py | 0 {backend => server}/app/web/templates/swagger.html | 0 {backend => server}/app/web/webapp.py | 0 {backend => server}/run.py | 0 {backend => server}/test/test_api.py | 0 97 files changed, 4 insertions(+), 7 deletions(-) rename {cellxgene => client}/configuration/babel/babel.dev.js (100%) rename {cellxgene => client}/configuration/babel/babel.prod.js (100%) rename {cellxgene => client}/configuration/babel/babel.test.js (100%) rename {cellxgene => client}/configuration/eslint/eslint.js (100%) rename {cellxgene => client}/configuration/polyfills/polyfills.js (100%) rename {cellxgene => client}/configuration/webpack/webpack.config.dev.js (100%) rename {cellxgene => client}/configuration/webpack/webpack.config.prod.js (100%) rename {cellxgene => client}/favicon.png (100%) rename {cellxgene => client}/index.html (100%) rename {cellxgene => client}/index_template.html (100%) rename {cellxgene => client}/package.json (100%) rename {cellxgene => client}/server/development.js (100%) rename {cellxgene => client}/server/production.js (100%) rename {cellxgene => client}/server/utils.js (100%) rename {cellxgene => client}/src/actions/index.js (100%) rename {cellxgene => client}/src/components/_experimentalWebGLHeatmap/heatmap.js (100%) rename {cellxgene => client}/src/components/_experimentalWebGLHeatmap/orbit-control.js (100%) rename {cellxgene => client}/src/components/_experimentalWebGLHeatmap/popup.js (100%) rename {cellxgene => client}/src/components/app.js (100%) rename {cellxgene => client}/src/components/categorical/categorical.css (100%) rename {cellxgene => client}/src/components/categorical/categorical.js (100%) rename {cellxgene => client}/src/components/categorical/util.js (100%) rename {cellxgene => client}/src/components/categorical/value.js (100%) rename {cellxgene => client}/src/components/continuous/continuous.js (100%) rename {cellxgene => client}/src/components/continuous/drawAxes.js (100%) rename {cellxgene => client}/src/components/continuous/drawLinesCanvas.js (100%) rename {cellxgene => client}/src/components/continuous/histogramBrush.js (100%) rename {cellxgene => client}/src/components/continuous/parallel.js (100%) rename {cellxgene => client}/src/components/continuous/parallelCoordinates.css (100%) rename {cellxgene => client}/src/components/continuous/setupParallelCoordinates.js (100%) rename {cellxgene => client}/src/components/continuous/util.js (100%) rename {cellxgene => client}/src/components/continuousLegend/index.js (100%) rename {cellxgene => client}/src/components/expression/cellSetButtons.js (100%) rename {cellxgene => client}/src/components/expression/diffExpHeatmap.js (100%) rename {cellxgene => client}/src/components/expression/expression.css (100%) rename {cellxgene => client}/src/components/expression/expressionButtons.js (100%) rename {cellxgene => client}/src/components/framework/buttons.css (100%) rename {cellxgene => client}/src/components/framework/container.css (100%) rename {cellxgene => client}/src/components/framework/container.js (100%) rename {cellxgene => client}/src/components/framework/header.css (100%) rename {cellxgene => client}/src/components/framework/header.js (100%) rename {cellxgene => client}/src/components/framework/sectionHeader.js (100%) rename {cellxgene => client}/src/components/graph/drawPointsRegl.js (100%) rename {cellxgene => client}/src/components/graph/graph.css (100%) rename {cellxgene => client}/src/components/graph/graph.js (100%) rename {cellxgene => client}/src/components/graph/setupSVGandBrush.js (100%) rename {cellxgene => client}/src/components/graph/util.js (100%) rename {cellxgene => client}/src/components/joy/drawJoy.js (100%) rename {cellxgene => client}/src/components/joy/joy.css (100%) rename {cellxgene => client}/src/components/joy/joy.js (100%) rename {cellxgene => client}/src/components/joy/joyParser.js (100%) rename {cellxgene => client}/src/components/leftsidebar.js (100%) rename {cellxgene => client}/src/components/scatterplot/drawPointsRegl.js (100%) rename {cellxgene => client}/src/components/scatterplot/scatterplot.css (100%) rename {cellxgene => client}/src/components/scatterplot/scatterplot.js (100%) rename {cellxgene => client}/src/components/scatterplot/setupScatterplot.js (100%) rename {cellxgene => client}/src/components/scatterplot/util.js (100%) rename {cellxgene => client}/src/globals.js (100%) rename {cellxgene => client}/src/index.css (100%) rename {cellxgene => client}/src/index.js (100%) rename {cellxgene => client}/src/middleware/updateCellColors.js (100%) rename {cellxgene => client}/src/middleware/updateCellSelectionMiddleware.js (100%) rename {cellxgene => client}/src/middleware/updateURLMiddleware.js (100%) rename {cellxgene => client}/src/reducers/cells.js (100%) rename {cellxgene => client}/src/reducers/controls.js (100%) rename {cellxgene => client}/src/reducers/differential.js (100%) rename {cellxgene => client}/src/reducers/expression.js (100%) rename {cellxgene => client}/src/reducers/index.js (100%) rename {cellxgene => client}/src/reducers/initialize.js (100%) rename {cellxgene => client}/src/reducers/responsive.js (100%) rename {cellxgene => client}/src/util/camera.js (100%) rename {cellxgene => client}/src/util/parseRGB.js (100%) rename {cellxgene => client}/src/util/renderQueue.js (100%) rename {cellxgene => client}/src/util/scaleLinear.js (100%) rename {cellxgene => client}/src/util/scaleRGB.js (100%) rename {cellxgene => client}/src/util/schema.js (100%) rename {cellxgene => client}/src/util/typedCrossfilter/bitArray.js (100%) rename {cellxgene => client}/src/util/typedCrossfilter/index.js (100%) rename {cellxgene => client}/src/util/typedCrossfilter/positiveIntervals.js (100%) rename {cellxgene => client}/src/util/typedCrossfilter/util.js (100%) rename {backend => server}/app/__init__.py (100%) rename {backend => server}/app/driver/__init__.py (100%) rename {backend => server}/app/driver/driver.py (100%) rename {backend => server}/app/rest_api/__init__.py (100%) rename {backend => server}/app/rest_api/rest.py (100%) rename {backend => server}/app/scanpy_engine/__init__.py (100%) rename {backend => server}/app/scanpy_engine/scanpy_engine.py (100%) rename {backend => server}/app/util/__init__.py (100%) rename {backend => server}/app/util/filter.py (100%) rename {backend => server}/app/util/schema_parse.py (100%) rename {backend => server}/app/util/utils.py (100%) rename {backend => server}/app/web/__init__.py (100%) rename {backend => server}/app/web/templates/swagger.html (100%) rename {backend => server}/app/web/webapp.py (100%) rename {backend => server}/run.py (100%) rename {backend => server}/test/test_api.py (100%) diff --git a/.gitignore b/.gitignore index 25803157..c72102cb 100644 --- a/.gitignore +++ b/.gitignore @@ -40,10 +40,7 @@ templates/service-worker.js templates/static/* Graph.dot* -backend/app/web/static/css/ - -backend/app/web/static/img/ - -backend/app/web/static/js/ - -backend/app/web/templates/index\.html +server/app/web/static/css/ +server/app/web/static/img/ +server/app/web/static/js/ +server/app/web/templates/index\.html diff --git a/cellxgene/configuration/babel/babel.dev.js b/client/configuration/babel/babel.dev.js similarity index 100% rename from cellxgene/configuration/babel/babel.dev.js rename to client/configuration/babel/babel.dev.js diff --git a/cellxgene/configuration/babel/babel.prod.js b/client/configuration/babel/babel.prod.js similarity index 100% rename from cellxgene/configuration/babel/babel.prod.js rename to client/configuration/babel/babel.prod.js diff --git a/cellxgene/configuration/babel/babel.test.js b/client/configuration/babel/babel.test.js similarity index 100% rename from cellxgene/configuration/babel/babel.test.js rename to client/configuration/babel/babel.test.js diff --git a/cellxgene/configuration/eslint/eslint.js b/client/configuration/eslint/eslint.js similarity index 100% rename from cellxgene/configuration/eslint/eslint.js rename to client/configuration/eslint/eslint.js diff --git a/cellxgene/configuration/polyfills/polyfills.js b/client/configuration/polyfills/polyfills.js similarity index 100% rename from cellxgene/configuration/polyfills/polyfills.js rename to client/configuration/polyfills/polyfills.js diff --git a/cellxgene/configuration/webpack/webpack.config.dev.js b/client/configuration/webpack/webpack.config.dev.js similarity index 100% rename from cellxgene/configuration/webpack/webpack.config.dev.js rename to client/configuration/webpack/webpack.config.dev.js diff --git a/cellxgene/configuration/webpack/webpack.config.prod.js b/client/configuration/webpack/webpack.config.prod.js similarity index 100% rename from cellxgene/configuration/webpack/webpack.config.prod.js rename to client/configuration/webpack/webpack.config.prod.js diff --git a/cellxgene/favicon.png b/client/favicon.png similarity index 100% rename from cellxgene/favicon.png rename to client/favicon.png diff --git a/cellxgene/index.html b/client/index.html similarity index 100% rename from cellxgene/index.html rename to client/index.html diff --git a/cellxgene/index_template.html b/client/index_template.html similarity index 100% rename from cellxgene/index_template.html rename to client/index_template.html diff --git a/cellxgene/package.json b/client/package.json similarity index 100% rename from cellxgene/package.json rename to client/package.json diff --git a/cellxgene/server/development.js b/client/server/development.js similarity index 100% rename from cellxgene/server/development.js rename to client/server/development.js diff --git a/cellxgene/server/production.js b/client/server/production.js similarity index 100% rename from cellxgene/server/production.js rename to client/server/production.js diff --git a/cellxgene/server/utils.js b/client/server/utils.js similarity index 100% rename from cellxgene/server/utils.js rename to client/server/utils.js diff --git a/cellxgene/src/actions/index.js b/client/src/actions/index.js similarity index 100% rename from cellxgene/src/actions/index.js rename to client/src/actions/index.js diff --git a/cellxgene/src/components/_experimentalWebGLHeatmap/heatmap.js b/client/src/components/_experimentalWebGLHeatmap/heatmap.js similarity index 100% rename from cellxgene/src/components/_experimentalWebGLHeatmap/heatmap.js rename to client/src/components/_experimentalWebGLHeatmap/heatmap.js diff --git a/cellxgene/src/components/_experimentalWebGLHeatmap/orbit-control.js b/client/src/components/_experimentalWebGLHeatmap/orbit-control.js similarity index 100% rename from cellxgene/src/components/_experimentalWebGLHeatmap/orbit-control.js rename to client/src/components/_experimentalWebGLHeatmap/orbit-control.js diff --git a/cellxgene/src/components/_experimentalWebGLHeatmap/popup.js b/client/src/components/_experimentalWebGLHeatmap/popup.js similarity index 100% rename from cellxgene/src/components/_experimentalWebGLHeatmap/popup.js rename to client/src/components/_experimentalWebGLHeatmap/popup.js diff --git a/cellxgene/src/components/app.js b/client/src/components/app.js similarity index 100% rename from cellxgene/src/components/app.js rename to client/src/components/app.js diff --git a/cellxgene/src/components/categorical/categorical.css b/client/src/components/categorical/categorical.css similarity index 100% rename from cellxgene/src/components/categorical/categorical.css rename to client/src/components/categorical/categorical.css diff --git a/cellxgene/src/components/categorical/categorical.js b/client/src/components/categorical/categorical.js similarity index 100% rename from cellxgene/src/components/categorical/categorical.js rename to client/src/components/categorical/categorical.js diff --git a/cellxgene/src/components/categorical/util.js b/client/src/components/categorical/util.js similarity index 100% rename from cellxgene/src/components/categorical/util.js rename to client/src/components/categorical/util.js diff --git a/cellxgene/src/components/categorical/value.js b/client/src/components/categorical/value.js similarity index 100% rename from cellxgene/src/components/categorical/value.js rename to client/src/components/categorical/value.js diff --git a/cellxgene/src/components/continuous/continuous.js b/client/src/components/continuous/continuous.js similarity index 100% rename from cellxgene/src/components/continuous/continuous.js rename to client/src/components/continuous/continuous.js diff --git a/cellxgene/src/components/continuous/drawAxes.js b/client/src/components/continuous/drawAxes.js similarity index 100% rename from cellxgene/src/components/continuous/drawAxes.js rename to client/src/components/continuous/drawAxes.js diff --git a/cellxgene/src/components/continuous/drawLinesCanvas.js b/client/src/components/continuous/drawLinesCanvas.js similarity index 100% rename from cellxgene/src/components/continuous/drawLinesCanvas.js rename to client/src/components/continuous/drawLinesCanvas.js diff --git a/cellxgene/src/components/continuous/histogramBrush.js b/client/src/components/continuous/histogramBrush.js similarity index 100% rename from cellxgene/src/components/continuous/histogramBrush.js rename to client/src/components/continuous/histogramBrush.js diff --git a/cellxgene/src/components/continuous/parallel.js b/client/src/components/continuous/parallel.js similarity index 100% rename from cellxgene/src/components/continuous/parallel.js rename to client/src/components/continuous/parallel.js diff --git a/cellxgene/src/components/continuous/parallelCoordinates.css b/client/src/components/continuous/parallelCoordinates.css similarity index 100% rename from cellxgene/src/components/continuous/parallelCoordinates.css rename to client/src/components/continuous/parallelCoordinates.css diff --git a/cellxgene/src/components/continuous/setupParallelCoordinates.js b/client/src/components/continuous/setupParallelCoordinates.js similarity index 100% rename from cellxgene/src/components/continuous/setupParallelCoordinates.js rename to client/src/components/continuous/setupParallelCoordinates.js diff --git a/cellxgene/src/components/continuous/util.js b/client/src/components/continuous/util.js similarity index 100% rename from cellxgene/src/components/continuous/util.js rename to client/src/components/continuous/util.js diff --git a/cellxgene/src/components/continuousLegend/index.js b/client/src/components/continuousLegend/index.js similarity index 100% rename from cellxgene/src/components/continuousLegend/index.js rename to client/src/components/continuousLegend/index.js diff --git a/cellxgene/src/components/expression/cellSetButtons.js b/client/src/components/expression/cellSetButtons.js similarity index 100% rename from cellxgene/src/components/expression/cellSetButtons.js rename to client/src/components/expression/cellSetButtons.js diff --git a/cellxgene/src/components/expression/diffExpHeatmap.js b/client/src/components/expression/diffExpHeatmap.js similarity index 100% rename from cellxgene/src/components/expression/diffExpHeatmap.js rename to client/src/components/expression/diffExpHeatmap.js diff --git a/cellxgene/src/components/expression/expression.css b/client/src/components/expression/expression.css similarity index 100% rename from cellxgene/src/components/expression/expression.css rename to client/src/components/expression/expression.css diff --git a/cellxgene/src/components/expression/expressionButtons.js b/client/src/components/expression/expressionButtons.js similarity index 100% rename from cellxgene/src/components/expression/expressionButtons.js rename to client/src/components/expression/expressionButtons.js diff --git a/cellxgene/src/components/framework/buttons.css b/client/src/components/framework/buttons.css similarity index 100% rename from cellxgene/src/components/framework/buttons.css rename to client/src/components/framework/buttons.css diff --git a/cellxgene/src/components/framework/container.css b/client/src/components/framework/container.css similarity index 100% rename from cellxgene/src/components/framework/container.css rename to client/src/components/framework/container.css diff --git a/cellxgene/src/components/framework/container.js b/client/src/components/framework/container.js similarity index 100% rename from cellxgene/src/components/framework/container.js rename to client/src/components/framework/container.js diff --git a/cellxgene/src/components/framework/header.css b/client/src/components/framework/header.css similarity index 100% rename from cellxgene/src/components/framework/header.css rename to client/src/components/framework/header.css diff --git a/cellxgene/src/components/framework/header.js b/client/src/components/framework/header.js similarity index 100% rename from cellxgene/src/components/framework/header.js rename to client/src/components/framework/header.js diff --git a/cellxgene/src/components/framework/sectionHeader.js b/client/src/components/framework/sectionHeader.js similarity index 100% rename from cellxgene/src/components/framework/sectionHeader.js rename to client/src/components/framework/sectionHeader.js diff --git a/cellxgene/src/components/graph/drawPointsRegl.js b/client/src/components/graph/drawPointsRegl.js similarity index 100% rename from cellxgene/src/components/graph/drawPointsRegl.js rename to client/src/components/graph/drawPointsRegl.js diff --git a/cellxgene/src/components/graph/graph.css b/client/src/components/graph/graph.css similarity index 100% rename from cellxgene/src/components/graph/graph.css rename to client/src/components/graph/graph.css diff --git a/cellxgene/src/components/graph/graph.js b/client/src/components/graph/graph.js similarity index 100% rename from cellxgene/src/components/graph/graph.js rename to client/src/components/graph/graph.js diff --git a/cellxgene/src/components/graph/setupSVGandBrush.js b/client/src/components/graph/setupSVGandBrush.js similarity index 100% rename from cellxgene/src/components/graph/setupSVGandBrush.js rename to client/src/components/graph/setupSVGandBrush.js diff --git a/cellxgene/src/components/graph/util.js b/client/src/components/graph/util.js similarity index 100% rename from cellxgene/src/components/graph/util.js rename to client/src/components/graph/util.js diff --git a/cellxgene/src/components/joy/drawJoy.js b/client/src/components/joy/drawJoy.js similarity index 100% rename from cellxgene/src/components/joy/drawJoy.js rename to client/src/components/joy/drawJoy.js diff --git a/cellxgene/src/components/joy/joy.css b/client/src/components/joy/joy.css similarity index 100% rename from cellxgene/src/components/joy/joy.css rename to client/src/components/joy/joy.css diff --git a/cellxgene/src/components/joy/joy.js b/client/src/components/joy/joy.js similarity index 100% rename from cellxgene/src/components/joy/joy.js rename to client/src/components/joy/joy.js diff --git a/cellxgene/src/components/joy/joyParser.js b/client/src/components/joy/joyParser.js similarity index 100% rename from cellxgene/src/components/joy/joyParser.js rename to client/src/components/joy/joyParser.js diff --git a/cellxgene/src/components/leftsidebar.js b/client/src/components/leftsidebar.js similarity index 100% rename from cellxgene/src/components/leftsidebar.js rename to client/src/components/leftsidebar.js diff --git a/cellxgene/src/components/scatterplot/drawPointsRegl.js b/client/src/components/scatterplot/drawPointsRegl.js similarity index 100% rename from cellxgene/src/components/scatterplot/drawPointsRegl.js rename to client/src/components/scatterplot/drawPointsRegl.js diff --git a/cellxgene/src/components/scatterplot/scatterplot.css b/client/src/components/scatterplot/scatterplot.css similarity index 100% rename from cellxgene/src/components/scatterplot/scatterplot.css rename to client/src/components/scatterplot/scatterplot.css diff --git a/cellxgene/src/components/scatterplot/scatterplot.js b/client/src/components/scatterplot/scatterplot.js similarity index 100% rename from cellxgene/src/components/scatterplot/scatterplot.js rename to client/src/components/scatterplot/scatterplot.js diff --git a/cellxgene/src/components/scatterplot/setupScatterplot.js b/client/src/components/scatterplot/setupScatterplot.js similarity index 100% rename from cellxgene/src/components/scatterplot/setupScatterplot.js rename to client/src/components/scatterplot/setupScatterplot.js diff --git a/cellxgene/src/components/scatterplot/util.js b/client/src/components/scatterplot/util.js similarity index 100% rename from cellxgene/src/components/scatterplot/util.js rename to client/src/components/scatterplot/util.js diff --git a/cellxgene/src/globals.js b/client/src/globals.js similarity index 100% rename from cellxgene/src/globals.js rename to client/src/globals.js diff --git a/cellxgene/src/index.css b/client/src/index.css similarity index 100% rename from cellxgene/src/index.css rename to client/src/index.css diff --git a/cellxgene/src/index.js b/client/src/index.js similarity index 100% rename from cellxgene/src/index.js rename to client/src/index.js diff --git a/cellxgene/src/middleware/updateCellColors.js b/client/src/middleware/updateCellColors.js similarity index 100% rename from cellxgene/src/middleware/updateCellColors.js rename to client/src/middleware/updateCellColors.js diff --git a/cellxgene/src/middleware/updateCellSelectionMiddleware.js b/client/src/middleware/updateCellSelectionMiddleware.js similarity index 100% rename from cellxgene/src/middleware/updateCellSelectionMiddleware.js rename to client/src/middleware/updateCellSelectionMiddleware.js diff --git a/cellxgene/src/middleware/updateURLMiddleware.js b/client/src/middleware/updateURLMiddleware.js similarity index 100% rename from cellxgene/src/middleware/updateURLMiddleware.js rename to client/src/middleware/updateURLMiddleware.js diff --git a/cellxgene/src/reducers/cells.js b/client/src/reducers/cells.js similarity index 100% rename from cellxgene/src/reducers/cells.js rename to client/src/reducers/cells.js diff --git a/cellxgene/src/reducers/controls.js b/client/src/reducers/controls.js similarity index 100% rename from cellxgene/src/reducers/controls.js rename to client/src/reducers/controls.js diff --git a/cellxgene/src/reducers/differential.js b/client/src/reducers/differential.js similarity index 100% rename from cellxgene/src/reducers/differential.js rename to client/src/reducers/differential.js diff --git a/cellxgene/src/reducers/expression.js b/client/src/reducers/expression.js similarity index 100% rename from cellxgene/src/reducers/expression.js rename to client/src/reducers/expression.js diff --git a/cellxgene/src/reducers/index.js b/client/src/reducers/index.js similarity index 100% rename from cellxgene/src/reducers/index.js rename to client/src/reducers/index.js diff --git a/cellxgene/src/reducers/initialize.js b/client/src/reducers/initialize.js similarity index 100% rename from cellxgene/src/reducers/initialize.js rename to client/src/reducers/initialize.js diff --git a/cellxgene/src/reducers/responsive.js b/client/src/reducers/responsive.js similarity index 100% rename from cellxgene/src/reducers/responsive.js rename to client/src/reducers/responsive.js diff --git a/cellxgene/src/util/camera.js b/client/src/util/camera.js similarity index 100% rename from cellxgene/src/util/camera.js rename to client/src/util/camera.js diff --git a/cellxgene/src/util/parseRGB.js b/client/src/util/parseRGB.js similarity index 100% rename from cellxgene/src/util/parseRGB.js rename to client/src/util/parseRGB.js diff --git a/cellxgene/src/util/renderQueue.js b/client/src/util/renderQueue.js similarity index 100% rename from cellxgene/src/util/renderQueue.js rename to client/src/util/renderQueue.js diff --git a/cellxgene/src/util/scaleLinear.js b/client/src/util/scaleLinear.js similarity index 100% rename from cellxgene/src/util/scaleLinear.js rename to client/src/util/scaleLinear.js diff --git a/cellxgene/src/util/scaleRGB.js b/client/src/util/scaleRGB.js similarity index 100% rename from cellxgene/src/util/scaleRGB.js rename to client/src/util/scaleRGB.js diff --git a/cellxgene/src/util/schema.js b/client/src/util/schema.js similarity index 100% rename from cellxgene/src/util/schema.js rename to client/src/util/schema.js diff --git a/cellxgene/src/util/typedCrossfilter/bitArray.js b/client/src/util/typedCrossfilter/bitArray.js similarity index 100% rename from cellxgene/src/util/typedCrossfilter/bitArray.js rename to client/src/util/typedCrossfilter/bitArray.js diff --git a/cellxgene/src/util/typedCrossfilter/index.js b/client/src/util/typedCrossfilter/index.js similarity index 100% rename from cellxgene/src/util/typedCrossfilter/index.js rename to client/src/util/typedCrossfilter/index.js diff --git a/cellxgene/src/util/typedCrossfilter/positiveIntervals.js b/client/src/util/typedCrossfilter/positiveIntervals.js similarity index 100% rename from cellxgene/src/util/typedCrossfilter/positiveIntervals.js rename to client/src/util/typedCrossfilter/positiveIntervals.js diff --git a/cellxgene/src/util/typedCrossfilter/util.js b/client/src/util/typedCrossfilter/util.js similarity index 100% rename from cellxgene/src/util/typedCrossfilter/util.js rename to client/src/util/typedCrossfilter/util.js diff --git a/backend/app/__init__.py b/server/app/__init__.py similarity index 100% rename from backend/app/__init__.py rename to server/app/__init__.py diff --git a/backend/app/driver/__init__.py b/server/app/driver/__init__.py similarity index 100% rename from backend/app/driver/__init__.py rename to server/app/driver/__init__.py diff --git a/backend/app/driver/driver.py b/server/app/driver/driver.py similarity index 100% rename from backend/app/driver/driver.py rename to server/app/driver/driver.py diff --git a/backend/app/rest_api/__init__.py b/server/app/rest_api/__init__.py similarity index 100% rename from backend/app/rest_api/__init__.py rename to server/app/rest_api/__init__.py diff --git a/backend/app/rest_api/rest.py b/server/app/rest_api/rest.py similarity index 100% rename from backend/app/rest_api/rest.py rename to server/app/rest_api/rest.py diff --git a/backend/app/scanpy_engine/__init__.py b/server/app/scanpy_engine/__init__.py similarity index 100% rename from backend/app/scanpy_engine/__init__.py rename to server/app/scanpy_engine/__init__.py diff --git a/backend/app/scanpy_engine/scanpy_engine.py b/server/app/scanpy_engine/scanpy_engine.py similarity index 100% rename from backend/app/scanpy_engine/scanpy_engine.py rename to server/app/scanpy_engine/scanpy_engine.py diff --git a/backend/app/util/__init__.py b/server/app/util/__init__.py similarity index 100% rename from backend/app/util/__init__.py rename to server/app/util/__init__.py diff --git a/backend/app/util/filter.py b/server/app/util/filter.py similarity index 100% rename from backend/app/util/filter.py rename to server/app/util/filter.py diff --git a/backend/app/util/schema_parse.py b/server/app/util/schema_parse.py similarity index 100% rename from backend/app/util/schema_parse.py rename to server/app/util/schema_parse.py diff --git a/backend/app/util/utils.py b/server/app/util/utils.py similarity index 100% rename from backend/app/util/utils.py rename to server/app/util/utils.py diff --git a/backend/app/web/__init__.py b/server/app/web/__init__.py similarity index 100% rename from backend/app/web/__init__.py rename to server/app/web/__init__.py diff --git a/backend/app/web/templates/swagger.html b/server/app/web/templates/swagger.html similarity index 100% rename from backend/app/web/templates/swagger.html rename to server/app/web/templates/swagger.html diff --git a/backend/app/web/webapp.py b/server/app/web/webapp.py similarity index 100% rename from backend/app/web/webapp.py rename to server/app/web/webapp.py diff --git a/backend/run.py b/server/run.py similarity index 100% rename from backend/run.py rename to server/run.py diff --git a/backend/test/test_api.py b/server/test/test_api.py similarity index 100% rename from backend/test/test_api.py rename to server/test/test_api.py From a60b3ea2964ebc19b8d46b6d19cfb5148c80661a Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Tue, 26 Jun 2018 11:51:58 -0700 Subject: [PATCH 13/26] Put cellxgene readme back in Will update readme to make server side work once build/packaging in. --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c0ab504b..0b9ab3b5 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -cxg-v2 +# cellxgene + +A React + Redux web application for exploring large scale single cell RNA sequence data. + +##### Quickstart: +* `cd client` +* `npm install` +* `npm start` +* `localhost:3000` \ No newline at end of file From ba13e32206e47395dec0501c13a0f18e1b452538 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Wed, 27 Jun 2018 13:40:35 -0700 Subject: [PATCH 14/26] Add python's requirements.txt --- server/requirements.txt | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 server/requirements.txt diff --git a/server/requirements.txt b/server/requirements.txt new file mode 100644 index 00000000..a995ebea --- /dev/null +++ b/server/requirements.txt @@ -0,0 +1,41 @@ +aniso8601==3.0.2 +anndata==0.6.4 +certifi==2018.4.16 +chardet==3.0.4 +click==6.7 +cycler==0.10.0 +decorator==4.3.0 +Flask==1.0.2 +Flask-Compress==1.4.0 +Flask-Cors==3.0.6 +Flask-RESTful==0.3.6 +flask-restful-swagger-2==0.35 +h5py==2.8.0 +idna==2.7 +itsdangerous==0.24 +Jinja2==2.10 +joblib==0.12.0 +kiwisolver==1.0.1 +llvmlite==0.23.2 +MarkupSafe==1.0 +matplotlib==2.2.2 +natsort==5.3.2 +networkx==2.1 +numba==0.38.1 +numexpr==2.6.5 +numpy==1.14.5 +pandas==0.23.1 +patsy==0.5.0 +pyparsing==2.2.0 +python-dateutil==2.7.3 +pytz==2018.4 +requests==2.19.1 +scanpy==1.2.2 +scikit-learn==0.19.1 +scipy==1.1.0 +seaborn==0.8.1 +six==1.11.0 +statsmodels==0.9.0 +tables==3.4.4 +urllib3==1.23 +Werkzeug==0.14.1 From 40f5b94075c51a8fcb1605c783d0bafe00c48587 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 29 Jun 2018 13:14:58 -0700 Subject: [PATCH 15/26] Consistency with quotes ' -> " --- server/app/__init__.py | 8 +- server/app/rest_api/rest.py | 122 +++++++++++----------- server/app/scanpy_engine/scanpy_engine.py | 6 +- server/app/web/webapp.py | 8 +- server/run.py | 2 +- 5 files changed, 73 insertions(+), 73 deletions(-) diff --git a/server/app/__init__.py b/server/app/__init__.py index 8125c40d..0ebc4e71 100644 --- a/server/app/__init__.py +++ b/server/app/__init__.py @@ -34,7 +34,7 @@ app.config.update( DATASET_TITLE=TITLE ) -app.config['PROFILE'] = True +app.config["PROFILE"] = True # app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[15]) # Application Data @@ -54,8 +54,8 @@ docs.append(resources.get_swagger_doc()) app.register_blueprint(webapp.bp) app.register_blueprint(resources.blueprint) app.register_blueprint( - get_swagger_blueprint(docs, '/api/swagger', produces=["application/json"], title="cellxgene rest api", - description='An API connecting ExpressionMatrix2 clustering algorithm to cellxgene')) + get_swagger_blueprint(docs, "/api/swagger", produces=["application/json"], title="cellxgene rest api", + description="An API connecting ExpressionMatrix2 clustering algorithm to cellxgene")) -app.add_url_rule('/', endpoint='index') +app.add_url_rule("/", endpoint="index") diff --git a/server/app/rest_api/rest.py b/server/app/rest_api/rest.py index 4262957f..a44e5287 100644 --- a/server/app/rest_api/rest.py +++ b/server/app/rest_api/rest.py @@ -9,14 +9,14 @@ from ..util.filter import parse_filter class InitializeAPI(Resource): @swagger.doc({ - 'summary': 'get metadata schema, ranges for values, and cell count to initialize cellxgene app', - 'tags': ['initialize'], - 'parameters': [], - 'responses': { - '200': { - 'description': 'initialization data for UI', - 'examples': { - 'application/json': { + "summary": "get metadata schema, ranges for values, and cell count to initialize cellxgene app", + "tags": ["initialize"], + "parameters": [], + "responses": { + "200": { + "description": "initialization data for UI", + "examples": { + "application/json": { "data": { "cellcount": 3589, "options": { @@ -101,21 +101,21 @@ class InitializeAPI(Resource): class CellsAPI(Resource): @swagger.doc({ - 'summary': 'filter based on metadata fields to get a subset cells, expression data, and metadata', - 'tags': ['cells'], - 'description': "Cells takes query parameters defined in the schema retrieved from the /initialize enpoint. " + "summary": "filter based on metadata fields to get a subset cells, expression data, and metadata", + "tags": ["cells"], + "description": "Cells takes query parameters defined in the schema retrieved from the /initialize enpoint. " "
For categorical metadata keys filter based on `key=value`
" " For continuous metadata keys filter by `key=min,max`
Either value " "can be replaced by a \*. To have only a minimum value `key=min,\*` To have only a maximum " "value `key=\*,max`
Graph data (if retrieved) is normalized" " To only retrieve cells that don't have a value for the key filter by `key`", - 'parameters': [], + "parameters": [], - 'responses': { - '200': { - 'description': 'initialization data for UI', - 'examples': { - 'application/json': { + "responses": { + "200": { + "description": "initialization data for UI", + "examples": { + "application/json": { "data": { "badmetadatacount": 0, "cellcount": 0, @@ -185,8 +185,8 @@ class CellsAPI(Resource): }, }, - '400': { - 'description': 'bad query params', + "400": { + "description": "bad query params", } } }) @@ -212,21 +212,21 @@ class CellsAPI(Resource): class ExpressionAPI(Resource): @swagger.doc({ - 'summary': 'Json with gene list and expression data by cell, limited to first 40 cells', - 'tags': ['expression'], - 'parameters': [ + "summary": "Json with gene list and expression data by cell, limited to first 40 cells", + "tags": ["expression"], + "parameters": [ { - 'name': 'include_unexpressed_genes', - 'description': "Include genes that have 0 expression across all cells in set", - 'in': 'path', - 'type': 'bool', + "name": "include_unexpressed_genes", + "description": "Include genes that have 0 expression across all cells in set", + "in": "path", + "type": "bool", } ], - 'responses': { - '200': { - 'description': 'Json for heatmap', - 'examples': { - 'application/json': { + "responses": { + "200": { + "description": "Json for heatmap", + "examples": { + "application/json": { "data": { "cells": [ { @@ -258,12 +258,12 @@ class ExpressionAPI(Resource): return make_payload(expression_data) @swagger.doc({ - 'summary': 'Json with gene list and expression data by cell', - 'tags': ['expression'], - 'parameters': [ + "summary": "Json with gene list and expression data by cell", + "tags": ["expression"], + "parameters": [ { - 'name': 'body', - 'in': 'body', + "name": "body", + "in": "body", "schema": { "example": { "celllist": ["1001000173.G8", "1001000173.D4"], @@ -275,11 +275,11 @@ class ExpressionAPI(Resource): } }, ], - 'responses': { - '200': { - 'description': 'Json for expressiondata', - 'examples': { - 'application/json': { + "responses": { + "200": { + "description": "Json for expressiondata", + "examples": { + "application/json": { "data": { "cells": [ { @@ -305,24 +305,24 @@ class ExpressionAPI(Resource): } } }, - '400': { - 'description': 'Required parameter missing/incorrect', + "400": { + "description": "Required parameter missing/incorrect", } } }) def post(self): from app import data args = request.get_json() - cell_list = args.get('celllist', []) - gene_list = args.get('genelist', []) + cell_list = args.get("celllist", []) + gene_list = args.get("genelist", []) if not cell_list and not gene_list: return make_payload([], "must include celllist and/or genelist parameter", 400) expression_data = data.expression(cell_list, gene_list) - if cell_list and len(expression_data['cells']) < len(cell_list): + if cell_list and len(expression_data["cells"]) < len(cell_list): return make_payload([], "Some cell ids not available", 400) - if gene_list and len(expression_data['genes']) < len(gene_list): + if gene_list and len(expression_data["genes"]) < len(gene_list): return make_payload([], "Some genes not available", 400) return make_payload(expression_data) @@ -330,13 +330,13 @@ class ExpressionAPI(Resource): class DifferentialExpressionAPI(Resource): @swagger.doc({ - 'summary': 'Get the top expressed genes for two cell sets. Calculated using t-test', - 'tags': ['expression'], - 'parameters': [ + "summary": "Get the top expressed genes for two cell sets. Calculated using t-test", + "tags": ["expression"], + "parameters": [ { - 'name': 'body', - 'in': 'body', - 'schema': { + "name": "body", + "in": "body", + "schema": { "example": { "celllist1": ["1001000176.C12", "1001000176.C7", "1001000177.F11"], "celllist2": ["1001000012.D2", "1001000017.F10", "1001000033.C3", "1001000229.D4"], @@ -347,10 +347,10 @@ class DifferentialExpressionAPI(Resource): } ], "responses": { - '200': { - 'description': 'top expressed genes for cellset1, cellset2', - 'examples': { - 'application/json': { + "200": { + "description": "top expressed genes for cellset1, cellset2", + "examples": { + "application/json": { "data": { "celllist1": { "ave_diff": [ @@ -419,10 +419,10 @@ class DifferentialExpressionAPI(Resource): def post(self): from app import data args = request.get_json() - cell_list_1 = args.get('celllist1', []) - cell_list_2 = args.get('celllist2', []) + cell_list_1 = args.get("celllist1", []) + cell_list_2 = args.get("celllist2", []) num_genes = args.get("num_genes", 7) - pval = args.get('pval', 0.5) + pval = args.get("pval", 0.5) if not (cell_list_1 and cell_list_2): return make_payload([], "must include celllist1 and celllist2 parameters", @@ -432,7 +432,7 @@ class DifferentialExpressionAPI(Resource): def get_api_resources(): - bp = Blueprint('api', __name__, url_prefix='/api/v2.0') + bp = Blueprint("api", __name__, url_prefix="/api/v2.0") api = Api(bp, add_api_spec_resource=False) api.add_resource(InitializeAPI, "/initialize") api.add_resource(CellsAPI, "/cells") diff --git a/server/app/scanpy_engine/scanpy_engine.py b/server/app/scanpy_engine/scanpy_engine.py index a723c862..a7b63b7d 100644 --- a/server/app/scanpy_engine/scanpy_engine.py +++ b/server/app/scanpy_engine/scanpy_engine.py @@ -33,9 +33,9 @@ class ScanpyEngine(CXGDriver): return data_schema def _set_cell_ids(self): - self.data.obs['cxg_cell_id'] = list(range(self.data.obs.shape[0])) + self.data.obs["cxg_cell_id"] = list(range(self.data.obs.shape[0])) self.data.obs["cell_name"] = list(self.data.obs.index) - self.data.obs.set_index('cxg_cell_id', inplace=True) + self.data.obs.set_index("cxg_cell_id", inplace=True) def cells(self): return list(self.data.obs.index) @@ -78,7 +78,7 @@ class ScanpyEngine(CXGDriver): if self.schema[field]["variabletype"] == "categorical": group_by = field if group_by == "CellName": - group_by = 'cell_name' + group_by = "cell_name" metadata_ranges[field] = {"options": df.obs.groupby(group_by).size().to_dict()} else: metadata_ranges[field] = { diff --git a/server/app/web/webapp.py b/server/app/web/webapp.py index 045121a8..4717f155 100644 --- a/server/app/web/webapp.py +++ b/server/app/web/webapp.py @@ -2,10 +2,10 @@ from flask import ( Blueprint, render_template, url_for, current_app ) -bp = Blueprint('webapp', __name__, template_folder='templates') +bp = Blueprint("webapp", __name__, template_folder="templates") -@bp.route('/') +@bp.route("/") def index(): url_base = current_app.config["CXG_API_BASE"] dataset_title = current_app.config["DATASET_TITLE"] @@ -13,12 +13,12 @@ def index(): # renders swagger documentation -@bp.route('/swagger') +@bp.route("/swagger") def swag(): return render_template("swagger.html") # renders swagger documentation -@bp.route('/favicon.png') +@bp.route("/favicon.png") def favicon(): return url_for("static", filename="img/favicon.png") diff --git a/server/run.py b/server/run.py index 6a8dee0c..c7afec43 100644 --- a/server/run.py +++ b/server/run.py @@ -1,3 +1,3 @@ from app import app -app.run(host='0.0.0.0', debug=True, port=5005) +app.run(host="0.0.0.0", debug=True, port=5005) From 56c932a44355e0188cfee2ee0e865df23d8d9387 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 29 Jun 2018 17:16:00 -0700 Subject: [PATCH 16/26] Fixed categorical filter not being converted to type, added tests --- server/app/util/filter.py | 17 +++++---- server/test/test_filter.py | 74 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 server/test/test_filter.py diff --git a/server/app/util/filter.py b/server/app/util/filter.py index 12769362..52da7def 100644 --- a/server/app/util/filter.py +++ b/server/app/util/filter.py @@ -7,14 +7,16 @@ def _convert_variable(datatype, variable): Convert variable to number (float/int) Used for dataset metadata and for query string :param datatype: type to convert to - :param variable: value of variable + :param variable (string or None): value of variable :return: converted variable :raises: ValueError """ try: - if variable and datatype == "int": + if variable is None: + return variable + if datatype == "int": variable = int(variable) - elif variable and datatype == "float": + elif datatype == "float": variable = float(variable) return variable except ValueError: @@ -23,12 +25,9 @@ def _convert_variable(datatype, variable): def parse_filter(filter, schema): """ - {key: variable_type - value_type - query - :param filter: - :param schema: + :param filter: flask's request.args + :param schema: dictionary schema :return: """ query = {} @@ -41,7 +40,7 @@ def parse_filter(filter, schema): "value_type": schema[key]["type"] } if query[key]["variable_type"] == "categorical": - query[key]["query"] = _convert_variable(query[key]["value_type"], value) + query[key]["query"] = [_convert_variable(query[key]["value_type"], v) for v in value] elif query[key]["variable_type"] == "continuous": value = value[0] try: diff --git a/server/test/test_filter.py b/server/test/test_filter.py new file mode 100644 index 00000000..f46cd14a --- /dev/null +++ b/server/test/test_filter.py @@ -0,0 +1,74 @@ +import unittest + +from unittest.mock import MagicMock +import sys +sys.path.insert(0, "../app") +from util.filter import _convert_variable, parse_filter + + +class UtilTest(unittest.TestCase): + """Test Case for endpoints""" + + def setUp(self): + self.schema = { + "cluster": { + "displayname": "Cluster", + "include": True, + "type": "int", + "variabletype": "categorical" + }, + "louvain": { + "displayname": "Louvain Cluster", + "include": True, + "type": "string", + "variabletype": "categorical" + }, + "n_genes": { + "displayname": "Num Genes", + "include": True, + "type": "int", + "variabletype": "continuous" + } + } + + def test_convert(self): + five = _convert_variable("int", "5") + assert five == 5 + + def test_convert_zero(self): + zero = _convert_variable("int", "0") + assert zero == 0 + + def test_empty_convert(self): + empty = _convert_variable("int", None) + assert empty is None + + def test_bad_convert(self): + with self.assertRaises(ValueError): + _convert_variable("int", "5.5") + + def test_filter_categorical(self): + filterMock = MagicMock() + filterMock.__iter__.return_value = iter(["louvain"]) + filterMock.getlist.return_value = ["B cells", "T cells"] + query = parse_filter(filterMock, self.schema) + assert query == {"louvain": {"variable_type": "categorical", "value_type": "string", "query": ["B cells", "T cells"]}} + filterMock.__iter__.return_value = iter(["cluster"]) + filterMock.getlist.return_value = ["1", "2"] + query = parse_filter(filterMock, self.schema) + assert query == {"cluster": {"variable_type": "categorical", "value_type": "int", "query": [1, 2]}} + + def test_filter_contiunous(self): + filterMock = MagicMock() + filterMock.__iter__.return_value = iter(["n_genes"]) + filterMock.getlist.return_value = ["0,100"] + query = parse_filter(filterMock, self.schema) + assert query == {"n_genes": {"variable_type": "continuous", "value_type": "int", "query": {"min": 0, "max": 100}}} + filterMock.__iter__.return_value = iter(["n_genes"]) + filterMock.getlist.return_value = ["*,100"] + query = parse_filter(filterMock, self.schema) + assert query == {"n_genes": {"variable_type": "continuous", "value_type": "int", "query": {"min": None, "max": 100}}} + filterMock.__iter__.return_value = iter(["n_genes"]) + filterMock.getlist.return_value = ["0,*"] + query = parse_filter(filterMock, self.schema) + assert query == {"n_genes": {"variable_type": "continuous", "value_type": "int", "query": {"min": 0, "max": None}}} From 2da62720dd5661511648f38d5dccd36db3c95cb5 Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Fri, 29 Jun 2018 17:17:14 -0700 Subject: [PATCH 17/26] Better documentation for driver/engines Removed the REST v2.0 documentation in favor of getting v1.0 working with driver/engine model --- server/app/driver/driver.py | 39 ++++++++++++----------- server/app/scanpy_engine/scanpy_engine.py | 28 ++++++++++++++-- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/server/app/driver/driver.py b/server/app/driver/driver.py index 7264d97f..fc6aae12 100644 --- a/server/app/driver/driver.py +++ b/server/app/driver/driver.py @@ -14,18 +14,10 @@ class CXGDriver(metaclass=ABCMeta): def _load_or_infer_schema(data): pass - @abstractmethod - def _set_cell_ids(self): - pass - @abstractmethod def cells(self): pass - @abstractmethod - def cellids(self): - pass - @abstractmethod def genes(self): pass @@ -34,21 +26,25 @@ class CXGDriver(metaclass=ABCMeta): def filter_cells(self, filter): """ Filter cells from data and return a subset of the data + A filter is a dictionary where the key is a metadatata category + Value is dictionary + value_type: int, float, string + variable_type: continuous, categorical + query: filter value, for categorical [val1, val2], for continuous {min: x, max:y} + Filters are combined with the and operator :param filter: :return: filtered dataframe """ pass - # Should this return the order of metadata fields as the first value? @abstractmethod def metadata(self, df, fields=None): """ - Generator for metadata. Gets the metadata values cell by cell and returns all value - or only certain values if names is not None + Gets metadata key:value for each cells :param df: from filter_cells, dataframe :param fields: list of keys for metadata to return, returns all metadata values if not set. - :return: Iterator for cellid + list of cells metadata values ex. [cell-id, val1, val2, val3] + :return: list of metadata values """ pass @@ -57,7 +53,7 @@ class CXGDriver(metaclass=ABCMeta): """ Computes a n-d layout for cells through dimensionality reduction. :param df: from filter_cells, dataframe - :return: Iterator for [cellid-1, pos1, pos2], [cellid-2, pos1, pos2] + :return: [cellid, x, y] """ pass @@ -65,14 +61,21 @@ class CXGDriver(metaclass=ABCMeta): def diffexp(self, df1, df2): """ Computes the top differentially expressed genes between two clusters - - :param df1: First set of cells - :param df2: Second set of cells - :return: Up in the air: I recommend [gene name, mean_expression_cells1, - mean_expression_cells2, average_difference, statistic_value] + :param df1: from filter_cells, dataframe containing first set of cells + :param df2: from filter_cells, dataframe containing second set of cells + :return: top genes, stats and expression values for top genes """ pass @abstractmethod def expression(self, df): + """ + Retrieves expression for each gene for cells in data frame + :param df: + :return: { + "genes": list of genes, + "cells": list of cells and expression list, + "nonzero_gene_count": number of nonzero genes + } + """ pass diff --git a/server/app/scanpy_engine/scanpy_engine.py b/server/app/scanpy_engine/scanpy_engine.py index a7b63b7d..c5e682b9 100644 --- a/server/app/scanpy_engine/scanpy_engine.py +++ b/server/app/scanpy_engine/scanpy_engine.py @@ -52,7 +52,14 @@ class ScanpyEngine(CXGDriver): def filter_cells(self, filter): """ Filter cells from data and return a subset of the data + A filter is a dictionary where the key is a metadatata category + Value is dictionary + value_type: int, float, string + variable_type: continuous, categorical + query: filter value, for categorical [val1, val2], for continuous {min: x, max:y} + Filters are combined with the and operator :param filter: + :return: filtered dataframe """ cell_idx = np.ones((self.cell_count,), dtype=bool) for key, value in filter.items(): @@ -91,9 +98,11 @@ class ScanpyEngine(CXGDriver): def metadata(self, df, fields=None): """ - Generator for metadata. Gets the metadata values cell by cell and returns all value - or only certain values if names is not None + Gets metadata key:value for each cells + :param df: from filter_cells, dataframe + :param fields: list of keys for metadata to return, returns all metadata values if not set. + :return: list of metadata values """ metadata = df.obs.to_dict(orient="records") for idx in range(len(metadata)): @@ -103,6 +112,8 @@ class ScanpyEngine(CXGDriver): def create_graph(self, df): """ Computes a n-d layout for cells through dimensionality reduction. + :param df: from filter_cells, dataframe + :return: [cellid, x, y] """ getattr(sc.tl, self.graph_method)(df) graph = df.obsm["X_{graph_method}".format(graph_method=self.graph_method)] @@ -110,6 +121,12 @@ class ScanpyEngine(CXGDriver): return np.hstack((df.obs["cell_name"].values.reshape(len(df.obs.index), 1), normalized_graph)).tolist() def diffexp(self, cell_list_1, cell_list_2, pval, num_genes): + """ + Computes the top differentially expressed genes between two clusters + :param df1: from filter_cells, dataframe containing first set of cells + :param df2: from filter_cells, dataframe containing second set of cells + :return: top genes, stats and expression values for top genes + """ cells_idx_1 = np.in1d(self.data.obs["cell_name"], cell_list_1) cells_idx_2 = np.in1d(self.data.obs["cell_name"], cell_list_2) expression_1 = self.data.X[cells_idx_1, :] @@ -150,8 +167,13 @@ class ScanpyEngine(CXGDriver): def expression(self, cells=None, genes=None): """ + Retrieves expression for each gene for cells in data frame :param df: - :return: + :return: { + "genes": list of genes, + "cells": list of cells and expression list, + "nonzero_gene_count": number of nonzero genes + } """ if cells: cells_idx = np.in1d(self.data.obs["cell_name"], cells) From 85506db971f0acb915dcfa4774585cce0e03e67e Mon Sep 17 00:00:00 2001 From: Charlotte Weaver Date: Thu, 5 Jul 2018 13:37:26 -0700 Subject: [PATCH 18/26] Updating to latest cellxgene client code Fixes the build error in the old version. Reverted the API version since we changed directions from updating the API to refactoring the server structure instead. --- client/__tests__/util/bitArray.test.js | 184 ++++++++++++ .../__tests__/util/positiveInterval.test.js | 140 +++++++++ .../__tests__/util/typedCrossfilter.test.js | 276 ++++++++++++++++++ client/package.json | 9 +- .../src/components/categorical/categorical.js | 37 ++- .../components/continuous/histogramBrush.js | 39 ++- .../src/components/continuousLegend/index.js | 6 +- client/src/components/graph/graph.js | 74 +++-- .../src/components/graph/setupSVGandBrush.js | 30 +- .../src/components/scatterplot/scatterplot.js | 112 ++++--- client/src/globals.js | 4 +- client/src/reducers/controls.js | 2 +- client/src/util/typedCrossfilter/bitArray.js | 9 +- client/src/util/typedCrossfilter/index.js | 46 +-- .../typedCrossfilter/positiveIntervals.js | 2 +- client/src/util/typedCrossfilter/util.js | 18 +- server/app/rest_api/rest.py | 2 +- server/test/test_api.py | 2 +- 18 files changed, 845 insertions(+), 147 deletions(-) create mode 100644 client/__tests__/util/bitArray.test.js create mode 100644 client/__tests__/util/positiveInterval.test.js create mode 100644 client/__tests__/util/typedCrossfilter.test.js diff --git a/client/__tests__/util/bitArray.test.js b/client/__tests__/util/bitArray.test.js new file mode 100644 index 00000000..72e91882 --- /dev/null +++ b/client/__tests__/util/bitArray.test.js @@ -0,0 +1,184 @@ +// jshint esversion: 6 + +const BitArray = require("../../src/util/typedCrossfilter/bitArray"); +const defaultTestLength = 8; + +describe("default select state", () => { + test("newly created Bitarray should be deselected", () => { + const ba = new BitArray(defaultTestLength); + expect(ba).toBeDefined(); + + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + const dim = ba.allocDimension(); + expect(dim).toBeDefined(); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.freeDimension(dim); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + }); +}); + +describe("select and deselect", () => { + test("selectAll and deselectAll", () => { + const ba = new BitArray(defaultTestLength); + expect(ba).toBeDefined(); + const dim1 = ba.allocDimension(); + expect(dim1).toBeDefined(); + ba.selectAll(dim1); + + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(true); + } + + const dim2 = ba.allocDimension(); + expect(dim2).toBeDefined(); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.selectAll(dim2); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(true); + } + + ba.deselectAll(dim1); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.deselectAll(dim2); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.selectAll(dim1); + ba.selectAll(dim2); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(true); + } + + ba.freeDimension(dim1); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(true); + } + + ba.freeDimension(dim2); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + }); + + test("selectOne and deselectOne", () => { + const ba = new BitArray(defaultTestLength); + expect(ba).toBeDefined(); + const dim = ba.allocDimension(); + expect(dim).toBeDefined(); + + ba.selectOne(dim, 0); + expect(ba.isSelected(0)).toEqual(true); + for (let i = 1; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.deselectOne(dim, 0); + for (let i = 0; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.selectOne(dim, 1); + expect(ba.isSelected(1)).toEqual(true); + expect(ba.isSelected(0)).toEqual(false); + for (let i = 2; i < defaultTestLength; i++) { + expect(ba.isSelected(i)).toEqual(false); + } + + ba.selectAll(dim); + ba.deselectOne(dim, defaultTestLength - 1); + expect(ba.isSelected(defaultTestLength - 1)).toEqual(false); + for (let i = 0; i < defaultTestLength - 1; i++) { + expect(ba.isSelected(i)).toEqual(true); + } + }); +}); + +describe("selectionCount", () => { + test("simple", () => { + const ba = new BitArray(defaultTestLength); + expect(ba).toBeDefined(); + const dim1 = ba.allocDimension(); + expect(dim1).toBeDefined(); + const dim2 = ba.allocDimension(); + expect(dim2).toBeDefined(); + + expect(ba.selectionCount).toEqual(0); + ba.selectAll(dim1); + expect(ba.selectionCount).toEqual(0); + ba.selectAll(dim2); + expect(ba.selectionCount).toEqual(defaultTestLength); + + for (let i = 0; i < defaultTestLength; i++) { + ba.deselectOne(dim1, i); + expect(ba.selectionCount).toEqual(defaultTestLength - i - 1); + expect(ba.selectionCount).toEqual(ba.countAllOnes()); + } + + ba.freeDimension(dim1); + ba.freeDimension(dim2); + }); +}); + +describe("fillBySelection", () => { + test("sets values correctly", () => { + const ba = new BitArray(defaultTestLength); + expect(ba).toBeDefined(); + const dim = ba.allocDimension(); + expect(dim).toBeDefined(); + + const arr = new Int32Array(defaultTestLength); + arr.fill(0); + const truth = new Int32Array(defaultTestLength); + truth.fill(0); + + // initial state should be deselected + ba.fillBySelection(arr, 1, 0); + expect(arr).toEqual(expect.not.arrayContaining([1])); + + // selectAll + ba.selectAll(dim); + ba.fillBySelection(arr, 1, 0); + expect(arr).toEqual(expect.not.arrayContaining([0])); + + // deselectOne + ba.deselectOne(dim, 3); + ba.fillBySelection(arr, 1, 0); + truth.fill(1); + truth[3] = 0; + expect(arr).toEqual(truth); + + // deselectAll + ba.deselectAll(dim); + ba.fillBySelection(arr, 1, 0); + truth.fill(0); + expect(arr).toEqual(truth); + + // selectOne + ba.selectOne(dim, 5); + ba.fillBySelection(arr, 6, 1); + truth.fill(1); + truth[5] = 6; + expect(arr).toEqual(truth); + + // should be deselected after dimension disposal + ba.freeDimension(dim); + ba.fillBySelection(arr, 3, 9); + truth.fill(9); + expect(arr).toEqual(truth); + }); +}); diff --git a/client/__tests__/util/positiveInterval.test.js b/client/__tests__/util/positiveInterval.test.js new file mode 100644 index 00000000..81c44496 --- /dev/null +++ b/client/__tests__/util/positiveInterval.test.js @@ -0,0 +1,140 @@ +// jshint esversion: 6 + +const PositiveIntervals = require("../../src/util/typedCrossfilter/positiveIntervals"); + +describe("canonicalize", () => { + test("empty", () => { + expect(PositiveIntervals.canonicalize([])).toEqual([]); + }); + + test("simple, already correct", () => { + expect(PositiveIntervals.canonicalize([[0, 1]])).toEqual([[0, 1]]); + expect(PositiveIntervals.canonicalize([[0, 1], [2, 3]])).toEqual([ + [0, 1], + [2, 3] + ]); + }); + + test("non-canonical, need to be canonicalized", () => { + expect(PositiveIntervals.canonicalize([[0, 1], [1, 2]])).toEqual([[0, 2]]); + expect(PositiveIntervals.canonicalize([[1, 2], [2, 3]])).toEqual([[1, 3]]); + }); +}); + +describe("union", () => { + test("empty range", () => { + expect(PositiveIntervals.union([], [])).toEqual([]); + expect(PositiveIntervals.union([], [[1, 2]])).toEqual([[1, 2]]); + expect(PositiveIntervals.union([], [[1, 2], [3, 4]])).toEqual([ + [1, 2], + [3, 4] + ]); + expect(PositiveIntervals.union([[3, 4]], [])).toEqual([[3, 4]]); + expect(PositiveIntervals.union([[1, 2], [3, 4]], [])).toEqual([ + [1, 2], + [3, 4] + ]); + expect(PositiveIntervals.union([[3, 3]], [])).toEqual([[3, 3]]); + expect(PositiveIntervals.union([], [[3, 3]])).toEqual([[3, 3]]); + }); + + test("simple ranges", () => { + expect(PositiveIntervals.union([[1, 2]], [[2, 3]])).toEqual([[1, 3]]); + expect(PositiveIntervals.union([[2, 3]], [[1, 2]])).toEqual([[1, 3]]); + expect(PositiveIntervals.union([[1, 2]], [[3, 4]])).toEqual([ + [1, 2], + [3, 4] + ]); + expect( + PositiveIntervals.union([[1, 2], [3, 4]], [[6, 7], [19, 40]]) + ).toEqual([[1, 2], [3, 4], [6, 7], [19, 40]]); + expect(PositiveIntervals.union([[1, 4]], [[1, 1], [3, 4]])).toEqual([ + [1, 4] + ]); + expect(PositiveIntervals.union([[3, 3]], [[4, 4]])).toEqual([ + [3, 3], + [4, 4] + ]); + }); +}); + +describe("intersection", () => { + test("empty range", () => { + expect(PositiveIntervals.intersection([], [])).toEqual([]); + expect(PositiveIntervals.intersection([], [[1, 2]])).toEqual([]); + expect(PositiveIntervals.intersection([[1, 2]], [])).toEqual([]); + }); + + test("simple", () => { + expect(PositiveIntervals.intersection([[1, 2]], [[2, 3]])).toEqual([]); + expect(PositiveIntervals.intersection([[2, 3]], [[1, 2]])).toEqual([]); + expect(PositiveIntervals.intersection([[1, 10]], [[1, 10]])).toEqual([ + [1, 10] + ]); + expect(PositiveIntervals.intersection([[1, 10]], [[2, 8]])).toEqual([ + [2, 8] + ]); + expect(PositiveIntervals.intersection([[2, 8]], [[1, 10]])).toEqual([ + [2, 8] + ]); + expect(PositiveIntervals.intersection([[1, 10]], [[2, 12]])).toEqual([ + [2, 10] + ]); + expect(PositiveIntervals.intersection([[2, 12]], [[1, 10]])).toEqual([ + [2, 10] + ]); + expect(PositiveIntervals.intersection([[1, 10]], [[1, 8]])).toEqual([ + [1, 8] + ]); + expect(PositiveIntervals.intersection([[1, 8]], [[1, 10]])).toEqual([ + [1, 8] + ]); + expect(PositiveIntervals.intersection([[1, 10]], [[1, 2], [6, 9]])).toEqual( + [[1, 2], [6, 9]] + ); + expect(PositiveIntervals.intersection([[0, 2638]], [[1363, 2638]])).toEqual( + [[1363, 2638]] + ); + expect(PositiveIntervals.intersection([[1, 2]], [[1, 2]])).toEqual([ + [1, 2] + ]); + }); +}); + +describe("difference", () => { + test("empty", () => { + expect(PositiveIntervals.difference([], [])).toEqual([]); + expect(PositiveIntervals.difference([], [[1, 10]])).toEqual([]); + expect(PositiveIntervals.difference([[1, 10]], [])).toEqual([[1, 10]]); + }); + + test("simple", () => { + expect(PositiveIntervals.difference([[1, 2], [3, 4]], [])).toEqual([ + [1, 2], + [3, 4] + ]); + expect(PositiveIntervals.difference([[1, 2], [3, 10]], [[5, 10]])).toEqual([ + [1, 2], + [3, 5] + ]); + expect(PositiveIntervals.difference([[1, 2], [3, 10]], [[0, 5]])).toEqual([ + [5, 10] + ]); + expect( + PositiveIntervals.difference([[0, 2638]], [[0, 1363], [2055, 2638]]) + ).toEqual([[1363, 2055]]); + expect( + PositiveIntervals.difference([[0, 1363], [2055, 2638]], [[0, 2638]]) + ).toEqual([]); + expect(PositiveIntervals.difference([[0, 10]], [[0, 1]])).toEqual([ + [1, 10] + ]); + expect(PositiveIntervals.difference([[0, 10]], [[1, 2]])).toEqual([ + [0, 1], + [2, 10] + ]); + expect(PositiveIntervals.difference([[0, 10]], [[9, 10]])).toEqual([ + [0, 9] + ]); + }); +}); diff --git a/client/__tests__/util/typedCrossfilter.test.js b/client/__tests__/util/typedCrossfilter.test.js new file mode 100644 index 00000000..00e68495 --- /dev/null +++ b/client/__tests__/util/typedCrossfilter.test.js @@ -0,0 +1,276 @@ +// jshint esversion: 6 +const _ = require("lodash"); +const crossfilter = require("../../src/util/typedCrossfilter"); + +const someData = [ + { + date: "2011-11-14T16:17:54Z", + quantity: 2, + total: 190, + tip: 100, + type: "tab", + productIDs: ["001"] + }, + { + date: "2011-11-14T16:20:19Z", + quantity: 2, + total: 190, + tip: 100, + type: "tab", + productIDs: ["001", "005"] + }, + { + date: "2011-11-14T16:28:54Z", + quantity: 1, + total: 300, + tip: 200, + type: "visa", + productIDs: ["004", "005"] + }, + { + date: "2011-11-14T16:30:43Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["001", "002"] + }, + { + date: "2011-11-14T16:48:46Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["005"] + }, + { + date: "2011-11-14T16:53:41Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["001", "004", "005"] + }, + { + date: "2011-11-14T16:54:06Z", + quantity: 1, + total: 100, + tip: 0, + type: "cash", + productIDs: ["001", "002", "003", "004", "005"] + }, + { + date: "2011-11-14T16:58:03Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["001"] + }, + { + date: "2011-11-14T17:07:21Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["004", "005"] + }, + { + date: "2011-11-14T17:22:59Z", + quantity: 2, + total: 90, + tip: 0, + type: "tab", + productIDs: ["001", "002", "004", "005"] + }, + { + date: "2011-11-14T17:25:45Z", + quantity: 2, + total: 200, + tip: 0, + type: "cash", + productIDs: ["002"] + }, + { + date: "2011-11-14T17:29:52Z", + quantity: 1, + total: 200, + tip: 100, + type: "visa", + productIDs: ["004"] + } +]; + +var payments = null; +beforeEach(() => { + payments = crossfilter(someData); +}); + +describe("typedCrossfilter", () => { + test("alloc and free", () => { + expect(payments).toBeDefined(); + expect(payments.size()).toEqual(someData.length); + expect(payments.all()).toEqual(someData); + + const quantity = payments.dimension(r => r.quantity, Int32Array); + expect(quantity).toBeDefined(); + expect(quantity.id()).toBeDefined(); + + quantity.dispose(); + expect(payments.size()).toEqual(someData.length); + expect(payments.all()).toEqual(someData); + }); + + test("filterAll and filterNone", () => { + expect(payments).toBeDefined(); + const quantity = payments.dimension(r => r.quantity, Int32Array); + const tip = payments.dimension(r => r.tip, Float32Array); + const total = payments.dimension(r => r.total, Float32Array); + const type = payments.dimension(r => r.type, "enum"); + + expect(quantity).toBeDefined(); + expect(tip).toBeDefined(); + expect(total).toBeDefined(); + expect(type).toBeDefined(); + + // initially, all should be filtered + expect(payments.allFiltered().length).toEqual(payments.size()); + expect(payments.allFiltered()).toEqual(payments.all()); + expect(payments.countFiltered()).toEqual(someData.length); + + // filterAll + tip.filterAll(); // should change nothing + expect(payments.allFiltered()).toEqual(payments.all()); + expect(payments.countFiltered()).toEqual(someData.length); + + // ditto + total.filterAll(); + expect(payments.allFiltered()).toEqual(payments.all()); + expect(payments.countFiltered()).toEqual(someData.length); + + // filterNone + type.filterNone(); + expect(payments.allFiltered()).toEqual([]); + expect(payments.countFiltered()).toEqual(0); + + quantity.filterNone(); + expect(payments.allFiltered()).toEqual([]); + expect(payments.countFiltered()).toEqual(0); + + // invert the first none; should have no effect because type is + // still not filtered + quantity.filterAll(); + expect(payments.allFiltered()).toEqual([]); + expect(payments.countFiltered()).toEqual(0); + + // filter all of type; should select all + type.filterAll(); + expect(payments.allFiltered()).toEqual(payments.all()); + expect(payments.countFiltered()).toEqual(payments.size()); + }); + + test("filterExact", () => { + expect(payments).toBeDefined(); + const quantity = payments.dimension(r => r.quantity, Int32Array); + const tip = payments.dimension(r => r.tip, Float32Array); + const total = payments.dimension(r => r.total, Float32Array); + const type = payments.dimension(r => r.type, "enum"); + + quantity.filterExact(1); + expect(payments.countFiltered()).toEqual( + _.countBy(someData, "quantity")[1] + ); + expect(payments.allFiltered()).toEqual(_.filter(someData, { quantity: 1 })); + + tip.filterExact(0); + expect(payments.allFiltered()).toEqual( + _.filter(someData, { tip: 0, quantity: 1 }) + ); + + type.filterExact("cash"); + expect(payments.allFiltered()).toEqual( + _.filter(someData, { tip: 0, quantity: 1, type: "cash" }) + ); + }); + + test("filterRange", () => { + expect(payments).toBeDefined(); + const quantity = payments.dimension(r => r.quantity, Int32Array); + const tip = payments.dimension(r => r.tip, Float32Array); + const total = payments.dimension(r => r.total, Float32Array); + const type = payments.dimension(r => r.type, "enum"); + + tip.filterRange([0, 91]); + expect(payments.allFiltered()).toEqual( + _(someData) + .filter(r => r.tip >= 0 && r.tip < 91) + .value() + ); + + tip.filterRange([0, 90]); + expect(payments.allFiltered()).toEqual( + _(someData) + .filter(r => r.tip >= 0 && r.tip < 90) + .value() + ); + + tip.filterRange([1, 90]); + expect(payments.allFiltered()).toEqual( + _(someData) + .filter(r => r.tip >= 1 && r.tip < 91) + .value() + ); + }); + + test("filterEnum", () => { + expect(payments).toBeDefined(); + const quantity = payments.dimension(r => r.quantity, Int32Array); + const tip = payments.dimension(r => r.tip, Float32Array); + const total = payments.dimension(r => r.total, Float32Array); + const type = payments.dimension(r => r.type, "enum"); + + type.filterEnum(["tab", "cash"]); + expect(payments.allFiltered()).toEqual( + _(someData) + .filter(r => r.type === "cash" || r.type === "tab") + .value() + ); + + tip.filterEnum([0, 100]); + expect(payments.allFiltered()).toEqual( + _(someData) + .filter(r => r.type === "cash" || r.type === "tab") + .filter(r => r.tip === 0 || r.tip === 100) + .value() + ); + }); + + test("more than 32 dimensions", () => { + expect(payments).toBeDefined(); + const quantity = payments.dimension(r => r.quantity, Int32Array); + const tip = payments.dimension(r => r.tip, Float32Array); + const total = payments.dimension(r => r.total, Float32Array); + const type = payments.dimension(r => r.type, "enum"); + + // Create a bunch of fake dimensions to ensure we can handle > 32 + let dimMap = {}; + for (let i = 0; i < 65; i++) { + dimMap[i] = payments.dimension(r => Math.random(), Float32Array); + expect(dimMap[i]).toBeDefined(); + expect(dimMap[i].id()).toBeDefined(); + } + + // everything should start as selected/filtered + expect(payments.countFiltered()).toEqual(someData.length); + + dimMap[0].filterAll(); + dimMap[64].filterAll(); + expect(payments.countFiltered()).toEqual(someData.length); + + dimMap[33].filterNone(); + expect(payments.allFiltered()).toEqual([]); + + dimMap[33].filterAll(); + expect(payments.allFiltered()).toEqual(someData); + }); +}); diff --git a/client/package.json b/client/package.json index 03568a9c..712021ed 100644 --- a/client/package.json +++ b/client/package.json @@ -9,7 +9,8 @@ "clean": "rimraf build", "start": "node server/development.js", "lint": "eslint src", - "prod": "cross-env NODE_ENV=production PORT=3000 node server/production.js" + "prod": "cross-env NODE_ENV=production PORT=3000 node server/production.js", + "test": "jest" }, "engineStrict": true, "engines": { @@ -90,6 +91,7 @@ "gzip-size": "^3.0.0", "html-webpack-inline-source-plugin": "0.0.6", "html-webpack-plugin": "^2.22.0", + "jest": "^23.0.1", "jsdom": "^9.4.1", "json-loader": "^0.5.4", "nyc": "^10.0.0", @@ -106,5 +108,10 @@ "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.12.2", "whatwg-fetch": "^2.0.1" + }, + "jest": { + "testMatch": [ + "**/__tests__/**/?(*.)(spec|test).js?(x)" + ] } } diff --git a/client/src/components/categorical/categorical.js b/client/src/components/categorical/categorical.js index 1b04c388..997b3889 100644 --- a/client/src/components/categorical/categorical.js +++ b/client/src/components/categorical/categorical.js @@ -15,7 +15,8 @@ import FaPaintBrush from "react-icons/lib/fa/paint-brush"; @connect(state => { return { - colorAccessor: state.controls.colorAccessor + colorAccessor: state.controls.colorAccessor, + categoricalAsBooleansMap: state.controls.categoricalAsBooleansMap }; }) class Category extends React.Component { @@ -26,7 +27,24 @@ class Category extends React.Component { isExpanded: false }; } + componentDidUpdate() { + const valuesAsBool = _.values( + this.props.categoricalAsBooleansMap[this.props.metadataField] + ) + /* count categories toggled on by counting true values */ + const categoriesToggledOn = _.values(valuesAsBool).filter(v => v).length; + if (categoriesToggledOn === valuesAsBool.length) { + /* everything is on, so not indeterminate */ + this.checkbox.indeterminate = false; + } else if (categoriesToggledOn === 0) { + /* nothing is on, so no */ + this.checkbox.indeterminate = false; + } else if (categoriesToggledOn < valuesAsBool.length) { + /* to be explicit... */ + this.checkbox.indeterminate = true; + } + } handleColorChange() { this.props.dispatch({ type: "color by categorical metadata", @@ -61,6 +79,16 @@ class Category extends React.Component { ); }); } + handleToggleAllClick() { + // || this.checkbox.indeterminate === false + if (this.state.isChecked) { + console.log('checked, firing toggle none') + this.toggleNone(); + } else if (!this.state.isChecked) { + console.log('!checked, firing toggle all') + this.toggleAll() + } + } render() { return (
{this.props.metadataField} this.checkbox = el} checked={this.state.isChecked} type="checkbox" /> diff --git a/client/src/components/continuous/histogramBrush.js b/client/src/components/continuous/histogramBrush.js index 1b67e687..17ab9cec 100644 --- a/client/src/components/continuous/histogramBrush.js +++ b/client/src/components/continuous/histogramBrush.js @@ -7,8 +7,11 @@ https://bl.ocks.org/SpaceActuary/2f004899ea1b2bd78d6f1dbb2febf771 import React from "react"; import _ from "lodash"; import { connect } from "react-redux"; +import FaPaintBrush from "react-icons/lib/fa/paint-brush"; +import * as globals from "../../globals"; @connect(state => { + console.log("state in histo brush", state) const ranges = state.cells.cells && state.cells.cells.data.ranges ? state.cells.cells.data.ranges @@ -26,7 +29,8 @@ import { connect } from "react-redux"; return { colorAccessor: state.controls.colorAccessor, colorScale: state.controls.colorScale, - cellsMetadata: state.controls.cellsMetadata + cellsMetadata: state.controls.cellsMetadata, + initializeRanges }; }) class HistogramBrush extends React.Component { @@ -154,7 +158,7 @@ class HistogramBrush extends React.Component { ) .call(d3.axisBottom(x).ticks(5)) .append("text") - .attr("x", 300) + .attr("x", this.width - 2) .attr("y", -6) .attr("fill", "#000") .attr("text-anchor", "end") @@ -164,13 +168,40 @@ class HistogramBrush extends React.Component { this.setState({ brush, xAxis }); } } - + handleColorAction() { + this.props.dispatch({ + type: "color by continuous metadata", + colorAccessor: this.props.metadataField, + rangeMaxForColorAccessor: this.props.initializeRanges[this.props.metadataField].range.max + }); + } render() { return (
+ + + cell coordinates - const invert = pin => { - const x = - 2 * pin[0] / (this.props.responsive.height - this.graphPaddingTop) - 1; - const y = - 2 * - (1 - pin[1] / (this.props.responsive.height - this.graphPaddingTop)) - - 1; - const pout = [x + inverse[12], y + inverse[13]]; - return [(pout[0] + 1) / 2, (pout[1] + 1) / 2]; - }; + // transform screen coordinates -> cell coordinates + const invert = pin => { + const x = + (2 * pin[0]) / (this.props.responsive.height - this.graphPaddingTop) - + 1; + const y = + 2 * + (1 - + pin[1] / (this.props.responsive.height - this.graphPaddingTop)) - + 1; + const pout = [ + x * inverse[14] + inverse[12], + y * inverse[14] + inverse[13] + ]; + return [(pout[0] + 1) / 2, (pout[1] + 1) / 2]; + }; - const brushCoords = { - northwest: invert([s[0][0], s[0][1]]), - southeast: invert([s[1][0], s[1][1]]) - }; + const brushCoords = { + northwest: invert([s[0][0], s[0][1]]), + southeast: invert([s[1][0], s[1][1]]) + }; - this.props.dispatch({ - type: "graph brush selection change", - brushCoords - }); + this.props.dispatch({ + type: "graph brush selection change", + brushCoords + }); + } } handleBrushDeselectAction() { - if (!d3.event.selection) { + if (d3.event && !d3.event.selection) { + this.props.dispatch({ + type: "graph brush deselect" + }); + } + + if (!d3.event) { + /* this line clears the brush procedurally, ie., zoom button clicked, not a click away from brush on svg */ + this.state.svg.select(".graph_brush").call(this.state.brush.move, null); this.props.dispatch({ type: "graph brush deselect" }); @@ -302,6 +317,7 @@ class Graph extends React.Component {