From 3b6b16689b3b284e9b5d4aefac50f7b15981051c Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 26 Feb 2021 09:40:11 +0100 Subject: [PATCH 001/185] Added zenodo shield. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c52cc601..ffc0fd25 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # iFISH Probe Design (II) -![](https://img.shields.io/github/license/ggirelli/ifpd2.svg?style=flat) ![](https://github.com/ggirelli/ifpd2/workflows/Python%20package/badge.svg?branch=main&event=push) +[![DOI](https://zenodo.org/badge/210782569.svg)](https://zenodo.org/badge/latestdoi/210782569) ![](https://img.shields.io/github/license/ggirelli/ifpd2.svg?style=flat) ![](https://github.com/ggirelli/ifpd2/workflows/Python%20package/badge.svg?branch=main&event=push) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ifpd2) ![PyPI - Format](https://img.shields.io/pypi/format/ifpd2) ![PyPI - Status](https://img.shields.io/pypi/status/ifpd2) ![](https://img.shields.io/github/release/ggirelli/ifpd2.svg?style=flat) ![](https://img.shields.io/github/release-date/ggirelli/ifpd2.svg?style=flat) ![](https://img.shields.io/github/languages/code-size/ggirelli/ifpd2.svg?style=flat) ![](https://img.shields.io/github/watchers/ggirelli/ifpd2.svg?label=Watch&style=social) ![](https://img.shields.io/github/stars/ggirelli/ifpd2.svg?style=social) From 324d38602c34b23fa5a811bdb5fac452f6fa7152 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 12:53:52 +0000 Subject: [PATCH 002/185] Bump rich from 9.12.0 to 9.12.3 (#11) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7f186c94..22846039 100644 --- a/poetry.lock +++ b/poetry.lock @@ -70,7 +70,7 @@ python-versions = "*" [[package]] name = "rich" -version = "9.12.0" +version = "9.12.3" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -186,8 +186,8 @@ pytz = [ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] rich = [ - {file = "rich-9.12.0-py3-none-any.whl", hash = "sha256:dc2499772c96bd2c488b34739425d1cdfa433bf394f4f2f5af5ca6f399171df0"}, - {file = "rich-9.12.0.tar.gz", hash = "sha256:27e3deb24555d7dad554afa871c7e77f16a0336a625ed78dd10de21193b4ec11"}, + {file = "rich-9.12.3-py3-none-any.whl", hash = "sha256:bc7087a7fcca8852784ccccc88d992c23efaf9d7e1dcca991a440d7a779352e2"}, + {file = "rich-9.12.3.tar.gz", hash = "sha256:77bd13c72350c4907540be33910c0ec13bebb68fba4986e055fb564338f9e94a"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 797e0886333d98b5ca97cd2597984f1c08beb21b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 09:45:29 +0000 Subject: [PATCH 003/185] Bump rich from 9.12.3 to 9.12.4 (#12) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 22846039..74d53bc0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -70,7 +70,7 @@ python-versions = "*" [[package]] name = "rich" -version = "9.12.3" +version = "9.12.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -186,8 +186,8 @@ pytz = [ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] rich = [ - {file = "rich-9.12.3-py3-none-any.whl", hash = "sha256:bc7087a7fcca8852784ccccc88d992c23efaf9d7e1dcca991a440d7a779352e2"}, - {file = "rich-9.12.3.tar.gz", hash = "sha256:77bd13c72350c4907540be33910c0ec13bebb68fba4986e055fb564338f9e94a"}, + {file = "rich-9.12.4-py3-none-any.whl", hash = "sha256:4654e20bc44c0b21e387b58edaf073325e5d12f8e482b70db7d1dd7a4949f6f0"}, + {file = "rich-9.12.4.tar.gz", hash = "sha256:1e000895221df23cd7f828a9511c15d10189850d4f923b6d8c3d29a32ca95265"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 2bd948498759948d709f6913d7ba488844a34132 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Mar 2021 09:16:27 +0000 Subject: [PATCH 004/185] Bump pandas from 1.2.2 to 1.2.3 (#13) --- poetry.lock | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 74d53bc0..ecedc7e4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -27,7 +27,7 @@ python-versions = ">=3.7" [[package]] name = "pandas" -version = "1.2.2" +version = "1.2.3" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -154,24 +154,22 @@ numpy = [ {file = "numpy-1.20.1.zip", hash = "sha256:3bc63486a870294683980d76ec1e3efc786295ae00128f9ea38e2c6e74d5a60a"}, ] pandas = [ - {file = "pandas-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c76a108272a4de63189b8f64086bbaf8348841d7e610b52f50959fbbf401524f"}, - {file = "pandas-1.2.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e61a089151f1ed78682aa77a3bcae0495cf8e585546c26924857d7e8a9960568"}, - {file = "pandas-1.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fc351cd2df318674669481eb978a7799f24fd14ef26987a1aa75105b0531d1a1"}, - {file = "pandas-1.2.2-cp37-cp37m-win32.whl", hash = "sha256:05ca6bda50123158eb15e716789083ca4c3b874fd47688df1716daa72644ee1c"}, - {file = "pandas-1.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:08b6bbe74ae2b3e4741a744d2bce35ce0868a6b4189d8b84be26bb334f73da4c"}, - {file = "pandas-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:230de25bd9791748b2638c726a5f37d77a96a83854710110fadd068d1e2c2c9f"}, - {file = "pandas-1.2.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a50cf3110a1914442e7b7b9cef394ef6bed0d801b8a34d56f4c4e927bbbcc7d0"}, - {file = "pandas-1.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4d33537a375cfb2db4d388f9a929b6582a364137ea6c6b161b0166440d6ffe36"}, - {file = "pandas-1.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ac028cd9a6e1efe43f3dc36f708263838283535cc45430a98b9803f44f4c84b"}, - {file = "pandas-1.2.2-cp38-cp38-win32.whl", hash = "sha256:c43d1beb098a1da15934262009a7120aac8dafa20d042b31dab48c28868eb5a4"}, - {file = "pandas-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:69a70d79a791fa1fd5f6e84b8b6dec2ec92369bde4ab2e18d43fc8a1825f51d1"}, - {file = "pandas-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbad4155028b8ca66aa19a8b13f593ebbf51bfb6c3f2685fe64f04d695a81864"}, - {file = "pandas-1.2.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:fbddbb20f30308ba2546193d64e18c23b69f59d48cdef73676cbed803495c8dc"}, - {file = "pandas-1.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:214ae60b1f863844e97c87f758c29940ffad96c666257323a4bb2a33c58719c2"}, - {file = "pandas-1.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26b4919eb3039a686a86cd4f4a74224f8f66e3a419767da26909dcdd3b37c31e"}, - {file = "pandas-1.2.2-cp39-cp39-win32.whl", hash = "sha256:e3c250faaf9979d0ec836d25e420428db37783fa5fed218da49c9fc06f80f51c"}, - {file = "pandas-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:e9bbcc7b5c432600797981706f5b54611990c6a86b2e424329c995eea5f9c42b"}, - {file = "pandas-1.2.2.tar.gz", hash = "sha256:14ed84b463e9b84c8ff9308a79b04bf591ae3122a376ee0f62c68a1bd917a773"}, + {file = "pandas-1.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4d821b9b911fc1b7d428978d04ace33f0af32bb7549525c8a7b08444bce46b74"}, + {file = "pandas-1.2.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9f5829e64507ad10e2561b60baf285c470f3c4454b007c860e77849b88865ae7"}, + {file = "pandas-1.2.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:97b1954533b2a74c7e20d1342c4f01311d3203b48f2ebf651891e6a6eaf01104"}, + {file = "pandas-1.2.3-cp37-cp37m-win32.whl", hash = "sha256:5e3c8c60541396110586bcbe6eccdc335a38e7de8c217060edaf4722260b158f"}, + {file = "pandas-1.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8a051e957c5206f722e83f295f95a2cf053e890f9a1fba0065780a8c2d045f5d"}, + {file = "pandas-1.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a93e34f10f67d81de706ce00bf8bb3798403cabce4ccb2de10c61b5ae8786ab5"}, + {file = "pandas-1.2.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:46fc671c542a8392a4f4c13edc8527e3a10f6cb62912d856f82248feb747f06e"}, + {file = "pandas-1.2.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:43e00770552595c2250d8d712ec8b6e08ca73089ac823122344f023efa4abea3"}, + {file = "pandas-1.2.3-cp38-cp38-win32.whl", hash = "sha256:475b7772b6e18a93a43ea83517932deff33954a10d4fbae18d0c1aba4182310f"}, + {file = "pandas-1.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:72ffcea00ae8ffcdbdefff800284311e155fbb5ed6758f1a6110fc1f8f8f0c1c"}, + {file = "pandas-1.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:621c044a1b5e535cf7dcb3ab39fca6f867095c3ef223a524f18f60c7fee028ea"}, + {file = "pandas-1.2.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:0f27fd1adfa256388dc34895ca5437eaf254832223812afd817a6f73127f969c"}, + {file = "pandas-1.2.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:dbb255975eb94143f2e6ec7dadda671d25147939047839cd6b8a4aff0379bb9b"}, + {file = "pandas-1.2.3-cp39-cp39-win32.whl", hash = "sha256:d59842a5aa89ca03c2099312163ffdd06f56486050e641a45d926a072f04d994"}, + {file = "pandas-1.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:09761bf5f8c741d47d4b8b9073288de1be39bbfccc281d70b889ade12b2aad29"}, + {file = "pandas-1.2.3.tar.gz", hash = "sha256:df6f10b85aef7a5bb25259ad651ad1cc1d6bb09000595cab47e718cbac250b1d"}, ] pygments = [ {file = "Pygments-2.8.0-py3-none-any.whl", hash = "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88"}, From 17262e6cbd471300d5fb535b9e02ad3cf49cd198 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 18:39:46 +0100 Subject: [PATCH 005/185] Added parser functions for HUSH, oligo-melting, and OligoArrayAux --- ifpd2/io.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 ifpd2/io.py diff --git a/ifpd2/io.py b/ifpd2/io.py new file mode 100644 index 00000000..bde81aca --- /dev/null +++ b/ifpd2/io.py @@ -0,0 +1,69 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import copy +from ifpd2 import asserts as ass +from ifpd2 import const +import logging +import os +import pandas as pd # type: ignore +from typing import List, Set, Tuple +from tqdm import tqdm # type: ignore + + +def parse_hush(path: str) -> pd.DataFrame: + assert os.path.isfile(path), f"cannot find file '{path}'" + logging.info(f"parsing: '{path}'") + sequence_lengths: Set[int] = set() + parsed_lines: List[Tuple[str, str, int]] = [] + with open(path) as IH: + header = "" + for line in tqdm(IH, desc="Parsing hush output", leave=False): + if line.startswith(">"): + header = line.strip() + else: + line_split = line.strip().split(",") + parsed_lines.append( + (header[1:], line_split[0], int(line_split[1].strip())) + ) + sequence_lengths.add(len(line_split[0])) + header = "" + hush_df = pd.DataFrame(parsed_lines, columns=["name", "sequence", "off_target_no"]) + hush_df.set_index("name", inplace=True) + ass.ert_in_dtype(hush_df["off_target_no"].values.max(), "u4") + dtype = copy.copy(const.dtype_hush) + dtype["sequence"] = f"|S{max(sequence_lengths)}" + return hush_df.astype(dtype) + + +def parse_melting(path: str, sep: str = "\t", header: bool = True) -> pd.DataFrame: + assert os.path.isfile(path), f"cannot find file '{path}'" + logging.info(f"parsing: '{path}'") + expected_columns = copy.copy(const.dtype_melting) + melting_df = pd.read_csv(path, sep=sep, header=None, skiprows=1 if header else 0) + assert melting_df.shape[1] == len(expected_columns) + melting_df.columns = list(expected_columns.keys()) + melting_df.set_index("name", inplace=True) + expected_columns.pop("name", None) + expected_columns[ + "sequence" + ] = f'|S{max(set([len(seq) for seq in melting_df["sequence"].values]))}' + return melting_df.astype(expected_columns) + + +def parse_secondary(path: str) -> pd.DataFrame: + assert os.path.isfile(path), f"cannot find file '{path}'" + logging.info(f"parsing: '{path}'") + parsed_lines: List[Tuple[str, float]] = [] + with open(path, "r") as IH: + for line in tqdm(IH, desc="Parsing OligoArrayAux output", leave=False): + if "dG = " not in line: + continue + _, dG_string, name = line.strip().split("\t") + parsed_lines.append((name, float(dG_string[5:]))) + secondary_df = pd.DataFrame(parsed_lines, columns=["name", "ss_dG"]) + secondary_df.set_index("name", inplace=True) + ass.ert_in_dtype(secondary_df["ss_dG"].values.max(), "f4") + return secondary_df.astype(const.dtype_secondary) From 3327bfc7da65a7be4b36a2f7fddef58962782a19 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 18:40:50 +0100 Subject: [PATCH 006/185] Added assert for dtype compatibility --- ifpd2/asserts.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ifpd2/asserts.py b/ifpd2/asserts.py index 10985649..fadf47e2 100644 --- a/ifpd2/asserts.py +++ b/ifpd2/asserts.py @@ -4,6 +4,7 @@ """ import logging +import numpy as np # type: ignore import sys from typing import Callable @@ -37,6 +38,25 @@ def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True): assert x > vmin and x < vmax, f"expected {vmin}<{label}<{vmax}" +def ert_in_dtype(x, dtype): + if dtype.startswith("f"): + assert x <= np.finfo(dtype).max, " ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.finfo(dtype).max}", + ] + ) + elif dtype.startswith("u") or dtype.startswith("i"): + assert x <= np.iinfo(dtype).max, " ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.iinfo(dtype).max}", + ] + ) + else: + logging.warning(f"assert not implemented for dtype '{dtype}'") + + def enable_rich_assert(fun: Callable) -> Callable: def wrapper(*args, **kwargs): try: From d612345cbd4f1b5cfd191f01e4d8d4c2e12e9eb3 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 18:41:01 +0100 Subject: [PATCH 007/185] Added dtypes and expected database columns --- ifpd2/const.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/ifpd2/const.py b/ifpd2/const.py index a8840f40..c17a46e0 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -4,3 +4,52 @@ """ __version__ = "1.0.0-alpha" + +dtype_melting = dict( + [ + ("name", "|S"), + ("Tm_dG", " Date: Thu, 4 Mar 2021 18:41:33 +0100 Subject: [PATCH 008/185] Changed entry points for db related actions --- ifpd2/__init__.py | 3 ++- ifpd2/scripts/__init__.py | 4 +-- ifpd2/scripts/db.py | 35 +++++++++++++++++++++++++ ifpd2/scripts/{dbchk.py => db_check.py} | 2 +- ifpd2/scripts/ifpd2.py | 2 +- 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 ifpd2/scripts/db.py rename ifpd2/scripts/{dbchk.py => db_check.py} (97%) diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index 1b072e32..6850e64c 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -4,13 +4,14 @@ """ from ifpd2.const import __version__ -from ifpd2 import asserts +from ifpd2 import asserts, io from ifpd2 import database, walker from ifpd2 import oligo, probe, probe_set __all__ = [ "__version__", "asserts", + "io", "database", "walker", "oligo", diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index fe93908b..583025c9 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -4,7 +4,7 @@ """ from ifpd2.scripts import arguments, ifpd2 -from ifpd2.scripts import dbchk +from ifpd2.scripts import db, db_check, db_make from ifpd2.scripts import query import logging @@ -16,4 +16,4 @@ handlers=[RichHandler(markup=True, rich_tracebacks=True)], ) -__all__ = ["arguments", "ifpd2", "dbchk", "query"] +__all__ = ["arguments", "ifpd2", "db", "db_check", "db_make", "query"] diff --git a/ifpd2/scripts/db.py b/ifpd2/scripts/db.py new file mode 100644 index 00000000..3544d561 --- /dev/null +++ b/ifpd2/scripts/db.py @@ -0,0 +1,35 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.scripts import arguments as ap +from ifpd2 import scripts +import sys + + +def default_parser(*args) -> None: + print("ifpd db -h for usage details.") + sys.exit() + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + __name__.split(".")[-1], + description="""Possible ifpd db queries.""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Possible ifpd db queries.", + ) + parser.set_defaults(parse=default_parser) + parser = ap.add_version_option(parser) + + sub_subparsers = parser.add_subparsers( + title="sub-commands", + help="Access the help page for a sub-command with: sub-command -h", + ) + + scripts.db_check.init_parser(sub_subparsers) + scripts.db_make.init_parser(sub_subparsers) + + return parser diff --git a/ifpd2/scripts/dbchk.py b/ifpd2/scripts/db_check.py similarity index 97% rename from ifpd2/scripts/dbchk.py rename to ifpd2/scripts/db_check.py index 79785b21..81fbf10f 100644 --- a/ifpd2/scripts/dbchk.py +++ b/ifpd2/scripts/db_check.py @@ -11,7 +11,7 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: parser = subparsers.add_parser( - __name__.split(".")[-1], + "check", description=""" Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta, aspernatur, natus. Possimus recusandae distinctio, voluptatem fuga delectus laudantium ut, diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 7ed522ab..4f736517 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -35,7 +35,7 @@ def main(): help="Access the help page for a sub-command with: sub-command -h", ) - scripts.dbchk.init_parser(subparsers) + scripts.db.init_parser(subparsers) scripts.query.init_parser(subparsers) args = parser.parse_args() From 82add4755f0e5aba71852e5c250a6a4fd31331b6 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 18:41:39 +0100 Subject: [PATCH 009/185] Implemented db make script --- ifpd2/scripts/db_make.py | 275 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 ifpd2/scripts/db_make.py diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py new file mode 100644 index 00000000..c1291863 --- /dev/null +++ b/ifpd2/scripts/db_make.py @@ -0,0 +1,275 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +import copy +from ifpd2 import asserts as ass +from ifpd2.asserts import enable_rich_assert +from ifpd2 import const, io +from ifpd2.scripts import arguments as ap +import logging +import numpy as np # type: ignore +import os +import pandas as pd # type: ignore +import pickle +from rich.progress import Progress # type: ignore +from tqdm import tqdm # type: ignore +from typing import Callable, Dict, List, Optional, Set, Tuple + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + "make", + description=""" +Assembles files into a database. At least one of the following is required, +to retrieve sequence: hush output (-O), or oligo-melting output (-T). + +The name of each record should be in the format: 'name pos=chrom:start-end'. + +Accepted formats: +hush single-line sequence fasta file, where a ", XXX" is appended after the + sequence. XXX is the number of detected off-targets. +oligo-melting .tsv file with six (6) columns: name, dG, dH, dS, Tm, Seq. + NOTE: the first line of the file is skipped during parsing because + it is expected to be a header line. +OligoArrayAux .ct (Connectivity Table) file. Details on format available here: + https://rna.urmc.rochester.edu/Text/File_Formats.html + +Files are merged by: hush header, oligo-melting name, and +OligoArrayAux name (3rd field of 1st column). +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Assemble a database.", + ) + + parser.add_argument("output", type=str, help="Path to database folder (output).") + + indata = parser.add_argument_group("input arguments") + indata.add_argument( + "-O", + "--hush", + metavar="hush_path", + nargs="+", + type=str, + help="Path to hush output. Format details above.", + ) + indata.add_argument( + "-T", + "--melting", + metavar="oligomelting_path", + nargs="+", + type=str, + help="Path to oligo-melting output. Format details above.", + ) + indata.add_argument( + "-S", + "--secondary", + metavar="oligoarrayaux_path", + nargs="+", + type=str, + help="Path to OligoArrayAux output. Format details above.", + ) + + parser = ap.add_version_option(parser) + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +def init_log(args: argparse.Namespace) -> None: + logging.info(f"output folder: '{args.output}'") + if args.hush is not None: + logging.info(f"hush: {args.hush}") + if args.melting is not None: + logging.info(f"oligo-melting: {args.melting}") + if args.secondary is not None: + logging.info(f"OligoArrayAux: {args.secondary}") + + +def check_files_exist(path_list: Optional[List[str]], software_name: str) -> None: + if path_list is None: + return + for path in path_list: + assert os.path.isfile(path), f"{software_name} output not found: {path}" + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + assert not os.path.isdir( + args.output + ), f"database folder already exists: {args.output}." + + check_files_exist(args.hush, "hush") + check_files_exist(args.melting, "oligo-melting") + check_files_exist(args.secondary, "OligoArrayAux") + + assert 1 <= ((args.hush is not None) + (args.melting is not None)), " ".join( + [ + "one of the following is required:", + "FASTA input, hush output, or oligo-melting output", + ] + ) + + return args + + +def parse_input( + path_list: Optional[List[str]], parse_function: Callable, software_name: str +) -> pd.DataFrame: + if path_list is None: + return pd.DataFrame() + logging.info(f"parsing {software_name} output") + return pd.concat([parse_function(path) for path in path_list]) + + +def populate_db( + db: pd.DataFrame, + path_list: Optional[List[str]], + parse_function: Callable, + software_name: str, +) -> pd.DataFrame: + if path_list is None: + return db + parsed_db = parse_input(path_list, parse_function, software_name) + logging.info(f"adding {software_name} output to database") + return db.merge( + parsed_db, + how="outer", + left_index=True, + right_index=True, + ) + + +def reduce_sequence_columns(df: pd.DataFrame) -> pd.DataFrame: + logging.info("discarding redundant sequence columns") + seq_columns = [c for c in df.columns if "sequence" in c] + if 1 == len(seq_columns): + return df + df.drop(seq_columns[1:], axis=1, inplace=True) + df.rename(columns=dict([(seq_columns[0], "sequence")]), inplace=True) + return df + + +def add_sequence_details(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: + logging.info("adding sequence feature columns: length and GC-content") + sequence_length_list: List[int] = [] + gc_content_list: List[float] = [] + + for sequence in tqdm( + df["sequence"].values, desc="calculating GC-content", leave=False + ): + sequence = sequence.upper() + sequence_length_list.append(len(sequence)) + gc_content_list.append( + (sequence.count(b"G") + sequence.count(b"C")) / len(sequence) + ) + + df["sequence_length"] = sequence_length_list + df["gc_content"] = gc_content_list + + dtype = copy.copy(const.dtype_sequence_features) + dtype["sequence"] = f"|S{max(sequence_length_list)}" + return (df.astype(dtype), dtype) + + +def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: + logging.info("adding header feature columns: name, chromosome, start, end") + name_list: List[str] = [] + name_length_set: Set[int] = set() + chromosome_list: List[str] = [] + chromosome_length_set: Set[int] = set() + start_list: List[int] = [] + end_list: List[int] = [] + + for header in tqdm(db.index, desc="parsing record headers", leave=False): + name, position = header.split(" ") + name_list.append(name) + name_length_set.add(len(name)) + chromosome, extremes = position.split("=")[1].split(":") + chromosome_list.append(chromosome) + chromosome_length_set.add(len(chromosome)) + start, end = [int(x) for x in extremes.split("-")] + start_list.append(start) + end_list.append(end) + + db["name"] = name_list + db["chromosome"] = chromosome_list + db["start"] = start_list + db["end"] = end_list + ass.ert_in_dtype(db["start"].values.max(), "u4") + ass.ert_in_dtype(db["end"].values.max(), "u4") + db.reset_index(drop=True, inplace=True) + + dtype = copy.copy(const.dtype_header_features) + dtype["name"] = f"|S{max(name_length_set)}" + dtype["chromosome"] = f"|S{max(chromosome_length_set)}" + return (db.astype(dtype), dtype) + + +def write_database( + dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace +) -> None: + chromosome_data: Dict[bytes, int] = dict( + [(x, 0) for x in set(dbdf["chromosome"].values)] + ) + + with Progress() as progress: + chromosome_track = progress.add_task( + "exporting chromosome", total=len(chromosome_data) + ) + for selected_chromosome in chromosome_data.keys(): + chromosome_db = dbdf.loc[selected_chromosome == dbdf["chromosome"], :] + chromosome_data[selected_chromosome] = chromosome_db["end"].values.max() + with open( + os.path.join(args.output, f"{selected_chromosome.decode()}.bin"), "wb" + ) as IH: + writing_track = progress.add_task( + f"writing {selected_chromosome.decode()}.bin", + total=chromosome_db.shape[0], + ) + for record in chromosome_db.to_records( + index=False, column_dtypes=dtype + ): + IH.write(record.tobytes()) + progress.update(writing_track, advance=1/chromosome_db.shape[0]) + progress.update(chromosome_track, advance=1/len(chromosome_data)) + + with open(os.path.join(args.output, "db.pickle"), "wb") as OH: + pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=args), OH) + + +def get_dtype_length(dtype) -> int: + return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + init_log(args) + os.mkdir(args.output) + + dbdf = pd.DataFrame(columns=["name"]) + dbdf.set_index("name", inplace=True) + + dbdf = populate_db(dbdf, args.hush, io.parse_hush, "hush") + dbdf = populate_db(dbdf, args.melting, io.parse_melting, "oligo-melting") + dbdf = populate_db(dbdf, args.secondary, io.parse_secondary, "OligoArrayAux") + + dbdf = reduce_sequence_columns(dbdf) + dbdf, dtype_sequence = add_sequence_details(dbdf) + dbdf, dtype_header = parse_record_headers(dbdf) + + dtype = dict() + dtype.update(const.dtype_melting) + dtype.update(const.dtype_hush) + dtype.update(const.dtype_secondary) + dtype.update(dtype_sequence) + dtype.update(dtype_header) + + for column in dtype.keys(): + if column not in dbdf.columns: + dbdf["column"] = np.repeat(np.nan, dbdf.shape[0]) + dbdf = dbdf.loc[:, const.database_columns] + + write_database(dbdf, dtype, args) From b3b6a9dd87fd64090e20e6a64c4a170b7419ef29 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 19:01:24 +0100 Subject: [PATCH 010/185] Added final message. --- ifpd2/scripts/query.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 0970b6e5..67a4e788 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -287,4 +287,5 @@ def run(args: argparse.Namespace) -> None: opsb.build(ow.walk_results) opsb.export() + logging.info("Done. :thumbs_up: :smiley:") logging.shutdown() From 2bfc2a2931327481a03e585ee7562b99d59d40b1 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 19:01:30 +0100 Subject: [PATCH 011/185] Cosmetic changes. --- ifpd2/scripts/db_make.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index c1291863..f9b03c5e 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -14,8 +14,7 @@ import os import pandas as pd # type: ignore import pickle -from rich.progress import Progress # type: ignore -from tqdm import tqdm # type: ignore +from rich.progress import Progress, track # type: ignore from typing import Callable, Dict, List, Optional, Set, Tuple @@ -157,8 +156,8 @@ def add_sequence_details(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] sequence_length_list: List[int] = [] gc_content_list: List[float] = [] - for sequence in tqdm( - df["sequence"].values, desc="calculating GC-content", leave=False + for sequence in track( + df["sequence"].values, description="calculating GC-content", transient=True ): sequence = sequence.upper() sequence_length_list.append(len(sequence)) @@ -183,7 +182,7 @@ def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] start_list: List[int] = [] end_list: List[int] = [] - for header in tqdm(db.index, desc="parsing record headers", leave=False): + for header in track(db.index, description="parsing record headers", transient=True): name, position = header.split(" ") name_list.append(name) name_length_set.add(len(name)) @@ -208,6 +207,10 @@ def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] return (db.astype(dtype), dtype) +def get_dtype_length(dtype) -> int: + return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) + + def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: @@ -217,7 +220,7 @@ def write_database( with Progress() as progress: chromosome_track = progress.add_task( - "exporting chromosome", total=len(chromosome_data) + "exporting chromosome", total=len(chromosome_data), transient=True ) for selected_chromosome in chromosome_data.keys(): chromosome_db = dbdf.loc[selected_chromosome == dbdf["chromosome"], :] @@ -228,22 +231,22 @@ def write_database( writing_track = progress.add_task( f"writing {selected_chromosome.decode()}.bin", total=chromosome_db.shape[0], + transient=True, ) for record in chromosome_db.to_records( index=False, column_dtypes=dtype ): IH.write(record.tobytes()) - progress.update(writing_track, advance=1/chromosome_db.shape[0]) - progress.update(chromosome_track, advance=1/len(chromosome_data)) + progress.update(writing_track, advance=1) + progress.update(chromosome_track, advance=1) + logging.info("writing db.pickle") with open(os.path.join(args.output, "db.pickle"), "wb") as OH: + args.parse = None + args.run = None pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=args), OH) -def get_dtype_length(dtype) -> int: - return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) - - @enable_rich_assert def run(args: argparse.Namespace) -> None: init_log(args) @@ -273,3 +276,5 @@ def run(args: argparse.Namespace) -> None: dbdf = dbdf.loc[:, const.database_columns] write_database(dbdf, dtype, args) + + logging.info("Done. :thumbs_up: :smiley:") From 3695b1154baa3c15a73ba5d89ce62c31f478816a Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 19:08:05 +0100 Subject: [PATCH 012/185] Added interface for database-related scripts. --- CHANGELOG.md | 13 +++++++++++-- ifpd2/scripts/__init__.py | 14 ++++++++++++-- ifpd2/scripts/db.py | 3 +++ ifpd2/scripts/db_dump.py | 36 ++++++++++++++++++++++++++++++++++++ ifpd2/scripts/db_info.py | 36 ++++++++++++++++++++++++++++++++++++ ifpd2/scripts/db_merge.py | 36 ++++++++++++++++++++++++++++++++++++ 6 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 ifpd2/scripts/db_dump.py create mode 100644 ifpd2/scripts/db_info.py create mode 100644 ifpd2/scripts/db_merge.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 7836eca2..60e6c33a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased -### ... -- ... +### Added +- `db make` entry point. +- `db dump` entry point. +- `db info` entry point +- `db merge` entry point. +- Module `io` with parsing functions for output generated via oligo-melting, hush, or OligoArrayAux. +- Assert for compatibility with a given dtype. (only max value currently checked) + +### Changed +- New database format. +- `dbchk` entry point changed to `db check`. ## [1.0.0-alpha] - 2021-02-26 diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index 583025c9..e5a7cdd2 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -4,7 +4,7 @@ """ from ifpd2.scripts import arguments, ifpd2 -from ifpd2.scripts import db, db_check, db_make +from ifpd2.scripts import db, db_check, db_dump, db_info, db_make, db_merge from ifpd2.scripts import query import logging @@ -16,4 +16,14 @@ handlers=[RichHandler(markup=True, rich_tracebacks=True)], ) -__all__ = ["arguments", "ifpd2", "db", "db_check", "db_make", "query"] +__all__ = [ + "arguments", + "ifpd2", + "db", + "db_check", + "db_dump", + "db_info", + "db_make", + "db_merge", + "query", +] diff --git a/ifpd2/scripts/db.py b/ifpd2/scripts/db.py index 3544d561..592e79c2 100644 --- a/ifpd2/scripts/db.py +++ b/ifpd2/scripts/db.py @@ -30,6 +30,9 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars ) scripts.db_check.init_parser(sub_subparsers) + scripts.db_dump.init_parser(sub_subparsers) + scripts.db_info.init_parser(sub_subparsers) scripts.db_make.init_parser(sub_subparsers) + scripts.db_merge.init_parser(sub_subparsers) return parser diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py new file mode 100644 index 00000000..894e74f3 --- /dev/null +++ b/ifpd2/scripts/db_dump.py @@ -0,0 +1,36 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.asserts import enable_rich_assert +from ifpd2.scripts import arguments as ap +import logging + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + "dump", + description=""" +Dumps a database to a tsv. +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Dump a database to tsv format.", + ) + + parser = ap.add_version_option(parser) + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + return args + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + raise NotImplementedError + logging.info("Done. :thumbs_up: :smiley:") diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py new file mode 100644 index 00000000..17ce78da --- /dev/null +++ b/ifpd2/scripts/db_info.py @@ -0,0 +1,36 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.asserts import enable_rich_assert +from ifpd2.scripts import arguments as ap +import logging + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + "info", + description=""" +Shows database details. +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Show database details.", + ) + + parser = ap.add_version_option(parser) + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + return args + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + raise NotImplementedError + logging.info("Done. :thumbs_up: :smiley:") diff --git a/ifpd2/scripts/db_merge.py b/ifpd2/scripts/db_merge.py new file mode 100644 index 00000000..844979e8 --- /dev/null +++ b/ifpd2/scripts/db_merge.py @@ -0,0 +1,36 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.asserts import enable_rich_assert +from ifpd2.scripts import arguments as ap +import logging + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + "merge", + description=""" +Merge multiple databases into one. +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Merge databases.", + ) + + parser = ap.add_version_option(parser) + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + return args + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + raise NotImplementedError + logging.info("Done. :thumbs_up: :smiley:") From 3fea6341a6758545a88db9dff49deefebe9e8cb2 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 19:08:42 +0100 Subject: [PATCH 013/185] Cleaned --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60e6c33a..d48cc72d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased ### Added -- `db make` entry point. -- `db dump` entry point. -- `db info` entry point -- `db merge` entry point. +- New entry points: `db make`, `db dump`, `db info`, and `db merge`. - Module `io` with parsing functions for output generated via oligo-melting, hush, or OligoArrayAux. - Assert for compatibility with a given dtype. (only max value currently checked) From 5436c94b8e4679a241042b3c16ee80089de12afb Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 20:55:09 +0100 Subject: [PATCH 014/185] Added basic info script --- ifpd2/scripts/db_info.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py index 17ce78da..6ce6f0f8 100644 --- a/ifpd2/scripts/db_info.py +++ b/ifpd2/scripts/db_info.py @@ -6,6 +6,8 @@ import argparse from ifpd2.asserts import enable_rich_assert from ifpd2.scripts import arguments as ap +import os +import pickle import logging @@ -19,6 +21,8 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars help="Show database details.", ) + parser.add_argument("input", type=str, help="Path to database folder (input).") + parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -27,10 +31,35 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars @enable_rich_assert def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + assert os.path.isdir(args.input), f"cannot find database folder: '{args.input}'" + assert os.path.isfile( + os.path.join(args.input, "db.pickle") + ), "db.pickle file is missing" return args @enable_rich_assert def run(args: argparse.Namespace) -> None: - raise NotImplementedError - logging.info("Done. :thumbs_up: :smiley:") + with open(os.path.join(args.input, "db.pickle"), "rb") as IH: + db_details = pickle.load(IH) + + logging.info(f"Database name: {db_details['args'].output}") + logging.info(f"Sequence max length: {db_details['dtype']['sequence'][2:]}") + logging.info("") + logging.info("[bold]## Input files[/bold]") + logging.info(f"hush files: {db_details['args'].hush}") + logging.info(f"oligo-melting files: {db_details['args'].melting}") + logging.info(f"OligoArrayAux files: {db_details['args'].secondary}") + logging.info("") + logging.info("[bold]## Chromosome details[/bold]") + logging.info(f"Expecting {len(db_details['chromosomes'])} chromosomes.") + logging.info("Chromosome sizes:") + for chromosome, size in db_details['chromosomes'].items(): + logging.info(f"\t{chromosome.decode()} => {size}") + + for chromosome in db_details['chromosomes'].keys(): + chromosome_path = os.path.join(args.input, f"{chromosome.decode()}.bin") + if not os.path.isfile(chromosome_path): + logging.warning(f"missing expected chromosome file: '{chromosome_path}'") + logging.info("") + logging.info("That's all! :smiley:") From a9837564c4934e23b2f3ec200f8291046f0c20c4 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 21:41:21 +0100 Subject: [PATCH 015/185] Added DataBase and Record classes --- ifpd2/__init__.py | 2 + ifpd2/database2.py | 122 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 ifpd2/database2.py diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index 6850e64c..a1b6f70a 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -6,6 +6,7 @@ from ifpd2.const import __version__ from ifpd2 import asserts, io from ifpd2 import database, walker +from ifpd2 import database2 from ifpd2 import oligo, probe, probe_set __all__ = [ @@ -14,6 +15,7 @@ "io", "database", "walker", + "database2", "oligo", "probe", "probe_set", diff --git a/ifpd2/database2.py b/ifpd2/database2.py new file mode 100644 index 00000000..22af7956 --- /dev/null +++ b/ifpd2/database2.py @@ -0,0 +1,122 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import copy +from ifpd2 import const +import logging +import numpy as np # type: ignore +import os +import pickle +from typing import Any, Dict, IO, List, Iterator + + +def get_dtype_length(dtype) -> int: + return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) + + +class Record(object): + """DataBase Record""" + + _data: Dict[str, Any] + + def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: + assert len(record) == get_dtype_length(column_dtypes) + + self._data = {} + current_location = 0 + for label in const.database_columns: + dtype = column_dtypes[label] + byte_size = get_dtype_length({label: dtype}) + + self._data[label] = np.frombuffer( + record[current_location : (current_location + byte_size)], dtype + )[0] + + current_location += byte_size + + def to_csv(self, sep: str = ",") -> str: + csv_fields: List[str] = [] + for x in const.database_columns: + data = self._data[x] + if isinstance(data, bytes): + csv_fields.append(str(data.decode())) + else: + csv_fields.append(str(data)) + return sep.join(csv_fields) + + def __init__(self, record: bytes, column_dtypes: Dict[str, str]): + super(Record, self).__init__() + self.__parse_bytes(record, column_dtypes) + + def __get__(self, key) -> Any: + if key not in const.database_columns: + raise KeyError(f"unrecognized key '{key}'") + else: + return self._data[key] + + def __repr__(self) -> str: + return str(self._data) + + +class DataBase(object): + """Buffering and checking class for ifpd2 database.""" + + _root: str + _details: Dict[str, Any] + _record_byte_size: int + + def __init__(self, path: str): + super(DataBase, self).__init__() + assert os.path.isdir(path), f"cannot find database folder '{path}'" + db_pickle_path = os.path.join(path, "db.pickle") + assert os.path.isfile(db_pickle_path), f"'db.pickle is missing in '{path}'" + + with open(db_pickle_path, "rb") as IH: + self._details = pickle.load(IH) + + for chromosome in self._details["chromosomes"].keys(): + chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") + assert os.path.isfile( + chromosome_path + ), f"missing expected chromosome file: '{chromosome_path}'" + + self._record_byte_size = get_dtype_length(self._details["dtype"]) + assert self._record_byte_size > 0 + + self._root = path + + @property + def chromosome_list(self) -> List[bytes]: + return list(self._details["chromosomes"]) + + @property + def chromosome_sizes(self): + return copy.copy(self._details["chromosomes"]) + + def log_details(self) -> None: + logging.info(f"Database name: {self._details['args'].output}") + logging.info(f"Sequence max length: {self._details['dtype']['sequence'][2:]}") + logging.info("") + logging.info("[bold]## Input files[/bold]") + logging.info(f"hush files: {self._details['args'].hush}") + logging.info(f"oligo-melting files: {self._details['args'].melting}") + logging.info(f"OligoArrayAux files: {self._details['args'].secondary}") + logging.info("") + logging.info("[bold]## Chromosome details[/bold]") + logging.info(f"Expecting {len(self._details['chromosomes'])} chromosomes.") + logging.info("Chromosome sizes:") + for chromosome, size in self._details["chromosomes"].items(): + logging.info(f"\t{chromosome.decode()} => {size}") + + def __read_next_record(self, IH: IO) -> bytes: + return IH.read(self._record_byte_size) + + def walk_chromosome(self, chromosome: bytes) -> Iterator[Record]: + assert chromosome in self._details["chromosomes"].keys() + with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: + record = self.__read_next_record(IH) + while 0 != len(record): + yield Record(record, self._details["dtype"]) + record = self.__read_next_record(IH) From 84cdbe561f0e7803e71b393c6c552f09de4f6182 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 21:41:29 +0100 Subject: [PATCH 016/185] Simplified using DataBase class. --- ifpd2/scripts/db_info.py | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py index 6ce6f0f8..156716a5 100644 --- a/ifpd2/scripts/db_info.py +++ b/ifpd2/scripts/db_info.py @@ -5,9 +5,9 @@ import argparse from ifpd2.asserts import enable_rich_assert +from ifpd2.database2 import DataBase from ifpd2.scripts import arguments as ap import os -import pickle import logging @@ -40,26 +40,7 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: @enable_rich_assert def run(args: argparse.Namespace) -> None: - with open(os.path.join(args.input, "db.pickle"), "rb") as IH: - db_details = pickle.load(IH) - - logging.info(f"Database name: {db_details['args'].output}") - logging.info(f"Sequence max length: {db_details['dtype']['sequence'][2:]}") - logging.info("") - logging.info("[bold]## Input files[/bold]") - logging.info(f"hush files: {db_details['args'].hush}") - logging.info(f"oligo-melting files: {db_details['args'].melting}") - logging.info(f"OligoArrayAux files: {db_details['args'].secondary}") - logging.info("") - logging.info("[bold]## Chromosome details[/bold]") - logging.info(f"Expecting {len(db_details['chromosomes'])} chromosomes.") - logging.info("Chromosome sizes:") - for chromosome, size in db_details['chromosomes'].items(): - logging.info(f"\t{chromosome.decode()} => {size}") - - for chromosome in db_details['chromosomes'].keys(): - chromosome_path = os.path.join(args.input, f"{chromosome.decode()}.bin") - if not os.path.isfile(chromosome_path): - logging.warning(f"missing expected chromosome file: '{chromosome_path}'") + DB = DataBase(args.input) + DB.log_details() logging.info("") logging.info("That's all! :smiley:") From 02c87f49459cc7f4743c2d1ad5c4407288cb3f54 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 21:41:53 +0100 Subject: [PATCH 017/185] Prepared to store other information on chromosomes (e.g., record no) --- ifpd2/scripts/db_make.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index f9b03c5e..91d4142f 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -4,6 +4,7 @@ """ import argparse +from collections import defaultdict import copy from ifpd2 import asserts as ass from ifpd2.asserts import enable_rich_assert @@ -15,7 +16,7 @@ import pandas as pd # type: ignore import pickle from rich.progress import Progress, track # type: ignore -from typing import Callable, Dict, List, Optional, Set, Tuple +from typing import Callable, DefaultDict, Dict, List, Optional, Set, Tuple def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: @@ -207,16 +208,12 @@ def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] return (db.astype(dtype), dtype) -def get_dtype_length(dtype) -> int: - return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) - - def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: - chromosome_data: Dict[bytes, int] = dict( - [(x, 0) for x in set(dbdf["chromosome"].values)] - ) + chromosome_data: DefaultDict[bytes, Dict[str, int]] = defaultdict(lambda: {}) + for chromosome in set(dbdf["chromosome"].values): + chromosome_data[chromosome] with Progress() as progress: chromosome_track = progress.add_task( From 578c2be21ac46261a7db8d153192279c78c3f745 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 21:42:05 +0100 Subject: [PATCH 018/185] Implemented script to dump tsv to std. --- ifpd2/scripts/db_dump.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index 894e74f3..6f553983 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -5,8 +5,9 @@ import argparse from ifpd2.asserts import enable_rich_assert +from ifpd2.database2 import DataBase from ifpd2.scripts import arguments as ap -import logging +from tqdm import tqdm # type: ignore def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: @@ -19,6 +20,8 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars help="Dump a database to tsv format.", ) + parser.add_argument("input", type=str, help="Path to database folder (input).") + parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -32,5 +35,7 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: @enable_rich_assert def run(args: argparse.Namespace) -> None: - raise NotImplementedError - logging.info("Done. :thumbs_up: :smiley:") + DB = DataBase(args.input) + for chromosome in DB.chromosome_list: + for record in tqdm(DB.walk_chromosome(chromosome)): + print(record.to_csv("\t")) From 7dc0307d5960db752bad46aef51e7fefb8b1948e Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 22:15:17 +0100 Subject: [PATCH 019/185] Updated chromosome-related asserts, logs, and properties --- ifpd2/database2.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index 22af7956..735d702c 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -76,11 +76,13 @@ def __init__(self, path: str): with open(db_pickle_path, "rb") as IH: self._details = pickle.load(IH) - for chromosome in self._details["chromosomes"].keys(): + for chromosome, details in self._details["chromosomes"].items(): chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") assert os.path.isfile( chromosome_path ), f"missing expected chromosome file: '{chromosome_path}'" + assert "size" in details, f"missing size information for '{chromosome}'" + assert "recordno" in details, f"missing size information for '{chromosome}'" self._record_byte_size = get_dtype_length(self._details["dtype"]) assert self._record_byte_size > 0 @@ -92,8 +94,22 @@ def chromosome_list(self) -> List[bytes]: return list(self._details["chromosomes"]) @property - def chromosome_sizes(self): - return copy.copy(self._details["chromosomes"]) + def chromosome_sizes(self) -> Dict[bytes, int]: + return dict( + [ + (name, details["size"]) + for name, details in self._details["chromosomes"].items() + ] + ) + + @property + def chromosome_recordnos(self) -> Dict[bytes, int]: + return dict( + [ + (name, details["recordno"]) + for name, details in self._details["chromosomes"].items() + ] + ) def log_details(self) -> None: logging.info(f"Database name: {self._details['args'].output}") @@ -106,9 +122,15 @@ def log_details(self) -> None: logging.info("") logging.info("[bold]## Chromosome details[/bold]") logging.info(f"Expecting {len(self._details['chromosomes'])} chromosomes.") - logging.info("Chromosome sizes:") - for chromosome, size in self._details["chromosomes"].items(): - logging.info(f"\t{chromosome.decode()} => {size}") + logging.info("Chromosomes:") + for chromosome, details in self._details["chromosomes"].items(): + empty_label = "".join([" " for c in chromosome.decode()]) + logging.info(f"\t{chromosome.decode()} => size : {details['size']}") + logging.info(f"\t{empty_label} => recordno : {details['recordno']}") + logging.info("") + logging.info("[bold]Record details[/bold]") + logging.info(f"Record size in bytes: {self._record_byte_size}") + logging.info(f"Dtype: {self._details['dtype']}") def __read_next_record(self, IH: IO) -> bytes: return IH.read(self._record_byte_size) From 23cb4a84ca77f6c77be4ffb8d80b0297ec56240d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 22:15:34 +0100 Subject: [PATCH 020/185] Added header printing and tqdm progression --- ifpd2/scripts/db_dump.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index 6f553983..4d5f44dc 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -5,6 +5,7 @@ import argparse from ifpd2.asserts import enable_rich_assert +from ifpd2 import const from ifpd2.database2 import DataBase from ifpd2.scripts import arguments as ap from tqdm import tqdm # type: ignore @@ -36,6 +37,9 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: @enable_rich_assert def run(args: argparse.Namespace) -> None: DB = DataBase(args.input) + print("\t".join(const.database_columns)) for chromosome in DB.chromosome_list: - for record in tqdm(DB.walk_chromosome(chromosome)): + for record in tqdm( + DB.walk_chromosome(chromosome), total=DB.chromosome_recordnos[chromosome] + ): print(record.to_csv("\t")) From 876f5bf0b003e09661ce0df69b19d0c583bae007 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 22:16:02 +0100 Subject: [PATCH 021/185] Added chromosome prefix option. Switched from defaultdict to dict for pickling --- ifpd2/scripts/db_make.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index 91d4142f..afba1f17 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -4,7 +4,6 @@ """ import argparse -from collections import defaultdict import copy from ifpd2 import asserts as ass from ifpd2.asserts import enable_rich_assert @@ -16,7 +15,7 @@ import pandas as pd # type: ignore import pickle from rich.progress import Progress, track # type: ignore -from typing import Callable, DefaultDict, Dict, List, Optional, Set, Tuple +from typing import Callable, Dict, List, Optional, Set, Tuple def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: @@ -72,6 +71,16 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars help="Path to OligoArrayAux output. Format details above.", ) + advanced = parser.add_argument_group("advanced arguments") + advanced.add_argument( + "-p", + "--prefix", + metavar="chromPrefix", + default="", + type=str, + help="Prefix to be added to chromosome labels. Default: ''.", + ) + parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -80,6 +89,7 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars def init_log(args: argparse.Namespace) -> None: logging.info(f"output folder: '{args.output}'") + logging.info(f"chromosome prefix: '{args.prefix}'") if args.hush is not None: logging.info(f"hush: {args.hush}") if args.melting is not None: @@ -174,7 +184,9 @@ def add_sequence_details(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] return (df.astype(dtype), dtype) -def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: +def parse_record_headers( + db: pd.DataFrame, chromosome_prefix: str = "" +) -> Tuple[pd.DataFrame, Dict[str, str]]: logging.info("adding header feature columns: name, chromosome, start, end") name_list: List[str] = [] name_length_set: Set[int] = set() @@ -188,8 +200,8 @@ def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] name_list.append(name) name_length_set.add(len(name)) chromosome, extremes = position.split("=")[1].split(":") - chromosome_list.append(chromosome) - chromosome_length_set.add(len(chromosome)) + chromosome_list.append(f"{chromosome_prefix}{chromosome}") + chromosome_length_set.add(len(f"{chromosome_prefix}{chromosome}")) start, end = [int(x) for x in extremes.split("-")] start_list.append(start) end_list.append(end) @@ -211,22 +223,23 @@ def parse_record_headers(db: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: - chromosome_data: DefaultDict[bytes, Dict[str, int]] = defaultdict(lambda: {}) + chromosome_data: Dict[bytes, Dict[str, int]] = {} for chromosome in set(dbdf["chromosome"].values): - chromosome_data[chromosome] + chromosome_data[chromosome] = {} with Progress() as progress: chromosome_track = progress.add_task( "exporting chromosome", total=len(chromosome_data), transient=True ) - for selected_chromosome in chromosome_data.keys(): - chromosome_db = dbdf.loc[selected_chromosome == dbdf["chromosome"], :] - chromosome_data[selected_chromosome] = chromosome_db["end"].values.max() + for selected_chrom in chromosome_data.keys(): + chromosome_db = dbdf.loc[selected_chrom == dbdf["chromosome"], :] + chromosome_data[selected_chrom]["size"] = chromosome_db["end"].values.max() + chromosome_data[selected_chrom]["recordno"] = chromosome_db.shape[0] with open( - os.path.join(args.output, f"{selected_chromosome.decode()}.bin"), "wb" + os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" ) as IH: writing_track = progress.add_task( - f"writing {selected_chromosome.decode()}.bin", + f"writing {selected_chrom.decode()}.bin", total=chromosome_db.shape[0], transient=True, ) @@ -258,7 +271,7 @@ def run(args: argparse.Namespace) -> None: dbdf = reduce_sequence_columns(dbdf) dbdf, dtype_sequence = add_sequence_details(dbdf) - dbdf, dtype_header = parse_record_headers(dbdf) + dbdf, dtype_header = parse_record_headers(dbdf, args.prefix) dtype = dict() dtype.update(const.dtype_melting) From 85b5ea4137e8c803f60d18a05dacef5e69812ad6 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 4 Mar 2021 22:30:12 +0100 Subject: [PATCH 022/185] Added dump description --- ifpd2/scripts/db_dump.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index 4d5f44dc..5fdac400 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -40,6 +40,8 @@ def run(args: argparse.Namespace) -> None: print("\t".join(const.database_columns)) for chromosome in DB.chromosome_list: for record in tqdm( - DB.walk_chromosome(chromosome), total=DB.chromosome_recordnos[chromosome] + DB.walk_chromosome(chromosome), + desc=f"dumping '{chromosome.decode()}'", + total=DB.chromosome_recordnos[chromosome], ): print(record.to_csv("\t")) From 1a6fbe045832cb08fa2e92d17626e810ba7ed01d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 08:19:53 +0100 Subject: [PATCH 023/185] Added record sorting step. --- ifpd2/scripts/db_make.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index afba1f17..c1dd61f0 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -233,6 +233,12 @@ def write_database( ) for selected_chrom in chromosome_data.keys(): chromosome_db = dbdf.loc[selected_chrom == dbdf["chromosome"], :] + + logging.info(f"sorting records for {chromosome.decode()}") + chromosome_db.sort_values( + by="start", axis=1, kind="mergesort", inplace=True + ) + chromosome_data[selected_chrom]["size"] = chromosome_db["end"].values.max() chromosome_data[selected_chrom]["recordno"] = chromosome_db.shape[0] with open( From 7e21bfdeccf9c76051a24b699d17ad35175b8c30 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 09:44:35 +0100 Subject: [PATCH 024/185] Added sorted check --- ifpd2/scripts/db_check.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/ifpd2/scripts/db_check.py b/ifpd2/scripts/db_check.py index 81fbf10f..9e96105a 100644 --- a/ifpd2/scripts/db_check.py +++ b/ifpd2/scripts/db_check.py @@ -5,25 +5,25 @@ import argparse from ifpd2.asserts import enable_rich_assert +from ifpd2.database2 import DataBase from ifpd2.scripts import arguments as ap +import logging import os +from tqdm import tqdm # type: ignore def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: parser = subparsers.add_parser( "check", description=""" -Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta, aspernatur, -natus. Possimus recusandae distinctio, voluptatem fuga delectus laudantium ut, -inventore culpa sit amet ullam officiis, tenetur nobis eius vitae dolore. +Check database integrity. """, formatter_class=argparse.RawDescriptionHelpFormatter, - help="Check integrity of a database.", + help="Check database integrity.", ) - parser.add_argument( - "database", metavar="database", type=str, help="Path to database folder." - ) + parser.add_argument("input", type=str, help="Path to database folder (input).") + parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -32,10 +32,23 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars @enable_rich_assert def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert os.path.isdir(args.database), f"database folder not found: {args.database}" + assert os.path.isdir(args.input), f"cannot find database folder: '{args.input}'" + assert os.path.isfile( + os.path.join(args.input, "db.pickle") + ), "db.pickle file is missing" return args @enable_rich_assert def run(args: argparse.Namespace) -> None: - raise NotImplementedError + DB = DataBase(args.input) + for chromosome in DB.chromosome_list: + previous_position = -1 + for record in tqdm( + DB.walk_chromosome(chromosome), + desc=f"Checking sorting '{chromosome.decode()}'", + total=DB.chromosome_recordnos[chromosome], + ): + assert record["start"] > previous_position + previous_position = record["start"] + logging.info("That's all! :smiley:") From d010151d382635f738c99852a8a60ebaf694843d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 09:44:45 +0100 Subject: [PATCH 025/185] Cosmetic --- ifpd2/scripts/db_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py index 156716a5..3bf9b271 100644 --- a/ifpd2/scripts/db_info.py +++ b/ifpd2/scripts/db_info.py @@ -7,8 +7,8 @@ from ifpd2.asserts import enable_rich_assert from ifpd2.database2 import DataBase from ifpd2.scripts import arguments as ap -import os import logging +import os def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: From 947adab7a71ec5c3b065515165f2ad11d833ce8c Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 09:45:11 +0100 Subject: [PATCH 026/185] Added ChromosomeData and ChromosomeIndex classes --- ifpd2/database2.py | 125 ++++++++++++++++++++++++++++++++++++--- ifpd2/scripts/db_make.py | 43 ++++++++++---- 2 files changed, 150 insertions(+), 18 deletions(-) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index 735d702c..ffcb77ec 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -9,18 +9,133 @@ import numpy as np # type: ignore import os import pickle -from typing import Any, Dict, IO, List, Iterator +import pandas as pd # type: ignore +from rich.progress import track # type: ignore +from typing import Any, Dict, IO, Iterator, List, Set, Tuple def get_dtype_length(dtype) -> int: return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) +class ChromosomeIndex(object): + """ChromosomeIndex""" + + _bin_size: int + _record_byte_size: int + _index: Dict[int, Tuple[int, int]] + + def __init__(self, bin_size: int, dtype: Dict[str, str]): + super(ChromosomeIndex, self).__init__() + assert bin_size >= 1 + self._bin_size = bin_size + self._record_byte_size = get_dtype_length(dtype) + assert self._record_byte_size > 0 + + @property + def record_byte_size(self): + return self._record_byte_size + + def __init_index(self, chrom_db: pd.DataFrame) -> None: + chrom_size_nt = chrom_db["end"].values.max() + for bin_id in range(0, chrom_size_nt, self._bin_size): + self._index[bin_id] = (0, 0) + + def build(self, chrom_db: pd.DataFrame) -> None: + for colname in ("chromosome", "start", "end"): + assert colname in chrom_db.columns, f"missing '{colname}' column" + + self.__init_index(chrom_db) + + chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) + assert 1 == len(chromosome_set) + chromosome = list(chromosome_set)[0].decode() + + current_position = -1 + for i in track( + range(chrom_db.shape[0]), + description=f"building '{chromosome}' index", + transient=True, + ): + position_in_nt = chrom_db["start"].values[i] + assert position_in_nt > current_position + current_position = position_in_nt + + position_in_bytes = self._record_byte_size * i + binned_to = position_in_nt // self._bin_size + + bin_start, bin_end = list(self._index[binned_to]) + if bin_start > position_in_bytes: + bin_start = position_in_bytes + if bin_end < position_in_bytes: + bin_end = position_in_bytes + self._index[binned_to] = (bin_start, bin_end) + + def __getitem__(self, position_in_nt: int) -> int: + binned_to = position_in_nt // self._bin_size + return self._index[binned_to][0] + + +class ChromosomeData(object): + """ChromosomeData""" + + __allowed_fields = ("recordno", "size_nt", "size_bytes") + _data: Dict[bytes, Dict[str, Any]] + _index: ChromosomeIndex + + def __init__( + self, + chromosome_set: Set[bytes], + dtype: Dict[str, str], + index_bin_size: int = 100000, + ): + super(ChromosomeData, self).__init__() + for chromosome in set(chromosome_set): + self._data[chromosome] = {} + self._index = ChromosomeIndex(index_bin_size, dtype) + + def __len__(self) -> int: + return len(self._data) + + def __getitem__(self, key: bytes) -> Dict[str, int]: + return copy.copy(self._data[key]) + + def keys(self) -> List[bytes]: + return list(self._data.keys()) + + def set(self, chromosome: bytes, key: str, value: int) -> None: + if chromosome not in self._data: + raise KeyError(f"key '{chromosome.decode()}' not found") + if key not in self.__allowed_fields: + raise KeyError(f"key '{key}' not found") + self._data[chromosome][key] = value + + def populate(self, chrom_db: pd.DataFrame) -> None: + assert "chromosome" in chrom_db.columns + selected_chrom = chrom_db["chromosome"][0] + self.set(selected_chrom, "recordno", chrom_db.shape[0]) + self.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) + self.set( + selected_chrom, + "size_bytes", + chrom_db.shape[0] * self._index.record_byte_size, + ) + self._index.build(chrom_db) + + class Record(object): """DataBase Record""" _data: Dict[str, Any] + def __init__(self, record: bytes, column_dtypes: Dict[str, str]): + super(Record, self).__init__() + self.__parse_bytes(record, column_dtypes) + + @property + def data(self) -> Dict[str, Any]: + return copy.copy(self._data) + def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: assert len(record) == get_dtype_length(column_dtypes) @@ -46,15 +161,11 @@ def to_csv(self, sep: str = ",") -> str: csv_fields.append(str(data)) return sep.join(csv_fields) - def __init__(self, record: bytes, column_dtypes: Dict[str, str]): - super(Record, self).__init__() - self.__parse_bytes(record, column_dtypes) - - def __get__(self, key) -> Any: + def __getitem__(self, key: str) -> Any: if key not in const.database_columns: raise KeyError(f"unrecognized key '{key}'") else: - return self._data[key] + return self.data[key] def __repr__(self) -> str: return str(self._data) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index c1dd61f0..f0044773 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -7,7 +7,7 @@ import copy from ifpd2 import asserts as ass from ifpd2.asserts import enable_rich_assert -from ifpd2 import const, io +from ifpd2 import const, database2 as db2, io from ifpd2.scripts import arguments as ap import logging import numpy as np # type: ignore @@ -80,6 +80,14 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars type=str, help="Prefix to be added to chromosome labels. Default: ''.", ) + advanced.add_argument( + "-b", + "--binsize", + metavar="indexBin", + default=1000000, + type=int, + help="Binning for the index.", + ) parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -220,27 +228,40 @@ def parse_record_headers( return (db.astype(dtype), dtype) +def populate_chromosome_data( + chrom_data: db2.ChromosomeData, chrom_db: pd.DataFrame, dtype: Dict[str, str] +) -> db2.ChromosomeData: + assert "chromosome" in chrom_db.columns + selected_chrom = chrom_db["chromosome"][0] + chrom_data.set(selected_chrom, "recordno", chrom_db.shape[0]) + chrom_data.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) + chrom_data.set( + selected_chrom, + "size_bytes", + chrom_db.shape[0] * db2.get_dtype_length(dtype), + ) + return chrom_data + + def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: - chromosome_data: Dict[bytes, Dict[str, int]] = {} - for chromosome in set(dbdf["chromosome"].values): - chromosome_data[chromosome] = {} + chrom_data = db2.ChromosomeData(set(dbdf["chromosome"].values), dtype, args.binsize) with Progress() as progress: chromosome_track = progress.add_task( - "exporting chromosome", total=len(chromosome_data), transient=True + "exporting chromosome", total=len(chrom_data), transient=True ) - for selected_chrom in chromosome_data.keys(): + for selected_chrom in chrom_data.keys(): chromosome_db = dbdf.loc[selected_chrom == dbdf["chromosome"], :] - logging.info(f"sorting records for {chromosome.decode()}") + logging.info(f"sorting records for {selected_chrom.decode()}") chromosome_db.sort_values( - by="start", axis=1, kind="mergesort", inplace=True + by="start", axis=0, kind="mergesort", inplace=True ) - chromosome_data[selected_chrom]["size"] = chromosome_db["end"].values.max() - chromosome_data[selected_chrom]["recordno"] = chromosome_db.shape[0] + chrom_data.populate(chromosome_db) + with open( os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" ) as IH: @@ -260,7 +281,7 @@ def write_database( with open(os.path.join(args.output, "db.pickle"), "wb") as OH: args.parse = None args.run = None - pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=args), OH) + pickle.dump(dict(chromosomes=chrom_data, dtype=dtype, args=args), OH) @enable_rich_assert From 302360bdfa061ad073567b8803ef64ac31d61921 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 09:49:32 +0100 Subject: [PATCH 027/185] Added missing declaration and exposed chromosome index --- ifpd2/database2.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index ffcb77ec..73dc397d 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -90,10 +90,15 @@ def __init__( index_bin_size: int = 100000, ): super(ChromosomeData, self).__init__() + self._data = {} for chromosome in set(chromosome_set): self._data[chromosome] = {} self._index = ChromosomeIndex(index_bin_size, dtype) + @property + def index(self): + return self._index + def __len__(self) -> int: return len(self._data) From a252cab6c52132e0059c532bfe95ca2a1692dd06 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 10:08:54 +0100 Subject: [PATCH 028/185] Switched from rich to tqdm. Fixed index visibility in wrappers --- ifpd2/database2.py | 93 ++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index 73dc397d..a8a49a9b 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -10,7 +10,7 @@ import os import pickle import pandas as pd # type: ignore -from rich.progress import track # type: ignore +from tqdm import tqdm # type: ignore from typing import Any, Dict, IO, Iterator, List, Set, Tuple @@ -22,26 +22,20 @@ class ChromosomeIndex(object): """ChromosomeIndex""" _bin_size: int - _record_byte_size: int _index: Dict[int, Tuple[int, int]] - def __init__(self, bin_size: int, dtype: Dict[str, str]): + def __init__(self, bin_size: int): super(ChromosomeIndex, self).__init__() assert bin_size >= 1 self._bin_size = bin_size - self._record_byte_size = get_dtype_length(dtype) - assert self._record_byte_size > 0 - - @property - def record_byte_size(self): - return self._record_byte_size def __init_index(self, chrom_db: pd.DataFrame) -> None: + self._index = {} chrom_size_nt = chrom_db["end"].values.max() for bin_id in range(0, chrom_size_nt, self._bin_size): self._index[bin_id] = (0, 0) - def build(self, chrom_db: pd.DataFrame) -> None: + def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: for colname in ("chromosome", "start", "end"): assert colname in chrom_db.columns, f"missing '{colname}' column" @@ -52,16 +46,16 @@ def build(self, chrom_db: pd.DataFrame) -> None: chromosome = list(chromosome_set)[0].decode() current_position = -1 - for i in track( + for i in tqdm( range(chrom_db.shape[0]), - description=f"building '{chromosome}' index", - transient=True, + desc=f"building '{chromosome}' index", + leave=False, ): position_in_nt = chrom_db["start"].values[i] assert position_in_nt > current_position current_position = position_in_nt - position_in_bytes = self._record_byte_size * i + position_in_bytes = record_byte_size * i binned_to = position_in_nt // self._bin_size bin_start, bin_end = list(self._index[binned_to]) @@ -72,6 +66,7 @@ def build(self, chrom_db: pd.DataFrame) -> None: self._index[binned_to] = (bin_start, bin_end) def __getitem__(self, position_in_nt: int) -> int: + assert self._index is not None binned_to = position_in_nt // self._bin_size return self._index[binned_to][0] @@ -80,8 +75,8 @@ class ChromosomeData(object): """ChromosomeData""" __allowed_fields = ("recordno", "size_nt", "size_bytes") - _data: Dict[bytes, Dict[str, Any]] - _index: ChromosomeIndex + _data: Dict[bytes, Tuple[Dict[str, Any], ChromosomeIndex]] + _record_byte_size: int def __init__( self, @@ -90,30 +85,54 @@ def __init__( index_bin_size: int = 100000, ): super(ChromosomeData, self).__init__() + + self._record_byte_size = get_dtype_length(dtype) + assert self._record_byte_size > 0 + self._data = {} for chromosome in set(chromosome_set): - self._data[chromosome] = {} - self._index = ChromosomeIndex(index_bin_size, dtype) + self._data[chromosome] = ({}, ChromosomeIndex(index_bin_size)) @property - def index(self): - return self._index + def record_byte_size(self) -> int: + return self._record_byte_size def __len__(self) -> int: return len(self._data) - def __getitem__(self, key: bytes) -> Dict[str, int]: - return copy.copy(self._data[key]) - def keys(self) -> List[bytes]: return list(self._data.keys()) + @property + def sizes_nt(self) -> Dict[bytes, int]: + return dict( + [(name, details[0]["size_nt"]) for name, details in self._data.items()] + ) + + @property + def sizes_bytes(self) -> Dict[bytes, int]: + return dict( + [(name, details[0]["size_bytes"]) for name, details in self._data.items()] + ) + + @property + def recordnos(self) -> Dict[bytes, int]: + return dict( + [(name, details[0]["recordno"]) for name, details in self._data.items()] + ) + def set(self, chromosome: bytes, key: str, value: int) -> None: if chromosome not in self._data: raise KeyError(f"key '{chromosome.decode()}' not found") if key not in self.__allowed_fields: raise KeyError(f"key '{key}' not found") - self._data[chromosome][key] = value + self._data[chromosome][0][key] = value + + def get_details(self, chromosome: bytes) -> Dict[str, int]: + return copy.copy(self._data[chromosome][0]) + + def get_index(self, chromosome: bytes) -> ChromosomeIndex: + return copy.copy(self._data[chromosome][1]) def populate(self, chrom_db: pd.DataFrame) -> None: assert "chromosome" in chrom_db.columns @@ -123,9 +142,9 @@ def populate(self, chrom_db: pd.DataFrame) -> None: self.set( selected_chrom, "size_bytes", - chrom_db.shape[0] * self._index.record_byte_size, + chrom_db.shape[0] * self._record_byte_size, ) - self._index.build(chrom_db) + self._data[selected_chrom][1].build(chrom_db, self._record_byte_size) class Record(object): @@ -207,25 +226,19 @@ def __init__(self, path: str): @property def chromosome_list(self) -> List[bytes]: - return list(self._details["chromosomes"]) + return self._details["chromosomes"].keys() @property - def chromosome_sizes(self) -> Dict[bytes, int]: - return dict( - [ - (name, details["size"]) - for name, details in self._details["chromosomes"].items() - ] - ) + def chromosome_sizes_nt(self) -> Dict[bytes, int]: + return self._details["chromosomes"].sizes_nt() + + @property + def chromosome_sizes_bytes(self) -> Dict[bytes, int]: + return self._details["chromosomes"].sizes_bytes() @property def chromosome_recordnos(self) -> Dict[bytes, int]: - return dict( - [ - (name, details["recordno"]) - for name, details in self._details["chromosomes"].items() - ] - ) + return self._details["chromosomes"].recordnos() def log_details(self) -> None: logging.info(f"Database name: {self._details['args'].output}") From 37b7247d55456846939ede30d41b37cf3b8436a7 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 10:09:04 +0100 Subject: [PATCH 029/185] Added options for region dumping. --- ifpd2/scripts/db_dump.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index 5fdac400..c35e5557 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -23,6 +23,20 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars parser.add_argument("input", type=str, help="Path to database folder (input).") + parser.add_argument( + "--chrom", + type=str, + help="Database feature to dump.", + ) + parser.add_argument( + "--region", + metavar=("chromStart", "chromEnd"), + type=int, + nargs=2, + help="""Start and end locations (space-separated) of the region of interest. + When a region is not provided, the whole feature is dumped.""", + ) + parser = ap.add_version_option(parser) parser.set_defaults(parse=parse_arguments, run=run) @@ -31,12 +45,27 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars @enable_rich_assert def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + if args.chrom is None and args.region is not None: + raise Exception("cannot use --region without --chrom. Stopped.") + if args.region is not None: + assert ( + args.region[0] < args.region[1] + ), "region end should be greater than region start" return args @enable_rich_assert def run(args: argparse.Namespace) -> None: DB = DataBase(args.input) + + chromosome_list = DB.chromosome_list + if args.chrom is not None: + assert args.chrom in chromosome_list, f"'{args.chrom}' not found" + chromosome_list = [args.chrom] + if args.region is not None: + chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] + assert args.region[0] < chrom_size_nt + print("\t".join(const.database_columns)) for chromosome in DB.chromosome_list: for record in tqdm( From 6890bfd6942853863bdc76416cc1742a154fd58e Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 10:09:13 +0100 Subject: [PATCH 030/185] Removed redundant function --- ifpd2/scripts/db_make.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index f0044773..99f3d746 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -228,21 +228,6 @@ def parse_record_headers( return (db.astype(dtype), dtype) -def populate_chromosome_data( - chrom_data: db2.ChromosomeData, chrom_db: pd.DataFrame, dtype: Dict[str, str] -) -> db2.ChromosomeData: - assert "chromosome" in chrom_db.columns - selected_chrom = chrom_db["chromosome"][0] - chrom_data.set(selected_chrom, "recordno", chrom_db.shape[0]) - chrom_data.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) - chrom_data.set( - selected_chrom, - "size_bytes", - chrom_db.shape[0] * db2.get_dtype_length(dtype), - ) - return chrom_data - - def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: From f5bd5e009f0a9ed2038bc3e845aeafacc5d3e51a Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 11:43:40 +0100 Subject: [PATCH 031/185] Implemented database jumping and window walk --- ifpd2/database2.py | 52 +++++++++++++++++++++++++++++++--------- ifpd2/scripts/db_dump.py | 49 ++++++++++++++++++++++++------------- 2 files changed, 73 insertions(+), 28 deletions(-) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index a8a49a9b..5339e64f 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -32,8 +32,8 @@ def __init__(self, bin_size: int): def __init_index(self, chrom_db: pd.DataFrame) -> None: self._index = {} chrom_size_nt = chrom_db["end"].values.max() - for bin_id in range(0, chrom_size_nt, self._bin_size): - self._index[bin_id] = (0, 0) + for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): + self._index[bin_id] = (np.inf, 0) def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: for colname in ("chromosome", "start", "end"): @@ -68,7 +68,13 @@ def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: def __getitem__(self, position_in_nt: int) -> int: assert self._index is not None binned_to = position_in_nt // self._bin_size - return self._index[binned_to][0] + if binned_to not in self._index: + return -1 + + position_in_bytes = self._index[binned_to][0] + if not np.isfinite(position_in_bytes): + return -1 + return position_in_bytes class ChromosomeData(object): @@ -146,6 +152,18 @@ def populate(self, chrom_db: pd.DataFrame) -> None: ) self._data[selected_chrom][1].build(chrom_db, self._record_byte_size) + def __check__(self) -> None: + for chromosome, (details, _) in self._data.items(): + assert ( + "size_nt" in details + ), f"missing nt size information for '{chromosome.decode()}'" + assert ( + "size_bytes" in details + ), f"missing byte size information for '{chromosome.decode()}'" + assert ( + "recordno" in details + ), f"missing size information for '{chromosome.decode()}'" + class Record(object): """DataBase Record""" @@ -211,13 +229,14 @@ def __init__(self, path: str): with open(db_pickle_path, "rb") as IH: self._details = pickle.load(IH) - for chromosome, details in self._details["chromosomes"].items(): + assert "chromosomes" in self._details + assert isinstance(self._details["chromosomes"], ChromosomeData) + self._details["chromosomes"].__check__() + for chromosome in self.chromosome_list: chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") assert os.path.isfile( chromosome_path ), f"missing expected chromosome file: '{chromosome_path}'" - assert "size" in details, f"missing size information for '{chromosome}'" - assert "recordno" in details, f"missing size information for '{chromosome}'" self._record_byte_size = get_dtype_length(self._details["dtype"]) assert self._record_byte_size > 0 @@ -230,15 +249,15 @@ def chromosome_list(self) -> List[bytes]: @property def chromosome_sizes_nt(self) -> Dict[bytes, int]: - return self._details["chromosomes"].sizes_nt() + return self._details["chromosomes"].sizes_nt @property def chromosome_sizes_bytes(self) -> Dict[bytes, int]: - return self._details["chromosomes"].sizes_bytes() + return self._details["chromosomes"].sizes_bytes @property def chromosome_recordnos(self) -> Dict[bytes, int]: - return self._details["chromosomes"].recordnos() + return self._details["chromosomes"].recordnos def log_details(self) -> None: logging.info(f"Database name: {self._details['args'].output}") @@ -264,10 +283,21 @@ def log_details(self) -> None: def __read_next_record(self, IH: IO) -> bytes: return IH.read(self._record_byte_size) - def walk_chromosome(self, chromosome: bytes) -> Iterator[Record]: + def walk_chromosome( + self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 + ) -> Iterator[Record]: assert chromosome in self._details["chromosomes"].keys() with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: + if start_from_nt > 0: + position_in_bytes = self._details["chromosomes"].get_index(chromosome)[ + start_from_nt + ] + if position_in_bytes > 0: + IH.seek(position_in_bytes) record = self.__read_next_record(IH) while 0 != len(record): - yield Record(record, self._details["dtype"]) + parsed_record = Record(record, self._details["dtype"]) + if parsed_record["start"] > end_at_nt and end_at_nt > 0: + break + yield parsed_record record = self.__read_next_record(IH) diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index c35e5557..e839d0f5 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -29,11 +29,15 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars help="Database feature to dump.", ) parser.add_argument( - "--region", - metavar=("chromStart", "chromEnd"), + "--region-start", type=int, - nargs=2, - help="""Start and end locations (space-separated) of the region of interest. + help="""Start location (space-separated) of the region of interest. + When a region is not provided, the whole feature is dumped.""", + ) + parser.add_argument( + "--region-end", + type=int, + help="""End location (space-separated) of the region of interest. When a region is not provided, the whole feature is dumped.""", ) @@ -45,12 +49,20 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars @enable_rich_assert def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - if args.chrom is None and args.region is not None: - raise Exception("cannot use --region without --chrom. Stopped.") - if args.region is not None: + if args.chrom is None and ( + args.region_start is not None or args.region_end is not None + ): + raise Exception( + "cannot use --region-start or --region-end without --chrom. Stopped." + ) + if args.region_start is not None and args.region_end is not None: assert ( - args.region[0] < args.region[1] + args.region_start < args.region_end ), "region end should be greater than region start" + + args.region = [0, -1] + if args.region_end is not None: + args.region[1] = args.region_end return args @@ -60,17 +72,20 @@ def run(args: argparse.Namespace) -> None: chromosome_list = DB.chromosome_list if args.chrom is not None: - assert args.chrom in chromosome_list, f"'{args.chrom}' not found" - chromosome_list = [args.chrom] - if args.region is not None: - chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] - assert args.region[0] < chrom_size_nt + assert args.chrom.encode() in chromosome_list, f"'{args.chrom}' not found" + chromosome_list = [args.chrom.encode()] + + if args.region_start is not None: + chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] + assert args.region[0] < chrom_size_nt + args.region[0] = args.region_start print("\t".join(const.database_columns)) - for chromosome in DB.chromosome_list: - for record in tqdm( - DB.walk_chromosome(chromosome), + for chromosome in chromosome_list: + walker = tqdm( + DB.walk_chromosome(chromosome, args.region[0], args.region[1]), desc=f"dumping '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], - ): + ) + for record in walker: print(record.to_csv("\t")) From 103a591380768c66bc03d248f5ef28219508cc70 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 12:27:31 +0100 Subject: [PATCH 032/185] Updated version tag and promoted to beta. Added 3.9 to GHAction. --- .github/workflows/pythonpackage.yml | 2 +- pyproject.toml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 19078fa3..2b59d2c4 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -37,7 +37,7 @@ jobs: fail-fast: true matrix: os: ["ubuntu-latest"] - python-version: [3.7, 3.8] + python-version: [3.7, 3.8, 3.9] runs-on: ${{ matrix.os }} steps: # Checkout repo and setup python diff --git a/pyproject.toml b/pyproject.toml index 52e18a66..252734be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ifpd2" -version = "1.0.0-alpha" +version = "1.0.1" description = "An iFISH probe design pipeline (II)" authors = ["Gabriele Girelli "] license = "MIT" @@ -9,7 +9,7 @@ homepage = "https://github.com/ggirelli/iFISH-Probe-Design" repository = "https://github.com/ggirelli/iFISH-Probe-Design" keywords = ["biology", "cell", "DNA", "RNA", "FISH", "fluorescence", "hybridization"] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 3 - Beta", "Environment :: Console", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering :: Bio-Informatics", @@ -18,6 +18,7 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", ] include = [ "CHANGELOG.md", From dd4a1a4e5a10d175b5060bebb035e846feb8c3ba Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 12:31:43 +0100 Subject: [PATCH 033/185] Added Typed classifier --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 252734be..4bcc8770 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ classifiers = [ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Typing :: Typed", ] include = [ "CHANGELOG.md", From 7d4ff903d9e63b9e6a73821910906c15cbd71a9a Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 15:46:11 +0100 Subject: [PATCH 034/185] Linked new database and old walker. --- ifpd2/database2.py | 137 ++++++++++++++++++++++++++++---------- ifpd2/oligo.py | 20 ++++-- ifpd2/probe.py | 21 +++--- ifpd2/probe_set.py | 17 +++-- ifpd2/scripts/db_check.py | 2 +- ifpd2/scripts/db_dump.py | 2 +- ifpd2/scripts/query.py | 41 ++++++------ ifpd2/walker.py | 61 +++++++++-------- 8 files changed, 196 insertions(+), 105 deletions(-) diff --git a/ifpd2/database2.py b/ifpd2/database2.py index 5339e64f..4f55ced8 100644 --- a/ifpd2/database2.py +++ b/ifpd2/database2.py @@ -3,6 +3,7 @@ @contact: gigi.ga90@gmail.com """ +import argparse import copy from ifpd2 import const import logging @@ -81,7 +82,7 @@ class ChromosomeData(object): """ChromosomeData""" __allowed_fields = ("recordno", "size_nt", "size_bytes") - _data: Dict[bytes, Tuple[Dict[str, Any], ChromosomeIndex]] + _data: Dict[bytes, Dict[str, Any]] _record_byte_size: int def __init__( @@ -97,7 +98,7 @@ def __init__( self._data = {} for chromosome in set(chromosome_set): - self._data[chromosome] = ({}, ChromosomeIndex(index_bin_size)) + self._data[chromosome] = dict(index=ChromosomeIndex(index_bin_size)) @property def record_byte_size(self) -> int: @@ -109,36 +110,41 @@ def __len__(self) -> int: def keys(self) -> List[bytes]: return list(self._data.keys()) + def items(self) -> List[Tuple[bytes, Dict[str, Any]]]: + pass + @property def sizes_nt(self) -> Dict[bytes, int]: return dict( - [(name, details[0]["size_nt"]) for name, details in self._data.items()] + [(name, details["size_nt"]) for name, details in self._data.items()] ) @property def sizes_bytes(self) -> Dict[bytes, int]: return dict( - [(name, details[0]["size_bytes"]) for name, details in self._data.items()] + [(name, details["size_bytes"]) for name, details in self._data.items()] ) @property def recordnos(self) -> Dict[bytes, int]: return dict( - [(name, details[0]["recordno"]) for name, details in self._data.items()] + [(name, details["recordno"]) for name, details in self._data.items()] ) def set(self, chromosome: bytes, key: str, value: int) -> None: + if "index" == key: + logging.warning(f"access precluded to '{key}' key") if chromosome not in self._data: raise KeyError(f"key '{chromosome.decode()}' not found") if key not in self.__allowed_fields: raise KeyError(f"key '{key}' not found") - self._data[chromosome][0][key] = value + self._data[chromosome][key] = value - def get_details(self, chromosome: bytes) -> Dict[str, int]: - return copy.copy(self._data[chromosome][0]) + def chromosome_details(self, chromosome: bytes) -> Dict[str, int]: + return copy.copy(self._data[chromosome]) - def get_index(self, chromosome: bytes) -> ChromosomeIndex: - return copy.copy(self._data[chromosome][1]) + def chromosome_index(self, chromosome: bytes) -> ChromosomeIndex: + return copy.copy(self._data[chromosome]["index"]) def populate(self, chrom_db: pd.DataFrame) -> None: assert "chromosome" in chrom_db.columns @@ -150,10 +156,10 @@ def populate(self, chrom_db: pd.DataFrame) -> None: "size_bytes", chrom_db.shape[0] * self._record_byte_size, ) - self._data[selected_chrom][1].build(chrom_db, self._record_byte_size) + self._data[selected_chrom]["index"].build(chrom_db, self._record_byte_size) def __check__(self) -> None: - for chromosome, (details, _) in self._data.items(): + for chromosome, details in self._data.items(): assert ( "size_nt" in details ), f"missing nt size information for '{chromosome.decode()}'" @@ -193,6 +199,9 @@ def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: current_location += byte_size + def to_dataframe(self) -> pd.DataFrame: + return pd.DataFrame(self._data, index=[0]) + def to_csv(self, sep: str = ",") -> str: csv_fields: List[str] = [] for x in const.database_columns: @@ -203,8 +212,59 @@ def to_csv(self, sep: str = ",") -> str: csv_fields.append(str(data)) return sep.join(csv_fields) + @staticmethod + def __norm_value_in_range(v, r): + if 0 == r[1]: + return np.nan + return (v - r[0]) / (r[1] - r[0]) + + def __update_score_by_nOT(self, F): + off_target_no = self._data["off_target_no"] + if off_target_no <= F[0]: + self._data["score"] = 0 + return + if off_target_no > F[1]: + self._data["score"] = np.inf + return + return self.__norm_value_in_range(off_target_no, F) + + def __update_score_by_dG_Tm(self, Gs): + ss_dG = self._data["ss_dG"] + tm_dG = self._data["Tm_dG"] + if ss_dG >= tm_dG * min(Gs): + self._data["score"] = 0 + return + if ss_dG < tm_dG * max(Gs): + self._data["score"] = np.inf + return + return self.__norm_value_in_range(ss_dG, [tm_dG * f for f in Gs]) + + def __update_score_by_dG_Gs(self, Gs): + ss_dG = self._data["ss_dG"] + if ss_dG >= Gs[0]: + self._data["score"] = 0 + return + if ss_dG < Gs[1]: + self._data["score"] = np.inf + return + return self.__norm_value_in_range(ss_dG, Gs) + + def add_score(self, F, Gs) -> None: + norm_nOT = self.__update_score_by_nOT(F) + if norm_nOT is None: + return + if all([x >= 0 for x in Gs]): + norm_ss_dG = self.__update_score_by_dG_Tm(Gs) + else: + norm_ss_dG = self.__update_score_by_dG_Gs(Gs) + if norm_ss_dG is None: + return + self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) + def __getitem__(self, key: str) -> Any: - if key not in const.database_columns: + allowed_columns = ["score"] + allowed_columns.extend(const.database_columns) + if key not in allowed_columns: raise KeyError(f"unrecognized key '{key}'") else: return self.data[key] @@ -217,7 +277,9 @@ class DataBase(object): """Buffering and checking class for ifpd2 database.""" _root: str - _details: Dict[str, Any] + _args: argparse.Namespace + _chromosomes: ChromosomeData + _dtype: Dict[str, str] _record_byte_size: int def __init__(self, path: str): @@ -227,76 +289,81 @@ def __init__(self, path: str): assert os.path.isfile(db_pickle_path), f"'db.pickle is missing in '{path}'" with open(db_pickle_path, "rb") as IH: - self._details = pickle.load(IH) + details = pickle.load(IH) + self._chromosomes = details["chromosomes"] + self._dtype = details["dtype"] - assert "chromosomes" in self._details - assert isinstance(self._details["chromosomes"], ChromosomeData) - self._details["chromosomes"].__check__() + assert isinstance(self._chromosomes, ChromosomeData) + self._chromosomes.__check__() for chromosome in self.chromosome_list: chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") assert os.path.isfile( chromosome_path ), f"missing expected chromosome file: '{chromosome_path}'" - self._record_byte_size = get_dtype_length(self._details["dtype"]) + self._record_byte_size = get_dtype_length(self._dtype) assert self._record_byte_size > 0 self._root = path + @property + def path(self): + return self._root + @property def chromosome_list(self) -> List[bytes]: - return self._details["chromosomes"].keys() + return self._chromosomes.keys() @property def chromosome_sizes_nt(self) -> Dict[bytes, int]: - return self._details["chromosomes"].sizes_nt + return self._chromosomes.sizes_nt @property def chromosome_sizes_bytes(self) -> Dict[bytes, int]: - return self._details["chromosomes"].sizes_bytes + return self._chromosomes.sizes_bytes @property def chromosome_recordnos(self) -> Dict[bytes, int]: - return self._details["chromosomes"].recordnos + return self._chromosomes.recordnos def log_details(self) -> None: - logging.info(f"Database name: {self._details['args'].output}") - logging.info(f"Sequence max length: {self._details['dtype']['sequence'][2:]}") + logging.info(f"Database name: {self._args.output}") + logging.info(f"Sequence max length: {self._dtype['sequence'][2:]}") logging.info("") logging.info("[bold]## Input files[/bold]") - logging.info(f"hush files: {self._details['args'].hush}") - logging.info(f"oligo-melting files: {self._details['args'].melting}") - logging.info(f"OligoArrayAux files: {self._details['args'].secondary}") + logging.info(f"hush files: {self._args.hush}") + logging.info(f"oligo-melting files: {self._args.melting}") + logging.info(f"OligoArrayAux files: {self._args.secondary}") logging.info("") logging.info("[bold]## Chromosome details[/bold]") - logging.info(f"Expecting {len(self._details['chromosomes'])} chromosomes.") + logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") logging.info("Chromosomes:") - for chromosome, details in self._details["chromosomes"].items(): + for chromosome, details in self._chromosomes.items(): empty_label = "".join([" " for c in chromosome.decode()]) logging.info(f"\t{chromosome.decode()} => size : {details['size']}") logging.info(f"\t{empty_label} => recordno : {details['recordno']}") logging.info("") logging.info("[bold]Record details[/bold]") logging.info(f"Record size in bytes: {self._record_byte_size}") - logging.info(f"Dtype: {self._details['dtype']}") + logging.info(f"Dtype: {self._dtype}") def __read_next_record(self, IH: IO) -> bytes: return IH.read(self._record_byte_size) - def walk_chromosome( + def buffer( self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 ) -> Iterator[Record]: - assert chromosome in self._details["chromosomes"].keys() + assert chromosome in self._chromosomes.keys() with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: if start_from_nt > 0: - position_in_bytes = self._details["chromosomes"].get_index(chromosome)[ + position_in_bytes = self._chromosomes.chromosome_index(chromosome)[ start_from_nt ] if position_in_bytes > 0: IH.seek(position_in_bytes) record = self.__read_next_record(IH) while 0 != len(record): - parsed_record = Record(record, self._details["dtype"]) + parsed_record = Record(record, self._dtype) if parsed_record["start"] > end_at_nt and end_at_nt > 0: break yield parsed_record diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 2fcf8e2c..acc9fd55 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -135,9 +135,12 @@ class OligoGroup(object): def __init__(self, oligos, logger=logging.getLogger()): super(OligoGroup, self).__init__() self.logger = logger - self._data = pd.concat([o.data for o in oligos], ignore_index=True) + self._data = pd.concat( + [o.to_dataframe() for o in oligos if np.isfinite(o["score"])], + ignore_index=True, + ) self._data = self._data.loc[self._data["score"] <= 1, :] - self._oligos_passing_score_filter = self._data["score"].values <= 1 + self._oligos_passing_score_filter = self._data.shape[0] @property def data(self): @@ -341,7 +344,7 @@ def __check_oligos_to_discard_safeN(self, safeN, start, end, D): self.logger.info("Not enough oligos, skipped discard step.") return False start = passing_oData["start"].values[0] - start += len(passing_oData["seq"].values[0]) + D + start += len(passing_oData["sequence"].values[0]) + D c += 1 c = 1 @@ -351,18 +354,21 @@ def __check_oligos_to_discard_safeN(self, safeN, start, end, D): self.logger.info("Not enough oligos, skipped discard step.") return False end = passing_oData["end"].values[-1] - end -= len(passing_oData["seq"].values[-1]) - D + end -= len(passing_oData["sequence"].values[-1]) - D c += 1 return True def discard_focused_oligos_safeN(self, safeN, D): # Discard focused oligos that are neither the first nor the last safeN - start = self.data.loc[self.oligos_in_focus_window, "start"].values[0] - start += len(self.data.loc[self.oligos_in_focus_window, "seq"].values[0]) + D + start += ( + len(self.data.loc[self.oligos_in_focus_window, "sequence"].values[0]) + D + ) end = self.data.loc[self.oligos_in_focus_window, "end"].values[-1] - end += len(self.data.loc[self.oligos_in_focus_window, "seq"].values[-1]) + D + end += ( + len(self.data.loc[self.oligos_in_focus_window, "sequence"].values[-1]) + D + ) if not self.__check_oligos_to_discard_safeN(safeN, start, end, D): return diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 213402ec..49b1c234 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -123,11 +123,11 @@ def export(self, path): "".join( [ f">{oligo['name']}:", - f"{oligo['chrom']}:{oligo['start']}-{oligo['end']}\n", + f"{oligo['chromosome']}:{oligo['start']}-{oligo['end']}\n", ] ) ) - BH.write(f"{oligo['seq']}\n") + BH.write(f"{oligo['sequence']}\n") class OligoPathBuilder(object): @@ -286,15 +286,14 @@ def path2probe(path, oData): class OligoProbeBuilder(OligoPathBuilder): """Class to build OligoProbe objects.""" - k = None - F = (0, 100) # Threshold on number of off-targets (range) - Gs = (0.0, 0.5) # dG of SS either as kcal/mol (negative) - # or as fraction dG of hybrid (0<=Gs<=1) - # (range) - Ot = 0.1 # Step for oligo score relaxation - def __init__(self): super(OligoProbeBuilder, self).__init__() + self.k = None + self.F = [0, 99] # Threshold on number of off-targets (range) + self.Gs = [0.0, 0.5] # dG of SS either as kcal/mol (negative) + # or as fraction dG of hybrid (0<=Gs<=1) + # (range) + self.Ot = 0.1 # Step for oligo score relaxation @property def config(self): @@ -323,14 +322,14 @@ def _assert(self): ass.ert_nonNeg(self.k, "k") assert (self.k + self.D) * self.N <= self.Ps - ass.ert_type(self.F, tuple, "F") + ass.ert_type(self.F, list, "F") assert 2 == len(self.F) for i in range(2): ass.ert_type(self.F[i], int, f"F[{i}]") assert self.F[i] >= 0 assert self.F[1] >= self.F[0] - ass.ert_type(self.Gs, tuple, "Gs") + ass.ert_type(self.Gs, list, "Gs") assert 2 == len(self.Gs) for i in range(2): ass.ert_type(self.Gs[i], float, f"Gs[{i}]") diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index b5b70018..4ddfe7ac 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -165,11 +165,12 @@ def export(self, path): "".join( [ f">probe_{pi}:{oligo['name']}", - f":{oligo['chrom']}:{oligo['start']}-{oligo['end']}\n", + f":{oligo['chromosome']}:", + f"{oligo['start']}-{oligo['end']}\n", ] ) ) - BH.write(f"{probe.data.iloc[i]['seq']}\n") + BH.write(f"{probe.data.iloc[i]['sequence']}\n") class OligoProbeSetBuilder(object): @@ -206,9 +207,15 @@ def __build_probe_set_list(self, window_list, i): def build(self, probe_candidates): for (wSet, window_list) in probe_candidates.items(): window_list = list(window_list.values()) - i = 0 - while 0 == len(window_list[i]): - i += 1 + + non_empty_ids = [ + i for i in range(len(window_list)) if 0 != len(window_list[i]) + ] + if 0 == len(non_empty_ids): + logging.warning(f"No probe candidates found, dropped. [ws{wSet+1}]") + continue + else: + i = non_empty_ids[0] probe_set_list = self.__build_probe_set_list(window_list, i) diff --git a/ifpd2/scripts/db_check.py b/ifpd2/scripts/db_check.py index 9e96105a..2cc7058e 100644 --- a/ifpd2/scripts/db_check.py +++ b/ifpd2/scripts/db_check.py @@ -45,7 +45,7 @@ def run(args: argparse.Namespace) -> None: for chromosome in DB.chromosome_list: previous_position = -1 for record in tqdm( - DB.walk_chromosome(chromosome), + DB.buffer(chromosome), desc=f"Checking sorting '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], ): diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index e839d0f5..fccbfa53 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -83,7 +83,7 @@ def run(args: argparse.Namespace) -> None: print("\t".join(const.database_columns)) for chromosome in chromosome_list: walker = tqdm( - DB.walk_chromosome(chromosome, args.region[0], args.region[1]), + DB.buffer(chromosome, args.region[0], args.region[1]), desc=f"dumping '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], ) diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 67a4e788..e66e8eb1 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -10,7 +10,6 @@ from ifpd2.probe import OligoProbeBuilder from ifpd2.probe_set import OligoProbeSetBuilder import logging -import numpy as np # type: ignore import os @@ -41,7 +40,6 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars metavar=("chromStart", "chromEnd"), type=int, nargs=2, - default=(0, np.inf), help="""Start and end locations (space-separated) of the region of interest. When a region is not provided (or start/end coincide), the whole feature is queried.""", @@ -114,18 +112,18 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars metavar="nOT", type=int, nargs=2, - default=(0, 100), - help="""Acceptable range of off-targets. Default: (0,100)""", + default=[0, 99], + help="""Acceptable range of off-targets. Default: [0,99]""", ) filters.add_argument( "-G", metavar="dG", type=float, nargs=2, - default=(0.0, 0.5), + default=[0.0, 0.5], help="""Acceptable range of secondary structure delta free energy. Either as absolute kcal/mol os as a fraction of delta free energy of hybridization. - Default: (.0,.5)""", + Default: [.0,.5]""", ) filters.add_argument( "-o", @@ -144,7 +142,7 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars filters.add_argument( "-P", metavar="size", - type=float, + type=int, default=10000, help="""Maximum probe size in nt. Default: 10000""", ) @@ -218,9 +216,11 @@ def assert_reusable(args): @enable_rich_assert def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: assert not all([isinstance(args.X, type(None)), isinstance(args.W, type(None))]) - args.start, args.end = args.region - args.start = int(args.start) - if not np.isfinite(args.end): + if args.region is None: + args.region = [0, -1] + else: + assert args.region[1] > args.region[0] + if args.region[1] <= 0: args.X = None logging.info( " ".join( @@ -230,12 +230,9 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: ] ) ) - args.end = int(args.end) if np.isfinite(args.end) else 0 - if args.R > 1: - args.R = int(args.R) - if args.r > 1: - args.r = int(args.r) + args.R = int(args.R) if args.R > 1 else float(args.R) + args.r = int(args.r) if args.r > 1 else float(args.r) if args.single: args.X = 1 @@ -263,7 +260,7 @@ def run(args: argparse.Namespace) -> None: opb.Po = args.I opb.k = args.k opb.F = args.F - opb.Gs = (float(args.G[0]), float(args.G[1])) + opb.Gs = args.G opb.Ot = args.o opsb = OligoProbeSetBuilder(os.path.join(args.O, "probe_sets")) @@ -271,8 +268,8 @@ def run(args: argparse.Namespace) -> None: ow = Walker(args.database) ow.C = args.chrom - ow.S = args.start - ow.E = args.end + ow.S = args.region[0] + ow.E = args.region[1] if args.region[1] >= 0 else 0 ow.X = args.X ow.Ws = args.W ow.Wh = args.w @@ -282,7 +279,13 @@ def run(args: argparse.Namespace) -> None: ow.reuse = args.reuse ow.threads = args.threads - ow.start(N=args.N, opb=opb, cfr_step=ow.Rt) + ow.start( + start_from_nt=args.region[0], + end_at_nt=args.region[1], + N=args.N, + opb=opb, + cfr_step=ow.Rt, + ) opsb.build(ow.walk_results) opsb.export() diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 7031012d..1b97ee9c 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -17,8 +17,8 @@ from ifpd2 import asserts as ass from ifpd2.logging import add_log_file_handler -from ifpd2.database import Database -from ifpd2.oligo import Oligo, OligoGroup +from ifpd2.database2 import DataBase +from ifpd2.oligo import OligoGroup from ifpd2.probe import OligoProbeBuilder @@ -256,13 +256,14 @@ class Walker(GenomicWindowSet): out_path = "." reuse = False _threads = 1 + __db: DataBase __current_oligos: List = [] __walk_results: Dict = {} def __init__(self, db_path, logger=logging.getLogger()): GenomicWindowSet.__init__(self) - self.__db = Database(db_path) + self.__db = DataBase(db_path) self.logger = logger @property @@ -281,7 +282,7 @@ def current_oligos(self): return self.__current_oligos def remove_oligos_starting_before(self, pos): - self.__current_oligos = [o for o in self.current_oligos if o.start >= pos] + self.__current_oligos = [o for o in self.current_oligos if o["start"] >= pos] @property def window_set_path(self): @@ -333,11 +334,13 @@ def _assert(self): GenomicWindowSet._assert(self) assert os.path.isdir(self.out_path) - def start(self, *args, **kwargs): + def start(self, *args, start_from_nt: int = 0, end_at_nt: int = -1, **kwargs): self._assert() self._init_windows() self.print_prologue() - self.__start_walk(*args, **kwargs) + self.__start_walk( + *args, start_from_nt=start_from_nt, end_at_nt=end_at_nt, **kwargs + ) def print_prologue(self): @@ -365,13 +368,13 @@ def walk_destination(self): return np.inf return self.E - def __finished_parsing(self, line, oligo_start, oligo_end, DBHpb, args, kwargs): + def __finished_parsing(self, record, DBHpb, args, kwargs): # Return: # None to stop parsing # True to parse in current window # Parsed output to append it - if oligo_start >= self.current_window["end"]: + if record["start"] >= self.current_window["end"]: # DBHpb.clear() parsed_output = self.__process_window_async( @@ -402,21 +405,20 @@ def __finished_parsing(self, line, oligo_start, oligo_end, DBHpb, args, kwargs): return (parsed_output, "append") return (None, "continue") - def __parse_line(self, line, oligo_start, oligo_end, DBHpb, args, kwargs): - if oligo_start >= self.current_window["start"]: + def __parse_line(self, record, DBHpb, args, kwargs): + if record["start"] >= self.current_window["start"]: parsing_output, parsing_status = self.__finished_parsing( - line, oligo_start, oligo_end, DBHpb, args, kwargs + record, DBHpb, args, kwargs ) if parsing_status == "continue": - if oligo_end > self.walk_destination: # End reached + if record["end"] > self.walk_destination: # End reached self.logger.info("Reached destination") return (None, "break") - oligo = Oligo(line, self.r) - self.fparse(oligo, *args, **kwargs) + self.fparse(record, *args, **kwargs) - if not np.isnan(oligo.score): - self.current_oligos.append(oligo) + if not np.isnan(record["score"]): + self.current_oligos.append(record) self.rw += 1 else: @@ -425,11 +427,9 @@ def __parse_line(self, line, oligo_start, oligo_end, DBHpb, args, kwargs): def __parse_database(self, DBHpb, args, kwargs): exec_results = [] - for line in DBHpb: - oligo_start, oligo_end = [int(x) for x in line.strip().split("\t")[2:4]] - + for record in DBHpb: parsing_output, parsing_status = self.__parse_line( - line, oligo_start, oligo_end, DBHpb, args, kwargs + record, DBHpb, args, kwargs ) if parsing_status == "break": @@ -456,12 +456,14 @@ def __parse_database(self, DBHpb, args, kwargs): def __end_walk(self, exec_results): for promise in exec_results: s, w, results = promise.get() - if s in self.walk_results.keys(): + if s in self.__walk_results.keys(): self.__walk_results[s][w] = results else: self.__walk_results[s] = {w: results} - def __start_walk(self, *args, **kwargs): + def __start_walk( + self, *args, start_from_nt: int = 0, end_at_nt: int = -1, **kwargs + ): self.pool = mp.Pool(np.min([self.threads, mp.cpu_count()])) self.logger.info(f"Prepared a pool of {self.threads} threads.") @@ -475,14 +477,18 @@ def __start_walk(self, *args, **kwargs): self.r = 0 # Record ID self.rw = 0 # Walk step counter - DBHpb = tqdm(self.__db.buffer(self.C), desc="Parsing records", leave=None) + DBHpb = tqdm( + self.__db.buffer(self.C.encode(), start_from_nt, end_at_nt), + total=self.__db.chromosome_recordnos[self.C.encode()], + desc="Parsing records", + leave=False, + ) parsing_output = self.__parse_database(DBHpb, args, kwargs) self.logger.info(f"Parsed {self.rw}/{self.r} records.") self.__end_walk(parsing_output) DBHpb.close() self.pool.close() - self.pool.join() def _window_done(self): s = int(self.current_window["s"]) @@ -641,8 +647,11 @@ def process_window( return (int(window["s"]), int(window["w"]), results) @staticmethod - def fparse(oligo, opb=None, *args, **kwargs): - oligo.add_score(opb.F, opb.Gs) + def fparse(record, opb=None, *args, **kwargs): + record.add_score(opb.F, opb.Gs) + # if record["off_target_no"]<100: + # print((record._data, opb.F, opb.Gs)) + # print(record.to_dataframe()) @staticmethod def fprocess(oGroup, window, *args, **kwargs): From 8bf917407e0fb69614a20f92a3254900f99a6989 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 16:00:26 +0100 Subject: [PATCH 035/185] Removed old database module. --- ifpd2/__init__.py | 7 +- ifpd2/database.py | 401 ++++++++++++++++++++++++++++++++------ ifpd2/database2.py | 370 ----------------------------------- ifpd2/scripts/db_check.py | 2 +- ifpd2/scripts/db_dump.py | 2 +- ifpd2/scripts/db_info.py | 2 +- ifpd2/scripts/db_make.py | 6 +- ifpd2/walker.py | 2 +- 8 files changed, 347 insertions(+), 445 deletions(-) delete mode 100644 ifpd2/database2.py diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index a1b6f70a..d0c0b877 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -5,17 +5,16 @@ from ifpd2.const import __version__ from ifpd2 import asserts, io -from ifpd2 import database, walker -from ifpd2 import database2 +from ifpd2 import walker +from ifpd2 import database from ifpd2 import oligo, probe, probe_set __all__ = [ "__version__", "asserts", "io", - "database", "walker", - "database2", + "database", "oligo", "probe", "probe_set", diff --git a/ifpd2/database.py b/ifpd2/database.py index 66c94537..5d4c21b9 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -3,89 +3,362 @@ @contact: gigi.ga90@gmail.com """ -import configparser as cp +import argparse +import copy +from ifpd2 import const +import logging +import numpy as np # type: ignore import os -import struct +import pickle +import pandas as pd # type: ignore +from typing import Any, Dict, IO, Iterator, List, Set, Tuple -class Database(object): - """Class for ifpd2 database buffering.""" +def get_dtype_length(dtype) -> int: + return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) - def __init__(self, path): - super(Database, self).__init__() - assert os.path.isdir(path) - self._path = path + +class ChromosomeIndex(object): + """ChromosomeIndex""" + + _bin_size: int + _index: Dict[int, Tuple[int, int]] + + def __init__(self, bin_size: int): + super(ChromosomeIndex, self).__init__() + assert bin_size >= 1 + self._bin_size = bin_size + + def __init_index(self, chrom_db: pd.DataFrame) -> None: + self._index = {} + chrom_size_nt = chrom_db["end"].values.max() + for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): + self._index[bin_id] = (np.inf, 0) + + def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: + for colname in ("chromosome", "start", "end"): + assert colname in chrom_db.columns, f"missing '{colname}' column" + + self.__init_index(chrom_db) + + chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) + assert 1 == len(chromosome_set) + + current_position = -1 + for i in range(chrom_db.shape[0]): + position_in_nt = chrom_db["start"].values[i] + assert position_in_nt > current_position + current_position = position_in_nt + + position_in_bytes = record_byte_size * i + binned_to = position_in_nt // self._bin_size + + bin_start, bin_end = list(self._index[binned_to]) + if bin_start > position_in_bytes: + bin_start = position_in_bytes + if bin_end < position_in_bytes: + bin_end = position_in_bytes + self._index[binned_to] = (bin_start, bin_end) + + def __getitem__(self, position_in_nt: int) -> int: + assert self._index is not None + binned_to = position_in_nt // self._bin_size + if binned_to not in self._index: + return -1 + + position_in_bytes = self._index[binned_to][0] + if not np.isfinite(position_in_bytes): + return -1 + return position_in_bytes + + +class ChromosomeData(object): + """ChromosomeData""" + + __allowed_fields = ("recordno", "size_nt", "size_bytes") + _data: Dict[bytes, Dict[str, Any]] + _record_byte_size: int + + def __init__( + self, + chromosome_set: Set[bytes], + dtype: Dict[str, str], + index_bin_size: int = 100000, + ): + super(ChromosomeData, self).__init__() + + self._record_byte_size = get_dtype_length(dtype) + assert self._record_byte_size > 0 + + self._data = {} + for chromosome in set(chromosome_set): + self._data[chromosome] = dict(index=ChromosomeIndex(index_bin_size)) @property - def path(self): - return self._path + def record_byte_size(self) -> int: + return self._record_byte_size + + def __len__(self) -> int: + return len(self._data) + + def keys(self) -> List[bytes]: + return list(self._data.keys()) + + def items(self) -> List[Tuple[bytes, Dict[str, Any]]]: + pass + + @property + def sizes_nt(self) -> Dict[bytes, int]: + return dict( + [(name, details["size_nt"]) for name, details in self._data.items()] + ) + + @property + def sizes_bytes(self) -> Dict[bytes, int]: + return dict( + [(name, details["size_bytes"]) for name, details in self._data.items()] + ) + + @property + def recordnos(self) -> Dict[bytes, int]: + return dict( + [(name, details["recordno"]) for name, details in self._data.items()] + ) + + def set(self, chromosome: bytes, key: str, value: int) -> None: + if "index" == key: + logging.warning(f"access precluded to '{key}' key") + if chromosome not in self._data: + raise KeyError(f"key '{chromosome.decode()}' not found") + if key not in self.__allowed_fields: + raise KeyError(f"key '{key}' not found") + self._data[chromosome][key] = value + + def chromosome_details(self, chromosome: bytes) -> Dict[str, int]: + return copy.copy(self._data[chromosome]) + + def chromosome_index(self, chromosome: bytes) -> ChromosomeIndex: + return copy.copy(self._data[chromosome]["index"]) + + def populate(self, chrom_db: pd.DataFrame) -> None: + assert "chromosome" in chrom_db.columns + selected_chrom = chrom_db["chromosome"][0] + self.set(selected_chrom, "recordno", chrom_db.shape[0]) + self.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) + self.set( + selected_chrom, + "size_bytes", + chrom_db.shape[0] * self._record_byte_size, + ) + self._data[selected_chrom]["index"].build(chrom_db, self._record_byte_size) + + def __check__(self) -> None: + for chromosome, details in self._data.items(): + assert ( + "size_nt" in details + ), f"missing nt size information for '{chromosome.decode()}'" + assert ( + "size_bytes" in details + ), f"missing byte size information for '{chromosome.decode()}'" + assert ( + "recordno" in details + ), f"missing size information for '{chromosome.decode()}'" - def buffer(self, chrom): - chrom_path = os.path.join(self.path, f"{chrom}.tsv") - if not os.path.isfile(chrom_path): - return - with open(chrom_path, "r") as DBH: - header = next(DBH) - if not all([isinstance(s, str) for s in header.split("\t")]): - DBH.seek(0) - for line in DBH: - yield line +class Record(object): + """DataBase Record""" -class DatabaseBinary(Database): - """Class for ifpd2 binary database buffering.""" + _data: Dict[str, Any] - def __init__(self, path): - super(DatabaseBinary, self).__init__(path) - self.__check_integrity() + def __init__(self, record: bytes, column_dtypes: Dict[str, str]): + super(Record, self).__init__() + self.__parse_bytes(record, column_dtypes) @property - def dtype(self): - return self._dtype + def data(self) -> Dict[str, Any]: + return copy.copy(self._data) + + def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: + assert len(record) == get_dtype_length(column_dtypes) + + self._data = {} + current_location = 0 + for label in const.database_columns: + dtype = column_dtypes[label] + byte_size = get_dtype_length({label: dtype}) + + self._data[label] = np.frombuffer( + record[current_location : (current_location + byte_size)], dtype + )[0] + + current_location += byte_size + + def to_dataframe(self) -> pd.DataFrame: + return pd.DataFrame(self._data, index=[0]) + + def to_csv(self, sep: str = ",") -> str: + csv_fields: List[str] = [] + for x in const.database_columns: + data = self._data[x] + if isinstance(data, bytes): + csv_fields.append(str(data.decode())) + else: + csv_fields.append(str(data)) + return sep.join(csv_fields) + + @staticmethod + def __norm_value_in_range(v, r): + if 0 == r[1]: + return np.nan + return (v - r[0]) / (r[1] - r[0]) + + def __update_score_by_nOT(self, F): + off_target_no = self._data["off_target_no"] + if off_target_no <= F[0]: + self._data["score"] = 0 + return + if off_target_no > F[1]: + self._data["score"] = np.inf + return + return self.__norm_value_in_range(off_target_no, F) + + def __update_score_by_dG_Tm(self, Gs): + ss_dG = self._data["ss_dG"] + tm_dG = self._data["Tm_dG"] + if ss_dG >= tm_dG * min(Gs): + self._data["score"] = 0 + return + if ss_dG < tm_dG * max(Gs): + self._data["score"] = np.inf + return + return self.__norm_value_in_range(ss_dG, [tm_dG * f for f in Gs]) + + def __update_score_by_dG_Gs(self, Gs): + ss_dG = self._data["ss_dG"] + if ss_dG >= Gs[0]: + self._data["score"] = 0 + return + if ss_dG < Gs[1]: + self._data["score"] = np.inf + return + return self.__norm_value_in_range(ss_dG, Gs) + + def add_score(self, F, Gs) -> None: + norm_nOT = self.__update_score_by_nOT(F) + if norm_nOT is None: + return + if all([x >= 0 for x in Gs]): + norm_ss_dG = self.__update_score_by_dG_Tm(Gs) + else: + norm_ss_dG = self.__update_score_by_dG_Gs(Gs) + if norm_ss_dG is None: + return + self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) + + def __getitem__(self, key: str) -> Any: + allowed_columns = ["score"] + allowed_columns.extend(const.database_columns) + if key not in allowed_columns: + raise KeyError(f"unrecognized key '{key}'") + else: + return self.data[key] + + def __repr__(self) -> str: + return str(self._data) + + +class DataBase(object): + """Buffering and checking class for ifpd2 database.""" + + _root: str + _args: argparse.Namespace + _chromosomes: ChromosomeData + _dtype: Dict[str, str] + _record_byte_size: int + + def __init__(self, path: str): + super(DataBase, self).__init__() + assert os.path.isdir(path), f"cannot find database folder '{path}'" + db_pickle_path = os.path.join(path, "db.pickle") + assert os.path.isfile(db_pickle_path), f"'db.pickle is missing in '{path}'" + + with open(db_pickle_path, "rb") as IH: + details = pickle.load(IH) + self._chromosomes = details["chromosomes"] + self._dtype = details["dtype"] + + assert isinstance(self._chromosomes, ChromosomeData) + self._chromosomes.__check__() + for chromosome in self.chromosome_list: + chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") + assert os.path.isfile( + chromosome_path + ), f"missing expected chromosome file: '{chromosome_path}'" + + self._record_byte_size = get_dtype_length(self._dtype) + assert self._record_byte_size > 0 + + self._root = path @property - def n_expected_fields(self): - return self._n_expected_fields + def path(self): + return self._root @property - def n_bytes(self): - return self._n_bytes + def chromosome_list(self) -> List[bytes]: + return self._chromosomes.keys() @property - def N(self): - return self._N + def chromosome_sizes_nt(self) -> Dict[bytes, int]: + return self._chromosomes.sizes_nt @property - def c(self): - return self._c + def chromosome_sizes_bytes(self) -> Dict[bytes, int]: + return self._chromosomes.sizes_bytes @property - def k(self): - return self._k - - def __check_integrity(self): - assert_msg = f"Database at '{self.path}' does not pass integrity check." - config_path = os.path.join(self.path, ".config") - assert os.path.isfile(config_path), assert_msg - config = cp.ConfigParser() - config.read(config_path) - assert "IFPD2DB" in config.keys(), assert_msg - assert "namelen" in config["IFPD2DB"].keys(), assert_msg - assert "chromlen" in config["IFPD2DB"].keys(), assert_msg - assert "oligok" in config["IFPD2DB"].keys(), assert_msg - self._N = config["IFPD2DB"].getint("namelen") - self._c = config["IFPD2DB"].getint("chromlen") - self._k = config["IFPD2DB"].getint("oligok") - self._dtype = f"{self.N}s {self.c}s i i f f f f {self.k}s i i f f" - self._n_expected_fields = len(self.dtype.split(" ")) - self._n_bytes = struct.calcsize(self.dtype) - - def buffer(self, chrom): - chrom_path = os.path.join(self.path, f"{chrom}.bin") - if not os.path.isfile(chrom_path): - return - with open(chrom_path, "rb") as DBH: - bytepack = DBH.read(self.n_bytes) - while 0 != len(bytepack): - yield struct.unpack(self.dtype, bytepack) - bytepack = DBH.read(self.n_bytes) + def chromosome_recordnos(self) -> Dict[bytes, int]: + return self._chromosomes.recordnos + + def log_details(self) -> None: + logging.info(f"Database name: {self._args.output}") + logging.info(f"Sequence max length: {self._dtype['sequence'][2:]}") + logging.info("") + logging.info("[bold]## Input files[/bold]") + logging.info(f"hush files: {self._args.hush}") + logging.info(f"oligo-melting files: {self._args.melting}") + logging.info(f"OligoArrayAux files: {self._args.secondary}") + logging.info("") + logging.info("[bold]## Chromosome details[/bold]") + logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") + logging.info("Chromosomes:") + for chromosome, details in self._chromosomes.items(): + empty_label = "".join([" " for c in chromosome.decode()]) + logging.info(f"\t{chromosome.decode()} => size : {details['size']}") + logging.info(f"\t{empty_label} => recordno : {details['recordno']}") + logging.info("") + logging.info("[bold]Record details[/bold]") + logging.info(f"Record size in bytes: {self._record_byte_size}") + logging.info(f"Dtype: {self._dtype}") + + def __read_next_record(self, IH: IO) -> bytes: + return IH.read(self._record_byte_size) + + def buffer( + self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 + ) -> Iterator[Record]: + assert chromosome in self._chromosomes.keys() + with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: + if start_from_nt > 0: + position_in_bytes = self._chromosomes.chromosome_index(chromosome)[ + start_from_nt + ] + if position_in_bytes > 0: + IH.seek(position_in_bytes) + record = self.__read_next_record(IH) + while 0 != len(record): + parsed_record = Record(record, self._dtype) + if parsed_record["start"] > end_at_nt and end_at_nt > 0: + break + yield parsed_record + record = self.__read_next_record(IH) diff --git a/ifpd2/database2.py b/ifpd2/database2.py deleted file mode 100644 index 4f55ced8..00000000 --- a/ifpd2/database2.py +++ /dev/null @@ -1,370 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -import copy -from ifpd2 import const -import logging -import numpy as np # type: ignore -import os -import pickle -import pandas as pd # type: ignore -from tqdm import tqdm # type: ignore -from typing import Any, Dict, IO, Iterator, List, Set, Tuple - - -def get_dtype_length(dtype) -> int: - return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) - - -class ChromosomeIndex(object): - """ChromosomeIndex""" - - _bin_size: int - _index: Dict[int, Tuple[int, int]] - - def __init__(self, bin_size: int): - super(ChromosomeIndex, self).__init__() - assert bin_size >= 1 - self._bin_size = bin_size - - def __init_index(self, chrom_db: pd.DataFrame) -> None: - self._index = {} - chrom_size_nt = chrom_db["end"].values.max() - for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): - self._index[bin_id] = (np.inf, 0) - - def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: - for colname in ("chromosome", "start", "end"): - assert colname in chrom_db.columns, f"missing '{colname}' column" - - self.__init_index(chrom_db) - - chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) - assert 1 == len(chromosome_set) - chromosome = list(chromosome_set)[0].decode() - - current_position = -1 - for i in tqdm( - range(chrom_db.shape[0]), - desc=f"building '{chromosome}' index", - leave=False, - ): - position_in_nt = chrom_db["start"].values[i] - assert position_in_nt > current_position - current_position = position_in_nt - - position_in_bytes = record_byte_size * i - binned_to = position_in_nt // self._bin_size - - bin_start, bin_end = list(self._index[binned_to]) - if bin_start > position_in_bytes: - bin_start = position_in_bytes - if bin_end < position_in_bytes: - bin_end = position_in_bytes - self._index[binned_to] = (bin_start, bin_end) - - def __getitem__(self, position_in_nt: int) -> int: - assert self._index is not None - binned_to = position_in_nt // self._bin_size - if binned_to not in self._index: - return -1 - - position_in_bytes = self._index[binned_to][0] - if not np.isfinite(position_in_bytes): - return -1 - return position_in_bytes - - -class ChromosomeData(object): - """ChromosomeData""" - - __allowed_fields = ("recordno", "size_nt", "size_bytes") - _data: Dict[bytes, Dict[str, Any]] - _record_byte_size: int - - def __init__( - self, - chromosome_set: Set[bytes], - dtype: Dict[str, str], - index_bin_size: int = 100000, - ): - super(ChromosomeData, self).__init__() - - self._record_byte_size = get_dtype_length(dtype) - assert self._record_byte_size > 0 - - self._data = {} - for chromosome in set(chromosome_set): - self._data[chromosome] = dict(index=ChromosomeIndex(index_bin_size)) - - @property - def record_byte_size(self) -> int: - return self._record_byte_size - - def __len__(self) -> int: - return len(self._data) - - def keys(self) -> List[bytes]: - return list(self._data.keys()) - - def items(self) -> List[Tuple[bytes, Dict[str, Any]]]: - pass - - @property - def sizes_nt(self) -> Dict[bytes, int]: - return dict( - [(name, details["size_nt"]) for name, details in self._data.items()] - ) - - @property - def sizes_bytes(self) -> Dict[bytes, int]: - return dict( - [(name, details["size_bytes"]) for name, details in self._data.items()] - ) - - @property - def recordnos(self) -> Dict[bytes, int]: - return dict( - [(name, details["recordno"]) for name, details in self._data.items()] - ) - - def set(self, chromosome: bytes, key: str, value: int) -> None: - if "index" == key: - logging.warning(f"access precluded to '{key}' key") - if chromosome not in self._data: - raise KeyError(f"key '{chromosome.decode()}' not found") - if key not in self.__allowed_fields: - raise KeyError(f"key '{key}' not found") - self._data[chromosome][key] = value - - def chromosome_details(self, chromosome: bytes) -> Dict[str, int]: - return copy.copy(self._data[chromosome]) - - def chromosome_index(self, chromosome: bytes) -> ChromosomeIndex: - return copy.copy(self._data[chromosome]["index"]) - - def populate(self, chrom_db: pd.DataFrame) -> None: - assert "chromosome" in chrom_db.columns - selected_chrom = chrom_db["chromosome"][0] - self.set(selected_chrom, "recordno", chrom_db.shape[0]) - self.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) - self.set( - selected_chrom, - "size_bytes", - chrom_db.shape[0] * self._record_byte_size, - ) - self._data[selected_chrom]["index"].build(chrom_db, self._record_byte_size) - - def __check__(self) -> None: - for chromosome, details in self._data.items(): - assert ( - "size_nt" in details - ), f"missing nt size information for '{chromosome.decode()}'" - assert ( - "size_bytes" in details - ), f"missing byte size information for '{chromosome.decode()}'" - assert ( - "recordno" in details - ), f"missing size information for '{chromosome.decode()}'" - - -class Record(object): - """DataBase Record""" - - _data: Dict[str, Any] - - def __init__(self, record: bytes, column_dtypes: Dict[str, str]): - super(Record, self).__init__() - self.__parse_bytes(record, column_dtypes) - - @property - def data(self) -> Dict[str, Any]: - return copy.copy(self._data) - - def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: - assert len(record) == get_dtype_length(column_dtypes) - - self._data = {} - current_location = 0 - for label in const.database_columns: - dtype = column_dtypes[label] - byte_size = get_dtype_length({label: dtype}) - - self._data[label] = np.frombuffer( - record[current_location : (current_location + byte_size)], dtype - )[0] - - current_location += byte_size - - def to_dataframe(self) -> pd.DataFrame: - return pd.DataFrame(self._data, index=[0]) - - def to_csv(self, sep: str = ",") -> str: - csv_fields: List[str] = [] - for x in const.database_columns: - data = self._data[x] - if isinstance(data, bytes): - csv_fields.append(str(data.decode())) - else: - csv_fields.append(str(data)) - return sep.join(csv_fields) - - @staticmethod - def __norm_value_in_range(v, r): - if 0 == r[1]: - return np.nan - return (v - r[0]) / (r[1] - r[0]) - - def __update_score_by_nOT(self, F): - off_target_no = self._data["off_target_no"] - if off_target_no <= F[0]: - self._data["score"] = 0 - return - if off_target_no > F[1]: - self._data["score"] = np.inf - return - return self.__norm_value_in_range(off_target_no, F) - - def __update_score_by_dG_Tm(self, Gs): - ss_dG = self._data["ss_dG"] - tm_dG = self._data["Tm_dG"] - if ss_dG >= tm_dG * min(Gs): - self._data["score"] = 0 - return - if ss_dG < tm_dG * max(Gs): - self._data["score"] = np.inf - return - return self.__norm_value_in_range(ss_dG, [tm_dG * f for f in Gs]) - - def __update_score_by_dG_Gs(self, Gs): - ss_dG = self._data["ss_dG"] - if ss_dG >= Gs[0]: - self._data["score"] = 0 - return - if ss_dG < Gs[1]: - self._data["score"] = np.inf - return - return self.__norm_value_in_range(ss_dG, Gs) - - def add_score(self, F, Gs) -> None: - norm_nOT = self.__update_score_by_nOT(F) - if norm_nOT is None: - return - if all([x >= 0 for x in Gs]): - norm_ss_dG = self.__update_score_by_dG_Tm(Gs) - else: - norm_ss_dG = self.__update_score_by_dG_Gs(Gs) - if norm_ss_dG is None: - return - self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) - - def __getitem__(self, key: str) -> Any: - allowed_columns = ["score"] - allowed_columns.extend(const.database_columns) - if key not in allowed_columns: - raise KeyError(f"unrecognized key '{key}'") - else: - return self.data[key] - - def __repr__(self) -> str: - return str(self._data) - - -class DataBase(object): - """Buffering and checking class for ifpd2 database.""" - - _root: str - _args: argparse.Namespace - _chromosomes: ChromosomeData - _dtype: Dict[str, str] - _record_byte_size: int - - def __init__(self, path: str): - super(DataBase, self).__init__() - assert os.path.isdir(path), f"cannot find database folder '{path}'" - db_pickle_path = os.path.join(path, "db.pickle") - assert os.path.isfile(db_pickle_path), f"'db.pickle is missing in '{path}'" - - with open(db_pickle_path, "rb") as IH: - details = pickle.load(IH) - self._chromosomes = details["chromosomes"] - self._dtype = details["dtype"] - - assert isinstance(self._chromosomes, ChromosomeData) - self._chromosomes.__check__() - for chromosome in self.chromosome_list: - chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") - assert os.path.isfile( - chromosome_path - ), f"missing expected chromosome file: '{chromosome_path}'" - - self._record_byte_size = get_dtype_length(self._dtype) - assert self._record_byte_size > 0 - - self._root = path - - @property - def path(self): - return self._root - - @property - def chromosome_list(self) -> List[bytes]: - return self._chromosomes.keys() - - @property - def chromosome_sizes_nt(self) -> Dict[bytes, int]: - return self._chromosomes.sizes_nt - - @property - def chromosome_sizes_bytes(self) -> Dict[bytes, int]: - return self._chromosomes.sizes_bytes - - @property - def chromosome_recordnos(self) -> Dict[bytes, int]: - return self._chromosomes.recordnos - - def log_details(self) -> None: - logging.info(f"Database name: {self._args.output}") - logging.info(f"Sequence max length: {self._dtype['sequence'][2:]}") - logging.info("") - logging.info("[bold]## Input files[/bold]") - logging.info(f"hush files: {self._args.hush}") - logging.info(f"oligo-melting files: {self._args.melting}") - logging.info(f"OligoArrayAux files: {self._args.secondary}") - logging.info("") - logging.info("[bold]## Chromosome details[/bold]") - logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") - logging.info("Chromosomes:") - for chromosome, details in self._chromosomes.items(): - empty_label = "".join([" " for c in chromosome.decode()]) - logging.info(f"\t{chromosome.decode()} => size : {details['size']}") - logging.info(f"\t{empty_label} => recordno : {details['recordno']}") - logging.info("") - logging.info("[bold]Record details[/bold]") - logging.info(f"Record size in bytes: {self._record_byte_size}") - logging.info(f"Dtype: {self._dtype}") - - def __read_next_record(self, IH: IO) -> bytes: - return IH.read(self._record_byte_size) - - def buffer( - self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 - ) -> Iterator[Record]: - assert chromosome in self._chromosomes.keys() - with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: - if start_from_nt > 0: - position_in_bytes = self._chromosomes.chromosome_index(chromosome)[ - start_from_nt - ] - if position_in_bytes > 0: - IH.seek(position_in_bytes) - record = self.__read_next_record(IH) - while 0 != len(record): - parsed_record = Record(record, self._dtype) - if parsed_record["start"] > end_at_nt and end_at_nt > 0: - break - yield parsed_record - record = self.__read_next_record(IH) diff --git a/ifpd2/scripts/db_check.py b/ifpd2/scripts/db_check.py index 2cc7058e..d840edc1 100644 --- a/ifpd2/scripts/db_check.py +++ b/ifpd2/scripts/db_check.py @@ -5,7 +5,7 @@ import argparse from ifpd2.asserts import enable_rich_assert -from ifpd2.database2 import DataBase +from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap import logging import os diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index fccbfa53..ca132848 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -6,7 +6,7 @@ import argparse from ifpd2.asserts import enable_rich_assert from ifpd2 import const -from ifpd2.database2 import DataBase +from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap from tqdm import tqdm # type: ignore diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py index 3bf9b271..56c8a0c5 100644 --- a/ifpd2/scripts/db_info.py +++ b/ifpd2/scripts/db_info.py @@ -5,7 +5,7 @@ import argparse from ifpd2.asserts import enable_rich_assert -from ifpd2.database2 import DataBase +from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap import logging import os diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index 99f3d746..b01ac36b 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -7,7 +7,7 @@ import copy from ifpd2 import asserts as ass from ifpd2.asserts import enable_rich_assert -from ifpd2 import const, database2 as db2, io +from ifpd2 import const, database as db, io from ifpd2.scripts import arguments as ap import logging import numpy as np # type: ignore @@ -231,7 +231,7 @@ def parse_record_headers( def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: - chrom_data = db2.ChromosomeData(set(dbdf["chromosome"].values), dtype, args.binsize) + chrom_data = db.ChromosomeData(set(dbdf["chromosome"].values), dtype, args.binsize) with Progress() as progress: chromosome_track = progress.add_task( @@ -244,7 +244,7 @@ def write_database( chromosome_db.sort_values( by="start", axis=0, kind="mergesort", inplace=True ) - + logging.info(f"building index for {selected_chrom.decode()}") chrom_data.populate(chromosome_db) with open( diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 1b97ee9c..01205a35 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -17,7 +17,7 @@ from ifpd2 import asserts as ass from ifpd2.logging import add_log_file_handler -from ifpd2.database2 import DataBase +from ifpd2.database import DataBase from ifpd2.oligo import OligoGroup from ifpd2.probe import OligoProbeBuilder From e86ca7aa51eb28bedacdf2ebc536fa92aeb28228 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 16:08:53 +0100 Subject: [PATCH 036/185] Added indexing progress bar --- ifpd2/database.py | 15 ++++++++++++--- ifpd2/scripts/db_make.py | 7 ++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 5d4c21b9..a239b98e 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -11,6 +11,7 @@ import os import pickle import pandas as pd # type: ignore +from rich.progress import Progress, TaskID # type: ignore from typing import Any, Dict, IO, Iterator, List, Set, Tuple @@ -35,7 +36,12 @@ def __init_index(self, chrom_db: pd.DataFrame) -> None: for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): self._index[bin_id] = (np.inf, 0) - def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: + def build( + self, + chrom_db: pd.DataFrame, + record_byte_size: int, + track: Tuple[Progress, TaskID], + ) -> None: for colname in ("chromosome", "start", "end"): assert colname in chrom_db.columns, f"missing '{colname}' column" @@ -46,6 +52,7 @@ def build(self, chrom_db: pd.DataFrame, record_byte_size: int) -> None: current_position = -1 for i in range(chrom_db.shape[0]): + track[0].update(track[1], advance=1) position_in_nt = chrom_db["start"].values[i] assert position_in_nt > current_position current_position = position_in_nt @@ -140,7 +147,7 @@ def chromosome_details(self, chromosome: bytes) -> Dict[str, int]: def chromosome_index(self, chromosome: bytes) -> ChromosomeIndex: return copy.copy(self._data[chromosome]["index"]) - def populate(self, chrom_db: pd.DataFrame) -> None: + def populate(self, chrom_db: pd.DataFrame, track: Tuple[Progress, TaskID]) -> None: assert "chromosome" in chrom_db.columns selected_chrom = chrom_db["chromosome"][0] self.set(selected_chrom, "recordno", chrom_db.shape[0]) @@ -150,7 +157,9 @@ def populate(self, chrom_db: pd.DataFrame) -> None: "size_bytes", chrom_db.shape[0] * self._record_byte_size, ) - self._data[selected_chrom]["index"].build(chrom_db, self._record_byte_size) + self._data[selected_chrom]["index"].build( + chrom_db, self._record_byte_size, track + ) def __check__(self) -> None: for chromosome, details in self._data.items(): diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index b01ac36b..9213e2c0 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -245,7 +245,12 @@ def write_database( by="start", axis=0, kind="mergesort", inplace=True ) logging.info(f"building index for {selected_chrom.decode()}") - chrom_data.populate(chromosome_db) + indexing_track = progress.add_task( + f"indexing {selected_chrom.decode()}.bin", + total=chromosome_db.shape[0], + transient=True, + ) + chrom_data.populate(chromosome_db, (progress, indexing_track)) with open( os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" From 90f9a3834a6e840a8fbfb0b52ea58e2ea7c02332 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 16:24:59 +0100 Subject: [PATCH 037/185] Fixed dump of a region. --- ifpd2/database.py | 8 ++++++-- ifpd2/scripts/db_dump.py | 33 ++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index a239b98e..ad66dce3 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -112,7 +112,7 @@ def keys(self) -> List[bytes]: return list(self._data.keys()) def items(self) -> List[Tuple[bytes, Dict[str, Any]]]: - pass + return list(self._data.items()) @property def sizes_nt(self) -> Dict[bytes, int]: @@ -295,6 +295,7 @@ def __init__(self, path: str): details = pickle.load(IH) self._chromosomes = details["chromosomes"] self._dtype = details["dtype"] + self._args = details["args"] assert isinstance(self._chromosomes, ChromosomeData) self._chromosomes.__check__() @@ -343,7 +344,10 @@ def log_details(self) -> None: logging.info("Chromosomes:") for chromosome, details in self._chromosomes.items(): empty_label = "".join([" " for c in chromosome.decode()]) - logging.info(f"\t{chromosome.decode()} => size : {details['size']}") + logging.info(f"\t{chromosome.decode()} => size : {details['size_nt']} (nt)") + logging.info( + f"\t{chromosome.decode()} => size : {details['size_bytes']} (bytes)" + ) logging.info(f"\t{empty_label} => recordno : {details['recordno']}") logging.info("") logging.info("[bold]Record details[/bold]") diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index ca132848..629a0ac5 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -9,6 +9,7 @@ from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap from tqdm import tqdm # type: ignore +from typing import List def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: @@ -66,26 +67,40 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: return args -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - DB = DataBase(args.input) - +def get_chromosome_list(args: argparse.Namespace, DB: DataBase) -> List[bytes]: chromosome_list = DB.chromosome_list if args.chrom is not None: assert args.chrom.encode() in chromosome_list, f"'{args.chrom}' not found" chromosome_list = [args.chrom.encode()] + return chromosome_list - if args.region_start is not None: - chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] - assert args.region[0] < chrom_size_nt - args.region[0] = args.region_start +def dump(args: argparse.Namespace, DB: DataBase) -> None: print("\t".join(const.database_columns)) - for chromosome in chromosome_list: + for chromosome in get_chromosome_list(args, DB): walker = tqdm( DB.buffer(chromosome, args.region[0], args.region[1]), desc=f"dumping '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], ) for record in walker: + if args.region[0] > record["start"]: + continue print(record.to_csv("\t")) + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + DB = DataBase(args.input) + + if args.region_start is not None: + chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] + assert args.region_start < chrom_size_nt, " ".join( + [ + f"requested window starts ({args.region_start})", + f"after the chromosome end ({chrom_size_nt})", + ] + ) + args.region[0] = args.region_start + + dump(args, DB) From 98d84e8781fea1b89d60deb46bbd0235d4e539a7 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 16:27:47 +0100 Subject: [PATCH 038/185] Changed default database index bin size to 100 kb --- ifpd2/const.py | 2 ++ ifpd2/database.py | 2 +- ifpd2/scripts/db_make.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ifpd2/const.py b/ifpd2/const.py index c17a46e0..df7a0206 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -38,6 +38,8 @@ ] ) +DEFAULT_DATABASE_INDEX_BIN_SIZE = 100000 + database_columns = [ "name", "chromosome", diff --git a/ifpd2/database.py b/ifpd2/database.py index ad66dce3..bf012c87 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -90,7 +90,7 @@ def __init__( self, chromosome_set: Set[bytes], dtype: Dict[str, str], - index_bin_size: int = 100000, + index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE, ): super(ChromosomeData, self).__init__() diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index 9213e2c0..19f97f33 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -84,7 +84,7 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars "-b", "--binsize", metavar="indexBin", - default=1000000, + default=const.DEFAULT_DATABASE_INDEX_BIN_SIZE, type=int, help="Binning for the index.", ) From c99a8c18bf164ca570f302b8b9a5387950d696e3 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 17:19:39 +0100 Subject: [PATCH 039/185] Fixed issue of empty index bins. --- ifpd2/database.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index bf012c87..fe2cab96 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -36,20 +36,12 @@ def __init_index(self, chrom_db: pd.DataFrame) -> None: for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): self._index[bin_id] = (np.inf, 0) - def build( + def __populate_bins( self, chrom_db: pd.DataFrame, record_byte_size: int, track: Tuple[Progress, TaskID], ) -> None: - for colname in ("chromosome", "start", "end"): - assert colname in chrom_db.columns, f"missing '{colname}' column" - - self.__init_index(chrom_db) - - chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) - assert 1 == len(chromosome_set) - current_position = -1 for i in range(chrom_db.shape[0]): track[0].update(track[1], advance=1) @@ -67,6 +59,28 @@ def build( bin_end = position_in_bytes self._index[binned_to] = (bin_start, bin_end) + def __fill_empty_bins(self) -> None: + if not np.isfinite(self._index[0][0]): + self._index[0] = (0, 0) + for bin_id, (start, end) in self._index.items(): + if not np.isfinite(start): + self._index[bin_id] = (self._index[bin_id-1][1], self._index[bin_id-1][1]) + + def build( + self, + chrom_db: pd.DataFrame, + record_byte_size: int, + track: Tuple[Progress, TaskID], + ) -> None: + for colname in ("chromosome", "start", "end"): + assert colname in chrom_db.columns, f"missing '{colname}' column" + chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) + assert 1 == len(chromosome_set) + + self.__init_index(chrom_db) + self.__populate_bins(chrom_db, record_byte_size, track) + self.__fill_empty_bins() + def __getitem__(self, position_in_nt: int) -> int: assert self._index is not None binned_to = position_in_nt // self._bin_size From 7b83f402a142de18ef0d21fedbc7a556aa4cd26f Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 5 Mar 2021 17:19:51 +0100 Subject: [PATCH 040/185] Blacked. --- ifpd2/database.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index fe2cab96..d0c8b6ec 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -64,7 +64,10 @@ def __fill_empty_bins(self) -> None: self._index[0] = (0, 0) for bin_id, (start, end) in self._index.items(): if not np.isfinite(start): - self._index[bin_id] = (self._index[bin_id-1][1], self._index[bin_id-1][1]) + self._index[bin_id] = ( + self._index[bin_id - 1][1], + self._index[bin_id - 1][1], + ) def build( self, From ee681cd815094867aead05a2dc3a4672c3e1e4cf Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Sun, 7 Mar 2021 19:01:50 +0100 Subject: [PATCH 041/185] Refactored ChromosomeData and added ChromosomeDict class. --- ifpd2/database.py | 146 ++++++++++++++++++++++----------------- ifpd2/scripts/db_make.py | 10 +-- 2 files changed, 83 insertions(+), 73 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index d0c8b6ec..961518c4 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -97,99 +97,118 @@ def __getitem__(self, position_in_nt: int) -> int: class ChromosomeData(object): - """ChromosomeData""" + """Contains information on a chromosome""" - __allowed_fields = ("recordno", "size_nt", "size_bytes") - _data: Dict[bytes, Dict[str, Any]] + _name: str + _size_nt: int + _size_bytes: int + _recordno: int + _index: ChromosomeIndex _record_byte_size: int + __progress: Progress + def __init__( self, - chromosome_set: Set[bytes], + chromosome_db: pd.DataFrame, dtype: Dict[str, str], - index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE, + index_bin_size: int, + progress: Progress, ): super(ChromosomeData, self).__init__() + assert "chromosome" in chromosome_db.columns + selected_chrom = chromosome_db["chromosome"][0] + assert 1 == len(set(chromosome_db["chromosome"].value)) + self._record_byte_size = get_dtype_length(dtype) assert self._record_byte_size > 0 - self._data = {} - for chromosome in set(chromosome_set): - self._data[chromosome] = dict(index=ChromosomeIndex(index_bin_size)) + self._name = selected_chrom + self._recordno = chromosome_db.shape[0] + self._size_nt = chromosome_db["end"].values.max() + self._size_bytes = chromosome_db.shape[0] * self._record_byte_size + + self.__progress = progress + self._build_index(chromosome_db, index_bin_size) @property def record_byte_size(self) -> int: return self._record_byte_size + @property + def size_nt(self): + return self._size_nt + + @property + def size_bytes(self): + return self._size_bytes + + @property + def recordno(self): + return self._recordno + + @property + def index(self): + return copy.copy(self._index) + + def _build_index(self, chromosome_db: pd.DataFrame, index_bin_size: int) -> None: + assert index_bin_size > 0 + indexing_track = self.__progress.add_task( + f"indexing {self._name}.bin", + total=chromosome_db.shape[0], + transient=True, + ) + self._index = ChromosomeIndex(index_bin_size) + self._index.build( + chromosome_db, self._record_byte_size, (self.__progress, indexing_track) + ) + + +class ChromosomeDict(object): + """Wraps all chromosomes""" + + _data: Dict[bytes, ChromosomeData] + __progress: Progress + + def __init__(self, progress: Progress): + super(ChromosomeDict, self).__init__() + self.__progress = progress + def __len__(self) -> int: return len(self._data) def keys(self) -> List[bytes]: return list(self._data.keys()) - def items(self) -> List[Tuple[bytes, Dict[str, Any]]]: + def items(self) -> List[Tuple[bytes, ChromosomeData]]: return list(self._data.items()) @property def sizes_nt(self) -> Dict[bytes, int]: - return dict( - [(name, details["size_nt"]) for name, details in self._data.items()] - ) + return dict([(name, data.size_nt) for name, data in self._data.items()]) @property def sizes_bytes(self) -> Dict[bytes, int]: - return dict( - [(name, details["size_bytes"]) for name, details in self._data.items()] - ) + return dict([(name, data.size_bytes) for name, data in self._data.items()]) @property def recordnos(self) -> Dict[bytes, int]: - return dict( - [(name, details["recordno"]) for name, details in self._data.items()] - ) + return dict([(name, data.recordno) for name, data in self._data.items()]) - def set(self, chromosome: bytes, key: str, value: int) -> None: - if "index" == key: - logging.warning(f"access precluded to '{key}' key") - if chromosome not in self._data: - raise KeyError(f"key '{chromosome.decode()}' not found") - if key not in self.__allowed_fields: - raise KeyError(f"key '{key}' not found") - self._data[chromosome][key] = value - - def chromosome_details(self, chromosome: bytes) -> Dict[str, int]: + def get_chromosome(self, chromosome: bytes) -> ChromosomeData: return copy.copy(self._data[chromosome]) - def chromosome_index(self, chromosome: bytes) -> ChromosomeIndex: - return copy.copy(self._data[chromosome]["index"]) - - def populate(self, chrom_db: pd.DataFrame, track: Tuple[Progress, TaskID]) -> None: - assert "chromosome" in chrom_db.columns - selected_chrom = chrom_db["chromosome"][0] - self.set(selected_chrom, "recordno", chrom_db.shape[0]) - self.set(selected_chrom, "size_nt", chrom_db["end"].values.max()) - self.set( - selected_chrom, - "size_bytes", - chrom_db.shape[0] * self._record_byte_size, - ) - self._data[selected_chrom]["index"].build( - chrom_db, self._record_byte_size, track + def add_chromosome( + self, + chromosome_db: pd.DataFrame, + dtype: Dict[str, str], + index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE, + ) -> None: + self._data[chromosome_db["chromosome"][0]] = ChromosomeData( + chromosome_db, dtype, index_bin_size, self.__progress ) - def __check__(self) -> None: - for chromosome, details in self._data.items(): - assert ( - "size_nt" in details - ), f"missing nt size information for '{chromosome.decode()}'" - assert ( - "size_bytes" in details - ), f"missing byte size information for '{chromosome.decode()}'" - assert ( - "recordno" in details - ), f"missing size information for '{chromosome.decode()}'" - class Record(object): """DataBase Record""" @@ -298,7 +317,7 @@ class DataBase(object): _root: str _args: argparse.Namespace - _chromosomes: ChromosomeData + _chromosomes: ChromosomeDict _dtype: Dict[str, str] _record_byte_size: int @@ -314,8 +333,7 @@ def __init__(self, path: str): self._dtype = details["dtype"] self._args = details["args"] - assert isinstance(self._chromosomes, ChromosomeData) - self._chromosomes.__check__() + assert isinstance(self._chromosomes, ChromosomeDict) for chromosome in self.chromosome_list: chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") assert os.path.isfile( @@ -359,13 +377,11 @@ def log_details(self) -> None: logging.info("[bold]## Chromosome details[/bold]") logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") logging.info("Chromosomes:") - for chromosome, details in self._chromosomes.items(): + for chromosome, data in self._chromosomes.items(): empty_label = "".join([" " for c in chromosome.decode()]) - logging.info(f"\t{chromosome.decode()} => size : {details['size_nt']} (nt)") - logging.info( - f"\t{chromosome.decode()} => size : {details['size_bytes']} (bytes)" - ) - logging.info(f"\t{empty_label} => recordno : {details['recordno']}") + logging.info(f"\t{chromosome.decode()} => size : {data.size_nt} (nt)") + logging.info(f"\t{chromosome.decode()} => size : {data.size_bytes} (bytes)") + logging.info(f"\t{empty_label} => recordno : {data.recordno}") logging.info("") logging.info("[bold]Record details[/bold]") logging.info(f"Record size in bytes: {self._record_byte_size}") @@ -380,7 +396,7 @@ def buffer( assert chromosome in self._chromosomes.keys() with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: if start_from_nt > 0: - position_in_bytes = self._chromosomes.chromosome_index(chromosome)[ + position_in_bytes = self._chromosomes.get_chromosome(chromosome).index[ start_from_nt ] if position_in_bytes > 0: diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index 19f97f33..5ce91f31 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -231,9 +231,8 @@ def parse_record_headers( def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: - chrom_data = db.ChromosomeData(set(dbdf["chromosome"].values), dtype, args.binsize) - with Progress() as progress: + chrom_data = db.ChromosomeDict(progress) chromosome_track = progress.add_task( "exporting chromosome", total=len(chrom_data), transient=True ) @@ -245,12 +244,7 @@ def write_database( by="start", axis=0, kind="mergesort", inplace=True ) logging.info(f"building index for {selected_chrom.decode()}") - indexing_track = progress.add_task( - f"indexing {selected_chrom.decode()}.bin", - total=chromosome_db.shape[0], - transient=True, - ) - chrom_data.populate(chromosome_db, (progress, indexing_track)) + chrom_data.add_chromosome(chromosome_db, dtype, args.binsize) with open( os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" From 4bf7410b72d241cc95593c1d8857659e7a61d517 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Sun, 7 Mar 2021 20:35:54 +0100 Subject: [PATCH 042/185] Dropped sequence_length column. Fixed pickling of ChromosomeData. --- ifpd2/const.py | 2 -- ifpd2/database.py | 31 +++++++++++++++---------------- ifpd2/scripts/db_make.py | 35 ++++++++++++++++++++++------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/ifpd2/const.py b/ifpd2/const.py index df7a0206..171c8a8f 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -25,7 +25,6 @@ dtype_sequence_features = dict( [ ("sequence", "|S"), - ("sequence_length", " 0 @@ -129,8 +127,7 @@ def __init__( self._size_nt = chromosome_db["end"].values.max() self._size_bytes = chromosome_db.shape[0] * self._record_byte_size - self.__progress = progress - self._build_index(chromosome_db, index_bin_size) + self._build_index(chromosome_db, index_bin_size, progress) @property def record_byte_size(self) -> int: @@ -152,28 +149,33 @@ def recordno(self): def index(self): return copy.copy(self._index) - def _build_index(self, chromosome_db: pd.DataFrame, index_bin_size: int) -> None: + def _build_index( + self, chromosome_db: pd.DataFrame, index_bin_size: int, progress: Progress + ) -> None: assert index_bin_size > 0 - indexing_track = self.__progress.add_task( + indexing_track = progress.add_task( f"indexing {self._name}.bin", total=chromosome_db.shape[0], transient=True, ) self._index = ChromosomeIndex(index_bin_size) self._index.build( - chromosome_db, self._record_byte_size, (self.__progress, indexing_track) + chromosome_db, self._record_byte_size, (progress, indexing_track) ) + progress.remove_task(indexing_track) class ChromosomeDict(object): """Wraps all chromosomes""" + _index_bin_size: int _data: Dict[bytes, ChromosomeData] - __progress: Progress - def __init__(self, progress: Progress): + def __init__(self, index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE): super(ChromosomeDict, self).__init__() - self.__progress = progress + self._data = {} + assert index_bin_size > 0 + self._index_bin_size = index_bin_size def __len__(self) -> int: return len(self._data) @@ -200,13 +202,10 @@ def get_chromosome(self, chromosome: bytes) -> ChromosomeData: return copy.copy(self._data[chromosome]) def add_chromosome( - self, - chromosome_db: pd.DataFrame, - dtype: Dict[str, str], - index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE, + self, chromosome_db: pd.DataFrame, dtype: Dict[str, str], progress: Progress ) -> None: self._data[chromosome_db["chromosome"][0]] = ChromosomeData( - chromosome_db, dtype, index_bin_size, self.__progress + chromosome_db, dtype, self._index_bin_size, progress ) diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index 5ce91f31..d7d5cd91 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -170,7 +170,7 @@ def reduce_sequence_columns(df: pd.DataFrame) -> pd.DataFrame: return df -def add_sequence_details(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: +def parse_sequences(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: logging.info("adding sequence feature columns: length and GC-content") sequence_length_list: List[int] = [] gc_content_list: List[float] = [] @@ -184,9 +184,7 @@ def add_sequence_details(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str] (sequence.count(b"G") + sequence.count(b"C")) / len(sequence) ) - df["sequence_length"] = sequence_length_list df["gc_content"] = gc_content_list - dtype = copy.copy(const.dtype_sequence_features) dtype["sequence"] = f"|S{max(sequence_length_list)}" return (df.astype(dtype), dtype) @@ -203,14 +201,22 @@ def parse_record_headers( start_list: List[int] = [] end_list: List[int] = [] - for header in track(db.index, description="parsing record headers", transient=True): - name, position = header.split(" ") + for record in track( + db.itertuples(), + total=db.shape[0], + description="parsing record headers", + transient=True, + ): + name, position = record.Index.split(" ") name_list.append(name) name_length_set.add(len(name)) chromosome, extremes = position.split("=")[1].split(":") chromosome_list.append(f"{chromosome_prefix}{chromosome}") chromosome_length_set.add(len(f"{chromosome_prefix}{chromosome}")) start, end = [int(x) for x in extremes.split("-")] + assert (end - start) == len( + record.sequence + ), f"{end - start} != {len(record.sequence)}" start_list.append(start) end_list.append(end) @@ -232,11 +238,14 @@ def write_database( dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace ) -> None: with Progress() as progress: - chrom_data = db.ChromosomeDict(progress) - chromosome_track = progress.add_task( - "exporting chromosome", total=len(chrom_data), transient=True + chromosome_set: Set[bytes] = set(dbdf["chromosome"].values) + chromosome_data = db.ChromosomeDict(args.binsize) + chromosome_task = progress.add_task( + "exporting chromosome", + total=len(chromosome_set), + transient=True, ) - for selected_chrom in chrom_data.keys(): + for selected_chrom in chromosome_set: chromosome_db = dbdf.loc[selected_chrom == dbdf["chromosome"], :] logging.info(f"sorting records for {selected_chrom.decode()}") @@ -244,7 +253,7 @@ def write_database( by="start", axis=0, kind="mergesort", inplace=True ) logging.info(f"building index for {selected_chrom.decode()}") - chrom_data.add_chromosome(chromosome_db, dtype, args.binsize) + chromosome_data.add_chromosome(chromosome_db, dtype, progress) with open( os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" @@ -259,13 +268,13 @@ def write_database( ): IH.write(record.tobytes()) progress.update(writing_track, advance=1) - progress.update(chromosome_track, advance=1) + progress.update(chromosome_task, advance=1) logging.info("writing db.pickle") with open(os.path.join(args.output, "db.pickle"), "wb") as OH: args.parse = None args.run = None - pickle.dump(dict(chromosomes=chrom_data, dtype=dtype, args=args), OH) + pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=args), OH) @enable_rich_assert @@ -281,7 +290,7 @@ def run(args: argparse.Namespace) -> None: dbdf = populate_db(dbdf, args.secondary, io.parse_secondary, "OligoArrayAux") dbdf = reduce_sequence_columns(dbdf) - dbdf, dtype_sequence = add_sequence_details(dbdf) + dbdf, dtype_sequence = parse_sequences(dbdf) dbdf, dtype_header = parse_record_headers(dbdf, args.prefix) dtype = dict() From 4b0ff940cbd95805faf257b75591dbd33c6befe7 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Sun, 7 Mar 2021 22:58:58 +0100 Subject: [PATCH 043/185] Added reindex entry point. --- CHANGELOG.md | 3 ++- ifpd2/scripts/__init__.py | 4 +++- ifpd2/scripts/db.py | 1 + ifpd2/scripts/db_reindex.py | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 ifpd2/scripts/db_reindex.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d48cc72d..c27825d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,13 +8,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased ### Added -- New entry points: `db make`, `db dump`, `db info`, and `db merge`. +- New entry points: `db make`, `db dump`, `db info`, `db merge`, and `db_reindex`. - Module `io` with parsing functions for output generated via oligo-melting, hush, or OligoArrayAux. - Assert for compatibility with a given dtype. (only max value currently checked) ### Changed - New database format. - `dbchk` entry point changed to `db check`. +- Dropped sequence length column, as it can be inferred from the end/start columns. ## [1.0.0-alpha] - 2021-02-26 diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index e5a7cdd2..1984afdf 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -4,7 +4,8 @@ """ from ifpd2.scripts import arguments, ifpd2 -from ifpd2.scripts import db, db_check, db_dump, db_info, db_make, db_merge +from ifpd2.scripts import db, db_check, db_dump, db_info +from ifpd2.scripts import db_make, db_merge, db_reindex from ifpd2.scripts import query import logging @@ -25,5 +26,6 @@ "db_info", "db_make", "db_merge", + "db_reindex", "query", ] diff --git a/ifpd2/scripts/db.py b/ifpd2/scripts/db.py index 592e79c2..03ef1020 100644 --- a/ifpd2/scripts/db.py +++ b/ifpd2/scripts/db.py @@ -34,5 +34,6 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars scripts.db_info.init_parser(sub_subparsers) scripts.db_make.init_parser(sub_subparsers) scripts.db_merge.init_parser(sub_subparsers) + scripts.db_reindex.init_parser(sub_subparsers) return parser diff --git a/ifpd2/scripts/db_reindex.py b/ifpd2/scripts/db_reindex.py new file mode 100644 index 00000000..58502248 --- /dev/null +++ b/ifpd2/scripts/db_reindex.py @@ -0,0 +1,36 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.asserts import enable_rich_assert +from ifpd2.scripts import arguments as ap +import logging + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + "reindex", + description=""" +Re-build a database's index. +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Reindex a database.", + ) + + parser = ap.add_version_option(parser) + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + return args + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + raise NotImplementedError + logging.info("Done. :thumbs_up: :smiley:") From 0ad125bcd898248f31c6fb5ea1790f20f5e72e23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 08:45:54 +0000 Subject: [PATCH 044/185] Bump rich from 9.12.4 to 9.13.0 (#15) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ecedc7e4..f06bac63 100644 --- a/poetry.lock +++ b/poetry.lock @@ -70,7 +70,7 @@ python-versions = "*" [[package]] name = "rich" -version = "9.12.4" +version = "9.13.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -184,8 +184,8 @@ pytz = [ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] rich = [ - {file = "rich-9.12.4-py3-none-any.whl", hash = "sha256:4654e20bc44c0b21e387b58edaf073325e5d12f8e482b70db7d1dd7a4949f6f0"}, - {file = "rich-9.12.4.tar.gz", hash = "sha256:1e000895221df23cd7f828a9511c15d10189850d4f923b6d8c3d29a32ca95265"}, + {file = "rich-9.13.0-py3-none-any.whl", hash = "sha256:9004f6449c89abadf689dad6f92393e760b8c3a8a8c4ea6d8d474066307c0e66"}, + {file = "rich-9.13.0.tar.gz", hash = "sha256:d59e94a0e3e686f0d268fe5c7060baa1bd6744abca71b45351f5850a3aaa6764"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From a5fc5ace8171c907f4f5fa74ed7d0b1fb819c410 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Mar 2021 08:46:15 +0000 Subject: [PATCH 045/185] Bump tqdm from 4.58.0 to 4.59.0 (#16) --- poetry.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index f06bac63..48577a4e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,7 +95,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.58.0" +version = "4.59.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -103,6 +103,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.extras] dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] telegram = ["requests"] [[package]] @@ -192,8 +193,8 @@ six = [ {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] tqdm = [ - {file = "tqdm-4.58.0-py2.py3-none-any.whl", hash = "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089"}, - {file = "tqdm-4.58.0.tar.gz", hash = "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba"}, + {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, + {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, ] typing-extensions = [ {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, From ed99f13e8aa5e64b76c7cf84b4eeef5d99555a1c Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 14:31:19 +0100 Subject: [PATCH 046/185] Split chromosome classes from database. Added docstrings. --- ifpd2/__init__.py | 3 +- ifpd2/chromosome.py | 238 ++++++++++++++++++++++++++++ ifpd2/database.py | 367 +++++++++++++++++++------------------------- ifpd2/io.py | 42 ++++- 4 files changed, 440 insertions(+), 210 deletions(-) create mode 100644 ifpd2/chromosome.py diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index d0c0b877..4f1e5ced 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -6,7 +6,7 @@ from ifpd2.const import __version__ from ifpd2 import asserts, io from ifpd2 import walker -from ifpd2 import database +from ifpd2 import chromosome, database from ifpd2 import oligo, probe, probe_set __all__ = [ @@ -14,6 +14,7 @@ "asserts", "io", "walker", + "chromosome", "database", "oligo", "probe", diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py new file mode 100644 index 00000000..5bfd571d --- /dev/null +++ b/ifpd2/chromosome.py @@ -0,0 +1,238 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import copy +from ifpd2 import const +from ifpd2.io import get_dtype_length +import numpy as np # type: ignore +import pandas as pd # type: ignore +from rich.progress import Progress, TaskID # type: ignore +from typing import Dict, List, Set, Tuple + + +class ChromosomeIndex(object): + """ChromosomeIndex""" + + _bin_size: int + _index: Dict[int, Tuple[int, int]] + + def __init__(self, bin_size: int): + super(ChromosomeIndex, self).__init__() + assert bin_size >= 1 + self._bin_size = bin_size + + def __init_index(self, chrom_db: pd.DataFrame) -> None: + """Initialize chromosome index + + Creates an chromosome index with empty bins. + + Arguments: + chrom_db {pd.DataFrame} -- chromosome database + """ + self._index = {} + chrom_size_nt = chrom_db["end"].values.max() + for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): + self._index[bin_id] = (np.inf, 0) + + def __populate_bins( + self, + chrom_db: pd.DataFrame, + record_byte_size: int, + track: Tuple[Progress, TaskID], + ) -> None: + """Populate bins. + + Add extremities (byte positions) of each bin. + + Arguments: + chrom_db {pd.DataFrame} -- chromosome database + record_byte_size {int} -- size of a record in bytes (based on column dtype) + track {Tuple[Progress, TaskID]} -- progress bar details + """ + current_position = -1 + for i in range(chrom_db.shape[0]): + track[0].update(track[1], advance=1) + position_in_nt = chrom_db["start"].values[i] + assert position_in_nt > current_position + current_position = position_in_nt + + position_in_bytes = record_byte_size * i + binned_to = position_in_nt // self._bin_size + + bin_start, bin_end = list(self._index[binned_to]) + if bin_start > position_in_bytes: + bin_start = position_in_bytes + if bin_end < position_in_bytes: + bin_end = position_in_bytes + self._index[binned_to] = (bin_start, bin_end) + + def __fill_empty_bins(self) -> None: + """Populate empty bins of the index.""" + if not np.isfinite(self._index[0][0]): + self._index[0] = (0, 0) + for bin_id, (start, end) in self._index.items(): + if not np.isfinite(start): + self._index[bin_id] = ( + self._index[bin_id - 1][1], + self._index[bin_id - 1][1], + ) + + def build( + self, + chrom_db: pd.DataFrame, + record_byte_size: int, + track: Tuple[Progress, TaskID], + ) -> None: + """Build chromosome index. + + [description] + + Arguments: + chrom_db {pd.DataFrame} -- chromosome database + record_byte_size {int} -- size of a record in bytes (based on column dtype) + track {Tuple[Progress, TaskID]} -- progress bar details + """ + for colname in ("chromosome", "start", "end"): + assert colname in chrom_db.columns, f"missing '{colname}' column" + chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) + assert 1 == len(chromosome_set) + + self.__init_index(chrom_db) + self.__populate_bins(chrom_db, record_byte_size, track) + self.__fill_empty_bins() + + def __getitem__(self, position_in_nt: int) -> int: + assert self._index is not None + binned_to = position_in_nt // self._bin_size + if binned_to not in self._index: + return -1 + + position_in_bytes = self._index[binned_to][0] + if not np.isfinite(position_in_bytes): + return -1 + return position_in_bytes + + +class ChromosomeData(object): + """Contains information on a chromosome""" + + _name: str + _size_nt: int + _size_bytes: int + _recordno: int + _index: ChromosomeIndex + _record_byte_size: int + + def __init__( + self, + chromosome_db: pd.DataFrame, + dtype: Dict[str, str], + index_bin_size: int, + progress: Progress, + ): + super(ChromosomeData, self).__init__() + + assert "chromosome" in chromosome_db.columns + selected_chrom = chromosome_db["chromosome"][0] + assert 1 == len(set(chromosome_db["chromosome"].values)) + + self._record_byte_size = get_dtype_length(dtype) + assert self._record_byte_size > 0 + + self._name = selected_chrom + self._recordno = chromosome_db.shape[0] + self._size_nt = chromosome_db["end"].values.max() + self._size_bytes = chromosome_db.shape[0] * self._record_byte_size + + self._build_index(chromosome_db, index_bin_size, progress) + + @property + def record_byte_size(self) -> int: + return self._record_byte_size + + @property + def size_nt(self): + return self._size_nt + + @property + def size_bytes(self): + return self._size_bytes + + @property + def recordno(self): + return self._recordno + + @property + def index(self): + return copy.copy(self._index) + + def _build_index( + self, chromosome_db: pd.DataFrame, index_bin_size: int, progress: Progress + ) -> None: + """Build a chromosome index. + + Build bin index based on chromosome length and bin size. + + Arguments: + chromosome_db {pd.DataFrame} -- chromosome database + index_bin_size {int} -- index bin size + progress {Progress} -- progress instance for progress bar with rich + """ + assert index_bin_size > 0 + indexing_track = progress.add_task( + f"indexing {self._name}.bin", + total=chromosome_db.shape[0], + transient=True, + ) + self._index = ChromosomeIndex(index_bin_size) + self._index.build( + chromosome_db, self._record_byte_size, (progress, indexing_track) + ) + progress.remove_task(indexing_track) + + +class ChromosomeDict(object): + """Wraps ChromosomeData instances into a dictionary + and allow easier access to their attributes.""" + + _index_bin_size: int + _data: Dict[bytes, ChromosomeData] + + def __init__(self, index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE): + super(ChromosomeDict, self).__init__() + self._data = {} + assert index_bin_size > 0 + self._index_bin_size = index_bin_size + + def __len__(self) -> int: + return len(self._data) + + def keys(self) -> List[bytes]: + return list(self._data.keys()) + + def items(self) -> List[Tuple[bytes, ChromosomeData]]: + return list(self._data.items()) + + @property + def sizes_nt(self) -> Dict[bytes, int]: + return dict([(name, data.size_nt) for name, data in self._data.items()]) + + @property + def sizes_bytes(self) -> Dict[bytes, int]: + return dict([(name, data.size_bytes) for name, data in self._data.items()]) + + @property + def recordnos(self) -> Dict[bytes, int]: + return dict([(name, data.recordno) for name, data in self._data.items()]) + + def get_chromosome(self, chromosome: bytes) -> ChromosomeData: + return copy.copy(self._data[chromosome]) + + def add_chromosome( + self, chromosome_db: pd.DataFrame, dtype: Dict[str, str], progress: Progress + ) -> None: + self._data[chromosome_db["chromosome"][0]] = ChromosomeData( + chromosome_db, dtype, self._index_bin_size, progress + ) diff --git a/ifpd2/database.py b/ifpd2/database.py index e6152c62..91cef3c8 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -6,207 +6,14 @@ import argparse import copy from ifpd2 import const +from ifpd2.chromosome import ChromosomeDict +from ifpd2.io import get_dtype_length import logging import numpy as np # type: ignore import os import pickle import pandas as pd # type: ignore -from rich.progress import Progress, TaskID # type: ignore -from typing import Any, Dict, IO, Iterator, List, Set, Tuple - - -def get_dtype_length(dtype) -> int: - return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) - - -class ChromosomeIndex(object): - """ChromosomeIndex""" - - _bin_size: int - _index: Dict[int, Tuple[int, int]] - - def __init__(self, bin_size: int): - super(ChromosomeIndex, self).__init__() - assert bin_size >= 1 - self._bin_size = bin_size - - def __init_index(self, chrom_db: pd.DataFrame) -> None: - self._index = {} - chrom_size_nt = chrom_db["end"].values.max() - for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): - self._index[bin_id] = (np.inf, 0) - - def __populate_bins( - self, - chrom_db: pd.DataFrame, - record_byte_size: int, - track: Tuple[Progress, TaskID], - ) -> None: - current_position = -1 - for i in range(chrom_db.shape[0]): - track[0].update(track[1], advance=1) - position_in_nt = chrom_db["start"].values[i] - assert position_in_nt > current_position - current_position = position_in_nt - - position_in_bytes = record_byte_size * i - binned_to = position_in_nt // self._bin_size - - bin_start, bin_end = list(self._index[binned_to]) - if bin_start > position_in_bytes: - bin_start = position_in_bytes - if bin_end < position_in_bytes: - bin_end = position_in_bytes - self._index[binned_to] = (bin_start, bin_end) - - def __fill_empty_bins(self) -> None: - if not np.isfinite(self._index[0][0]): - self._index[0] = (0, 0) - for bin_id, (start, end) in self._index.items(): - if not np.isfinite(start): - self._index[bin_id] = ( - self._index[bin_id - 1][1], - self._index[bin_id - 1][1], - ) - - def build( - self, - chrom_db: pd.DataFrame, - record_byte_size: int, - track: Tuple[Progress, TaskID], - ) -> None: - for colname in ("chromosome", "start", "end"): - assert colname in chrom_db.columns, f"missing '{colname}' column" - chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) - assert 1 == len(chromosome_set) - - self.__init_index(chrom_db) - self.__populate_bins(chrom_db, record_byte_size, track) - self.__fill_empty_bins() - - def __getitem__(self, position_in_nt: int) -> int: - assert self._index is not None - binned_to = position_in_nt // self._bin_size - if binned_to not in self._index: - return -1 - - position_in_bytes = self._index[binned_to][0] - if not np.isfinite(position_in_bytes): - return -1 - return position_in_bytes - - -class ChromosomeData(object): - """Contains information on a chromosome""" - - _name: str - _size_nt: int - _size_bytes: int - _recordno: int - _index: ChromosomeIndex - _record_byte_size: int - - def __init__( - self, - chromosome_db: pd.DataFrame, - dtype: Dict[str, str], - index_bin_size: int, - progress: Progress, - ): - super(ChromosomeData, self).__init__() - - assert "chromosome" in chromosome_db.columns - selected_chrom = chromosome_db["chromosome"][0] - assert 1 == len(set(chromosome_db["chromosome"].values)) - - self._record_byte_size = get_dtype_length(dtype) - assert self._record_byte_size > 0 - - self._name = selected_chrom - self._recordno = chromosome_db.shape[0] - self._size_nt = chromosome_db["end"].values.max() - self._size_bytes = chromosome_db.shape[0] * self._record_byte_size - - self._build_index(chromosome_db, index_bin_size, progress) - - @property - def record_byte_size(self) -> int: - return self._record_byte_size - - @property - def size_nt(self): - return self._size_nt - - @property - def size_bytes(self): - return self._size_bytes - - @property - def recordno(self): - return self._recordno - - @property - def index(self): - return copy.copy(self._index) - - def _build_index( - self, chromosome_db: pd.DataFrame, index_bin_size: int, progress: Progress - ) -> None: - assert index_bin_size > 0 - indexing_track = progress.add_task( - f"indexing {self._name}.bin", - total=chromosome_db.shape[0], - transient=True, - ) - self._index = ChromosomeIndex(index_bin_size) - self._index.build( - chromosome_db, self._record_byte_size, (progress, indexing_track) - ) - progress.remove_task(indexing_track) - - -class ChromosomeDict(object): - """Wraps all chromosomes""" - - _index_bin_size: int - _data: Dict[bytes, ChromosomeData] - - def __init__(self, index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE): - super(ChromosomeDict, self).__init__() - self._data = {} - assert index_bin_size > 0 - self._index_bin_size = index_bin_size - - def __len__(self) -> int: - return len(self._data) - - def keys(self) -> List[bytes]: - return list(self._data.keys()) - - def items(self) -> List[Tuple[bytes, ChromosomeData]]: - return list(self._data.items()) - - @property - def sizes_nt(self) -> Dict[bytes, int]: - return dict([(name, data.size_nt) for name, data in self._data.items()]) - - @property - def sizes_bytes(self) -> Dict[bytes, int]: - return dict([(name, data.size_bytes) for name, data in self._data.items()]) - - @property - def recordnos(self) -> Dict[bytes, int]: - return dict([(name, data.recordno) for name, data in self._data.items()]) - - def get_chromosome(self, chromosome: bytes) -> ChromosomeData: - return copy.copy(self._data[chromosome]) - - def add_chromosome( - self, chromosome_db: pd.DataFrame, dtype: Dict[str, str], progress: Progress - ) -> None: - self._data[chromosome_db["chromosome"][0]] = ChromosomeData( - chromosome_db, dtype, self._index_bin_size, progress - ) +from typing import Any, Dict, IO, Iterator, List class Record(object): @@ -223,18 +30,23 @@ def data(self) -> Dict[str, Any]: return copy.copy(self._data) def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: - assert len(record) == get_dtype_length(column_dtypes) + """Parse record bytes. + + Parses a record from its bytes based on column dtypes. + Arguments: + record {bytes} -- record bytes + column_dtypes {Dict[str, str]} -- column dtypes + """ + assert len(record) == get_dtype_length(column_dtypes) self._data = {} current_location = 0 for label in const.database_columns: dtype = column_dtypes[label] byte_size = get_dtype_length({label: dtype}) - self._data[label] = np.frombuffer( record[current_location : (current_location + byte_size)], dtype )[0] - current_location += byte_size def to_dataframe(self) -> pd.DataFrame: @@ -321,6 +133,10 @@ class DataBase(object): _record_byte_size: int def __init__(self, path: str): + """ + Arguments: + path {str} -- absolute path to database folder + """ super(DataBase, self).__init__() assert os.path.isdir(path), f"cannot find database folder '{path}'" db_pickle_path = os.path.join(path, "db.pickle") @@ -365,6 +181,7 @@ def chromosome_recordnos(self) -> Dict[bytes, int]: return self._chromosomes.recordnos def log_details(self) -> None: + """Log database details.""" logging.info(f"Database name: {self._args.output}") logging.info(f"Sequence max length: {self._dtype['sequence'][2:]}") logging.info("") @@ -386,24 +203,158 @@ def log_details(self) -> None: logging.info(f"Record size in bytes: {self._record_byte_size}") logging.info(f"Dtype: {self._dtype}") - def __read_next_record(self, IH: IO) -> bytes: + def __jump_to_bin(self, IH: IO, chromosome: bytes, start_from_nt: int = 0) -> None: + """Move buffer pointer to the first record of a bin. + + + Arguments: + IH {IO} -- database input handler + chromosome {bytes} -- chromosome label + + Keyword Arguments: + start_from_nt {int} -- position in nucleotides (default: {0}) + """ + position_in_bytes = self._chromosomes.get_chromosome(chromosome).index[ + start_from_nt + ] + IH.seek(position_in_bytes) + + def read_next_record(self, IH: IO) -> bytes: + """Read the next record. + + The buffer pointer moves to the start of the following record. + + Arguments: + IH {IO} -- database input handle + + Returns: + bytes -- record bytes + """ return IH.read(self._record_byte_size) + def read_previous_record(self, IH: IO) -> bytes: + """Read the previous record. + + The buffer pointer does not move. + + Arguments: + IH {IO} -- database input handle + + Returns: + bytes -- record bytes + """ + self.rewind(IH) + return self.read_next_record(IH) + + def read_next_record_and_rewind(self, IH: IO) -> bytes: + """Reads the next record. + + The buffer pointer does not move. + + Arguments: + IH {IO} -- database input handle + + Returns: + bytes -- record bytes + """ + record = self.read_next_record(IH) + self.rewind(IH) + return record + + def next_record_exists(self, IH: IO) -> bool: + """Tries reading the next record. + + + + Arguments: + IH {IO} -- database input handle + + Returns: + bool -- whether next record exists + """ + if 0 == len(self.read_next_record_and_rewind(IH)): + return False + return True + + def rewind(self, IH: IO) -> None: + """Rewind of one record. + + The buffer pointer moves to the beginning of the previous record. + + Arguments: + IH {IO} -- database input handle + """ + IH.seek(max(IH.tell() - self._record_byte_size, 0)) + + def skip(self, IH: IO) -> None: + """Skip one record. + + The buffer pointer moves to the beginning of the following record. + + Arguments: + IH {IO} -- database input handle + """ + IH.seek(IH.tell() + self._record_byte_size) + + def fastforward(self, IH: IO, chromosome: bytes, start_from_nt: int) -> None: + """Jump to the first record at a given position. + + First the buffer pointer is moved to the beginning of the bin containing the + start_from_nt position. Then, records are read an parsed until their start is + greater than the start_from_nt value. Finally, the buffer pointer is moved to + the beginning of the last parsed record. + + Arguments: + IH {IO} -- database input handle + chromosome {bytes} -- chromosome label + start_from_nt {int} -- position to fastforward to (in nucleotides) + """ + if 0 == start_from_nt: + IH.seek(0) + return + self.__jump_to_bin(IH, chromosome, start_from_nt) + + record_start = 0 + while record_start < start_from_nt: + if self.next_record_exists(IH): + record_start = Record(self.read_next_record(IH), self._dtype)["start"] + else: + logging.warning( + " ".join( + [ + "the specified location", + f"({chromosome.decode()}:{start_from_nt})", + "is outside the database.", + ] + ) + ) + return + def buffer( self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 ) -> Iterator[Record]: + """Buffer a chromosome's records. + + Buffer records from a chromosome withing the specified region. + To buffer the whole records, specify a [0, -1] region. + + Arguments: + chromosome {bytes} -- chromosome label + + Keyword Arguments: + start_from_nt {int} -- region starting position (default: {0}) + end_at_nt {int} -- region end position (default: {-1}) + + Yields: + Iterator[Record] -- parsed record + """ assert chromosome in self._chromosomes.keys() with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: - if start_from_nt > 0: - position_in_bytes = self._chromosomes.get_chromosome(chromosome).index[ - start_from_nt - ] - if position_in_bytes > 0: - IH.seek(position_in_bytes) - record = self.__read_next_record(IH) + self.fastforward(IH, chromosome, start_from_nt) + record = self.read_next_record(IH) while 0 != len(record): parsed_record = Record(record, self._dtype) if parsed_record["start"] > end_at_nt and end_at_nt > 0: break yield parsed_record - record = self.__read_next_record(IH) + record = self.read_next_record(IH) diff --git a/ifpd2/io.py b/ifpd2/io.py index bde81aca..1cf3fee0 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -9,11 +9,31 @@ import logging import os import pandas as pd # type: ignore -from typing import List, Set, Tuple +from typing import Dict, List, Set, Tuple from tqdm import tqdm # type: ignore +def get_dtype_length(dtype: Dict[str, str]) -> int: + """Calculate dtype record length in bytes. + + Arguments: + dtype {Dict[str, str]} -- column dtype Dict[column_name: column_dtype] + + Returns: + int -- length of record in bytes + """ + return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) + + def parse_hush(path: str) -> pd.DataFrame: + """Parse HUSH output. + + Arguments: + path {str} -- path to HUSH output file + + Returns: + pd.DataFrame -- parsed HUSH data + """ assert os.path.isfile(path), f"cannot find file '{path}'" logging.info(f"parsing: '{path}'") sequence_lengths: Set[int] = set() @@ -39,6 +59,18 @@ def parse_hush(path: str) -> pd.DataFrame: def parse_melting(path: str, sep: str = "\t", header: bool = True) -> pd.DataFrame: + """Parse oligo-melting output. + + Arguments: + path {str} -- path to oligo-melting output + + Keyword Arguments: + sep {str} -- column separator (default: {"t"}) + header {bool} -- whether to expect a header line (default: {True}) + + Returns: + pd.DataFrame -- parsed oligo-melting data + """ assert os.path.isfile(path), f"cannot find file '{path}'" logging.info(f"parsing: '{path}'") expected_columns = copy.copy(const.dtype_melting) @@ -54,6 +86,14 @@ def parse_melting(path: str, sep: str = "\t", header: bool = True) -> pd.DataFra def parse_secondary(path: str) -> pd.DataFrame: + """Parse OligoArrayAux .ct output. + + Arguments: + path {str} -- path to OligoArrayAux .ct output + + Returns: + pd.DataFrame -- parsed OligoArrayAux .ct data + """ assert os.path.isfile(path), f"cannot find file '{path}'" logging.info(f"parsing: '{path}'") parsed_lines: List[Tuple[str, float]] = [] From 464ccae1fd05937c88102a95338f5af6aeb7a143 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 14:31:27 +0100 Subject: [PATCH 047/185] Implementing new walker. --- ifpd2/walker2.py | 104 ++++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 9368857c..de53d019 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -3,57 +3,61 @@ @contact: gigi.ga90@gmail.com """ -import logging -import pandas as pd # type: ignore -from typing import Tuple, Union - - -class GenomicWindowSet(object): - _window_data: pd.DataFrame = pd.DataFrame( - columns=[ - "set_id", - "window_id", - "start", - "end", - "focus_start", - "focus_end", - ] - ) - _window_id: int = -1 - - feature: str # Chromosome - region: Tuple[int, int] - - n_probes: int - window_size: int - window_shift: float - - # Either in nt (x>1) or fraction of window_size (01) or fraction of focus_size (0= 0 + ), f"start should be greater than or equal to 0: {chromStart}" + assert ( + chromEnd > chromStart + ), f"end should be greater than start: {chromStart}-{chromEnd}" + assert ( + focus > 0 and focus <= 1 + ), f"focus expected to be in the (0,1] range: {focus}" + self.__chrom = chrom + self.__chromStart = chromStart + self.__chromEnd = chromEnd + self.__focusStart = int( + (chromStart + chromEnd) / 2 - (chromEnd - chromStart) * focus + ) + self.__focusEnd = int( + (chromStart + chromEnd) / 2 + (chromEnd - chromStart) * focus + ) @property - def growing(self) -> bool: - return self._growing + def chromosome(self) -> bytes: + return self.__chrom @property - def reached_last_window(self) -> bool: - return (self._window_id + 1) == self._window_data.shape[0] - - def init_windows_for_n_probes(self, n_probes: int) -> None: - if 0 < self._window_data.shape[0]: - logging.warning("cannot re-initalize windows.") - return - - def init_windows_by_size(self, size: int, shift: float) -> None: - if 0 < self._window_data.shape[0]: - logging.warning("cannot re-initalize windows.") - return + def start(self) -> int: + return self.__chromStart + + @property + def end(self) -> int: + return self.__chromEnd + + @property + def focus(self) -> Tuple[int, int]: + return (self.__focusStart, self.__focusEnd) + + +class Walker(object): + """docstring for Walker""" + + def __init__(self): + super(Walker, self).__init__() + + def walk_region(self, db: DataBase, region: GenomicRegion): + db.buffer(region.chromosome, region.start, region.end) From de84d4e1235683141b5530e348a5678e22f42d3c Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 16:14:36 +0100 Subject: [PATCH 048/185] Implemented walker with growing focus region. --- ifpd2/walker2.py | 93 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 10 deletions(-) diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index de53d019..fecf4d0c 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -3,8 +3,10 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2.database import DataBase -from typing import Tuple +from ifpd2.database import DataBase, Record +import itertools +import logging +from typing import Iterator, List, Tuple class GenomicRegion(object): @@ -13,9 +15,24 @@ class GenomicRegion(object): __chrom: bytes __chromStart: int __chromEnd: int + __focusStart: int + __focusEnd: int + __focusSize: int + __focusStep: int - def __init__(self, chrom: bytes, chromStart: int, chromEnd: int, focus: float = 1): + def __init__( + self, + chrom: bytes, + chromStart: int, + chromEnd: int, + focus: float = 1, + focus_step: float = 1, + ): super(GenomicRegion, self).__init__() + self.__init_region(chrom, chromStart, chromEnd) + self.__init_focus(focus, focus_step) + + def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: assert 0 != len(chrom), "chromosome cannot be empty" assert ( chromStart >= 0 @@ -23,18 +40,27 @@ def __init__(self, chrom: bytes, chromStart: int, chromEnd: int, focus: float = assert ( chromEnd > chromStart ), f"end should be greater than start: {chromStart}-{chromEnd}" - assert ( - focus > 0 and focus <= 1 - ), f"focus expected to be in the (0,1] range: {focus}" self.__chrom = chrom self.__chromStart = chromStart self.__chromEnd = chromEnd + + def __init_focus(self, focus: float, focus_step: float) -> None: + if focus > 1: + assert focus <= self.__chromEnd - self.__chromStart + self.__focusSize = int(focus) + else: + self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus) self.__focusStart = int( - (chromStart + chromEnd) / 2 - (chromEnd - chromStart) * focus + (self.__chromStart + self.__chromEnd) / 2 - self.__focusSize / 2 ) self.__focusEnd = int( - (chromStart + chromEnd) / 2 + (chromEnd - chromStart) * focus + (self.__chromStart + self.__chromEnd) / 2 + self.__focusSize / 2 ) + assert focus_step > 0 + if focus_step > 1: + self.__focusStep = int(focus_step) + else: + self.__focusStep = int(self.__focusSize * focus_step) @property def chromosome(self) -> bytes: @@ -48,10 +74,29 @@ def start(self) -> int: def end(self) -> int: return self.__chromEnd + @property + def region(self) -> Tuple[int, int]: + return (self.__chromStart, self.__chromEnd) + @property def focus(self) -> Tuple[int, int]: return (self.__focusStart, self.__focusEnd) + @property + def focus_step(self) -> int: + return self.__focusStep + + def can_increase_focus(self) -> bool: + return self.focus != self.region + + def increase_focus(self) -> None: + if self.can_increase_focus(): + logging.warning("cannot increase the focus region any further") + self.__focusStart = max( + self.__chromStart, self.__focusStart - self.__focusStep // 2 + ) + self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) + class Walker(object): """docstring for Walker""" @@ -59,5 +104,33 @@ class Walker(object): def __init__(self): super(Walker, self).__init__() - def walk_region(self, db: DataBase, region: GenomicRegion): - db.buffer(region.chromosome, region.start, region.end) + def walk_region( + self, db: DataBase, region: GenomicRegion + ) -> Iterator[List[Record]]: + focus_start, focus_end = region.focus + record_list = [r for r in db.buffer(region.chromosome, focus_start, focus_end)] + yield record_list + while region.can_increase_focus(): + region.increase_focus() + new_focus_start, new_focus_end = region.focus + record_list = list( + itertools.chain( + *[ + [ + r + for r in db.buffer( + region.chromosome, new_focus_start, focus_start + ) + ], + record_list, + [ + r + for r in db.buffer( + region.chromosome, focus_end, new_focus_end + ) + ], + ] + ) + ) + yield record_list + focus_start, focus_end = region.focus From 280daa4012534e66f26e90d2d0a67d86808f3c94 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 17:24:51 +0100 Subject: [PATCH 049/185] Moved database walking to walker class --- ifpd2/__init__.py | 3 +- ifpd2/chromosome.py | 39 ++++++++- ifpd2/database.py | 166 ++---------------------------------- ifpd2/scripts/db_check.py | 4 +- ifpd2/scripts/db_dump.py | 9 +- ifpd2/walker.py | 5 +- ifpd2/walker2.py | 173 +++++++++++++++++++++++++++++++++----- 7 files changed, 210 insertions(+), 189 deletions(-) diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index 4f1e5ced..be221c14 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -5,7 +5,7 @@ from ifpd2.const import __version__ from ifpd2 import asserts, io -from ifpd2 import walker +from ifpd2 import walker, walker2 from ifpd2 import chromosome, database from ifpd2 import oligo, probe, probe_set @@ -14,6 +14,7 @@ "asserts", "io", "walker", + "walker2", "chromosome", "database", "oligo", diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index 5bfd571d..b1a6adb3 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -36,6 +36,14 @@ def __init_index(self, chrom_db: pd.DataFrame) -> None: for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): self._index[bin_id] = (np.inf, 0) + @property + def bin_size(self) -> int: + return self._bin_size + + @property + def data(self) -> Dict[int, Tuple[int, int]]: + return copy.copy(self._index) + def __populate_bins( self, chrom_db: pd.DataFrame, @@ -114,6 +122,11 @@ def __getitem__(self, position_in_nt: int) -> int: return -1 return position_in_bytes + def __eq__(self, other) -> bool: + condition = self.bin_size == other.bin_size + condition = condition and self.data == other.data + return condition + class ChromosomeData(object): """Contains information on a chromosome""" @@ -153,19 +166,19 @@ def record_byte_size(self) -> int: return self._record_byte_size @property - def size_nt(self): + def size_nt(self) -> int: return self._size_nt @property - def size_bytes(self): + def size_bytes(self) -> int: return self._size_bytes @property - def recordno(self): + def recordno(self) -> int: return self._recordno @property - def index(self): + def index(self) -> ChromosomeIndex: return copy.copy(self._index) def _build_index( @@ -192,6 +205,14 @@ def _build_index( ) progress.remove_task(indexing_track) + def __eq__(self, other) -> bool: + condition = self.record_byte_size == other.record_byte_size + condition = condition and self.size_nt == other.size_nt + condition = condition and self.size_bytes == other.size_bytes + condition = condition and self.recordno == other.recordno + condition = condition and self.index == other.index + return condition + class ChromosomeDict(object): """Wraps ChromosomeData instances into a dictionary @@ -215,6 +236,10 @@ def keys(self) -> List[bytes]: def items(self) -> List[Tuple[bytes, ChromosomeData]]: return list(self._data.items()) + @property + def index_bin_size(self) -> int: + return self._index_bin_size + @property def sizes_nt(self) -> Dict[bytes, int]: return dict([(name, data.size_nt) for name, data in self._data.items()]) @@ -236,3 +261,9 @@ def add_chromosome( self._data[chromosome_db["chromosome"][0]] = ChromosomeData( chromosome_db, dtype, self._index_bin_size, progress ) + + def __eq__(self, other) -> bool: + condition = len(self) == len(other) + condition = condition and self.items() == other.items() + condition = condition and self.index_bin_size == other.index_bin_size + return condition diff --git a/ifpd2/database.py b/ifpd2/database.py index 91cef3c8..2f27d912 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -13,7 +13,7 @@ import os import pickle import pandas as pd # type: ignore -from typing import Any, Dict, IO, Iterator, List +from typing import Any, Dict, List class Record(object): @@ -180,6 +180,14 @@ def chromosome_sizes_bytes(self) -> Dict[bytes, int]: def chromosome_recordnos(self) -> Dict[bytes, int]: return self._chromosomes.recordnos + @property + def record_byte_size(self) -> int: + return self._record_byte_size + + @property + def dtype(self) -> Dict[str, str]: + return copy.copy(self._dtype) + def log_details(self) -> None: """Log database details.""" logging.info(f"Database name: {self._args.output}") @@ -202,159 +210,3 @@ def log_details(self) -> None: logging.info("[bold]Record details[/bold]") logging.info(f"Record size in bytes: {self._record_byte_size}") logging.info(f"Dtype: {self._dtype}") - - def __jump_to_bin(self, IH: IO, chromosome: bytes, start_from_nt: int = 0) -> None: - """Move buffer pointer to the first record of a bin. - - - Arguments: - IH {IO} -- database input handler - chromosome {bytes} -- chromosome label - - Keyword Arguments: - start_from_nt {int} -- position in nucleotides (default: {0}) - """ - position_in_bytes = self._chromosomes.get_chromosome(chromosome).index[ - start_from_nt - ] - IH.seek(position_in_bytes) - - def read_next_record(self, IH: IO) -> bytes: - """Read the next record. - - The buffer pointer moves to the start of the following record. - - Arguments: - IH {IO} -- database input handle - - Returns: - bytes -- record bytes - """ - return IH.read(self._record_byte_size) - - def read_previous_record(self, IH: IO) -> bytes: - """Read the previous record. - - The buffer pointer does not move. - - Arguments: - IH {IO} -- database input handle - - Returns: - bytes -- record bytes - """ - self.rewind(IH) - return self.read_next_record(IH) - - def read_next_record_and_rewind(self, IH: IO) -> bytes: - """Reads the next record. - - The buffer pointer does not move. - - Arguments: - IH {IO} -- database input handle - - Returns: - bytes -- record bytes - """ - record = self.read_next_record(IH) - self.rewind(IH) - return record - - def next_record_exists(self, IH: IO) -> bool: - """Tries reading the next record. - - - - Arguments: - IH {IO} -- database input handle - - Returns: - bool -- whether next record exists - """ - if 0 == len(self.read_next_record_and_rewind(IH)): - return False - return True - - def rewind(self, IH: IO) -> None: - """Rewind of one record. - - The buffer pointer moves to the beginning of the previous record. - - Arguments: - IH {IO} -- database input handle - """ - IH.seek(max(IH.tell() - self._record_byte_size, 0)) - - def skip(self, IH: IO) -> None: - """Skip one record. - - The buffer pointer moves to the beginning of the following record. - - Arguments: - IH {IO} -- database input handle - """ - IH.seek(IH.tell() + self._record_byte_size) - - def fastforward(self, IH: IO, chromosome: bytes, start_from_nt: int) -> None: - """Jump to the first record at a given position. - - First the buffer pointer is moved to the beginning of the bin containing the - start_from_nt position. Then, records are read an parsed until their start is - greater than the start_from_nt value. Finally, the buffer pointer is moved to - the beginning of the last parsed record. - - Arguments: - IH {IO} -- database input handle - chromosome {bytes} -- chromosome label - start_from_nt {int} -- position to fastforward to (in nucleotides) - """ - if 0 == start_from_nt: - IH.seek(0) - return - self.__jump_to_bin(IH, chromosome, start_from_nt) - - record_start = 0 - while record_start < start_from_nt: - if self.next_record_exists(IH): - record_start = Record(self.read_next_record(IH), self._dtype)["start"] - else: - logging.warning( - " ".join( - [ - "the specified location", - f"({chromosome.decode()}:{start_from_nt})", - "is outside the database.", - ] - ) - ) - return - - def buffer( - self, chromosome: bytes, start_from_nt: int = 0, end_at_nt: int = -1 - ) -> Iterator[Record]: - """Buffer a chromosome's records. - - Buffer records from a chromosome withing the specified region. - To buffer the whole records, specify a [0, -1] region. - - Arguments: - chromosome {bytes} -- chromosome label - - Keyword Arguments: - start_from_nt {int} -- region starting position (default: {0}) - end_at_nt {int} -- region end position (default: {-1}) - - Yields: - Iterator[Record] -- parsed record - """ - assert chromosome in self._chromosomes.keys() - with open(os.path.join(self._root, f"{chromosome.decode()}.bin"), "rb") as IH: - self.fastforward(IH, chromosome, start_from_nt) - record = self.read_next_record(IH) - while 0 != len(record): - parsed_record = Record(record, self._dtype) - if parsed_record["start"] > end_at_nt and end_at_nt > 0: - break - yield parsed_record - record = self.read_next_record(IH) diff --git a/ifpd2/scripts/db_check.py b/ifpd2/scripts/db_check.py index d840edc1..d816059b 100644 --- a/ifpd2/scripts/db_check.py +++ b/ifpd2/scripts/db_check.py @@ -7,6 +7,7 @@ from ifpd2.asserts import enable_rich_assert from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap +from ifpd2.walker2 import ChromosomeWalker import logging import os from tqdm import tqdm # type: ignore @@ -43,9 +44,10 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: def run(args: argparse.Namespace) -> None: DB = DataBase(args.input) for chromosome in DB.chromosome_list: + walker = ChromosomeWalker(DB, chromosome) previous_position = -1 for record in tqdm( - DB.buffer(chromosome), + walker.buffer(), desc=f"Checking sorting '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], ): diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py index 629a0ac5..96d4af42 100644 --- a/ifpd2/scripts/db_dump.py +++ b/ifpd2/scripts/db_dump.py @@ -8,6 +8,7 @@ from ifpd2 import const from ifpd2.database import DataBase from ifpd2.scripts import arguments as ap +from ifpd2.walker2 import ChromosomeWalker from tqdm import tqdm # type: ignore from typing import List @@ -78,12 +79,12 @@ def get_chromosome_list(args: argparse.Namespace, DB: DataBase) -> List[bytes]: def dump(args: argparse.Namespace, DB: DataBase) -> None: print("\t".join(const.database_columns)) for chromosome in get_chromosome_list(args, DB): - walker = tqdm( - DB.buffer(chromosome, args.region[0], args.region[1]), + walker = ChromosomeWalker(DB, chromosome) + for record in tqdm( + walker.buffer(args.region[0], args.region[1]), desc=f"dumping '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], - ) - for record in walker: + ): if args.region[0] > record["start"]: continue print(record.to_csv("\t")) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 01205a35..a684851d 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -20,6 +20,7 @@ from ifpd2.database import DataBase from ifpd2.oligo import OligoGroup from ifpd2.probe import OligoProbeBuilder +from ifpd2.walker2 import ChromosomeWalker class GenomicWindowSet(object): @@ -478,7 +479,9 @@ def __start_walk( self.rw = 0 # Walk step counter DBHpb = tqdm( - self.__db.buffer(self.C.encode(), start_from_nt, end_at_nt), + ChromosomeWalker(self.__db, self.C.encode()).buffer( + start_from_nt, end_at_nt + ), total=self.__db.chromosome_recordnos[self.C.encode()], desc="Parsing records", leave=False, diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index fecf4d0c..c6dacba0 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -6,11 +6,12 @@ from ifpd2.database import DataBase, Record import itertools import logging -from typing import Iterator, List, Tuple +import os +from typing import IO, Iterator, List, Tuple, Union class GenomicRegion(object): - """docstring for GenomicRegion""" + """Details on genomic region with a central focus region.""" __chrom: bytes __chromStart: int @@ -98,17 +99,157 @@ def increase_focus(self) -> None: self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) -class Walker(object): +class ChromosomeWalker(object): """docstring for Walker""" - def __init__(self): - super(Walker, self).__init__() + __chromosome: bytes + __db: DataBase + __IH: IO - def walk_region( - self, db: DataBase, region: GenomicRegion - ) -> Iterator[List[Record]]: + def __init__(self, db: Union[DataBase, str], chromosome: bytes): + super(ChromosomeWalker, self).__init__() + if isinstance(db, str): + self.__db = DataBase(db) + else: + self.__db = db + assert chromosome in self.__db._chromosomes.keys() + self.__IH = open( + os.path.join(self.__db._root, f"{chromosome.decode()}.bin"), "rb" + ) + self.__chromosome = chromosome + + @property + def db(self) -> DataBase: + return self.__db + + def __jump_to_bin(self, start_from_nt: int = 0) -> None: + """Move buffer pointer to the first record of a bin. + + Keyword Arguments: + start_from_nt {int} -- position in nucleotides (default: {0}) + """ + position_in_bytes = self.__db._chromosomes.get_chromosome( + self.__chromosome + ).index[start_from_nt] + self.__IH.seek(position_in_bytes) + + def read_next_record(self) -> bytes: + """Read the next record. + + The buffer pointer moves to the start of the following record. + + Returns: + bytes -- record bytes + """ + return self.__IH.read(self.__db.record_byte_size) + + def read_previous_record(self) -> bytes: + """Read the previous record. + + The buffer pointer does not move. + + Returns: + bytes -- record bytes + """ + self.rewind() + return self.read_next_record() + + def read_next_record_and_rewind(self) -> bytes: + """Reads the next record. + + The buffer pointer does not move. + + Returns: + bytes -- record bytes + """ + record = self.read_next_record() + self.rewind() + return record + + def next_record_exists(self) -> bool: + """Tries reading the next record. + + Returns: + bool -- whether next record exists + """ + if 0 == len(self.read_next_record_and_rewind()): + return False + return True + + def rewind(self) -> None: + """Rewind of one record. + + The buffer pointer moves to the beginning of the previous record. + """ + self.__IH.seek(max(self.__IH.tell() - self.__db.record_byte_size, 0)) + + def skip(self) -> None: + """Skip one record. + + The buffer pointer moves to the beginning of the following record. + """ + self.__IH.seek(self.__IH.tell() + self.__db.record_byte_size) + + def fastforward(self, start_from_nt: int) -> None: + """Jump to the first record at a given position. + + First the buffer pointer is moved to the beginning of the bin containing the + start_from_nt position. Then, records are read an parsed until their start is + greater than the start_from_nt value. Finally, the buffer pointer is moved to + the beginning of the last parsed record. + + Arguments: + IH {IO} -- database input handle + chromosome {bytes} -- chromosome label + start_from_nt {int} -- position to fastforward to (in nucleotides) + """ + if 0 == start_from_nt: + self.__IH.seek(0) + return + self.__jump_to_bin(start_from_nt) + + record_start = 0 + while record_start < start_from_nt: + if self.next_record_exists(): + record_start = Record(self.read_next_record(), self.__db.dtype)["start"] + else: + logging.warning( + " ".join( + [ + "the specified location", + f"({self.__chromosome.decode()}:{start_from_nt})", + "is outside the database.", + ] + ) + ) + return + + def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record]: + """Buffer a chromosome's records. + + Buffer records from a chromosome withing the specified region. + To buffer the whole records, specify a [0, -1] region. + + Keyword Arguments: + start_from_nt {int} -- region starting position (default: {0}) + end_at_nt {int} -- region end position (default: {-1}) + + Yields: + Iterator[Record] -- parsed record + """ + self.fastforward(start_from_nt) + record = self.read_next_record() + while 0 != len(record): + parsed_record = Record(record, self.__db.dtype) + if parsed_record["start"] > end_at_nt and end_at_nt > 0: + break + yield parsed_record + record = self.read_next_record() + + def walk_region(self, region: GenomicRegion) -> Iterator[List[Record]]: + assert region.chromosome == self.__chromosome focus_start, focus_end = region.focus - record_list = [r for r in db.buffer(region.chromosome, focus_start, focus_end)] + record_list = [r for r in self.buffer(focus_start, focus_end)] yield record_list while region.can_increase_focus(): region.increase_focus() @@ -116,19 +257,9 @@ def walk_region( record_list = list( itertools.chain( *[ - [ - r - for r in db.buffer( - region.chromosome, new_focus_start, focus_start - ) - ], + [r for r in self.buffer(new_focus_start, focus_start)], record_list, - [ - r - for r in db.buffer( - region.chromosome, focus_end, new_focus_end - ) - ], + [r for r in self.buffer(focus_end, new_focus_end)], ] ) ) From 90ea0e40249c6a261ddbd8560b4313385c78f740 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 17:25:00 +0100 Subject: [PATCH 050/185] Added tests. --- .github/workflows/pythonpackage.yml | 10 +- ifpd2/tests/__init__.py | 8 + ifpd2/tests/test_scripts_db.py | 79 + test_data/test.dump.txt | 501 + test_data/test.hush.fa | 1000 ++ test_data/test.ss.ct | 20300 ++++++++++++++++++++++++++ test_data/test.tm.tsv | 501 + test_data/test_db/chr16.bin | Bin 0 -> 49500 bytes test_data/test_db/db.pickle | Bin 0 -> 11136 bytes 9 files changed, 22394 insertions(+), 5 deletions(-) create mode 100644 ifpd2/tests/__init__.py create mode 100644 ifpd2/tests/test_scripts_db.py create mode 100644 test_data/test.dump.txt create mode 100644 test_data/test.hush.fa create mode 100644 test_data/test.ss.ct create mode 100644 test_data/test.tm.tsv create mode 100644 test_data/test_db/chr16.bin create mode 100644 test_data/test_db/db.pickle diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 2b59d2c4..3f4261d6 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -62,8 +62,8 @@ jobs: - name: Install dependencies run: poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - # run test suite - # - name: Test - # run: | - # source .venv/bin/activate - # pytest radiantkit/tests/ + # run: test suite + - name: Test + run: | + source .venv/bin/activate + pytest ifpd2/tests/ diff --git a/ifpd2/tests/__init__.py b/ifpd2/tests/__init__.py new file mode 100644 index 00000000..22bab5ef --- /dev/null +++ b/ifpd2/tests/__init__.py @@ -0,0 +1,8 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from ifpd2.tests import test_scripts_db + +__all__ = ["test_scripts_db"] diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py new file mode 100644 index 00000000..cc6fb9fc --- /dev/null +++ b/ifpd2/tests/test_scripts_db.py @@ -0,0 +1,79 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import subprocess +import pickle + + +def remove_test_db(): + subprocess.run(["rm", "-r", "test_db"]) + + +def test_db_make(): + remove_test_db() + script_output = subprocess.check_output( + [ + "ifpd2", + "db", + "make", + "-O", + "test_data/test.hush.fa", + "-T", + "test_data/test.tm.tsv", + "-S", + "test_data/test.ss.ct", + "-p", + "chr", + "test_db", + ] + ) + assert b"Error" not in script_output + test_db = open("test_data/test_db/chr16.bin", "rb").read() + new_db = open("test_db/chr16.bin", "rb").read() + assert test_db == new_db + test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) + new_pickle = pickle.load(open("test_db/db.pickle", "rb")) + assert test_pickle == new_pickle + + +def test_db_check(): + script_output = subprocess.check_output( + [ + "ifpd2", + "db", + "check", + "test_db", + ] + ) + assert b"Error" not in script_output, script_output + + +def test_db_dump(): + script_output = subprocess.check_output( + [ + "ifpd2", + "db", + "dump", + "test_db", + ] + ) + test_dump = open("test_data/test.dump.txt", "rb").read() + assert script_output == test_dump + + +def test_db_info(): + script_output = subprocess.check_output( + [ + "ifpd2", + "db", + "info", + "test_db", + ] + ) + assert b"Error" not in script_output + + +def test_cleanup(): + remove_test_db() diff --git a/test_data/test.dump.txt b/test_data/test.dump.txt new file mode 100644 index 00000000..e7ce0a8b --- /dev/null +++ b/test_data/test.dump.txt @@ -0,0 +1,501 @@ +name chromosome start end sequence gc_content off_target_no Tm_dG Tm_dH Tm_dS Tm ss_dG +candidate_22250312 chr16 3109155 3109195 AAAACAAAGAGTTGGGCCGGGCGTGGTGGCACACACCTTT 0.55 1059 -57.27 -323.1 -0.857 51.21 -3.911 +candidate_21838028 chr16 4109470 4109510 AAAACAAAACTAATCCCCAACTCTCTTTCCCTGATCAAAT 0.35 0 -46.991 -306.4 -0.836 40.0 1.524 +candidate_21775575 chr16 4115534 4115574 AAAACAAAACACATTCCCAGGCTGGATTTGGCTCTTGGCC 0.475 0 -53.055 -316.9 -0.851 46.58 -2.881 +candidate_22556430 chr16 4139209 4139249 AAAACAACACCTGCTCTAGACTGCAGCAACACAAACTGAA 0.425 0 -51.436 -317.7 -0.859 44.17 -1.908 +candidate_22274554 chr16 4153705 4153745 AAAACAAAGCATGAGAGAGGGAGGCAGGCAGTACATAAGC 0.475 0 -51.935 -316.4 -0.853 45.23 -0.904 +candidate_21896771 chr16 4154836 4154876 AAAACAAAAGGCAACTTACCATATTTGGCACAGTGGTGAC 0.4 0 -49.881 -315.4 -0.856 42.48 -3.608 +candidate_22488479 chr16 4169917 4169957 AAAACAACAAACTACTTTCACCAGCATGTCATCCACTTTG 0.375 0 -48.774 -315.1 -0.859 41.03 0.444 +candidate_22302074 chr16 5109235 5109275 AAAACAAAGGGAACTGGGGTTGAAGAGATGGCTCAGTGGT 0.475 1031 -52.277 -312.4 -0.839 46.35 -1.585 +candidate_22179958 chr16 5111686 5111726 AAAACAAACGAAACACCATTGCTGGGTGCCAGGAGAGGGA 0.5 0 -54.245 -317.5 -0.849 48.11 -2.092 +candidate_21898022 chr16 5142581 5142621 AAAACAAAAGGCTAGCCTTGGATGTATAGCAAGACTGTCT 0.4 2 -49.116 -311.1 -0.845 42.19 -2.152 +candidate_22120338 chr16 5155136 5155176 AAAACAAACACACTCAAGAAACTGTTCCACTCATGGAGAA 0.375 0 -48.786 -312.6 -0.851 41.43 -1.569 +candidate_21735207 chr16 5178254 5178294 AAAACAAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCA 0.475 10 -53.045 -317.2 -0.852 46.51 -0.522 +candidate_22246691 chr16 5178259 5178299 AAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCAGGAAG 0.525 15 -53.88 -318.5 -0.853 47.56 -0.522 +candidate_21884633 chr16 5196409 5196449 AAAACAAAAGCCAGGCATGATGGTACGTTGGAAGTTGGAG 0.45 1 -51.815 -317.8 -0.858 44.74 -0.409 +candidate_21823586 chr16 6111442 6111482 AAAACAAAACCCCTTAAATTGGAGTGCACCCCTTCACGGG 0.475 0 -52.531 -315.6 -0.848 46.13 -1.232 +candidate_22244228 chr16 6117975 6118015 AAAACAAAGAGAGAAACACACAGAGAGAAACACAGAGAGA 0.375 1283 -47.962 -311.9 -0.851 40.5 998.226 +candidate_22522157 chr16 6119212 6119252 AAAACAACAACAACACCTGTTGTAAATAGACACAAGGCAA 0.35 0 -48.439 -313.4 -0.854 40.77 -4.078 +candidate_21797204 chr16 6123369 6123409 AAAACAAAACATCACAGAACCTGGCAGATGGCTTCCTATG 0.425 0 -50.29 -314.6 -0.852 43.22 -1.002 +candidate_22414716 chr16 6125809 6125849 AAAACAAATGATTGGCATGTTCAGTGGAGGGCCTGTTGGT 0.45 0 -52.316 -314.3 -0.845 45.97 -1.825 +candidate_22361207 chr16 6135546 6135586 AAAACAAATACGAGATCAGCCTGTTGGTACACTGCCAATA 0.4 0 -49.583 -313.8 -0.852 42.35 -1.618 +candidate_22375839 chr16 6136459 6136499 AAAACAAATATGCTCCCAAATGGCTTGTGTGTTTATTACC 0.35 0 -47.583 -311.8 -0.852 39.94 -1.434 +candidate_22354848 chr16 6143948 6143988 AAAACAAATAATGGGAAATGCTGGCAAGGGCTCAGGCAAA 0.425 3 -51.661 -313.8 -0.845 45.11 -0.842 +candidate_21915805 chr16 6147626 6147666 AAAACAAAATAAAACAAAACCATGCAGCGGATGGATTCTG 0.35 12 -48.485 -315.4 -0.861 40.53 -1.722 +candidate_21817435 chr16 6147636 6147676 AAAACAAAACCATGCAGCGGATGGATTCTGGGGAATGACA 0.45 1 -52.331 -315.4 -0.848 45.8 -1.722 +candidate_21734070 chr16 6153316 6153356 AAAACAAAACAAAGAAACTCCATCTTTGGGTCTAGTCATG 0.35 2 -47.031 -311.0 -0.851 39.36 -3.188 +candidate_22218001 chr16 6153321 6153361 AAAACAAAGAAACTCCATCTTTGGGTCTAGTCATGCCCAC 0.425 0 -49.876 -313.1 -0.849 42.94 -3.188 +candidate_21874668 chr16 6176861 6176901 AAAACAAAAGATCTGCTAACATCCTCCCCTCCCCTCCCCT 0.5 0 -52.078 -308.2 -0.826 46.94 0.494 +candidate_22454116 chr16 6181586 6181626 AAAACAAATTGGGCTACTGGGATGGCTCAGTGGGAAAGGC 0.5 243 -53.275 -315.6 -0.846 47.19 -2.228 +candidate_22557039 chr16 7141448 7141488 AAAACAACACGCGGCTCCGTGAACACAATTGCATTGAAAA 0.425 0 -53.319 -324.7 -0.875 45.39 -4.601 +candidate_22197538 chr16 7145407 7145447 AAAACAAACTCTTTAGAGCTGGTGAATGCTTGTTCTCAGT 0.375 0 -48.738 -312.8 -0.851 41.34 -0.981 +candidate_22202360 chr16 8100518 8100558 AAAACAAACTGTATAGAGGGTTTGTCCCTGTGCAGAAGAC 0.425 0 -49.631 -313.6 -0.851 42.55 -3.325 +candidate_22292665 chr16 8111403 8111443 AAAACAAAGGACAGGCTGCAACCAGCAACTCTGCTTGCTG 0.5 0 -54.637 -322.7 -0.864 47.69 -3.551 +candidate_22530532 chr16 8117580 8117620 AAAACAACAACCCACTTTGGGTCTATCTCTGTCAATGCTC 0.425 0 -49.945 -314.1 -0.852 42.87 -3.135 +candidate_21864435 chr16 8132196 8132236 AAAACAAAAGAATATAACTTCTCAGCACCTCATGGAACCT 0.35 753 -47.016 -308.1 -0.842 39.78 -1.008 +candidate_21888583 chr16 8147690 8147730 AAAACAAAAGCTGTGTGACATACTGTGGCCCACTGCAGCT 0.475 13 -53.712 -319.2 -0.856 47.02 -2.936 +candidate_22185583 chr16 8163848 8163888 AAAACAAACTAAAGGAGAGTAAAGAAGAGTCACCAACCCT 0.375 0 -47.567 -308.0 -0.84 40.6 -0.146 +candidate_22525042 chr16 9111319 9111359 AAAACAACAACAATAACAGCAACAGCAGCAGCAGCAGCAA 0.425 1165 -52.976 -322.0 -0.867 45.4 -2.584 +candidate_21686674 chr16 9163163 9163203 AAAACAAAACAAAACACTTGAGGCAGGGAGATAGCTTAGT 0.375 10 -48.627 -311.2 -0.847 41.45 -1.009 +candidate_21781230 chr16 9163168 9163208 AAAACAAAACACTTGAGGCAGGGAGATAGCTTAGTTGGTA 0.4 13 -49.019 -310.6 -0.843 42.14 -1.009 +candidate_22169998 chr16 9169681 9169721 AAAACAAACCCTACCTTAATGGGAGATATCACAGACTGGG 0.425 1 -48.556 -308.4 -0.838 42.0 -1.839 +candidate_21761043 chr16 9183788 9183828 AAAACAAAACAAGACAAGACAAGACAGGACAGGACAGGAC 0.425 1094 -50.067 -315.4 -0.855 42.81 998.226 +candidate_21951872 chr16 10129152 10129192 AAAACAAAATCTCATGCAACCAAGTCAGGCCTCCAGCTGG 0.475 2 -52.718 -317.4 -0.853 46.06 -0.606 +candidate_22432810 chr16 10143517 10143557 AAAACAAATGTTATCAGTCTGAAGGATAACATCCCTTTCC 0.35 8 -46.285 -308.3 -0.845 38.82 -3.924 +candidate_22138543 chr16 10153026 10153066 AAAACAAACAGTATGATGGTCTAAGTTGGGCCATAGACAC 0.4 5 -48.528 -312.0 -0.849 41.3 -2.501 +candidate_22214644 chr16 10161150 10161190 AAAACAAAGAAAATAATAATTCTGTGTCCTTGCCAGGGGC 0.375 2 -48.338 -311.5 -0.848 41.04 -2.705 +candidate_22299683 chr16 10168337 10168377 AAAACAAAGGCCTAATCCATCAAAGTTCATAGTTCTGGGA 0.375 387 -47.932 -307.9 -0.838 41.08 0.274 +candidate_22322429 chr16 10191280 10191320 AAAACAAAGTCTCTGCTGGGCTTTCTTGAAATTTCCTTTA 0.35 519 -47.889 -310.4 -0.846 40.54 -0.821 +candidate_21654043 chr16 11114621 11114661 AAAACAAAACAAAACAAAACACTGCCCTCATCTCAAGTCC 0.375 71 -49.122 -315.2 -0.858 41.45 0.941 +candidate_21686495 chr16 11114626 11114666 AAAACAAAACAAAACACTGCCCTCATCTCAAGTCCCCAAA 0.4 4 -50.251 -312.7 -0.846 43.38 0.941 +candidate_21780635 chr16 11114631 11114671 AAAACAAAACACTGCCCTCATCTCAAGTCCCCAAACAACT 0.425 0 -50.961 -313.1 -0.845 44.33 0.874 +candidate_22171219 chr16 11135198 11135238 AAAACAAACCCTTCCCTCCCCAAGTAGCTTTTGTTCATGT 0.425 1027 -50.539 -310.6 -0.839 44.2 -0.998 +candidate_22431606 chr16 11140939 11140979 AAAACAAATGTGGTGCACATCTTTACTCCAAGTACTCCGG 0.425 24 -50.239 -316.1 -0.857 42.92 -1.901 +candidate_21738820 chr16 11141085 11141125 AAAACAAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAG 0.4 1201 -49.06 -314.3 -0.855 41.61 -0.981 +candidate_22300372 chr16 11141090 11141130 AAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAGAGCAC 0.45 1237 -50.85 -316.4 -0.856 43.74 -2.472 +candidate_21793507 chr16 11160012 11160052 AAAACAAAACAGTGCCAGTGCACTGGTGCACGACTTTAGT 0.45 0 -53.13 -321.1 -0.864 45.85 -5.818 +candidate_22162200 chr16 11163816 11163856 AAAACAAACCAGGGTCTCAAATAGCCCAGCTTGGCTATGA 0.45 3 -51.44 -312.4 -0.841 45.16 -3.838 +candidate_22168537 chr16 11170884 11170924 AAAACAAACCCCATCCCACCTCAGCTTCATTACTGCACTT 0.45 0 -51.692 -312.9 -0.842 45.4 -0.026 +candidate_22197324 chr16 11181750 11181790 AAAACAAACTCTTCCTCCCATTCTACTAAGGACTGCTAGG 0.425 0 -48.492 -309.7 -0.842 41.71 -0.299 +candidate_22072895 chr16 11187568 11187608 AAAACAAACAAACAAAGATGAGCCTTTGAAGCCCTAGAAC 0.375 2 -48.698 -314.0 -0.855 41.1 -2.775 +candidate_21904608 chr16 11192920 11192960 AAAACAAAAGTAGTCAGGTGAGATGTGAAATACCAACAGT 0.35 0 -47.196 -309.8 -0.847 39.75 -0.359 +candidate_21890879 chr16 12137774 12137814 AAAACAAAAGGAAGAAGATTGATAGTGAGAGAGGAGTCTG 0.375 0 -46.741 -309.5 -0.847 39.32 -0.538 +candidate_22305276 chr16 12138525 12138565 AAAACAAAGGGTACACAAAGTAAATTGTGTGTGTGTGTGT 0.35 40 -48.408 -313.4 -0.854 40.73 -3.998 +candidate_22455527 chr16 12145387 12145427 AAAACAAATTGTGTCAGAGTATCTGGCTAAGGGGTTCTGC 0.425 0 -49.831 -313.8 -0.851 42.77 -2.478 +candidate_22548235 chr16 12159703 12159743 AAAACAACACAATGAGACAGAGAAGCCTGGATTTTAACAA 0.35 1 -47.821 -311.2 -0.849 40.33 -0.509 +candidate_22548621 chr16 12161010 12161050 AAAACAACACACAACTCCACAATACAAGAACTACACTAGA 0.35 0 -47.124 -311.0 -0.851 39.48 -0.246 +candidate_22526849 chr16 12172836 12172876 AAAACAACAACAGACACACACAGCTGTGGTAGGGTAGCCA 0.475 0 -52.852 -317.1 -0.852 46.28 -2.538 +candidate_22540553 chr16 12181858 12181898 AAAACAACAATAGTATGCTCTAACCAACCCATGACTTCCC 0.4 0 -48.458 -311.0 -0.847 41.37 -0.076 +candidate_22080165 chr16 12188710 12188750 AAAACAAACAAACACAAAGCCTATCCATCCCCATGGGTCT 0.425 2 -50.601 -310.6 -0.838 44.28 -1.462 +candidate_22129434 chr16 12190394 12190434 AAAACAAACAGAAGGAAAAGAGCCAAGCGAAGGCATAAGA 0.4 68 -50.256 -315.0 -0.854 43.01 -1.859 +candidate_22391255 chr16 13108590 13108630 AAAACAAATCCACTTGCAGCGGCTGATGTGAAGGGAGATT 0.45 0 -52.435 -316.9 -0.853 45.68 -0.576 +candidate_22134530 chr16 13118550 13118590 AAAACAAACAGCTAGAAGTCAGATTGGGGATCCAAGCTGG 0.45 52 -50.762 -313.8 -0.848 44.06 -4.723 +candidate_22302865 chr16 13127182 13127222 AAAACAAAGGGAGGGAGGAGGGGAGCGGAGAGGAGGGGAG 0.625 1043 -56.248 -314.2 -0.832 51.89 998.226 +candidate_22451921 chr16 13142802 13142842 AAAACAAATTGAGGCAGGGAGCCACCGAATGACTTATTCC 0.45 0 -51.321 -315.6 -0.852 44.47 -3.461 +candidate_22431610 chr16 13150836 13150876 AAAACAAATGTGGTGGCCATCAGCCCTGTCCTCAGTAGTC 0.5 0 -52.935 -316.5 -0.85 46.59 -2.179 +candidate_22281771 chr16 13160190 13160230 AAAACAAAGCGAACAGAAATGTGCAGGTACTTTTGCGGCG 0.45 0 -53.506 -326.5 -0.88 45.43 -1.955 +candidate_22307094 chr16 13176077 13176117 AAAACAAAGGTATGATCACACTATCCCAAGAAGGTTTTCT 0.35 0 -46.777 -306.9 -0.839 39.66 -0.665 +candidate_22190073 chr16 13184132 13184172 AAAACAAACTAGGTGGGAAAGAGTTTACTTTGAGTGGTAG 0.375 2 -47.217 -310.1 -0.848 39.83 -1.135 +candidate_22009936 chr16 13198354 13198394 AAAACAAACAAAACGGGCCAAGCAGAAACCTATCTGTAGC 0.425 0 -51.023 -318.0 -0.861 43.6 -1.372 +candidate_21842776 chr16 14112129 14112169 AAAACAAAACTCCAAACCCAAACAACCAAAGCACCAAAGG 0.4 64 -50.532 -315.4 -0.854 43.3 0.761 +candidate_21685155 chr16 14129896 14129936 AAAACAAAACAAAACACCATGAGGCCTTAGGCATGGGTTC 0.425 2 -50.907 -315.0 -0.851 43.94 -2.985 +candidate_21777113 chr16 14129901 14129941 AAAACAAAACACCATGAGGCCTTAGGCATGGGTTCACTGG 0.475 0 -52.438 -315.6 -0.848 46.01 -2.985 +candidate_22483304 chr16 14130104 14130144 AAAACAACAAAATCCCCACAAAGCACTCTAGGGTGATGGT 0.425 1 -50.64 -311.6 -0.841 44.16 -1.722 +candidate_22411499 chr16 14145787 14145827 AAAACAAATGAGATAAGAGAGAGGCTCAAAAGGCTGCAGT 0.4 0 -49.441 -312.2 -0.847 42.43 -2.314 +candidate_21795805 chr16 14150563 14150603 AAAACAAAACATACAATCTAAGTGAGTCCAAGTCTCTGAC 0.35 0 -46.432 -311.3 -0.854 38.57 0.011 +candidate_21872220 chr16 14180132 14180172 AAAACAAAAGAGGATAGTGGAAGAGTGTAGGGGACAGAAA 0.4 1 -48.273 -307.9 -0.837 41.62 0.144 +candidate_21851787 chr16 14185388 14185428 AAAACAAAACTTGGTTATGTGTTCCAGACAGAAGAGAACT 0.35 0 -47.448 -310.3 -0.848 39.99 -1.676 +candidate_22369611 chr16 14186124 14186164 AAAACAAATAGTTTGCCCTGGTAAGAACCTGGTGTGGGTC 0.45 0 -50.927 -313.5 -0.847 44.32 -4.359 +candidate_22409580 chr16 15123716 15123756 AAAACAAATGACAGTTCATGTTGGCAATCATAGAGGATAG 0.35 13 -46.769 -310.8 -0.851 39.06 -0.962 +candidate_22344144 chr16 15131264 15131304 AAAACAAATAAATAAAACCAACTCCTGAATCCCCTTCCTG 0.35 0 -46.571 -307.5 -0.841 39.3 0.101 +candidate_22077881 chr16 15134201 15134241 AAAACAAACAAACAAGACCTAAAACTGTCCTGTAACAGTG 0.35 4 -47.377 -313.3 -0.857 39.46 -2.535 +candidate_22489854 chr16 15135210 15135250 AAAACAACAAAGAGGGCATATTCTGAGGAGATTTGGGAAT 0.375 0 -48.073 -307.7 -0.837 41.29 0.078 +candidate_22289175 chr16 15136403 15136443 AAAACAAAGGAAACCTGAAGTGTCCCTAGACATGACCTAA 0.4 0 -48.584 -308.8 -0.839 41.87 -1.447 +candidate_22563325 chr16 15143614 15143654 AAAACAACAGAAAGCCCACATACACGAGGAAACTGAACAA 0.4 1517 -50.229 -315.5 -0.855 42.9 -0.736 +candidate_21696985 chr16 15154698 15154738 AAAACAAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAA 0.35 0 -48.294 -313.1 -0.854 40.64 -1.44 +candidate_21826337 chr16 15154703 15154743 AAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAAGAAAT 0.35 0 -47.841 -311.5 -0.85 40.31 -0.922 +candidate_22494369 chr16 15155435 15155475 AAAACAACAAATTCTGCCATGCTTAGGGTTACAAATTGCT 0.35 29 -48.597 -312.1 -0.85 41.17 0.344 +candidate_22277296 chr16 15184133 15184173 AAAACAAAGCCACTCCTAGGCTCCTTGCTATTTGTAGGAC 0.45 0 -50.5 -313.6 -0.848 43.75 -2.282 +candidate_22305091 chr16 15186089 15186129 AAAACAAAGGGGTGGGAAACCCATCTCCCACCAGAGCTCG 0.55 9 -54.771 -316.6 -0.844 49.16 -6.341 +candidate_21756048 chr16 16119405 16119445 AAAACAAAACAACCCAACCATGAACATAGACTCAGACCCT 0.4 2 -49.347 -310.4 -0.842 42.6 0.124 +candidate_22445629 chr16 16131714 16131754 AAAACAAATTCACACATTGTCTTTCCACGAATCCAGCCCT 0.4 1055 -50.331 -314.3 -0.851 43.22 -0.512 +candidate_21779002 chr16 16185138 16185178 AAAACAAAACACCTTCCTCTCAACACCTCATGGTACCTTC 0.425 1380 -49.676 -312.9 -0.849 42.72 -1.209 +candidate_22169694 chr16 16192234 16192274 AAAACAAACCCGGTATGCCCCATAGTTAAAGCATTCCTGG 0.45 254 -51.072 -313.8 -0.847 44.45 -2.341 +candidate_21959123 chr16 17100947 17100987 AAAACAAAATGAGTGTGTCTAACACTAGTAGAAAGCCCCA 0.375 0 -48.037 -310.3 -0.846 40.84 -3.425 +candidate_22111133 chr16 17108267 17108307 AAAACAAACAAGGAGCTGGAGAAATAGCTCAGAGGTTAAG 0.4 1058 -48.51 -312.2 -0.85 41.25 -3.145 +candidate_21863612 chr16 17180243 17180283 AAAACAAAAGAAGTGAAGGCAGATCTTTGTGAGTTGAAGG 0.375 3 -48.405 -313.8 -0.856 40.77 -1.526 +candidate_21856056 chr16 17181427 17181467 AAAACAAAAGAAAACACAGAAGTAGCCCATCTCTTTGAGA 0.35 3 -47.479 -310.3 -0.847 40.03 -0.462 +candidate_21909049 chr16 17189854 17189894 AAAACAAAAGTGGTGAGGAAAGATGGCTCAACAGTTAAAA 0.35 123 -48.031 -311.1 -0.848 40.61 -3.688 +candidate_22107943 chr16 17193782 17193822 AAAACAAACAAGCAAACAAAACAACAACATCAGCACTGGC 0.375 491 -50.532 -320.3 -0.87 42.42 -0.059 +candidate_22528622 chr16 17193799 17193839 AAAACAACAACATCAGCACTGGCTGCTCTTCCAGGGGACC 0.525 97 -54.549 -319.2 -0.853 48.3 -3.511 +candidate_21872058 chr16 17195497 17195537 AAAACAAAAGAGGAAGAAAGGAAGCCAGCAAGCAAGTCAG 0.425 488 -50.719 -316.3 -0.856 43.49 -0.226 +candidate_21875152 chr16 18106130 18106170 AAAACAAAAGATGGAGGAGGAGGAGGAGGAGGAGGAGGAG 0.525 5371 -51.803 -309.6 -0.831 46.43 -0.036 +candidate_21814624 chr16 18106422 18106462 AAAACAAAACCAGAAAGAAGCCACATAGAATGTTGGGCAT 0.375 0 -49.213 -311.6 -0.846 42.13 -2.204 +candidate_21968283 chr16 18109528 18109568 AAAACAAAATGTTCCTCTGGTTTTCCAACAGGCTGTGGGG 0.45 0 -51.638 -314.8 -0.848 45.01 -2.017 +candidate_22274021 chr16 18122906 18122946 AAAACAAAGCATATTTGCACTCCCTGTGGGTGGCAGTGGC 0.5 0 -54.205 -319.6 -0.856 47.68 -2.631 +candidate_22240291 chr16 18162248 18162288 AAAACAAAGACTACTTACATCCAGCCCCTCTGGAGCTCTG 0.475 0 -51.02 -313.5 -0.846 44.54 -3.637 +candidate_22196342 chr16 18179921 18179961 AAAACAAACTCTATGATCTGCCTGGTTACCCTGGCCAAGC 0.475 0 -51.938 -315.1 -0.848 45.45 -3.537 +candidate_22274960 chr16 18191168 18191208 AAAACAAAGCATGTTATGAAATCCCAGAGAAGCCCATGGC 0.425 0 -50.586 -314.4 -0.851 43.63 -2.694 +candidate_22309502 chr16 18197471 18197511 AAAACAAAGGTTCCTCCTTTCAGATCCCCACAGGGTCTCC 0.5 0 -52.018 -311.8 -0.838 46.22 -4.334 +candidate_22325033 chr16 18199206 18199246 AAAACAAAGTGATGCTGAGGGCCCATGAGGAGGCTACAGT 0.5 0 -53.316 -314.4 -0.842 47.46 -2.29 +candidate_21894666 chr16 19131189 19131229 AAAACAAAAGGATATACCTTCTTCTCAGCACCTCATCCTA 0.375 1029 -47.097 -306.6 -0.837 40.21 -2.042 +candidate_21983199 chr16 19155514 19155554 AAAACAAAATTTGGGTGGGAGGTGGGAAAGTTCTGGGAGA 0.45 0 -51.259 -309.8 -0.834 45.37 -0.236 +candidate_22357832 chr16 20117628 20117668 AAAACAAATACACAGTGTGCTTGTGGGATTAAAATGTCCC 0.375 0 -48.549 -313.2 -0.853 41.04 -1.674 +candidate_21792153 chr16 20134652 20134692 AAAACAAAACAGGTCCTTAGAGGCAAGAACTACTGTAGAG 0.4 5 -48.028 -311.5 -0.849 40.74 -0.582 +candidate_22487831 chr16 20136212 20136252 AAAACAACAAACCACTAAGGAAATTAGTGTTAGGGGTTCT 0.35 1 -46.984 -307.2 -0.839 39.87 -3.316 +candidate_21712832 chr16 20146964 20147004 AAAACAAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGT 0.35 1 -48.718 -313.4 -0.853 41.12 -1.515 +candidate_21979257 chr16 20146969 20147009 AAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGTTGTAA 0.35 1 -48.297 -312.7 -0.853 40.7 -1.515 +candidate_22206827 chr16 20161423 20161463 AAAACAAACTTGAAGGGAATTAAGTAGGCATGGAGGTTTT 0.35 0 -47.467 -307.9 -0.84 40.38 -0.516 +candidate_21882598 chr16 20162935 20162975 AAAACAAAAGCATAAAACCTCAGTCCTGTCATAGCCCATA 0.375 0 -48.199 -309.5 -0.842 41.17 0.334 +candidate_22249903 chr16 20170601 20170641 AAAACAAAGAGTGTAATGAACCTCCATGTGCCAAATCAAT 0.35 0 -47.951 -310.4 -0.846 40.62 -0.709 +candidate_21911224 chr16 21183507 21183547 AAAACAAAAGTTGGTACCAGAAGTAGAGTATTGCTGTGAT 0.35 617 -47.082 -309.5 -0.846 39.65 -0.236 +candidate_21658299 chr16 22131287 22131327 AAAACAAAACAAAACAAAACCCCAGCCAACCAAGCCTCAC 0.425 383 -51.75 -317.3 -0.856 44.64 0.584 +candidate_21696099 chr16 22131292 22131332 AAAACAAAACAAAACCCCAGCCAACCAAGCCTCACAGCCC 0.5 11 -54.428 -318.8 -0.852 48.11 0.284 +candidate_21822694 chr16 22131297 22131337 AAAACAAAACCCCAGCCAACCAAGCCTCACAGCCCTCTTT 0.5 0 -54.33 -315.6 -0.842 48.56 0.284 +candidate_22554080 chr16 22145308 22145348 AAAACAACACCAAGGTCATGGAAGGCAGCTGGTGACATCA 0.475 0 -53.1 -316.2 -0.848 46.76 -2.925 +candidate_21909100 chr16 22147477 22147517 AAAACAAAAGTGTAAAGTGCTTGCCAGACACAGAGACTCA 0.4 0 -50.074 -315.5 -0.856 42.7 -1.202 +candidate_21792914 chr16 22154266 22154306 AAAACAAAACAGTATAAGTAGCAGCCAAACAAAACCACCA 0.35 3 -48.255 -312.1 -0.851 40.74 0.834 +candidate_21858474 chr16 22172199 22172239 AAAACAAAAGAAACTGGAGGATGATGGAGCAATGCCTTTA 0.375 2 -48.764 -310.5 -0.844 41.73 0.141 +candidate_21815808 chr16 22192173 22192213 AAAACAAAACCAGGACAGTGTGTTACCTCCAAACATTAGC 0.4 1 -49.37 -314.3 -0.854 42.01 -0.384 +candidate_22121522 chr16 23101375 23101415 AAAACAAACACATACAAACAACCAGTACAGTAGTGCCAGA 0.375 1 -48.728 -313.1 -0.852 41.28 -0.486 +candidate_21696680 chr16 23161159 23161199 AAAACAAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGA 0.375 4 -49.127 -311.7 -0.847 42.01 -2.403 +candidate_21824874 chr16 23161164 23161204 AAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGATTGGA 0.4 0 -49.661 -310.9 -0.842 42.92 -3.011 +candidate_22528041 chr16 23191959 23191999 AAAACAACAACAGTACATTCCCTGCCGTGGCCGATGAACT 0.475 2 -53.508 -319.4 -0.857 46.72 -0.496 +candidate_22198662 chr16 24108652 24108692 AAAACAAACTGACAAACAGAAAACAAAAGAGCACTCCTTG 0.35 26 -48.182 -315.5 -0.862 40.13 -1.989 +candidate_21871569 chr16 24108671 24108711 AAAACAAAAGAGCACTCCTTGCTCAGGTATTTACCTGTTG 0.4 0 -49.132 -314.0 -0.854 41.75 -5.143 +candidate_21839431 chr16 24135799 24135839 AAAACAAAACTAGAGGTTCACTGGGAGGACTAGCCAAGCT 0.45 0 -50.795 -311.6 -0.841 44.46 -0.895 +candidate_21925638 chr16 24143294 24143334 AAAACAAAATAAGATGGTGGTTTGCCTTAATGACAGGAAG 0.35 0 -47.19 -310.6 -0.849 39.62 -0.439 +candidate_22298648 chr16 24187087 24187127 AAAACAAAGGCATCCTGGCCTGTTAGAAACTAAGTTTCAG 0.4 0 -49.062 -313.0 -0.851 41.82 -4.897 +candidate_22082778 chr16 25112695 25112735 AAAACAAACAAACAGTCGAACAAACAAACCCCAATCATAC 0.35 1066 -48.251 -315.6 -0.862 40.2 0.424 +candidate_21892971 chr16 25169626 25169666 AAAACAAAAGGAGGAGGAAGAGAATTAAGAAATTGACAGG 0.35 7 -46.34 -308.2 -0.844 38.91 -0.622 +candidate_22274607 chr16 25188474 25188514 AAAACAAAGCATGATGTGTATGTGTGTGTGTGTGTGTGTG 0.4 1445 -50.449 -320.0 -0.869 42.47 -0.523 +candidate_22298997 chr16 26100961 26101001 AAAACAAAGGCCAAATCTCACAAAGCACCAAGTCAAGAAT 0.375 0 -49.535 -313.1 -0.85 42.3 0.394 +candidate_22089455 chr16 26154863 26154903 AAAACAAACAAAGACACAGACAAACAGACAGAGAGACTGA 0.375 1265 -48.584 -313.7 -0.855 41.01 -1.989 +candidate_22331015 chr16 26162478 26162518 AAAACAAAGTTCCAAGGGGCCAATCCCTAGGCCAAAAGCA 0.475 0 -52.987 -312.8 -0.838 47.21 -3.572 +candidate_22547933 chr16 27108597 27108637 AAAACAACACAAGTGGGGAGGGAGGGAGGGATTTGGGAGG 0.55 692 -54.031 -312.2 -0.832 49.0 -0.136 +candidate_21834785 chr16 27141570 27141610 AAAACAAAACGTATGAACCCAGAATGAGTAGACAACAGGA 0.375 25 -48.304 -311.9 -0.85 40.93 -0.126 +candidate_22159085 chr16 27143471 27143511 AAAACAAACCACAGCAGAAAATAGAAGGGATGAAAAGAAG 0.35 8 -47.2 -311.2 -0.851 39.55 0.494 +candidate_21753987 chr16 27162495 27162535 AAAACAAAACAACAGAAAGCTCACATACACGTGGAAGCCG 0.425 1097 -51.542 -321.9 -0.872 43.63 -0.454 +candidate_22192227 chr16 27164290 27164330 AAAACAAACTCAAACAAATCAGTAGCCTTCCTCTACTCAA 0.35 1220 -47.196 -309.8 -0.847 39.75 -1.005 +candidate_22102208 chr16 28116722 28116762 AAAACAAACAACATACACTTGATATTGTCAAGCAAGGCCG 0.375 0 -49.123 -317.0 -0.864 41.18 -2.885 +candidate_22486781 chr16 28140215 28140255 AAAACAACAAACAATCAAAGCCCATCCCTCAACCAACCAA 0.4 13 -50.523 -312.6 -0.845 43.75 1.984 +candidate_21945865 chr16 28149023 28149063 AAAACAAAATCAGGGGTGCTTTAATATCATGGTTGCAATC 0.35 0 -47.586 -311.4 -0.851 40.0 0.308 +candidate_21939090 chr16 28155420 28155460 AAAACAAAATATGCTCAGTGCAAACCTCAAGGGCAGGTCA 0.425 0 -51.29 -314.7 -0.849 44.48 -2.154 +candidate_21955055 chr16 28167909 28167949 AAAACAAAATGAAACAAAACTCCGGTATCTTTCCTGTCTC 0.35 4 -47.319 -312.9 -0.856 39.44 0.434 +candidate_21858525 chr16 29165094 29165134 AAAACAAAAGAAACTTTCAATGCAAGCCAGATGACCTGAT 0.35 0 -48.441 -312.1 -0.85 40.97 -1.335 +candidate_21885172 chr16 29179333 29179373 AAAACAAAAGCCCACCTAGACCATCATCTACCATTTGTGT 0.4 0 -49.264 -310.1 -0.841 42.54 -0.315 +candidate_22156764 chr16 29182366 29182406 AAAACAAACCAACTCATCCTAACACAGGGTTTCCCCTTTT 0.4 254 -49.487 -309.3 -0.838 42.95 -2.292 +candidate_22139245 chr16 30109118 30109158 AAAACAAACAGTGTGCTTTGCAAGGATGCAGTCATACTTG 0.4 0 -50.375 -318.5 -0.864 42.61 -4.005 +candidate_22553460 chr16 30124149 30124189 AAAACAACACATTTCAGGCTGTGTCTTGCCCAGAGTGACT 0.45 3 -52.152 -316.4 -0.852 45.4 -1.895 +candidate_22083540 chr16 30140025 30140065 AAAACAAACAAACATGGCCAAGTCTATCGTAGAAAATGCC 0.375 0 -48.909 -315.7 -0.86 41.11 -0.156 +candidate_21755149 chr16 30168215 30168255 AAAACAAAACAACCAAACAACAAGGTGTCTCTTTGCCCTA 0.375 5 -49.435 -313.0 -0.85 42.19 -0.619 +candidate_21838416 chr16 31102444 31102484 AAAACAAAACTACACAACACGGAAGATATTCTCTGTAGTG 0.35 1 -46.726 -313.3 -0.859 38.65 -2.577 +candidate_22294429 chr16 31104483 31104523 AAAACAAAGGAGCTAATTAAGCCAATGAGCAGCCTCCTCT 0.425 0 -50.382 -311.9 -0.843 43.78 -2.778 +candidate_22291090 chr16 31132942 31132982 AAAACAAAGGAAGGAAGAAAGGAAAGAAAGGAGCGAGGGA 0.425 1237 -50.223 -311.4 -0.842 43.66 998.226 +candidate_22244542 chr16 31144986 31145026 AAAACAAAGAGAGAGGTGCAAGAGGGAGTGGGGAGGGGTC 0.55 5 -53.922 -314.2 -0.839 48.49 1.214 +candidate_22200957 chr16 31174384 31174424 AAAACAAACTGGACAGGCAGTGACAGACTCCCAGAGCTGA 0.5 0 -53.369 -316.5 -0.848 47.15 -2.89 +candidate_22300972 chr16 31194128 31194168 AAAACAAAGGCTGCTTGACCACAGGCACTACAATACTACC 0.45 0 -51.191 -316.4 -0.855 44.18 -1.695 +candidate_21666318 chr16 31196747 31196787 AAAACAAAACAAAACAAACAAAAGTATCACCCTATCGCCC 0.35 50 -48.067 -314.3 -0.858 40.17 1.134 +candidate_21717478 chr16 31196752 31196792 AAAACAAAACAAACAAAAGTATCACCCTATCGCCCTAGGT 0.375 1 -48.499 -310.7 -0.845 41.36 -0.442 +candidate_22012273 chr16 31196757 31196797 AAAACAAACAAAAGTATCACCCTATCGCCCTAGGTAGCCT 0.425 0 -49.771 -310.7 -0.841 43.19 -0.442 +candidate_22214148 chr16 32110929 32110969 AAAACAAAGAAAAGCAGAATGCAGGCCAAGCGGTGGCACT 0.475 0 -54.526 -321.1 -0.859 47.73 -5.901 +candidate_22080497 chr16 32111082 32111122 AAAACAAACAAACACACACCAACCAGAAGCAGAATGTTTA 0.35 21 -48.722 -313.9 -0.855 41.05 -0.705 +candidate_22240135 chr16 32114579 32114619 AAAACAAAGACTAACCATCACATACGACCTGGATACCCTA 0.4 0 -48.202 -309.1 -0.841 41.34 -0.649 +candidate_22306792 chr16 32126901 32126941 AAAACAAAGGTAGCCTGCTCACCAACATTGGAAAATCGAG 0.425 0 -50.691 -316.8 -0.858 43.38 -2.508 +candidate_22519521 chr16 32145524 32145564 AAAACAACAACAACAACAACAGAAAGAAACTGGGCATGGT 0.375 283 -49.956 -314.7 -0.854 42.58 -0.509 +candidate_21852077 chr16 32162767 32162807 AAAACAAAACTTTAAAAGGGTGGGAGGCAGAAGAGAACCC 0.425 0 -49.985 -312.0 -0.845 43.26 -1.225 +candidate_21920282 chr16 32187546 32187586 AAAACAAAATAAACAGAAAAGCAAGCATTCCACAAAGCCC 0.35 8 -48.636 -314.9 -0.859 40.79 0.384 +candidate_22153094 chr16 32194021 32194061 AAAACAAACCAAACAAAAGGCAGCACTGGTTGCTCTTCCA 0.425 25 -52.132 -317.0 -0.854 45.17 -2.102 +candidate_21696763 chr16 33141995 33142035 AAAACAAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGG 0.4 1 -50.129 -316.3 -0.858 42.65 -3.598 +candidate_21825189 chr16 33142000 33142040 AAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGGAGTCA 0.425 23 -50.941 -314.6 -0.85 44.05 -5.103 +candidate_22334282 chr16 33149008 33149048 AAAACAAAGTTTGCCACTCTTGGCATATCTAAGACTTTAG 0.35 0 -46.873 -311.4 -0.853 39.11 -3.711 +candidate_21883970 chr16 33164535 33164575 AAAACAAAAGCCAACCTAAGGGTTGGAGAGATGGTCCAGT 0.45 54 -51.111 -310.8 -0.837 45.01 -5.968 +candidate_22374476 chr16 33181585 33181625 AAAACAAATATCTAGCTGGGCCTGGTGATGCAGGCTGTAA 0.45 10 -51.426 -313.1 -0.844 45.03 -4.355 +candidate_21758248 chr16 33187988 33188028 AAAACAAAACAACTCGTGGTCTCCTTTTCTTGGCTTCTCC 0.425 1 -50.598 -316.8 -0.858 43.26 0.164 +candidate_22307991 chr16 34107515 34107555 AAAACAAAGGTCTTCTCGGTGTATATCCTGTCCTTTTGGA 0.4 0 -48.737 -310.1 -0.843 41.86 -1.026 +candidate_22155674 chr16 34122313 34122353 AAAACAAACCAACAATCGTAACTAGGAGGGAAAACGGCAG 0.425 0 -50.571 -317.3 -0.86 43.15 -0.309 +candidate_22482990 chr16 34149365 34149405 AAAACAACAAAATATCATTGTCACCTCCTGCTCTAGATGT 0.35 0 -47.116 -309.1 -0.845 39.75 -0.512 +candidate_22231264 chr16 35100492 35100532 AAAACAAAGAATGAATGAATTCAGGCATGGTGATTCACCC 0.375 3 -48.555 -312.4 -0.851 41.17 -2.827 +candidate_22523023 chr16 35115313 35115353 AAAACAACAACAACCAAACCTACAAGAACAACAAAGGCAT 0.35 1072 -48.79 -313.1 -0.852 41.26 0.011 +candidate_21877901 chr16 35139947 35139987 AAAACAAAAGCAAAAGCAAAGCACGATGCTAATGTGAGAA 0.35 1 -49.52 -317.8 -0.865 41.45 -2.156 +candidate_22366619 chr16 36101464 36101504 AAAACAAATAGCCCCAAGAAGGAATGTGCAAAAGGCCTGA 0.425 0 -51.151 -312.7 -0.843 44.64 -1.312 +candidate_21759100 chr16 36139573 36139613 AAAACAAAACAAGAAAACCCCATGCTTCAGATAGCTAGGC 0.4 4 -49.428 -313.8 -0.852 42.16 -0.629 +candidate_21806808 chr16 36186937 36186977 AAAACAAAACCAAACAAAACCAACAGAAATCCACTGGGTC 0.375 147 -49.125 -313.9 -0.854 41.66 -0.509 +candidate_22560242 chr16 37102570 37102610 AAAACAACACTGGGGAAAAGAGTCTCATTATTATACTCTG 0.35 1 -45.875 -308.2 -0.846 38.32 -1.825 +candidate_21966751 chr16 37129884 37129924 AAAACAAAATGTCCGTGCTATTCTCATGTCTGTCAGTGGC 0.425 0 -50.716 -318.5 -0.863 43.14 0.331 +candidate_22270008 chr16 37196041 37196081 AAAACAAAGCACCCATATCATAAATCATTCTCTGGATCAC 0.35 0 -46.586 -309.5 -0.848 39.02 0.191 +candidate_22520899 chr16 38131343 38131383 AAAACAACAACAACAACCAGTCCAGTGCAGAGACCAAAAC 0.425 2 -51.168 -318.3 -0.861 43.74 0.191 +candidate_22462363 chr16 38165907 38165947 AAAACAAATTTGAGGTGAATCCTGTTTTACAGTAGCAGCA 0.35 0 -48.017 -311.8 -0.85 40.48 -1.782 +candidate_22542201 chr16 38187412 38187452 AAAACAACAATCTAGCCAGCTGGCCTGAGAAAAGTGGGTG 0.475 0 -52.404 -316.9 -0.853 45.74 -2.149 +candidate_21829358 chr16 38192572 38192612 AAAACAAAACCTGGCTAATTTAGTACAGTGCTTTGTCCTC 0.375 0 -48.132 -313.0 -0.854 40.55 -0.626 +candidate_22254279 chr16 39105899 39105939 AAAACAAAGATGAAGAAACACCCAGATCCAACTGGGGCCT 0.45 0 -51.425 -311.3 -0.838 45.33 -4.591 +candidate_21808347 chr16 39121119 39121159 AAAACAAAACCAAACTTCCAGCTGTTCAAGTCGTCTTGTG 0.4 1 -50.31 -318.9 -0.866 42.47 -1.632 +candidate_22199459 chr16 39138516 39138556 AAAACAAACTGATACTTGTCCACACAGTCTCTGATAGTAC 0.375 0 -47.032 -311.9 -0.854 39.33 -0.928 +candidate_22349836 chr16 39185937 39185977 AAAACAAATAACTGAGCAGAGAGGAAGCCCACGGAGTGAG 0.475 6 -51.805 -317.2 -0.856 44.93 -2.955 +candidate_22409934 chr16 39186056 39186096 AAAACAAATGACCCAATTAACAAATGGGCTATGGAGCTGA 0.375 1084 -48.754 -309.9 -0.842 41.82 -2.292 +candidate_22308782 chr16 39186247 39186287 AAAACAAAGGTGGTAAATGCTGGTGAAGGTGTGGCTAAAC 0.425 1 -50.663 -315.5 -0.854 43.55 0.364 +candidate_21881395 chr16 39190074 39190114 AAAACAAAAGCACTCTAAGCAGCTTAGGGAGGAAAGGAGT 0.425 8 -50.151 -311.7 -0.843 43.52 -2.038 +candidate_21844822 chr16 40101009 40101049 AAAACAAAACTCTTGTGACAACACACATGAAGTATCCACA 0.35 0 -48.032 -312.9 -0.854 40.34 -1.638 +candidate_22488840 chr16 40123532 40123572 AAAACAACAAACTTCGCTTAGGTGTCCTAAGCAAATGATT 0.35 0 -48.277 -313.3 -0.855 40.58 -5.131 +candidate_22383821 chr16 40125692 40125732 AAAACAAATCAAGCAGAAAGCCCATGCGGATAAGAGCGGT 0.45 0 -52.753 -318.8 -0.858 45.76 -1.007 +candidate_22193410 chr16 40142209 40142249 AAAACAAACTCACTATCAGAAATTGCCCAGCCTAGCCTAA 0.4 0 -49.219 -310.8 -0.843 42.37 0.527 +candidate_22207831 chr16 40187696 40187736 AAAACAAACTTGTCACTAGTCCAGTCCAGGGACTCAGACT 0.45 1 -50.499 -311.8 -0.843 44.05 -3.755 +candidate_22115072 chr16 41106475 41106515 AAAACAAACAATCTTAACTACTACCACTACCACCACCATC 0.375 37 -47.162 -310.2 -0.848 39.75 1.374 +candidate_22540990 chr16 41118273 41118313 AAAACAACAATATCAACTAACTGGACACCTCAGGGATTAA 0.35 299 -46.667 -307.1 -0.84 39.49 -0.906 +candidate_21982381 chr16 41132040 41132080 AAAACAAAATTTCTACCCACTACTCCCTGCAGTGACAGTT 0.4 0 -49.271 -311.1 -0.844 42.39 -1.282 +candidate_21822783 chr16 41170402 41170442 AAAACAAAACCCCATAGGTTTAAATAGCATTGTTGGGGTT 0.35 0 -47.697 -307.2 -0.837 40.79 -4.574 +candidate_22242847 chr16 41171621 41171661 AAAACAAAGAGAAATGTTCCTACCTGGTAACACATAGGAC 0.375 0 -47.134 -309.8 -0.847 39.77 -2.593 +candidate_22388274 chr16 41173653 41173693 AAAACAAATCATAACCAGCTTTTCACAGGTTCAGAAGCTC 0.375 0 -48.488 -314.1 -0.856 40.83 -1.825 +candidate_22423546 chr16 41192808 41192848 AAAACAAATGGCCCAATTTGTCATTGCTATACCTCATCAT 0.35 0 -47.83 -309.1 -0.842 40.66 -2.378 +candidate_22300595 chr16 42103309 42103349 AAAACAAAGGCTCACTTTCTATAGCACCAACACTTGGATT 0.375 1 -48.658 -311.2 -0.847 41.49 -3.561 +candidate_22530271 chr16 42145836 42145876 AAAACAACAACCATAAACTACCCTAGACATGGCTTTAAGT 0.35 0 -46.971 -307.9 -0.841 39.75 -0.732 +candidate_22213516 chr16 42184208 42184248 AAAACAAAGAAAACCTCCGAGTTTCTGTCTACCCAAAGAA 0.375 0 -48.455 -311.4 -0.848 41.2 -1.205 +candidate_21866061 chr16 42197679 42197719 AAAACAAAAGAATGGAGAGACTGCAAACATACTCCACTTT 0.35 0 -47.648 -310.5 -0.848 40.22 -2.238 +candidate_22140417 chr16 42198376 42198416 AAAACAAACATAACAATGCAATGGAATCCAGCTTTGCTTC 0.35 0 -48.457 -315.0 -0.859 40.55 -1.553 +candidate_21872626 chr16 43122088 43122128 AAAACAAAAGAGGTGAAAAGAAGTCTGCAGTCTAGCTGCC 0.425 0 -50.36 -316.5 -0.858 43.01 -3.062 +candidate_21700882 chr16 43126383 43126423 AAAACAAAACAAAACTGCTTAACACCTTGCCAGGCGCATG 0.425 0 -52.311 -321.8 -0.869 44.6 -0.789 +candidate_21847087 chr16 43126388 43126428 AAAACAAAACTGCTTAACACCTTGCCAGGCGCATGGATCC 0.475 1 -53.513 -320.8 -0.862 46.49 -3.397 +candidate_22193752 chr16 43152789 43152829 AAAACAAACTCAGCCAATGTTTGGAGGTTCCTCGTCTCAT 0.425 10 -50.872 -314.5 -0.85 43.98 -2.355 +candidate_22285544 chr16 43157945 43157985 AAAACAAAGCTGCCACAGCAATGTTAGTATCAGGAGACCT 0.425 0 -50.593 -313.6 -0.848 43.77 -3.829 +candidate_21875958 chr16 43193506 43193546 AAAACAAAAGATTGGGCTGCACTGTGTTCCTGTAAGTGGG 0.45 0 -51.663 -316.5 -0.854 44.76 -1.831 +candidate_22446077 chr16 44104803 44104843 AAAACAAATTCAGAGACTGACACGGTTCATGTCTGAGAAA 0.375 1 -48.698 -314.0 -0.855 41.1 -1.192 +candidate_21808115 chr16 44115256 44115296 AAAACAAAACCAAACCCTATACATAGCCAGATGGTATGAA 0.35 0 -46.825 -306.7 -0.838 39.75 -1.157 +candidate_22342579 chr16 44128322 44128362 AAAACAAATAAACCTATGAGCTGGAGCAAGTGGGGCCGGA 0.475 186 -52.685 -314.7 -0.845 46.48 -0.926 +candidate_22162118 chr16 44151172 44151212 AAAACAAACCAGGGAGTTGCTTCTGGGGTCCAGCTTTGAG 0.5 0 -53.231 -316.3 -0.848 47.01 -2.042 +candidate_22155947 chr16 44159950 44159990 AAAACAAACCAACATCCTGCTTTCACATTGAAGGGCAGAG 0.425 0 -50.853 -316.0 -0.855 43.71 -2.893 +candidate_21868751 chr16 44165904 44165944 AAAACAAAAGACCAGGTGACCAGCAATGTGATTAGAAAAG 0.375 0 -48.394 -313.2 -0.854 40.85 -0.806 +candidate_21875178 chr16 44178494 44178534 AAAACAAAAGATGGCATCCCGTGACAGGTACCAGTTCTAT 0.425 0 -50.268 -312.5 -0.845 43.54 -0.847 +candidate_22392409 chr16 45124376 45124416 AAAACAAATCCCACTTTGGTGGCACATATGTGTCATCTCA 0.4 3 -49.82 -312.3 -0.846 42.89 -2.747 +candidate_22170395 chr16 45154949 45154989 AAAACAAACCCTCCCTTCCTTAACTGAAGTTTCCTAGCTC 0.425 1 -49.151 -310.7 -0.843 42.4 -0.569 +candidate_22117822 chr16 45173818 45173858 AAAACAAACACAAATCTTTATCTACCTCCCTGAGCAGCCA 0.4 1 -49.333 -311.1 -0.844 42.47 0.484 +candidate_21748103 chr16 45181671 45181711 AAAACAAAACAACAACAAAACCCACACAATGGATGTGATG 0.35 26 -48.588 -315.1 -0.859 40.7 -3.192 +candidate_22501160 chr16 45181676 45181716 AAAACAACAACAAAACCCACACAATGGATGTGATGAGTTT 0.35 3 -48.655 -312.5 -0.851 41.18 -3.192 +candidate_22144385 chr16 46108727 46108767 AAAACAAACATCTGTGCTCAGGGGCTGCTGTAAGTGGTTC 0.475 0 -52.639 -318.5 -0.857 45.77 -0.829 +candidate_22266827 chr16 46140996 46141036 AAAACAAAGCAACTTGGGTAGGAAAAGGTGTGTTTGGCTA 0.4 302 -50.134 -312.8 -0.847 43.21 -1.928 +candidate_22297925 chr16 46186219 46186259 AAAACAAAGGCAGAGAGTCCAGATTTGCCTGGCCCAAAGA 0.475 0 -52.857 -314.5 -0.844 46.74 -3.135 +candidate_22285837 chr16 47151351 47151391 AAAACAAAGCTGGCAAACAATTTAGTTTGTAAAGTGGGTG 0.35 1 -48.298 -314.5 -0.858 40.43 -2.425 +candidate_21973007 chr16 47167787 47167827 AAAACAAAATTATAACACTGGGTCCTTATCCTGTGCTGCT 0.375 0 -48.337 -309.7 -0.843 41.31 -2.153 +candidate_22559472 chr16 47180265 47180305 AAAACAACACTGAGATTCCACCTCACAACAGTCAGAATGG 0.425 1361 -49.963 -314.8 -0.854 42.78 -0.882 +candidate_21704015 chr16 47181492 47181532 AAAACAAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGA 0.4 4 -49.655 -312.6 -0.848 42.64 -1.554 +candidate_21872467 chr16 47181497 47181537 AAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGAAAAGA 0.4 11 -49.344 -311.7 -0.846 42.38 -1.554 +candidate_22230471 chr16 48150618 48150658 AAAACAAAGAATATTACCAAGGACCACTCCACTCTGTCTC 0.4 0 -47.989 -310.5 -0.846 40.85 -0.919 +candidate_22097738 chr16 48156249 48156289 AAAACAAACAACAAAAGAGAGAGCTGAAAGGGACTGTACA 0.375 2 -48.641 -312.3 -0.85 41.3 -0.526 +candidate_22276407 chr16 48163864 48163904 AAAACAAAGCCAACAGAGAAGTCGTAGCCTCAACCCTCTA 0.45 0 -51.159 -314.6 -0.849 44.43 -0.082 +candidate_21732995 chr16 48174889 48174929 AAAACAAAACAAACTCAAGATTCTGCTTGAGTGACAGGGC 0.4 0 -49.933 -316.6 -0.86 42.35 -4.761 +candidate_22192745 chr16 48174894 48174934 AAAACAAACTCAAGATTCTGCTTGAGTGACAGGGCCTTCA 0.425 0 -50.821 -314.2 -0.849 43.96 -4.761 +candidate_22169674 chr16 48189398 48189438 AAAACAAACCCGGGTATGCCCCTTAGTTAAAACATTCCTT 0.4 268 -49.484 -309.7 -0.839 42.89 -1.519 +candidate_22278994 chr16 48190339 48190379 AAAACAAAGCCCAGAGAACTAGACGAAGAGCAAGCGTAGC 0.475 0 -52.566 -321.9 -0.868 45.11 -1.159 +candidate_21972372 chr16 48194702 48194742 AAAACAAAATTAGAGACAAGGACATGAGGTAAAATGGCCA 0.35 1 -47.43 -308.7 -0.842 40.21 -2.007 +candidate_22267986 chr16 49132159 49132199 AAAACAAAGCAAGTCTCCCTTGTCCAAGAAAAGAATGATC 0.375 0 -48.221 -312.5 -0.852 40.73 -1.672 +candidate_22283034 chr16 49153168 49153208 AAAACAAAGCTACAGAGTGAGAGTGGTAAGAAGATGTGTT 0.375 0 -47.976 -311.2 -0.849 40.62 0.434 +candidate_22281774 chr16 49153622 49153662 AAAACAAAGCGAACCAAAAGCAGTGCTTGGATGGTGAGAC 0.45 0 -52.541 -321.1 -0.866 45.11 -2.593 +candidate_22167603 chr16 49183383 49183423 AAAACAAACCCATGATCCAGACAGGCTCTGTGCAGATGCA 0.475 0 -53.059 -316.5 -0.849 46.65 -2.031 +candidate_21958297 chr16 50115922 50115962 AAAACAAAATGAGAAAGGCGTGGTTGAGCTAGCCTCCATA 0.425 1 -50.817 -314.6 -0.85 43.89 -2.082 +candidate_21859959 chr16 50118068 50118108 AAAACAAAAGAAATATCCAGTGGCCAAAACCAGAACCAGG 0.4 1 -49.379 -312.2 -0.847 42.35 -0.056 +candidate_22158341 chr16 50123922 50123962 AAAACAAACCAATTAAGCAGGTGAATATTGGCTGGGCTGA 0.4 0 -50.085 -312.1 -0.845 43.27 -1.525 +candidate_22157299 chr16 50159646 50159686 AAAACAAACCAAGCATCCATGGGTGGGGAGTGAGTAAGAA 0.45 0 -51.315 -311.5 -0.839 45.15 -1.17 +candidate_21778714 chr16 50167929 50167969 AAAACAAAACACCTCCCTAGGGCTAGTGCTCTAGCTAAGT 0.45 0 -50.398 -310.8 -0.84 44.09 -3.63 +candidate_21759804 chr16 50168025 50168065 AAAACAAAACAAGAACAACTTCCTGCACATCTTTGCTCTC 0.375 1 -49.12 -316.5 -0.862 41.25 -1.018 +candidate_22082335 chr16 50179734 50179774 AAAACAAACAAACAGCATGGTGACACATGTTTGTAGTCCC 0.4 4 -50.064 -316.7 -0.86 42.5 -4.814 +candidate_22220205 chr16 51104997 51105037 AAAACAAAGAAAGCAAAGGAGAATGACTGTGGGTTTTACT 0.35 1 -47.858 -310.4 -0.846 40.5 0.164 +candidate_21904481 chr16 51138374 51138414 AAAACAAAAGTAGGAAAGCATTTCATTGTGGAAGCTCTAG 0.35 28 -47.156 -311.9 -0.854 39.39 -1.702 +candidate_22090997 chr16 51143275 51143315 AAAACAAACAAAGTTAGTAAGGCACTTGTCAATTCCCATG 0.35 0 -47.539 -312.5 -0.854 39.78 -1.619 +candidate_22251468 chr16 51149587 51149627 AAAACAAAGATACAAGTAACACAATACAGACTGAGCTGGT 0.35 434 -47.152 -310.5 -0.849 39.59 -0.609 +candidate_22349222 chr16 51186899 51186939 AAAACAAATAACCGCATTAAAATATGGGGCTCAGAGCTAA 0.35 1115 -47.665 -310.3 -0.847 40.27 -2.237 +candidate_21887125 chr16 51197616 51197656 AAAACAAAAGCTACATGGCCGATGCTCTCTTCACATGTAG 0.425 0 -50.437 -317.6 -0.861 42.93 -3.304 +candidate_22404908 chr16 52134574 52134614 AAAACAAATGAAAGCCCGAGCGAACTTGCCTCACGTAATC 0.45 0 -52.532 -323.2 -0.873 44.75 -0.379 +candidate_21815172 chr16 53106595 53106635 AAAACAAAACCAGAGATTATTCAGTTGTCTAATGGGAACC 0.35 0 -46.565 -309.2 -0.847 39.04 -0.789 +candidate_22544870 chr16 53130099 53130139 AAAACAACAATTTCAACTAACCAGACTCCCTGTCCCAGAG 0.425 135 -49.51 -312.3 -0.847 42.6 -0.909 +candidate_22234415 chr16 53153978 53154018 AAAACAAAGACAACCACTGCATGTGGGCTGATGTGCCTTT 0.45 0 -52.904 -317.4 -0.853 46.19 -3.302 +candidate_22384493 chr16 53191793 53191833 AAAACAAATCAATCTGACATTAGGCAGTGTTCTGGGTTGA 0.375 0 -48.665 -311.3 -0.847 41.48 -0.969 +candidate_22249466 chr16 53198620 53198660 AAAACAAAGAGTCATTCAAGCTGAAGGGGAATTGGTAGGA 0.4 0 -49.067 -309.5 -0.84 42.38 -0.527 +candidate_22292624 chr16 54121626 54121666 AAAACAAAGGACAGCAATAGGTGAAACTAGGTCACTAAGG 0.4 0 -48.3 -311.4 -0.848 41.1 -1.042 +candidate_22363675 chr16 54122567 54122607 AAAACAAATAGAAACAAACCCATCCAAGAGGAGTAGAAGG 0.375 1049 -47.182 -308.7 -0.843 40.0 -0.822 +candidate_21951703 chr16 54143955 54143995 AAAACAAAATCTCACAGCAAACCTGTCCTTCTCTTCTGAC 0.4 0 -49.143 -314.6 -0.856 41.67 -1.602 +candidate_22306763 chr16 54145774 54145814 AAAACAAAGGTAGCAAATTCACCCAAGAGGAGTAGACAGC 0.425 1469 -49.8 -313.8 -0.851 42.73 -1.006 +candidate_22536165 chr16 55102898 55102938 AAAACAACAAGCTGTTCACATTTCTCTCCTGGGCGCTACT 0.45 0 -52.16 -317.4 -0.855 45.24 -0.472 +candidate_22283133 chr16 55104509 55104549 AAAACAAAGCTACCTCCCTCACAGACATGCCCACAGGCTA 0.5 8 -53.175 -314.6 -0.843 47.24 -2.189 +candidate_22416928 chr16 55125756 55125796 AAAACAAATGCATCAATCTAATGCTAGAAAGGAATCTGGC 0.35 1 -47.273 -311.8 -0.853 39.55 -1.472 +candidate_22188201 chr16 55133103 55133143 AAAACAAACTACATGCCAGGAGTTTCCTTTTCCTCTTGAG 0.4 0 -48.866 -312.4 -0.85 41.66 -1.159 +candidate_22276314 chr16 55137295 55137335 AAAACAAAGCCAAATCCTCTATTTTGTGAGAAGGGAAGGG 0.4 0 -48.757 -310.4 -0.844 41.84 -1.215 +candidate_22293865 chr16 55185288 55185328 AAAACAAAGGAGACCTACACTATACCATGCTTATAGATCA 0.35 0 -45.749 -305.5 -0.837 38.56 -0.904 +candidate_22431224 chr16 56124062 56124102 AAAACAAATGTGCTTTAATGGCTAGTGTGACTTTTGCCCA 0.375 0 -49.621 -313.9 -0.852 42.29 -0.979 +candidate_22422286 chr16 57100406 57100446 AAAACAAATGGAGTCTCAAGGTACCCATAAATTGTGTCTT 0.35 0 -47.088 -307.8 -0.841 39.92 -0.956 +candidate_22168417 chr16 57136534 57136574 AAAACAAACCCCAGCCAAGTACAGTAGTGACAGTTCCTTG 0.45 0 -50.869 -314.9 -0.851 44.01 -0.486 +candidate_22560764 chr16 57137711 57137751 AAAACAACACTTAGCAGGTTTCATTGACATAGGCTTTCAT 0.35 1 -47.876 -311.1 -0.849 40.41 -0.149 +candidate_22163643 chr16 57158167 57158207 AAAACAAACCATCTGGCACAATTAACTGACTGTACTTATC 0.35 0 -46.901 -311.8 -0.854 39.08 -0.316 +candidate_22270800 chr16 57163111 57163151 AAAACAAAGCAGAAACACTCTCTAGGAAGGGAATGCTTTT 0.375 0 -48.599 -310.8 -0.845 41.48 -2.288 +candidate_22205403 chr16 57181778 57181818 AAAACAAACTTCAATGTTCACACCACAAGATGCAGCAACA 0.375 0 -50.157 -316.7 -0.859 42.52 -0.512 +candidate_21888142 chr16 57184506 57184546 AAAACAAAAGCTGCAATAGGAGACTCTCTGCCAAGACTAA 0.4 0 -49.3 -312.4 -0.848 42.22 -0.562 +candidate_22134652 chr16 57199201 57199241 AAAACAAACAGCTCGAGAGAGCACTCCTCGTCCCCAGTGC 0.55 0 -55.472 -324.0 -0.866 48.74 -4.392 +candidate_22240123 chr16 58145273 58145313 AAAACAAAGACTAACACCCTAGGGCGTTCTCCAACTTCCC 0.475 0 -51.59 -315.0 -0.849 45.02 -0.95 +candidate_22530904 chr16 58147083 58147123 AAAACAACAACCGTAAGAAGGAGGCTGGAGGCTGATGCTC 0.5 0 -53.263 -319.0 -0.857 46.58 -0.912 +candidate_21967395 chr16 58168778 58168818 AAAACAAAATGTGCCTTAGCACAGTGGGCAATTTAGTATA 0.35 0 -47.893 -310.9 -0.848 40.46 -3.848 +candidate_22355635 chr16 60105525 60105565 AAAACAAATAATTGGTTTTGAAGGCTCAGCCCTAAACATG 0.35 1 -47.669 -311.7 -0.851 40.06 -2.722 +candidate_22348223 chr16 60138660 60138700 AAAACAAATAACAGTACATGCTGGCAAAGAGGTAGAGTAA 0.35 232 -47.141 -309.9 -0.847 39.67 -1.292 +candidate_22548148 chr16 60142430 60142470 AAAACAACACAATCAGGTCTGTCACAGCAACACTCCATAA 0.4 60 -49.897 -314.3 -0.853 42.67 0.281 +candidate_22070415 chr16 60163443 60163483 AAAACAAACAAACAAACATGGTCAGAATGCAGAGTTATGG 0.35 4 -47.922 -314.0 -0.858 40.03 0.483 +candidate_22297174 chr16 60175876 60175916 AAAACAAAGGCAAGCAGGGATGTTTGTTCTAATTAAGCAT 0.35 0 -48.286 -311.2 -0.848 40.92 -2.408 +candidate_22406075 chr16 60185472 60185512 AAAACAAATGAACAATGATCTCTCCTATATGGTCACAAGG 0.35 0 -46.22 -308.7 -0.846 38.68 -0.44 +candidate_22550604 chr16 61104641 61104681 AAAACAACACAGAGATACACACACATGCATGTACCCACAC 0.425 403 -50.454 -317.4 -0.861 42.98 -0.699 +candidate_21890845 chr16 61173693 61173733 AAAACAAAAGGAAGAAACACAAAACCTGTGGAGTTCATGT 0.35 2 -48.283 -311.6 -0.849 40.85 -2.312 +candidate_21791592 chr16 61181111 61181151 AAAACAAAACAGGGAGGAGATGCCTTGGGTCCTGGAAATG 0.475 0 -51.861 -313.1 -0.842 45.69 -2.193 +candidate_22231544 chr16 62146595 62146635 AAAACAAAGAATGGACAGCCATGCCACAATAATGGAAGAA 0.375 0 -49.106 -311.4 -0.846 42.03 -2.764 +candidate_22551772 chr16 62190688 62190728 AAAACAACACAGTCAGGTCTGTGACAGCAATACCCCATTA 0.425 199 -50.358 -312.9 -0.846 43.59 -3.865 +candidate_22251480 chr16 62192811 62192851 AAAACAAAGATACAATGGTTGAGGATATGCCTCTGTGGAT 0.375 1 -47.891 -308.2 -0.839 40.98 -2.622 +candidate_22208932 chr16 62193639 62193679 AAAACAAACTTTCAGAAGGAAGGCATAGTTCCTACAAAAG 0.35 0 -46.886 -310.7 -0.851 39.23 -1.925 +candidate_21852860 chr16 63108540 63108580 AAAACAAAACTTTGGTGGCTGGTAATGTAGATCAATGTTG 0.35 1 -47.57 -312.5 -0.854 39.82 -0.929 +candidate_22154498 chr16 63139745 63139785 AAAACAAACCAAAGGAGACAAGCTTAGAATGTAGTAGACA 0.35 0 -46.913 -309.3 -0.846 39.47 -0.278 +candidate_21978114 chr16 63152879 63152919 AAAACAAAATTGAGGGACTCCAGAATACAGAAAGAGCTGC 0.4 0 -48.99 -313.3 -0.852 41.68 -2.078 +candidate_22165988 chr16 63157019 63157059 AAAACAAACCCAATCAAGACCCCTAAATGGTAGCATTTCT 0.375 13 -48.311 -308.0 -0.837 41.55 -2.145 +candidate_22543874 chr16 63183017 63183057 AAAACAACAATGTTGAAAGAAGCCAATATTTGCAGGGGTG 0.375 0 -49.146 -314.2 -0.855 41.64 -1.842 +candidate_22195602 chr16 64101875 64101915 AAAACAAACTCCTCTGTCCCAGGCTAATGGTTTATTTGTC 0.4 0 -48.71 -311.5 -0.847 41.61 -0.439 +candidate_22080830 chr16 64121803 64121843 AAAACAAACAAACACCATAAGAAGAGCCAGCCAGAATAGT 0.375 0 -48.658 -311.2 -0.846 41.49 2.537 +candidate_22267124 chr16 64124738 64124778 AAAACAAAGCAAGACCCAACAGCTACAAGAAAACTGAAAT 0.35 747 -48.407 -312.5 -0.852 40.87 -0.889 +candidate_22409669 chr16 64127159 64127199 AAAACAAATGACATCTCATATTGGTGAGGACGTGAAATAC 0.35 69 -46.888 -312.5 -0.856 38.96 -1.445 +candidate_22275089 chr16 64170152 64170192 AAAACAAAGCATTAGCAAGTGCAATAGCATTGCTACTAGA 0.35 0 -48.129 -313.4 -0.855 40.38 -4.217 +candidate_22263227 chr16 65100596 65100636 AAAACAAAGCAAACAAAACAAAAGCCAGCCCTGTTTCCCT 0.4 24 -51.317 -315.1 -0.85 44.35 -1.016 +candidate_21884557 chr16 65100610 65100650 AAAACAAAAGCCAGCCCTGTTTCCCTGATCCTCAGTTTCC 0.475 2 -52.234 -314.9 -0.847 45.86 -1.884 +candidate_22185338 chr16 65122594 65122634 AAAACAAACTAAACCCATAGACAACTGTATTGCCTCCTCC 0.4 1 -48.427 -311.0 -0.847 41.33 -0.619 +candidate_22427785 chr16 65176726 65176766 AAAACAAATGTAGACCTGAGAACTTCATGTGAGAGATGGG 0.4 0 -48.207 -311.4 -0.849 40.98 -0.665 +candidate_22128391 chr16 66105689 66105729 AAAACAAACAGAAAGGAAAGATTCTGGAAGAGGCACAGGA 0.4 6 -49.388 -311.0 -0.844 42.55 -2.295 +candidate_22137318 chr16 66107612 66107652 AAAACAAACAGGGTCAAGTTGGTTCAACACTTGTGTTTTA 0.35 0 -48.452 -312.7 -0.852 40.9 -2.995 +candidate_22235562 chr16 66120355 66120395 AAAACAAAGACACTGAGCTGGGAGAAAAGATTGCTCTCTT 0.4 0 -49.524 -312.5 -0.848 42.48 -1.822 +candidate_22139014 chr16 66135997 66136037 AAAACAAACAGTGCAACTTGAGATTCTATGCCAACAGAGA 0.375 0 -48.942 -313.5 -0.853 41.49 -1.263 +candidate_21875941 chr16 66143845 66143885 AAAACAAAAGATTGGAAATCCACAGTAATCCATGCCAGTA 0.35 0 -47.461 -308.7 -0.842 40.25 -1.092 +candidate_22202771 chr16 66144420 66144460 AAAACAAACTGTGACAAAGAGCCATCATTTCACGATCTTA 0.35 0 -48.043 -313.5 -0.856 40.26 -0.316 +candidate_22412801 chr16 66173972 66174012 AAAACAAATGAGTTAAGCCATAAATGTCAGGCAAGCCTTT 0.35 0 -48.286 -311.2 -0.848 40.92 -1.918 +candidate_22478627 chr16 67150981 67151021 AAAACAACAAAACAAGTAAACACTAGCATTCACTCACTGG 0.35 0 -47.647 -314.5 -0.86 39.62 0.461 +candidate_22077731 chr16 67178091 67178131 AAAACAAACAAACAAGAACAACAAAATCCCAGCCAGATGG 0.375 91 -49.229 -314.5 -0.855 41.7 -0.142 +candidate_22143879 chr16 68111670 68111710 AAAACAAACATCCGTGTTGACAGCCCACTATTTCACAGAA 0.4 0 -50.26 -315.5 -0.855 42.94 -1.422 +candidate_21842556 chr16 68125708 68125748 AAAACAAAACTCATCACAATTGTAAGCAGCCACTTGAGTT 0.35 5 -48.508 -313.5 -0.854 40.84 -1.541 +candidate_22248005 chr16 68163705 68163745 AAAACAAAGAGGCCTTGACGATTCTATGGAACACACGTGA 0.425 0 -50.953 -317.0 -0.858 43.68 -0.735 +candidate_21880288 chr16 68164199 68164239 AAAACAAAAGCAAGGCTGTTGAACACCTAAGCCAACAGTA 0.4 1 -50.442 -315.0 -0.853 43.25 -3.348 +candidate_22270492 chr16 68171225 68171265 AAAACAAAGCACTGGAAGTCAAATCACGGGGTCTATACTG 0.425 4 -49.929 -315.2 -0.855 42.67 -0.409 +candidate_21670946 chr16 68188874 68188914 AAAACAAAACAAAACAAACCGAAAGTACCTGGACATACGA 0.35 50 -48.443 -314.8 -0.859 40.56 -0.206 +candidate_21732049 chr16 68188879 68188919 AAAACAAAACAAACCGAAAGTACCTGGACATACGAACCTT 0.375 0 -49.084 -314.2 -0.855 41.56 -0.206 +candidate_22171832 chr16 68188884 68188924 AAAACAAACCGAAAGTACCTGGACATACGAACCTTTCTAT 0.375 0 -48.21 -311.9 -0.85 40.81 -0.605 +candidate_21833371 chr16 69120689 69120729 AAAACAAAACGATGTAGTGTATCTCAGGGTAGACATGGTA 0.375 0 -47.458 -310.0 -0.846 40.15 -0.67 +candidate_22532719 chr16 70126324 70126364 AAAACAACAACTGGCAACAAACAAACGCTTGAGAGGATGT 0.4 0 -51.199 -318.3 -0.861 43.67 -1.268 +candidate_21838265 chr16 70179074 70179114 AAAACAAAACTACAAAATCATGCCGAGGAAAGACAGTGAA 0.35 1 -48.253 -313.4 -0.855 40.54 0.874 +candidate_22322736 chr16 70183950 70183990 AAAACAAAGTCTGGGGTTTGGCACTACCACATCCTATTCT 0.425 0 -50.046 -310.2 -0.839 43.63 -1.513 +candidate_21687718 chr16 70191486 70191526 AAAACAAAACAAAACAGAACCGCACAGTGGAGGAGCAATA 0.4 17 -50.708 -316.6 -0.857 43.33 -1.469 +candidate_21784795 chr16 70191491 70191531 AAAACAAAACAGAACCGCACAGTGGAGGAGCAATACCATT 0.425 2 -51.38 -316.0 -0.853 44.38 -1.469 +candidate_22410844 chr16 71175515 71175555 AAAACAAATGACTTTACTGGCCCTGCCTACTTTTCTTATT 0.35 0 -47.423 -308.6 -0.842 40.22 -1.389 +candidate_22311802 chr16 72102985 72103025 AAAACAAAGTAAATGTCATAAGTTCTCCTCCTCTTGTCCT 0.35 2 -46.505 -307.0 -0.84 39.29 0.281 +candidate_22359397 chr16 72145410 72145450 AAAACAAATACATGAATAAGTGGGTGGGGTGACACAATGT 0.375 1 -48.554 -309.7 -0.842 41.59 -0.949 +candidate_21924434 chr16 72152772 72152812 AAAACAAAATAACCAGTACTTGTGACTTCCTGGCTTCCAT 0.375 0 -48.419 -310.0 -0.843 41.37 -1.332 +candidate_22562354 chr16 72178247 72178287 AAAACAACAGAAAATGAGTGAGTTGTTTGAAGGCAGCATT 0.35 1 -48.791 -314.0 -0.855 41.12 -3.941 +candidate_22442846 chr16 73115936 73115976 AAAACAAATTATCTGGGTTTGGAGAGATGGTTCTGTGGTT 0.375 551 -48.184 -308.4 -0.839 41.32 -0.851 +candidate_22136880 chr16 73124496 73124536 AAAACAAACAGGCTTCTGGATAGAGGAAGAGGTGTGGAGA 0.45 0 -50.491 -310.8 -0.839 44.21 -1.392 +candidate_21884867 chr16 73131946 73131986 AAAACAAAAGCCATCGTCTTAAGGGTATTATGTGGAAATG 0.35 0 -47.059 -311.4 -0.852 39.34 -0.109 +candidate_21698710 chr16 73144761 73144801 AAAACAAAACAAAACGGCAAATCCTAACTATGGAGTGGAT 0.35 3 -48.0 -311.1 -0.848 40.57 -0.505 +candidate_21834208 chr16 73144766 73144806 AAAACAAAACGGCAAATCCTAACTATGGAGTGGATCCTTT 0.375 0 -48.502 -310.3 -0.844 41.43 -1.249 +candidate_22294609 chr16 73178356 73178396 AAAACAAAGGAGGAGAAGAAAAGGAAGAGGAGAAGGAGGA 0.425 1202 -49.0 -307.2 -0.833 42.77 998.226 +candidate_22135831 chr16 73178578 73178618 AAAACAAACAGGATATTGAATGCCATGAAGGAGGCTGTTC 0.4 0 -49.293 -313.2 -0.851 42.08 -2.488 +candidate_21790463 chr16 73187251 73187291 AAAACAAAACAGGAAGGGAATGACTGGAGCCATTCAAGAC 0.425 0 -50.159 -313.6 -0.849 43.22 -1.875 +candidate_22168459 chr16 74173913 74173953 AAAACAAACCCCAGGCACATTCCTTATAGCCGTGTTATGC 0.45 0 -51.546 -316.6 -0.855 44.59 -0.892 +candidate_22143830 chr16 74196682 74196722 AAAACAAACATCCCCAAAGGCTTTGATATCCCATTCAGCA 0.4 0 -49.85 -310.5 -0.84 43.23 -1.169 +candidate_22518902 chr16 75105564 75105604 AAAACAACAACAACAACAACAACAATCTCAGTGCATATCC 0.35 485 -48.158 -315.6 -0.862 40.09 1.114 +candidate_22522176 chr16 75109734 75109774 AAAACAACAACAACACTCCAAAACAAACTGGAGAAGCAAG 0.375 7 -49.306 -316.5 -0.862 41.48 -3.215 +candidate_22201014 chr16 75109753 75109793 AAAACAAACTGGAGAAGCAAGTGGTGGAGTATCAGAGGTA 0.425 0 -49.706 -311.1 -0.843 43.04 0.084 +candidate_22334198 chr16 75129428 75129468 AAAACAAAGTTTGAGATTAAGCTCAAACCTTGCAGAGCTA 0.35 0 -47.914 -312.1 -0.852 40.31 -5.062 +candidate_21979283 chr16 75142524 75142564 AAAACAAAATTGTACAGAAAGGAACTACTCAGAGCCATGC 0.375 2 -48.205 -313.6 -0.856 40.55 -1.415 +candidate_22358340 chr16 75187595 75187635 AAAACAAATACAGACTCTTGTAGCACAGCAGTAGAAACAG 0.375 0 -47.864 -314.5 -0.86 39.99 -0.578 +candidate_22132000 chr16 75198974 75199014 AAAACAAACAGAGTGTGACATGTGTCGATTTCAGACAAAA 0.35 0 -48.506 -315.7 -0.862 40.51 -0.801 +candidate_22111571 chr16 76106687 76106727 AAAACAAACAAGGTCATAGCTCAGGGCTGTTCTGCCCTAT 0.45 0 -51.337 -312.7 -0.843 44.98 -4.415 +candidate_22385414 chr16 76107708 76107748 AAAACAAATCACATCGTATCACATCTCTCTGCCTAAACCA 0.375 0 -48.293 -312.2 -0.851 40.87 1.164 +candidate_22328152 chr16 76113352 76113392 AAAACAAAGTGTGGGGAGCCGCGCGGGTAATAACAAAGCA 0.5 0 -55.261 -323.2 -0.864 48.4 -1.451 +candidate_22461655 chr16 76185390 76185430 AAAACAAATTTCTGGGGTGACACCTGCCTTCTTCCCTGTG 0.475 0 -52.21 -315.0 -0.847 45.82 -0.539 +candidate_22350221 chr16 76188356 76188396 AAAACAAATAAGAAACTCACAAAGAGGAAGGAAGGGAGGG 0.4 51 -48.247 -309.3 -0.842 41.36 -1.359 +candidate_21696605 chr16 76195412 76195452 AAAACAAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTC 0.35 2 -47.304 -311.8 -0.853 39.59 0.388 +candidate_21824607 chr16 76195417 76195457 AAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTCCTGGT 0.4 0 -49.143 -309.7 -0.84 42.45 0.044 +candidate_22309582 chr16 77139315 77139355 AAAACAAAGGTTCTTCTAAGTGGTAGTGGGACAGAAGGAA 0.4 0 -48.553 -308.8 -0.839 41.83 -1.045 +candidate_22559612 chr16 77145310 77145350 AAAACAACACTGAGATTCCATCTTAGACCTGTCAGAATGG 0.4 1346 -48.207 -311.4 -0.849 40.98 -1.808 +candidate_21875790 chr16 78106632 78106672 AAAACAAAAGATTCCAAAATAGGCCAAGCAGGTGCAACCA 0.4 2 -50.648 -313.5 -0.848 43.76 -1.809 +candidate_22221967 chr16 78121594 78121634 AAAACAAAGAAATCAACAGGCTATCACATCTTCCCTTTCT 0.35 0 -47.299 -308.6 -0.843 40.06 0.498 +candidate_21943614 chr16 78146038 78146078 AAAACAAAATCAAGACTACAGCAGGAAAATGGGTGGAGGT 0.4 2 -49.516 -310.6 -0.842 42.78 0.131 +candidate_22088458 chr16 78160661 78160701 AAAACAAACAAAGAAAAGAAACTGGCAAGGATGCAGGGAA 0.375 21 -49.607 -312.8 -0.849 42.44 -1.949 +candidate_22272621 chr16 78164887 78164927 AAAACAAAGCAGGGCTGCCTTGGCTAGAAGGACAAGTGAG 0.5 0 -53.425 -318.2 -0.854 46.93 -2.985 +candidate_22067700 chr16 79178510 79178550 AAAACAAACAAACAAACAACCTGTCTGCCTCTTCCCTCAA 0.4 14 -50.29 -313.7 -0.849 43.27 0.331 +candidate_21866445 chr16 80127300 80127340 AAAACAAAAGAATTCCATTCCTAATCATTCCCCAAAGGCT 0.35 1 -47.432 -306.5 -0.835 40.55 -0.349 +candidate_21961983 chr16 80154036 80154076 AAAACAAAATGCTCACAGAGGTGAAGGTGATCTACACAAA 0.375 0 -48.704 -312.3 -0.85 41.37 -3.118 +candidate_22519488 chr16 80166974 80167014 AAAACAACAACAACAACAACACCTCTGTGATTACTGGAGA 0.375 32 -48.814 -313.0 -0.852 41.41 -1.649 +candidate_22277386 chr16 80198612 80198652 AAAACAAAGCCAGAAAGTGAATTACTGACCCAAGATTCTA 0.35 0 -47.157 -308.8 -0.844 39.85 -0.967 +candidate_22188735 chr16 81153500 81153540 AAAACAAACTACTGCAGTCACTCAGGAAATTGTTGAGAAT 0.35 0 -47.717 -311.5 -0.851 40.15 -1.831 +candidate_22207174 chr16 81171525 81171565 AAAACAAACTTGCAAAGTCATTGTGTTTGTTTGTGTTGGC 0.35 1 -49.48 -319.0 -0.869 41.22 -5.442 +candidate_21686514 chr16 81179833 81179873 AAAACAAAACAAAACACTGGAAGCTTCTAAGTGACAGAGG 0.375 1 -48.401 -314.2 -0.857 40.7 -1.847 +candidate_21780699 chr16 81179838 81179878 AAAACAAAACACTGGAAGCTTCTAAGTGACAGAGGATACA 0.375 0 -48.079 -310.9 -0.847 40.8 -1.847 +candidate_22164411 chr16 82101203 82101243 AAAACAAACCATTGAAACACTGATGAACCAAATAGGGGAA 0.35 1 -47.785 -308.9 -0.842 40.63 -2.151 +candidate_21774421 chr16 82180535 82180575 AAAACAAAACACAGACTCTCCCTCTCCCAGTAGCCATCAT 0.45 17 -50.66 -311.0 -0.839 44.39 0.751 +candidate_22142541 chr16 83147797 83147837 AAAACAAACATATCTAGGCAAGACTAACCAGTGGCCACAG 0.425 0 -49.693 -313.6 -0.851 42.63 -1.459 +candidate_21961679 chr16 83169237 83169277 AAAACAAAATGCCTTCTATCCACCTTCAGAAGACTTCAGT 0.375 0 -48.151 -309.7 -0.843 41.08 -1.865 +candidate_22393590 chr16 83170773 83170813 AAAACAAATCCTACCTCCAGAGAAAGAGAGAGAGAGAGAT 0.4 118 -47.311 -306.1 -0.834 40.66 -0.199 +candidate_21798346 chr16 83195310 83195350 AAAACAAAACATGAAATATGGTGACCAGAGTAAAGGGGAG 0.375 0 -47.523 -309.6 -0.845 40.29 -0.715 +candidate_22235188 chr16 84110136 84110176 AAAACAAAGACACAGATACTTAACTGGGTATACAAGTGCA 0.35 1 -46.972 -309.7 -0.847 39.48 -1.767 +candidate_22199438 chr16 84113940 84113980 AAAACAAACTGATACACGTGCAAAAGAGTGAATTTCCCCA 0.375 0 -49.377 -314.4 -0.855 41.9 -1.149 +candidate_22363266 chr16 84123068 84123108 AAAACAAATACTTTCTACAGTGAGGAAAATCCACAGAGGT 0.35 0 -46.816 -307.9 -0.842 39.55 -0.726 +candidate_21848800 chr16 84137050 84137090 AAAACAAAACTGTGATGTATAGTTGTGAAAGGGGACAGCT 0.375 0 -48.489 -311.0 -0.846 41.3 -1.906 +candidate_22448911 chr16 84178196 84178236 AAAACAAATTCTACTGTCCTACTCACACACACACACACAC 0.4 490 -49.099 -316.2 -0.861 41.37 0.781 +candidate_21864202 chr16 84196585 84196625 AAAACAAAAGAATACACTGTCTTCTCAGTACCAAAAGGTG 0.35 1010 -46.787 -311.5 -0.854 38.98 -1.492 +candidate_22235294 chr16 85110795 85110835 AAAACAAAGACACATGCGTACACACATGGCCTCATTCAGA 0.425 4 -51.412 -317.8 -0.859 44.13 -1.452 +candidate_21734516 chr16 85140354 85140394 AAAACAAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGA 0.35 276 -46.619 -307.3 -0.841 39.39 0.274 +candidate_22226467 chr16 85140359 85140399 AAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGATAAAG 0.35 295 -45.506 -306.9 -0.843 38.04 0.274 +candidate_21778745 chr16 85151414 85151454 AAAACAAAACACCTCTCCTAGACCAGAGACTAGGTGGTGC 0.475 0 -50.986 -313.9 -0.848 44.43 -3.876 +candidate_22008965 chr16 85166641 85166681 AAAACAAACAAAACCAGAAACCAAACCCCTTTTACCTGTG 0.375 4 -48.886 -312.7 -0.851 41.54 0.471 +candidate_22535706 chr16 85174980 85175020 AAAACAACAAGCAGTTTCTGCCACTGCCCAGTTCCTGCTT 0.475 0 -53.894 -318.7 -0.854 47.34 -2.765 +candidate_22399452 chr16 86120245 86120285 AAAACAAATCTGATCTGCATTTTGATGCTGTACCGCTAAC 0.375 0 -48.937 -317.0 -0.864 40.95 -2.372 +candidate_22324337 chr16 86170469 86170509 AAAACAAAGTGACTAGGATAGGGAAGGTTGGAACTTTTAT 0.35 0 -46.394 -305.4 -0.835 39.39 -0.389 +candidate_21982954 chr16 86199584 86199624 AAAACAAAATTTGCAAGCATCTGGAATGGCTGGTAAGTGC 0.4 0 -50.602 -317.3 -0.86 43.08 -0.785 +candidate_22007903 chr16 87129728 87129768 AAAACAAACAAAACACTCAGTTCATCGGGTAAAGTCTAGG 0.375 0 -48.032 -313.8 -0.857 40.3 -0.469 +candidate_22133710 chr16 87137068 87137108 AAAACAAACAGCAGTATCCAGATCAGCTGCATCCCTCCCA 0.475 0 -52.395 -314.1 -0.844 46.21 -2.625 +candidate_22563296 chr16 87145435 87145475 AAAACAACAGAAAGCCCACATACACATGGAAGCTGACCAA 0.425 1180 -51.121 -314.5 -0.849 44.3 -0.709 +candidate_22402937 chr16 87187631 87187671 AAAACAAATCTTTGTGAGTTCAAGGCCTGCCCACTCTCCA 0.45 214 -51.875 -314.2 -0.846 45.42 -2.148 +candidate_22356305 chr16 88124318 88124358 AAAACAAATACAAAACAAACCACTCTCACCCCAAGAAAGC 0.375 10 -48.77 -313.7 -0.854 41.24 0.854 +candidate_22160134 chr16 88124329 88124369 AAAACAAACCACTCTCACCCCAAGAAAGCAAGACACAAAA 0.4 1 -50.29 -313.7 -0.849 43.27 0.854 +candidate_22385976 chr16 88127352 88127392 AAAACAAATCACTCACTCCATCCTAGAAGAGCAAACTGCC 0.425 0 -49.873 -314.4 -0.853 42.73 -0.709 +candidate_22325960 chr16 88141120 88141160 AAAACAAAGTGCTTCATCAAATGCAGGCACCGGCTGGATA 0.45 0 -52.805 -318.2 -0.856 45.93 -1.96 +candidate_21785540 chr16 88192867 88192907 AAAACAAAACAGAATAGCAGTTAGGCGGTAGGAGGGAGAA 0.425 1 -49.954 -312.0 -0.845 43.22 0.241 +candidate_22167297 chr16 88195353 88195393 AAAACAAACCCAGTGATTGGCATGGCTCGAAATGTTTTCT 0.4 0 -50.811 -315.4 -0.853 43.65 -1.358 +candidate_22389140 chr16 90101042 90101082 AAAACAAATCATGAGCCCACCTTTGCAGTGTTACCTTACA 0.4 0 -49.955 -312.9 -0.848 42.97 -0.516 +candidate_22302160 chr16 90124634 90124674 AAAACAAAGGGAAGCCCAGCAGCAAGGCAGCTGCATCTAA 0.5 0 -54.655 -318.5 -0.851 48.46 -5.807 +candidate_22126700 chr16 90130090 90130130 AAAACAAACACTTCTTCCCTTTATTTGCTTTCTCCAGCAT 0.35 10 -48.058 -310.6 -0.847 40.72 -0.945 +candidate_21849939 chr16 90133192 90133232 AAAACAAAACTTACCATAGCTAGAGTGATTCACAAACCCC 0.375 0 -47.614 -310.9 -0.849 40.21 -0.469 +candidate_21699937 chr16 90136408 90136448 AAAACAAAACAAAACTCAATTAGCCACAGAGCACCAAGAG 0.375 3 -48.912 -315.3 -0.859 41.17 -0.226 +candidate_21841895 chr16 90136413 90136453 AAAACAAAACTCAATTAGCCACAGAGCACCAAGAGGACAC 0.425 0 -50.463 -316.2 -0.857 43.19 -1.055 +candidate_22108944 chr16 90137828 90137868 AAAACAAACAAGCAAAGACAACCCACAGGGCTGGTAATAC 0.425 5 -50.663 -315.5 -0.854 43.55 -1.049 +candidate_22439916 chr16 90141470 90141510 AAAACAAATTACTGGGGAAGAGCCAGGAGAATCATCCAAG 0.425 0 -49.361 -310.6 -0.842 42.68 -2.242 +candidate_22161492 chr16 90147842 90147882 AAAACAAACCAGCAGGGTAACAGTCTTTAGCTAATTTGTG 0.375 0 -48.277 -313.3 -0.855 40.68 -2.399 +candidate_22245248 chr16 90156432 90156472 AAAACAAAGAGATCTGTCTTCCTCTGCCTCCCAAGTGCTG 0.475 2400 -51.655 -315.5 -0.851 45.02 -0.792 +candidate_22193843 chr16 90164453 90164493 AAAACAAACTCAGGACTTTGTGAGCATCCATTATAGCTCA 0.375 0 -48.31 -311.1 -0.847 41.06 -2.733 +candidate_21834136 chr16 90170058 90170098 AAAACAAAACGGAGGAATAAATAGCCGCTGTCTCATAGCA 0.4 0 -49.874 -315.3 -0.856 42.48 -1.179 +candidate_22279207 chr16 90183096 90183136 AAAACAAAGCCCATTATCTTACACAGAGCAGTGCTGAGGC 0.45 0 -51.432 -317.2 -0.857 44.35 -0.789 +candidate_21676743 chr16 90188443 90188483 AAAACAAAACAAAACAACAACAACAAACTCAGCTAGCTCC 0.35 480 -48.544 -316.7 -0.865 40.4 0.544 +candidate_21749831 chr16 90188448 90188488 AAAACAAAACAACAACAACAAACTCAGCTAGCTCCCATTA 0.35 12 -48.297 -312.7 -0.852 40.7 0.544 +candidate_22510637 chr16 90188453 90188493 AAAACAACAACAACAAACTCAGCTAGCTCCCATTAATAAG 0.35 0 -47.184 -312.3 -0.855 39.36 0.544 +candidate_21891758 chr16 90196260 90196300 AAAACAAAAGGACAAAGATTGACAGCATCCAAGGAGGGAA 0.4 0 -49.661 -310.9 -0.842 42.92 -1.062 +candidate_22243294 chr16 91118707 91118747 AAAACAAAGAGAAGCAGCACTGGGAGACAAGGTCACCAAT 0.45 0 -51.772 -314.5 -0.847 45.24 -1.217 +candidate_22174961 chr16 91126021 91126061 AAAACAAACCTCCACAGAGCTTACTCAATTCTCTGAAGGA 0.4 0 -48.864 -310.6 -0.844 41.95 -3.04 +candidate_22534710 chr16 91136208 91136248 AAAACAACAAGACTATAGGGGACATCTCATTCAAACACTA 0.35 2 -46.426 -307.2 -0.841 39.16 0.814 +candidate_22238881 chr16 91149318 91149358 AAAACAAAGACCCAGAGAAGTTAAGTCATGCAAGGGTATA 0.375 0 -47.688 -308.4 -0.841 40.69 -1.642 +candidate_21814235 chr16 91158849 91158889 AAAACAAAACCACTGACTCACCAAGATAGACTTGGGTGGA 0.425 14 -50.061 -311.3 -0.842 43.47 -4.895 +candidate_21956780 chr16 91182411 91182451 AAAACAAAATGAAGCCAGCTTTGAACACACTGTGTTGGCA 0.4 0 -51.419 -317.9 -0.859 44.02 -2.782 +candidate_21951625 chr16 91185437 91185477 AAAACAAAATCTCAACCAAATCCTAGCCTACTGCCTTTTA 0.35 1 -47.285 -308.4 -0.842 40.07 -0.316 +candidate_22556004 chr16 91190766 91190806 AAAACAACACCGTGGCCCAGCTAATTAGAACACACACTTC 0.45 0 -51.737 -318.9 -0.861 44.46 0.071 +candidate_21897548 chr16 91199660 91199700 AAAACAAAAGGCCACTCTCTCCCCTTCTCCAGCTTCTTTT 0.45 0 -51.291 -311.6 -0.839 45.11 -0.542 +candidate_22279494 chr16 92122139 92122179 AAAACAAAGCCCCTGACTAATGAATTAAAGAGGAATGCAG 0.375 1 -47.931 -311.0 -0.848 40.6 0.161 +candidate_21880075 chr16 92131398 92131438 AAAACAAAAGCAAGCAAACAACATCATCACCATCATCACC 0.375 75 -49.454 -316.4 -0.861 41.68 2.074 +candidate_22168403 chr16 92162192 92162232 AAAACAAACCCCAGATGCATGCCCATAGGTCAATCAGATT 0.425 5 -50.591 -310.9 -0.839 44.22 0.004 +candidate_22513714 chr16 92173690 92173730 AAAACAACAACAACAACAAAACCCCAAGTCCCCAGCACCA 0.45 148 -52.779 -315.6 -0.847 46.34 0.624 +candidate_22175427 chr16 92181887 92181927 AAAACAAACCTCTCATCAGGATGGAAAAGTACCAACCTGT 0.4 46 -49.036 -309.5 -0.84 42.34 -3.853 +candidate_22308271 chr16 93102076 93102116 AAAACAAAGGTGAGCAGGCTAATTCGGTGCCTGGAGCCAA 0.5 0 -54.369 -318.4 -0.851 48.11 -4.151 +candidate_22203018 chr16 93137335 93137375 AAAACAAACTGTGTACCAGCCCAGACCCTGCTGTGGAACC 0.525 0 -54.307 -318.4 -0.851 48.13 -2.521 +candidate_22267784 chr16 93148087 93148127 AAAACAAAGCAAGGCAAGGTCAAGAGGTAGCCTGGGAGAG 0.5 0 -52.876 -316.1 -0.849 46.59 -2.292 +candidate_22317162 chr16 93153957 93153997 AAAACAAAGTATGAAGGAGAAATGTTGGTGAGGGTTGCAT 0.375 0 -48.733 -310.5 -0.844 41.69 -0.516 +candidate_22373867 chr16 93179825 93179865 AAAACAAATATCATTGCCTTGTAGGGCAGCTTCAGGTTCG 0.425 0 -50.608 -316.5 -0.857 43.32 -2.418 +candidate_22518786 chr16 94100674 94100714 AAAACAACAACAACAACAACAACAACCATGTTCTGCATCC 0.375 666 -49.844 -318.0 -0.865 41.92 -1.222 +candidate_22406780 chr16 94123970 94124010 AAAACAAATGAAGAAATGCCCGGCCTTGGGGACAGAAGCC 0.5 0 -53.99 -318.3 -0.852 47.64 -1.882 +candidate_22519056 chr16 94128515 94128555 AAAACAACAACAACAACAACAACATCATTACTGTGGGCCC 0.4 251 -50.305 -316.6 -0.859 42.82 0.471 +candidate_22516171 chr16 94158568 94158608 AAAACAACAACAACAACAACAAAATACTGGTCCTCTCCTC 0.375 144 -48.36 -313.6 -0.855 40.74 0.344 +candidate_22420280 chr16 94159288 94159328 AAAACAAATGCTTCCTCCCTTAAGTTGCACAGCCTAGGAA 0.425 2 -50.595 -312.3 -0.844 43.99 -0.442 +candidate_21846752 chr16 94180536 94180576 AAAACAAAACTGCATGTCATCCAGAGGCCAGAGAGCCTAG 0.475 0 -51.883 -316.1 -0.852 45.21 -2.782 +candidate_22237073 chr16 95114060 95114100 AAAACAAAGACATCATGAAATTTGCAGGCAATGGACAGAA 0.35 1007 -48.645 -312.8 -0.852 41.12 -0.312 +candidate_22070025 chr16 95161906 95161946 AAAACAAACAAACAAACAGGAGCACAGTCATAATATTCCC 0.35 14 -47.425 -312.2 -0.854 39.68 0.491 +candidate_21893541 chr16 96106024 96106064 AAAACAAAAGGATACTTATGGGCTGGGGAGATGGCTCATT 0.425 249 -49.897 -308.5 -0.834 43.72 -3.226 +candidate_21868748 chr16 96107225 96107265 AAAACAAAAGACCAGGGATGGTGGCATAGCTCAGTAAAGG 0.45 3 -50.72 -313.2 -0.846 44.1 -3.572 +candidate_22519965 chr16 96109738 96109778 AAAACAACAACAACAACAAGAAGCTACTGATTATGGTGGC 0.375 19 -48.826 -315.4 -0.859 41.05 -0.381 +candidate_22490642 chr16 96113584 96113624 AAAACAACAAAGCTTCATCCAGCATCCACAGCACCAGCAC 0.475 0 -53.503 -321.1 -0.863 46.43 -1.825 +candidate_22337724 chr16 96115203 96115243 AAAACAAATAAAACACACATCTCGAAACTCCAATGGCGGG 0.4 1 -50.103 -317.7 -0.863 42.39 0.554 +candidate_22264711 chr16 96115374 96115414 AAAACAAAGCAAAGCAAAATCAGCAGACAGTCTGTTTCCC 0.4 5 -50.413 -317.7 -0.862 42.78 -1.179 +candidate_22133726 chr16 96130849 96130889 AAAACAAACAGCAGTGGCTACCACACAGTCATAGACCTGA 0.45 4 -51.448 -315.2 -0.85 44.7 -2.202 +candidate_21785278 chr16 96178155 96178195 AAAACAAAACAGAAGGCCACAAGGAAAAGGCTAACAGCCT 0.425 0 -51.296 -313.9 -0.847 44.62 -3.911 +candidate_21883244 chr16 96178942 96178982 AAAACAAAAGCATGCTTTGGCTTATGGTTGTTGGCATTAA 0.35 1 -49.249 -313.9 -0.853 41.71 -2.546 +candidate_22483415 chr16 96191713 96191753 AAAACAACAAAATCTTAAAGCACTCATAGTGAGGTGGGTT 0.35 0 -47.606 -309.9 -0.846 40.25 -1.909 +candidate_22556001 chr16 97101262 97101302 AAAACAACACCGTGACACTCTTGCCTCACATTCTACAAAC 0.425 0 -50.796 -319.2 -0.865 43.13 -0.822 +candidate_21902275 chr16 97126580 97126620 AAAACAAAAGGTTTTACTATTGTTCACGGGGATGGATGGA 0.375 0 -48.437 -309.8 -0.843 41.43 -1.988 +candidate_22200544 chr16 97127845 97127885 AAAACAAACTGCTGAACTACCCAATAAGATCCTGCCACCA 0.425 0 -50.457 -312.1 -0.844 43.85 0.584 +candidate_21823349 chr16 97153091 97153131 AAAACAAAACCCCTAAGACTCCCCAGCTGTGCCCATATTA 0.45 0 -50.849 -309.7 -0.835 44.86 0.584 +candidate_22491482 chr16 97160493 97160533 AAAACAACAAAGTGCTGATCAAAAGCAGAAACACGGGGTC 0.425 0 -51.489 -319.8 -0.865 43.9 -0.929 +candidate_22300923 chr16 97165790 97165830 AAAACAAAGGCTGCAGACCATCTCTGACCTGCCAAACCCT 0.5 0 -53.878 -315.8 -0.844 47.94 -2.142 +candidate_22481196 chr16 97166331 97166371 AAAACAACAAAAGACATACATACACTCCCATTTCCCACAG 0.375 1 -47.904 -311.5 -0.85 40.49 1.684 +candidate_22242413 chr16 97176240 97176280 AAAACAAAGAGAAAATGAAGAAGAGGGAGGGAGGGAGGAA 0.425 678 -49.272 -307.1 -0.831 43.14 0.484 diff --git a/test_data/test.hush.fa b/test_data/test.hush.fa new file mode 100644 index 00000000..92d9d961 --- /dev/null +++ b/test_data/test.hush.fa @@ -0,0 +1,1000 @@ +>candidate_21654043 pos=16:11114621-11114661 +AAAACAAAACAAAACAAAACACTGCCCTCATCTCAAGTCC, 71 +>candidate_21658299 pos=16:22131287-22131327 +AAAACAAAACAAAACAAAACCCCAGCCAACCAAGCCTCAC, 383 +>candidate_21666318 pos=16:31196747-31196787 +AAAACAAAACAAAACAAACAAAAGTATCACCCTATCGCCC, 50 +>candidate_21670946 pos=16:68188874-68188914 +AAAACAAAACAAAACAAACCGAAAGTACCTGGACATACGA, 50 +>candidate_21676743 pos=16:90188443-90188483 +AAAACAAAACAAAACAACAACAACAAACTCAGCTAGCTCC, 480 +>candidate_21685155 pos=16:14129896-14129936 +AAAACAAAACAAAACACCATGAGGCCTTAGGCATGGGTTC, 2 +>candidate_21686495 pos=16:11114626-11114666 +AAAACAAAACAAAACACTGCCCTCATCTCAAGTCCCCAAA, 4 +>candidate_21686514 pos=16:81179833-81179873 +AAAACAAAACAAAACACTGGAAGCTTCTAAGTGACAGAGG, 1 +>candidate_21686674 pos=16:9163163-9163203 +AAAACAAAACAAAACACTTGAGGCAGGGAGATAGCTTAGT, 10 +>candidate_21687718 pos=16:70191486-70191526 +AAAACAAAACAAAACAGAACCGCACAGTGGAGGAGCAATA, 17 +>candidate_21696099 pos=16:22131292-22131332 +AAAACAAAACAAAACCCCAGCCAACCAAGCCTCACAGCCC, 11 +>candidate_21696605 pos=16:76195412-76195452 +AAAACAAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTC, 2 +>candidate_21696680 pos=16:23161159-23161199 +AAAACAAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGA, 4 +>candidate_21696763 pos=16:33141995-33142035 +AAAACAAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGG, 1 +>candidate_21696985 pos=16:15154698-15154738 +AAAACAAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAA, 0 +>candidate_21698710 pos=16:73144761-73144801 +AAAACAAAACAAAACGGCAAATCCTAACTATGGAGTGGAT, 3 +>candidate_21699937 pos=16:90136408-90136448 +AAAACAAAACAAAACTCAATTAGCCACAGAGCACCAAGAG, 3 +>candidate_21700882 pos=16:43126383-43126423 +AAAACAAAACAAAACTGCTTAACACCTTGCCAGGCGCATG, 0 +>candidate_21704015 pos=16:47181492-47181532 +AAAACAAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGA, 4 +>candidate_21712832 pos=16:20146964-20147004 +AAAACAAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGT, 1 +>candidate_21717478 pos=16:31196752-31196792 +AAAACAAAACAAACAAAAGTATCACCCTATCGCCCTAGGT, 1 +>candidate_21732049 pos=16:68188879-68188919 +AAAACAAAACAAACCGAAAGTACCTGGACATACGAACCTT, 0 +>candidate_21732995 pos=16:48174889-48174929 +AAAACAAAACAAACTCAAGATTCTGCTTGAGTGACAGGGC, 0 +>candidate_21734070 pos=16:6153316-6153356 +AAAACAAAACAAAGAAACTCCATCTTTGGGTCTAGTCATG, 2 +>candidate_21734516 pos=16:85140354-85140394 +AAAACAAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGA, 276 +>candidate_21735207 pos=16:5178254-5178294 +AAAACAAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCA, 10 +>candidate_21738820 pos=16:11141085-11141125 +AAAACAAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAG, 1201 +>candidate_21748103 pos=16:45181671-45181711 +AAAACAAAACAACAACAAAACCCACACAATGGATGTGATG, 26 +>candidate_21749831 pos=16:90188448-90188488 +AAAACAAAACAACAACAACAAACTCAGCTAGCTCCCATTA, 12 +>candidate_21753987 pos=16:27162495-27162535 +AAAACAAAACAACAGAAAGCTCACATACACGTGGAAGCCG, 1097 +>candidate_21755149 pos=16:30168215-30168255 +AAAACAAAACAACCAAACAACAAGGTGTCTCTTTGCCCTA, 5 +>candidate_21756048 pos=16:16119405-16119445 +AAAACAAAACAACCCAACCATGAACATAGACTCAGACCCT, 2 +>candidate_21758248 pos=16:33187988-33188028 +AAAACAAAACAACTCGTGGTCTCCTTTTCTTGGCTTCTCC, 1 +>candidate_21759100 pos=16:36139573-36139613 +AAAACAAAACAAGAAAACCCCATGCTTCAGATAGCTAGGC, 4 +>candidate_21759804 pos=16:50168025-50168065 +AAAACAAAACAAGAACAACTTCCTGCACATCTTTGCTCTC, 1 +>candidate_21761043 pos=16:9183788-9183828 +AAAACAAAACAAGACAAGACAAGACAGGACAGGACAGGAC, 1094 +>candidate_21774421 pos=16:82180535-82180575 +AAAACAAAACACAGACTCTCCCTCTCCCAGTAGCCATCAT, 17 +>candidate_21775575 pos=16:4115534-4115574 +AAAACAAAACACATTCCCAGGCTGGATTTGGCTCTTGGCC, 0 +>candidate_21777113 pos=16:14129901-14129941 +AAAACAAAACACCATGAGGCCTTAGGCATGGGTTCACTGG, 0 +>candidate_21778714 pos=16:50167929-50167969 +AAAACAAAACACCTCCCTAGGGCTAGTGCTCTAGCTAAGT, 0 +>candidate_21778745 pos=16:85151414-85151454 +AAAACAAAACACCTCTCCTAGACCAGAGACTAGGTGGTGC, 0 +>candidate_21779002 pos=16:16185138-16185178 +AAAACAAAACACCTTCCTCTCAACACCTCATGGTACCTTC, 1380 +>candidate_21780635 pos=16:11114631-11114671 +AAAACAAAACACTGCCCTCATCTCAAGTCCCCAAACAACT, 0 +>candidate_21780699 pos=16:81179838-81179878 +AAAACAAAACACTGGAAGCTTCTAAGTGACAGAGGATACA, 0 +>candidate_21781230 pos=16:9163168-9163208 +AAAACAAAACACTTGAGGCAGGGAGATAGCTTAGTTGGTA, 13 +>candidate_21784795 pos=16:70191491-70191531 +AAAACAAAACAGAACCGCACAGTGGAGGAGCAATACCATT, 2 +>candidate_21785278 pos=16:96178155-96178195 +AAAACAAAACAGAAGGCCACAAGGAAAAGGCTAACAGCCT, 0 +>candidate_21785540 pos=16:88192867-88192907 +AAAACAAAACAGAATAGCAGTTAGGCGGTAGGAGGGAGAA, 1 +>candidate_21790463 pos=16:73187251-73187291 +AAAACAAAACAGGAAGGGAATGACTGGAGCCATTCAAGAC, 0 +>candidate_21791592 pos=16:61181111-61181151 +AAAACAAAACAGGGAGGAGATGCCTTGGGTCCTGGAAATG, 0 +>candidate_21792153 pos=16:20134652-20134692 +AAAACAAAACAGGTCCTTAGAGGCAAGAACTACTGTAGAG, 5 +>candidate_21792914 pos=16:22154266-22154306 +AAAACAAAACAGTATAAGTAGCAGCCAAACAAAACCACCA, 3 +>candidate_21793507 pos=16:11160012-11160052 +AAAACAAAACAGTGCCAGTGCACTGGTGCACGACTTTAGT, 0 +>candidate_21795805 pos=16:14150563-14150603 +AAAACAAAACATACAATCTAAGTGAGTCCAAGTCTCTGAC, 0 +>candidate_21797204 pos=16:6123369-6123409 +AAAACAAAACATCACAGAACCTGGCAGATGGCTTCCTATG, 0 +>candidate_21798346 pos=16:83195310-83195350 +AAAACAAAACATGAAATATGGTGACCAGAGTAAAGGGGAG, 0 +>candidate_21806808 pos=16:36186937-36186977 +AAAACAAAACCAAACAAAACCAACAGAAATCCACTGGGTC, 147 +>candidate_21808115 pos=16:44115256-44115296 +AAAACAAAACCAAACCCTATACATAGCCAGATGGTATGAA, 0 +>candidate_21808347 pos=16:39121119-39121159 +AAAACAAAACCAAACTTCCAGCTGTTCAAGTCGTCTTGTG, 1 +>candidate_21814235 pos=16:91158849-91158889 +AAAACAAAACCACTGACTCACCAAGATAGACTTGGGTGGA, 14 +>candidate_21814624 pos=16:18106422-18106462 +AAAACAAAACCAGAAAGAAGCCACATAGAATGTTGGGCAT, 0 +>candidate_21815172 pos=16:53106595-53106635 +AAAACAAAACCAGAGATTATTCAGTTGTCTAATGGGAACC, 0 +>candidate_21815808 pos=16:22192173-22192213 +AAAACAAAACCAGGACAGTGTGTTACCTCCAAACATTAGC, 1 +>candidate_21817435 pos=16:6147636-6147676 +AAAACAAAACCATGCAGCGGATGGATTCTGGGGAATGACA, 1 +>candidate_21822694 pos=16:22131297-22131337 +AAAACAAAACCCCAGCCAACCAAGCCTCACAGCCCTCTTT, 0 +>candidate_21822783 pos=16:41170402-41170442 +AAAACAAAACCCCATAGGTTTAAATAGCATTGTTGGGGTT, 0 +>candidate_21823349 pos=16:97153091-97153131 +AAAACAAAACCCCTAAGACTCCCCAGCTGTGCCCATATTA, 0 +>candidate_21823586 pos=16:6111442-6111482 +AAAACAAAACCCCTTAAATTGGAGTGCACCCCTTCACGGG, 0 +>candidate_21824607 pos=16:76195417-76195457 +AAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTCCTGGT, 0 +>candidate_21824874 pos=16:23161164-23161204 +AAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGATTGGA, 0 +>candidate_21825189 pos=16:33142000-33142040 +AAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGGAGTCA, 23 +>candidate_21826337 pos=16:15154703-15154743 +AAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAAGAAAT, 0 +>candidate_21829358 pos=16:38192572-38192612 +AAAACAAAACCTGGCTAATTTAGTACAGTGCTTTGTCCTC, 0 +>candidate_21833371 pos=16:69120689-69120729 +AAAACAAAACGATGTAGTGTATCTCAGGGTAGACATGGTA, 0 +>candidate_21834136 pos=16:90170058-90170098 +AAAACAAAACGGAGGAATAAATAGCCGCTGTCTCATAGCA, 0 +>candidate_21834208 pos=16:73144766-73144806 +AAAACAAAACGGCAAATCCTAACTATGGAGTGGATCCTTT, 0 +>candidate_21834785 pos=16:27141570-27141610 +AAAACAAAACGTATGAACCCAGAATGAGTAGACAACAGGA, 25 +>candidate_21838028 pos=16:4109470-4109510 +AAAACAAAACTAATCCCCAACTCTCTTTCCCTGATCAAAT, 0 +>candidate_21838265 pos=16:70179074-70179114 +AAAACAAAACTACAAAATCATGCCGAGGAAAGACAGTGAA, 1 +>candidate_21838416 pos=16:31102444-31102484 +AAAACAAAACTACACAACACGGAAGATATTCTCTGTAGTG, 1 +>candidate_21839431 pos=16:24135799-24135839 +AAAACAAAACTAGAGGTTCACTGGGAGGACTAGCCAAGCT, 0 +>candidate_21841895 pos=16:90136413-90136453 +AAAACAAAACTCAATTAGCCACAGAGCACCAAGAGGACAC, 0 +>candidate_21842556 pos=16:68125708-68125748 +AAAACAAAACTCATCACAATTGTAAGCAGCCACTTGAGTT, 5 +>candidate_21842776 pos=16:14112129-14112169 +AAAACAAAACTCCAAACCCAAACAACCAAAGCACCAAAGG, 64 +>candidate_21844822 pos=16:40101009-40101049 +AAAACAAAACTCTTGTGACAACACACATGAAGTATCCACA, 0 +>candidate_21846752 pos=16:94180536-94180576 +AAAACAAAACTGCATGTCATCCAGAGGCCAGAGAGCCTAG, 0 +>candidate_21847087 pos=16:43126388-43126428 +AAAACAAAACTGCTTAACACCTTGCCAGGCGCATGGATCC, 1 +>candidate_21848800 pos=16:84137050-84137090 +AAAACAAAACTGTGATGTATAGTTGTGAAAGGGGACAGCT, 0 +>candidate_21849939 pos=16:90133192-90133232 +AAAACAAAACTTACCATAGCTAGAGTGATTCACAAACCCC, 0 +>candidate_21851787 pos=16:14185388-14185428 +AAAACAAAACTTGGTTATGTGTTCCAGACAGAAGAGAACT, 0 +>candidate_21852077 pos=16:32162767-32162807 +AAAACAAAACTTTAAAAGGGTGGGAGGCAGAAGAGAACCC, 0 +>candidate_21852860 pos=16:63108540-63108580 +AAAACAAAACTTTGGTGGCTGGTAATGTAGATCAATGTTG, 1 +>candidate_21856056 pos=16:17181427-17181467 +AAAACAAAAGAAAACACAGAAGTAGCCCATCTCTTTGAGA, 3 +>candidate_21858474 pos=16:22172199-22172239 +AAAACAAAAGAAACTGGAGGATGATGGAGCAATGCCTTTA, 2 +>candidate_21858525 pos=16:29165094-29165134 +AAAACAAAAGAAACTTTCAATGCAAGCCAGATGACCTGAT, 0 +>candidate_21859959 pos=16:50118068-50118108 +AAAACAAAAGAAATATCCAGTGGCCAAAACCAGAACCAGG, 1 +>candidate_21863612 pos=16:17180243-17180283 +AAAACAAAAGAAGTGAAGGCAGATCTTTGTGAGTTGAAGG, 3 +>candidate_21864202 pos=16:84196585-84196625 +AAAACAAAAGAATACACTGTCTTCTCAGTACCAAAAGGTG, 1010 +>candidate_21864435 pos=16:8132196-8132236 +AAAACAAAAGAATATAACTTCTCAGCACCTCATGGAACCT, 753 +>candidate_21866061 pos=16:42197679-42197719 +AAAACAAAAGAATGGAGAGACTGCAAACATACTCCACTTT, 0 +>candidate_21866445 pos=16:80127300-80127340 +AAAACAAAAGAATTCCATTCCTAATCATTCCCCAAAGGCT, 1 +>candidate_21868748 pos=16:96107225-96107265 +AAAACAAAAGACCAGGGATGGTGGCATAGCTCAGTAAAGG, 3 +>candidate_21868751 pos=16:44165904-44165944 +AAAACAAAAGACCAGGTGACCAGCAATGTGATTAGAAAAG, 0 +>candidate_21871569 pos=16:24108671-24108711 +AAAACAAAAGAGCACTCCTTGCTCAGGTATTTACCTGTTG, 0 +>candidate_21872058 pos=16:17195497-17195537 +AAAACAAAAGAGGAAGAAAGGAAGCCAGCAAGCAAGTCAG, 488 +>candidate_21872220 pos=16:14180132-14180172 +AAAACAAAAGAGGATAGTGGAAGAGTGTAGGGGACAGAAA, 1 +>candidate_21872467 pos=16:47181497-47181537 +AAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGAAAAGA, 11 +>candidate_21872626 pos=16:43122088-43122128 +AAAACAAAAGAGGTGAAAAGAAGTCTGCAGTCTAGCTGCC, 0 +>candidate_21874668 pos=16:6176861-6176901 +AAAACAAAAGATCTGCTAACATCCTCCCCTCCCCTCCCCT, 0 +>candidate_21875152 pos=16:18106130-18106170 +AAAACAAAAGATGGAGGAGGAGGAGGAGGAGGAGGAGGAG, 5371 +>candidate_21875178 pos=16:44178494-44178534 +AAAACAAAAGATGGCATCCCGTGACAGGTACCAGTTCTAT, 0 +>candidate_21875790 pos=16:78106632-78106672 +AAAACAAAAGATTCCAAAATAGGCCAAGCAGGTGCAACCA, 2 +>candidate_21875941 pos=16:66143845-66143885 +AAAACAAAAGATTGGAAATCCACAGTAATCCATGCCAGTA, 0 +>candidate_21875958 pos=16:43193506-43193546 +AAAACAAAAGATTGGGCTGCACTGTGTTCCTGTAAGTGGG, 0 +>candidate_21877901 pos=16:35139947-35139987 +AAAACAAAAGCAAAAGCAAAGCACGATGCTAATGTGAGAA, 1 +>candidate_21880075 pos=16:92131398-92131438 +AAAACAAAAGCAAGCAAACAACATCATCACCATCATCACC, 75 +>candidate_21880288 pos=16:68164199-68164239 +AAAACAAAAGCAAGGCTGTTGAACACCTAAGCCAACAGTA, 1 +>candidate_21881395 pos=16:39190074-39190114 +AAAACAAAAGCACTCTAAGCAGCTTAGGGAGGAAAGGAGT, 8 +>candidate_21882598 pos=16:20162935-20162975 +AAAACAAAAGCATAAAACCTCAGTCCTGTCATAGCCCATA, 0 +>candidate_21883244 pos=16:96178942-96178982 +AAAACAAAAGCATGCTTTGGCTTATGGTTGTTGGCATTAA, 1 +>candidate_21883970 pos=16:33164535-33164575 +AAAACAAAAGCCAACCTAAGGGTTGGAGAGATGGTCCAGT, 54 +>candidate_21884557 pos=16:65100610-65100650 +AAAACAAAAGCCAGCCCTGTTTCCCTGATCCTCAGTTTCC, 2 +>candidate_21884633 pos=16:5196409-5196449 +AAAACAAAAGCCAGGCATGATGGTACGTTGGAAGTTGGAG, 1 +>candidate_21884867 pos=16:73131946-73131986 +AAAACAAAAGCCATCGTCTTAAGGGTATTATGTGGAAATG, 0 +>candidate_21885172 pos=16:29179333-29179373 +AAAACAAAAGCCCACCTAGACCATCATCTACCATTTGTGT, 0 +>candidate_21887125 pos=16:51197616-51197656 +AAAACAAAAGCTACATGGCCGATGCTCTCTTCACATGTAG, 0 +>candidate_21888142 pos=16:57184506-57184546 +AAAACAAAAGCTGCAATAGGAGACTCTCTGCCAAGACTAA, 0 +>candidate_21888583 pos=16:8147690-8147730 +AAAACAAAAGCTGTGTGACATACTGTGGCCCACTGCAGCT, 13 +>candidate_21890845 pos=16:61173693-61173733 +AAAACAAAAGGAAGAAACACAAAACCTGTGGAGTTCATGT, 2 +>candidate_21890879 pos=16:12137774-12137814 +AAAACAAAAGGAAGAAGATTGATAGTGAGAGAGGAGTCTG, 0 +>candidate_21891758 pos=16:90196260-90196300 +AAAACAAAAGGACAAAGATTGACAGCATCCAAGGAGGGAA, 0 +>candidate_21892971 pos=16:25169626-25169666 +AAAACAAAAGGAGGAGGAAGAGAATTAAGAAATTGACAGG, 7 +>candidate_21893541 pos=16:96106024-96106064 +AAAACAAAAGGATACTTATGGGCTGGGGAGATGGCTCATT, 249 +>candidate_21894666 pos=16:19131189-19131229 +AAAACAAAAGGATATACCTTCTTCTCAGCACCTCATCCTA, 1029 +>candidate_21896771 pos=16:4154836-4154876 +AAAACAAAAGGCAACTTACCATATTTGGCACAGTGGTGAC, 0 +>candidate_21897548 pos=16:91199660-91199700 +AAAACAAAAGGCCACTCTCTCCCCTTCTCCAGCTTCTTTT, 0 +>candidate_21898022 pos=16:5142581-5142621 +AAAACAAAAGGCTAGCCTTGGATGTATAGCAAGACTGTCT, 2 +>candidate_21902275 pos=16:97126580-97126620 +AAAACAAAAGGTTTTACTATTGTTCACGGGGATGGATGGA, 0 +>candidate_21904481 pos=16:51138374-51138414 +AAAACAAAAGTAGGAAAGCATTTCATTGTGGAAGCTCTAG, 28 +>candidate_21904608 pos=16:11192920-11192960 +AAAACAAAAGTAGTCAGGTGAGATGTGAAATACCAACAGT, 0 +>candidate_21909049 pos=16:17189854-17189894 +AAAACAAAAGTGGTGAGGAAAGATGGCTCAACAGTTAAAA, 123 +>candidate_21909100 pos=16:22147477-22147517 +AAAACAAAAGTGTAAAGTGCTTGCCAGACACAGAGACTCA, 0 +>candidate_21911224 pos=16:21183507-21183547 +AAAACAAAAGTTGGTACCAGAAGTAGAGTATTGCTGTGAT, 617 +>candidate_21915805 pos=16:6147626-6147666 +AAAACAAAATAAAACAAAACCATGCAGCGGATGGATTCTG, 12 +>candidate_21920282 pos=16:32187546-32187586 +AAAACAAAATAAACAGAAAAGCAAGCATTCCACAAAGCCC, 8 +>candidate_21924434 pos=16:72152772-72152812 +AAAACAAAATAACCAGTACTTGTGACTTCCTGGCTTCCAT, 0 +>candidate_21925638 pos=16:24143294-24143334 +AAAACAAAATAAGATGGTGGTTTGCCTTAATGACAGGAAG, 0 +>candidate_21939090 pos=16:28155420-28155460 +AAAACAAAATATGCTCAGTGCAAACCTCAAGGGCAGGTCA, 0 +>candidate_21943614 pos=16:78146038-78146078 +AAAACAAAATCAAGACTACAGCAGGAAAATGGGTGGAGGT, 2 +>candidate_21945865 pos=16:28149023-28149063 +AAAACAAAATCAGGGGTGCTTTAATATCATGGTTGCAATC, 0 +>candidate_21951625 pos=16:91185437-91185477 +AAAACAAAATCTCAACCAAATCCTAGCCTACTGCCTTTTA, 1 +>candidate_21951703 pos=16:54143955-54143995 +AAAACAAAATCTCACAGCAAACCTGTCCTTCTCTTCTGAC, 0 +>candidate_21951872 pos=16:10129152-10129192 +AAAACAAAATCTCATGCAACCAAGTCAGGCCTCCAGCTGG, 2 +>candidate_21955055 pos=16:28167909-28167949 +AAAACAAAATGAAACAAAACTCCGGTATCTTTCCTGTCTC, 4 +>candidate_21956780 pos=16:91182411-91182451 +AAAACAAAATGAAGCCAGCTTTGAACACACTGTGTTGGCA, 0 +>candidate_21958297 pos=16:50115922-50115962 +AAAACAAAATGAGAAAGGCGTGGTTGAGCTAGCCTCCATA, 1 +>candidate_21959123 pos=16:17100947-17100987 +AAAACAAAATGAGTGTGTCTAACACTAGTAGAAAGCCCCA, 0 +>candidate_21961679 pos=16:83169237-83169277 +AAAACAAAATGCCTTCTATCCACCTTCAGAAGACTTCAGT, 0 +>candidate_21961983 pos=16:80154036-80154076 +AAAACAAAATGCTCACAGAGGTGAAGGTGATCTACACAAA, 0 +>candidate_21966751 pos=16:37129884-37129924 +AAAACAAAATGTCCGTGCTATTCTCATGTCTGTCAGTGGC, 0 +>candidate_21967395 pos=16:58168778-58168818 +AAAACAAAATGTGCCTTAGCACAGTGGGCAATTTAGTATA, 0 +>candidate_21968283 pos=16:18109528-18109568 +AAAACAAAATGTTCCTCTGGTTTTCCAACAGGCTGTGGGG, 0 +>candidate_21972372 pos=16:48194702-48194742 +AAAACAAAATTAGAGACAAGGACATGAGGTAAAATGGCCA, 1 +>candidate_21973007 pos=16:47167787-47167827 +AAAACAAAATTATAACACTGGGTCCTTATCCTGTGCTGCT, 0 +>candidate_21978114 pos=16:63152879-63152919 +AAAACAAAATTGAGGGACTCCAGAATACAGAAAGAGCTGC, 0 +>candidate_21979257 pos=16:20146969-20147009 +AAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGTTGTAA, 1 +>candidate_21979283 pos=16:75142524-75142564 +AAAACAAAATTGTACAGAAAGGAACTACTCAGAGCCATGC, 2 +>candidate_21982381 pos=16:41132040-41132080 +AAAACAAAATTTCTACCCACTACTCCCTGCAGTGACAGTT, 0 +>candidate_21982954 pos=16:86199584-86199624 +AAAACAAAATTTGCAAGCATCTGGAATGGCTGGTAAGTGC, 0 +>candidate_21983199 pos=16:19155514-19155554 +AAAACAAAATTTGGGTGGGAGGTGGGAAAGTTCTGGGAGA, 0 +>candidate_22007903 pos=16:87129728-87129768 +AAAACAAACAAAACACTCAGTTCATCGGGTAAAGTCTAGG, 0 +>candidate_22008965 pos=16:85166641-85166681 +AAAACAAACAAAACCAGAAACCAAACCCCTTTTACCTGTG, 4 +>candidate_22009936 pos=16:13198354-13198394 +AAAACAAACAAAACGGGCCAAGCAGAAACCTATCTGTAGC, 0 +>candidate_22012273 pos=16:31196757-31196797 +AAAACAAACAAAAGTATCACCCTATCGCCCTAGGTAGCCT, 0 +>candidate_22067700 pos=16:79178510-79178550 +AAAACAAACAAACAAACAACCTGTCTGCCTCTTCCCTCAA, 14 +>candidate_22070025 pos=16:95161906-95161946 +AAAACAAACAAACAAACAGGAGCACAGTCATAATATTCCC, 14 +>candidate_22070415 pos=16:60163443-60163483 +AAAACAAACAAACAAACATGGTCAGAATGCAGAGTTATGG, 4 +>candidate_22072895 pos=16:11187568-11187608 +AAAACAAACAAACAAAGATGAGCCTTTGAAGCCCTAGAAC, 2 +>candidate_22077731 pos=16:67178091-67178131 +AAAACAAACAAACAAGAACAACAAAATCCCAGCCAGATGG, 91 +>candidate_22077881 pos=16:15134201-15134241 +AAAACAAACAAACAAGACCTAAAACTGTCCTGTAACAGTG, 4 +>candidate_22080165 pos=16:12188710-12188750 +AAAACAAACAAACACAAAGCCTATCCATCCCCATGGGTCT, 2 +>candidate_22080497 pos=16:32111082-32111122 +AAAACAAACAAACACACACCAACCAGAAGCAGAATGTTTA, 21 +>candidate_22080830 pos=16:64121803-64121843 +AAAACAAACAAACACCATAAGAAGAGCCAGCCAGAATAGT, 0 +>candidate_22082335 pos=16:50179734-50179774 +AAAACAAACAAACAGCATGGTGACACATGTTTGTAGTCCC, 4 +>candidate_22082778 pos=16:25112695-25112735 +AAAACAAACAAACAGTCGAACAAACAAACCCCAATCATAC, 1066 +>candidate_22083540 pos=16:30140025-30140065 +AAAACAAACAAACATGGCCAAGTCTATCGTAGAAAATGCC, 0 +>candidate_22088458 pos=16:78160661-78160701 +AAAACAAACAAAGAAAAGAAACTGGCAAGGATGCAGGGAA, 21 +>candidate_22089455 pos=16:26154863-26154903 +AAAACAAACAAAGACACAGACAAACAGACAGAGAGACTGA, 1265 +>candidate_22090997 pos=16:51143275-51143315 +AAAACAAACAAAGTTAGTAAGGCACTTGTCAATTCCCATG, 0 +>candidate_22097738 pos=16:48156249-48156289 +AAAACAAACAACAAAAGAGAGAGCTGAAAGGGACTGTACA, 2 +>candidate_22102208 pos=16:28116722-28116762 +AAAACAAACAACATACACTTGATATTGTCAAGCAAGGCCG, 0 +>candidate_22107943 pos=16:17193782-17193822 +AAAACAAACAAGCAAACAAAACAACAACATCAGCACTGGC, 491 +>candidate_22108944 pos=16:90137828-90137868 +AAAACAAACAAGCAAAGACAACCCACAGGGCTGGTAATAC, 5 +>candidate_22111133 pos=16:17108267-17108307 +AAAACAAACAAGGAGCTGGAGAAATAGCTCAGAGGTTAAG, 1058 +>candidate_22111571 pos=16:76106687-76106727 +AAAACAAACAAGGTCATAGCTCAGGGCTGTTCTGCCCTAT, 0 +>candidate_22115072 pos=16:41106475-41106515 +AAAACAAACAATCTTAACTACTACCACTACCACCACCATC, 37 +>candidate_22117822 pos=16:45173818-45173858 +AAAACAAACACAAATCTTTATCTACCTCCCTGAGCAGCCA, 1 +>candidate_22120338 pos=16:5155136-5155176 +AAAACAAACACACTCAAGAAACTGTTCCACTCATGGAGAA, 0 +>candidate_22121522 pos=16:23101375-23101415 +AAAACAAACACATACAAACAACCAGTACAGTAGTGCCAGA, 1 +>candidate_22126700 pos=16:90130090-90130130 +AAAACAAACACTTCTTCCCTTTATTTGCTTTCTCCAGCAT, 10 +>candidate_22128391 pos=16:66105689-66105729 +AAAACAAACAGAAAGGAAAGATTCTGGAAGAGGCACAGGA, 6 +>candidate_22129434 pos=16:12190394-12190434 +AAAACAAACAGAAGGAAAAGAGCCAAGCGAAGGCATAAGA, 68 +>candidate_22132000 pos=16:75198974-75199014 +AAAACAAACAGAGTGTGACATGTGTCGATTTCAGACAAAA, 0 +>candidate_22133710 pos=16:87137068-87137108 +AAAACAAACAGCAGTATCCAGATCAGCTGCATCCCTCCCA, 0 +>candidate_22133726 pos=16:96130849-96130889 +AAAACAAACAGCAGTGGCTACCACACAGTCATAGACCTGA, 4 +>candidate_22134530 pos=16:13118550-13118590 +AAAACAAACAGCTAGAAGTCAGATTGGGGATCCAAGCTGG, 52 +>candidate_22134652 pos=16:57199201-57199241 +AAAACAAACAGCTCGAGAGAGCACTCCTCGTCCCCAGTGC, 0 +>candidate_22135831 pos=16:73178578-73178618 +AAAACAAACAGGATATTGAATGCCATGAAGGAGGCTGTTC, 0 +>candidate_22136880 pos=16:73124496-73124536 +AAAACAAACAGGCTTCTGGATAGAGGAAGAGGTGTGGAGA, 0 +>candidate_22137318 pos=16:66107612-66107652 +AAAACAAACAGGGTCAAGTTGGTTCAACACTTGTGTTTTA, 0 +>candidate_22138543 pos=16:10153026-10153066 +AAAACAAACAGTATGATGGTCTAAGTTGGGCCATAGACAC, 5 +>candidate_22139014 pos=16:66135997-66136037 +AAAACAAACAGTGCAACTTGAGATTCTATGCCAACAGAGA, 0 +>candidate_22139245 pos=16:30109118-30109158 +AAAACAAACAGTGTGCTTTGCAAGGATGCAGTCATACTTG, 0 +>candidate_22140417 pos=16:42198376-42198416 +AAAACAAACATAACAATGCAATGGAATCCAGCTTTGCTTC, 0 +>candidate_22142541 pos=16:83147797-83147837 +AAAACAAACATATCTAGGCAAGACTAACCAGTGGCCACAG, 0 +>candidate_22143830 pos=16:74196682-74196722 +AAAACAAACATCCCCAAAGGCTTTGATATCCCATTCAGCA, 0 +>candidate_22143879 pos=16:68111670-68111710 +AAAACAAACATCCGTGTTGACAGCCCACTATTTCACAGAA, 0 +>candidate_22144385 pos=16:46108727-46108767 +AAAACAAACATCTGTGCTCAGGGGCTGCTGTAAGTGGTTC, 0 +>candidate_22153094 pos=16:32194021-32194061 +AAAACAAACCAAACAAAAGGCAGCACTGGTTGCTCTTCCA, 25 +>candidate_22154498 pos=16:63139745-63139785 +AAAACAAACCAAAGGAGACAAGCTTAGAATGTAGTAGACA, 0 +>candidate_22155674 pos=16:34122313-34122353 +AAAACAAACCAACAATCGTAACTAGGAGGGAAAACGGCAG, 0 +>candidate_22155947 pos=16:44159950-44159990 +AAAACAAACCAACATCCTGCTTTCACATTGAAGGGCAGAG, 0 +>candidate_22156764 pos=16:29182366-29182406 +AAAACAAACCAACTCATCCTAACACAGGGTTTCCCCTTTT, 254 +>candidate_22157299 pos=16:50159646-50159686 +AAAACAAACCAAGCATCCATGGGTGGGGAGTGAGTAAGAA, 0 +>candidate_22158341 pos=16:50123922-50123962 +AAAACAAACCAATTAAGCAGGTGAATATTGGCTGGGCTGA, 0 +>candidate_22159085 pos=16:27143471-27143511 +AAAACAAACCACAGCAGAAAATAGAAGGGATGAAAAGAAG, 8 +>candidate_22160134 pos=16:88124329-88124369 +AAAACAAACCACTCTCACCCCAAGAAAGCAAGACACAAAA, 1 +>candidate_22161492 pos=16:90147842-90147882 +AAAACAAACCAGCAGGGTAACAGTCTTTAGCTAATTTGTG, 0 +>candidate_22162118 pos=16:44151172-44151212 +AAAACAAACCAGGGAGTTGCTTCTGGGGTCCAGCTTTGAG, 0 +>candidate_22162200 pos=16:11163816-11163856 +AAAACAAACCAGGGTCTCAAATAGCCCAGCTTGGCTATGA, 3 +>candidate_22163643 pos=16:57158167-57158207 +AAAACAAACCATCTGGCACAATTAACTGACTGTACTTATC, 0 +>candidate_22164411 pos=16:82101203-82101243 +AAAACAAACCATTGAAACACTGATGAACCAAATAGGGGAA, 1 +>candidate_22165988 pos=16:63157019-63157059 +AAAACAAACCCAATCAAGACCCCTAAATGGTAGCATTTCT, 13 +>candidate_22167297 pos=16:88195353-88195393 +AAAACAAACCCAGTGATTGGCATGGCTCGAAATGTTTTCT, 0 +>candidate_22167603 pos=16:49183383-49183423 +AAAACAAACCCATGATCCAGACAGGCTCTGTGCAGATGCA, 0 +>candidate_22168403 pos=16:92162192-92162232 +AAAACAAACCCCAGATGCATGCCCATAGGTCAATCAGATT, 5 +>candidate_22168417 pos=16:57136534-57136574 +AAAACAAACCCCAGCCAAGTACAGTAGTGACAGTTCCTTG, 0 +>candidate_22168459 pos=16:74173913-74173953 +AAAACAAACCCCAGGCACATTCCTTATAGCCGTGTTATGC, 0 +>candidate_22168537 pos=16:11170884-11170924 +AAAACAAACCCCATCCCACCTCAGCTTCATTACTGCACTT, 0 +>candidate_22169674 pos=16:48189398-48189438 +AAAACAAACCCGGGTATGCCCCTTAGTTAAAACATTCCTT, 268 +>candidate_22169694 pos=16:16192234-16192274 +AAAACAAACCCGGTATGCCCCATAGTTAAAGCATTCCTGG, 254 +>candidate_22169998 pos=16:9169681-9169721 +AAAACAAACCCTACCTTAATGGGAGATATCACAGACTGGG, 1 +>candidate_22170395 pos=16:45154949-45154989 +AAAACAAACCCTCCCTTCCTTAACTGAAGTTTCCTAGCTC, 1 +>candidate_22171219 pos=16:11135198-11135238 +AAAACAAACCCTTCCCTCCCCAAGTAGCTTTTGTTCATGT, 1027 +>candidate_22171832 pos=16:68188884-68188924 +AAAACAAACCGAAAGTACCTGGACATACGAACCTTTCTAT, 0 +>candidate_22174961 pos=16:91126021-91126061 +AAAACAAACCTCCACAGAGCTTACTCAATTCTCTGAAGGA, 0 +>candidate_22175427 pos=16:92181887-92181927 +AAAACAAACCTCTCATCAGGATGGAAAAGTACCAACCTGT, 46 +>candidate_22179958 pos=16:5111686-5111726 +AAAACAAACGAAACACCATTGCTGGGTGCCAGGAGAGGGA, 0 +>candidate_22185338 pos=16:65122594-65122634 +AAAACAAACTAAACCCATAGACAACTGTATTGCCTCCTCC, 1 +>candidate_22185583 pos=16:8163848-8163888 +AAAACAAACTAAAGGAGAGTAAAGAAGAGTCACCAACCCT, 0 +>candidate_22188201 pos=16:55133103-55133143 +AAAACAAACTACATGCCAGGAGTTTCCTTTTCCTCTTGAG, 0 +>candidate_22188735 pos=16:81153500-81153540 +AAAACAAACTACTGCAGTCACTCAGGAAATTGTTGAGAAT, 0 +>candidate_22190073 pos=16:13184132-13184172 +AAAACAAACTAGGTGGGAAAGAGTTTACTTTGAGTGGTAG, 2 +>candidate_22192227 pos=16:27164290-27164330 +AAAACAAACTCAAACAAATCAGTAGCCTTCCTCTACTCAA, 1220 +>candidate_22192745 pos=16:48174894-48174934 +AAAACAAACTCAAGATTCTGCTTGAGTGACAGGGCCTTCA, 0 +>candidate_22193410 pos=16:40142209-40142249 +AAAACAAACTCACTATCAGAAATTGCCCAGCCTAGCCTAA, 0 +>candidate_22193752 pos=16:43152789-43152829 +AAAACAAACTCAGCCAATGTTTGGAGGTTCCTCGTCTCAT, 10 +>candidate_22193843 pos=16:90164453-90164493 +AAAACAAACTCAGGACTTTGTGAGCATCCATTATAGCTCA, 0 +>candidate_22195602 pos=16:64101875-64101915 +AAAACAAACTCCTCTGTCCCAGGCTAATGGTTTATTTGTC, 0 +>candidate_22196342 pos=16:18179921-18179961 +AAAACAAACTCTATGATCTGCCTGGTTACCCTGGCCAAGC, 0 +>candidate_22197324 pos=16:11181750-11181790 +AAAACAAACTCTTCCTCCCATTCTACTAAGGACTGCTAGG, 0 +>candidate_22197538 pos=16:7145407-7145447 +AAAACAAACTCTTTAGAGCTGGTGAATGCTTGTTCTCAGT, 0 +>candidate_22198662 pos=16:24108652-24108692 +AAAACAAACTGACAAACAGAAAACAAAAGAGCACTCCTTG, 26 +>candidate_22199438 pos=16:84113940-84113980 +AAAACAAACTGATACACGTGCAAAAGAGTGAATTTCCCCA, 0 +>candidate_22199459 pos=16:39138516-39138556 +AAAACAAACTGATACTTGTCCACACAGTCTCTGATAGTAC, 0 +>candidate_22200544 pos=16:97127845-97127885 +AAAACAAACTGCTGAACTACCCAATAAGATCCTGCCACCA, 0 +>candidate_22200957 pos=16:31174384-31174424 +AAAACAAACTGGACAGGCAGTGACAGACTCCCAGAGCTGA, 0 +>candidate_22201014 pos=16:75109753-75109793 +AAAACAAACTGGAGAAGCAAGTGGTGGAGTATCAGAGGTA, 0 +>candidate_22202360 pos=16:8100518-8100558 +AAAACAAACTGTATAGAGGGTTTGTCCCTGTGCAGAAGAC, 0 +>candidate_22202771 pos=16:66144420-66144460 +AAAACAAACTGTGACAAAGAGCCATCATTTCACGATCTTA, 0 +>candidate_22203018 pos=16:93137335-93137375 +AAAACAAACTGTGTACCAGCCCAGACCCTGCTGTGGAACC, 0 +>candidate_22205403 pos=16:57181778-57181818 +AAAACAAACTTCAATGTTCACACCACAAGATGCAGCAACA, 0 +>candidate_22206827 pos=16:20161423-20161463 +AAAACAAACTTGAAGGGAATTAAGTAGGCATGGAGGTTTT, 0 +>candidate_22207174 pos=16:81171525-81171565 +AAAACAAACTTGCAAAGTCATTGTGTTTGTTTGTGTTGGC, 1 +>candidate_22207831 pos=16:40187696-40187736 +AAAACAAACTTGTCACTAGTCCAGTCCAGGGACTCAGACT, 1 +>candidate_22208932 pos=16:62193639-62193679 +AAAACAAACTTTCAGAAGGAAGGCATAGTTCCTACAAAAG, 0 +>candidate_22213516 pos=16:42184208-42184248 +AAAACAAAGAAAACCTCCGAGTTTCTGTCTACCCAAAGAA, 0 +>candidate_22214148 pos=16:32110929-32110969 +AAAACAAAGAAAAGCAGAATGCAGGCCAAGCGGTGGCACT, 0 +>candidate_22214644 pos=16:10161150-10161190 +AAAACAAAGAAAATAATAATTCTGTGTCCTTGCCAGGGGC, 2 +>candidate_22218001 pos=16:6153321-6153361 +AAAACAAAGAAACTCCATCTTTGGGTCTAGTCATGCCCAC, 0 +>candidate_22220205 pos=16:51104997-51105037 +AAAACAAAGAAAGCAAAGGAGAATGACTGTGGGTTTTACT, 1 +>candidate_22221967 pos=16:78121594-78121634 +AAAACAAAGAAATCAACAGGCTATCACATCTTCCCTTTCT, 0 +>candidate_22226467 pos=16:85140359-85140399 +AAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGATAAAG, 295 +>candidate_22230471 pos=16:48150618-48150658 +AAAACAAAGAATATTACCAAGGACCACTCCACTCTGTCTC, 0 +>candidate_22231264 pos=16:35100492-35100532 +AAAACAAAGAATGAATGAATTCAGGCATGGTGATTCACCC, 3 +>candidate_22231544 pos=16:62146595-62146635 +AAAACAAAGAATGGACAGCCATGCCACAATAATGGAAGAA, 0 +>candidate_22234415 pos=16:53153978-53154018 +AAAACAAAGACAACCACTGCATGTGGGCTGATGTGCCTTT, 0 +>candidate_22235188 pos=16:84110136-84110176 +AAAACAAAGACACAGATACTTAACTGGGTATACAAGTGCA, 1 +>candidate_22235294 pos=16:85110795-85110835 +AAAACAAAGACACATGCGTACACACATGGCCTCATTCAGA, 4 +>candidate_22235562 pos=16:66120355-66120395 +AAAACAAAGACACTGAGCTGGGAGAAAAGATTGCTCTCTT, 0 +>candidate_22237073 pos=16:95114060-95114100 +AAAACAAAGACATCATGAAATTTGCAGGCAATGGACAGAA, 1007 +>candidate_22238881 pos=16:91149318-91149358 +AAAACAAAGACCCAGAGAAGTTAAGTCATGCAAGGGTATA, 0 +>candidate_22240123 pos=16:58145273-58145313 +AAAACAAAGACTAACACCCTAGGGCGTTCTCCAACTTCCC, 0 +>candidate_22240135 pos=16:32114579-32114619 +AAAACAAAGACTAACCATCACATACGACCTGGATACCCTA, 0 +>candidate_22240291 pos=16:18162248-18162288 +AAAACAAAGACTACTTACATCCAGCCCCTCTGGAGCTCTG, 0 +>candidate_22242413 pos=16:97176240-97176280 +AAAACAAAGAGAAAATGAAGAAGAGGGAGGGAGGGAGGAA, 678 +>candidate_22242847 pos=16:41171621-41171661 +AAAACAAAGAGAAATGTTCCTACCTGGTAACACATAGGAC, 0 +>candidate_22243294 pos=16:91118707-91118747 +AAAACAAAGAGAAGCAGCACTGGGAGACAAGGTCACCAAT, 0 +>candidate_22244228 pos=16:6117975-6118015 +AAAACAAAGAGAGAAACACACAGAGAGAAACACAGAGAGA, 1283 +>candidate_22244542 pos=16:31144986-31145026 +AAAACAAAGAGAGAGGTGCAAGAGGGAGTGGGGAGGGGTC, 5 +>candidate_22245248 pos=16:90156432-90156472 +AAAACAAAGAGATCTGTCTTCCTCTGCCTCCCAAGTGCTG, 2400 +>candidate_22246691 pos=16:5178259-5178299 +AAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCAGGAAG, 15 +>candidate_22248005 pos=16:68163705-68163745 +AAAACAAAGAGGCCTTGACGATTCTATGGAACACACGTGA, 0 +>candidate_22249466 pos=16:53198620-53198660 +AAAACAAAGAGTCATTCAAGCTGAAGGGGAATTGGTAGGA, 0 +>candidate_22249903 pos=16:20170601-20170641 +AAAACAAAGAGTGTAATGAACCTCCATGTGCCAAATCAAT, 0 +>candidate_22250312 pos=16:3109155-3109195 +AAAACAAAGAGTTGGGCCGGGCGTGGTGGCACACACCTTT, 1059 +>candidate_22251468 pos=16:51149587-51149627 +AAAACAAAGATACAAGTAACACAATACAGACTGAGCTGGT, 434 +>candidate_22251480 pos=16:62192811-62192851 +AAAACAAAGATACAATGGTTGAGGATATGCCTCTGTGGAT, 1 +>candidate_22254279 pos=16:39105899-39105939 +AAAACAAAGATGAAGAAACACCCAGATCCAACTGGGGCCT, 0 +>candidate_22263227 pos=16:65100596-65100636 +AAAACAAAGCAAACAAAACAAAAGCCAGCCCTGTTTCCCT, 24 +>candidate_22264711 pos=16:96115374-96115414 +AAAACAAAGCAAAGCAAAATCAGCAGACAGTCTGTTTCCC, 5 +>candidate_22266827 pos=16:46140996-46141036 +AAAACAAAGCAACTTGGGTAGGAAAAGGTGTGTTTGGCTA, 302 +>candidate_22267124 pos=16:64124738-64124778 +AAAACAAAGCAAGACCCAACAGCTACAAGAAAACTGAAAT, 747 +>candidate_22267784 pos=16:93148087-93148127 +AAAACAAAGCAAGGCAAGGTCAAGAGGTAGCCTGGGAGAG, 0 +>candidate_22267986 pos=16:49132159-49132199 +AAAACAAAGCAAGTCTCCCTTGTCCAAGAAAAGAATGATC, 0 +>candidate_22270008 pos=16:37196041-37196081 +AAAACAAAGCACCCATATCATAAATCATTCTCTGGATCAC, 0 +>candidate_22270492 pos=16:68171225-68171265 +AAAACAAAGCACTGGAAGTCAAATCACGGGGTCTATACTG, 4 +>candidate_22270800 pos=16:57163111-57163151 +AAAACAAAGCAGAAACACTCTCTAGGAAGGGAATGCTTTT, 0 +>candidate_22272621 pos=16:78164887-78164927 +AAAACAAAGCAGGGCTGCCTTGGCTAGAAGGACAAGTGAG, 0 +>candidate_22274021 pos=16:18122906-18122946 +AAAACAAAGCATATTTGCACTCCCTGTGGGTGGCAGTGGC, 0 +>candidate_22274554 pos=16:4153705-4153745 +AAAACAAAGCATGAGAGAGGGAGGCAGGCAGTACATAAGC, 0 +>candidate_22274607 pos=16:25188474-25188514 +AAAACAAAGCATGATGTGTATGTGTGTGTGTGTGTGTGTG, 1445 +>candidate_22274960 pos=16:18191168-18191208 +AAAACAAAGCATGTTATGAAATCCCAGAGAAGCCCATGGC, 0 +>candidate_22275089 pos=16:64170152-64170192 +AAAACAAAGCATTAGCAAGTGCAATAGCATTGCTACTAGA, 0 +>candidate_22276314 pos=16:55137295-55137335 +AAAACAAAGCCAAATCCTCTATTTTGTGAGAAGGGAAGGG, 0 +>candidate_22276407 pos=16:48163864-48163904 +AAAACAAAGCCAACAGAGAAGTCGTAGCCTCAACCCTCTA, 0 +>candidate_22277296 pos=16:15184133-15184173 +AAAACAAAGCCACTCCTAGGCTCCTTGCTATTTGTAGGAC, 0 +>candidate_22277386 pos=16:80198612-80198652 +AAAACAAAGCCAGAAAGTGAATTACTGACCCAAGATTCTA, 0 +>candidate_22278994 pos=16:48190339-48190379 +AAAACAAAGCCCAGAGAACTAGACGAAGAGCAAGCGTAGC, 0 +>candidate_22279207 pos=16:90183096-90183136 +AAAACAAAGCCCATTATCTTACACAGAGCAGTGCTGAGGC, 0 +>candidate_22279494 pos=16:92122139-92122179 +AAAACAAAGCCCCTGACTAATGAATTAAAGAGGAATGCAG, 1 +>candidate_22281771 pos=16:13160190-13160230 +AAAACAAAGCGAACAGAAATGTGCAGGTACTTTTGCGGCG, 0 +>candidate_22281774 pos=16:49153622-49153662 +AAAACAAAGCGAACCAAAAGCAGTGCTTGGATGGTGAGAC, 0 +>candidate_22283034 pos=16:49153168-49153208 +AAAACAAAGCTACAGAGTGAGAGTGGTAAGAAGATGTGTT, 0 +>candidate_22283133 pos=16:55104509-55104549 +AAAACAAAGCTACCTCCCTCACAGACATGCCCACAGGCTA, 8 +>candidate_22285544 pos=16:43157945-43157985 +AAAACAAAGCTGCCACAGCAATGTTAGTATCAGGAGACCT, 0 +>candidate_22285837 pos=16:47151351-47151391 +AAAACAAAGCTGGCAAACAATTTAGTTTGTAAAGTGGGTG, 1 +>candidate_22289175 pos=16:15136403-15136443 +AAAACAAAGGAAACCTGAAGTGTCCCTAGACATGACCTAA, 0 +>candidate_22291090 pos=16:31132942-31132982 +AAAACAAAGGAAGGAAGAAAGGAAAGAAAGGAGCGAGGGA, 1237 +>candidate_22292624 pos=16:54121626-54121666 +AAAACAAAGGACAGCAATAGGTGAAACTAGGTCACTAAGG, 0 +>candidate_22292665 pos=16:8111403-8111443 +AAAACAAAGGACAGGCTGCAACCAGCAACTCTGCTTGCTG, 0 +>candidate_22293865 pos=16:55185288-55185328 +AAAACAAAGGAGACCTACACTATACCATGCTTATAGATCA, 0 +>candidate_22294429 pos=16:31104483-31104523 +AAAACAAAGGAGCTAATTAAGCCAATGAGCAGCCTCCTCT, 0 +>candidate_22294609 pos=16:73178356-73178396 +AAAACAAAGGAGGAGAAGAAAAGGAAGAGGAGAAGGAGGA, 1202 +>candidate_22297174 pos=16:60175876-60175916 +AAAACAAAGGCAAGCAGGGATGTTTGTTCTAATTAAGCAT, 0 +>candidate_22297925 pos=16:46186219-46186259 +AAAACAAAGGCAGAGAGTCCAGATTTGCCTGGCCCAAAGA, 0 +>candidate_22298648 pos=16:24187087-24187127 +AAAACAAAGGCATCCTGGCCTGTTAGAAACTAAGTTTCAG, 0 +>candidate_22298997 pos=16:26100961-26101001 +AAAACAAAGGCCAAATCTCACAAAGCACCAAGTCAAGAAT, 0 +>candidate_22299683 pos=16:10168337-10168377 +AAAACAAAGGCCTAATCCATCAAAGTTCATAGTTCTGGGA, 387 +>candidate_22300372 pos=16:11141090-11141130 +AAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAGAGCAC, 1237 +>candidate_22300595 pos=16:42103309-42103349 +AAAACAAAGGCTCACTTTCTATAGCACCAACACTTGGATT, 1 +>candidate_22300923 pos=16:97165790-97165830 +AAAACAAAGGCTGCAGACCATCTCTGACCTGCCAAACCCT, 0 +>candidate_22300972 pos=16:31194128-31194168 +AAAACAAAGGCTGCTTGACCACAGGCACTACAATACTACC, 0 +>candidate_22302074 pos=16:5109235-5109275 +AAAACAAAGGGAACTGGGGTTGAAGAGATGGCTCAGTGGT, 1031 +>candidate_22302160 pos=16:90124634-90124674 +AAAACAAAGGGAAGCCCAGCAGCAAGGCAGCTGCATCTAA, 0 +>candidate_22302865 pos=16:13127182-13127222 +AAAACAAAGGGAGGGAGGAGGGGAGCGGAGAGGAGGGGAG, 1043 +>candidate_22305091 pos=16:15186089-15186129 +AAAACAAAGGGGTGGGAAACCCATCTCCCACCAGAGCTCG, 9 +>candidate_22305276 pos=16:12138525-12138565 +AAAACAAAGGGTACACAAAGTAAATTGTGTGTGTGTGTGT, 40 +>candidate_22306763 pos=16:54145774-54145814 +AAAACAAAGGTAGCAAATTCACCCAAGAGGAGTAGACAGC, 1469 +>candidate_22306792 pos=16:32126901-32126941 +AAAACAAAGGTAGCCTGCTCACCAACATTGGAAAATCGAG, 0 +>candidate_22307094 pos=16:13176077-13176117 +AAAACAAAGGTATGATCACACTATCCCAAGAAGGTTTTCT, 0 +>candidate_22307991 pos=16:34107515-34107555 +AAAACAAAGGTCTTCTCGGTGTATATCCTGTCCTTTTGGA, 0 +>candidate_22308271 pos=16:93102076-93102116 +AAAACAAAGGTGAGCAGGCTAATTCGGTGCCTGGAGCCAA, 0 +>candidate_22308782 pos=16:39186247-39186287 +AAAACAAAGGTGGTAAATGCTGGTGAAGGTGTGGCTAAAC, 1 +>candidate_22309502 pos=16:18197471-18197511 +AAAACAAAGGTTCCTCCTTTCAGATCCCCACAGGGTCTCC, 0 +>candidate_22309582 pos=16:77139315-77139355 +AAAACAAAGGTTCTTCTAAGTGGTAGTGGGACAGAAGGAA, 0 +>candidate_22311802 pos=16:72102985-72103025 +AAAACAAAGTAAATGTCATAAGTTCTCCTCCTCTTGTCCT, 2 +>candidate_22317162 pos=16:93153957-93153997 +AAAACAAAGTATGAAGGAGAAATGTTGGTGAGGGTTGCAT, 0 +>candidate_22322429 pos=16:10191280-10191320 +AAAACAAAGTCTCTGCTGGGCTTTCTTGAAATTTCCTTTA, 519 +>candidate_22322736 pos=16:70183950-70183990 +AAAACAAAGTCTGGGGTTTGGCACTACCACATCCTATTCT, 0 +>candidate_22324337 pos=16:86170469-86170509 +AAAACAAAGTGACTAGGATAGGGAAGGTTGGAACTTTTAT, 0 +>candidate_22325033 pos=16:18199206-18199246 +AAAACAAAGTGATGCTGAGGGCCCATGAGGAGGCTACAGT, 0 +>candidate_22325960 pos=16:88141120-88141160 +AAAACAAAGTGCTTCATCAAATGCAGGCACCGGCTGGATA, 0 +>candidate_22328152 pos=16:76113352-76113392 +AAAACAAAGTGTGGGGAGCCGCGCGGGTAATAACAAAGCA, 0 +>candidate_22331015 pos=16:26162478-26162518 +AAAACAAAGTTCCAAGGGGCCAATCCCTAGGCCAAAAGCA, 0 +>candidate_22334198 pos=16:75129428-75129468 +AAAACAAAGTTTGAGATTAAGCTCAAACCTTGCAGAGCTA, 0 +>candidate_22334282 pos=16:33149008-33149048 +AAAACAAAGTTTGCCACTCTTGGCATATCTAAGACTTTAG, 0 +>candidate_22337724 pos=16:96115203-96115243 +AAAACAAATAAAACACACATCTCGAAACTCCAATGGCGGG, 1 +>candidate_22342579 pos=16:44128322-44128362 +AAAACAAATAAACCTATGAGCTGGAGCAAGTGGGGCCGGA, 186 +>candidate_22344144 pos=16:15131264-15131304 +AAAACAAATAAATAAAACCAACTCCTGAATCCCCTTCCTG, 0 +>candidate_22348223 pos=16:60138660-60138700 +AAAACAAATAACAGTACATGCTGGCAAAGAGGTAGAGTAA, 232 +>candidate_22349222 pos=16:51186899-51186939 +AAAACAAATAACCGCATTAAAATATGGGGCTCAGAGCTAA, 1115 +>candidate_22349836 pos=16:39185937-39185977 +AAAACAAATAACTGAGCAGAGAGGAAGCCCACGGAGTGAG, 6 +>candidate_22350221 pos=16:76188356-76188396 +AAAACAAATAAGAAACTCACAAAGAGGAAGGAAGGGAGGG, 51 +>candidate_22354848 pos=16:6143948-6143988 +AAAACAAATAATGGGAAATGCTGGCAAGGGCTCAGGCAAA, 3 +>candidate_22355635 pos=16:60105525-60105565 +AAAACAAATAATTGGTTTTGAAGGCTCAGCCCTAAACATG, 1 +>candidate_22356305 pos=16:88124318-88124358 +AAAACAAATACAAAACAAACCACTCTCACCCCAAGAAAGC, 10 +>candidate_22357832 pos=16:20117628-20117668 +AAAACAAATACACAGTGTGCTTGTGGGATTAAAATGTCCC, 0 +>candidate_22358340 pos=16:75187595-75187635 +AAAACAAATACAGACTCTTGTAGCACAGCAGTAGAAACAG, 0 +>candidate_22359397 pos=16:72145410-72145450 +AAAACAAATACATGAATAAGTGGGTGGGGTGACACAATGT, 1 +>candidate_22361207 pos=16:6135546-6135586 +AAAACAAATACGAGATCAGCCTGTTGGTACACTGCCAATA, 0 +>candidate_22363266 pos=16:84123068-84123108 +AAAACAAATACTTTCTACAGTGAGGAAAATCCACAGAGGT, 0 +>candidate_22363675 pos=16:54122567-54122607 +AAAACAAATAGAAACAAACCCATCCAAGAGGAGTAGAAGG, 1049 +>candidate_22366619 pos=16:36101464-36101504 +AAAACAAATAGCCCCAAGAAGGAATGTGCAAAAGGCCTGA, 0 +>candidate_22369611 pos=16:14186124-14186164 +AAAACAAATAGTTTGCCCTGGTAAGAACCTGGTGTGGGTC, 0 +>candidate_22373867 pos=16:93179825-93179865 +AAAACAAATATCATTGCCTTGTAGGGCAGCTTCAGGTTCG, 0 +>candidate_22374476 pos=16:33181585-33181625 +AAAACAAATATCTAGCTGGGCCTGGTGATGCAGGCTGTAA, 10 +>candidate_22375839 pos=16:6136459-6136499 +AAAACAAATATGCTCCCAAATGGCTTGTGTGTTTATTACC, 0 +>candidate_22383821 pos=16:40125692-40125732 +AAAACAAATCAAGCAGAAAGCCCATGCGGATAAGAGCGGT, 0 +>candidate_22384493 pos=16:53191793-53191833 +AAAACAAATCAATCTGACATTAGGCAGTGTTCTGGGTTGA, 0 +>candidate_22385414 pos=16:76107708-76107748 +AAAACAAATCACATCGTATCACATCTCTCTGCCTAAACCA, 0 +>candidate_22385976 pos=16:88127352-88127392 +AAAACAAATCACTCACTCCATCCTAGAAGAGCAAACTGCC, 0 +>candidate_22388274 pos=16:41173653-41173693 +AAAACAAATCATAACCAGCTTTTCACAGGTTCAGAAGCTC, 0 +>candidate_22389140 pos=16:90101042-90101082 +AAAACAAATCATGAGCCCACCTTTGCAGTGTTACCTTACA, 0 +>candidate_22391255 pos=16:13108590-13108630 +AAAACAAATCCACTTGCAGCGGCTGATGTGAAGGGAGATT, 0 +>candidate_22392409 pos=16:45124376-45124416 +AAAACAAATCCCACTTTGGTGGCACATATGTGTCATCTCA, 3 +>candidate_22393590 pos=16:83170773-83170813 +AAAACAAATCCTACCTCCAGAGAAAGAGAGAGAGAGAGAT, 118 +>candidate_22399452 pos=16:86120245-86120285 +AAAACAAATCTGATCTGCATTTTGATGCTGTACCGCTAAC, 0 +>candidate_22402937 pos=16:87187631-87187671 +AAAACAAATCTTTGTGAGTTCAAGGCCTGCCCACTCTCCA, 214 +>candidate_22404908 pos=16:52134574-52134614 +AAAACAAATGAAAGCCCGAGCGAACTTGCCTCACGTAATC, 0 +>candidate_22406075 pos=16:60185472-60185512 +AAAACAAATGAACAATGATCTCTCCTATATGGTCACAAGG, 0 +>candidate_22406780 pos=16:94123970-94124010 +AAAACAAATGAAGAAATGCCCGGCCTTGGGGACAGAAGCC, 0 +>candidate_22409580 pos=16:15123716-15123756 +AAAACAAATGACAGTTCATGTTGGCAATCATAGAGGATAG, 13 +>candidate_22409669 pos=16:64127159-64127199 +AAAACAAATGACATCTCATATTGGTGAGGACGTGAAATAC, 69 +>candidate_22409934 pos=16:39186056-39186096 +AAAACAAATGACCCAATTAACAAATGGGCTATGGAGCTGA, 1084 +>candidate_22410844 pos=16:71175515-71175555 +AAAACAAATGACTTTACTGGCCCTGCCTACTTTTCTTATT, 0 +>candidate_22411499 pos=16:14145787-14145827 +AAAACAAATGAGATAAGAGAGAGGCTCAAAAGGCTGCAGT, 0 +>candidate_22412801 pos=16:66173972-66174012 +AAAACAAATGAGTTAAGCCATAAATGTCAGGCAAGCCTTT, 0 +>candidate_22414716 pos=16:6125809-6125849 +AAAACAAATGATTGGCATGTTCAGTGGAGGGCCTGTTGGT, 0 +>candidate_22416928 pos=16:55125756-55125796 +AAAACAAATGCATCAATCTAATGCTAGAAAGGAATCTGGC, 1 +>candidate_22420280 pos=16:94159288-94159328 +AAAACAAATGCTTCCTCCCTTAAGTTGCACAGCCTAGGAA, 2 +>candidate_22422286 pos=16:57100406-57100446 +AAAACAAATGGAGTCTCAAGGTACCCATAAATTGTGTCTT, 0 +>candidate_22423546 pos=16:41192808-41192848 +AAAACAAATGGCCCAATTTGTCATTGCTATACCTCATCAT, 0 +>candidate_22427785 pos=16:65176726-65176766 +AAAACAAATGTAGACCTGAGAACTTCATGTGAGAGATGGG, 0 +>candidate_22431224 pos=16:56124062-56124102 +AAAACAAATGTGCTTTAATGGCTAGTGTGACTTTTGCCCA, 0 +>candidate_22431606 pos=16:11140939-11140979 +AAAACAAATGTGGTGCACATCTTTACTCCAAGTACTCCGG, 24 +>candidate_22431610 pos=16:13150836-13150876 +AAAACAAATGTGGTGGCCATCAGCCCTGTCCTCAGTAGTC, 0 +>candidate_22432810 pos=16:10143517-10143557 +AAAACAAATGTTATCAGTCTGAAGGATAACATCCCTTTCC, 8 +>candidate_22439916 pos=16:90141470-90141510 +AAAACAAATTACTGGGGAAGAGCCAGGAGAATCATCCAAG, 0 +>candidate_22442846 pos=16:73115936-73115976 +AAAACAAATTATCTGGGTTTGGAGAGATGGTTCTGTGGTT, 551 +>candidate_22445629 pos=16:16131714-16131754 +AAAACAAATTCACACATTGTCTTTCCACGAATCCAGCCCT, 1055 +>candidate_22446077 pos=16:44104803-44104843 +AAAACAAATTCAGAGACTGACACGGTTCATGTCTGAGAAA, 1 +>candidate_22448911 pos=16:84178196-84178236 +AAAACAAATTCTACTGTCCTACTCACACACACACACACAC, 490 +>candidate_22451921 pos=16:13142802-13142842 +AAAACAAATTGAGGCAGGGAGCCACCGAATGACTTATTCC, 0 +>candidate_22454116 pos=16:6181586-6181626 +AAAACAAATTGGGCTACTGGGATGGCTCAGTGGGAAAGGC, 243 +>candidate_22455527 pos=16:12145387-12145427 +AAAACAAATTGTGTCAGAGTATCTGGCTAAGGGGTTCTGC, 0 +>candidate_22461655 pos=16:76185390-76185430 +AAAACAAATTTCTGGGGTGACACCTGCCTTCTTCCCTGTG, 0 +>candidate_22462363 pos=16:38165907-38165947 +AAAACAAATTTGAGGTGAATCCTGTTTTACAGTAGCAGCA, 0 +>candidate_22478627 pos=16:67150981-67151021 +AAAACAACAAAACAAGTAAACACTAGCATTCACTCACTGG, 0 +>candidate_22481196 pos=16:97166331-97166371 +AAAACAACAAAAGACATACATACACTCCCATTTCCCACAG, 1 +>candidate_22482990 pos=16:34149365-34149405 +AAAACAACAAAATATCATTGTCACCTCCTGCTCTAGATGT, 0 +>candidate_22483304 pos=16:14130104-14130144 +AAAACAACAAAATCCCCACAAAGCACTCTAGGGTGATGGT, 1 +>candidate_22483415 pos=16:96191713-96191753 +AAAACAACAAAATCTTAAAGCACTCATAGTGAGGTGGGTT, 0 +>candidate_22486781 pos=16:28140215-28140255 +AAAACAACAAACAATCAAAGCCCATCCCTCAACCAACCAA, 13 +>candidate_22487831 pos=16:20136212-20136252 +AAAACAACAAACCACTAAGGAAATTAGTGTTAGGGGTTCT, 1 +>candidate_22488479 pos=16:4169917-4169957 +AAAACAACAAACTACTTTCACCAGCATGTCATCCACTTTG, 0 +>candidate_22488840 pos=16:40123532-40123572 +AAAACAACAAACTTCGCTTAGGTGTCCTAAGCAAATGATT, 0 +>candidate_22489854 pos=16:15135210-15135250 +AAAACAACAAAGAGGGCATATTCTGAGGAGATTTGGGAAT, 0 +>candidate_22490642 pos=16:96113584-96113624 +AAAACAACAAAGCTTCATCCAGCATCCACAGCACCAGCAC, 0 +>candidate_22491482 pos=16:97160493-97160533 +AAAACAACAAAGTGCTGATCAAAAGCAGAAACACGGGGTC, 0 +>candidate_22494369 pos=16:15155435-15155475 +AAAACAACAAATTCTGCCATGCTTAGGGTTACAAATTGCT, 29 +>candidate_22501160 pos=16:45181676-45181716 +AAAACAACAACAAAACCCACACAATGGATGTGATGAGTTT, 3 +>candidate_22510637 pos=16:90188453-90188493 +AAAACAACAACAACAAACTCAGCTAGCTCCCATTAATAAG, 0 +>candidate_22513714 pos=16:92173690-92173730 +AAAACAACAACAACAACAAAACCCCAAGTCCCCAGCACCA, 148 +>candidate_22516171 pos=16:94158568-94158608 +AAAACAACAACAACAACAACAAAATACTGGTCCTCTCCTC, 144 +>candidate_22518786 pos=16:94100674-94100714 +AAAACAACAACAACAACAACAACAACCATGTTCTGCATCC, 666 +>candidate_22518902 pos=16:75105564-75105604 +AAAACAACAACAACAACAACAACAATCTCAGTGCATATCC, 485 +>candidate_22519056 pos=16:94128515-94128555 +AAAACAACAACAACAACAACAACATCATTACTGTGGGCCC, 251 +>candidate_22519488 pos=16:80166974-80167014 +AAAACAACAACAACAACAACACCTCTGTGATTACTGGAGA, 32 +>candidate_22519521 pos=16:32145524-32145564 +AAAACAACAACAACAACAACAGAAAGAAACTGGGCATGGT, 283 +>candidate_22519965 pos=16:96109738-96109778 +AAAACAACAACAACAACAAGAAGCTACTGATTATGGTGGC, 19 +>candidate_22520899 pos=16:38131343-38131383 +AAAACAACAACAACAACCAGTCCAGTGCAGAGACCAAAAC, 2 +>candidate_22522157 pos=16:6119212-6119252 +AAAACAACAACAACACCTGTTGTAAATAGACACAAGGCAA, 0 +>candidate_22522176 pos=16:75109734-75109774 +AAAACAACAACAACACTCCAAAACAAACTGGAGAAGCAAG, 7 +>candidate_22523023 pos=16:35115313-35115353 +AAAACAACAACAACCAAACCTACAAGAACAACAAAGGCAT, 1072 +>candidate_22525042 pos=16:9111319-9111359 +AAAACAACAACAATAACAGCAACAGCAGCAGCAGCAGCAA, 1165 +>candidate_22526849 pos=16:12172836-12172876 +AAAACAACAACAGACACACACAGCTGTGGTAGGGTAGCCA, 0 +>candidate_22528041 pos=16:23191959-23191999 +AAAACAACAACAGTACATTCCCTGCCGTGGCCGATGAACT, 2 +>candidate_22528622 pos=16:17193799-17193839 +AAAACAACAACATCAGCACTGGCTGCTCTTCCAGGGGACC, 97 +>candidate_22530271 pos=16:42145836-42145876 +AAAACAACAACCATAAACTACCCTAGACATGGCTTTAAGT, 0 +>candidate_22530532 pos=16:8117580-8117620 +AAAACAACAACCCACTTTGGGTCTATCTCTGTCAATGCTC, 0 +>candidate_22530904 pos=16:58147083-58147123 +AAAACAACAACCGTAAGAAGGAGGCTGGAGGCTGATGCTC, 0 +>candidate_22532719 pos=16:70126324-70126364 +AAAACAACAACTGGCAACAAACAAACGCTTGAGAGGATGT, 0 +>candidate_22534710 pos=16:91136208-91136248 +AAAACAACAAGACTATAGGGGACATCTCATTCAAACACTA, 2 +>candidate_22535706 pos=16:85174980-85175020 +AAAACAACAAGCAGTTTCTGCCACTGCCCAGTTCCTGCTT, 0 +>candidate_22536165 pos=16:55102898-55102938 +AAAACAACAAGCTGTTCACATTTCTCTCCTGGGCGCTACT, 0 +>candidate_22540553 pos=16:12181858-12181898 +AAAACAACAATAGTATGCTCTAACCAACCCATGACTTCCC, 0 +>candidate_22540990 pos=16:41118273-41118313 +AAAACAACAATATCAACTAACTGGACACCTCAGGGATTAA, 299 +>candidate_22542201 pos=16:38187412-38187452 +AAAACAACAATCTAGCCAGCTGGCCTGAGAAAAGTGGGTG, 0 +>candidate_22543874 pos=16:63183017-63183057 +AAAACAACAATGTTGAAAGAAGCCAATATTTGCAGGGGTG, 0 +>candidate_22544870 pos=16:53130099-53130139 +AAAACAACAATTTCAACTAACCAGACTCCCTGTCCCAGAG, 135 +>candidate_22547933 pos=16:27108597-27108637 +AAAACAACACAAGTGGGGAGGGAGGGAGGGATTTGGGAGG, 692 +>candidate_22548148 pos=16:60142430-60142470 +AAAACAACACAATCAGGTCTGTCACAGCAACACTCCATAA, 60 +>candidate_22548235 pos=16:12159703-12159743 +AAAACAACACAATGAGACAGAGAAGCCTGGATTTTAACAA, 1 +>candidate_22548621 pos=16:12161010-12161050 +AAAACAACACACAACTCCACAATACAAGAACTACACTAGA, 0 +>candidate_22550604 pos=16:61104641-61104681 +AAAACAACACAGAGATACACACACATGCATGTACCCACAC, 403 +>candidate_22551772 pos=16:62190688-62190728 +AAAACAACACAGTCAGGTCTGTGACAGCAATACCCCATTA, 199 +>candidate_22553460 pos=16:30124149-30124189 +AAAACAACACATTTCAGGCTGTGTCTTGCCCAGAGTGACT, 3 +>candidate_22554080 pos=16:22145308-22145348 +AAAACAACACCAAGGTCATGGAAGGCAGCTGGTGACATCA, 0 +>candidate_22556001 pos=16:97101262-97101302 +AAAACAACACCGTGACACTCTTGCCTCACATTCTACAAAC, 0 +>candidate_22556004 pos=16:91190766-91190806 +AAAACAACACCGTGGCCCAGCTAATTAGAACACACACTTC, 0 +>candidate_22556430 pos=16:4139209-4139249 +AAAACAACACCTGCTCTAGACTGCAGCAACACAAACTGAA, 0 +>candidate_22557039 pos=16:7141448-7141488 +AAAACAACACGCGGCTCCGTGAACACAATTGCATTGAAAA, 0 +>candidate_22559472 pos=16:47180265-47180305 +AAAACAACACTGAGATTCCACCTCACAACAGTCAGAATGG, 1361 +>candidate_22559612 pos=16:77145310-77145350 +AAAACAACACTGAGATTCCATCTTAGACCTGTCAGAATGG, 1346 +>candidate_22560242 pos=16:37102570-37102610 +AAAACAACACTGGGGAAAAGAGTCTCATTATTATACTCTG, 1 +>candidate_22560764 pos=16:57137711-57137751 +AAAACAACACTTAGCAGGTTTCATTGACATAGGCTTTCAT, 1 +>candidate_22562354 pos=16:72178247-72178287 +AAAACAACAGAAAATGAGTGAGTTGTTTGAAGGCAGCATT, 1 +>candidate_22563296 pos=16:87145435-87145475 +AAAACAACAGAAAGCCCACATACACATGGAAGCTGACCAA, 1180 +>candidate_22563325 pos=16:15143614-15143654 +AAAACAACAGAAAGCCCACATACACGAGGAAACTGAACAA, 1517 diff --git a/test_data/test.ss.ct b/test_data/test.ss.ct new file mode 100644 index 00000000..d20c764a --- /dev/null +++ b/test_data/test.ss.ct @@ -0,0 +1,20300 @@ +40 dG = 0.941 candidate_21654043 pos=16:11114621-11114661 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 21 +21 A 20 22 38 21 20 22 +22 C 21 23 37 22 21 23 +23 T 22 24 36 23 22 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 23 36 0 37 +37 G 36 38 22 37 36 38 +38 T 37 39 21 38 37 39 +39 C 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = 0.584 candidate_21658299 pos=16:22131287-22131327 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 G 24 26 35 25 24 26 +26 C 25 27 34 26 25 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 26 34 0 35 +35 C 34 36 25 35 34 36 +36 C 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 1.134 candidate_21666318 pos=16:31196747-31196787 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 A 13 15 25 14 13 15 +15 C 14 16 24 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 15 24 0 25 +25 T 24 26 14 25 24 26 +26 A 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.206 candidate_21670946 pos=16:68188874-68188914 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 C 18 20 32 19 18 20 +20 C 19 21 31 20 19 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 20 31 0 32 +32 G 31 33 19 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.544 candidate_21676743 pos=16:90188443-90188483 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 28 +28 C 27 29 36 28 27 29 +29 T 28 30 35 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 29 35 0 36 +36 G 35 37 28 36 35 37 +37 C 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.985 candidate_21685155 pos=16:14129896-14129936 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 17 +17 C 16 18 36 17 16 18 +18 C 17 19 35 18 17 19 +19 A 18 20 34 19 18 20 +20 T 19 21 33 20 19 21 +21 G 20 22 32 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 21 32 0 33 +33 A 32 34 20 33 32 34 +34 T 33 35 19 34 33 35 +35 G 34 36 18 35 34 36 +36 G 35 37 17 36 35 37 +37 G 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.941 candidate_21686495 pos=16:11114626-11114666 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 16 +16 A 15 17 33 16 15 17 +17 C 16 18 32 17 16 18 +18 T 17 19 31 18 17 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 18 31 0 32 +32 G 31 33 17 32 31 33 +33 T 32 34 16 33 32 34 +34 C 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.847 candidate_21686514 pos=16:81179833-81179873 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 C 14 16 33 15 14 16 +16 A 15 17 32 16 15 17 +17 C 16 18 31 17 16 18 +18 T 17 19 30 18 17 0 +19 G 18 20 0 19 0 0 +20 G 19 21 27 20 0 21 +21 A 20 22 26 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 21 26 0 27 +27 C 26 28 20 27 26 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 18 30 0 31 +31 G 30 32 17 31 30 32 +32 T 31 33 16 32 31 33 +33 G 32 34 15 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.009 candidate_21686674 pos=16:9163163-9163203 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 20 10 9 11 +11 A 10 12 19 11 10 12 +12 A 11 13 18 12 11 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 12 18 0 19 +19 T 18 20 11 19 18 20 +20 G 19 21 10 20 19 21 +21 A 20 22 0 21 20 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.469 candidate_21687718 pos=16:70191486-70191526 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 30 20 19 21 +21 C 20 22 29 21 20 22 +22 G 21 23 28 22 21 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 22 28 0 29 +29 G 28 30 21 29 28 30 +30 G 29 31 20 30 29 31 +31 A 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.284 candidate_21696099 pos=16:22131292-22131332 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 29 +29 G 28 30 38 29 28 30 +30 C 29 31 37 30 29 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 30 37 0 38 +38 C 37 39 29 38 37 39 +39 C 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = 0.388 candidate_21696605 pos=16:76195412-76195452 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 31 8 7 9 +9 A 8 10 30 9 8 10 +10 C 9 11 29 10 9 11 +11 A 10 12 28 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 11 28 0 29 +29 G 28 30 10 29 28 30 +30 T 29 31 9 30 29 31 +31 T 30 32 8 31 30 32 +32 C 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.403 candidate_21696680 pos=16:23161159-23161199 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 A 13 15 38 14 13 15 +15 C 14 16 37 15 14 16 +16 C 15 17 36 16 15 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 35 21 0 22 +22 C 21 23 34 22 21 23 +23 T 22 24 33 23 22 24 +24 T 23 25 32 24 23 25 +25 G 24 26 31 25 24 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 25 31 0 32 +32 A 31 33 24 32 31 33 +33 A 32 34 23 33 32 34 +34 G 33 35 22 34 33 35 +35 A 34 36 21 35 34 0 +36 G 35 37 16 36 0 37 +37 G 36 38 15 37 36 38 +38 T 37 39 14 38 37 39 +39 G 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -3.598 candidate_21696763 pos=16:33141995-33142035 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 A 10 12 27 11 10 12 +12 A 11 13 26 12 11 13 +13 A 12 14 25 13 12 14 +14 A 13 15 24 14 13 15 +15 C 14 16 23 15 14 16 +16 C 15 17 22 16 15 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 16 22 0 23 +23 G 22 24 15 23 22 24 +24 T 23 25 14 24 23 25 +25 T 24 26 13 25 24 26 +26 T 25 27 12 26 25 27 +27 T 26 28 11 27 26 28 +28 C 27 29 0 28 27 0 +29 C 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.44 candidate_21696985 pos=16:15154698-15154738 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 23 4 3 5 +5 C 4 6 22 5 4 6 +6 A 5 7 21 6 5 7 +7 A 6 8 20 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 18 9 0 10 +10 C 9 11 17 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 G 16 18 10 17 0 18 +18 T 17 19 9 18 17 0 +19 G 18 20 0 19 0 0 +20 T 19 21 7 20 0 21 +21 T 20 22 6 21 20 22 +22 G 21 23 5 22 21 23 +23 T 22 24 4 23 22 24 +24 A 23 25 0 24 23 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.505 candidate_21698710 pos=16:73144761-73144801 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 21 +21 A 20 22 40 21 20 22 +22 T 21 23 39 22 21 23 +23 C 22 24 38 23 22 24 +24 C 23 25 37 24 23 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 24 37 0 38 +38 G 37 39 23 38 37 39 +39 A 38 40 22 39 38 40 +40 T 39 0 21 40 39 0 +40 dG = -0.226 candidate_21699937 pos=16:90136408-90136448 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 G 22 24 32 23 22 24 +24 C 23 25 31 24 23 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 24 31 0 32 +32 C 31 33 23 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.789 candidate_21700882 pos=16:43126383-43126423 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 C 24 26 34 25 24 26 +26 C 25 27 33 26 25 27 +27 T 26 28 32 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 27 32 0 33 +33 G 32 34 26 33 32 34 +34 G 33 35 25 34 33 35 +35 C 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.554 candidate_21704015 pos=16:47181492-47181532 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 19 +19 G 18 20 35 19 18 20 +20 C 19 21 34 20 19 0 +21 T 20 22 0 21 0 0 +22 C 21 23 31 22 0 23 +23 T 22 24 30 23 22 24 +24 G 23 25 29 24 23 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 24 29 0 30 +30 A 29 31 23 30 29 31 +31 G 30 32 22 31 30 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 20 34 0 35 +35 C 34 36 19 35 34 36 +36 T 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.515 candidate_21712832 pos=16:20146964-20147004 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 18 9 8 10 +10 C 9 11 17 10 9 11 +11 A 10 12 16 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 11 16 0 17 +17 G 16 18 10 17 16 18 +18 T 17 19 9 18 17 19 +19 A 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 28 +28 G 27 29 35 28 27 29 +29 C 28 30 34 29 28 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 29 34 0 35 +35 C 34 36 28 35 34 36 +36 T 35 37 0 36 35 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.442 candidate_21717478 pos=16:31196752-31196792 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 26 +26 C 25 27 39 26 25 27 +27 C 26 28 38 27 26 28 +28 T 27 29 37 28 27 29 +29 A 28 30 36 29 28 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 29 36 0 37 +37 A 36 38 28 37 36 38 +38 G 37 39 27 38 37 39 +39 G 38 40 26 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -0.206 candidate_21732049 pos=16:68188879-68188919 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 C 13 15 27 14 13 15 +15 C 14 16 26 15 14 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 15 26 0 27 +27 G 26 28 14 27 26 28 +28 A 27 29 0 28 27 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -4.761 candidate_21732995 pos=16:48174889-48174929 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 A 12 14 32 13 12 14 +14 C 13 15 31 14 13 15 +15 T 14 16 30 15 14 16 +16 C 15 17 29 16 15 17 +17 A 16 18 28 17 16 18 +18 A 17 19 27 18 17 19 +19 G 18 20 26 19 18 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 19 26 0 27 +27 T 26 28 18 27 26 28 +28 T 27 29 17 28 27 29 +29 G 28 30 16 29 28 30 +30 A 29 31 15 30 29 31 +31 G 30 32 14 31 30 32 +32 T 31 33 13 32 31 33 +33 G 32 34 0 33 32 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.188 candidate_21734070 pos=16:6153316-6153356 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 28 10 9 11 +11 A 10 12 27 11 10 12 +12 A 11 13 26 12 11 13 +13 A 12 14 25 13 12 14 +14 G 13 15 24 14 13 15 +15 A 14 16 23 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 15 23 0 24 +24 C 23 25 14 24 23 25 +25 T 24 26 13 25 24 26 +26 T 25 27 12 26 25 27 +27 T 26 28 11 27 26 28 +28 G 27 29 10 28 27 29 +29 G 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.274 candidate_21734516 pos=16:85140354-85140394 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 33 20 19 21 +21 G 20 22 32 21 20 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 21 32 0 33 +33 C 32 34 20 33 32 34 +34 A 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.522 candidate_21735207 pos=16:5178254-5178294 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 C 23 25 37 24 23 25 +25 T 24 26 36 25 24 26 +26 C 25 27 35 26 25 27 +27 G 26 28 34 27 26 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 27 34 0 35 +35 G 34 36 26 35 34 36 +36 A 35 37 25 36 35 37 +37 G 36 38 24 37 36 38 +38 G 37 39 0 38 37 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.981 candidate_21738820 pos=16:11141085-11141125 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 15 +15 G 14 16 33 15 14 16 +16 C 15 17 32 16 15 17 +17 T 16 18 31 17 16 19 +18 A 17 19 0 18 0 0 +19 G 18 20 30 19 17 20 +20 A 19 21 29 20 19 21 +21 G 20 22 28 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 21 28 0 29 +29 T 28 30 20 29 28 30 +30 C 29 31 19 30 29 31 +31 A 30 32 17 31 30 32 +32 G 31 33 16 32 31 33 +33 C 32 34 15 33 32 34 +34 A 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.192 candidate_21748103 pos=16:45181671-45181711 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 C 24 26 37 25 24 26 +26 A 25 27 36 26 25 27 +27 C 26 28 35 27 26 28 +28 A 27 29 34 28 27 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 28 34 0 35 +35 G 34 36 27 35 34 36 +36 T 35 37 26 36 35 37 +37 G 36 38 25 37 36 38 +38 A 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.544 candidate_21749831 pos=16:90188448-90188488 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 C 22 24 31 23 22 24 +24 T 23 25 30 24 23 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 24 30 0 31 +31 G 30 32 23 31 30 32 +32 C 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.454 candidate_21753987 pos=16:27162495-27162535 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 G 18 20 38 19 18 20 +20 C 19 21 37 20 19 21 +21 T 20 22 36 21 20 0 +22 C 21 23 33 22 0 23 +23 A 22 24 32 23 22 24 +24 C 23 25 31 24 23 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 G 30 32 24 31 0 32 +32 T 31 33 23 32 31 33 +33 G 32 34 22 33 32 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 21 36 0 37 +37 G 36 38 20 37 36 38 +38 C 37 39 19 38 37 39 +39 C 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -0.619 candidate_21755149 pos=16:30168215-30168255 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 A 11 13 26 12 11 13 +13 C 12 14 25 13 12 14 +14 C 13 15 24 14 13 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 14 24 0 25 +25 G 24 26 13 25 24 26 +26 T 25 27 12 26 25 27 +27 G 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.124 candidate_21756048 pos=16:16119405-16119445 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 15 +15 C 14 16 22 15 14 16 +16 A 15 17 21 16 15 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 16 21 0 22 +22 G 21 23 15 22 21 23 +23 A 22 24 0 23 22 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.164 candidate_21758248 pos=16:33187988-33188028 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 18 10 9 11 +11 A 10 12 17 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 11 17 0 18 +18 G 17 19 10 18 17 19 +19 G 18 20 0 19 18 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.629 candidate_21759100 pos=16:36139573-36139613 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 24 +24 G 23 25 35 24 23 25 +25 C 24 26 34 25 24 26 +26 T 25 27 33 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 26 33 0 34 +34 G 33 35 25 34 33 35 +35 C 34 36 24 35 34 36 +36 T 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.018 candidate_21759804 pos=16:50168025-50168065 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 A 10 12 21 11 10 12 +12 A 11 13 20 12 11 13 +13 G 12 14 19 13 12 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 13 19 0 20 +20 T 19 21 12 20 19 21 +21 T 20 22 11 21 20 22 +22 C 21 23 0 22 21 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 G 24 26 36 25 24 26 +26 C 25 27 35 26 25 27 +27 A 26 28 34 27 26 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 27 34 0 35 +35 G 34 36 26 35 34 36 +36 C 35 37 25 36 35 37 +37 T 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +0 dG = 998.226 candidate_21761043 pos=16:9183788-9183828 +40 dG = 0.751 candidate_21774421 pos=16:82180535-82180575 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 15 +15 A 14 16 31 15 14 16 +16 C 15 17 30 16 15 17 +17 T 16 18 29 17 16 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 17 29 0 30 +30 G 29 31 16 30 29 31 +31 T 30 32 15 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.881 candidate_21775575 pos=16:4115534-4115574 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 17 +17 C 16 18 25 17 16 18 +18 C 17 19 24 18 17 19 +19 A 18 20 23 19 18 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 19 23 0 24 +24 G 23 25 18 24 23 25 +25 G 24 26 17 25 24 26 +26 A 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 30 +30 G 29 31 40 30 29 31 +31 G 30 32 39 31 30 32 +32 C 31 33 38 32 31 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 32 38 0 39 +39 C 38 40 31 39 38 40 +40 C 39 0 30 40 39 0 +40 dG = -2.985 candidate_21777113 pos=16:14129901-14129941 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 31 12 11 13 +13 C 12 14 30 13 12 14 +14 A 13 15 29 14 13 15 +15 T 14 16 28 15 14 16 +16 G 15 17 27 16 15 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 16 27 0 28 +28 A 27 29 15 28 27 29 +29 T 28 30 14 29 28 30 +30 G 29 31 13 30 29 31 +31 G 30 32 12 31 30 32 +32 G 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.63 candidate_21778714 pos=16:50167929-50167969 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 21 12 11 13 +13 C 12 14 20 13 12 14 +14 T 13 15 19 14 13 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 14 19 0 20 +20 G 19 21 13 20 19 21 +21 G 20 22 12 21 20 0 +22 G 21 23 35 22 0 23 +23 C 22 24 34 23 22 24 +24 T 23 25 33 24 23 25 +25 A 24 26 32 25 24 26 +26 G 25 27 31 26 25 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 26 31 0 32 +32 T 31 33 25 32 31 33 +33 A 32 34 24 33 32 34 +34 G 33 35 23 34 33 35 +35 C 34 36 22 35 34 36 +36 T 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.876 candidate_21778745 pos=16:85151414-85151454 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 39 10 9 11 +11 A 10 12 38 11 10 12 +12 C 11 13 37 12 11 13 +13 C 12 14 36 13 12 14 +14 T 13 15 0 14 13 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 17 +17 C 16 18 34 17 16 18 +18 C 17 19 33 18 17 19 +19 T 18 20 32 19 18 20 +20 A 19 21 31 20 19 21 +21 G 20 22 30 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 21 30 0 31 +31 T 30 32 20 31 30 32 +32 A 31 33 19 32 31 33 +33 G 32 34 18 33 32 34 +34 G 33 35 17 34 33 35 +35 T 34 36 0 35 34 36 +36 G 35 37 13 36 35 37 +37 G 36 38 12 37 36 38 +38 T 37 39 11 38 37 39 +39 G 38 40 10 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -1.209 candidate_21779002 pos=16:16185138-16185178 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 25 +25 A 24 26 34 25 24 26 +26 C 25 27 33 26 25 27 +27 C 26 28 32 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 27 32 0 33 +33 G 32 34 26 33 32 34 +34 T 33 35 25 34 33 35 +35 A 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.874 candidate_21780635 pos=16:11114631-11114671 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 27 +27 G 26 28 36 27 26 28 +28 T 27 29 35 28 27 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 28 35 0 36 +36 C 35 37 27 36 35 37 +37 A 36 38 0 37 36 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.847 candidate_21780699 pos=16:81179838-81179878 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 28 10 9 11 +11 A 10 12 27 11 10 12 +12 C 11 13 26 12 11 13 +13 T 12 14 25 13 12 0 +14 G 13 15 0 14 0 0 +15 G 14 16 22 15 0 16 +16 A 15 17 21 16 15 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 16 21 0 22 +22 C 21 23 15 22 21 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 13 25 0 26 +26 G 25 27 12 26 25 27 +27 T 26 28 11 27 26 28 +28 G 27 29 10 28 27 29 +29 A 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.009 candidate_21781230 pos=16:9163168-9163208 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 15 5 4 6 +6 A 5 7 14 6 5 7 +7 A 6 8 13 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 7 13 0 14 +14 T 13 15 6 14 13 15 +15 G 14 16 5 15 14 16 +16 A 15 17 0 16 15 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.469 candidate_21784795 pos=16:70191491-70191531 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 C 14 16 25 15 14 16 +16 C 15 17 24 16 15 17 +17 G 16 18 23 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 17 23 0 24 +24 G 23 25 16 24 23 25 +25 G 24 26 15 25 24 26 +26 A 25 27 0 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.911 candidate_21785278 pos=16:96178155-96178195 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 17 +17 C 16 18 24 17 16 18 +18 C 17 19 23 18 17 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 18 23 0 24 +24 G 23 25 17 24 23 25 +25 A 24 26 0 25 24 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 28 +28 A 27 29 40 28 27 29 +29 G 28 30 39 29 28 30 +30 G 29 31 38 30 29 31 +31 C 30 32 37 31 30 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 31 37 0 38 +38 C 37 39 30 38 37 39 +39 C 38 40 29 39 38 40 +40 T 39 0 28 40 39 0 +40 dG = 0.241 candidate_21785540 pos=16:88192867-88192907 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 22 8 7 9 +9 A 8 10 21 9 8 10 +10 C 9 11 20 10 9 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 10 20 0 21 +21 T 20 22 9 21 20 22 +22 T 21 23 8 22 21 23 +23 A 22 24 0 23 22 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.875 candidate_21790463 pos=16:73187251-73187291 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 18 +18 G 17 19 35 18 17 19 +19 A 18 20 34 19 18 20 +20 A 19 21 33 20 19 21 +21 T 20 22 32 21 20 22 +22 G 21 23 31 22 21 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 22 31 0 32 +32 A 31 33 21 32 31 33 +33 T 32 34 20 33 32 34 +34 T 33 35 19 34 33 35 +35 C 34 36 18 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.193 candidate_21791592 pos=16:61181111-61181151 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 34 10 9 11 +11 A 10 12 33 11 10 12 +12 G 11 13 32 12 11 13 +13 G 12 14 31 13 12 14 +14 G 13 15 30 14 13 0 +15 A 14 16 25 15 0 16 +16 G 15 17 24 16 15 17 +17 G 16 18 23 17 16 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 17 23 0 24 +24 C 23 25 16 24 23 25 +25 T 24 26 15 25 24 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 14 30 0 31 +31 C 30 32 13 31 30 32 +32 C 31 33 12 32 31 33 +33 T 32 34 11 33 32 34 +34 G 33 35 10 34 33 35 +35 G 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.582 candidate_21792153 pos=16:20134652-20134692 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 36 9 8 10 +10 C 9 11 35 10 9 11 +11 A 10 12 34 11 10 12 +12 G 11 13 33 12 11 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 12 33 0 34 +34 T 33 35 11 34 33 35 +35 G 34 36 10 35 34 36 +36 T 35 37 9 36 35 37 +37 A 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.834 candidate_21792914 pos=16:22154266-22154306 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 13 4 3 5 +5 C 4 6 12 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 5 12 0 13 +13 T 12 14 4 13 12 14 +14 A 13 15 0 14 13 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -5.818 candidate_21793507 pos=16:11160012-11160052 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 25 10 9 11 +11 A 10 12 24 11 10 12 +12 G 11 13 23 12 11 13 +13 T 12 14 22 13 12 14 +14 G 13 15 21 14 13 15 +15 C 14 16 20 15 14 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 15 20 0 21 +21 C 20 22 14 21 20 22 +22 A 21 23 13 22 21 23 +23 C 22 24 12 23 22 24 +24 T 23 25 11 24 23 25 +25 G 24 26 10 25 24 26 +26 G 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.011 candidate_21795805 pos=16:14150563-14150603 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 24 +24 G 23 25 36 24 23 25 +25 A 24 26 35 25 24 26 +26 G 25 27 34 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 26 34 0 35 +35 T 34 36 25 35 34 36 +36 C 35 37 24 36 35 37 +37 T 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.002 candidate_21797204 pos=16:6123369-6123409 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 30 10 9 11 +11 A 10 12 29 11 10 12 +12 T 11 13 28 12 11 13 +13 C 12 14 27 13 12 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 13 27 0 28 +28 A 27 29 12 28 27 29 +29 T 28 30 11 29 28 30 +30 G 29 31 10 30 29 31 +31 G 30 32 0 31 30 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.715 candidate_21798346 pos=16:83195310-83195350 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 20 10 9 11 +11 A 10 12 19 11 10 12 +12 T 11 13 18 12 11 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 12 18 0 19 +19 T 18 20 11 19 18 20 +20 G 19 21 10 20 19 21 +21 G 20 22 0 21 20 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 C 24 26 38 25 24 26 +26 C 25 27 37 26 25 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 26 37 0 38 +38 G 37 39 25 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -0.509 candidate_21806808 pos=16:36186937-36186977 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 C 23 25 36 24 23 25 +25 A 24 26 35 25 24 26 +26 G 25 27 34 26 25 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 26 34 0 35 +35 T 34 36 25 35 34 36 +36 G 35 37 24 36 35 37 +37 G 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.157 candidate_21808115 pos=16:44115256-44115296 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 38 5 4 6 +6 A 5 7 37 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 35 9 0 10 +10 C 9 11 34 10 9 11 +11 C 10 12 33 11 10 12 +12 A 11 13 32 12 11 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 12 32 0 33 +33 G 32 34 11 33 32 34 +34 G 33 35 10 34 33 35 +35 T 34 36 9 35 34 0 +36 A 35 37 0 36 0 0 +37 T 36 38 6 37 0 38 +38 G 37 39 5 38 37 39 +39 A 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -1.632 candidate_21808347 pos=16:39121119-39121159 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 C 26 28 38 27 26 28 +28 A 27 29 37 28 27 29 +29 A 28 30 36 29 28 30 +30 G 29 31 35 30 29 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 30 35 0 36 +36 T 35 37 29 36 35 37 +37 T 36 38 28 37 36 38 +38 G 37 39 27 38 37 39 +39 T 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -4.895 candidate_21814235 pos=16:91158849-91158889 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 39 10 9 11 +11 C 10 12 38 11 10 12 +12 A 11 13 37 12 11 13 +13 C 12 14 36 13 12 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 35 21 0 22 +22 C 21 23 34 22 21 23 +23 A 22 24 33 23 22 24 +24 A 23 25 32 24 23 25 +25 G 24 26 31 25 24 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 25 31 0 32 +32 T 31 33 24 32 31 33 +33 T 32 34 23 33 32 34 +34 G 33 35 22 34 33 35 +35 G 34 36 21 35 34 0 +36 G 35 37 13 36 0 37 +37 T 36 38 12 37 36 38 +38 G 37 39 11 38 37 39 +39 G 38 40 10 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -2.204 candidate_21814624 pos=16:18106422-18106462 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 38 20 19 21 +21 C 20 22 37 21 20 22 +22 C 21 23 36 22 21 0 +23 A 22 24 33 23 0 24 +24 C 23 25 32 24 23 25 +25 A 24 26 31 25 24 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 25 31 0 32 +32 G 31 33 24 32 31 33 +33 T 32 34 23 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 22 36 0 37 +37 G 36 38 21 37 36 38 +38 C 37 39 20 38 37 39 +39 A 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -0.789 candidate_21815172 pos=16:53106595-53106635 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 34 +34 G 33 35 40 34 33 35 +35 G 34 36 39 35 34 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 35 39 0 40 +40 C 39 0 34 40 39 0 +40 dG = -0.384 candidate_21815808 pos=16:22192173-22192213 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 G 12 14 30 13 12 14 +14 G 13 15 29 14 13 15 +15 A 14 16 28 15 14 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 26 18 0 19 +19 T 18 20 25 19 18 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 19 25 0 26 +26 C 25 27 18 26 25 0 +27 C 26 28 0 27 0 0 +28 T 27 29 15 28 0 29 +29 C 28 30 14 29 28 30 +30 C 29 31 13 30 29 31 +31 A 30 32 0 31 30 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.722 candidate_21817435 pos=16:6147636-6147676 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 24 10 9 11 +11 C 10 12 23 11 10 12 +12 A 11 13 22 12 11 13 +13 T 12 14 21 13 12 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 13 21 0 22 +22 T 21 23 12 22 21 23 +23 G 22 24 11 23 22 24 +24 G 23 25 10 24 23 25 +25 A 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.284 candidate_21822694 pos=16:22131297-22131337 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 33 24 23 25 +25 C 24 26 32 25 24 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 25 32 0 33 +33 C 32 34 24 33 32 34 +34 C 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -4.574 candidate_21822783 pos=16:41170402-41170442 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 40 8 7 9 +9 A 8 10 39 9 8 10 +10 C 9 11 38 10 9 11 +11 C 10 12 37 11 10 12 +12 C 11 13 36 12 11 13 +13 C 12 14 35 13 12 14 +14 A 13 15 34 14 13 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 14 34 0 35 +35 G 34 36 13 35 34 36 +36 G 35 37 12 36 35 37 +37 G 36 38 11 37 36 38 +38 G 37 39 10 38 37 39 +39 T 38 40 9 39 38 40 +40 T 39 0 8 40 39 0 +40 dG = 0.584 candidate_21823349 pos=16:97153091-97153131 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 26 +26 G 25 27 32 26 25 27 +27 C 26 28 31 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 27 31 0 32 +32 C 31 33 26 32 31 33 +33 C 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.232 candidate_21823586 pos=16:6111442-6111482 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 30 +30 C 29 31 40 30 29 31 +31 C 30 32 39 31 30 32 +32 C 31 33 38 32 31 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 G 37 39 32 38 0 39 +39 G 38 40 31 39 38 40 +40 G 39 0 30 40 39 0 +40 dG = 0.044 candidate_21824607 pos=16:76195417-76195457 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 32 +32 C 31 33 39 32 31 33 +33 C 32 34 38 33 32 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 33 38 0 39 +39 G 38 40 32 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -3.011 candidate_21824874 pos=16:23161164-23161204 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 38 5 4 6 +6 A 5 7 37 6 5 7 +7 A 6 8 36 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 33 9 0 10 +10 C 9 11 32 10 9 11 +11 C 10 12 31 11 10 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 30 16 0 17 +17 C 16 18 29 17 16 18 +18 T 17 19 28 18 17 19 +19 T 18 20 27 19 18 20 +20 G 19 21 26 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 20 26 0 27 +27 A 26 28 19 27 26 28 +28 A 27 29 18 28 27 29 +29 G 28 30 17 29 28 30 +30 A 29 31 16 30 29 0 +31 G 30 32 11 31 0 32 +32 G 31 33 10 32 31 33 +33 T 32 34 9 33 32 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 7 36 0 37 +37 T 36 38 6 37 36 38 +38 G 37 39 5 38 37 39 +39 G 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -5.103 candidate_21825189 pos=16:33142000-33142040 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 22 6 5 7 +7 A 6 8 21 7 6 8 +8 A 7 9 20 8 7 9 +9 A 8 10 19 9 8 10 +10 C 9 11 18 10 9 11 +11 C 10 12 17 11 10 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 11 17 0 18 +18 G 17 19 10 18 17 19 +19 T 18 20 9 19 18 20 +20 T 19 21 8 20 19 21 +21 T 20 22 7 21 20 22 +22 T 21 23 6 22 21 23 +23 C 22 24 0 23 22 0 +24 C 23 25 0 24 0 25 +25 G 24 26 39 25 24 26 +26 A 25 27 38 26 25 27 +27 C 26 28 37 27 26 28 +28 T 27 29 36 28 27 29 +29 T 28 30 35 29 28 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 29 35 0 36 +36 A 35 37 28 36 35 37 +37 G 36 38 27 37 36 38 +38 T 37 39 26 38 37 39 +39 C 38 40 25 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.922 candidate_21826337 pos=16:15154703-15154743 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 16 3 2 4 +4 A 3 5 15 4 3 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 T 12 14 6 13 0 14 +14 G 13 15 5 14 13 15 +15 T 14 16 4 15 14 16 +16 T 15 17 3 16 15 17 +17 G 16 18 0 17 16 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.626 candidate_21829358 pos=16:38192572-38192612 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 36 4 3 5 +5 C 4 6 35 5 4 6 +6 A 5 7 34 6 5 7 +7 A 6 8 33 7 6 8 +8 A 7 9 32 8 7 9 +9 A 8 10 0 9 8 0 +10 C 9 11 0 10 0 11 +11 C 10 12 28 11 10 12 +12 T 11 13 27 12 11 13 +13 G 12 14 26 13 12 0 +14 G 13 15 0 14 0 0 +15 C 14 16 23 15 0 16 +16 T 15 17 22 16 15 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 16 22 0 23 +23 G 22 24 15 23 22 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 13 26 0 27 +27 A 26 28 12 27 26 28 +28 G 27 29 11 28 27 29 +29 T 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 32 +32 T 31 33 8 32 31 33 +33 T 32 34 7 33 32 34 +34 T 33 35 6 34 33 35 +35 G 34 36 5 35 34 36 +36 T 35 37 4 36 35 37 +37 C 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.67 candidate_21833371 pos=16:69120689-69120729 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 39 9 8 10 +10 C 9 11 38 10 9 0 +11 G 10 12 0 11 0 0 +12 A 11 13 36 12 0 13 +13 T 12 14 35 13 12 14 +14 G 13 15 34 14 13 15 +15 T 14 16 33 15 14 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 15 33 0 34 +34 C 33 35 14 34 33 35 +35 A 34 36 13 35 34 36 +36 T 35 37 12 36 35 0 +37 G 36 38 0 37 0 0 +38 G 37 39 10 38 0 39 +39 T 38 40 9 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -1.179 candidate_21834136 pos=16:90170058-90170098 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 27 10 9 11 +11 G 10 12 26 11 10 12 +12 G 11 13 25 12 11 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 12 25 0 26 +26 C 25 27 11 26 25 27 +27 G 26 28 10 27 26 28 +28 C 27 29 0 28 27 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.249 candidate_21834208 pos=16:73144766-73144806 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 G 26 28 37 27 26 28 +28 G 27 29 36 28 27 29 +29 A 28 30 35 29 28 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 29 35 0 36 +36 C 35 37 28 36 35 37 +37 C 36 38 27 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.126 candidate_21834785 pos=16:27141570-27141610 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 20 +20 C 19 21 26 20 19 21 +21 A 20 22 25 21 20 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 21 25 0 26 +26 G 25 27 20 26 25 27 +27 A 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 1.524 candidate_21838028 pos=16:4109470-4109510 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 18 +18 C 17 19 33 18 17 19 +19 A 18 20 32 19 18 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 19 32 0 33 +33 G 32 34 18 33 32 34 +34 A 33 35 0 34 33 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.874 candidate_21838265 pos=16:70179074-70179114 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 22 13 12 14 +14 A 13 15 21 14 13 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 14 21 0 22 +22 G 21 23 13 22 21 23 +23 C 22 24 0 23 22 0 +24 C 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.577 candidate_21838416 pos=16:31102444-31102484 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 40 13 12 14 +14 A 13 15 39 14 13 15 +15 C 14 16 38 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 36 17 0 18 +18 C 17 19 35 18 17 19 +19 A 18 20 34 19 18 0 +20 C 19 21 0 20 0 0 +21 G 20 22 32 21 0 22 +22 G 21 23 31 22 21 23 +23 A 22 24 30 23 22 24 +24 A 23 25 29 24 23 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 24 29 0 30 +30 T 29 31 23 30 29 31 +31 C 30 32 22 31 30 32 +32 T 31 33 21 32 31 0 +33 C 32 34 0 33 0 0 +34 T 33 35 19 34 0 35 +35 G 34 36 18 35 34 36 +36 T 35 37 17 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 15 38 0 39 +39 T 38 40 14 39 38 40 +40 G 39 0 13 40 39 0 +40 dG = -0.895 candidate_21839431 pos=16:24135799-24135839 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 18 8 7 9 +9 A 8 10 17 9 8 10 +10 C 9 11 16 10 9 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 10 16 0 17 +17 T 16 18 9 17 16 18 +18 T 17 19 8 18 17 19 +19 C 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 27 +27 G 26 28 35 27 26 28 +28 G 27 29 34 28 27 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 28 34 0 35 +35 C 34 36 27 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.055 candidate_21841895 pos=16:90136413-90136453 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 26 10 9 11 +11 T 10 12 25 11 10 12 +12 C 11 13 24 12 11 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 12 24 0 25 +25 A 24 26 11 25 24 26 +26 G 25 27 10 26 25 27 +27 C 26 28 0 27 26 0 +28 A 27 29 0 28 0 29 +29 C 28 30 36 29 28 30 +30 C 29 31 35 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 30 35 0 36 +36 G 35 37 29 36 35 37 +37 A 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.541 candidate_21842556 pos=16:68125708-68125748 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 40 8 7 9 +9 A 8 10 39 9 8 10 +10 C 9 11 38 10 9 11 +11 T 10 12 37 11 10 12 +12 C 11 13 36 12 11 13 +13 A 12 14 35 13 12 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 13 35 0 36 +36 G 35 37 12 36 35 37 +37 A 36 38 11 37 36 38 +38 G 37 39 10 38 37 39 +39 T 38 40 9 39 38 40 +40 T 39 0 8 40 39 0 +40 dG = 0.761 candidate_21842776 pos=16:14112129-14112169 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 26 +26 C 25 27 40 26 25 27 +27 C 26 28 39 27 26 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 27 39 0 40 +40 G 39 0 26 40 39 0 +40 dG = -1.638 candidate_21844822 pos=16:40101009-40101049 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 16 4 3 5 +5 C 4 6 15 5 4 6 +6 A 5 7 14 6 5 7 +7 A 6 8 13 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 7 13 0 14 +14 T 13 15 6 14 13 15 +15 G 14 16 5 15 14 16 +16 T 15 17 4 16 15 17 +17 G 16 18 0 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 C 21 23 29 22 21 23 +23 A 22 24 28 23 22 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 23 28 0 29 +29 G 28 30 22 29 28 30 +30 A 29 31 0 30 29 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.782 candidate_21846752 pos=16:94180536-94180576 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 25 +25 A 24 26 38 25 24 26 +26 G 25 27 37 26 25 27 +27 G 26 28 36 27 26 28 +28 C 27 29 35 28 27 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 28 35 0 36 +36 C 35 37 27 36 35 37 +37 C 36 38 26 37 36 38 +38 T 37 39 25 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -3.397 candidate_21847087 pos=16:43126388-43126428 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 36 20 19 21 +21 C 20 22 35 21 20 0 +22 T 21 23 0 22 0 0 +23 T 22 24 33 23 0 24 +24 G 23 25 32 24 23 25 +25 C 24 26 31 25 24 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 G 30 32 25 31 0 32 +32 C 31 33 24 32 31 33 +33 A 32 34 23 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 21 35 0 36 +36 G 35 37 20 36 35 37 +37 A 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.906 candidate_21848800 pos=16:84137050-84137090 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 27 5 4 6 +6 A 5 7 26 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 24 8 0 9 +9 A 8 10 23 9 8 10 +10 C 9 11 22 10 9 11 +11 T 10 12 21 11 10 12 +12 G 11 13 20 12 11 13 +13 T 12 14 19 13 12 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 13 19 0 20 +20 T 19 21 12 20 19 21 +21 A 20 22 11 21 20 22 +22 G 21 23 10 22 21 23 +23 T 22 24 9 23 22 24 +24 T 23 25 8 24 23 0 +25 G 24 26 0 25 0 0 +26 T 25 27 6 26 0 27 +27 G 26 28 5 27 26 28 +28 A 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.469 candidate_21849939 pos=16:90133192-90133232 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 G 24 26 33 25 24 26 +26 T 25 27 32 26 25 27 +27 G 26 28 31 27 26 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 27 31 0 32 +32 A 31 33 26 32 31 33 +33 C 32 34 25 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.676 candidate_21851787 pos=16:14185388-14185428 +1 A 0 2 0 1 0 2 +2 A 1 3 16 2 1 3 +3 A 2 4 15 3 2 0 +4 A 3 5 0 4 0 0 +5 C 4 6 13 5 0 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 0 +14 G 13 15 0 14 0 0 +15 T 14 16 3 15 0 16 +16 T 15 17 2 16 15 17 +17 A 16 18 0 17 16 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 21 +21 G 20 22 39 21 20 22 +22 T 21 23 38 22 21 23 +23 T 22 24 37 23 22 24 +24 C 23 25 36 24 23 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 24 36 0 37 +37 A 36 38 23 37 36 38 +38 A 37 39 22 38 37 39 +39 C 38 40 21 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -1.225 candidate_21852077 pos=16:32162767-32162807 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 G 17 19 40 18 17 19 +19 G 18 20 39 19 18 20 +20 G 19 21 38 20 19 21 +21 T 20 22 37 21 20 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 21 37 0 38 +38 C 37 39 20 38 37 39 +39 C 38 40 19 39 38 40 +40 C 39 0 18 40 39 0 +40 dG = -0.929 candidate_21852860 pos=16:63108540-63108580 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 15 +15 G 14 16 0 15 14 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.462 candidate_21856056 pos=16:17181427-17181467 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 30 +30 T 29 31 40 30 29 31 +31 C 30 32 39 31 30 32 +32 T 31 33 38 32 31 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 32 38 0 39 +39 G 38 40 31 39 38 40 +40 A 39 0 30 40 39 0 +40 dG = 0.141 candidate_21858474 pos=16:22172199-22172239 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 18 +18 A 17 19 37 18 17 19 +19 G 18 20 36 19 18 20 +20 G 19 21 35 20 19 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 20 35 0 36 +36 C 35 37 19 36 35 37 +37 T 36 38 18 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.335 candidate_21858525 pos=16:29165094-29165134 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 G 9 11 18 10 9 11 +11 A 10 12 17 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 11 17 0 18 +18 C 17 19 10 18 17 19 +19 A 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 28 +28 C 27 29 38 28 27 29 +29 A 28 30 37 29 28 30 +30 G 29 31 36 30 29 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 30 36 0 37 +37 T 36 38 29 37 36 38 +38 G 37 39 28 38 37 39 +39 A 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -0.056 candidate_21859959 pos=16:50118068-50118108 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 22 +22 G 21 23 31 22 21 23 +23 G 22 24 30 23 22 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 23 30 0 31 +31 C 30 32 22 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.526 candidate_21863612 pos=16:17180243-17180283 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 28 7 6 8 +8 A 7 9 27 8 7 9 +9 A 8 10 26 9 8 10 +10 G 9 11 25 10 9 11 +11 A 10 12 24 11 10 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 21 14 0 15 +15 G 14 16 20 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 15 20 0 21 +21 A 20 22 14 21 20 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 11 24 0 25 +25 C 24 26 10 25 24 26 +26 T 25 27 9 26 25 27 +27 T 26 28 8 27 26 28 +28 T 27 29 7 28 27 29 +29 G 28 30 0 29 28 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.492 candidate_21864202 pos=16:84196585-84196625 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 16 +16 A 15 17 29 16 15 17 +17 C 16 18 28 17 16 18 +18 T 17 19 27 18 17 19 +19 G 18 20 26 19 18 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 19 26 0 27 +27 A 26 28 18 27 26 28 +28 G 27 29 17 28 27 29 +29 T 28 30 16 29 28 30 +30 A 29 31 0 30 29 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.008 candidate_21864435 pos=16:8132196-8132236 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 22 9 8 10 +10 G 9 11 21 10 9 11 +11 A 10 12 20 11 10 12 +12 A 11 13 19 12 11 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 12 19 0 20 +20 T 19 21 11 20 19 21 +21 C 20 22 10 21 20 22 +22 T 21 23 9 22 21 23 +23 C 22 24 0 23 22 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 28 +28 C 27 29 35 28 27 29 +29 C 28 30 34 29 28 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 29 34 0 35 +35 G 34 36 28 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.238 candidate_21866061 pos=16:42197679-42197719 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 T 12 14 36 13 12 14 +14 G 13 15 35 14 13 15 +15 G 14 16 34 15 14 16 +16 A 15 17 33 16 15 17 +17 G 16 18 32 17 16 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 17 32 0 33 +33 T 32 34 16 33 32 34 +34 C 33 35 15 34 33 35 +35 C 34 36 14 35 34 36 +36 A 35 37 13 36 35 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.349 candidate_21866445 pos=16:80127300-80127340 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 G 9 11 20 10 9 11 +11 A 10 12 19 11 10 12 +12 A 11 13 18 12 11 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 12 18 0 19 +19 T 18 20 11 19 18 20 +20 C 19 21 10 20 19 21 +21 C 20 22 0 21 20 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.572 candidate_21868748 pos=16:96107225-96107265 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 A 10 12 22 11 10 12 +12 C 11 13 21 12 11 13 +13 C 12 14 20 13 12 14 +14 A 13 15 19 14 13 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 14 19 0 20 +20 G 19 21 13 20 19 21 +21 G 20 22 12 21 20 22 +22 T 21 23 11 22 21 23 +23 G 22 24 0 23 22 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.806 candidate_21868751 pos=16:44165904-44165944 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 21 +21 C 20 22 28 21 20 22 +22 A 21 23 27 22 21 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 22 27 0 28 +28 G 27 29 21 28 27 29 +29 T 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -5.143 candidate_21871569 pos=16:24108671-24108711 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 A 10 12 23 11 10 12 +12 G 11 13 22 12 11 13 +13 C 12 14 21 13 12 14 +14 A 13 15 20 14 13 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 14 20 0 21 +21 G 20 22 13 21 20 22 +22 C 21 23 12 22 21 23 +23 T 22 24 11 23 22 0 +24 C 23 25 37 24 0 25 +25 A 24 26 36 25 24 26 +26 G 25 27 35 26 25 27 +27 G 26 28 34 27 26 28 +28 T 27 29 33 28 27 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 28 33 0 34 +34 C 33 35 27 34 33 35 +35 C 34 36 26 35 34 36 +36 T 35 37 25 36 35 37 +37 G 36 38 24 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.226 candidate_21872058 pos=16:17195497-17195537 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 33 24 23 25 +25 C 24 26 32 25 24 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 25 32 0 33 +33 C 32 34 24 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.144 candidate_21872220 pos=16:14180132-14180172 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 G 26 28 35 27 26 28 +28 T 27 29 34 28 27 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 28 34 0 35 +35 C 34 36 27 35 34 36 +36 A 35 37 0 36 35 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.554 candidate_21872467 pos=16:47181497-47181537 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 14 +14 G 13 15 30 14 13 15 +15 C 14 16 29 15 14 0 +16 T 15 17 0 16 0 0 +17 C 16 18 26 17 0 18 +18 T 17 19 25 18 17 19 +19 G 18 20 24 19 18 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 19 24 0 25 +25 A 24 26 18 25 24 26 +26 G 25 27 17 26 25 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 15 29 0 30 +30 C 29 31 14 30 29 31 +31 T 30 32 0 31 30 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.062 candidate_21872626 pos=16:43122088-43122128 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 G 26 28 39 27 26 28 +28 C 27 29 38 28 27 29 +29 A 28 30 37 29 28 30 +30 G 29 31 36 30 29 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 30 36 0 37 +37 T 36 38 29 37 36 38 +38 G 37 39 28 38 37 39 +39 C 38 40 27 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = 0.494 candidate_21874668 pos=16:6176861-6176901 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 17 9 8 10 +10 G 9 11 16 10 9 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 10 16 0 17 +17 T 16 18 9 17 16 18 +18 A 17 19 0 18 17 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.036 candidate_21875152 pos=16:18106130-18106170 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 G 13 15 0 14 13 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.847 candidate_21875178 pos=16:44178494-44178534 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 T 11 13 26 12 11 13 +13 G 12 14 25 13 12 0 +14 G 13 15 0 14 0 0 +15 C 14 16 23 15 0 16 +16 A 15 17 22 16 15 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 16 22 0 23 +23 G 22 24 15 23 22 0 +24 A 23 25 0 24 0 0 +25 C 24 26 13 25 0 26 +26 A 25 27 12 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.809 candidate_21875790 pos=16:78106632-78106672 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 31 +31 G 30 32 39 31 30 32 +32 G 31 33 38 32 31 33 +33 T 32 34 37 33 32 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 33 37 0 38 +38 C 37 39 32 38 37 39 +39 C 38 40 31 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -1.092 candidate_21875941 pos=16:66143845-66143885 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 G 9 11 20 10 9 11 +11 A 10 12 19 11 10 12 +12 T 11 13 18 12 11 13 +13 T 12 14 17 13 12 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 13 17 0 18 +18 A 17 19 12 18 17 19 +19 T 18 20 11 19 18 20 +20 C 19 21 10 20 19 21 +21 C 20 22 0 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.831 candidate_21875958 pos=16:43193506-43193546 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 15 +15 G 14 16 0 15 14 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 20 +20 C 19 21 38 20 19 21 +21 A 20 22 37 21 20 22 +22 C 21 23 36 22 21 23 +23 T 22 24 35 23 22 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 23 35 0 36 +36 G 35 37 22 36 35 37 +37 T 36 38 21 37 36 38 +38 G 37 39 20 38 37 39 +39 G 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -2.156 candidate_21877901 pos=16:35139947-35139987 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 35 4 3 5 +5 C 4 6 34 5 4 6 +6 A 5 7 33 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 30 9 0 10 +10 G 9 11 29 10 9 11 +11 C 10 12 28 11 10 12 +12 A 11 13 27 12 11 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 12 27 0 28 +28 G 27 29 11 28 27 29 +29 C 28 30 10 29 28 30 +30 T 29 31 9 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 6 33 0 34 +34 G 33 35 5 34 33 35 +35 T 34 36 4 35 34 36 +36 G 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 2.074 candidate_21880075 pos=16:92131398-92131438 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 26 +26 A 25 27 33 26 25 27 +27 T 26 28 32 27 26 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 27 32 0 33 +33 T 32 34 26 33 32 34 +34 C 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.348 candidate_21880288 pos=16:68164199-68164239 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 16 +16 C 15 17 38 16 15 17 +17 T 16 18 37 17 16 18 +18 G 17 19 36 18 17 19 +19 T 18 20 35 19 18 20 +20 T 19 21 34 20 19 21 +21 G 20 22 33 21 20 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 21 33 0 34 +34 A 33 35 20 34 33 35 +35 A 34 36 19 35 34 36 +36 C 35 37 18 36 35 37 +37 A 36 38 17 37 36 38 +38 G 37 39 16 38 37 39 +39 T 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -2.038 candidate_21881395 pos=16:39190074-39190114 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 29 13 12 14 +14 T 13 15 28 14 13 15 +15 C 14 16 27 15 14 16 +16 T 15 17 26 16 15 17 +17 A 16 18 25 17 16 18 +18 A 17 19 24 18 17 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 18 24 0 25 +25 T 24 26 17 25 24 26 +26 A 25 27 16 26 25 27 +27 G 26 28 15 27 26 28 +28 G 27 29 14 28 27 29 +29 G 28 30 13 29 28 30 +30 A 29 31 0 30 29 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.334 candidate_21882598 pos=16:20162935-20162975 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 21 +21 C 20 22 28 21 20 22 +22 A 21 23 27 22 21 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 22 27 0 28 +28 G 27 29 21 28 27 29 +29 T 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.546 candidate_21883244 pos=16:96178942-96178982 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 32 3 2 4 +4 A 3 5 31 4 3 5 +5 C 4 6 30 5 4 6 +6 A 5 7 29 6 5 7 +7 A 6 8 28 7 6 0 +8 A 7 9 23 8 0 9 +9 A 8 10 22 9 8 10 +10 G 9 11 21 10 9 11 +11 C 10 12 20 11 10 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 11 20 0 21 +21 C 20 22 10 21 20 22 +22 T 21 23 9 22 21 23 +23 T 22 24 8 23 22 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 7 28 0 29 +29 T 28 30 6 29 28 30 +30 G 29 31 5 30 29 31 +31 T 30 32 4 31 30 32 +32 T 31 33 3 32 31 33 +33 G 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -5.968 candidate_21883970 pos=16:33164535-33164575 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 C 10 12 26 11 10 12 +12 C 11 13 25 12 11 13 +13 A 12 14 24 13 12 14 +14 A 13 15 23 14 13 15 +15 C 14 16 22 15 14 16 +16 C 15 17 21 16 15 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 16 21 0 22 +22 G 21 23 15 22 21 23 +23 T 22 24 14 23 22 24 +24 T 23 25 13 24 23 25 +25 G 24 26 12 25 24 26 +26 G 25 27 11 26 25 27 +27 A 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.884 candidate_21884557 pos=16:65100610-65100650 +1 A 0 2 0 1 0 2 +2 A 1 3 22 2 1 3 +3 A 2 4 21 3 2 4 +4 A 3 5 20 4 3 5 +5 C 4 6 19 5 4 6 +6 A 5 7 18 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 6 18 0 19 +19 G 18 20 5 19 18 20 +20 T 19 21 4 20 19 21 +21 T 20 22 3 21 20 22 +22 T 21 23 2 22 21 23 +23 C 22 24 0 23 22 0 +24 C 23 25 0 24 0 25 +25 C 24 26 35 25 24 26 +26 T 25 27 34 26 25 27 +27 G 26 28 33 27 26 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 27 33 0 34 +34 A 33 35 26 34 33 35 +35 G 34 36 25 35 34 36 +36 T 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.409 candidate_21884633 pos=16:5196409-5196449 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 C 10 12 31 11 10 12 +12 C 11 13 30 12 11 13 +13 A 12 14 29 13 12 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 13 29 0 30 +30 G 29 31 12 30 29 31 +31 G 30 32 11 31 30 32 +32 A 31 33 0 32 31 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.109 candidate_21884867 pos=16:73131946-73131986 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 C 10 12 35 11 10 12 +12 C 11 13 34 12 11 13 +13 A 12 14 33 13 12 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 13 33 0 34 +34 G 33 35 12 34 33 35 +35 G 34 36 11 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.315 candidate_21885172 pos=16:29179333-29179373 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 38 4 3 5 +5 C 4 6 37 5 4 6 +6 A 5 7 36 6 5 7 +7 A 6 8 35 7 6 8 +8 A 7 9 34 8 7 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 8 34 0 35 +35 T 34 36 7 35 34 36 +36 T 35 37 6 36 35 37 +37 G 36 38 5 37 36 38 +38 T 37 39 4 38 37 39 +39 G 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -3.304 candidate_21887125 pos=16:51197616-51197656 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 C 10 12 40 11 10 12 +12 T 11 13 39 12 11 13 +13 A 12 14 38 13 12 14 +14 C 13 15 37 14 13 15 +15 A 14 16 36 15 14 16 +16 T 15 17 35 16 15 17 +17 G 16 18 34 17 16 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 17 34 0 35 +35 A 34 36 16 35 34 36 +36 T 35 37 15 36 35 37 +37 G 36 38 14 37 36 38 +38 T 37 39 13 38 37 39 +39 A 38 40 12 39 38 40 +40 G 39 0 11 40 39 0 +40 dG = -0.562 candidate_21888142 pos=16:57184506-57184546 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 G 12 14 31 13 12 14 +14 C 13 15 30 14 13 15 +15 A 14 16 29 15 14 16 +16 A 15 17 0 16 15 0 +17 T 16 18 0 17 0 18 +18 A 17 19 25 18 17 19 +19 G 18 20 24 19 18 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 19 24 0 25 +25 T 24 26 18 25 24 26 +26 C 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 29 +29 T 28 30 15 29 28 30 +30 G 29 31 14 30 29 31 +31 C 30 32 13 31 30 32 +32 C 31 33 0 32 31 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.936 candidate_21888583 pos=16:8147690-8147730 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 A 8 10 40 9 8 10 +10 G 9 11 39 10 9 11 +11 C 10 12 38 11 10 12 +12 T 11 13 37 12 11 13 +13 G 12 14 36 13 12 0 +14 T 13 15 0 14 0 0 +15 G 14 16 33 15 0 16 +16 T 15 17 32 16 15 17 +17 G 16 18 31 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 17 31 0 32 +32 A 31 33 16 32 31 33 +33 C 32 34 15 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 13 36 0 37 +37 A 36 38 12 37 36 38 +38 G 37 39 11 38 37 39 +39 C 38 40 10 39 38 40 +40 T 39 0 9 40 39 0 +40 dG = -2.312 candidate_21890845 pos=16:61173693-61173733 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 C 17 19 30 18 17 19 +19 A 18 20 29 19 18 20 +20 C 19 21 28 20 19 21 +21 A 20 22 27 21 20 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 21 27 0 28 +28 G 27 29 20 28 27 29 +29 T 28 30 19 29 28 30 +30 G 29 31 18 30 29 31 +31 G 30 32 0 31 30 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.538 candidate_21890879 pos=16:12137774-12137814 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 21 5 4 6 +6 A 5 7 20 6 5 7 +7 A 6 8 19 7 6 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 7 19 0 20 +20 T 19 21 6 20 19 21 +21 G 20 22 5 21 20 22 +22 A 21 23 0 22 21 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 30 +30 A 29 31 39 30 29 31 +31 G 30 32 38 31 30 32 +32 A 31 33 37 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 32 37 0 38 +38 C 37 39 31 38 37 39 +39 T 38 40 30 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -1.062 candidate_21891758 pos=16:90196260-90196300 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 21 13 12 14 +14 A 13 15 20 14 13 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 14 20 0 21 +21 G 20 22 13 21 20 22 +22 A 21 23 0 22 21 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 29 +29 C 28 30 37 29 28 30 +30 C 29 31 36 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 30 36 0 37 +37 G 36 38 29 37 36 38 +38 G 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.622 candidate_21892971 pos=16:25169626-25169666 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 23 +23 A 22 24 34 23 22 24 +24 A 23 25 33 24 23 25 +25 T 24 26 32 25 24 26 +26 T 25 27 31 26 25 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 26 31 0 32 +32 A 31 33 25 32 31 33 +33 T 32 34 24 33 32 34 +34 T 33 35 23 34 33 35 +35 G 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.226 candidate_21893541 pos=16:96106024-96106064 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 20 5 4 6 +6 A 5 7 19 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 17 8 0 9 +9 A 8 10 16 9 8 10 +10 G 9 11 15 10 9 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 10 15 0 16 +16 T 15 17 9 16 15 17 +17 T 16 18 8 17 16 0 +18 A 17 19 0 18 0 0 +19 T 18 20 6 19 0 20 +20 G 19 21 5 20 19 21 +21 G 20 22 0 21 20 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 28 +28 G 27 29 37 28 27 29 +29 A 28 30 36 29 28 30 +30 G 29 31 35 30 29 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 30 35 0 36 +36 T 35 37 29 36 35 37 +37 C 36 38 28 37 36 38 +38 A 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.042 candidate_21894666 pos=16:19131189-19131229 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 20 8 7 9 +9 A 8 10 19 9 8 10 +10 G 9 11 18 10 9 11 +11 G 10 12 17 11 10 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 11 17 0 18 +18 C 17 19 10 18 17 19 +19 T 18 20 9 19 18 20 +20 T 19 21 8 20 19 21 +21 C 20 22 0 21 20 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.608 candidate_21896771 pos=16:4154836-4154876 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 17 8 7 9 +9 A 8 10 16 9 8 10 +10 G 9 11 15 10 9 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 10 15 0 16 +16 T 15 17 9 16 15 17 +17 T 16 18 8 17 16 18 +18 A 17 19 0 18 17 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 29 +29 C 28 30 38 29 28 30 +30 A 29 31 37 30 29 31 +31 C 30 32 36 31 30 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 31 36 0 37 +37 T 36 38 30 37 36 38 +38 G 37 39 29 38 37 39 +39 A 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -0.542 candidate_21897548 pos=16:91199660-91199700 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 26 8 7 9 +9 A 8 10 25 9 8 10 +10 G 9 11 24 10 9 11 +11 G 10 12 23 11 10 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 11 23 0 24 +24 C 23 25 10 24 23 25 +25 T 24 26 9 25 24 26 +26 T 25 27 8 26 25 27 +27 C 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.152 candidate_21898022 pos=16:5142581-5142621 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 19 8 7 9 +9 A 8 10 18 9 8 10 +10 G 9 11 17 10 9 11 +11 G 10 12 16 11 10 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 11 16 0 17 +17 C 16 18 10 17 16 18 +18 T 17 19 9 18 17 19 +19 T 18 20 8 19 18 20 +20 G 19 21 0 20 19 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.988 candidate_21902275 pos=16:97126580-97126620 +1 A 0 2 15 1 0 2 +2 A 1 3 14 2 1 3 +3 A 2 4 13 3 2 4 +4 A 3 5 12 4 3 5 +5 C 4 6 11 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 5 11 0 12 +12 T 11 13 4 12 11 13 +13 T 12 14 3 13 12 14 +14 T 13 15 2 14 13 15 +15 T 14 16 1 15 14 16 +16 A 15 17 0 16 15 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.702 candidate_21904481 pos=16:51138374-51138414 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 14 +14 G 13 15 24 14 13 15 +15 A 14 16 23 15 14 16 +16 A 15 17 22 16 15 17 +17 A 16 18 21 17 16 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 17 21 0 22 +22 T 21 23 16 22 21 23 +23 T 22 24 15 23 22 24 +24 C 23 25 14 24 23 25 +25 A 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.359 candidate_21904608 pos=16:11192920-11192960 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 17 +17 G 16 18 34 17 16 18 +18 G 17 19 33 18 17 19 +19 T 18 20 32 19 18 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 19 32 0 33 +33 C 32 34 18 33 32 34 +34 C 33 35 17 34 33 35 +35 A 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.688 candidate_21909049 pos=16:17189854-17189894 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 36 8 7 9 +9 A 8 10 35 9 8 0 +10 G 9 11 0 10 0 0 +11 T 10 12 33 11 0 12 +12 G 11 13 32 12 11 0 +13 G 12 14 0 13 0 0 +14 T 13 15 30 14 0 15 +15 G 14 16 29 15 14 16 +16 A 15 17 28 16 15 17 +17 G 16 18 27 17 16 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 17 27 0 28 +28 T 27 29 16 28 27 29 +29 C 28 30 15 29 28 30 +30 A 29 31 14 30 29 0 +31 A 30 32 0 31 0 0 +32 C 31 33 12 32 0 33 +33 A 32 34 11 33 32 0 +34 G 33 35 0 34 0 0 +35 T 34 36 9 35 0 36 +36 T 35 37 8 36 35 37 +37 A 36 38 0 37 36 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.202 candidate_21909100 pos=16:22147477-22147517 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 G 9 11 31 10 9 11 +11 T 10 12 30 11 10 12 +12 G 11 13 29 12 11 13 +13 T 12 14 28 13 12 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 13 28 0 29 +29 C 28 30 12 29 28 30 +30 A 29 31 11 30 29 31 +31 C 30 32 10 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.236 candidate_21911224 pos=16:21183507-21183547 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 G 13 15 0 14 13 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.722 candidate_21915805 pos=16:6147626-6147666 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 34 20 19 21 +21 C 20 22 33 21 20 22 +22 A 21 23 32 22 21 23 +23 T 22 24 31 23 22 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 23 31 0 32 +32 T 31 33 22 32 31 33 +33 G 32 34 21 33 32 34 +34 G 33 35 20 34 33 35 +35 A 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.384 candidate_21920282 pos=16:32187546-32187586 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 G 24 26 38 25 24 26 +26 C 25 27 37 26 25 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 26 37 0 38 +38 C 37 39 25 38 37 39 +39 C 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -1.332 candidate_21924434 pos=16:72152772-72152812 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 33 13 12 14 +14 C 13 15 32 14 13 15 +15 A 14 16 31 15 14 16 +16 G 15 17 30 16 15 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 16 30 0 31 +31 T 30 32 15 31 30 32 +32 G 31 33 14 32 31 33 +33 G 32 34 13 33 32 34 +34 C 33 35 0 34 33 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.439 candidate_21925638 pos=16:24143294-24143334 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 16 +16 G 15 17 26 16 15 17 +17 G 16 18 25 17 16 18 +18 T 17 19 24 18 17 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 18 24 0 25 +25 C 24 26 17 25 24 26 +26 C 25 27 16 26 25 27 +27 T 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.154 candidate_21939090 pos=16:28155420-28155460 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 T 11 13 22 12 11 13 +13 G 12 14 21 13 12 14 +14 C 13 15 20 14 13 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 14 20 0 21 +21 C 20 22 13 21 20 22 +22 A 21 23 12 22 21 0 +23 A 22 24 0 23 0 24 +24 A 23 25 38 24 23 25 +25 C 24 26 37 25 24 26 +26 C 25 27 36 26 25 27 +27 T 26 28 35 27 26 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 27 35 0 36 +36 G 35 37 26 36 35 37 +37 G 36 38 25 37 36 38 +38 T 37 39 24 38 37 39 +39 C 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = 0.131 candidate_21943614 pos=16:78146038-78146078 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 C 15 17 38 16 15 17 +17 T 16 18 37 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 35 19 0 20 +20 A 19 21 34 20 19 0 +21 G 20 22 0 21 0 0 +22 C 21 23 31 22 0 23 +23 A 22 24 30 23 22 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 23 30 0 31 +31 G 30 32 22 31 30 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 20 34 0 35 +35 G 34 36 19 35 34 0 +36 G 35 37 0 36 0 0 +37 A 36 38 17 37 0 38 +38 G 37 39 16 38 37 39 +39 G 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = 0.308 candidate_21945865 pos=16:28149023-28149063 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 37 17 0 18 +18 G 17 19 36 18 17 19 +19 C 18 20 35 19 18 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 19 35 0 36 +36 C 35 37 18 36 35 37 +37 A 36 38 17 37 36 38 +38 A 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.316 candidate_21951625 pos=16:91185437-91185477 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 26 +26 G 25 27 34 26 25 27 +27 C 26 28 33 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 27 33 0 34 +34 C 33 35 26 34 33 35 +35 C 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.602 candidate_21951703 pos=16:54143955-54143995 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 14 +14 A 13 15 26 14 13 15 +15 C 14 16 25 15 14 16 +16 A 15 17 24 16 15 17 +17 G 16 18 23 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 17 23 0 24 +24 T 23 25 16 24 23 25 +25 G 24 26 15 25 24 26 +26 T 25 27 14 26 25 27 +27 C 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.606 candidate_21951872 pos=16:10129152-10129192 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 29 +29 G 28 30 37 29 28 30 +30 C 29 31 36 30 29 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 30 36 0 37 +37 C 36 38 29 37 36 38 +38 T 37 39 0 38 37 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.434 candidate_21955055 pos=16:28167909-28167949 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 11 5 4 6 +6 A 5 7 10 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 6 10 0 11 +11 G 10 12 5 11 10 12 +12 A 11 13 0 12 11 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.782 candidate_21956780 pos=16:91182411-91182451 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 G 13 15 39 14 13 15 +15 C 14 16 38 15 14 16 +16 C 15 17 37 16 15 17 +17 A 16 18 36 17 16 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 35 25 0 26 +26 C 25 27 34 26 25 27 +27 A 26 28 33 27 26 28 +28 C 27 29 32 28 27 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 28 32 0 33 +33 T 32 34 27 33 32 34 +34 G 33 35 26 34 33 35 +35 T 34 36 25 35 34 0 +36 T 35 37 17 36 0 37 +37 G 36 38 16 37 36 38 +38 G 37 39 15 38 37 39 +39 C 38 40 14 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -2.082 candidate_21958297 pos=16:50115922-50115962 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 A 15 17 35 16 15 17 +17 G 16 18 34 17 16 18 +18 G 17 19 33 18 17 19 +19 C 18 20 32 19 18 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 19 32 0 33 +33 C 32 34 18 33 32 34 +34 C 33 35 17 34 33 35 +35 T 34 36 16 35 34 36 +36 C 35 37 0 36 35 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.425 candidate_21959123 pos=16:17100947-17100987 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 12 +12 A 11 13 26 12 11 13 +13 G 12 14 25 13 12 14 +14 T 13 15 24 14 13 15 +15 G 14 16 23 15 14 16 +16 T 15 17 22 16 15 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 16 22 0 23 +23 C 22 24 15 23 22 24 +24 A 23 25 14 24 23 25 +25 C 24 26 13 25 24 26 +26 T 25 27 12 26 25 27 +27 A 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.865 candidate_21961679 pos=16:83169237-83169277 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 13 +13 C 12 14 32 13 12 14 +14 T 13 15 31 14 13 15 +15 T 14 16 30 15 14 16 +16 C 15 17 29 16 15 17 +17 T 16 18 28 17 16 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 17 28 0 29 +29 G 28 30 16 29 28 30 +30 A 29 31 15 30 29 31 +31 A 30 32 14 31 30 32 +32 G 31 33 13 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.118 candidate_21961983 pos=16:80154036-80154076 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 C 13 15 23 14 13 15 +15 A 14 16 22 15 14 16 +16 C 15 17 21 16 15 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 16 21 0 22 +22 T 21 23 15 22 21 23 +23 G 22 24 14 23 22 24 +24 A 23 25 0 24 23 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 27 +27 G 26 28 37 27 26 28 +28 T 27 29 36 28 27 29 +29 G 28 30 35 29 28 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 29 35 0 36 +36 A 35 37 28 36 35 37 +37 C 36 38 27 37 36 38 +38 A 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.331 candidate_21966751 pos=16:37129884-37129924 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 12 4 3 5 +5 C 4 6 11 5 4 6 +6 A 5 7 10 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 6 10 0 11 +11 G 10 12 5 11 10 12 +12 T 11 13 4 12 11 13 +13 C 12 14 0 13 12 0 +14 C 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.848 candidate_21967395 pos=16:58168778-58168818 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 T 9 11 23 10 9 11 +11 G 10 12 22 11 10 12 +12 T 11 13 21 12 11 13 +13 G 12 14 20 13 12 14 +14 C 13 15 19 14 13 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 14 19 0 20 +20 C 19 21 13 20 19 21 +21 A 20 22 12 21 20 22 +22 C 21 23 11 22 21 23 +23 A 22 24 10 23 22 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.017 candidate_21968283 pos=16:18109528-18109568 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 C 13 15 32 14 13 15 +15 C 14 16 31 15 14 16 +16 T 15 17 30 16 15 0 +17 C 16 18 0 17 0 0 +18 T 17 19 27 18 0 19 +19 G 18 20 26 19 18 20 +20 G 19 21 25 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 20 25 0 26 +26 C 25 27 19 26 25 27 +27 A 26 28 18 27 26 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 16 30 0 31 +31 G 30 32 15 31 30 32 +32 G 31 33 14 32 31 33 +33 C 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.007 candidate_21972372 pos=16:48194702-48194742 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 39 20 19 21 +21 G 20 22 38 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 36 23 0 24 +24 A 23 25 35 24 23 25 +25 T 24 26 34 25 24 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 25 34 0 35 +35 T 34 36 24 35 34 36 +36 G 35 37 23 36 35 0 +37 G 36 38 0 37 0 0 +38 C 37 39 21 38 0 39 +39 C 38 40 20 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -2.153 candidate_21973007 pos=16:47167787-47167827 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 C 15 17 35 16 15 17 +17 A 16 18 34 17 16 18 +18 C 17 19 33 18 17 0 +19 T 18 20 0 19 0 0 +20 G 19 21 31 20 0 21 +21 G 20 22 30 21 20 22 +22 G 21 23 29 22 21 23 +23 T 22 24 28 23 22 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 23 28 0 29 +29 T 28 30 22 29 28 30 +30 C 29 31 21 30 29 31 +31 C 30 32 20 31 30 0 +32 T 31 33 0 32 0 0 +33 G 32 34 18 33 0 34 +34 T 33 35 17 34 33 35 +35 G 34 36 16 35 34 36 +36 C 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.078 candidate_21978114 pos=16:63152879-63152919 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 12 +12 G 11 13 20 12 11 13 +13 A 12 14 19 13 12 14 +14 G 13 15 18 14 13 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 14 18 0 19 +19 T 18 20 13 19 18 20 +20 C 19 21 12 20 19 21 +21 C 20 22 0 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 28 +28 C 27 29 39 28 27 29 +29 A 28 30 38 29 28 30 +30 G 29 31 37 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 30 37 0 38 +38 T 37 39 29 38 37 39 +39 G 38 40 28 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -1.515 candidate_21979257 pos=16:20146969-20147009 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 13 4 3 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 T 12 14 4 13 12 14 +14 A 13 15 0 14 13 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 23 +23 G 22 24 30 23 22 24 +24 C 23 25 29 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 24 29 0 30 +30 C 29 31 23 30 29 31 +31 T 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.415 candidate_21979283 pos=16:75142524-75142564 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 13 4 3 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 T 12 14 4 13 12 14 +14 A 13 15 0 14 13 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 A 19 21 26 20 19 21 +21 G 20 22 25 21 20 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 21 25 0 26 +26 T 25 27 20 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.282 candidate_21982381 pos=16:41132040-41132080 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 18 +18 C 17 19 34 18 17 19 +19 A 18 20 33 19 18 20 +20 C 19 21 32 20 19 21 +21 T 20 22 31 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 21 31 0 32 +32 G 31 33 20 32 31 33 +33 T 32 34 19 33 32 34 +34 G 33 35 18 34 33 35 +35 A 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.785 candidate_21982954 pos=16:86199584-86199624 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 C 13 15 0 14 13 0 +15 A 14 16 0 15 0 16 +16 A 15 17 31 16 15 17 +17 G 16 18 30 17 16 18 +18 C 17 19 29 18 17 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 18 29 0 30 +30 C 29 31 17 30 29 31 +31 T 30 32 16 31 30 32 +32 G 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.236 candidate_21983199 pos=16:19155514-19155554 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 G 13 15 0 14 13 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.469 candidate_22007903 pos=16:87129728-87129768 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 A 11 13 22 12 11 13 +13 A 12 14 21 13 12 14 +14 C 13 15 20 14 13 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 14 20 0 21 +21 T 20 22 13 21 20 22 +22 T 21 23 12 22 21 23 +23 C 22 24 0 23 22 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.471 candidate_22008965 pos=16:85166641-85166681 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 23 +23 A 22 24 33 23 22 24 +24 A 23 25 32 24 23 25 +25 A 24 26 31 25 24 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 25 31 0 32 +32 T 31 33 24 32 31 33 +33 T 32 34 23 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.372 candidate_22009936 pos=16:13198354-13198394 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 23 +23 C 22 24 36 23 22 24 +24 A 23 25 35 24 23 25 +25 G 24 26 34 25 24 26 +26 A 25 27 33 26 25 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 26 33 0 34 +34 C 33 35 25 34 33 35 +35 T 34 36 24 35 34 36 +36 G 35 37 23 36 35 37 +37 T 36 38 0 37 36 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.442 candidate_22012273 pos=16:31196757-31196797 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 21 +21 C 20 22 34 21 20 22 +22 C 21 23 33 22 21 23 +23 T 22 24 32 23 22 24 +24 A 23 25 31 24 23 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 24 31 0 32 +32 A 31 33 23 32 31 33 +33 G 32 34 22 33 32 34 +34 G 33 35 21 34 33 35 +35 T 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.331 candidate_22067700 pos=16:79178510-79178550 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 A 15 17 24 16 15 17 +17 C 16 18 23 17 16 18 +18 A 17 19 22 18 17 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 18 22 0 23 +23 G 22 24 17 23 22 24 +24 T 23 25 16 24 23 25 +25 C 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.491 candidate_22070025 pos=16:95161906-95161946 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 G 18 20 39 19 18 20 +20 G 19 21 38 20 19 21 +21 A 20 22 37 21 20 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 21 37 0 38 +38 C 37 39 20 38 37 39 +39 C 38 40 19 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = 0.483 candidate_22070415 pos=16:60163443-60163483 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 23 +23 C 22 24 39 23 22 24 +24 A 23 25 38 24 23 0 +25 G 24 26 0 25 0 0 +26 A 25 27 36 26 0 27 +27 A 26 28 35 27 26 28 +28 T 27 29 34 28 27 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 28 34 0 35 +35 T 34 36 27 35 34 36 +36 T 35 37 26 36 35 0 +37 A 36 38 0 37 0 0 +38 T 37 39 24 38 0 39 +39 G 38 40 23 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -2.775 candidate_22072895 pos=16:11187568-11187608 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 28 13 12 14 +14 A 13 15 27 14 13 15 +15 A 14 16 26 15 14 16 +16 A 15 17 25 16 15 17 +17 G 16 18 24 17 16 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 17 24 0 25 +25 T 24 26 16 25 24 26 +26 T 25 27 15 26 25 27 +27 T 26 28 14 27 26 28 +28 G 27 29 13 28 27 29 +29 A 28 30 0 29 28 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.142 candidate_22077731 pos=16:67178091-67178131 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 29 +29 C 28 30 40 29 28 30 +30 C 29 31 39 30 29 31 +31 A 30 32 38 31 30 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 31 38 0 39 +39 G 38 40 30 39 38 40 +40 G 39 0 29 40 39 0 +40 dG = -2.535 candidate_22077881 pos=16:15134201-15134241 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 A 23 25 39 24 23 25 +25 C 24 26 38 25 24 26 +26 T 25 27 37 26 25 27 +27 G 26 28 36 27 26 28 +28 T 27 29 35 28 27 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 28 35 0 36 +36 C 35 37 27 36 35 37 +37 A 36 38 26 37 36 38 +38 G 37 39 25 38 37 39 +39 T 38 40 24 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -1.462 candidate_22080165 pos=16:12188710-12188750 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 C 24 26 36 25 24 26 +26 C 25 27 35 26 25 27 +27 A 26 28 34 27 26 28 +28 T 27 29 33 28 27 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 28 33 0 34 +34 T 33 35 27 34 33 35 +35 G 34 36 26 35 34 36 +36 G 35 37 25 36 35 37 +37 G 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.705 candidate_22080497 pos=16:32111082-32111122 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 10 +10 A 9 11 39 10 9 11 +11 A 10 12 38 11 10 12 +12 A 11 13 37 12 11 13 +13 C 12 14 36 13 12 14 +14 A 13 15 35 14 13 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 14 35 0 36 +36 G 35 37 13 36 35 37 +37 T 36 38 12 37 36 38 +38 T 37 39 11 38 37 39 +39 T 38 40 10 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = 2.537 candidate_22080830 pos=16:64121803-64121843 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 31 +31 C 30 32 39 31 30 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 31 39 0 40 +40 T 39 0 0 40 39 0 +40 dG = -4.814 candidate_22082335 pos=16:50179734-50179774 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 34 8 7 9 +9 C 8 10 33 9 8 10 +10 A 9 11 32 10 9 11 +11 A 10 12 31 11 10 12 +12 A 11 13 30 12 11 13 +13 C 12 14 29 13 12 14 +14 A 13 15 28 14 13 15 +15 G 14 16 0 15 14 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 T 17 19 25 18 17 19 +19 G 18 20 24 19 18 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 19 24 0 25 +25 A 24 26 18 25 24 26 +26 C 25 27 0 26 25 0 +27 A 26 28 0 27 0 28 +28 T 27 29 14 28 27 29 +29 G 28 30 13 29 28 30 +30 T 29 31 12 30 29 31 +31 T 30 32 11 31 30 32 +32 T 31 33 10 32 31 33 +33 G 32 34 9 33 32 34 +34 T 33 35 8 34 33 35 +35 A 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.424 candidate_22082778 pos=16:25112695-25112735 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 16 8 7 9 +9 C 8 10 15 9 8 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 9 15 0 16 +16 T 15 17 8 16 15 17 +17 C 16 18 0 17 16 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.156 candidate_22083540 pos=16:30140025-30140065 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 27 +27 T 26 28 33 27 26 28 +28 C 27 29 32 28 27 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 28 32 0 33 +33 A 32 34 27 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.949 candidate_22088458 pos=16:78160661-78160701 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 25 +25 G 24 26 34 25 24 26 +26 C 25 27 33 26 25 27 +27 A 26 28 32 27 26 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 27 32 0 33 +33 G 32 34 26 33 32 34 +34 C 33 35 25 34 33 35 +35 A 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.989 candidate_22089455 pos=16:26154863-26154903 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 29 +29 C 28 30 39 29 28 30 +30 A 29 31 38 30 29 31 +31 G 30 32 37 31 30 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 31 37 0 38 +38 T 37 39 30 38 37 39 +39 G 38 40 29 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -1.619 candidate_22090997 pos=16:51143275-51143315 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 19 +19 A 18 20 27 19 18 20 +20 A 19 21 26 20 19 21 +21 G 20 22 25 21 20 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 21 25 0 26 +26 T 25 27 20 26 25 27 +27 T 26 28 19 27 26 28 +28 G 27 29 0 28 27 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.526 candidate_22097738 pos=16:48156249-48156289 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 29 +29 A 28 30 35 29 28 30 +30 G 29 31 34 30 29 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 30 34 0 35 +35 T 34 36 29 35 34 36 +36 G 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.885 candidate_22102208 pos=16:28116722-28116762 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 C 17 19 32 18 17 19 +19 T 18 20 31 19 18 20 +20 T 19 21 30 20 19 21 +21 G 20 22 29 21 20 22 +22 A 21 23 28 22 21 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 22 28 0 29 +29 C 28 30 21 29 28 30 +30 A 29 31 20 30 29 31 +31 A 30 32 19 31 30 32 +32 G 31 33 18 32 31 33 +33 C 32 34 0 33 32 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.059 candidate_22107943 pos=16:17193782-17193822 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 33 +33 G 32 34 40 33 32 34 +34 C 33 35 39 34 33 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 34 39 0 40 +40 C 39 0 33 40 39 0 +40 dG = -1.049 candidate_22108944 pos=16:90137828-90137868 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 C 21 23 30 22 21 23 +23 C 22 24 29 23 22 24 +24 C 23 25 28 24 23 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 24 28 0 29 +29 G 28 30 23 29 28 30 +30 G 29 31 22 30 29 31 +31 C 30 32 0 31 30 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.145 candidate_22111133 pos=16:17108267-17108307 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 13 +13 G 12 14 30 13 12 14 +14 A 13 15 29 14 13 15 +15 G 14 16 28 15 14 16 +16 C 15 17 27 16 15 17 +17 T 16 18 26 17 16 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 17 26 0 27 +27 G 26 28 16 27 26 28 +28 C 27 29 15 28 27 29 +29 T 28 30 14 29 28 30 +30 C 29 31 13 30 29 31 +31 A 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -4.415 candidate_22111571 pos=16:76106687-76106727 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 23 +23 A 22 24 38 23 22 24 +24 G 23 25 37 24 23 25 +25 G 24 26 36 25 24 26 +26 G 25 27 35 26 25 27 +27 C 26 28 34 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 27 34 0 35 +35 C 34 36 26 35 34 36 +36 C 35 37 25 36 35 37 +37 C 36 38 24 37 36 38 +38 T 37 39 23 38 37 39 +39 A 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = 1.374 candidate_22115072 pos=16:41106475-41106515 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 15 7 6 8 +8 A 7 9 14 8 7 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 8 14 0 15 +15 T 14 16 7 15 14 16 +16 A 15 17 0 16 15 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.484 candidate_22117822 pos=16:45173818-45173858 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 26 +26 C 25 27 34 26 25 27 +27 T 26 28 33 27 26 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 27 33 0 34 +34 G 33 35 26 34 33 35 +35 C 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.569 candidate_22120338 pos=16:5155136-5155176 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 C 26 28 36 27 26 28 +28 C 27 29 35 28 27 29 +29 A 28 30 34 29 28 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 29 34 0 35 +35 G 34 36 28 35 34 36 +36 G 35 37 27 36 35 37 +37 A 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.486 candidate_22121522 pos=16:23101375-23101415 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 A 26 28 34 27 26 28 +28 C 27 29 33 28 27 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 28 33 0 34 +34 T 33 35 27 34 33 35 +35 G 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.945 candidate_22126700 pos=16:90130090-90130130 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 26 +26 T 25 27 39 26 25 27 +27 G 26 28 38 27 26 28 +28 C 27 29 37 28 27 29 +29 T 28 30 36 29 28 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 29 36 0 37 +37 G 36 38 28 37 36 38 +38 C 37 39 27 38 37 39 +39 A 38 40 26 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -2.295 candidate_22128391 pos=16:66105689-66105729 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 26 9 8 10 +10 A 9 11 25 10 9 11 +11 G 10 12 24 11 10 12 +12 A 11 13 23 12 11 13 +13 A 12 14 22 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 13 22 0 23 +23 T 22 24 12 23 22 24 +24 C 23 25 11 24 23 25 +25 T 24 26 10 25 24 26 +26 G 25 27 9 26 25 27 +27 G 26 28 0 27 26 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.859 candidate_22129434 pos=16:12190394-12190434 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 G 21 23 34 22 21 23 +23 C 22 24 33 23 22 24 +24 C 23 25 32 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 24 32 0 33 +33 G 32 34 23 33 32 34 +34 C 33 35 22 34 33 35 +35 A 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.801 candidate_22132000 pos=16:75198974-75199014 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 17 9 8 10 +10 A 9 11 16 10 9 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 10 16 0 17 +17 G 16 18 9 17 16 18 +18 A 17 19 0 18 17 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 37 23 0 24 +24 G 23 25 36 24 23 25 +25 T 24 26 35 25 24 26 +26 C 25 27 34 26 25 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 26 34 0 35 +35 A 34 36 25 35 34 36 +36 C 35 37 24 36 35 37 +37 A 36 38 23 37 36 38 +38 A 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.625 candidate_22133710 pos=16:87137068-87137108 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 G 10 12 30 11 10 12 +12 C 11 13 29 12 11 13 +13 A 12 14 28 13 12 14 +14 G 13 15 27 14 13 15 +15 T 14 16 26 15 14 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 15 26 0 27 +27 C 26 28 14 27 26 28 +28 T 27 29 13 28 27 29 +29 G 28 30 12 29 28 30 +30 C 29 31 11 30 29 31 +31 A 30 32 0 31 30 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.202 candidate_22133726 pos=16:96130849-96130889 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 G 13 15 24 14 13 15 +15 T 14 16 23 15 14 16 +16 G 15 17 22 16 15 17 +17 G 16 18 21 17 16 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 17 21 0 22 +22 C 21 23 16 22 21 23 +23 A 22 24 15 23 22 24 +24 C 23 25 14 24 23 25 +25 A 24 26 0 25 24 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -4.723 candidate_22134530 pos=16:13118550-13118590 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 20 +20 C 19 21 39 20 19 21 +21 A 20 22 38 21 20 22 +22 G 21 23 37 22 21 0 +23 A 22 24 0 23 0 0 +24 T 23 25 35 24 0 25 +25 T 24 26 34 25 24 26 +26 G 25 27 33 26 25 27 +27 G 26 28 32 27 26 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 27 32 0 33 +33 C 32 34 26 33 32 34 +34 A 33 35 25 34 33 35 +35 A 34 36 24 35 34 0 +36 G 35 37 0 36 0 0 +37 C 36 38 22 37 0 38 +38 T 37 39 21 38 37 39 +39 G 38 40 20 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -4.392 candidate_22134652 pos=16:57199201-57199241 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 G 10 12 22 11 10 12 +12 C 11 13 21 12 11 13 +13 T 12 14 20 13 12 14 +14 C 13 15 19 14 13 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 14 19 0 20 +20 A 19 21 13 20 19 21 +21 G 20 22 12 21 20 22 +22 C 21 23 11 22 21 23 +23 A 22 24 0 23 22 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.488 candidate_22135831 pos=16:73178578-73178618 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 18 9 8 10 +10 A 9 11 17 10 9 11 +11 G 10 12 16 11 10 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 11 16 0 17 +17 T 16 18 10 17 16 18 +18 G 17 19 9 18 17 19 +19 A 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 22 +22 G 21 23 35 22 21 23 +23 C 22 24 34 23 22 24 +24 C 23 25 33 24 23 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 24 33 0 34 +34 G 33 35 23 34 33 35 +35 C 34 36 22 35 34 36 +36 T 35 37 0 36 35 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.392 candidate_22136880 pos=16:73124496-73124536 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 13 +13 C 12 14 29 13 12 14 +14 T 13 15 28 14 13 15 +15 T 14 16 27 15 14 16 +16 C 15 17 26 16 15 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 16 26 0 27 +27 A 26 28 15 27 26 28 +28 A 27 29 14 28 27 29 +29 G 28 30 13 29 28 30 +30 A 29 31 0 30 29 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.995 candidate_22137318 pos=16:66107612-66107652 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 24 3 2 4 +4 A 3 5 23 4 3 5 +5 C 4 6 22 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 20 7 0 8 +8 A 7 9 19 8 7 9 +9 C 8 10 18 9 8 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 9 18 0 19 +19 T 18 20 8 19 18 20 +20 T 19 21 7 20 19 0 +21 G 20 22 0 21 0 0 +22 G 21 23 5 22 0 23 +23 T 22 24 4 23 22 24 +24 T 23 25 3 24 23 0 +25 C 24 26 0 25 0 26 +26 A 25 27 37 26 25 27 +27 A 26 28 36 27 26 28 +28 C 27 29 35 28 27 29 +29 A 28 30 34 29 28 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 29 34 0 35 +35 G 34 36 28 35 34 36 +36 T 35 37 27 36 35 37 +37 T 36 38 26 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.501 candidate_22138543 pos=16:10153026-10153066 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 16 +16 A 15 17 34 16 15 17 +17 T 16 18 33 17 16 18 +18 G 17 19 32 18 17 19 +19 G 18 20 31 19 18 20 +20 T 19 21 30 20 19 21 +21 C 20 22 29 21 20 22 +22 T 21 23 28 22 21 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 22 28 0 29 +29 G 28 30 21 29 28 30 +30 G 29 31 20 30 29 31 +31 C 30 32 19 31 30 32 +32 C 31 33 18 32 31 33 +33 A 32 34 17 33 32 34 +34 T 33 35 16 34 33 35 +35 A 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.263 candidate_22139014 pos=16:66135997-66136037 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 10 +10 A 9 11 18 10 9 11 +11 G 10 12 17 11 10 12 +12 T 11 13 16 12 11 0 +13 G 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 12 16 0 17 +17 C 16 18 11 17 16 18 +18 T 17 19 10 18 17 19 +19 T 18 20 0 19 18 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 26 +26 C 25 27 39 26 25 27 +27 T 26 28 38 27 26 0 +28 A 27 29 0 28 0 0 +29 T 28 30 36 29 0 30 +30 G 29 31 35 30 29 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 30 35 0 36 +36 A 35 37 29 36 35 0 +37 G 36 38 0 37 0 0 +38 A 37 39 27 38 0 39 +39 G 38 40 26 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -4.005 candidate_22139245 pos=16:30109118-30109158 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 14 4 3 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 T 13 15 4 14 13 15 +15 G 14 16 0 15 14 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 21 +21 C 20 22 40 21 20 22 +22 A 21 23 39 22 21 23 +23 A 22 24 38 23 22 24 +24 G 23 25 37 24 23 0 +25 G 24 26 0 25 0 0 +26 A 25 27 35 26 0 27 +27 T 26 28 34 27 26 28 +28 G 27 29 33 28 27 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 28 33 0 34 +34 A 33 35 27 34 33 35 +35 T 34 36 26 35 34 0 +36 A 35 37 0 36 0 0 +37 C 36 38 24 37 0 38 +38 T 37 39 23 38 37 39 +39 T 38 40 22 39 38 40 +40 G 39 0 21 40 39 0 +40 dG = -1.553 candidate_22140417 pos=16:42198376-42198416 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 18 +18 G 17 19 37 18 17 19 +19 C 18 20 36 19 18 20 +20 A 19 21 35 20 19 21 +21 A 20 22 34 21 20 0 +22 T 21 23 30 22 0 23 +23 G 22 24 29 23 22 24 +24 G 23 25 28 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 24 28 0 29 +29 C 28 30 23 29 28 30 +30 A 29 31 22 30 29 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 21 34 0 35 +35 T 34 36 20 35 34 36 +36 G 35 37 19 36 35 37 +37 C 36 38 18 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.459 candidate_22142541 pos=16:83147797-83147837 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 17 +17 G 16 18 36 17 16 18 +18 G 17 19 35 18 17 19 +19 C 18 20 34 19 18 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 19 34 0 35 +35 C 34 36 18 35 34 36 +36 C 35 37 17 36 35 37 +37 A 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.169 candidate_22143830 pos=16:74196682-74196722 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 15 +15 C 14 16 25 15 14 16 +16 A 15 17 24 16 15 17 +17 A 16 18 23 17 16 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 17 23 0 24 +24 T 23 25 16 24 23 25 +25 G 24 26 15 25 24 26 +26 A 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.422 candidate_22143879 pos=16:68111670-68111710 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 18 7 6 8 +8 A 7 9 17 8 7 9 +9 C 8 10 16 9 8 10 +10 A 9 11 15 10 9 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 T 14 16 10 15 0 16 +16 G 15 17 9 16 15 17 +17 T 16 18 8 17 16 18 +18 T 17 19 7 18 17 19 +19 G 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.829 candidate_22144385 pos=16:46108727-46108767 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 12 +12 C 11 13 21 12 11 13 +13 T 12 14 20 13 12 14 +14 G 13 15 19 14 13 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 14 19 0 20 +20 A 19 21 13 20 19 21 +21 G 20 22 12 21 20 22 +22 G 21 23 0 22 21 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.102 candidate_22153094 pos=16:32194021-32194061 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 22 +22 A 21 23 34 22 21 23 +23 G 22 24 33 23 22 24 +24 C 23 25 32 24 23 25 +25 A 24 26 31 25 24 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 25 31 0 32 +32 G 31 33 24 32 31 33 +33 C 32 34 23 33 32 34 +34 T 33 35 22 34 33 35 +35 C 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.278 candidate_22154498 pos=16:63139745-63139785 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 15 9 8 10 +10 C 9 11 14 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 10 14 0 15 +15 G 14 16 9 15 14 16 +16 A 15 17 0 16 15 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 30 +30 T 29 31 40 30 29 31 +31 G 30 32 39 31 30 32 +32 T 31 33 38 32 31 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 32 38 0 39 +39 C 38 40 31 39 38 40 +40 A 39 0 30 40 39 0 +40 dG = -0.309 candidate_22155674 pos=16:34122313-34122353 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 17 +17 C 16 18 36 17 16 18 +18 G 17 19 35 18 17 19 +19 T 18 20 34 19 18 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 19 34 0 35 +35 C 34 36 18 35 34 36 +36 G 35 37 17 36 35 37 +37 G 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.893 candidate_22155947 pos=16:44159950-44159990 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 17 +17 C 16 18 38 17 16 18 +18 T 17 19 37 18 17 19 +19 G 18 20 36 19 18 20 +20 C 19 21 35 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 32 22 0 23 +23 T 22 24 31 23 22 24 +24 C 23 25 30 24 23 25 +25 A 24 26 29 25 24 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 25 29 0 30 +30 G 29 31 24 30 29 31 +31 A 30 32 23 31 30 32 +32 A 31 33 22 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 20 35 0 36 +36 C 35 37 19 36 35 37 +37 A 36 38 18 37 36 38 +38 G 37 39 17 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -2.292 candidate_22156764 pos=16:29182366-29182406 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 26 +26 A 25 27 37 26 25 27 +27 G 26 28 36 27 26 28 +28 G 27 29 35 28 27 29 +29 G 28 30 34 29 28 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 29 34 0 35 +35 C 34 36 28 35 34 36 +36 C 35 37 27 36 35 37 +37 T 36 38 26 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.17 candidate_22157299 pos=16:50159646-50159686 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 26 9 8 10 +10 C 9 11 25 10 9 11 +11 A 10 12 24 11 10 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 21 14 0 15 +15 A 14 16 20 15 14 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 15 20 0 21 +21 G 20 22 14 21 20 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 11 24 0 25 +25 G 24 26 10 25 24 26 +26 G 25 27 9 26 25 27 +27 G 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.525 candidate_22158341 pos=16:50123922-50123962 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 31 9 8 10 +10 C 9 11 30 10 9 11 +11 A 10 12 29 11 10 12 +12 A 11 13 28 12 11 13 +13 T 12 14 27 13 12 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 13 27 0 28 +28 T 27 29 12 28 27 29 +29 T 28 30 11 29 28 30 +30 G 29 31 10 30 29 31 +31 G 30 32 9 31 30 32 +32 C 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.494 candidate_22159085 pos=16:27143471-27143511 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 29 9 8 10 +10 C 9 11 28 10 9 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 10 28 0 29 +29 G 28 30 9 29 28 30 +30 A 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.854 candidate_22160134 pos=16:88124329-88124369 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 24 12 11 13 +13 T 12 14 23 13 12 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 13 23 0 24 +24 G 23 25 12 24 23 25 +25 A 24 26 0 25 24 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.399 candidate_22161492 pos=16:90147842-90147882 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 39 4 3 5 +5 C 4 6 38 5 4 6 +6 A 5 7 37 6 5 7 +7 A 6 8 36 7 6 8 +8 A 7 9 35 8 7 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 32 11 0 12 +12 G 11 13 31 12 11 13 +13 C 12 14 30 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 13 30 0 31 +31 C 30 32 12 31 30 32 +32 T 31 33 11 32 31 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 8 35 0 36 +36 T 35 37 7 36 35 37 +37 T 36 38 6 37 36 38 +38 G 37 39 5 38 37 39 +39 T 38 40 4 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -2.042 candidate_22162118 pos=16:44151172-44151212 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 26 9 8 10 +10 C 9 11 25 10 9 11 +11 A 10 12 24 11 10 12 +12 G 11 13 23 12 11 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 12 23 0 24 +24 T 23 25 11 24 23 25 +25 G 24 26 10 25 24 26 +26 G 25 27 9 26 25 27 +27 G 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.838 candidate_22162200 pos=16:11163816-11163856 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 21 +21 A 20 22 38 21 20 22 +22 T 21 23 37 22 21 23 +23 A 22 24 36 23 22 24 +24 G 23 25 35 24 23 25 +25 C 24 26 34 25 24 26 +26 C 25 27 33 26 25 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 26 33 0 34 +34 G 33 35 25 34 33 35 +35 C 34 36 24 35 34 36 +36 T 35 37 23 36 35 37 +37 A 36 38 22 37 36 38 +38 T 37 39 21 38 37 39 +39 G 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -0.316 candidate_22163643 pos=16:57158167-57158207 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 16 9 8 10 +10 C 9 11 15 10 9 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 10 15 0 16 +16 G 15 17 9 16 15 17 +17 C 16 18 0 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.151 candidate_22164411 pos=16:82101203-82101243 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 15 +15 A 14 16 0 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 C 17 19 25 18 17 19 +19 A 18 20 24 19 18 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 19 24 0 25 +25 G 24 26 18 25 24 26 +26 A 25 27 0 26 25 0 +27 A 26 28 0 27 0 28 +28 C 27 29 36 28 27 29 +29 C 28 30 35 29 28 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 29 35 0 36 +36 G 35 37 28 36 35 37 +37 G 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.145 candidate_22165988 pos=16:63157019-63157059 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 A 24 26 38 25 24 26 +26 A 25 27 37 26 25 27 +27 A 26 28 36 27 26 28 +28 T 27 29 35 28 27 29 +29 G 28 30 34 29 28 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 29 34 0 35 +35 A 34 36 28 35 34 36 +36 T 35 37 27 36 35 37 +37 T 36 38 26 37 36 38 +38 T 37 39 25 38 37 39 +39 C 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -1.358 candidate_22167297 pos=16:88195353-88195393 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 10 +10 C 9 11 20 10 9 11 +11 C 10 12 19 11 10 12 +12 A 11 13 18 12 11 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 12 18 0 19 +19 G 18 20 11 19 18 20 +20 G 19 21 10 20 19 21 +21 C 20 22 0 21 20 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 29 +29 G 28 30 39 29 28 30 +30 A 29 31 38 30 29 31 +31 A 30 32 37 31 30 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 31 37 0 38 +38 T 37 39 30 38 37 39 +39 C 38 40 29 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -2.031 candidate_22167603 pos=16:49183383-49183423 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 18 +18 C 17 19 30 18 17 19 +19 A 18 20 29 19 18 20 +20 G 19 21 28 20 19 21 +21 A 20 22 27 21 20 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 21 27 0 28 +28 C 27 29 20 28 27 29 +29 T 28 30 19 29 28 30 +30 G 29 31 18 30 29 0 +31 T 30 32 0 31 0 32 +32 G 31 33 39 32 31 33 +33 C 32 34 38 33 32 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 33 38 0 39 +39 C 38 40 32 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = 0.004 candidate_22168403 pos=16:92162192-92162232 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 22 +22 C 21 23 29 22 21 23 +23 C 22 24 28 23 22 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 23 28 0 29 +29 G 28 30 22 29 28 30 +30 T 29 31 0 30 29 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.486 candidate_22168417 pos=16:57136534-57136574 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 21 +21 A 20 22 28 21 20 22 +22 C 21 23 27 22 21 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 22 27 0 28 +28 T 27 29 21 28 27 29 +29 G 28 30 0 29 28 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.892 candidate_22168459 pos=16:74173913-74173953 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 G 13 15 31 14 13 15 +15 G 14 16 30 15 14 16 +16 C 15 17 29 16 15 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 16 29 0 30 +30 C 29 31 15 30 29 31 +31 C 30 32 14 31 30 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.026 candidate_22168537 pos=16:11170884-11170924 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 36 24 23 25 +25 C 24 26 35 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 25 35 0 36 +36 C 35 37 24 36 35 37 +37 A 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.519 candidate_22169674 pos=16:48189398-48189438 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 12 +12 G 11 13 22 12 11 13 +13 G 12 14 21 13 12 14 +14 G 13 15 20 14 13 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 14 20 0 21 +21 C 20 22 13 21 20 22 +22 C 21 23 12 22 21 23 +23 T 22 24 0 23 22 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.341 candidate_22169694 pos=16:16192234-16192274 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 40 9 8 10 +10 C 9 11 39 10 9 0 +11 C 10 12 0 11 0 0 +12 G 11 13 37 12 0 13 +13 G 12 14 36 13 12 0 +14 T 13 15 0 14 0 0 +15 A 14 16 34 15 0 16 +16 T 15 17 33 16 15 17 +17 G 16 18 32 17 16 18 +18 C 17 19 31 18 17 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 18 31 0 32 +32 C 31 33 17 32 31 33 +33 A 32 34 16 33 32 34 +34 T 33 35 15 34 33 0 +35 T 34 36 0 35 0 0 +36 C 35 37 13 36 0 37 +37 C 36 38 12 37 36 0 +38 T 37 39 0 38 0 0 +39 G 38 40 10 39 0 40 +40 G 39 0 9 40 39 0 +40 dG = -1.839 candidate_22169998 pos=16:9169681-9169721 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 23 9 8 10 +10 C 9 11 22 10 9 11 +11 C 10 12 21 11 10 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 11 21 0 22 +22 G 21 23 10 22 21 23 +23 G 22 24 9 23 22 24 +24 A 23 25 0 24 23 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.569 candidate_22170395 pos=16:45154949-45154989 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 22 +22 A 21 23 31 22 21 23 +23 A 22 24 30 23 22 24 +24 C 23 25 29 24 23 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 24 29 0 30 +30 T 29 31 23 30 29 31 +31 T 30 32 22 31 30 32 +32 T 31 33 0 32 31 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.998 candidate_22171219 pos=16:11135198-11135238 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 35 3 2 4 +4 A 3 5 34 4 3 5 +5 C 4 6 33 5 4 6 +6 A 5 7 32 6 5 7 +7 A 6 8 31 7 6 8 +8 A 7 9 30 8 7 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 8 30 0 31 +31 T 30 32 7 31 30 32 +32 T 31 33 6 32 31 33 +33 G 32 34 5 33 32 34 +34 T 33 35 4 34 33 35 +35 T 34 36 3 35 34 36 +36 C 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.605 candidate_22171832 pos=16:68188884-68188924 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 G 10 12 37 11 10 12 +12 A 11 13 36 12 11 13 +13 A 12 14 35 13 12 14 +14 A 13 15 34 14 13 15 +15 G 14 16 33 15 14 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 15 33 0 34 +34 T 33 35 14 34 33 35 +35 T 34 36 13 35 34 36 +36 T 35 37 12 36 35 37 +37 C 36 38 11 37 36 38 +38 T 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.04 candidate_22174961 pos=16:91126021-91126061 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 12 +12 C 11 13 39 12 11 13 +13 C 12 14 38 13 12 0 +14 A 13 15 0 14 0 0 +15 C 14 16 35 15 0 16 +16 A 15 17 34 16 15 17 +17 G 16 18 33 17 16 18 +18 A 17 19 32 18 17 19 +19 G 18 20 31 19 18 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 19 31 0 32 +32 T 31 33 18 32 31 33 +33 C 32 34 17 33 32 34 +34 T 33 35 16 34 33 35 +35 G 34 36 15 35 34 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 13 38 0 39 +39 G 38 40 12 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -3.853 candidate_22175427 pos=16:92181887-92181927 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 17 +17 C 16 18 39 17 16 18 +18 A 17 19 38 18 17 19 +19 G 18 20 37 19 18 20 +20 G 19 21 36 20 19 0 +21 A 20 22 0 21 0 0 +22 T 21 23 34 22 0 23 +23 G 22 24 33 23 22 24 +24 G 23 25 32 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 24 32 0 33 +33 C 32 34 23 33 32 34 +34 A 33 35 22 34 33 0 +35 A 34 36 0 35 0 0 +36 C 35 37 20 36 0 37 +37 C 36 38 19 37 36 38 +38 T 37 39 18 38 37 39 +39 G 38 40 17 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -2.092 candidate_22179958 pos=16:5111686-5111726 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 C 13 15 28 14 13 15 +15 A 14 16 27 15 14 16 +16 C 15 17 26 16 15 17 +17 C 16 18 25 17 16 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 17 25 0 26 +26 G 25 27 16 26 25 27 +27 T 26 28 15 27 26 28 +28 G 27 29 14 28 27 29 +29 C 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.619 candidate_22185338 pos=16:65122594-65122634 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 C 21 23 32 22 21 23 +23 A 22 24 31 23 22 24 +24 A 23 25 30 24 23 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 24 30 0 31 +31 T 30 32 23 31 30 32 +32 G 31 33 22 32 31 33 +33 C 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.146 candidate_22185583 pos=16:8163848-8163888 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 17 9 8 10 +10 T 9 11 16 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 10 16 0 17 +17 G 16 18 9 17 16 18 +18 A 17 19 0 18 17 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.159 candidate_22188201 pos=16:55133103-55133143 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 18 +18 A 17 19 28 18 17 19 +19 G 18 20 27 19 18 20 +20 G 19 21 26 20 19 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 20 26 0 27 +27 C 26 28 19 27 26 28 +28 T 27 29 18 28 27 29 +29 T 28 30 0 29 28 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.831 candidate_22188735 pos=16:81153500-81153540 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 18 8 7 9 +9 C 8 10 17 9 8 10 +10 T 9 11 16 10 9 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 10 16 0 17 +17 G 16 18 9 17 16 18 +18 T 17 19 8 18 17 19 +19 C 18 20 0 19 18 0 +20 A 19 21 0 20 0 21 +21 C 20 22 37 21 20 22 +22 T 21 23 36 22 21 23 +23 C 22 24 35 23 22 24 +24 A 23 25 34 24 23 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 24 34 0 35 +35 G 34 36 23 35 34 36 +36 A 35 37 22 36 35 37 +37 G 36 38 21 37 36 38 +38 A 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.135 candidate_22190073 pos=16:13184132-13184172 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 26 6 5 7 +7 A 6 8 25 7 6 8 +8 A 7 9 24 8 7 9 +9 C 8 10 23 9 8 10 +10 T 9 11 22 10 9 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 10 22 0 23 +23 G 22 24 9 23 22 24 +24 T 23 25 8 24 23 25 +25 T 24 26 7 25 24 26 +26 T 25 27 6 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.005 candidate_22192227 pos=16:27164290-27164330 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 21 +21 A 20 22 37 21 20 22 +22 G 21 23 36 22 21 23 +23 T 22 24 35 23 22 24 +24 A 23 25 34 24 23 25 +25 G 24 26 33 25 24 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 25 33 0 34 +34 T 33 35 24 34 33 35 +35 A 34 36 23 35 34 36 +36 C 35 37 22 36 35 37 +37 T 36 38 21 37 36 38 +38 C 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -4.761 candidate_22192745 pos=16:48174894-48174934 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 27 8 7 9 +9 C 8 10 26 9 8 10 +10 T 9 11 25 10 9 11 +11 C 10 12 24 11 10 12 +12 A 11 13 23 12 11 13 +13 A 12 14 22 13 12 14 +14 G 13 15 21 14 13 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 14 21 0 22 +22 T 21 23 13 22 21 23 +23 T 22 24 12 23 22 24 +24 G 23 25 11 24 23 25 +25 A 24 26 10 25 24 26 +26 G 25 27 9 26 25 27 +27 T 26 28 8 27 26 28 +28 G 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.527 candidate_22193410 pos=16:40142209-40142249 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 19 13 12 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 13 19 0 20 +20 A 19 21 0 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.355 candidate_22193752 pos=16:43152789-43152829 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 23 5 4 6 +6 A 5 7 22 6 5 7 +7 A 6 8 21 7 6 8 +8 A 7 9 20 8 7 9 +9 C 8 10 19 9 8 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 9 19 0 20 +20 T 19 21 8 20 19 21 +21 T 20 22 7 21 20 22 +22 T 21 23 6 22 21 23 +23 G 22 24 5 23 22 24 +24 G 23 25 0 24 23 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.733 candidate_22193843 pos=16:90164453-90164493 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 21 4 3 5 +5 C 4 6 20 5 4 6 +6 A 5 7 19 6 5 7 +7 A 6 8 18 7 6 8 +8 A 7 9 17 8 7 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 8 17 0 18 +18 T 17 19 7 18 17 19 +19 T 18 20 6 19 18 20 +20 G 19 21 5 20 19 21 +21 T 20 22 4 21 20 0 +22 G 21 23 39 22 0 23 +23 A 22 24 38 23 22 24 +24 G 23 25 37 24 23 25 +25 C 24 26 36 25 24 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 25 36 0 37 +37 C 36 38 24 37 36 38 +38 T 37 39 23 38 37 39 +39 C 38 40 22 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.439 candidate_22195602 pos=16:64101875-64101915 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 19 +19 C 18 20 30 19 18 20 +20 C 19 21 29 20 19 21 +21 A 20 22 28 21 20 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 21 28 0 29 +29 G 28 30 20 29 28 30 +30 G 29 31 19 30 29 31 +31 T 30 32 0 31 30 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.537 candidate_22196342 pos=16:18179921-18179961 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 20 +20 G 19 21 35 20 19 21 +21 C 20 22 34 21 20 22 +22 C 21 23 33 22 21 0 +23 T 22 24 0 23 0 0 +24 G 23 25 31 24 0 25 +25 G 24 26 30 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 25 30 0 31 +31 C 30 32 24 31 30 0 +32 T 31 33 0 32 0 0 +33 G 32 34 22 33 0 34 +34 G 33 35 21 34 33 35 +35 C 34 36 20 35 34 36 +36 C 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.299 candidate_22197324 pos=16:11181750-11181790 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 C 13 15 31 14 13 15 +15 C 14 16 30 15 14 16 +16 T 15 17 29 16 15 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 16 29 0 30 +30 G 29 31 15 30 29 31 +31 G 30 32 14 31 30 32 +32 A 31 33 0 32 31 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.981 candidate_22197538 pos=16:7145407-7145447 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 18 9 8 10 +10 T 9 11 17 10 9 11 +11 C 10 12 16 11 10 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 11 16 0 17 +17 A 16 18 10 17 16 18 +18 G 17 19 9 18 17 19 +19 C 18 20 0 19 18 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 T 22 24 0 23 0 24 +24 G 23 25 35 24 23 25 +25 A 24 26 34 25 24 26 +26 A 25 27 33 26 25 27 +27 T 26 28 32 27 26 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 27 32 0 33 +33 T 32 34 26 33 32 34 +34 T 33 35 25 34 33 35 +35 C 34 36 24 35 34 36 +36 T 35 37 0 36 35 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.989 candidate_22198662 pos=16:24108652-24108692 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 19 9 8 10 +10 T 9 11 18 10 9 11 +11 G 10 12 17 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 11 17 0 18 +18 A 17 19 10 18 17 19 +19 G 18 20 9 19 18 20 +20 A 19 21 0 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.149 candidate_22199438 pos=16:84113940-84113980 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 C 14 16 30 15 14 16 +16 A 15 17 29 16 15 17 +17 C 16 18 28 17 16 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 17 28 0 29 +29 T 28 30 16 29 28 30 +30 G 29 31 15 30 29 31 +31 A 30 32 0 31 30 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.928 candidate_22199459 pos=16:39138516-39138556 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 19 4 3 5 +5 C 4 6 18 5 4 6 +6 A 5 7 17 6 5 7 +7 A 6 8 16 7 6 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 7 16 0 17 +17 T 16 18 6 17 16 18 +18 G 17 19 5 18 17 19 +19 T 18 20 4 19 18 20 +20 C 19 21 0 20 19 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 C 24 26 33 25 24 26 +26 A 25 27 32 26 25 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 26 32 0 33 +33 G 32 34 25 33 32 34 +34 A 33 35 0 34 33 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.584 candidate_22200544 pos=16:97127845-97127885 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 6 13 0 14 +14 G 13 15 5 14 13 15 +15 A 14 16 0 15 14 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.89 candidate_22200957 pos=16:31174384-31174424 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 21 8 7 9 +9 C 8 10 20 9 8 10 +10 T 9 11 19 10 9 11 +11 G 10 12 18 11 10 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 11 18 0 19 +19 A 18 20 10 19 18 20 +20 G 19 21 9 20 19 21 +21 T 20 22 8 21 20 22 +22 G 21 23 0 22 21 0 +23 A 22 24 0 23 0 24 +24 C 23 25 39 24 23 25 +25 A 24 26 38 25 24 26 +26 G 25 27 37 26 25 28 +27 A 26 28 0 27 0 0 +28 C 27 29 36 28 26 29 +29 T 28 30 35 29 28 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 29 35 0 36 +36 G 35 37 28 36 35 37 +37 C 36 38 26 37 36 38 +38 T 37 39 25 38 37 39 +39 G 38 40 24 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = 0.084 candidate_22201014 pos=16:75109753-75109793 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 27 +27 G 26 28 33 27 26 28 +28 A 27 29 32 28 27 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 28 32 0 33 +33 C 32 34 27 33 32 34 +34 A 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.325 candidate_22202360 pos=16:8100518-8100558 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 C 8 10 35 9 8 10 +10 T 9 11 34 10 9 11 +11 G 10 12 33 11 10 12 +12 T 11 13 32 12 11 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 31 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 29 17 0 18 +18 G 17 19 28 18 17 19 +19 G 18 20 27 19 18 20 +20 G 19 21 26 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 20 26 0 27 +27 C 26 28 19 27 26 28 +28 C 27 29 18 28 27 29 +29 T 28 30 17 29 28 0 +30 G 29 31 0 30 0 0 +31 T 30 32 15 31 0 0 +32 G 31 33 12 32 0 33 +33 C 32 34 11 33 32 34 +34 A 33 35 10 34 33 35 +35 G 34 36 9 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.316 candidate_22202771 pos=16:66144420-66144460 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 A 13 15 0 14 13 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.521 candidate_22203018 pos=16:93137335-93137375 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 14 4 3 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 T 13 15 4 14 13 15 +15 A 14 16 0 15 14 0 +16 C 15 17 0 16 0 17 +17 C 16 18 33 17 16 18 +18 A 17 19 32 18 17 19 +19 G 18 20 31 19 18 20 +20 C 19 21 30 20 19 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 20 30 0 31 +31 C 30 32 19 31 30 32 +32 T 31 33 18 32 31 33 +33 G 32 34 17 33 32 34 +34 T 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.512 candidate_22205403 pos=16:57181778-57181818 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 18 3 2 4 +4 A 3 5 17 4 3 5 +5 C 4 6 16 5 4 6 +6 A 5 7 15 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 6 15 0 16 +16 G 15 17 5 16 15 17 +17 T 16 18 4 17 16 18 +18 T 17 19 3 18 17 19 +19 C 18 20 0 19 18 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.516 candidate_22206827 pos=16:20161423-20161463 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 A 12 14 0 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -5.442 candidate_22207174 pos=16:81171525-81171565 +1 A 0 2 0 1 0 2 +2 A 1 3 32 2 1 3 +3 A 2 4 31 3 2 4 +4 A 3 5 30 4 3 5 +5 C 4 6 29 5 4 6 +6 A 5 7 28 6 5 7 +7 A 6 8 27 7 6 8 +8 A 7 9 26 8 7 9 +9 C 8 10 25 9 8 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 24 12 0 13 +13 C 12 14 23 13 12 14 +14 A 13 15 22 14 13 15 +15 A 14 16 21 15 14 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 15 21 0 22 +22 T 21 23 14 22 21 23 +23 G 22 24 13 23 22 24 +24 T 23 25 12 24 23 0 +25 G 24 26 9 25 0 26 +26 T 25 27 8 26 25 27 +27 T 26 28 7 27 26 28 +28 T 27 29 6 28 27 29 +29 G 28 30 5 29 28 30 +30 T 29 31 4 30 29 31 +31 T 30 32 3 31 30 32 +32 T 31 33 2 32 31 33 +33 G 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.755 candidate_22207831 pos=16:40187696-40187736 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 13 4 3 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 T 12 14 4 13 12 14 +14 C 13 15 0 14 13 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 18 +18 A 17 19 40 18 17 19 +19 G 18 20 39 19 18 20 +20 T 19 21 38 20 19 21 +21 C 20 22 37 21 20 0 +22 C 21 23 0 22 0 0 +23 A 22 24 34 23 0 24 +24 G 23 25 33 24 23 25 +25 T 24 26 32 25 24 26 +26 C 25 27 31 26 25 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 26 31 0 32 +32 A 31 33 25 32 31 33 +33 C 32 34 24 33 32 34 +34 T 33 35 23 34 33 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 21 37 0 38 +38 A 37 39 20 38 37 39 +39 C 38 40 19 39 38 40 +40 T 39 0 18 40 39 0 +40 dG = -1.925 candidate_22208932 pos=16:62193639-62193679 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 C 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 17 +17 A 16 18 33 17 16 18 +18 G 17 19 32 18 17 19 +19 G 18 20 31 19 18 20 +20 A 19 21 30 20 19 21 +21 A 20 22 29 21 20 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 21 29 0 30 +30 T 29 31 20 30 29 31 +31 C 30 32 19 31 30 32 +32 C 31 33 18 32 31 33 +33 T 32 34 17 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.205 candidate_22213516 pos=16:42184208-42184248 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 26 8 7 9 +9 G 8 10 25 9 8 10 +10 A 9 11 24 10 9 11 +11 A 10 12 23 11 10 12 +12 A 11 13 22 12 11 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 12 22 0 23 +23 T 22 24 11 23 22 24 +24 T 23 25 10 24 23 25 +25 C 24 26 9 25 24 26 +26 T 25 27 8 26 25 27 +27 G 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -5.901 candidate_22214148 pos=16:32110929-32110969 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 G 13 15 22 14 13 15 +15 C 14 16 21 15 14 16 +16 A 15 17 20 16 15 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 16 20 0 21 +21 G 20 22 15 21 20 22 +22 C 21 23 14 22 21 23 +23 A 22 24 0 23 22 0 +24 G 23 25 0 24 0 25 +25 G 24 26 37 25 24 26 +26 C 25 27 36 26 25 27 +27 C 26 28 35 27 26 28 +28 A 27 29 34 28 27 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 28 34 0 35 +35 G 34 36 27 35 34 36 +36 G 35 37 26 36 35 37 +37 C 36 38 25 37 36 38 +38 A 37 39 0 38 37 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.705 candidate_22214644 pos=16:10161150-10161190 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 27 4 3 5 +5 C 4 6 26 5 4 6 +6 A 5 7 25 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 23 8 0 9 +9 G 8 10 22 9 8 10 +10 A 9 11 21 10 9 11 +11 A 10 12 20 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 11 20 0 21 +21 T 20 22 10 21 20 22 +22 C 21 23 9 22 21 23 +23 T 22 24 8 23 22 0 +24 G 23 25 0 24 0 0 +25 T 24 26 6 25 0 26 +26 G 25 27 5 26 25 27 +27 T 26 28 4 27 26 28 +28 C 27 29 0 28 27 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 32 +32 G 31 33 40 32 31 33 +33 C 32 34 39 33 32 34 +34 C 33 35 38 34 33 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 34 38 0 39 +39 G 38 40 33 39 38 40 +40 C 39 0 32 40 39 0 +40 dG = -3.188 candidate_22218001 pos=16:6153321-6153361 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 23 5 4 6 +6 A 5 7 22 6 5 7 +7 A 6 8 21 7 6 8 +8 A 7 9 20 8 7 9 +9 G 8 10 19 9 8 10 +10 A 9 11 18 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 10 18 0 19 +19 C 18 20 9 19 18 20 +20 T 19 21 8 20 19 21 +21 T 20 22 7 21 20 22 +22 T 21 23 6 22 21 23 +23 G 22 24 5 23 22 24 +24 G 23 25 0 24 23 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.164 candidate_22220205 pos=16:51104997-51105037 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 20 +20 A 19 21 28 20 19 21 +21 G 20 22 27 21 20 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 21 27 0 28 +28 T 27 29 20 28 27 29 +29 G 28 30 0 29 28 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.498 candidate_22221967 pos=16:78121594-78121634 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 32 7 6 8 +8 A 7 9 31 8 7 9 +9 G 8 10 30 9 8 10 +10 A 9 11 29 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 10 29 0 30 +30 C 29 31 9 30 29 31 +31 T 30 32 8 31 30 32 +32 T 31 33 7 32 31 33 +33 C 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.274 candidate_22226467 pos=16:85140359-85140399 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 G 14 16 28 15 14 16 +16 G 15 17 27 16 15 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 16 27 0 28 +28 C 27 29 15 28 27 29 +29 A 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.919 candidate_22230471 pos=16:48150618-48150658 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 21 +21 G 20 22 30 21 20 22 +22 G 21 23 29 22 21 23 +23 A 22 24 28 23 22 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 23 28 0 29 +29 C 28 30 22 29 28 30 +30 C 29 31 21 30 29 31 +31 A 30 32 0 31 30 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.827 candidate_22231264 pos=16:35100492-35100532 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 T 11 13 23 12 11 13 +13 G 12 14 22 13 12 14 +14 A 13 15 21 14 13 15 +15 A 14 16 20 15 14 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 15 20 0 21 +21 T 20 22 14 21 20 22 +22 C 21 23 13 22 21 23 +23 A 22 24 12 23 22 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 29 +29 G 28 30 39 29 28 30 +30 G 29 31 38 30 29 31 +31 T 30 32 37 31 30 32 +32 G 31 33 36 32 31 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 32 36 0 37 +37 A 36 38 31 37 36 38 +38 C 37 39 30 38 37 39 +39 C 38 40 29 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -2.764 candidate_22231544 pos=16:62146595-62146635 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 A 10 12 22 11 10 12 +12 T 11 13 21 12 11 13 +13 G 12 14 20 13 12 14 +14 G 13 15 19 14 13 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 14 19 0 20 +20 C 19 21 13 20 19 21 +21 A 20 22 12 21 20 22 +22 T 21 23 11 22 21 0 +23 G 22 24 0 23 0 24 +24 C 23 25 35 24 23 25 +25 C 24 26 34 25 24 26 +26 A 25 27 33 26 25 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 26 33 0 34 +34 G 33 35 25 34 33 35 +35 G 34 36 24 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.302 candidate_22234415 pos=16:53153978-53154018 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 14 +14 C 13 15 26 14 13 15 +15 C 14 16 25 15 14 16 +16 A 15 17 24 16 15 17 +17 C 16 18 23 17 16 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 17 23 0 24 +24 T 23 25 16 24 23 25 +25 G 24 26 15 25 24 26 +26 G 25 27 14 26 25 27 +27 G 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.767 candidate_22235188 pos=16:84110136-84110176 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 10 +10 A 9 11 29 10 9 11 +11 C 10 12 28 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 26 13 0 14 +14 A 13 15 25 14 13 15 +15 G 14 16 24 15 14 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 15 24 0 25 +25 T 24 26 14 25 24 26 +26 G 25 27 13 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 11 28 0 29 +29 T 28 30 10 29 28 30 +30 A 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.452 candidate_22235294 pos=16:85110795-85110835 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 28 13 12 14 +14 A 13 15 27 14 13 15 +15 T 14 16 26 15 14 16 +16 G 15 17 25 16 15 0 +17 C 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 16 25 0 26 +26 A 25 27 15 26 25 27 +27 T 26 28 14 27 26 28 +28 G 27 29 13 28 27 29 +29 G 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.822 candidate_22235562 pos=16:66120355-66120395 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 15 +15 G 14 16 36 15 14 16 +16 A 15 17 35 16 15 17 +17 G 16 18 34 17 16 18 +18 C 17 19 33 18 17 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 18 33 0 34 +34 C 33 35 17 34 33 35 +35 T 34 36 16 35 34 36 +36 C 35 37 15 36 35 37 +37 T 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.312 candidate_22237073 pos=16:95114060-95114100 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 24 5 4 6 +6 A 5 7 23 6 5 7 +7 A 6 8 22 7 6 8 +8 A 7 9 21 8 7 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 8 21 0 22 +22 T 21 23 7 22 21 23 +23 T 22 24 6 23 22 24 +24 G 23 25 5 24 23 25 +25 C 24 26 0 25 24 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.642 candidate_22238881 pos=16:91149318-91149358 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 10 +10 A 9 11 37 10 9 11 +11 C 10 12 36 11 10 12 +12 C 11 13 35 12 11 13 +13 C 12 14 34 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 13 34 0 35 +35 G 34 36 12 35 34 36 +36 G 35 37 11 36 35 37 +37 T 36 38 10 37 36 38 +38 A 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.95 candidate_22240123 pos=16:58145273-58145313 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 G 21 23 40 22 21 23 +23 G 22 24 39 23 22 24 +24 G 23 25 38 24 23 0 +25 C 24 26 0 25 0 0 +26 G 25 27 35 26 0 27 +27 T 26 28 34 27 26 28 +28 T 27 29 33 28 27 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 28 33 0 34 +34 A 33 35 27 34 33 35 +35 C 34 36 26 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 24 38 0 39 +39 C 38 40 23 39 38 40 +40 C 39 0 22 40 39 0 +40 dG = -0.649 candidate_22240135 pos=16:32114579-32114619 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 C 14 16 32 15 14 16 +16 C 15 17 31 16 15 17 +17 A 16 18 30 17 16 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 17 30 0 31 +31 G 30 32 16 31 30 32 +32 G 31 33 15 32 31 33 +33 A 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.637 candidate_22240291 pos=16:18162248-18162288 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 16 7 6 8 +8 A 7 9 15 8 7 9 +9 G 8 10 14 9 8 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 9 14 0 15 +15 T 14 16 8 15 14 16 +16 T 15 17 7 16 15 17 +17 A 16 18 0 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 T 19 21 34 20 19 21 +21 C 20 22 33 21 20 22 +22 C 21 23 32 22 21 23 +23 A 22 24 31 23 22 24 +24 G 23 25 30 24 23 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 24 30 0 31 +31 T 30 32 23 31 30 32 +32 G 31 33 22 32 31 33 +33 G 32 34 21 33 32 34 +34 A 33 35 20 34 33 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.484 candidate_22242413 pos=16:97176240-97176280 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 17 5 4 6 +6 A 5 7 16 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 6 16 0 17 +17 G 16 18 5 17 16 18 +18 A 17 19 0 18 17 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.593 candidate_22242847 pos=16:41171621-41171661 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 19 +19 C 18 20 38 19 18 20 +20 C 19 21 37 20 19 21 +21 T 20 22 36 21 20 22 +22 A 21 23 35 22 21 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 32 25 0 26 +26 G 25 27 31 26 25 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 26 31 0 32 +32 A 31 33 25 32 31 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 22 35 0 36 +36 A 35 37 21 36 35 37 +37 G 36 38 20 37 36 38 +38 G 37 39 19 38 37 39 +39 A 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -1.217 candidate_22243294 pos=16:91118707-91118747 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 23 +23 G 22 24 37 23 22 24 +24 G 23 25 36 24 23 0 +25 A 24 26 0 25 0 0 +26 G 25 27 34 26 0 27 +27 A 26 28 33 27 26 28 +28 C 27 29 32 28 27 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 28 32 0 33 +33 T 32 34 27 33 32 34 +34 C 33 35 26 34 33 0 +35 A 34 36 0 35 0 0 +36 C 35 37 24 36 0 37 +37 C 36 38 23 37 36 38 +38 A 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +0 dG = 998.226 candidate_22244228 pos=16:6117975-6118015 +40 dG = 1.214 candidate_22244542 pos=16:31144986-31145026 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 17 4 3 5 +5 C 4 6 16 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 5 16 0 17 +17 T 16 18 4 17 16 18 +18 G 17 19 0 18 17 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.792 candidate_22245248 pos=16:90156432-90156472 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 25 8 7 9 +9 G 8 10 24 9 8 10 +10 A 9 11 23 10 9 11 +11 G 10 12 22 11 10 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 11 22 0 23 +23 T 22 24 10 23 22 24 +24 C 23 25 9 24 23 25 +25 T 24 26 8 25 24 26 +26 G 25 27 0 26 25 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.522 candidate_22246691 pos=16:5178259-5178299 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 C 18 20 32 19 18 20 +20 T 19 21 31 20 19 21 +21 C 20 22 30 21 20 22 +22 G 21 23 29 22 21 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 22 29 0 30 +30 G 29 31 21 30 29 31 +31 A 30 32 20 31 30 32 +32 G 31 33 19 32 31 33 +33 G 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.735 candidate_22248005 pos=16:68163705-68163745 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 16 7 6 8 +8 A 7 9 15 8 7 9 +9 G 8 10 14 9 8 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 9 14 0 15 +15 T 14 16 8 15 14 16 +16 T 15 17 7 16 15 17 +17 G 16 18 0 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 32 +32 C 31 33 39 32 31 33 +33 A 32 34 38 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 33 38 0 39 +39 G 38 40 32 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.527 candidate_22249466 pos=16:53198620-53198660 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 C 12 14 27 13 12 0 +14 A 13 15 0 14 0 0 +15 T 14 16 25 15 0 16 +16 T 15 17 24 16 15 17 +17 C 16 18 23 17 16 18 +18 A 17 19 22 18 17 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 18 22 0 23 +23 G 22 24 17 23 22 24 +24 A 23 25 16 24 23 25 +25 A 24 26 15 25 24 0 +26 G 25 27 0 26 0 0 +27 G 26 28 13 27 0 28 +28 G 27 29 0 28 27 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.709 candidate_22249903 pos=16:20170601-20170641 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 14 4 3 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 T 13 15 4 14 13 15 +15 A 14 16 0 15 14 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.911 candidate_22250312 pos=16:3109155-3109195 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 13 3 2 4 +4 A 3 5 12 4 3 5 +5 C 4 6 11 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 5 11 0 12 +12 T 11 13 4 12 11 13 +13 T 12 14 3 13 12 14 +14 G 13 15 0 14 13 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 G 24 26 37 25 24 26 +26 G 25 27 36 26 25 27 +27 T 26 28 35 27 26 28 +28 G 27 29 34 28 27 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 28 34 0 35 +35 A 34 36 27 35 34 36 +36 C 35 37 26 36 35 37 +37 C 36 38 25 37 36 38 +38 T 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.609 candidate_22251468 pos=16:51149587-51149627 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 27 +27 C 26 28 38 27 26 28 +28 A 27 29 37 28 27 29 +29 G 28 30 36 29 28 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 29 36 0 37 +37 T 36 38 28 37 36 38 +38 G 37 39 27 38 37 39 +39 G 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = -2.622 candidate_22251480 pos=16:62192811-62192851 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 21 +21 G 20 22 33 21 20 22 +22 A 21 23 32 22 21 23 +23 G 22 24 31 23 22 24 +24 G 23 25 30 24 23 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 24 30 0 31 +31 C 30 32 23 31 30 32 +32 T 31 33 22 32 31 33 +33 C 32 34 21 33 32 34 +34 T 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -4.591 candidate_22254279 pos=16:39105899-39105939 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 A 12 14 0 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 21 +21 C 20 22 36 21 20 22 +22 C 21 23 35 22 21 23 +23 C 22 24 34 23 22 24 +24 A 23 25 33 24 23 25 +25 G 24 26 32 25 24 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 25 32 0 33 +33 T 32 34 24 33 32 34 +34 G 33 35 23 34 33 35 +35 G 34 36 22 35 34 36 +36 G 35 37 21 36 35 37 +37 G 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.016 candidate_22263227 pos=16:65100596-65100636 +1 A 0 2 0 1 0 2 +2 A 1 3 36 2 1 3 +3 A 2 4 35 3 2 4 +4 A 3 5 34 4 3 5 +5 C 4 6 33 5 4 6 +6 A 5 7 32 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 29 9 0 10 +10 C 9 11 28 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 10 28 0 29 +29 C 28 30 9 29 28 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 6 32 0 33 +33 G 32 34 5 33 32 34 +34 T 33 35 4 34 33 35 +35 T 34 36 3 35 34 36 +36 T 35 37 2 36 35 37 +37 C 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.179 candidate_22264711 pos=16:96115374-96115414 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 24 +24 C 23 25 34 24 23 25 +25 A 24 26 33 25 24 26 +26 G 25 27 32 26 25 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 26 32 0 33 +33 T 32 34 25 33 32 34 +34 G 33 35 24 34 33 35 +35 T 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.928 candidate_22266827 pos=16:46140996-46141036 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 36 5 4 6 +6 A 5 7 35 6 5 7 +7 A 6 8 34 7 6 8 +8 A 7 9 33 8 7 0 +9 G 8 10 0 9 0 0 +10 C 9 11 30 10 0 11 +11 A 10 12 29 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 27 13 0 14 +14 T 13 15 26 14 13 15 +15 T 14 16 25 15 14 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 15 25 0 26 +26 A 25 27 14 26 25 27 +27 G 26 28 13 27 26 0 +28 G 27 29 0 28 0 0 +29 T 28 30 11 29 0 30 +30 G 29 31 10 30 29 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 8 33 0 34 +34 T 33 35 7 34 33 35 +35 T 34 36 6 35 34 36 +36 G 35 37 5 36 35 37 +37 G 36 38 0 37 36 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.889 candidate_22267124 pos=16:64124738-64124778 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 36 20 19 21 +21 A 20 22 35 21 20 22 +22 G 21 23 34 22 21 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 22 34 0 35 +35 T 34 36 21 35 34 36 +36 G 35 37 20 36 35 37 +37 A 36 38 0 37 36 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.292 candidate_22267784 pos=16:93148087-93148127 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 A 11 13 33 12 11 13 +13 G 12 14 32 13 12 14 +14 G 13 15 31 14 13 15 +15 C 14 16 30 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 15 30 0 31 +31 C 30 32 14 31 30 32 +32 C 31 33 13 32 31 33 +33 T 32 34 12 33 32 34 +34 G 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.672 candidate_22267986 pos=16:49132159-49132199 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 10 +10 C 9 11 22 10 9 11 +11 A 10 12 21 11 10 12 +12 A 11 13 20 12 11 13 +13 G 12 14 19 13 12 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 13 19 0 20 +20 T 19 21 12 20 19 21 +21 T 20 22 11 21 20 22 +22 G 21 23 10 22 21 23 +23 T 22 24 0 23 22 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.191 candidate_22270008 pos=16:37196041-37196081 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 13 +13 C 12 14 35 13 12 14 +14 C 13 15 34 14 13 15 +15 A 14 16 33 15 14 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 15 33 0 34 +34 G 33 35 14 34 33 35 +35 G 34 36 13 35 34 36 +36 A 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.409 candidate_22270492 pos=16:68171225-68171265 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 A 10 12 19 11 10 12 +12 C 11 13 18 12 11 13 +13 T 12 14 17 13 12 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 13 17 0 18 +18 G 17 19 12 18 17 19 +19 T 18 20 11 19 18 20 +20 C 19 21 0 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.288 candidate_22270800 pos=16:57163111-57163151 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 39 6 5 7 +7 A 6 8 38 7 6 8 +8 A 7 9 37 8 7 9 +9 G 8 10 36 9 8 10 +10 C 9 11 35 10 9 11 +11 A 10 12 34 11 10 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 11 34 0 35 +35 G 34 36 10 35 34 36 +36 C 35 37 9 36 35 37 +37 T 36 38 8 37 36 38 +38 T 37 39 7 38 37 39 +39 T 38 40 6 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -2.985 candidate_22272621 pos=16:78164887-78164927 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 18 9 8 10 +10 C 9 11 17 10 9 11 +11 A 10 12 16 11 10 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 11 16 0 17 +17 G 16 18 10 17 16 18 +18 C 17 19 9 18 17 0 +19 C 18 20 36 19 0 20 +20 T 19 21 35 20 19 21 +21 T 20 22 34 21 20 22 +22 G 21 23 33 22 21 0 +23 G 22 24 0 23 0 0 +24 C 23 25 31 24 0 25 +25 T 24 26 30 25 24 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 25 30 0 31 +31 G 30 32 24 31 30 0 +32 A 31 33 0 32 0 0 +33 C 32 34 22 33 0 34 +34 A 33 35 21 34 33 35 +35 A 34 36 20 35 34 36 +36 G 35 37 19 36 35 37 +37 T 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.631 candidate_22274021 pos=16:18122906-18122946 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 18 9 8 10 +10 C 9 11 17 10 9 11 +11 A 10 12 16 11 10 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 11 16 0 17 +17 G 16 18 10 17 16 18 +18 C 17 19 9 18 17 19 +19 A 18 20 0 19 18 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 24 +24 C 23 25 36 24 23 25 +25 T 24 26 35 25 24 26 +26 G 25 27 34 26 25 27 +27 T 26 28 33 27 26 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 27 33 0 34 +34 C 33 35 26 34 33 35 +35 A 34 36 25 35 34 36 +36 G 35 37 24 36 35 37 +37 T 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.904 candidate_22274554 pos=16:4153705-4153745 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 29 9 8 10 +10 C 9 11 28 10 9 0 +11 A 10 12 0 11 0 0 +12 T 11 13 26 12 0 13 +13 G 12 14 25 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 13 25 0 26 +26 A 25 27 12 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 10 28 0 29 +29 C 28 30 9 29 28 30 +30 A 29 31 0 30 29 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.523 candidate_22274607 pos=16:25188474-25188514 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 27 4 3 5 +5 C 4 6 26 5 4 6 +6 A 5 7 25 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 23 9 0 10 +10 C 9 11 22 10 9 11 +11 A 10 12 21 11 10 12 +12 T 11 13 20 12 11 13 +13 G 12 14 19 13 12 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 13 19 0 20 +20 A 19 21 12 20 19 21 +21 T 20 22 11 21 20 22 +22 G 21 23 10 22 21 23 +23 T 22 24 9 23 22 0 +24 G 23 25 0 24 0 0 +25 T 24 26 6 25 0 26 +26 G 25 27 5 26 25 27 +27 T 26 28 4 27 26 28 +28 G 27 29 0 28 27 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.694 candidate_22274960 pos=16:18191168-18191208 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 15 3 2 4 +4 A 3 5 14 4 3 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 T 13 15 4 14 13 15 +15 T 14 16 3 15 14 16 +16 A 15 17 0 16 15 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 32 +32 G 31 33 40 32 31 33 +33 C 32 34 39 33 32 34 +34 C 33 35 38 34 33 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 34 38 0 39 +39 G 38 40 33 39 38 40 +40 C 39 0 32 40 39 0 +40 dG = -4.217 candidate_22275089 pos=16:64170152-64170192 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 A 13 15 34 14 13 15 +15 G 14 16 33 15 14 16 +16 C 15 17 32 16 15 17 +17 A 16 18 31 17 16 18 +18 A 17 19 30 18 17 20 +19 G 18 20 0 19 0 0 +20 T 19 21 29 20 18 21 +21 G 20 22 28 21 20 22 +22 C 21 23 27 22 21 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 22 27 0 28 +28 C 27 29 21 28 27 29 +29 A 28 30 20 29 28 30 +30 T 29 31 18 30 29 31 +31 T 30 32 17 31 30 32 +32 G 31 33 16 32 31 33 +33 C 32 34 15 33 32 34 +34 T 33 35 14 34 33 35 +35 A 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.215 candidate_22276314 pos=16:55137295-55137335 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 27 4 3 5 +5 C 4 6 26 5 4 6 +6 A 5 7 25 6 5 7 +7 A 6 8 24 7 6 8 +8 A 7 9 23 8 7 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 8 23 0 24 +24 T 23 25 7 24 23 25 +25 T 24 26 6 25 24 26 +26 G 25 27 5 26 25 27 +27 T 26 28 4 27 26 28 +28 G 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.082 candidate_22276407 pos=16:48163864-48163904 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 15 +15 A 14 16 39 15 14 16 +16 G 15 17 38 16 15 17 +17 A 16 18 37 17 16 18 +18 G 17 19 36 18 17 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 18 36 0 37 +37 T 36 38 17 37 36 38 +38 C 37 39 16 38 37 39 +39 T 38 40 15 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -2.282 candidate_22277296 pos=16:15184133-15184173 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 22 8 7 9 +9 G 8 10 21 9 8 10 +10 C 9 11 20 10 9 11 +11 C 10 12 19 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 11 19 0 20 +20 G 19 21 10 20 19 21 +21 C 20 22 9 21 20 22 +22 T 21 23 8 22 21 23 +23 C 22 24 0 23 22 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.967 candidate_22277386 pos=16:80198612-80198652 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 C 10 12 27 11 10 12 +12 A 11 13 26 12 11 13 +13 G 12 14 25 13 12 0 +14 A 13 15 0 14 0 0 +15 A 14 16 23 15 0 16 +16 A 15 17 22 16 15 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 16 22 0 23 +23 T 22 24 15 23 22 0 +24 A 23 25 0 24 0 0 +25 C 24 26 13 25 0 26 +26 T 25 27 12 26 25 27 +27 G 26 28 11 27 26 28 +28 A 27 29 0 28 27 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.159 candidate_22278994 pos=16:48190339-48190379 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 34 +34 G 33 35 40 34 33 35 +35 C 34 36 39 35 34 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 35 39 0 40 +40 C 39 0 34 40 39 0 +40 dG = -0.789 candidate_22279207 pos=16:90183096-90183136 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 C 23 25 36 24 23 25 +25 A 24 26 35 25 24 26 +26 G 25 27 34 26 25 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 26 34 0 35 +35 T 34 36 25 35 34 36 +36 G 35 37 24 36 35 37 +37 A 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.161 candidate_22279494 pos=16:92122139-92122179 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 12 +12 C 11 13 33 12 11 13 +13 C 12 14 32 13 12 14 +14 T 13 15 31 14 13 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 14 31 0 32 +32 G 31 33 13 32 31 33 +33 G 32 34 12 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.955 candidate_22281771 pos=16:13160190-13160230 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 A 12 14 22 13 12 14 +14 C 13 15 21 14 13 15 +15 A 14 16 20 15 14 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 15 20 0 21 +21 G 20 22 14 21 20 22 +22 T 21 23 13 22 21 23 +23 G 22 24 0 23 22 0 +24 C 23 25 0 24 0 25 +25 A 24 26 31 25 24 26 +26 G 25 27 30 26 25 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 26 30 0 31 +31 T 30 32 25 31 30 32 +32 T 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.593 candidate_22281774 pos=16:49153622-49153662 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 A 12 14 35 13 12 14 +14 C 13 15 34 14 13 15 +15 C 14 16 33 15 14 16 +16 A 15 17 32 16 15 17 +17 A 16 18 0 17 16 18 +18 A 17 19 28 18 17 19 +19 A 18 20 27 19 18 20 +20 G 19 21 26 20 19 21 +21 C 20 22 25 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 21 25 0 26 +26 C 25 27 20 26 25 27 +27 T 26 28 19 27 26 28 +28 T 27 29 18 28 27 29 +29 G 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 32 +32 T 31 33 16 32 31 33 +33 G 32 34 15 33 32 34 +34 G 33 35 14 34 33 35 +35 T 34 36 13 35 34 36 +36 G 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.434 candidate_22283034 pos=16:49153168-49153208 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 19 13 12 14 +14 A 13 15 18 14 13 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 14 18 0 19 +19 G 18 20 13 19 18 20 +20 A 19 21 0 20 19 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.189 candidate_22283133 pos=16:55104509-55104549 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 29 +29 G 28 30 38 29 28 30 +30 C 29 31 37 30 29 31 +31 C 30 32 36 31 30 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 31 36 0 37 +37 G 36 38 30 37 36 38 +38 C 37 39 29 38 37 39 +39 T 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -3.829 candidate_22285544 pos=16:43157945-43157985 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 25 3 2 4 +4 A 3 5 24 4 3 5 +5 C 4 6 23 5 4 6 +6 A 5 7 22 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 19 9 0 10 +10 C 9 11 18 10 9 11 +11 T 10 12 17 11 10 12 +12 G 11 13 16 12 11 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 12 16 0 17 +17 A 16 18 11 17 16 18 +18 G 17 19 10 18 17 19 +19 C 18 20 9 19 18 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 6 22 0 23 +23 G 22 24 5 23 22 24 +24 T 23 25 4 24 23 25 +25 T 24 26 3 25 24 26 +26 A 25 27 0 26 25 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.425 candidate_22285837 pos=16:47151351-47151391 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 14 +14 C 13 15 29 14 13 15 +15 A 14 16 28 15 14 16 +16 A 15 17 27 16 15 17 +17 A 16 18 26 17 16 18 +18 C 17 19 25 18 17 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 18 25 0 26 +26 T 25 27 17 26 25 27 +27 T 26 28 16 27 26 28 +28 T 27 29 15 28 27 29 +29 G 28 30 14 29 28 30 +30 T 29 31 0 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.447 candidate_22289175 pos=16:15136403-15136443 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 25 9 8 10 +10 G 9 11 24 10 9 11 +11 A 10 12 23 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 21 13 0 14 +14 C 13 15 20 14 13 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 14 20 0 21 +21 T 20 22 13 21 20 0 +22 G 21 23 0 22 0 0 +23 T 22 24 11 23 0 24 +24 C 23 25 10 24 23 25 +25 C 24 26 9 25 24 26 +26 C 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +0 dG = 998.226 candidate_22291090 pos=16:31132942-31132982 +40 dG = -1.042 candidate_22292624 pos=16:54121626-54121666 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 21 +21 G 20 22 35 21 20 22 +22 T 21 23 34 22 21 23 +23 G 22 24 33 23 22 24 +24 A 23 25 32 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 24 32 0 33 +33 C 32 34 23 33 32 34 +34 A 33 35 22 34 33 35 +35 C 34 36 21 35 34 36 +36 T 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.551 candidate_22292665 pos=16:8111403-8111443 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 23 +23 C 22 24 40 23 22 24 +24 A 23 25 39 24 23 25 +25 G 24 26 38 25 24 26 +26 C 25 27 37 26 25 27 +27 A 26 28 36 27 26 28 +28 A 27 29 35 28 27 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 28 35 0 36 +36 T 35 37 27 36 35 37 +37 G 36 38 26 37 36 38 +38 C 37 39 25 38 37 39 +39 T 38 40 24 39 38 40 +40 G 39 0 23 40 39 0 +40 dG = -0.904 candidate_22293865 pos=16:55185288-55185328 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 16 8 7 9 +9 G 8 10 15 9 8 10 +10 G 9 11 14 10 9 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 10 14 0 15 +15 C 14 16 9 15 14 16 +16 T 15 17 8 16 15 17 +17 A 16 18 0 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 36 20 19 21 +21 T 20 22 35 21 20 22 +22 A 21 23 34 22 21 23 +23 T 22 24 33 23 22 24 +24 A 23 25 32 24 23 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 24 32 0 33 +33 A 32 34 23 33 32 34 +34 T 33 35 22 34 33 35 +35 A 34 36 21 35 34 36 +36 G 35 37 20 36 35 37 +37 A 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.778 candidate_22294429 pos=16:31104483-31104523 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 35 8 7 9 +9 G 8 10 34 9 8 10 +10 G 9 11 33 10 9 0 +11 A 10 12 0 11 0 0 +12 G 11 13 30 12 0 13 +13 C 12 14 29 13 12 14 +14 T 13 15 28 14 13 0 +15 A 14 16 0 15 0 0 +16 A 15 17 26 16 0 17 +17 T 16 18 25 17 16 18 +18 T 17 19 24 18 17 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 18 24 0 25 +25 A 24 26 17 25 24 26 +26 T 25 27 16 26 25 0 +27 G 26 28 0 27 0 0 +28 A 27 29 14 28 0 29 +29 G 28 30 13 29 28 30 +30 C 29 31 12 30 29 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 10 33 0 34 +34 C 33 35 9 34 33 35 +35 T 34 36 8 35 34 36 +36 C 35 37 0 36 35 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +0 dG = 998.226 candidate_22294609 pos=16:73178356-73178396 +40 dG = -2.408 candidate_22297174 pos=16:60175876-60175916 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 C 10 12 26 11 10 12 +12 A 11 13 25 12 11 13 +13 A 12 14 24 13 12 14 +14 G 13 15 23 14 13 15 +15 C 14 16 22 15 14 16 +16 A 15 17 21 16 15 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 16 21 0 22 +22 G 21 23 15 22 21 23 +23 T 22 24 14 23 22 24 +24 T 23 25 13 24 23 25 +25 T 24 26 12 25 24 26 +26 G 25 27 11 26 25 27 +27 T 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.135 candidate_22297925 pos=16:46186219-46186259 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 30 8 7 9 +9 G 8 10 29 9 8 10 +10 G 9 11 28 10 9 11 +11 C 10 12 27 11 10 12 +12 A 11 13 26 12 11 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 12 26 0 27 +27 G 26 28 11 27 26 28 +28 C 27 29 10 28 27 29 +29 C 28 30 9 29 28 30 +30 T 29 31 8 30 29 31 +31 G 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -4.897 candidate_22298648 pos=16:24187087-24187127 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 21 8 7 9 +9 G 8 10 20 9 8 10 +10 G 9 11 19 10 9 11 +11 C 10 12 18 11 10 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 11 18 0 19 +19 C 18 20 10 19 18 20 +20 C 19 21 9 20 19 21 +21 T 20 22 8 21 20 22 +22 G 21 23 0 22 21 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 26 +26 G 25 27 38 26 25 27 +27 A 26 28 37 27 26 28 +28 A 27 29 36 28 27 29 +29 A 28 30 35 29 28 30 +30 C 29 31 34 30 29 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 30 34 0 35 +35 T 34 36 29 35 34 36 +36 T 35 37 28 36 35 37 +37 T 36 38 27 37 36 38 +38 C 37 39 26 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = 0.394 candidate_22298997 pos=16:26100961-26101001 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 10 +10 G 9 11 26 10 9 11 +11 C 10 12 25 11 10 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 11 25 0 26 +26 C 25 27 10 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.274 candidate_22299683 pos=16:10168337-10168377 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 18 9 8 10 +10 G 9 11 17 10 9 0 +11 C 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 10 17 0 18 +18 C 17 19 9 18 17 19 +19 A 18 20 0 19 18 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.472 candidate_22300372 pos=16:11141090-11141130 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 22 +22 G 21 23 38 22 21 23 +23 C 22 24 37 23 22 24 +24 T 23 25 36 24 23 25 +25 C 24 26 35 25 24 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 25 35 0 36 +36 A 35 37 24 36 35 37 +37 G 36 38 23 37 36 38 +38 C 37 39 22 38 37 39 +39 A 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -3.561 candidate_22300595 pos=16:42103309-42103349 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 18 6 5 7 +7 A 6 8 17 7 6 8 +8 A 7 9 16 8 7 9 +9 G 8 10 15 9 8 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 9 15 0 16 +16 T 15 17 8 16 15 17 +17 T 16 18 7 17 16 18 +18 T 17 19 6 18 17 19 +19 C 18 20 0 19 18 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 27 +27 C 26 28 37 27 26 28 +28 C 27 29 36 28 27 29 +29 A 28 30 35 29 28 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 29 35 0 36 +36 G 35 37 28 36 35 37 +37 G 36 38 27 37 36 38 +38 A 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.142 candidate_22300923 pos=16:97165790-97165830 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 G 12 14 0 13 0 14 +14 C 13 15 26 14 13 15 +15 A 14 16 25 15 14 16 +16 G 15 17 24 16 15 17 +17 A 16 18 23 17 16 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 17 23 0 24 +24 C 23 25 16 24 23 25 +25 T 24 26 15 25 24 26 +26 G 25 27 14 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.695 candidate_22300972 pos=16:31194128-31194168 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 G 12 14 26 13 12 14 +14 C 13 15 25 14 13 15 +15 T 14 16 24 15 14 16 +16 T 15 17 23 16 15 17 +17 G 16 18 22 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 17 22 0 23 +23 A 22 24 16 23 22 24 +24 G 23 25 15 24 23 25 +25 G 24 26 14 25 24 26 +26 C 25 27 13 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.585 candidate_22302074 pos=16:5109235-5109275 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 15 8 7 9 +9 G 8 10 14 9 8 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 9 14 0 15 +15 T 14 16 8 15 14 16 +16 G 15 17 0 16 15 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 G 24 26 34 25 24 26 +26 A 25 27 33 26 25 27 +27 G 26 28 32 27 26 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 27 32 0 33 +33 T 32 34 26 33 32 34 +34 C 33 35 25 34 33 35 +35 A 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -5.807 candidate_22302160 pos=16:90124634-90124674 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 17 9 8 10 +10 G 9 11 16 10 9 11 +11 G 10 12 15 11 10 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 11 15 0 16 +16 C 15 17 10 16 15 17 +17 C 16 18 9 17 16 18 +18 A 17 19 0 18 17 0 +19 G 18 20 34 19 0 20 +20 C 19 21 33 20 19 21 +21 A 20 22 32 21 20 22 +22 G 21 23 31 22 21 23 +23 C 22 24 30 23 22 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 23 30 0 31 +31 C 30 32 22 31 30 32 +32 T 31 33 21 32 31 33 +33 G 32 34 20 33 32 34 +34 C 33 35 19 34 33 35 +35 A 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +0 dG = 998.226 candidate_22302865 pos=16:13127182-13127222 +40 dG = -6.341 candidate_22305091 pos=16:15186089-15186129 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 11 +11 G 10 12 32 11 10 12 +12 G 11 13 31 12 11 13 +13 T 12 14 30 13 12 14 +14 G 13 15 29 14 13 15 +15 G 14 16 28 15 14 16 +16 G 15 17 27 16 15 17 +17 A 16 18 26 17 16 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 17 26 0 27 +27 C 26 28 16 27 26 28 +28 C 27 29 15 28 27 29 +29 C 28 30 14 29 28 30 +30 A 29 31 13 30 29 31 +31 C 30 32 12 31 30 32 +32 C 31 33 11 32 31 33 +33 A 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -3.998 candidate_22305276 pos=16:12138525-12138565 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 A 12 14 30 13 12 14 +14 C 13 15 29 14 13 15 +15 A 14 16 28 15 14 16 +16 C 15 17 27 16 15 17 +17 A 16 18 26 17 16 18 +18 A 17 19 25 18 17 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 18 25 0 26 +26 T 25 27 17 26 25 27 +27 G 26 28 16 27 26 28 +28 T 27 29 15 28 27 29 +29 G 28 30 14 29 28 30 +30 T 29 31 13 30 29 31 +31 G 30 32 0 31 30 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.006 candidate_22306763 pos=16:54145774-54145814 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 C 21 23 30 22 21 23 +23 C 22 24 29 23 22 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 23 29 0 30 +30 G 29 31 22 30 29 31 +31 A 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.508 candidate_22306792 pos=16:32126901-32126941 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 16 8 7 9 +9 G 8 10 15 9 8 10 +10 G 9 11 14 10 9 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 10 14 0 15 +15 C 14 16 9 15 14 16 +16 T 15 17 8 16 15 17 +17 G 16 18 0 17 16 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 22 +22 C 21 23 31 22 21 23 +23 C 22 24 30 23 22 24 +24 A 23 25 29 24 23 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 24 29 0 30 +30 G 29 31 23 30 29 31 +31 G 30 32 22 31 30 32 +32 A 31 33 0 32 31 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.665 candidate_22307094 pos=16:13176077-13176117 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 29 +29 A 28 30 40 29 28 30 +30 G 29 31 39 30 29 31 +31 A 30 32 38 31 30 32 +32 A 31 33 37 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 32 37 0 38 +38 T 37 39 31 38 37 39 +39 C 38 40 30 39 38 40 +40 T 39 0 29 40 39 0 +40 dG = -1.026 candidate_22307991 pos=16:34107515-34107555 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 32 +32 C 31 33 39 32 31 33 +33 C 32 34 38 33 32 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 33 38 0 39 +39 G 38 40 32 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -4.151 candidate_22308271 pos=16:93102076-93102116 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 A 12 14 0 13 12 0 +14 G 13 15 0 14 0 15 +15 C 14 16 33 15 14 16 +16 A 15 17 32 16 15 17 +17 G 16 18 31 17 16 18 +18 G 17 19 30 18 17 19 +19 C 18 20 29 19 18 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 19 29 0 30 +30 C 29 31 18 30 29 31 +31 C 30 32 17 31 30 32 +32 T 31 33 16 32 31 33 +33 G 32 34 15 33 32 34 +34 G 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.364 candidate_22308782 pos=16:39186247-39186287 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 12 5 4 6 +6 A 5 7 11 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 6 11 0 12 +12 G 11 13 5 12 11 13 +13 G 12 14 0 13 12 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -4.334 candidate_22309502 pos=16:18197471-18197511 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 20 6 5 7 +7 A 6 8 19 7 6 8 +8 A 7 9 18 8 7 9 +9 G 8 10 17 9 8 10 +10 G 9 11 16 10 9 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 10 16 0 17 +17 C 16 18 9 17 16 18 +18 T 17 19 8 18 17 19 +19 T 18 20 7 19 18 20 +20 T 19 21 6 20 19 21 +21 C 20 22 0 21 20 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 26 +26 C 25 27 35 26 25 27 +27 C 26 28 34 27 26 28 +28 C 27 29 33 28 27 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 28 33 0 34 +34 G 33 35 27 34 33 35 +35 G 34 36 26 35 34 36 +36 T 35 37 0 36 35 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.045 candidate_22309582 pos=16:77139315-77139355 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 C 12 14 37 13 12 14 +14 T 13 15 36 14 13 15 +15 T 14 16 35 15 14 16 +16 C 15 17 34 16 15 17 +17 T 16 18 33 17 16 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 17 33 0 34 +34 G 33 35 16 34 33 35 +35 A 34 36 15 35 34 36 +36 A 35 37 14 36 35 37 +37 G 36 38 13 37 36 38 +38 G 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.281 candidate_22311802 pos=16:72102985-72103025 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 20 +20 A 19 21 35 20 19 21 +21 A 20 22 34 21 20 22 +22 G 21 23 33 22 21 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 22 33 0 34 +34 T 33 35 21 34 33 35 +35 T 34 36 20 35 34 36 +36 G 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.516 candidate_22317162 pos=16:93153957-93153997 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 A 13 15 0 14 13 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.821 candidate_22322429 pos=16:10191280-10191320 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 24 6 5 7 +7 A 6 8 23 7 6 8 +8 A 7 9 22 8 7 9 +9 G 8 10 21 9 8 10 +10 T 9 11 20 10 9 11 +11 C 10 12 19 11 10 12 +12 T 11 13 18 12 11 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 12 18 0 19 +19 G 18 20 11 19 18 20 +20 G 19 21 10 20 19 21 +21 C 20 22 9 21 20 22 +22 T 21 23 8 22 21 23 +23 T 22 24 7 23 22 24 +24 T 23 25 6 24 23 25 +25 C 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.513 candidate_22322736 pos=16:70183950-70183990 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 G 12 14 0 13 0 14 +14 G 13 15 34 14 13 15 +15 G 14 16 33 15 14 16 +16 G 15 17 32 16 15 17 +17 T 16 18 31 17 16 0 +18 T 17 19 0 18 0 0 +19 T 18 20 29 19 0 20 +20 G 19 21 28 20 19 21 +21 G 20 22 27 21 20 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 21 27 0 28 +28 C 27 29 20 28 27 29 +29 A 28 30 19 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 17 31 0 32 +32 T 31 33 16 32 31 33 +33 C 32 34 15 33 32 34 +34 C 33 35 14 34 33 35 +35 T 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.389 candidate_22324337 pos=16:86170469-86170509 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 21 13 12 14 +14 T 13 15 20 14 13 15 +15 A 14 16 19 15 14 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 15 19 0 20 +20 A 19 21 14 20 19 21 +21 G 20 22 13 21 20 22 +22 G 21 23 0 22 21 0 +23 G 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.29 candidate_22325033 pos=16:18199206-18199246 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 15 +15 C 14 16 39 15 14 16 +16 T 15 17 38 16 15 17 +17 G 16 18 37 17 16 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 35 20 0 21 +21 G 20 22 34 21 20 22 +22 C 21 23 33 22 21 23 +23 C 22 24 32 23 22 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 23 32 0 33 +33 G 32 34 22 33 32 34 +34 C 33 35 21 34 33 35 +35 T 34 36 20 35 34 0 +36 A 35 37 0 36 0 0 +37 C 36 38 17 37 0 38 +38 A 37 39 16 38 37 39 +39 G 38 40 15 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -1.96 candidate_22325960 pos=16:88141120-88141160 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 30 9 8 10 +10 T 9 11 29 10 9 11 +11 G 10 12 28 11 10 12 +12 C 11 13 27 12 11 13 +13 T 12 14 26 13 12 0 +14 T 13 15 0 14 0 0 +15 C 14 16 23 15 0 16 +16 A 15 17 22 16 15 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 16 22 0 23 +23 G 22 24 15 23 22 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 13 26 0 27 +27 G 26 28 12 27 26 28 +28 C 27 29 11 28 27 29 +29 A 28 30 10 29 28 30 +30 C 29 31 9 30 29 31 +31 C 30 32 0 31 30 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.451 candidate_22328152 pos=16:76113352-76113392 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 G 8 10 24 9 8 10 +10 T 9 11 23 10 9 11 +11 G 10 12 22 11 10 12 +12 T 11 13 21 12 11 13 +13 G 12 14 20 13 12 14 +14 G 13 15 19 14 13 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 14 19 0 20 +20 C 19 21 13 20 19 21 +21 G 20 22 12 21 20 22 +22 C 21 23 11 22 21 23 +23 G 22 24 10 23 22 24 +24 C 23 25 9 24 23 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.572 candidate_22331015 pos=16:26162478-26162518 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 G 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 18 +18 G 17 19 33 18 17 19 +19 G 18 20 32 19 18 20 +20 C 19 21 31 20 19 21 +21 C 20 22 30 21 20 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 21 30 0 31 +31 G 30 32 20 31 30 32 +32 C 31 33 19 32 31 33 +33 C 32 34 18 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -5.062 candidate_22334198 pos=16:75129428-75129468 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 32 5 4 6 +6 A 5 7 31 6 5 7 +7 A 6 8 30 7 6 0 +8 A 7 9 0 8 0 0 +9 G 8 10 28 9 0 10 +10 T 9 11 27 10 9 11 +11 T 10 12 26 11 10 12 +12 T 11 13 25 12 11 13 +13 G 12 14 24 13 12 14 +14 A 13 15 23 14 13 15 +15 G 14 16 22 15 14 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 C 21 23 15 22 0 23 +23 T 22 24 14 23 22 24 +24 C 23 25 13 24 23 25 +25 A 24 26 12 25 24 26 +26 A 25 27 11 26 25 27 +27 A 26 28 10 27 26 28 +28 C 27 29 9 28 27 0 +29 C 28 30 0 29 0 0 +30 T 29 31 7 30 0 31 +31 T 30 32 6 31 30 32 +32 G 31 33 5 32 31 33 +33 C 32 34 0 33 32 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.711 candidate_22334282 pos=16:33149008-33149048 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 38 6 5 7 +7 A 6 8 37 7 6 8 +8 A 7 9 36 8 7 9 +9 G 8 10 35 9 8 10 +10 T 9 11 34 10 9 11 +11 T 10 12 33 11 10 0 +12 T 11 13 25 12 0 13 +13 G 12 14 24 13 12 14 +14 C 13 15 23 14 13 15 +15 C 14 16 22 15 14 16 +16 A 15 17 21 16 15 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 16 21 0 22 +22 G 21 23 15 22 21 23 +23 G 22 24 14 23 22 24 +24 C 23 25 13 24 23 25 +25 A 24 26 12 25 24 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 11 33 0 34 +34 A 33 35 10 34 33 35 +35 C 34 36 9 35 34 36 +36 T 35 37 8 36 35 37 +37 T 36 38 7 37 36 38 +38 T 37 39 6 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = 0.554 candidate_22337724 pos=16:96115203-96115243 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 30 +30 C 29 31 39 30 29 31 +31 C 30 32 38 31 30 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 G 37 39 31 38 0 39 +39 G 38 40 30 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -0.926 candidate_22342579 pos=16:44128322-44128362 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 27 20 19 21 +21 C 20 22 26 21 20 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 21 26 0 27 +27 C 26 28 20 27 26 28 +28 A 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.101 candidate_22344144 pos=16:15131264-15131304 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 27 +27 G 26 28 37 27 26 28 +28 A 27 29 36 28 27 29 +29 A 28 30 35 29 28 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 29 35 0 36 +36 T 35 37 28 36 35 37 +37 C 36 38 27 37 36 38 +38 C 37 39 0 38 37 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.292 candidate_22348223 pos=16:60138660-60138700 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 23 12 11 13 +13 A 12 14 22 13 12 14 +14 G 13 15 21 14 13 15 +15 T 14 16 20 15 14 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 15 20 0 21 +21 C 20 22 14 21 20 22 +22 T 21 23 13 22 21 23 +23 G 22 24 12 23 22 24 +24 G 23 25 0 24 23 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.237 candidate_22349222 pos=16:51186899-51186939 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 29 12 11 13 +13 C 12 14 28 13 12 0 +14 G 13 15 0 14 0 0 +15 C 14 16 26 15 0 16 +16 A 15 17 25 16 15 17 +17 T 16 18 24 17 16 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 17 24 0 25 +25 T 24 26 16 25 24 26 +26 G 25 27 15 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 13 28 0 29 +29 G 28 30 12 29 28 30 +30 C 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.955 candidate_22349836 pos=16:39185937-39185977 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 19 12 11 13 +13 T 12 14 18 13 12 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 13 18 0 19 +19 G 18 20 12 19 18 20 +20 A 19 21 0 20 19 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 30 +30 C 29 31 38 30 29 31 +31 A 30 32 37 31 30 32 +32 C 31 33 36 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 32 36 0 37 +37 T 36 38 31 37 36 38 +38 G 37 39 30 38 37 39 +39 A 38 40 0 39 38 0 +40 G 39 0 0 40 0 0 +40 dG = -1.359 candidate_22350221 pos=16:76188356-76188396 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 C 15 17 26 16 15 17 +17 T 16 18 25 17 16 18 +18 C 17 19 24 18 17 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 18 24 0 25 +25 A 24 26 17 25 24 26 +26 G 25 27 16 26 25 27 +27 G 26 28 0 27 26 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.842 candidate_22354848 pos=16:6143948-6143988 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 G 13 15 0 14 13 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 30 +30 G 29 31 37 30 29 31 +31 C 30 32 36 31 30 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 31 36 0 37 +37 C 36 38 30 37 36 38 +38 A 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.722 candidate_22355635 pos=16:60105525-60105565 +1 A 0 2 18 1 0 2 +2 A 1 3 17 2 1 3 +3 A 2 4 16 3 2 0 +4 A 3 5 0 4 0 0 +5 C 4 6 14 5 0 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 0 +15 G 14 16 0 15 0 0 +16 T 15 17 3 16 0 17 +17 T 16 18 2 17 16 18 +18 T 17 19 1 18 17 19 +19 T 18 20 0 19 18 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 G 22 24 31 23 22 24 +24 G 23 25 30 24 23 25 +25 C 24 26 29 25 24 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 25 29 0 30 +30 C 29 31 24 30 29 31 +31 C 30 32 23 31 30 32 +32 C 31 33 0 32 31 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.854 candidate_22356305 pos=16:88124318-88124358 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 C 22 24 35 23 22 24 +24 T 23 25 34 24 23 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 24 34 0 35 +35 G 34 36 23 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.674 candidate_22357832 pos=16:20117628-20117668 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 C 10 12 19 11 10 12 +12 A 11 13 18 12 11 13 +13 C 12 14 17 13 12 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 13 17 0 18 +18 T 17 19 12 18 17 19 +19 G 18 20 11 19 18 20 +20 C 19 21 0 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 G 24 26 40 25 24 26 +26 G 25 27 39 26 25 27 +27 G 26 28 38 27 26 28 +28 A 27 29 37 28 27 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 28 37 0 38 +38 C 37 39 27 38 37 39 +39 C 38 40 26 39 38 40 +40 C 39 0 25 40 39 0 +40 dG = -0.578 candidate_22358340 pos=16:75187595-75187635 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 21 4 3 5 +5 C 4 6 20 5 4 6 +6 A 5 7 19 6 5 7 +7 A 6 8 18 7 6 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 7 18 0 19 +19 T 18 20 6 19 18 20 +20 G 19 21 5 20 19 21 +21 T 20 22 4 21 20 22 +22 A 21 23 0 22 21 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 25 +25 A 24 26 32 25 24 26 +26 C 25 27 31 26 25 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 26 31 0 32 +32 T 31 33 25 32 31 33 +33 A 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.949 candidate_22359397 pos=16:72145410-72145450 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 0 23 0 24 +24 G 23 25 35 24 23 25 +25 T 24 26 34 25 24 26 +26 G 25 27 33 26 25 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 26 33 0 34 +34 A 33 35 25 34 33 35 +35 C 34 36 24 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.618 candidate_22361207 pos=16:6135546-6135586 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 23 +23 G 22 24 39 23 22 24 +24 T 23 25 38 24 23 25 +25 T 24 26 37 25 24 26 +26 G 25 27 36 26 25 27 +27 G 26 28 35 27 26 28 +28 T 27 29 34 28 27 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 28 34 0 35 +35 C 34 36 27 35 34 36 +36 C 35 37 26 36 35 37 +37 A 36 38 25 37 36 38 +38 A 37 39 24 38 37 39 +39 T 38 40 23 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.726 candidate_22363266 pos=16:84123068-84123108 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 32 24 23 25 +25 G 24 26 31 25 24 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 25 31 0 32 +32 C 31 33 24 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.822 candidate_22363675 pos=16:54122567-54122607 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 T 22 24 32 23 22 24 +24 C 23 25 31 24 23 25 +25 C 24 26 30 25 24 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 25 30 0 31 +31 G 30 32 24 31 30 32 +32 A 31 33 23 32 31 0 +33 G 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.312 candidate_22366619 pos=16:36101464-36101504 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 14 +14 C 13 15 22 14 13 15 +15 C 14 16 21 15 14 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 15 21 0 22 +22 G 21 23 14 22 21 23 +23 A 22 24 0 23 22 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 28 +28 G 27 29 36 28 27 29 +29 C 28 30 35 29 28 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 29 35 0 36 +36 C 35 37 28 36 35 37 +37 C 36 38 0 37 36 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -4.359 candidate_22369611 pos=16:14186124-14186164 +1 A 0 2 0 1 0 2 +2 A 1 3 14 2 1 3 +3 A 2 4 13 3 2 4 +4 A 3 5 12 4 3 5 +5 C 4 6 11 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 5 11 0 12 +12 T 11 13 4 12 11 13 +13 T 12 14 3 13 12 14 +14 T 13 15 2 14 13 15 +15 G 14 16 0 15 14 0 +16 C 15 17 0 16 0 17 +17 C 16 18 32 17 16 18 +18 C 17 19 31 18 17 0 +19 T 18 20 0 19 0 0 +20 G 19 21 29 20 0 21 +21 G 20 22 28 21 20 22 +22 T 21 23 27 22 21 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 22 27 0 28 +28 C 27 29 21 28 27 29 +29 C 28 30 20 29 28 0 +30 T 29 31 0 30 0 0 +31 G 30 32 18 31 0 32 +32 G 31 33 17 32 31 33 +33 T 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.418 candidate_22373867 pos=16:93179825-93179865 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 15 +15 T 14 16 28 15 14 16 +16 G 15 17 27 16 15 17 +17 C 16 18 26 17 16 18 +18 C 17 19 25 18 17 19 +19 T 18 20 24 19 18 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 19 24 0 25 +25 G 24 26 18 25 24 26 +26 G 25 27 17 26 25 27 +27 C 26 28 16 27 26 28 +28 A 27 29 15 28 27 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -4.355 candidate_22374476 pos=16:33181585-33181625 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 20 +20 G 19 21 35 20 19 21 +21 C 20 22 34 21 20 22 +22 C 21 23 33 22 21 23 +23 T 22 24 32 23 22 24 +24 G 23 25 31 24 23 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 24 31 0 32 +32 A 31 33 23 32 31 33 +33 G 32 34 22 33 32 34 +34 G 33 35 21 34 33 35 +35 C 34 36 20 35 34 36 +36 T 35 37 0 36 35 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.434 candidate_22375839 pos=16:6136459-6136499 +1 A 0 2 0 1 0 2 +2 A 1 3 34 2 1 3 +3 A 2 4 33 3 2 4 +4 A 3 5 32 4 3 5 +5 C 4 6 31 5 4 6 +6 A 5 7 30 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 28 8 0 9 +9 T 8 10 27 9 8 10 +10 A 9 11 26 10 9 0 +11 T 10 12 0 11 0 0 +12 G 11 13 24 12 0 13 +13 C 12 14 23 13 12 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 G 22 24 13 23 0 24 +24 C 23 25 12 24 23 0 +25 T 24 26 0 25 0 0 +26 T 25 27 10 26 0 27 +27 G 26 28 9 27 26 28 +28 T 27 29 8 28 27 0 +29 G 28 30 0 29 0 0 +30 T 29 31 6 30 0 31 +31 G 30 32 5 31 30 32 +32 T 31 33 4 32 31 33 +33 T 32 34 3 33 32 34 +34 T 33 35 2 34 33 35 +35 A 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.007 candidate_22383821 pos=16:40125692-40125732 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 31 8 7 9 +9 T 8 10 30 9 8 10 +10 C 9 11 29 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 27 13 0 14 +14 C 13 15 26 14 13 15 +15 A 14 16 25 15 14 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 15 25 0 26 +26 G 25 27 14 26 25 27 +27 C 26 28 13 27 26 0 +28 G 27 29 0 28 0 0 +29 G 28 30 10 29 0 30 +30 A 29 31 9 30 29 31 +31 T 30 32 8 31 30 32 +32 A 31 33 0 32 31 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.969 candidate_22384493 pos=16:53191793-53191833 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 25 +25 C 24 26 34 25 24 26 +26 A 25 27 33 26 25 27 +27 G 26 28 32 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 27 32 0 33 +33 T 32 34 26 33 32 34 +34 G 33 35 25 34 33 35 +35 G 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 1.164 candidate_22385414 pos=16:76107708-76107748 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 16 +16 G 15 17 22 16 15 17 +17 T 16 18 21 17 16 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 17 21 0 22 +22 C 21 23 16 22 21 23 +23 A 22 24 0 23 22 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.709 candidate_22385976 pos=16:88127352-88127392 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 31 +31 G 30 32 39 31 30 32 +32 C 31 33 38 32 31 33 +33 A 32 34 37 33 32 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 33 37 0 38 +38 G 37 39 32 38 37 39 +39 C 38 40 31 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -1.825 candidate_22388274 pos=16:41173653-41173693 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 17 +17 A 16 18 39 17 16 18 +18 G 17 19 38 18 17 19 +19 C 18 20 37 19 18 20 +20 T 19 21 36 20 19 21 +21 T 20 22 35 21 20 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 21 35 0 36 +36 A 35 37 20 36 35 37 +37 G 36 38 19 37 36 38 +38 C 37 39 18 38 37 39 +39 T 38 40 17 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -0.516 candidate_22389140 pos=16:90101042-90101082 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 13 5 4 6 +6 A 5 7 12 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 6 12 0 13 +13 G 12 14 5 13 12 14 +14 A 13 15 0 14 13 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.576 candidate_22391255 pos=16:13108590-13108630 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 17 +17 C 16 18 25 17 16 18 +18 A 17 19 24 18 17 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 18 24 0 25 +25 G 24 26 17 25 24 26 +26 A 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.747 candidate_22392409 pos=16:45124376-45124416 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 C 10 12 22 11 10 12 +12 C 11 13 21 12 11 13 +13 A 12 14 20 13 12 14 +14 C 13 15 19 14 13 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 14 19 0 20 +20 T 19 21 13 20 19 21 +21 G 20 22 12 21 20 22 +22 G 21 23 11 22 21 0 +23 C 22 24 32 23 0 24 +24 A 23 25 31 24 23 25 +25 C 24 26 30 25 24 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 25 30 0 31 +31 T 30 32 24 31 30 32 +32 G 31 33 23 32 31 33 +33 T 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.199 candidate_22393590 pos=16:83170773-83170813 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 15 +15 C 14 16 28 15 14 16 +16 T 15 17 27 16 15 17 +17 C 16 18 26 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 17 26 0 27 +27 A 26 28 16 27 26 28 +28 G 27 29 15 28 27 29 +29 A 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.372 candidate_22399452 pos=16:86120245-86120285 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 17 +17 G 16 18 28 17 16 18 +18 C 17 19 27 18 17 19 +19 A 18 20 26 19 18 20 +20 T 19 21 25 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 20 25 0 26 +26 T 25 27 19 26 25 27 +27 G 26 28 18 27 26 28 +28 C 27 29 17 28 27 29 +29 T 28 30 0 29 28 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.148 candidate_22402937 pos=16:87187631-87187671 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 15 4 3 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 15 +15 T 14 16 4 15 14 16 +16 G 15 17 0 16 15 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 32 24 23 25 +25 G 24 26 31 25 24 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 25 31 0 32 +32 C 31 33 24 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.379 candidate_22404908 pos=16:52134574-52134614 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 29 20 19 21 +21 C 20 22 28 21 20 22 +22 G 21 23 27 22 21 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 22 27 0 28 +28 G 27 29 21 28 27 29 +29 C 28 30 20 29 28 30 +30 C 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.44 candidate_22406075 pos=16:60185472-60185512 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 9 +9 T 8 10 35 9 8 10 +10 G 9 11 34 10 9 11 +11 A 10 12 33 11 10 0 +12 A 11 13 0 12 0 0 +13 C 12 14 31 13 0 14 +14 A 13 15 30 14 13 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 14 30 0 31 +31 G 30 32 13 31 30 0 +32 G 31 33 0 32 0 0 +33 T 32 34 11 33 0 34 +34 C 33 35 10 34 33 35 +35 A 34 36 9 35 34 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.882 candidate_22406780 pos=16:94123970-94124010 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 19 +19 C 18 20 30 19 18 20 +20 C 19 21 29 20 19 21 +21 C 20 22 28 21 20 22 +22 G 21 23 27 22 21 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 22 27 0 28 +28 G 27 29 21 28 27 29 +29 G 28 30 20 29 28 30 +30 G 29 31 19 30 29 31 +31 G 30 32 0 31 30 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.962 candidate_22409580 pos=16:15123716-15123756 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 19 8 7 9 +9 T 8 10 18 9 8 10 +10 G 9 11 17 10 9 11 +11 A 10 12 16 11 10 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 11 16 0 17 +17 C 16 18 10 17 16 18 +18 A 17 19 9 18 17 19 +19 T 18 20 8 19 18 20 +20 G 19 21 0 20 19 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.445 candidate_22409669 pos=16:64127159-64127199 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 15 +15 C 14 16 28 15 14 16 +16 T 15 17 27 16 15 17 +17 C 16 18 26 17 16 18 +18 A 17 19 25 18 17 19 +19 T 18 20 24 19 18 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 19 24 0 25 +25 T 24 26 18 25 24 26 +26 G 25 27 17 26 25 27 +27 A 26 28 16 27 26 28 +28 G 27 29 15 28 27 29 +29 G 28 30 0 29 28 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.292 candidate_22409934 pos=16:39186056-39186096 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 28 12 11 13 +13 C 12 14 27 13 12 14 +14 C 13 15 26 14 13 15 +15 A 14 16 25 15 14 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 15 25 0 26 +26 G 25 27 14 26 25 27 +27 G 26 28 13 27 26 28 +28 G 27 29 12 28 27 29 +29 C 28 30 0 29 28 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.389 candidate_22410844 pos=16:71175515-71175555 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 19 +19 G 18 20 27 19 18 20 +20 G 19 21 26 20 19 21 +21 C 20 22 25 21 20 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 21 25 0 26 +26 C 25 27 20 26 25 27 +27 C 26 28 19 27 26 28 +28 T 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.314 candidate_22411499 pos=16:14145787-14145827 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 0 21 0 22 +22 A 21 23 35 22 21 23 +23 G 22 24 34 23 22 0 +24 G 23 25 0 24 0 0 +25 C 24 26 32 25 0 26 +26 T 25 27 31 26 25 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 26 31 0 32 +32 G 31 33 25 32 31 0 +33 G 32 34 0 33 0 0 +34 C 33 35 23 34 0 35 +35 T 34 36 22 35 34 36 +36 G 35 37 0 36 35 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.918 candidate_22412801 pos=16:66173972-66174012 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 3 +3 A 2 4 14 3 2 4 +4 A 3 5 13 4 3 5 +5 C 4 6 12 5 4 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 5 12 0 13 +13 T 12 14 4 13 12 14 +14 T 13 15 3 14 13 15 +15 A 14 16 0 15 14 0 +16 A 15 17 0 16 0 17 +17 G 16 18 32 17 16 18 +18 C 17 19 31 18 17 19 +19 C 18 20 30 19 18 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 19 30 0 31 +31 G 30 32 18 31 30 32 +32 C 31 33 17 32 31 33 +33 A 32 34 0 33 32 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.825 candidate_22414716 pos=16:6125809-6125849 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 14 5 4 6 +6 A 5 7 13 6 5 7 +7 A 6 8 12 7 6 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 7 12 0 13 +13 T 12 14 6 13 12 14 +14 G 13 15 5 14 13 15 +15 G 14 16 0 15 14 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 0 31 0 32 +32 C 31 33 39 32 31 33 +33 C 32 34 38 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 33 38 0 39 +39 G 38 40 32 39 38 40 +40 T 39 0 0 40 39 0 +40 dG = -1.472 candidate_22416928 pos=16:55125756-55125796 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 10 +10 G 9 11 24 10 9 11 +11 C 10 12 23 11 10 12 +12 A 11 13 22 12 11 13 +13 T 12 14 21 13 12 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 13 21 0 22 +22 T 21 23 12 22 21 23 +23 G 22 24 11 23 22 24 +24 C 23 25 10 24 23 25 +25 T 24 26 0 25 24 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.442 candidate_22420280 pos=16:94159288-94159328 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 40 12 0 13 +13 T 12 14 39 13 12 14 +14 C 13 15 38 14 13 15 +15 C 14 16 37 15 14 16 +16 T 15 17 36 16 15 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 16 36 0 37 +37 G 36 38 15 37 36 38 +38 G 37 39 14 38 37 39 +39 A 38 40 13 39 38 40 +40 A 39 0 12 40 39 0 +40 dG = -0.956 candidate_22422286 pos=16:57100406-57100446 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 35 4 3 5 +5 C 4 6 34 5 4 6 +6 A 5 7 33 6 5 7 +7 A 6 8 32 7 6 0 +8 A 7 9 28 8 0 9 +9 T 8 10 27 9 8 10 +10 G 9 11 26 10 9 11 +11 G 10 12 25 11 10 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 11 25 0 26 +26 C 25 27 10 26 25 27 +27 A 26 28 9 27 26 28 +28 T 27 29 8 28 27 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 7 32 0 33 +33 T 32 34 6 33 32 34 +34 G 33 35 5 34 33 35 +35 T 34 36 4 35 34 36 +36 G 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.378 candidate_22423546 pos=16:41192808-41192848 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 21 4 3 5 +5 C 4 6 20 5 4 6 +6 A 5 7 19 6 5 7 +7 A 6 8 18 7 6 8 +8 A 7 9 17 8 7 9 +9 T 8 10 16 9 8 0 +10 G 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 9 16 0 17 +17 T 16 18 8 17 16 18 +18 T 17 19 7 18 17 19 +19 T 18 20 6 19 18 20 +20 G 19 21 5 20 19 21 +21 T 20 22 4 21 20 22 +22 C 21 23 0 22 21 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.665 candidate_22427785 pos=16:65176726-65176766 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 31 5 4 6 +6 A 5 7 30 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 28 8 0 9 +9 T 8 10 27 9 8 10 +10 G 9 11 26 10 9 0 +11 T 10 12 0 11 0 0 +12 A 11 13 24 12 0 13 +13 G 12 14 23 13 12 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 13 23 0 24 +24 T 23 25 12 24 23 0 +25 T 24 26 0 25 0 0 +26 C 25 27 10 26 0 27 +27 A 26 28 9 27 26 28 +28 T 27 29 8 28 27 0 +29 G 28 30 0 29 0 0 +30 T 29 31 6 30 0 31 +31 G 30 32 5 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.979 candidate_22431224 pos=16:56124062-56124102 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 20 +20 G 19 21 38 20 19 21 +21 G 20 22 37 21 20 22 +22 C 21 23 36 22 21 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 22 36 0 37 +37 C 36 38 21 37 36 38 +38 C 37 39 20 38 37 39 +39 C 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -1.901 candidate_22431606 pos=16:11140939-11140979 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 20 8 7 9 +9 T 8 10 19 9 8 10 +10 G 9 11 18 10 9 11 +11 T 10 12 17 11 10 12 +12 G 11 13 16 12 11 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 C 15 17 12 16 0 17 +17 A 16 18 11 17 16 18 +18 C 17 19 10 18 17 19 +19 A 18 20 9 19 18 20 +20 T 19 21 8 20 19 21 +21 C 20 22 0 21 20 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 25 +25 A 24 26 33 25 24 26 +26 C 25 27 32 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 26 32 0 33 +33 T 32 34 25 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -2.179 candidate_22431610 pos=16:13150836-13150876 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 15 +15 G 14 16 25 15 14 16 +16 G 15 17 24 16 15 17 +17 C 16 18 23 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 17 23 0 24 +24 C 23 25 16 24 23 25 +25 C 24 26 15 25 24 26 +26 C 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.924 candidate_22432810 pos=16:10143517-10143557 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 A 7 9 32 8 7 9 +9 T 8 10 31 9 8 10 +10 G 9 11 30 10 9 11 +11 T 10 12 29 11 10 12 +12 T 11 13 28 12 11 13 +13 A 12 14 27 13 12 14 +14 T 13 15 26 14 13 15 +15 C 14 16 25 15 14 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 15 25 0 26 +26 A 25 27 14 26 25 27 +27 T 26 28 13 27 26 28 +28 A 27 29 12 28 27 29 +29 A 28 30 11 29 28 30 +30 C 29 31 10 30 29 31 +31 A 30 32 9 31 30 32 +32 T 31 33 8 32 31 33 +33 C 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.242 candidate_22439916 pos=16:90141470-90141510 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 C 11 13 26 12 11 13 +13 T 12 14 25 13 12 14 +14 G 13 15 24 14 13 15 +15 G 14 16 23 15 14 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 15 23 0 24 +24 C 23 25 14 24 23 25 +25 A 24 26 13 25 24 26 +26 G 25 27 12 26 25 27 +27 G 26 28 0 27 26 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.851 candidate_22442846 pos=16:73115936-73115976 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 21 5 4 6 +6 A 5 7 20 6 5 7 +7 A 6 8 19 7 6 8 +8 A 7 9 18 8 7 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 8 18 0 19 +19 T 18 20 7 19 18 20 +20 T 19 21 6 20 19 21 +21 G 20 22 5 21 20 22 +22 G 21 23 0 22 21 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 25 +25 A 24 26 34 25 24 26 +26 G 25 27 33 26 25 27 +27 A 26 28 32 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 27 32 0 33 +33 C 32 34 26 33 32 34 +34 T 33 35 25 34 33 35 +35 G 34 36 0 35 34 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.512 candidate_22445629 pos=16:16131714-16131754 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 20 4 3 5 +5 C 4 6 19 5 4 6 +6 A 5 7 18 6 5 7 +7 A 6 8 17 7 6 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 7 17 0 18 +18 T 17 19 6 18 17 19 +19 G 18 20 5 19 18 20 +20 T 19 21 4 20 19 21 +21 C 20 22 0 21 20 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.192 candidate_22446077 pos=16:44104803-44104843 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 19 +19 G 18 20 33 19 18 20 +20 A 19 21 32 20 19 21 +21 C 20 22 31 21 20 22 +22 A 21 23 30 22 21 0 +23 C 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 22 30 0 31 +31 G 30 32 21 31 30 32 +32 T 31 33 20 32 31 33 +33 C 32 34 19 33 32 34 +34 T 33 35 0 34 33 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.781 candidate_22448911 pos=16:84178196-84178236 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 4 +4 A 3 5 17 4 3 5 +5 C 4 6 16 5 4 6 +6 A 5 7 15 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 6 15 0 16 +16 G 15 17 5 16 15 17 +17 T 16 18 4 17 16 18 +18 C 17 19 0 18 17 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.461 candidate_22451921 pos=16:13142802-13142842 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 G 12 14 23 13 12 14 +14 G 13 15 22 14 13 15 +15 C 14 16 21 15 14 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 G 20 22 15 21 0 22 +22 C 21 23 14 22 21 23 +23 C 22 24 13 23 22 24 +24 A 23 25 0 24 23 0 +25 C 24 26 0 25 0 0 +26 C 25 27 0 26 0 27 +27 G 26 28 39 27 26 28 +28 A 27 29 38 28 27 29 +29 A 28 30 37 29 28 30 +30 T 29 31 36 30 29 0 +31 G 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 30 36 0 37 +37 T 36 38 29 37 36 38 +38 T 37 39 28 38 37 39 +39 C 38 40 27 39 38 40 +40 C 39 0 0 40 39 0 +40 dG = -2.228 candidate_22454116 pos=16:6181586-6181626 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 16 +16 A 15 17 31 16 15 17 +17 C 16 18 30 17 16 18 +18 T 17 19 29 18 17 19 +19 G 18 20 28 19 18 20 +20 G 19 21 27 20 19 21 +21 G 20 22 26 21 20 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 21 26 0 27 +27 T 26 28 20 27 26 28 +28 C 27 29 19 28 27 29 +29 A 28 30 18 29 28 30 +30 G 29 31 17 30 29 31 +31 T 30 32 16 31 30 32 +32 G 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -2.478 candidate_22455527 pos=16:12145387-12145427 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 G 12 14 27 13 12 14 +14 T 13 15 26 14 13 15 +15 C 14 16 25 15 14 16 +16 A 15 17 24 16 15 17 +17 G 16 18 23 17 16 18 +18 A 17 19 22 18 17 0 +19 G 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 T 21 23 18 22 0 23 +23 C 22 24 17 23 22 24 +24 T 23 25 16 24 23 25 +25 G 24 26 15 25 24 26 +26 G 25 27 14 26 25 27 +27 C 26 28 13 27 26 28 +28 T 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.539 candidate_22461655 pos=16:76185390-76185430 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 A 7 9 0 8 0 0 +9 T 8 10 0 9 0 0 +10 T 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 15 +15 G 14 16 36 15 14 16 +16 G 15 17 35 16 15 17 +17 G 16 18 34 17 16 0 +18 T 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 17 34 0 35 +35 C 34 36 16 35 34 36 +36 C 35 37 15 36 35 37 +37 T 36 38 0 37 36 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.782 candidate_22462363 pos=16:38165907-38165947 +1 A 0 2 28 1 0 2 +2 A 1 3 27 2 1 3 +3 A 2 4 26 3 2 4 +4 A 3 5 25 4 3 5 +5 C 4 6 24 5 4 6 +6 A 5 7 23 6 5 0 +7 A 6 8 0 7 0 0 +8 A 7 9 20 8 0 9 +9 T 8 10 19 9 8 10 +10 T 9 11 18 10 9 11 +11 T 10 12 17 11 10 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 11 17 0 18 +18 A 17 19 10 18 17 19 +19 A 18 20 9 19 18 20 +20 T 19 21 8 20 19 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 6 23 0 24 +24 G 23 25 5 24 23 25 +25 T 24 26 4 25 24 26 +26 T 25 27 3 26 25 27 +27 T 26 28 2 27 26 28 +28 T 27 29 1 28 27 29 +29 A 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.461 candidate_22478627 pos=16:67150981-67151021 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 C 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 A 14 16 24 15 14 16 +16 G 15 17 23 16 15 17 +17 T 16 18 22 17 16 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 A 21 23 17 22 0 23 +23 C 22 24 16 23 22 24 +24 T 23 25 15 24 23 25 +25 A 24 26 0 25 24 0 +26 G 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 1.684 candidate_22481196 pos=16:97166331-97166371 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 A 11 13 26 12 11 13 +13 G 12 14 25 13 12 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 13 25 0 26 +26 T 25 27 12 26 25 27 +27 C 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.512 candidate_22482990 pos=16:34149365-34149405 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 21 7 6 8 +8 C 7 9 20 8 7 9 +9 A 8 10 19 9 8 10 +10 A 9 11 18 10 9 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 10 18 0 19 +19 T 18 20 9 19 18 20 +20 G 19 21 8 20 19 21 +21 T 20 22 7 21 20 22 +22 C 21 23 0 22 21 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.722 candidate_22483304 pos=16:14130104-14130144 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 24 +24 C 23 25 35 24 23 25 +25 A 24 26 34 25 24 26 +26 C 25 27 33 26 25 27 +27 T 26 28 32 27 26 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 27 32 0 33 +33 G 32 34 26 33 32 34 +34 T 33 35 25 34 33 35 +35 G 34 36 24 35 34 36 +36 A 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.909 candidate_22483415 pos=16:96191713-96191753 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 21 +21 C 20 22 31 21 20 22 +22 A 21 23 30 22 21 23 +23 C 22 24 29 23 22 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 23 29 0 30 +30 T 29 31 22 30 29 31 +31 G 30 32 21 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 1.984 candidate_22486781 pos=16:28140215-28140255 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 A 18 20 29 19 18 20 +20 G 19 21 28 20 19 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 C 27 29 20 28 0 29 +29 T 28 30 19 29 28 30 +30 C 29 31 0 30 29 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.316 candidate_22487831 pos=16:20136212-20136252 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 A 9 11 38 10 9 11 +11 A 10 12 37 11 10 12 +12 C 11 13 36 12 11 13 +13 C 12 14 35 13 12 0 +14 A 13 15 0 14 0 0 +15 C 14 16 33 15 0 16 +16 T 15 17 32 16 15 17 +17 A 16 18 31 17 16 18 +18 A 17 19 30 18 17 0 +19 G 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 T 29 31 18 30 0 31 +31 T 30 32 17 31 30 32 +32 A 31 33 16 32 31 33 +33 G 32 34 15 33 32 0 +34 G 33 35 0 34 0 0 +35 G 34 36 13 35 0 36 +36 G 35 37 12 36 35 37 +37 T 36 38 11 37 36 38 +38 T 37 39 10 38 37 39 +39 C 38 40 0 39 38 0 +40 T 39 0 0 40 0 0 +40 dG = 0.444 candidate_22488479 pos=16:4169917-4169957 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 22 +22 C 21 23 28 22 21 23 +23 A 22 24 27 23 22 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 23 27 0 28 +28 G 27 29 22 28 27 29 +29 T 28 30 0 29 28 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -5.131 candidate_22488840 pos=16:40123532-40123572 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 16 +16 G 15 17 32 16 15 17 +17 C 16 18 31 17 16 18 +18 T 17 19 30 18 17 19 +19 T 18 20 29 19 18 20 +20 A 19 21 28 20 19 21 +21 G 20 22 27 21 20 22 +22 G 21 23 26 22 21 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 22 26 0 27 +27 C 26 28 21 27 26 28 +28 T 27 29 20 28 27 29 +29 A 28 30 19 29 28 30 +30 A 29 31 18 30 29 31 +31 G 30 32 17 31 30 32 +32 C 31 33 16 32 31 33 +33 A 32 34 0 33 32 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.078 candidate_22489854 pos=16:15135210-15135250 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 C 7 9 35 8 7 9 +9 A 8 10 34 9 8 10 +10 A 9 11 33 10 9 11 +11 A 10 12 32 11 10 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 11 32 0 33 +33 T 32 34 10 33 32 34 +34 T 33 35 9 34 33 35 +35 G 34 36 8 35 34 36 +36 G 35 37 0 36 35 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -1.825 candidate_22490642 pos=16:96113584-96113624 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 12 +12 G 11 13 23 12 11 13 +13 C 12 14 22 13 12 14 +14 T 13 15 21 14 13 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 14 21 0 22 +22 G 21 23 13 22 21 23 +23 C 22 24 12 23 22 24 +24 A 23 25 0 24 23 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 31 +31 G 30 32 38 31 30 32 +32 C 31 33 37 32 31 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 32 37 0 38 +38 C 37 39 31 38 37 39 +39 A 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -0.929 candidate_22491482 pos=16:97160493-97160533 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 G 13 15 26 14 13 15 +15 C 14 16 25 15 14 16 +16 T 15 17 24 16 15 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 16 24 0 25 +25 G 24 26 15 25 24 26 +26 C 25 27 14 26 25 27 +27 A 26 28 0 27 26 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.344 candidate_22494369 pos=16:15155435-15155475 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 T 14 16 0 15 0 16 +16 G 15 17 22 16 15 17 +17 C 16 18 21 17 16 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 17 21 0 22 +22 C 21 23 16 22 21 23 +23 T 22 24 0 23 22 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.192 candidate_22501160 pos=16:45181676-45181716 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 32 20 19 21 +21 A 20 22 31 21 20 22 +22 C 21 23 30 22 21 23 +23 A 22 24 29 23 22 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 23 29 0 30 +30 G 29 31 22 30 29 31 +31 T 30 32 21 31 30 32 +32 G 31 33 20 32 31 33 +33 A 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.544 candidate_22510637 pos=16:90188453-90188493 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 C 17 19 26 18 17 19 +19 T 18 20 25 19 18 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 19 25 0 26 +26 G 25 27 18 26 25 27 +27 C 26 28 0 27 26 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.624 candidate_22513714 pos=16:92173690-92173730 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 21 +21 A 20 22 29 21 20 22 +22 C 21 23 28 22 21 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 22 28 0 29 +29 T 28 30 21 29 28 30 +30 C 29 31 0 30 29 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = 0.344 candidate_22516171 pos=16:94158568-94158608 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 29 +29 G 28 30 38 29 28 30 +30 G 29 31 37 30 29 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 C 36 38 30 37 0 38 +38 C 37 39 29 38 37 39 +39 T 38 40 0 39 38 0 +40 C 39 0 0 40 0 0 +40 dG = -1.222 candidate_22518786 pos=16:94100674-94100714 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 21 +21 A 20 22 32 21 20 22 +22 A 21 23 31 22 21 23 +23 C 22 24 30 23 22 24 +24 A 23 25 29 24 23 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 24 29 0 30 +30 G 29 31 23 30 29 31 +31 T 30 32 22 31 30 32 +32 T 31 33 21 32 31 33 +33 C 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 1.114 candidate_22518902 pos=16:75105564-75105604 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 A 18 20 32 19 18 20 +20 C 19 21 31 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 20 31 0 32 +32 T 31 33 19 32 31 33 +33 G 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.471 candidate_22519056 pos=16:94128515-94128555 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 A 18 20 34 19 18 20 +20 C 19 21 33 20 19 21 +21 A 20 22 32 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 T 31 33 21 32 0 33 +33 G 32 34 20 33 32 34 +34 T 33 35 19 34 33 35 +35 G 34 36 0 35 34 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.649 candidate_22519488 pos=16:80166974-80167014 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 29 20 19 21 +21 A 20 22 28 21 20 22 +22 C 21 23 27 22 21 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 22 27 0 28 +28 T 27 29 21 28 27 29 +29 G 28 30 20 29 28 30 +30 A 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.509 candidate_22519521 pos=16:32145524-32145564 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 C 19 21 32 20 19 21 +21 A 20 22 31 21 20 22 +22 G 21 23 30 22 21 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 C 29 31 22 30 0 31 +31 T 30 32 21 31 30 32 +32 G 31 33 20 32 31 33 +33 G 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.381 candidate_22519965 pos=16:96109738-96109778 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 23 +23 G 22 24 40 23 22 24 +24 C 23 25 39 24 23 25 +25 T 24 26 38 25 24 26 +26 A 25 27 37 26 25 27 +27 C 26 28 36 27 26 28 +28 T 27 29 35 28 27 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 28 35 0 36 +36 G 35 37 27 36 35 37 +37 T 36 38 26 37 36 38 +38 G 37 39 25 38 37 39 +39 G 38 40 24 39 38 40 +40 C 39 0 23 40 39 0 +40 dG = 0.191 candidate_22520899 pos=16:38131343-38131383 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 20 +20 G 19 21 34 20 19 21 +21 T 20 22 33 21 20 22 +22 C 21 23 32 22 21 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 22 32 0 33 +33 A 32 34 21 33 32 34 +34 C 33 35 20 34 33 35 +35 C 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -4.078 candidate_22522157 pos=16:6119212-6119252 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 23 7 6 8 +8 C 7 9 22 8 7 9 +9 A 8 10 21 9 8 10 +10 A 9 11 20 10 9 11 +11 C 10 12 19 11 10 12 +12 A 11 13 18 12 11 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 12 18 0 19 +19 G 18 20 11 19 18 20 +20 T 19 21 10 20 19 21 +21 T 20 22 9 21 20 22 +22 G 21 23 8 22 21 23 +23 T 22 24 7 23 22 24 +24 A 23 25 0 24 23 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -3.215 candidate_22522176 pos=16:75109734-75109774 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 16 +16 C 15 17 33 16 15 17 +17 T 16 18 32 17 16 18 +18 C 17 19 31 18 17 19 +19 C 18 20 30 19 18 20 +20 A 19 21 29 20 19 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 20 29 0 30 +30 G 29 31 19 30 29 31 +31 G 30 32 18 31 30 32 +32 A 31 33 17 32 31 33 +33 G 32 34 16 33 32 34 +34 A 33 35 0 34 33 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.011 candidate_22523023 pos=16:35115313-35115353 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 C 18 20 37 19 18 20 +20 C 19 21 36 20 19 21 +21 T 20 22 35 21 20 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 21 35 0 36 +36 G 35 37 20 36 35 37 +37 G 36 38 19 37 36 38 +38 C 37 39 0 38 37 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.584 candidate_22525042 pos=16:9111319-9111359 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 25 +25 G 24 26 38 25 24 26 +26 C 25 27 37 26 25 0 +27 A 26 28 0 27 0 0 +28 G 27 29 35 28 0 29 +29 C 28 30 34 29 28 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 29 34 0 35 +35 C 34 36 28 35 34 0 +36 A 35 37 0 36 0 0 +37 G 36 38 26 37 0 38 +38 C 37 39 25 38 37 39 +39 A 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -2.538 candidate_22526849 pos=16:12172836-12172876 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 17 +17 C 16 18 28 17 16 18 +18 A 17 19 27 18 17 19 +19 C 18 20 26 19 18 20 +20 A 19 21 25 20 19 0 +21 C 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 20 25 0 26 +26 G 25 27 19 26 25 27 +27 T 26 28 18 27 26 28 +28 G 27 29 17 28 27 29 +29 G 28 30 0 29 28 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 32 +32 G 31 33 39 32 31 33 +33 G 32 34 38 33 32 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 33 38 0 39 +39 C 38 40 32 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.496 candidate_22528041 pos=16:23191959-23191999 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 C 24 26 0 25 0 26 +26 C 25 27 33 26 25 27 +27 G 26 28 32 27 26 0 +28 T 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 27 32 0 33 +33 G 32 34 26 33 32 34 +34 A 33 35 0 34 33 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.511 candidate_22528622 pos=16:17193799-17193839 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 14 +14 C 13 15 25 14 13 15 +15 A 14 16 24 15 14 16 +16 G 15 17 23 16 15 17 +17 C 16 18 22 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 17 22 0 23 +23 C 22 24 16 23 22 24 +24 T 23 25 15 24 23 25 +25 G 24 26 14 25 24 26 +26 C 25 27 0 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 34 +34 G 33 35 40 34 33 35 +35 G 34 36 39 35 34 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 35 39 0 40 +40 C 39 0 34 40 39 0 +40 dG = -0.732 candidate_22530271 pos=16:42145836-42145876 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 C 10 12 32 11 10 12 +12 C 11 13 31 12 11 13 +13 A 12 14 30 13 12 14 +14 T 13 15 29 14 13 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 14 29 0 30 +30 T 29 31 13 30 29 31 +31 G 30 32 12 31 30 32 +32 G 31 33 11 32 31 33 +33 C 32 34 0 33 32 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.135 candidate_22530532 pos=16:8117580-8117620 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 A 9 11 22 10 9 11 +11 C 10 12 21 11 10 12 +12 C 11 13 20 12 11 13 +13 C 12 14 19 13 12 14 +14 A 13 15 18 14 13 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 T 17 19 14 18 0 19 +19 G 18 20 13 19 18 20 +20 G 19 21 12 20 19 21 +21 G 20 22 11 21 20 22 +22 T 21 23 10 22 21 23 +23 C 22 24 0 23 22 0 +24 T 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 C 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.912 candidate_22530904 pos=16:58147083-58147123 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 C 10 12 21 11 10 12 +12 C 11 13 20 12 11 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 12 20 0 21 +21 G 20 22 11 21 20 22 +22 A 21 23 0 22 21 0 +23 G 22 24 0 23 0 24 +24 G 23 25 32 24 23 25 +25 C 24 26 31 25 24 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 G 30 32 25 31 0 32 +32 C 31 33 24 32 31 33 +33 T 32 34 0 33 32 0 +34 G 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.268 candidate_22532719 pos=16:70126324-70126364 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 C 10 12 0 11 0 0 +12 T 11 13 19 12 0 13 +13 G 12 14 18 13 12 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 13 18 0 19 +19 A 18 20 12 19 18 20 +20 A 19 21 0 20 19 0 +21 A 20 22 0 21 0 22 +22 C 21 23 31 22 21 23 +23 A 22 24 30 23 22 24 +24 A 23 25 29 24 23 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 T 28 30 24 29 0 30 +30 T 29 31 23 30 29 31 +31 G 30 32 22 31 30 32 +32 A 31 33 0 32 31 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = 0.814 candidate_22534710 pos=16:91136208-91136248 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 A 11 13 0 12 0 13 +13 C 12 14 21 13 12 14 +14 T 13 15 20 14 13 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 G 19 21 14 20 0 21 +21 G 20 22 13 21 20 22 +22 A 21 23 0 22 21 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.765 candidate_22535706 pos=16:85174980-85175020 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 11 +11 G 10 12 27 11 10 12 +12 C 11 13 26 12 11 13 +13 A 12 14 25 13 12 14 +14 G 13 15 24 14 13 15 +15 T 14 16 23 15 14 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 15 23 0 24 +24 C 23 25 14 24 23 25 +25 T 24 26 13 25 24 26 +26 G 25 27 12 26 25 27 +27 C 26 28 11 27 26 28 +28 C 27 29 0 28 27 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.472 candidate_22536165 pos=16:55102898-55102938 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 6 +6 A 5 7 16 6 5 7 +7 A 6 8 15 7 6 8 +8 C 7 9 14 8 7 9 +9 A 8 10 13 9 8 0 +10 A 9 11 0 10 0 0 +11 G 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 9 13 0 14 +14 G 13 15 8 14 13 15 +15 T 14 16 7 15 14 16 +16 T 15 17 6 16 15 17 +17 C 16 18 0 17 16 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.076 candidate_22540553 pos=16:12181858-12181898 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 25 +25 C 24 26 33 25 24 26 +26 A 25 27 32 26 25 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 26 32 0 33 +33 G 32 34 25 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -0.906 candidate_22540990 pos=16:41118273-41118313 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 28 +28 C 27 29 35 28 27 29 +29 C 28 30 34 29 28 0 +30 T 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 G 33 35 29 34 0 35 +35 G 34 36 28 35 34 36 +36 A 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -2.149 candidate_22542201 pos=16:38187412-38187452 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 A 13 15 0 14 0 15 +15 G 14 16 24 15 14 16 +16 C 15 17 23 16 15 17 +17 C 16 18 22 17 16 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 G 21 23 17 22 0 23 +23 G 22 24 16 23 22 24 +24 C 23 25 15 24 23 25 +25 C 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 G 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.842 candidate_22543874 pos=16:63183017-63183057 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 5 +5 C 4 6 15 5 4 6 +6 A 5 7 14 6 5 7 +7 A 6 8 13 7 6 8 +8 C 7 9 12 8 7 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 8 12 0 13 +13 T 12 14 7 13 12 14 +14 T 13 15 6 14 13 15 +15 G 14 16 5 15 14 16 +16 A 15 17 0 16 15 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.909 candidate_22544870 pos=16:53130099-53130139 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 A 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 24 +24 G 23 25 34 24 23 25 +25 A 24 26 33 25 24 26 +26 C 25 27 32 26 25 0 +27 T 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 G 31 33 26 32 0 33 +33 T 32 34 25 33 32 34 +34 C 33 35 24 34 33 35 +35 C 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 G 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -0.136 candidate_22547933 pos=16:27108597-27108637 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 C 7 9 15 8 7 9 +9 A 8 10 14 9 8 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 T 13 15 9 14 0 15 +15 G 14 16 8 15 14 16 +16 G 15 17 0 16 15 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 G 28 30 0 29 0 0 +30 G 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = 0.281 candidate_22548148 pos=16:60142430-60142470 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 19 +19 C 18 20 27 19 18 20 +20 T 19 21 26 20 19 21 +21 G 20 22 25 21 20 0 +22 T 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 21 25 0 26 +26 A 25 27 20 26 25 27 +27 G 26 28 19 27 26 28 +28 C 27 29 0 28 27 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.509 candidate_22548235 pos=16:12159703-12159743 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 18 +18 C 17 19 29 18 17 19 +19 A 18 20 28 19 18 20 +20 G 19 21 27 20 19 0 +21 A 20 22 0 21 0 0 +22 G 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 C 26 28 20 27 0 28 +28 T 27 29 19 28 27 29 +29 G 28 30 18 29 28 30 +30 G 29 31 0 30 29 0 +31 A 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 T 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 T 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.246 candidate_22548621 pos=16:12161010-12161050 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 C 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 31 +31 C 30 32 39 31 30 32 +32 T 31 33 38 32 31 0 +33 A 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 0 37 0 0 +38 A 37 39 32 38 0 39 +39 G 38 40 31 39 38 40 +40 A 39 0 0 40 39 0 +40 dG = -0.699 candidate_22550604 pos=16:61104641-61104681 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 C 21 23 0 22 0 23 +23 A 22 24 32 23 22 24 +24 C 23 25 31 24 23 25 +25 A 24 26 30 25 24 0 +26 T 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 25 30 0 31 +31 G 30 32 24 31 30 32 +32 T 31 33 23 32 31 33 +33 A 32 34 0 33 32 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -3.865 candidate_22551772 pos=16:62190688-62190728 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 C 7 9 23 8 7 9 +9 A 8 10 22 9 8 10 +10 C 9 11 21 10 9 11 +11 A 10 12 20 11 10 12 +12 G 11 13 19 12 11 0 +13 T 12 14 0 13 0 0 +14 C 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 T 17 19 0 18 0 0 +19 C 18 20 12 19 0 20 +20 T 19 21 11 20 19 21 +21 G 20 22 10 21 20 22 +22 T 21 23 9 22 21 23 +23 G 22 24 8 23 22 24 +24 A 23 25 0 24 23 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 G 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 C 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -1.895 candidate_22553460 pos=16:30124149-30124189 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 7 +7 A 6 8 24 7 6 8 +8 C 7 9 23 8 7 9 +9 A 8 10 22 9 8 10 +10 C 9 11 21 10 9 11 +11 A 10 12 20 11 10 0 +12 T 11 13 0 12 0 0 +13 T 12 14 0 13 0 0 +14 T 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 T 19 21 11 20 0 21 +21 G 20 22 10 21 20 22 +22 T 21 23 9 22 21 23 +23 G 22 24 8 23 22 24 +24 T 23 25 7 24 23 25 +25 C 24 26 0 25 24 0 +26 T 25 27 0 26 0 0 +27 T 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 C 29 31 0 30 0 0 +31 C 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 T 35 37 0 36 0 0 +37 G 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -2.925 candidate_22554080 pos=16:22145308-22145348 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 C 7 9 34 8 7 9 +9 A 8 10 33 9 8 10 +10 C 9 11 32 10 9 11 +11 C 10 12 31 11 10 12 +12 A 11 13 30 12 11 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 G 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 G 23 25 0 24 0 0 +25 G 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 12 30 0 31 +31 G 30 32 11 31 30 32 +32 G 31 33 10 32 31 33 +33 T 32 34 9 33 32 34 +34 G 33 35 8 34 33 35 +35 A 34 36 0 35 34 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 C 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.822 candidate_22556001 pos=16:97101262-97101302 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 12 +12 G 11 13 29 12 11 13 +13 T 12 14 28 13 12 14 +14 G 13 15 27 14 13 15 +15 A 14 16 26 15 14 0 +16 C 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 C 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 T 25 27 15 26 0 27 +27 C 26 28 14 27 26 28 +28 A 27 29 13 28 27 29 +29 C 28 30 12 29 28 30 +30 A 29 31 0 30 29 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = 0.071 candidate_22556004 pos=16:91190766-91190806 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 C 10 12 0 11 0 12 +12 G 11 13 33 12 11 13 +13 T 12 14 32 13 12 14 +14 G 13 15 31 14 13 0 +15 G 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 A 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 T 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 G 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 C 30 32 14 31 0 32 +32 A 31 33 13 32 31 33 +33 C 32 34 12 33 32 34 +34 A 33 35 0 34 33 0 +35 C 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 C 39 0 0 40 0 0 +40 dG = -1.908 candidate_22556430 pos=16:4139209-4139249 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 11 +11 C 10 12 26 11 10 12 +12 T 11 13 25 12 11 13 +13 G 12 14 24 13 12 14 +14 C 13 15 23 14 13 0 +15 T 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 G 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 T 21 23 0 22 0 0 +23 G 22 24 14 23 0 24 +24 C 23 25 13 24 23 25 +25 A 24 26 12 25 24 26 +26 G 25 27 11 26 25 27 +27 C 26 28 0 27 26 0 +28 A 27 29 0 28 0 0 +29 A 28 30 0 29 0 30 +30 C 29 31 38 30 29 31 +31 A 30 32 37 31 30 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 C 35 37 0 36 0 0 +37 T 36 38 31 37 0 38 +38 G 37 39 30 38 37 39 +39 A 38 40 0 39 38 0 +40 A 39 0 0 40 0 0 +40 dG = -4.601 candidate_22557039 pos=16:7141448-7141488 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 8 +8 C 7 9 21 8 7 9 +9 A 8 10 20 9 8 10 +10 C 9 11 19 10 9 11 +11 G 10 12 18 11 10 0 +12 C 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 C 17 19 11 18 0 19 +19 G 18 20 10 19 18 20 +20 T 19 21 9 20 19 21 +21 G 20 22 8 21 20 22 +22 A 21 23 0 22 21 0 +23 A 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 26 +26 C 25 27 36 26 25 27 +27 A 26 28 35 27 26 28 +28 A 27 29 34 28 27 0 +29 T 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 C 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 28 34 0 35 +35 T 34 36 27 35 34 36 +36 G 35 37 26 36 35 37 +37 A 36 38 0 37 36 0 +38 A 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.882 candidate_22559472 pos=16:47180265-47180305 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 35 10 9 11 +11 T 10 12 34 11 10 12 +12 G 11 13 33 12 11 13 +13 A 12 14 32 13 12 0 +14 G 13 15 0 14 0 0 +15 A 14 16 0 15 0 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 C 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 T 22 24 0 23 0 0 +24 C 23 25 0 24 0 0 +25 A 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 A 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 13 32 0 33 +33 C 32 34 12 33 32 34 +34 A 33 35 11 34 33 35 +35 G 34 36 10 35 34 36 +36 A 35 37 0 36 35 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.808 candidate_22559612 pos=16:77145310-77145350 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 10 +10 C 9 11 26 10 9 11 +11 T 10 12 25 11 10 12 +12 G 11 13 24 12 11 13 +13 A 12 14 23 13 12 14 +14 G 13 15 22 14 13 15 +15 A 14 16 21 15 14 0 +16 T 15 17 0 16 0 0 +17 T 16 18 0 17 0 0 +18 C 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 15 21 0 22 +22 C 21 23 14 22 21 23 +23 T 22 24 13 23 22 24 +24 T 23 25 12 24 23 25 +25 A 24 26 11 25 24 26 +26 G 25 27 10 26 25 27 +27 A 26 28 0 27 26 0 +28 C 27 29 0 28 0 0 +29 C 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 G 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 A 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 T 37 39 0 38 0 0 +39 G 38 40 0 39 0 0 +40 G 39 0 0 40 0 0 +40 dG = -1.825 candidate_22560242 pos=16:37102570-37102610 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 G 11 13 0 12 0 0 +13 G 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 G 14 16 0 15 0 0 +16 A 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 A 17 19 0 18 0 19 +19 A 18 20 39 19 18 20 +20 G 19 21 38 20 19 21 +21 A 20 22 37 21 20 22 +22 G 21 23 36 22 21 23 +23 T 22 24 35 23 22 0 +24 C 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 C 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 T 27 29 0 28 0 0 +29 T 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 T 30 32 0 31 0 0 +32 T 31 33 0 32 0 0 +33 A 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 A 34 36 23 35 0 36 +36 C 35 37 22 36 35 37 +37 T 36 38 21 37 36 38 +38 C 37 39 20 38 37 39 +39 T 38 40 19 39 38 40 +40 G 39 0 0 40 39 0 +40 dG = -0.149 candidate_22560764 pos=16:57137711-57137751 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 C 9 11 0 10 0 0 +11 T 10 12 0 11 0 0 +12 T 11 13 0 12 0 13 +13 A 12 14 35 13 12 14 +14 G 13 15 34 14 13 15 +15 C 14 16 33 15 14 0 +16 A 15 17 0 16 0 0 +17 G 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 T 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 C 21 23 0 22 0 0 +23 A 22 24 0 23 0 0 +24 T 23 25 0 24 0 0 +25 T 24 26 0 25 0 0 +26 G 25 27 0 26 0 0 +27 A 26 28 0 27 0 0 +28 C 27 29 0 28 0 0 +29 A 28 30 0 29 0 0 +30 T 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 15 33 0 34 +34 C 33 35 14 34 33 35 +35 T 34 36 13 35 34 36 +36 T 35 37 0 36 35 0 +37 T 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -3.941 candidate_22562354 pos=16:72178247-72178287 +1 A 0 2 0 1 0 2 +2 A 1 3 28 2 1 3 +3 A 2 4 27 3 2 4 +4 A 3 5 26 4 3 5 +5 C 4 6 25 5 4 6 +6 A 5 7 24 6 5 7 +7 A 6 8 23 7 6 8 +8 C 7 9 22 8 7 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 A 13 15 0 14 0 0 +15 T 14 16 0 15 0 0 +16 G 15 17 0 16 0 0 +17 A 16 18 0 17 0 0 +18 G 17 19 0 18 0 0 +19 T 18 20 0 19 0 0 +20 G 19 21 0 20 0 0 +21 A 20 22 0 21 0 0 +22 G 21 23 8 22 0 23 +23 T 22 24 7 23 22 24 +24 T 23 25 6 24 23 25 +25 G 24 26 5 25 24 26 +26 T 25 27 4 26 25 27 +27 T 26 28 3 27 26 28 +28 T 27 29 2 28 27 29 +29 G 28 30 0 29 28 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 G 32 34 0 33 0 0 +34 C 33 35 0 34 0 0 +35 A 34 36 0 35 0 0 +36 G 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 A 37 39 0 38 0 0 +39 T 38 40 0 39 0 0 +40 T 39 0 0 40 0 0 +40 dG = -0.709 candidate_22563296 pos=16:87145435-87145475 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 16 +16 C 15 17 29 16 15 17 +17 C 16 18 28 17 16 18 +18 A 17 19 27 18 17 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 A 25 27 0 26 0 0 +27 T 26 28 18 27 0 28 +28 G 27 29 17 28 27 29 +29 G 28 30 16 29 28 30 +30 A 29 31 0 30 29 0 +31 A 30 32 0 31 0 0 +32 G 31 33 0 32 0 0 +33 C 32 34 0 33 0 0 +34 T 33 35 0 34 0 0 +35 G 34 36 0 35 0 0 +36 A 35 37 0 36 0 0 +37 C 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 +40 dG = -0.736 candidate_22563325 pos=16:15143614-15143654 +1 A 0 2 0 1 0 0 +2 A 1 3 0 2 0 0 +3 A 2 4 0 3 0 0 +4 A 3 5 0 4 0 0 +5 C 4 6 0 5 0 0 +6 A 5 7 0 6 0 0 +7 A 6 8 0 7 0 0 +8 C 7 9 0 8 0 0 +9 A 8 10 0 9 0 0 +10 G 9 11 0 10 0 0 +11 A 10 12 0 11 0 0 +12 A 11 13 0 12 0 0 +13 A 12 14 0 13 0 0 +14 G 13 15 0 14 0 0 +15 C 14 16 0 15 0 0 +16 C 15 17 0 16 0 0 +17 C 16 18 0 17 0 0 +18 A 17 19 0 18 0 0 +19 C 18 20 0 19 0 0 +20 A 19 21 0 20 0 0 +21 T 20 22 0 21 0 0 +22 A 21 23 0 22 0 0 +23 C 22 24 0 23 0 0 +24 A 23 25 0 24 0 0 +25 C 24 26 0 25 0 0 +26 G 25 27 0 26 0 27 +27 A 26 28 34 27 26 28 +28 G 27 29 33 28 27 0 +29 G 28 30 0 29 0 0 +30 A 29 31 0 30 0 0 +31 A 30 32 0 31 0 0 +32 A 31 33 0 32 0 0 +33 C 32 34 28 33 0 34 +34 T 33 35 27 34 33 35 +35 G 34 36 0 35 34 0 +36 A 35 37 0 36 0 0 +37 A 36 38 0 37 0 0 +38 C 37 39 0 38 0 0 +39 A 38 40 0 39 0 0 +40 A 39 0 0 40 0 0 diff --git a/test_data/test.tm.tsv b/test_data/test.tm.tsv new file mode 100644 index 00000000..d47c72fb --- /dev/null +++ b/test_data/test.tm.tsv @@ -0,0 +1,501 @@ +name dG dH dS Tm Seq +candidate_21654043 pos=16:11114621-11114661 -49.122 -315.200 -0.858 41.45 AAAACAAAACAAAACAAAACACTGCCCTCATCTCAAGTCC +candidate_21658299 pos=16:22131287-22131327 -51.750 -317.300 -0.856 44.64 AAAACAAAACAAAACAAAACCCCAGCCAACCAAGCCTCAC +candidate_21666318 pos=16:31196747-31196787 -48.067 -314.300 -0.858 40.17 AAAACAAAACAAAACAAACAAAAGTATCACCCTATCGCCC +candidate_21670946 pos=16:68188874-68188914 -48.443 -314.800 -0.859 40.56 AAAACAAAACAAAACAAACCGAAAGTACCTGGACATACGA +candidate_21676743 pos=16:90188443-90188483 -48.544 -316.700 -0.865 40.40 AAAACAAAACAAAACAACAACAACAAACTCAGCTAGCTCC +candidate_21685155 pos=16:14129896-14129936 -50.907 -315.000 -0.851 43.94 AAAACAAAACAAAACACCATGAGGCCTTAGGCATGGGTTC +candidate_21686495 pos=16:11114626-11114666 -50.251 -312.700 -0.846 43.38 AAAACAAAACAAAACACTGCCCTCATCTCAAGTCCCCAAA +candidate_21686514 pos=16:81179833-81179873 -48.401 -314.200 -0.857 40.70 AAAACAAAACAAAACACTGGAAGCTTCTAAGTGACAGAGG +candidate_21686674 pos=16:9163163-9163203 -48.627 -311.200 -0.847 41.45 AAAACAAAACAAAACACTTGAGGCAGGGAGATAGCTTAGT +candidate_21687718 pos=16:70191486-70191526 -50.708 -316.600 -0.857 43.33 AAAACAAAACAAAACAGAACCGCACAGTGGAGGAGCAATA +candidate_21696099 pos=16:22131292-22131332 -54.428 -318.800 -0.852 48.11 AAAACAAAACAAAACCCCAGCCAACCAAGCCTCACAGCCC +candidate_21696605 pos=16:76195412-76195452 -47.304 -311.800 -0.853 39.59 AAAACAAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTC +candidate_21696680 pos=16:23161159-23161199 -49.127 -311.700 -0.847 42.01 AAAACAAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGA +candidate_21696763 pos=16:33141995-33142035 -50.129 -316.300 -0.858 42.65 AAAACAAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGG +candidate_21696985 pos=16:15154698-15154738 -48.294 -313.100 -0.854 40.64 AAAACAAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAA +candidate_21698710 pos=16:73144761-73144801 -48.000 -311.100 -0.848 40.57 AAAACAAAACAAAACGGCAAATCCTAACTATGGAGTGGAT +candidate_21699937 pos=16:90136408-90136448 -48.912 -315.300 -0.859 41.17 AAAACAAAACAAAACTCAATTAGCCACAGAGCACCAAGAG +candidate_21700882 pos=16:43126383-43126423 -52.311 -321.800 -0.869 44.60 AAAACAAAACAAAACTGCTTAACACCTTGCCAGGCGCATG +candidate_21704015 pos=16:47181492-47181532 -49.655 -312.600 -0.848 42.64 AAAACAAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGA +candidate_21712832 pos=16:20146964-20147004 -48.718 -313.400 -0.853 41.12 AAAACAAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGT +candidate_21717478 pos=16:31196752-31196792 -48.499 -310.700 -0.845 41.36 AAAACAAAACAAACAAAAGTATCACCCTATCGCCCTAGGT +candidate_21732049 pos=16:68188879-68188919 -49.084 -314.200 -0.855 41.56 AAAACAAAACAAACCGAAAGTACCTGGACATACGAACCTT +candidate_21732995 pos=16:48174889-48174929 -49.933 -316.600 -0.860 42.35 AAAACAAAACAAACTCAAGATTCTGCTTGAGTGACAGGGC +candidate_21734070 pos=16:6153316-6153356 -47.031 -311.000 -0.851 39.36 AAAACAAAACAAAGAAACTCCATCTTTGGGTCTAGTCATG +candidate_21734516 pos=16:85140354-85140394 -46.619 -307.300 -0.841 39.39 AAAACAAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGA +candidate_21735207 pos=16:5178254-5178294 -53.045 -317.200 -0.852 46.51 AAAACAAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCA +candidate_21738820 pos=16:11141085-11141125 -49.060 -314.300 -0.855 41.61 AAAACAAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAG +candidate_21748103 pos=16:45181671-45181711 -48.588 -315.100 -0.859 40.70 AAAACAAAACAACAACAAAACCCACACAATGGATGTGATG +candidate_21749831 pos=16:90188448-90188488 -48.297 -312.700 -0.852 40.70 AAAACAAAACAACAACAACAAACTCAGCTAGCTCCCATTA +candidate_21753987 pos=16:27162495-27162535 -51.542 -321.900 -0.872 43.63 AAAACAAAACAACAGAAAGCTCACATACACGTGGAAGCCG +candidate_21755149 pos=16:30168215-30168255 -49.435 -313.000 -0.850 42.19 AAAACAAAACAACCAAACAACAAGGTGTCTCTTTGCCCTA +candidate_21756048 pos=16:16119405-16119445 -49.347 -310.400 -0.842 42.60 AAAACAAAACAACCCAACCATGAACATAGACTCAGACCCT +candidate_21758248 pos=16:33187988-33188028 -50.598 -316.800 -0.858 43.26 AAAACAAAACAACTCGTGGTCTCCTTTTCTTGGCTTCTCC +candidate_21759100 pos=16:36139573-36139613 -49.428 -313.800 -0.852 42.16 AAAACAAAACAAGAAAACCCCATGCTTCAGATAGCTAGGC +candidate_21759804 pos=16:50168025-50168065 -49.120 -316.500 -0.862 41.25 AAAACAAAACAAGAACAACTTCCTGCACATCTTTGCTCTC +candidate_21761043 pos=16:9183788-9183828 -50.067 -315.400 -0.855 42.81 AAAACAAAACAAGACAAGACAAGACAGGACAGGACAGGAC +candidate_21774421 pos=16:82180535-82180575 -50.660 -311.000 -0.839 44.39 AAAACAAAACACAGACTCTCCCTCTCCCAGTAGCCATCAT +candidate_21775575 pos=16:4115534-4115574 -53.055 -316.900 -0.851 46.58 AAAACAAAACACATTCCCAGGCTGGATTTGGCTCTTGGCC +candidate_21777113 pos=16:14129901-14129941 -52.438 -315.600 -0.848 46.01 AAAACAAAACACCATGAGGCCTTAGGCATGGGTTCACTGG +candidate_21778714 pos=16:50167929-50167969 -50.398 -310.800 -0.840 44.09 AAAACAAAACACCTCCCTAGGGCTAGTGCTCTAGCTAAGT +candidate_21778745 pos=16:85151414-85151454 -50.986 -313.900 -0.848 44.43 AAAACAAAACACCTCTCCTAGACCAGAGACTAGGTGGTGC +candidate_21779002 pos=16:16185138-16185178 -49.676 -312.900 -0.849 42.72 AAAACAAAACACCTTCCTCTCAACACCTCATGGTACCTTC +candidate_21780635 pos=16:11114631-11114671 -50.961 -313.100 -0.845 44.33 AAAACAAAACACTGCCCTCATCTCAAGTCCCCAAACAACT +candidate_21780699 pos=16:81179838-81179878 -48.079 -310.900 -0.847 40.80 AAAACAAAACACTGGAAGCTTCTAAGTGACAGAGGATACA +candidate_21781230 pos=16:9163168-9163208 -49.019 -310.600 -0.843 42.14 AAAACAAAACACTTGAGGCAGGGAGATAGCTTAGTTGGTA +candidate_21784795 pos=16:70191491-70191531 -51.380 -316.000 -0.853 44.38 AAAACAAAACAGAACCGCACAGTGGAGGAGCAATACCATT +candidate_21785278 pos=16:96178155-96178195 -51.296 -313.900 -0.847 44.62 AAAACAAAACAGAAGGCCACAAGGAAAAGGCTAACAGCCT +candidate_21785540 pos=16:88192867-88192907 -49.954 -312.000 -0.845 43.22 AAAACAAAACAGAATAGCAGTTAGGCGGTAGGAGGGAGAA +candidate_21790463 pos=16:73187251-73187291 -50.159 -313.600 -0.849 43.22 AAAACAAAACAGGAAGGGAATGACTGGAGCCATTCAAGAC +candidate_21791592 pos=16:61181111-61181151 -51.861 -313.100 -0.842 45.69 AAAACAAAACAGGGAGGAGATGCCTTGGGTCCTGGAAATG +candidate_21792153 pos=16:20134652-20134692 -48.028 -311.500 -0.849 40.74 AAAACAAAACAGGTCCTTAGAGGCAAGAACTACTGTAGAG +candidate_21792914 pos=16:22154266-22154306 -48.255 -312.100 -0.851 40.74 AAAACAAAACAGTATAAGTAGCAGCCAAACAAAACCACCA +candidate_21793507 pos=16:11160012-11160052 -53.130 -321.100 -0.864 45.85 AAAACAAAACAGTGCCAGTGCACTGGTGCACGACTTTAGT +candidate_21795805 pos=16:14150563-14150603 -46.432 -311.300 -0.854 38.57 AAAACAAAACATACAATCTAAGTGAGTCCAAGTCTCTGAC +candidate_21797204 pos=16:6123369-6123409 -50.290 -314.600 -0.852 43.22 AAAACAAAACATCACAGAACCTGGCAGATGGCTTCCTATG +candidate_21798346 pos=16:83195310-83195350 -47.523 -309.600 -0.845 40.29 AAAACAAAACATGAAATATGGTGACCAGAGTAAAGGGGAG +candidate_21806808 pos=16:36186937-36186977 -49.125 -313.900 -0.854 41.66 AAAACAAAACCAAACAAAACCAACAGAAATCCACTGGGTC +candidate_21808115 pos=16:44115256-44115296 -46.825 -306.700 -0.838 39.75 AAAACAAAACCAAACCCTATACATAGCCAGATGGTATGAA +candidate_21808347 pos=16:39121119-39121159 -50.310 -318.900 -0.866 42.47 AAAACAAAACCAAACTTCCAGCTGTTCAAGTCGTCTTGTG +candidate_21814235 pos=16:91158849-91158889 -50.061 -311.300 -0.842 43.47 AAAACAAAACCACTGACTCACCAAGATAGACTTGGGTGGA +candidate_21814624 pos=16:18106422-18106462 -49.213 -311.600 -0.846 42.13 AAAACAAAACCAGAAAGAAGCCACATAGAATGTTGGGCAT +candidate_21815172 pos=16:53106595-53106635 -46.565 -309.200 -0.847 39.04 AAAACAAAACCAGAGATTATTCAGTTGTCTAATGGGAACC +candidate_21815808 pos=16:22192173-22192213 -49.370 -314.300 -0.854 42.01 AAAACAAAACCAGGACAGTGTGTTACCTCCAAACATTAGC +candidate_21817435 pos=16:6147636-6147676 -52.331 -315.400 -0.848 45.80 AAAACAAAACCATGCAGCGGATGGATTCTGGGGAATGACA +candidate_21822694 pos=16:22131297-22131337 -54.330 -315.600 -0.842 48.56 AAAACAAAACCCCAGCCAACCAAGCCTCACAGCCCTCTTT +candidate_21822783 pos=16:41170402-41170442 -47.697 -307.200 -0.837 40.79 AAAACAAAACCCCATAGGTTTAAATAGCATTGTTGGGGTT +candidate_21823349 pos=16:97153091-97153131 -50.849 -309.700 -0.835 44.86 AAAACAAAACCCCTAAGACTCCCCAGCTGTGCCCATATTA +candidate_21823586 pos=16:6111442-6111482 -52.531 -315.600 -0.848 46.13 AAAACAAAACCCCTTAAATTGGAGTGCACCCCTTCACGGG +candidate_21824607 pos=16:76195417-76195457 -49.143 -309.700 -0.840 42.45 AAAACAAAACCCTCTAAGCTTCTGTTCTTTTCCTCCTGGT +candidate_21824874 pos=16:23161164-23161204 -49.661 -310.900 -0.842 42.92 AAAACAAAACCCTGATCTTGAAAGCCAAGAGGTGATTGGA +candidate_21825189 pos=16:33142000-33142040 -50.941 -314.600 -0.850 44.05 AAAACAAAACCCTGTTGGTTTTCCGACTTAGCAGGAGTCA +candidate_21826337 pos=16:15154703-15154743 -47.841 -311.500 -0.850 40.31 AAAACAAAACCGTGTTGTAGATGTTCCTGGAGAAAGAAAT +candidate_21829358 pos=16:38192572-38192612 -48.132 -313.000 -0.854 40.55 AAAACAAAACCTGGCTAATTTAGTACAGTGCTTTGTCCTC +candidate_21833371 pos=16:69120689-69120729 -47.458 -310.000 -0.846 40.15 AAAACAAAACGATGTAGTGTATCTCAGGGTAGACATGGTA +candidate_21834136 pos=16:90170058-90170098 -49.874 -315.300 -0.856 42.48 AAAACAAAACGGAGGAATAAATAGCCGCTGTCTCATAGCA +candidate_21834208 pos=16:73144766-73144806 -48.502 -310.300 -0.844 41.43 AAAACAAAACGGCAAATCCTAACTATGGAGTGGATCCTTT +candidate_21834785 pos=16:27141570-27141610 -48.304 -311.900 -0.850 40.93 AAAACAAAACGTATGAACCCAGAATGAGTAGACAACAGGA +candidate_21838028 pos=16:4109470-4109510 -46.991 -306.400 -0.836 40.00 AAAACAAAACTAATCCCCAACTCTCTTTCCCTGATCAAAT +candidate_21838265 pos=16:70179074-70179114 -48.253 -313.400 -0.855 40.54 AAAACAAAACTACAAAATCATGCCGAGGAAAGACAGTGAA +candidate_21838416 pos=16:31102444-31102484 -46.726 -313.300 -0.859 38.65 AAAACAAAACTACACAACACGGAAGATATTCTCTGTAGTG +candidate_21839431 pos=16:24135799-24135839 -50.795 -311.600 -0.841 44.46 AAAACAAAACTAGAGGTTCACTGGGAGGACTAGCCAAGCT +candidate_21841895 pos=16:90136413-90136453 -50.463 -316.200 -0.857 43.19 AAAACAAAACTCAATTAGCCACAGAGCACCAAGAGGACAC +candidate_21842556 pos=16:68125708-68125748 -48.508 -313.500 -0.854 40.84 AAAACAAAACTCATCACAATTGTAAGCAGCCACTTGAGTT +candidate_21842776 pos=16:14112129-14112169 -50.532 -315.400 -0.854 43.30 AAAACAAAACTCCAAACCCAAACAACCAAAGCACCAAAGG +candidate_21844822 pos=16:40101009-40101049 -48.032 -312.900 -0.854 40.34 AAAACAAAACTCTTGTGACAACACACATGAAGTATCCACA +candidate_21846752 pos=16:94180536-94180576 -51.883 -316.100 -0.852 45.21 AAAACAAAACTGCATGTCATCCAGAGGCCAGAGAGCCTAG +candidate_21847087 pos=16:43126388-43126428 -53.513 -320.800 -0.862 46.49 AAAACAAAACTGCTTAACACCTTGCCAGGCGCATGGATCC +candidate_21848800 pos=16:84137050-84137090 -48.489 -311.000 -0.846 41.30 AAAACAAAACTGTGATGTATAGTTGTGAAAGGGGACAGCT +candidate_21849939 pos=16:90133192-90133232 -47.614 -310.900 -0.849 40.21 AAAACAAAACTTACCATAGCTAGAGTGATTCACAAACCCC +candidate_21851787 pos=16:14185388-14185428 -47.448 -310.300 -0.848 39.99 AAAACAAAACTTGGTTATGTGTTCCAGACAGAAGAGAACT +candidate_21852077 pos=16:32162767-32162807 -49.985 -312.000 -0.845 43.26 AAAACAAAACTTTAAAAGGGTGGGAGGCAGAAGAGAACCC +candidate_21852860 pos=16:63108540-63108580 -47.570 -312.500 -0.854 39.82 AAAACAAAACTTTGGTGGCTGGTAATGTAGATCAATGTTG +candidate_21856056 pos=16:17181427-17181467 -47.479 -310.300 -0.847 40.03 AAAACAAAAGAAAACACAGAAGTAGCCCATCTCTTTGAGA +candidate_21858474 pos=16:22172199-22172239 -48.764 -310.500 -0.844 41.73 AAAACAAAAGAAACTGGAGGATGATGGAGCAATGCCTTTA +candidate_21858525 pos=16:29165094-29165134 -48.441 -312.100 -0.850 40.97 AAAACAAAAGAAACTTTCAATGCAAGCCAGATGACCTGAT +candidate_21859959 pos=16:50118068-50118108 -49.379 -312.200 -0.847 42.35 AAAACAAAAGAAATATCCAGTGGCCAAAACCAGAACCAGG +candidate_21863612 pos=16:17180243-17180283 -48.405 -313.800 -0.856 40.77 AAAACAAAAGAAGTGAAGGCAGATCTTTGTGAGTTGAAGG +candidate_21864202 pos=16:84196585-84196625 -46.787 -311.500 -0.854 38.98 AAAACAAAAGAATACACTGTCTTCTCAGTACCAAAAGGTG +candidate_21864435 pos=16:8132196-8132236 -47.016 -308.100 -0.842 39.78 AAAACAAAAGAATATAACTTCTCAGCACCTCATGGAACCT +candidate_21866061 pos=16:42197679-42197719 -47.648 -310.500 -0.848 40.22 AAAACAAAAGAATGGAGAGACTGCAAACATACTCCACTTT +candidate_21866445 pos=16:80127300-80127340 -47.432 -306.500 -0.835 40.55 AAAACAAAAGAATTCCATTCCTAATCATTCCCCAAAGGCT +candidate_21868748 pos=16:96107225-96107265 -50.720 -313.200 -0.846 44.10 AAAACAAAAGACCAGGGATGGTGGCATAGCTCAGTAAAGG +candidate_21868751 pos=16:44165904-44165944 -48.394 -313.200 -0.854 40.85 AAAACAAAAGACCAGGTGACCAGCAATGTGATTAGAAAAG +candidate_21871569 pos=16:24108671-24108711 -49.132 -314.000 -0.854 41.75 AAAACAAAAGAGCACTCCTTGCTCAGGTATTTACCTGTTG +candidate_21872058 pos=16:17195497-17195537 -50.719 -316.300 -0.856 43.49 AAAACAAAAGAGGAAGAAAGGAAGCCAGCAAGCAAGTCAG +candidate_21872220 pos=16:14180132-14180172 -48.273 -307.900 -0.837 41.62 AAAACAAAAGAGGATAGTGGAAGAGTGTAGGGGACAGAAA +candidate_21872467 pos=16:47181497-47181537 -49.344 -311.700 -0.846 42.38 AAAACAAAAGAGGGCTCTGAGGTCAGTTGCTATGAAAAGA +candidate_21872626 pos=16:43122088-43122128 -50.360 -316.500 -0.858 43.01 AAAACAAAAGAGGTGAAAAGAAGTCTGCAGTCTAGCTGCC +candidate_21874668 pos=16:6176861-6176901 -52.078 -308.200 -0.826 46.94 AAAACAAAAGATCTGCTAACATCCTCCCCTCCCCTCCCCT +candidate_21875152 pos=16:18106130-18106170 -51.803 -309.600 -0.831 46.43 AAAACAAAAGATGGAGGAGGAGGAGGAGGAGGAGGAGGAG +candidate_21875178 pos=16:44178494-44178534 -50.268 -312.500 -0.845 43.54 AAAACAAAAGATGGCATCCCGTGACAGGTACCAGTTCTAT +candidate_21875790 pos=16:78106632-78106672 -50.648 -313.500 -0.848 43.76 AAAACAAAAGATTCCAAAATAGGCCAAGCAGGTGCAACCA +candidate_21875941 pos=16:66143845-66143885 -47.461 -308.700 -0.842 40.25 AAAACAAAAGATTGGAAATCCACAGTAATCCATGCCAGTA +candidate_21875958 pos=16:43193506-43193546 -51.663 -316.500 -0.854 44.76 AAAACAAAAGATTGGGCTGCACTGTGTTCCTGTAAGTGGG +candidate_21877901 pos=16:35139947-35139987 -49.520 -317.800 -0.865 41.45 AAAACAAAAGCAAAAGCAAAGCACGATGCTAATGTGAGAA +candidate_21880075 pos=16:92131398-92131438 -49.454 -316.400 -0.861 41.68 AAAACAAAAGCAAGCAAACAACATCATCACCATCATCACC +candidate_21880288 pos=16:68164199-68164239 -50.442 -315.000 -0.853 43.25 AAAACAAAAGCAAGGCTGTTGAACACCTAAGCCAACAGTA +candidate_21881395 pos=16:39190074-39190114 -50.151 -311.700 -0.843 43.52 AAAACAAAAGCACTCTAAGCAGCTTAGGGAGGAAAGGAGT +candidate_21882598 pos=16:20162935-20162975 -48.199 -309.500 -0.842 41.17 AAAACAAAAGCATAAAACCTCAGTCCTGTCATAGCCCATA +candidate_21883244 pos=16:96178942-96178982 -49.249 -313.900 -0.853 41.71 AAAACAAAAGCATGCTTTGGCTTATGGTTGTTGGCATTAA +candidate_21883970 pos=16:33164535-33164575 -51.111 -310.800 -0.837 45.01 AAAACAAAAGCCAACCTAAGGGTTGGAGAGATGGTCCAGT +candidate_21884557 pos=16:65100610-65100650 -52.234 -314.900 -0.847 45.86 AAAACAAAAGCCAGCCCTGTTTCCCTGATCCTCAGTTTCC +candidate_21884633 pos=16:5196409-5196449 -51.815 -317.800 -0.858 44.74 AAAACAAAAGCCAGGCATGATGGTACGTTGGAAGTTGGAG +candidate_21884867 pos=16:73131946-73131986 -47.059 -311.400 -0.852 39.34 AAAACAAAAGCCATCGTCTTAAGGGTATTATGTGGAAATG +candidate_21885172 pos=16:29179333-29179373 -49.264 -310.100 -0.841 42.54 AAAACAAAAGCCCACCTAGACCATCATCTACCATTTGTGT +candidate_21887125 pos=16:51197616-51197656 -50.437 -317.600 -0.861 42.93 AAAACAAAAGCTACATGGCCGATGCTCTCTTCACATGTAG +candidate_21888142 pos=16:57184506-57184546 -49.300 -312.400 -0.848 42.22 AAAACAAAAGCTGCAATAGGAGACTCTCTGCCAAGACTAA +candidate_21888583 pos=16:8147690-8147730 -53.712 -319.200 -0.856 47.02 AAAACAAAAGCTGTGTGACATACTGTGGCCCACTGCAGCT +candidate_21890845 pos=16:61173693-61173733 -48.283 -311.600 -0.849 40.85 AAAACAAAAGGAAGAAACACAAAACCTGTGGAGTTCATGT +candidate_21890879 pos=16:12137774-12137814 -46.741 -309.500 -0.847 39.32 AAAACAAAAGGAAGAAGATTGATAGTGAGAGAGGAGTCTG +candidate_21891758 pos=16:90196260-90196300 -49.661 -310.900 -0.842 42.92 AAAACAAAAGGACAAAGATTGACAGCATCCAAGGAGGGAA +candidate_21892971 pos=16:25169626-25169666 -46.340 -308.200 -0.844 38.91 AAAACAAAAGGAGGAGGAAGAGAATTAAGAAATTGACAGG +candidate_21893541 pos=16:96106024-96106064 -49.897 -308.500 -0.834 43.72 AAAACAAAAGGATACTTATGGGCTGGGGAGATGGCTCATT +candidate_21894666 pos=16:19131189-19131229 -47.097 -306.600 -0.837 40.21 AAAACAAAAGGATATACCTTCTTCTCAGCACCTCATCCTA +candidate_21896771 pos=16:4154836-4154876 -49.881 -315.400 -0.856 42.48 AAAACAAAAGGCAACTTACCATATTTGGCACAGTGGTGAC +candidate_21897548 pos=16:91199660-91199700 -51.291 -311.600 -0.839 45.11 AAAACAAAAGGCCACTCTCTCCCCTTCTCCAGCTTCTTTT +candidate_21898022 pos=16:5142581-5142621 -49.116 -311.100 -0.845 42.19 AAAACAAAAGGCTAGCCTTGGATGTATAGCAAGACTGTCT +candidate_21902275 pos=16:97126580-97126620 -48.437 -309.800 -0.843 41.43 AAAACAAAAGGTTTTACTATTGTTCACGGGGATGGATGGA +candidate_21904481 pos=16:51138374-51138414 -47.156 -311.900 -0.854 39.39 AAAACAAAAGTAGGAAAGCATTTCATTGTGGAAGCTCTAG +candidate_21904608 pos=16:11192920-11192960 -47.196 -309.800 -0.847 39.75 AAAACAAAAGTAGTCAGGTGAGATGTGAAATACCAACAGT +candidate_21909049 pos=16:17189854-17189894 -48.031 -311.100 -0.848 40.61 AAAACAAAAGTGGTGAGGAAAGATGGCTCAACAGTTAAAA +candidate_21909100 pos=16:22147477-22147517 -50.074 -315.500 -0.856 42.70 AAAACAAAAGTGTAAAGTGCTTGCCAGACACAGAGACTCA +candidate_21911224 pos=16:21183507-21183547 -47.082 -309.500 -0.846 39.65 AAAACAAAAGTTGGTACCAGAAGTAGAGTATTGCTGTGAT +candidate_21915805 pos=16:6147626-6147666 -48.485 -315.400 -0.861 40.53 AAAACAAAATAAAACAAAACCATGCAGCGGATGGATTCTG +candidate_21920282 pos=16:32187546-32187586 -48.636 -314.900 -0.859 40.79 AAAACAAAATAAACAGAAAAGCAAGCATTCCACAAAGCCC +candidate_21924434 pos=16:72152772-72152812 -48.419 -310.000 -0.843 41.37 AAAACAAAATAACCAGTACTTGTGACTTCCTGGCTTCCAT +candidate_21925638 pos=16:24143294-24143334 -47.190 -310.600 -0.849 39.62 AAAACAAAATAAGATGGTGGTTTGCCTTAATGACAGGAAG +candidate_21939090 pos=16:28155420-28155460 -51.290 -314.700 -0.849 44.48 AAAACAAAATATGCTCAGTGCAAACCTCAAGGGCAGGTCA +candidate_21943614 pos=16:78146038-78146078 -49.516 -310.600 -0.842 42.78 AAAACAAAATCAAGACTACAGCAGGAAAATGGGTGGAGGT +candidate_21945865 pos=16:28149023-28149063 -47.586 -311.400 -0.851 40.00 AAAACAAAATCAGGGGTGCTTTAATATCATGGTTGCAATC +candidate_21951625 pos=16:91185437-91185477 -47.285 -308.400 -0.842 40.07 AAAACAAAATCTCAACCAAATCCTAGCCTACTGCCTTTTA +candidate_21951703 pos=16:54143955-54143995 -49.143 -314.600 -0.856 41.67 AAAACAAAATCTCACAGCAAACCTGTCCTTCTCTTCTGAC +candidate_21951872 pos=16:10129152-10129192 -52.718 -317.400 -0.853 46.06 AAAACAAAATCTCATGCAACCAAGTCAGGCCTCCAGCTGG +candidate_21955055 pos=16:28167909-28167949 -47.319 -312.900 -0.856 39.44 AAAACAAAATGAAACAAAACTCCGGTATCTTTCCTGTCTC +candidate_21956780 pos=16:91182411-91182451 -51.419 -317.900 -0.859 44.02 AAAACAAAATGAAGCCAGCTTTGAACACACTGTGTTGGCA +candidate_21958297 pos=16:50115922-50115962 -50.817 -314.600 -0.850 43.89 AAAACAAAATGAGAAAGGCGTGGTTGAGCTAGCCTCCATA +candidate_21959123 pos=16:17100947-17100987 -48.037 -310.300 -0.846 40.84 AAAACAAAATGAGTGTGTCTAACACTAGTAGAAAGCCCCA +candidate_21961679 pos=16:83169237-83169277 -48.151 -309.700 -0.843 41.08 AAAACAAAATGCCTTCTATCCACCTTCAGAAGACTTCAGT +candidate_21961983 pos=16:80154036-80154076 -48.704 -312.300 -0.850 41.37 AAAACAAAATGCTCACAGAGGTGAAGGTGATCTACACAAA +candidate_21966751 pos=16:37129884-37129924 -50.716 -318.500 -0.863 43.14 AAAACAAAATGTCCGTGCTATTCTCATGTCTGTCAGTGGC +candidate_21967395 pos=16:58168778-58168818 -47.893 -310.900 -0.848 40.46 AAAACAAAATGTGCCTTAGCACAGTGGGCAATTTAGTATA +candidate_21968283 pos=16:18109528-18109568 -51.638 -314.800 -0.848 45.01 AAAACAAAATGTTCCTCTGGTTTTCCAACAGGCTGTGGGG +candidate_21972372 pos=16:48194702-48194742 -47.430 -308.700 -0.842 40.21 AAAACAAAATTAGAGACAAGGACATGAGGTAAAATGGCCA +candidate_21973007 pos=16:47167787-47167827 -48.337 -309.700 -0.843 41.31 AAAACAAAATTATAACACTGGGTCCTTATCCTGTGCTGCT +candidate_21978114 pos=16:63152879-63152919 -48.990 -313.300 -0.852 41.68 AAAACAAAATTGAGGGACTCCAGAATACAGAAAGAGCTGC +candidate_21979257 pos=16:20146969-20147009 -48.297 -312.700 -0.853 40.70 AAAACAAAATTGTAAGTTGGAGGCAAGAGCTGTGTTGTAA +candidate_21979283 pos=16:75142524-75142564 -48.205 -313.600 -0.856 40.55 AAAACAAAATTGTACAGAAAGGAACTACTCAGAGCCATGC +candidate_21982381 pos=16:41132040-41132080 -49.271 -311.100 -0.844 42.39 AAAACAAAATTTCTACCCACTACTCCCTGCAGTGACAGTT +candidate_21982954 pos=16:86199584-86199624 -50.602 -317.300 -0.860 43.08 AAAACAAAATTTGCAAGCATCTGGAATGGCTGGTAAGTGC +candidate_21983199 pos=16:19155514-19155554 -51.259 -309.800 -0.834 45.37 AAAACAAAATTTGGGTGGGAGGTGGGAAAGTTCTGGGAGA +candidate_22007903 pos=16:87129728-87129768 -48.032 -313.800 -0.857 40.30 AAAACAAACAAAACACTCAGTTCATCGGGTAAAGTCTAGG +candidate_22008965 pos=16:85166641-85166681 -48.886 -312.700 -0.851 41.54 AAAACAAACAAAACCAGAAACCAAACCCCTTTTACCTGTG +candidate_22009936 pos=16:13198354-13198394 -51.023 -318.000 -0.861 43.60 AAAACAAACAAAACGGGCCAAGCAGAAACCTATCTGTAGC +candidate_22012273 pos=16:31196757-31196797 -49.771 -310.700 -0.841 43.19 AAAACAAACAAAAGTATCACCCTATCGCCCTAGGTAGCCT +candidate_22067700 pos=16:79178510-79178550 -50.290 -313.700 -0.849 43.27 AAAACAAACAAACAAACAACCTGTCTGCCTCTTCCCTCAA +candidate_22070025 pos=16:95161906-95161946 -47.425 -312.200 -0.854 39.68 AAAACAAACAAACAAACAGGAGCACAGTCATAATATTCCC +candidate_22070415 pos=16:60163443-60163483 -47.922 -314.000 -0.858 40.03 AAAACAAACAAACAAACATGGTCAGAATGCAGAGTTATGG +candidate_22072895 pos=16:11187568-11187608 -48.698 -314.000 -0.855 41.10 AAAACAAACAAACAAAGATGAGCCTTTGAAGCCCTAGAAC +candidate_22077731 pos=16:67178091-67178131 -49.229 -314.500 -0.855 41.70 AAAACAAACAAACAAGAACAACAAAATCCCAGCCAGATGG +candidate_22077881 pos=16:15134201-15134241 -47.377 -313.300 -0.857 39.46 AAAACAAACAAACAAGACCTAAAACTGTCCTGTAACAGTG +candidate_22080165 pos=16:12188710-12188750 -50.601 -310.600 -0.838 44.28 AAAACAAACAAACACAAAGCCTATCCATCCCCATGGGTCT +candidate_22080497 pos=16:32111082-32111122 -48.722 -313.900 -0.855 41.05 AAAACAAACAAACACACACCAACCAGAAGCAGAATGTTTA +candidate_22080830 pos=16:64121803-64121843 -48.658 -311.200 -0.846 41.49 AAAACAAACAAACACCATAAGAAGAGCCAGCCAGAATAGT +candidate_22082335 pos=16:50179734-50179774 -50.064 -316.700 -0.860 42.50 AAAACAAACAAACAGCATGGTGACACATGTTTGTAGTCCC +candidate_22082778 pos=16:25112695-25112735 -48.251 -315.600 -0.862 40.20 AAAACAAACAAACAGTCGAACAAACAAACCCCAATCATAC +candidate_22083540 pos=16:30140025-30140065 -48.909 -315.700 -0.860 41.11 AAAACAAACAAACATGGCCAAGTCTATCGTAGAAAATGCC +candidate_22088458 pos=16:78160661-78160701 -49.607 -312.800 -0.849 42.44 AAAACAAACAAAGAAAAGAAACTGGCAAGGATGCAGGGAA +candidate_22089455 pos=16:26154863-26154903 -48.584 -313.700 -0.855 41.01 AAAACAAACAAAGACACAGACAAACAGACAGAGAGACTGA +candidate_22090997 pos=16:51143275-51143315 -47.539 -312.500 -0.854 39.78 AAAACAAACAAAGTTAGTAAGGCACTTGTCAATTCCCATG +candidate_22097738 pos=16:48156249-48156289 -48.641 -312.300 -0.850 41.30 AAAACAAACAACAAAAGAGAGAGCTGAAAGGGACTGTACA +candidate_22102208 pos=16:28116722-28116762 -49.123 -317.000 -0.864 41.18 AAAACAAACAACATACACTTGATATTGTCAAGCAAGGCCG +candidate_22107943 pos=16:17193782-17193822 -50.532 -320.300 -0.870 42.42 AAAACAAACAAGCAAACAAAACAACAACATCAGCACTGGC +candidate_22108944 pos=16:90137828-90137868 -50.663 -315.500 -0.854 43.55 AAAACAAACAAGCAAAGACAACCCACAGGGCTGGTAATAC +candidate_22111133 pos=16:17108267-17108307 -48.510 -312.200 -0.850 41.25 AAAACAAACAAGGAGCTGGAGAAATAGCTCAGAGGTTAAG +candidate_22111571 pos=16:76106687-76106727 -51.337 -312.700 -0.843 44.98 AAAACAAACAAGGTCATAGCTCAGGGCTGTTCTGCCCTAT +candidate_22115072 pos=16:41106475-41106515 -47.162 -310.200 -0.848 39.75 AAAACAAACAATCTTAACTACTACCACTACCACCACCATC +candidate_22117822 pos=16:45173818-45173858 -49.333 -311.100 -0.844 42.47 AAAACAAACACAAATCTTTATCTACCTCCCTGAGCAGCCA +candidate_22120338 pos=16:5155136-5155176 -48.786 -312.600 -0.851 41.43 AAAACAAACACACTCAAGAAACTGTTCCACTCATGGAGAA +candidate_22121522 pos=16:23101375-23101415 -48.728 -313.100 -0.852 41.28 AAAACAAACACATACAAACAACCAGTACAGTAGTGCCAGA +candidate_22126700 pos=16:90130090-90130130 -48.058 -310.600 -0.847 40.72 AAAACAAACACTTCTTCCCTTTATTTGCTTTCTCCAGCAT +candidate_22128391 pos=16:66105689-66105729 -49.388 -311.000 -0.844 42.55 AAAACAAACAGAAAGGAAAGATTCTGGAAGAGGCACAGGA +candidate_22129434 pos=16:12190394-12190434 -50.256 -315.000 -0.854 43.01 AAAACAAACAGAAGGAAAAGAGCCAAGCGAAGGCATAAGA +candidate_22132000 pos=16:75198974-75199014 -48.506 -315.700 -0.862 40.51 AAAACAAACAGAGTGTGACATGTGTCGATTTCAGACAAAA +candidate_22133710 pos=16:87137068-87137108 -52.395 -314.100 -0.844 46.21 AAAACAAACAGCAGTATCCAGATCAGCTGCATCCCTCCCA +candidate_22133726 pos=16:96130849-96130889 -51.448 -315.200 -0.850 44.70 AAAACAAACAGCAGTGGCTACCACACAGTCATAGACCTGA +candidate_22134530 pos=16:13118550-13118590 -50.762 -313.800 -0.848 44.06 AAAACAAACAGCTAGAAGTCAGATTGGGGATCCAAGCTGG +candidate_22134652 pos=16:57199201-57199241 -55.472 -324.000 -0.866 48.74 AAAACAAACAGCTCGAGAGAGCACTCCTCGTCCCCAGTGC +candidate_22135831 pos=16:73178578-73178618 -49.293 -313.200 -0.851 42.08 AAAACAAACAGGATATTGAATGCCATGAAGGAGGCTGTTC +candidate_22136880 pos=16:73124496-73124536 -50.491 -310.800 -0.839 44.21 AAAACAAACAGGCTTCTGGATAGAGGAAGAGGTGTGGAGA +candidate_22137318 pos=16:66107612-66107652 -48.452 -312.700 -0.852 40.90 AAAACAAACAGGGTCAAGTTGGTTCAACACTTGTGTTTTA +candidate_22138543 pos=16:10153026-10153066 -48.528 -312.000 -0.849 41.30 AAAACAAACAGTATGATGGTCTAAGTTGGGCCATAGACAC +candidate_22139014 pos=16:66135997-66136037 -48.942 -313.500 -0.853 41.49 AAAACAAACAGTGCAACTTGAGATTCTATGCCAACAGAGA +candidate_22139245 pos=16:30109118-30109158 -50.375 -318.500 -0.864 42.61 AAAACAAACAGTGTGCTTTGCAAGGATGCAGTCATACTTG +candidate_22140417 pos=16:42198376-42198416 -48.457 -315.000 -0.859 40.55 AAAACAAACATAACAATGCAATGGAATCCAGCTTTGCTTC +candidate_22142541 pos=16:83147797-83147837 -49.693 -313.600 -0.851 42.63 AAAACAAACATATCTAGGCAAGACTAACCAGTGGCCACAG +candidate_22143830 pos=16:74196682-74196722 -49.850 -310.500 -0.840 43.23 AAAACAAACATCCCCAAAGGCTTTGATATCCCATTCAGCA +candidate_22143879 pos=16:68111670-68111710 -50.260 -315.500 -0.855 42.94 AAAACAAACATCCGTGTTGACAGCCCACTATTTCACAGAA +candidate_22144385 pos=16:46108727-46108767 -52.639 -318.500 -0.857 45.77 AAAACAAACATCTGTGCTCAGGGGCTGCTGTAAGTGGTTC +candidate_22153094 pos=16:32194021-32194061 -52.132 -317.000 -0.854 45.17 AAAACAAACCAAACAAAAGGCAGCACTGGTTGCTCTTCCA +candidate_22154498 pos=16:63139745-63139785 -46.913 -309.300 -0.846 39.47 AAAACAAACCAAAGGAGACAAGCTTAGAATGTAGTAGACA +candidate_22155674 pos=16:34122313-34122353 -50.571 -317.300 -0.860 43.15 AAAACAAACCAACAATCGTAACTAGGAGGGAAAACGGCAG +candidate_22155947 pos=16:44159950-44159990 -50.853 -316.000 -0.855 43.71 AAAACAAACCAACATCCTGCTTTCACATTGAAGGGCAGAG +candidate_22156764 pos=16:29182366-29182406 -49.487 -309.300 -0.838 42.95 AAAACAAACCAACTCATCCTAACACAGGGTTTCCCCTTTT +candidate_22157299 pos=16:50159646-50159686 -51.315 -311.500 -0.839 45.15 AAAACAAACCAAGCATCCATGGGTGGGGAGTGAGTAAGAA +candidate_22158341 pos=16:50123922-50123962 -50.085 -312.100 -0.845 43.27 AAAACAAACCAATTAAGCAGGTGAATATTGGCTGGGCTGA +candidate_22159085 pos=16:27143471-27143511 -47.200 -311.200 -0.851 39.55 AAAACAAACCACAGCAGAAAATAGAAGGGATGAAAAGAAG +candidate_22160134 pos=16:88124329-88124369 -50.290 -313.700 -0.849 43.27 AAAACAAACCACTCTCACCCCAAGAAAGCAAGACACAAAA +candidate_22161492 pos=16:90147842-90147882 -48.277 -313.300 -0.855 40.68 AAAACAAACCAGCAGGGTAACAGTCTTTAGCTAATTTGTG +candidate_22162118 pos=16:44151172-44151212 -53.231 -316.300 -0.848 47.01 AAAACAAACCAGGGAGTTGCTTCTGGGGTCCAGCTTTGAG +candidate_22162200 pos=16:11163816-11163856 -51.440 -312.400 -0.841 45.16 AAAACAAACCAGGGTCTCAAATAGCCCAGCTTGGCTATGA +candidate_22163643 pos=16:57158167-57158207 -46.901 -311.800 -0.854 39.08 AAAACAAACCATCTGGCACAATTAACTGACTGTACTTATC +candidate_22164411 pos=16:82101203-82101243 -47.785 -308.900 -0.842 40.63 AAAACAAACCATTGAAACACTGATGAACCAAATAGGGGAA +candidate_22165988 pos=16:63157019-63157059 -48.311 -308.000 -0.837 41.55 AAAACAAACCCAATCAAGACCCCTAAATGGTAGCATTTCT +candidate_22167297 pos=16:88195353-88195393 -50.811 -315.400 -0.853 43.65 AAAACAAACCCAGTGATTGGCATGGCTCGAAATGTTTTCT +candidate_22167603 pos=16:49183383-49183423 -53.059 -316.500 -0.849 46.65 AAAACAAACCCATGATCCAGACAGGCTCTGTGCAGATGCA +candidate_22168403 pos=16:92162192-92162232 -50.591 -310.900 -0.839 44.22 AAAACAAACCCCAGATGCATGCCCATAGGTCAATCAGATT +candidate_22168417 pos=16:57136534-57136574 -50.869 -314.900 -0.851 44.01 AAAACAAACCCCAGCCAAGTACAGTAGTGACAGTTCCTTG +candidate_22168459 pos=16:74173913-74173953 -51.546 -316.600 -0.855 44.59 AAAACAAACCCCAGGCACATTCCTTATAGCCGTGTTATGC +candidate_22168537 pos=16:11170884-11170924 -51.692 -312.900 -0.842 45.40 AAAACAAACCCCATCCCACCTCAGCTTCATTACTGCACTT +candidate_22169674 pos=16:48189398-48189438 -49.484 -309.700 -0.839 42.89 AAAACAAACCCGGGTATGCCCCTTAGTTAAAACATTCCTT +candidate_22169694 pos=16:16192234-16192274 -51.072 -313.800 -0.847 44.45 AAAACAAACCCGGTATGCCCCATAGTTAAAGCATTCCTGG +candidate_22169998 pos=16:9169681-9169721 -48.556 -308.400 -0.838 42.00 AAAACAAACCCTACCTTAATGGGAGATATCACAGACTGGG +candidate_22170395 pos=16:45154949-45154989 -49.151 -310.700 -0.843 42.40 AAAACAAACCCTCCCTTCCTTAACTGAAGTTTCCTAGCTC +candidate_22171219 pos=16:11135198-11135238 -50.539 -310.600 -0.839 44.20 AAAACAAACCCTTCCCTCCCCAAGTAGCTTTTGTTCATGT +candidate_22171832 pos=16:68188884-68188924 -48.210 -311.900 -0.850 40.81 AAAACAAACCGAAAGTACCTGGACATACGAACCTTTCTAT +candidate_22174961 pos=16:91126021-91126061 -48.864 -310.600 -0.844 41.95 AAAACAAACCTCCACAGAGCTTACTCAATTCTCTGAAGGA +candidate_22175427 pos=16:92181887-92181927 -49.036 -309.500 -0.840 42.34 AAAACAAACCTCTCATCAGGATGGAAAAGTACCAACCTGT +candidate_22179958 pos=16:5111686-5111726 -54.245 -317.500 -0.849 48.11 AAAACAAACGAAACACCATTGCTGGGTGCCAGGAGAGGGA +candidate_22185338 pos=16:65122594-65122634 -48.427 -311.000 -0.847 41.33 AAAACAAACTAAACCCATAGACAACTGTATTGCCTCCTCC +candidate_22185583 pos=16:8163848-8163888 -47.567 -308.000 -0.840 40.60 AAAACAAACTAAAGGAGAGTAAAGAAGAGTCACCAACCCT +candidate_22188201 pos=16:55133103-55133143 -48.866 -312.400 -0.850 41.66 AAAACAAACTACATGCCAGGAGTTTCCTTTTCCTCTTGAG +candidate_22188735 pos=16:81153500-81153540 -47.717 -311.500 -0.851 40.15 AAAACAAACTACTGCAGTCACTCAGGAAATTGTTGAGAAT +candidate_22190073 pos=16:13184132-13184172 -47.217 -310.100 -0.848 39.83 AAAACAAACTAGGTGGGAAAGAGTTTACTTTGAGTGGTAG +candidate_22192227 pos=16:27164290-27164330 -47.196 -309.800 -0.847 39.75 AAAACAAACTCAAACAAATCAGTAGCCTTCCTCTACTCAA +candidate_22192745 pos=16:48174894-48174934 -50.821 -314.200 -0.849 43.96 AAAACAAACTCAAGATTCTGCTTGAGTGACAGGGCCTTCA +candidate_22193410 pos=16:40142209-40142249 -49.219 -310.800 -0.843 42.37 AAAACAAACTCACTATCAGAAATTGCCCAGCCTAGCCTAA +candidate_22193752 pos=16:43152789-43152829 -50.872 -314.500 -0.850 43.98 AAAACAAACTCAGCCAATGTTTGGAGGTTCCTCGTCTCAT +candidate_22193843 pos=16:90164453-90164493 -48.310 -311.100 -0.847 41.06 AAAACAAACTCAGGACTTTGTGAGCATCCATTATAGCTCA +candidate_22195602 pos=16:64101875-64101915 -48.710 -311.500 -0.847 41.61 AAAACAAACTCCTCTGTCCCAGGCTAATGGTTTATTTGTC +candidate_22196342 pos=16:18179921-18179961 -51.938 -315.100 -0.848 45.45 AAAACAAACTCTATGATCTGCCTGGTTACCCTGGCCAAGC +candidate_22197324 pos=16:11181750-11181790 -48.492 -309.700 -0.842 41.71 AAAACAAACTCTTCCTCCCATTCTACTAAGGACTGCTAGG +candidate_22197538 pos=16:7145407-7145447 -48.738 -312.800 -0.851 41.34 AAAACAAACTCTTTAGAGCTGGTGAATGCTTGTTCTCAGT +candidate_22198662 pos=16:24108652-24108692 -48.182 -315.500 -0.862 40.13 AAAACAAACTGACAAACAGAAAACAAAAGAGCACTCCTTG +candidate_22199438 pos=16:84113940-84113980 -49.377 -314.400 -0.855 41.90 AAAACAAACTGATACACGTGCAAAAGAGTGAATTTCCCCA +candidate_22199459 pos=16:39138516-39138556 -47.032 -311.900 -0.854 39.33 AAAACAAACTGATACTTGTCCACACAGTCTCTGATAGTAC +candidate_22200544 pos=16:97127845-97127885 -50.457 -312.100 -0.844 43.85 AAAACAAACTGCTGAACTACCCAATAAGATCCTGCCACCA +candidate_22200957 pos=16:31174384-31174424 -53.369 -316.500 -0.848 47.15 AAAACAAACTGGACAGGCAGTGACAGACTCCCAGAGCTGA +candidate_22201014 pos=16:75109753-75109793 -49.706 -311.100 -0.843 43.04 AAAACAAACTGGAGAAGCAAGTGGTGGAGTATCAGAGGTA +candidate_22202360 pos=16:8100518-8100558 -49.631 -313.600 -0.851 42.55 AAAACAAACTGTATAGAGGGTTTGTCCCTGTGCAGAAGAC +candidate_22202771 pos=16:66144420-66144460 -48.043 -313.500 -0.856 40.26 AAAACAAACTGTGACAAAGAGCCATCATTTCACGATCTTA +candidate_22203018 pos=16:93137335-93137375 -54.307 -318.400 -0.851 48.13 AAAACAAACTGTGTACCAGCCCAGACCCTGCTGTGGAACC +candidate_22205403 pos=16:57181778-57181818 -50.157 -316.700 -0.859 42.52 AAAACAAACTTCAATGTTCACACCACAAGATGCAGCAACA +candidate_22206827 pos=16:20161423-20161463 -47.467 -307.900 -0.840 40.38 AAAACAAACTTGAAGGGAATTAAGTAGGCATGGAGGTTTT +candidate_22207174 pos=16:81171525-81171565 -49.480 -319.000 -0.869 41.22 AAAACAAACTTGCAAAGTCATTGTGTTTGTTTGTGTTGGC +candidate_22207831 pos=16:40187696-40187736 -50.499 -311.800 -0.843 44.05 AAAACAAACTTGTCACTAGTCCAGTCCAGGGACTCAGACT +candidate_22208932 pos=16:62193639-62193679 -46.886 -310.700 -0.851 39.23 AAAACAAACTTTCAGAAGGAAGGCATAGTTCCTACAAAAG +candidate_22213516 pos=16:42184208-42184248 -48.455 -311.400 -0.848 41.20 AAAACAAAGAAAACCTCCGAGTTTCTGTCTACCCAAAGAA +candidate_22214148 pos=16:32110929-32110969 -54.526 -321.100 -0.859 47.73 AAAACAAAGAAAAGCAGAATGCAGGCCAAGCGGTGGCACT +candidate_22214644 pos=16:10161150-10161190 -48.338 -311.500 -0.848 41.04 AAAACAAAGAAAATAATAATTCTGTGTCCTTGCCAGGGGC +candidate_22218001 pos=16:6153321-6153361 -49.876 -313.100 -0.849 42.94 AAAACAAAGAAACTCCATCTTTGGGTCTAGTCATGCCCAC +candidate_22220205 pos=16:51104997-51105037 -47.858 -310.400 -0.846 40.50 AAAACAAAGAAAGCAAAGGAGAATGACTGTGGGTTTTACT +candidate_22221967 pos=16:78121594-78121634 -47.299 -308.600 -0.843 40.06 AAAACAAAGAAATCAACAGGCTATCACATCTTCCCTTTCT +candidate_22226467 pos=16:85140359-85140399 -45.506 -306.900 -0.843 38.04 AAAACAAAGAAGAAGGATAGAAGGAACCAGAGAGATAAAG +candidate_22230471 pos=16:48150618-48150658 -47.989 -310.500 -0.846 40.85 AAAACAAAGAATATTACCAAGGACCACTCCACTCTGTCTC +candidate_22231264 pos=16:35100492-35100532 -48.555 -312.400 -0.851 41.17 AAAACAAAGAATGAATGAATTCAGGCATGGTGATTCACCC +candidate_22231544 pos=16:62146595-62146635 -49.106 -311.400 -0.846 42.03 AAAACAAAGAATGGACAGCCATGCCACAATAATGGAAGAA +candidate_22234415 pos=16:53153978-53154018 -52.904 -317.400 -0.853 46.19 AAAACAAAGACAACCACTGCATGTGGGCTGATGTGCCTTT +candidate_22235188 pos=16:84110136-84110176 -46.972 -309.700 -0.847 39.48 AAAACAAAGACACAGATACTTAACTGGGTATACAAGTGCA +candidate_22235294 pos=16:85110795-85110835 -51.412 -317.800 -0.859 44.13 AAAACAAAGACACATGCGTACACACATGGCCTCATTCAGA +candidate_22235562 pos=16:66120355-66120395 -49.524 -312.500 -0.848 42.48 AAAACAAAGACACTGAGCTGGGAGAAAAGATTGCTCTCTT +candidate_22237073 pos=16:95114060-95114100 -48.645 -312.800 -0.852 41.12 AAAACAAAGACATCATGAAATTTGCAGGCAATGGACAGAA +candidate_22238881 pos=16:91149318-91149358 -47.688 -308.400 -0.841 40.69 AAAACAAAGACCCAGAGAAGTTAAGTCATGCAAGGGTATA +candidate_22240123 pos=16:58145273-58145313 -51.590 -315.000 -0.849 45.02 AAAACAAAGACTAACACCCTAGGGCGTTCTCCAACTTCCC +candidate_22240135 pos=16:32114579-32114619 -48.202 -309.100 -0.841 41.34 AAAACAAAGACTAACCATCACATACGACCTGGATACCCTA +candidate_22240291 pos=16:18162248-18162288 -51.020 -313.500 -0.846 44.54 AAAACAAAGACTACTTACATCCAGCCCCTCTGGAGCTCTG +candidate_22242413 pos=16:97176240-97176280 -49.272 -307.100 -0.831 43.14 AAAACAAAGAGAAAATGAAGAAGAGGGAGGGAGGGAGGAA +candidate_22242847 pos=16:41171621-41171661 -47.134 -309.800 -0.847 39.77 AAAACAAAGAGAAATGTTCCTACCTGGTAACACATAGGAC +candidate_22243294 pos=16:91118707-91118747 -51.772 -314.500 -0.847 45.24 AAAACAAAGAGAAGCAGCACTGGGAGACAAGGTCACCAAT +candidate_22244228 pos=16:6117975-6118015 -47.962 -311.900 -0.851 40.50 AAAACAAAGAGAGAAACACACAGAGAGAAACACAGAGAGA +candidate_22244542 pos=16:31144986-31145026 -53.922 -314.200 -0.839 48.49 AAAACAAAGAGAGAGGTGCAAGAGGGAGTGGGGAGGGGTC +candidate_22245248 pos=16:90156432-90156472 -51.655 -315.500 -0.851 45.02 AAAACAAAGAGATCTGTCTTCCTCTGCCTCCCAAGTGCTG +candidate_22246691 pos=16:5178259-5178299 -53.880 -318.500 -0.853 47.56 AAAACAAAGAGCTAGGCACTCGGGAGGTTGAGGCAGGAAG +candidate_22248005 pos=16:68163705-68163745 -50.953 -317.000 -0.858 43.68 AAAACAAAGAGGCCTTGACGATTCTATGGAACACACGTGA +candidate_22249466 pos=16:53198620-53198660 -49.067 -309.500 -0.840 42.38 AAAACAAAGAGTCATTCAAGCTGAAGGGGAATTGGTAGGA +candidate_22249903 pos=16:20170601-20170641 -47.951 -310.400 -0.846 40.62 AAAACAAAGAGTGTAATGAACCTCCATGTGCCAAATCAAT +candidate_22250312 pos=16:3109155-3109195 -57.270 -323.100 -0.857 51.21 AAAACAAAGAGTTGGGCCGGGCGTGGTGGCACACACCTTT +candidate_22251468 pos=16:51149587-51149627 -47.152 -310.500 -0.849 39.59 AAAACAAAGATACAAGTAACACAATACAGACTGAGCTGGT +candidate_22251480 pos=16:62192811-62192851 -47.891 -308.200 -0.839 40.98 AAAACAAAGATACAATGGTTGAGGATATGCCTCTGTGGAT +candidate_22254279 pos=16:39105899-39105939 -51.425 -311.300 -0.838 45.33 AAAACAAAGATGAAGAAACACCCAGATCCAACTGGGGCCT +candidate_22263227 pos=16:65100596-65100636 -51.317 -315.100 -0.850 44.35 AAAACAAAGCAAACAAAACAAAAGCCAGCCCTGTTTCCCT +candidate_22264711 pos=16:96115374-96115414 -50.413 -317.700 -0.862 42.78 AAAACAAAGCAAAGCAAAATCAGCAGACAGTCTGTTTCCC +candidate_22266827 pos=16:46140996-46141036 -50.134 -312.800 -0.847 43.21 AAAACAAAGCAACTTGGGTAGGAAAAGGTGTGTTTGGCTA +candidate_22267124 pos=16:64124738-64124778 -48.407 -312.500 -0.852 40.87 AAAACAAAGCAAGACCCAACAGCTACAAGAAAACTGAAAT +candidate_22267784 pos=16:93148087-93148127 -52.876 -316.100 -0.849 46.59 AAAACAAAGCAAGGCAAGGTCAAGAGGTAGCCTGGGAGAG +candidate_22267986 pos=16:49132159-49132199 -48.221 -312.500 -0.852 40.73 AAAACAAAGCAAGTCTCCCTTGTCCAAGAAAAGAATGATC +candidate_22270008 pos=16:37196041-37196081 -46.586 -309.500 -0.848 39.02 AAAACAAAGCACCCATATCATAAATCATTCTCTGGATCAC +candidate_22270492 pos=16:68171225-68171265 -49.929 -315.200 -0.855 42.67 AAAACAAAGCACTGGAAGTCAAATCACGGGGTCTATACTG +candidate_22270800 pos=16:57163111-57163151 -48.599 -310.800 -0.845 41.48 AAAACAAAGCAGAAACACTCTCTAGGAAGGGAATGCTTTT +candidate_22272621 pos=16:78164887-78164927 -53.425 -318.200 -0.854 46.93 AAAACAAAGCAGGGCTGCCTTGGCTAGAAGGACAAGTGAG +candidate_22274021 pos=16:18122906-18122946 -54.205 -319.600 -0.856 47.68 AAAACAAAGCATATTTGCACTCCCTGTGGGTGGCAGTGGC +candidate_22274554 pos=16:4153705-4153745 -51.935 -316.400 -0.853 45.23 AAAACAAAGCATGAGAGAGGGAGGCAGGCAGTACATAAGC +candidate_22274607 pos=16:25188474-25188514 -50.449 -320.000 -0.869 42.47 AAAACAAAGCATGATGTGTATGTGTGTGTGTGTGTGTGTG +candidate_22274960 pos=16:18191168-18191208 -50.586 -314.400 -0.851 43.63 AAAACAAAGCATGTTATGAAATCCCAGAGAAGCCCATGGC +candidate_22275089 pos=16:64170152-64170192 -48.129 -313.400 -0.855 40.38 AAAACAAAGCATTAGCAAGTGCAATAGCATTGCTACTAGA +candidate_22276314 pos=16:55137295-55137335 -48.757 -310.400 -0.844 41.84 AAAACAAAGCCAAATCCTCTATTTTGTGAGAAGGGAAGGG +candidate_22276407 pos=16:48163864-48163904 -51.159 -314.600 -0.849 44.43 AAAACAAAGCCAACAGAGAAGTCGTAGCCTCAACCCTCTA +candidate_22277296 pos=16:15184133-15184173 -50.500 -313.600 -0.848 43.75 AAAACAAAGCCACTCCTAGGCTCCTTGCTATTTGTAGGAC +candidate_22277386 pos=16:80198612-80198652 -47.157 -308.800 -0.844 39.85 AAAACAAAGCCAGAAAGTGAATTACTGACCCAAGATTCTA +candidate_22278994 pos=16:48190339-48190379 -52.566 -321.900 -0.868 45.11 AAAACAAAGCCCAGAGAACTAGACGAAGAGCAAGCGTAGC +candidate_22279207 pos=16:90183096-90183136 -51.432 -317.200 -0.857 44.35 AAAACAAAGCCCATTATCTTACACAGAGCAGTGCTGAGGC +candidate_22279494 pos=16:92122139-92122179 -47.931 -311.000 -0.848 40.60 AAAACAAAGCCCCTGACTAATGAATTAAAGAGGAATGCAG +candidate_22281771 pos=16:13160190-13160230 -53.506 -326.500 -0.880 45.43 AAAACAAAGCGAACAGAAATGTGCAGGTACTTTTGCGGCG +candidate_22281774 pos=16:49153622-49153662 -52.541 -321.100 -0.866 45.11 AAAACAAAGCGAACCAAAAGCAGTGCTTGGATGGTGAGAC +candidate_22283034 pos=16:49153168-49153208 -47.976 -311.200 -0.849 40.62 AAAACAAAGCTACAGAGTGAGAGTGGTAAGAAGATGTGTT +candidate_22283133 pos=16:55104509-55104549 -53.175 -314.600 -0.843 47.24 AAAACAAAGCTACCTCCCTCACAGACATGCCCACAGGCTA +candidate_22285544 pos=16:43157945-43157985 -50.593 -313.600 -0.848 43.77 AAAACAAAGCTGCCACAGCAATGTTAGTATCAGGAGACCT +candidate_22285837 pos=16:47151351-47151391 -48.298 -314.500 -0.858 40.43 AAAACAAAGCTGGCAAACAATTTAGTTTGTAAAGTGGGTG +candidate_22289175 pos=16:15136403-15136443 -48.584 -308.800 -0.839 41.87 AAAACAAAGGAAACCTGAAGTGTCCCTAGACATGACCTAA +candidate_22291090 pos=16:31132942-31132982 -50.223 -311.400 -0.842 43.66 AAAACAAAGGAAGGAAGAAAGGAAAGAAAGGAGCGAGGGA +candidate_22292624 pos=16:54121626-54121666 -48.300 -311.400 -0.848 41.10 AAAACAAAGGACAGCAATAGGTGAAACTAGGTCACTAAGG +candidate_22292665 pos=16:8111403-8111443 -54.637 -322.700 -0.864 47.69 AAAACAAAGGACAGGCTGCAACCAGCAACTCTGCTTGCTG +candidate_22293865 pos=16:55185288-55185328 -45.749 -305.500 -0.837 38.56 AAAACAAAGGAGACCTACACTATACCATGCTTATAGATCA +candidate_22294429 pos=16:31104483-31104523 -50.382 -311.900 -0.843 43.78 AAAACAAAGGAGCTAATTAAGCCAATGAGCAGCCTCCTCT +candidate_22294609 pos=16:73178356-73178396 -49.000 -307.200 -0.833 42.77 AAAACAAAGGAGGAGAAGAAAAGGAAGAGGAGAAGGAGGA +candidate_22297174 pos=16:60175876-60175916 -48.286 -311.200 -0.848 40.92 AAAACAAAGGCAAGCAGGGATGTTTGTTCTAATTAAGCAT +candidate_22297925 pos=16:46186219-46186259 -52.857 -314.500 -0.844 46.74 AAAACAAAGGCAGAGAGTCCAGATTTGCCTGGCCCAAAGA +candidate_22298648 pos=16:24187087-24187127 -49.062 -313.000 -0.851 41.82 AAAACAAAGGCATCCTGGCCTGTTAGAAACTAAGTTTCAG +candidate_22298997 pos=16:26100961-26101001 -49.535 -313.100 -0.850 42.30 AAAACAAAGGCCAAATCTCACAAAGCACCAAGTCAAGAAT +candidate_22299683 pos=16:10168337-10168377 -47.932 -307.900 -0.838 41.08 AAAACAAAGGCCTAATCCATCAAAGTTCATAGTTCTGGGA +candidate_22300372 pos=16:11141090-11141130 -50.850 -316.400 -0.856 43.74 AAAACAAAGGCTAGAGAGATGGCTCAGCAGTTAAGAGCAC +candidate_22300595 pos=16:42103309-42103349 -48.658 -311.200 -0.847 41.49 AAAACAAAGGCTCACTTTCTATAGCACCAACACTTGGATT +candidate_22300923 pos=16:97165790-97165830 -53.878 -315.800 -0.844 47.94 AAAACAAAGGCTGCAGACCATCTCTGACCTGCCAAACCCT +candidate_22300972 pos=16:31194128-31194168 -51.191 -316.400 -0.855 44.18 AAAACAAAGGCTGCTTGACCACAGGCACTACAATACTACC +candidate_22302074 pos=16:5109235-5109275 -52.277 -312.400 -0.839 46.35 AAAACAAAGGGAACTGGGGTTGAAGAGATGGCTCAGTGGT +candidate_22302160 pos=16:90124634-90124674 -54.655 -318.500 -0.851 48.46 AAAACAAAGGGAAGCCCAGCAGCAAGGCAGCTGCATCTAA +candidate_22302865 pos=16:13127182-13127222 -56.248 -314.200 -0.832 51.89 AAAACAAAGGGAGGGAGGAGGGGAGCGGAGAGGAGGGGAG +candidate_22305091 pos=16:15186089-15186129 -54.771 -316.600 -0.844 49.16 AAAACAAAGGGGTGGGAAACCCATCTCCCACCAGAGCTCG +candidate_22305276 pos=16:12138525-12138565 -48.408 -313.400 -0.854 40.73 AAAACAAAGGGTACACAAAGTAAATTGTGTGTGTGTGTGT +candidate_22306763 pos=16:54145774-54145814 -49.800 -313.800 -0.851 42.73 AAAACAAAGGTAGCAAATTCACCCAAGAGGAGTAGACAGC +candidate_22306792 pos=16:32126901-32126941 -50.691 -316.800 -0.858 43.38 AAAACAAAGGTAGCCTGCTCACCAACATTGGAAAATCGAG +candidate_22307094 pos=16:13176077-13176117 -46.777 -306.900 -0.839 39.66 AAAACAAAGGTATGATCACACTATCCCAAGAAGGTTTTCT +candidate_22307991 pos=16:34107515-34107555 -48.737 -310.100 -0.843 41.86 AAAACAAAGGTCTTCTCGGTGTATATCCTGTCCTTTTGGA +candidate_22308271 pos=16:93102076-93102116 -54.369 -318.400 -0.851 48.11 AAAACAAAGGTGAGCAGGCTAATTCGGTGCCTGGAGCCAA +candidate_22308782 pos=16:39186247-39186287 -50.663 -315.500 -0.854 43.55 AAAACAAAGGTGGTAAATGCTGGTGAAGGTGTGGCTAAAC +candidate_22309502 pos=16:18197471-18197511 -52.018 -311.800 -0.838 46.22 AAAACAAAGGTTCCTCCTTTCAGATCCCCACAGGGTCTCC +candidate_22309582 pos=16:77139315-77139355 -48.553 -308.800 -0.839 41.83 AAAACAAAGGTTCTTCTAAGTGGTAGTGGGACAGAAGGAA +candidate_22311802 pos=16:72102985-72103025 -46.505 -307.000 -0.840 39.29 AAAACAAAGTAAATGTCATAAGTTCTCCTCCTCTTGTCCT +candidate_22317162 pos=16:93153957-93153997 -48.733 -310.500 -0.844 41.69 AAAACAAAGTATGAAGGAGAAATGTTGGTGAGGGTTGCAT +candidate_22322429 pos=16:10191280-10191320 -47.889 -310.400 -0.846 40.54 AAAACAAAGTCTCTGCTGGGCTTTCTTGAAATTTCCTTTA +candidate_22322736 pos=16:70183950-70183990 -50.046 -310.200 -0.839 43.63 AAAACAAAGTCTGGGGTTTGGCACTACCACATCCTATTCT +candidate_22324337 pos=16:86170469-86170509 -46.394 -305.400 -0.835 39.39 AAAACAAAGTGACTAGGATAGGGAAGGTTGGAACTTTTAT +candidate_22325033 pos=16:18199206-18199246 -53.316 -314.400 -0.842 47.46 AAAACAAAGTGATGCTGAGGGCCCATGAGGAGGCTACAGT +candidate_22325960 pos=16:88141120-88141160 -52.805 -318.200 -0.856 45.93 AAAACAAAGTGCTTCATCAAATGCAGGCACCGGCTGGATA +candidate_22328152 pos=16:76113352-76113392 -55.261 -323.200 -0.864 48.40 AAAACAAAGTGTGGGGAGCCGCGCGGGTAATAACAAAGCA +candidate_22331015 pos=16:26162478-26162518 -52.987 -312.800 -0.838 47.21 AAAACAAAGTTCCAAGGGGCCAATCCCTAGGCCAAAAGCA +candidate_22334198 pos=16:75129428-75129468 -47.914 -312.100 -0.852 40.31 AAAACAAAGTTTGAGATTAAGCTCAAACCTTGCAGAGCTA +candidate_22334282 pos=16:33149008-33149048 -46.873 -311.400 -0.853 39.11 AAAACAAAGTTTGCCACTCTTGGCATATCTAAGACTTTAG +candidate_22337724 pos=16:96115203-96115243 -50.103 -317.700 -0.863 42.39 AAAACAAATAAAACACACATCTCGAAACTCCAATGGCGGG +candidate_22342579 pos=16:44128322-44128362 -52.685 -314.700 -0.845 46.48 AAAACAAATAAACCTATGAGCTGGAGCAAGTGGGGCCGGA +candidate_22344144 pos=16:15131264-15131304 -46.571 -307.500 -0.841 39.30 AAAACAAATAAATAAAACCAACTCCTGAATCCCCTTCCTG +candidate_22348223 pos=16:60138660-60138700 -47.141 -309.900 -0.847 39.67 AAAACAAATAACAGTACATGCTGGCAAAGAGGTAGAGTAA +candidate_22349222 pos=16:51186899-51186939 -47.665 -310.300 -0.847 40.27 AAAACAAATAACCGCATTAAAATATGGGGCTCAGAGCTAA +candidate_22349836 pos=16:39185937-39185977 -51.805 -317.200 -0.856 44.93 AAAACAAATAACTGAGCAGAGAGGAAGCCCACGGAGTGAG +candidate_22350221 pos=16:76188356-76188396 -48.247 -309.300 -0.842 41.36 AAAACAAATAAGAAACTCACAAAGAGGAAGGAAGGGAGGG +candidate_22354848 pos=16:6143948-6143988 -51.661 -313.800 -0.845 45.11 AAAACAAATAATGGGAAATGCTGGCAAGGGCTCAGGCAAA +candidate_22355635 pos=16:60105525-60105565 -47.669 -311.700 -0.851 40.06 AAAACAAATAATTGGTTTTGAAGGCTCAGCCCTAAACATG +candidate_22356305 pos=16:88124318-88124358 -48.770 -313.700 -0.854 41.24 AAAACAAATACAAAACAAACCACTCTCACCCCAAGAAAGC +candidate_22357832 pos=16:20117628-20117668 -48.549 -313.200 -0.853 41.04 AAAACAAATACACAGTGTGCTTGTGGGATTAAAATGTCCC +candidate_22358340 pos=16:75187595-75187635 -47.864 -314.500 -0.860 39.99 AAAACAAATACAGACTCTTGTAGCACAGCAGTAGAAACAG +candidate_22359397 pos=16:72145410-72145450 -48.554 -309.700 -0.842 41.59 AAAACAAATACATGAATAAGTGGGTGGGGTGACACAATGT +candidate_22361207 pos=16:6135546-6135586 -49.583 -313.800 -0.852 42.35 AAAACAAATACGAGATCAGCCTGTTGGTACACTGCCAATA +candidate_22363266 pos=16:84123068-84123108 -46.816 -307.900 -0.842 39.55 AAAACAAATACTTTCTACAGTGAGGAAAATCCACAGAGGT +candidate_22363675 pos=16:54122567-54122607 -47.182 -308.700 -0.843 40.00 AAAACAAATAGAAACAAACCCATCCAAGAGGAGTAGAAGG +candidate_22366619 pos=16:36101464-36101504 -51.151 -312.700 -0.843 44.64 AAAACAAATAGCCCCAAGAAGGAATGTGCAAAAGGCCTGA +candidate_22369611 pos=16:14186124-14186164 -50.927 -313.500 -0.847 44.32 AAAACAAATAGTTTGCCCTGGTAAGAACCTGGTGTGGGTC +candidate_22373867 pos=16:93179825-93179865 -50.608 -316.500 -0.857 43.32 AAAACAAATATCATTGCCTTGTAGGGCAGCTTCAGGTTCG +candidate_22374476 pos=16:33181585-33181625 -51.426 -313.100 -0.844 45.03 AAAACAAATATCTAGCTGGGCCTGGTGATGCAGGCTGTAA +candidate_22375839 pos=16:6136459-6136499 -47.583 -311.800 -0.852 39.94 AAAACAAATATGCTCCCAAATGGCTTGTGTGTTTATTACC +candidate_22383821 pos=16:40125692-40125732 -52.753 -318.800 -0.858 45.76 AAAACAAATCAAGCAGAAAGCCCATGCGGATAAGAGCGGT +candidate_22384493 pos=16:53191793-53191833 -48.665 -311.300 -0.847 41.48 AAAACAAATCAATCTGACATTAGGCAGTGTTCTGGGTTGA +candidate_22385414 pos=16:76107708-76107748 -48.293 -312.200 -0.851 40.87 AAAACAAATCACATCGTATCACATCTCTCTGCCTAAACCA +candidate_22385976 pos=16:88127352-88127392 -49.873 -314.400 -0.853 42.73 AAAACAAATCACTCACTCCATCCTAGAAGAGCAAACTGCC +candidate_22388274 pos=16:41173653-41173693 -48.488 -314.100 -0.856 40.83 AAAACAAATCATAACCAGCTTTTCACAGGTTCAGAAGCTC +candidate_22389140 pos=16:90101042-90101082 -49.955 -312.900 -0.848 42.97 AAAACAAATCATGAGCCCACCTTTGCAGTGTTACCTTACA +candidate_22391255 pos=16:13108590-13108630 -52.435 -316.900 -0.853 45.68 AAAACAAATCCACTTGCAGCGGCTGATGTGAAGGGAGATT +candidate_22392409 pos=16:45124376-45124416 -49.820 -312.300 -0.846 42.89 AAAACAAATCCCACTTTGGTGGCACATATGTGTCATCTCA +candidate_22393590 pos=16:83170773-83170813 -47.311 -306.100 -0.834 40.66 AAAACAAATCCTACCTCCAGAGAAAGAGAGAGAGAGAGAT +candidate_22399452 pos=16:86120245-86120285 -48.937 -317.000 -0.864 40.95 AAAACAAATCTGATCTGCATTTTGATGCTGTACCGCTAAC +candidate_22402937 pos=16:87187631-87187671 -51.875 -314.200 -0.846 45.42 AAAACAAATCTTTGTGAGTTCAAGGCCTGCCCACTCTCCA +candidate_22404908 pos=16:52134574-52134614 -52.532 -323.200 -0.873 44.75 AAAACAAATGAAAGCCCGAGCGAACTTGCCTCACGTAATC +candidate_22406075 pos=16:60185472-60185512 -46.220 -308.700 -0.846 38.68 AAAACAAATGAACAATGATCTCTCCTATATGGTCACAAGG +candidate_22406780 pos=16:94123970-94124010 -53.990 -318.300 -0.852 47.64 AAAACAAATGAAGAAATGCCCGGCCTTGGGGACAGAAGCC +candidate_22409580 pos=16:15123716-15123756 -46.769 -310.800 -0.851 39.06 AAAACAAATGACAGTTCATGTTGGCAATCATAGAGGATAG +candidate_22409669 pos=16:64127159-64127199 -46.888 -312.500 -0.856 38.96 AAAACAAATGACATCTCATATTGGTGAGGACGTGAAATAC +candidate_22409934 pos=16:39186056-39186096 -48.754 -309.900 -0.842 41.82 AAAACAAATGACCCAATTAACAAATGGGCTATGGAGCTGA +candidate_22410844 pos=16:71175515-71175555 -47.423 -308.600 -0.842 40.22 AAAACAAATGACTTTACTGGCCCTGCCTACTTTTCTTATT +candidate_22411499 pos=16:14145787-14145827 -49.441 -312.200 -0.847 42.43 AAAACAAATGAGATAAGAGAGAGGCTCAAAAGGCTGCAGT +candidate_22412801 pos=16:66173972-66174012 -48.286 -311.200 -0.848 40.92 AAAACAAATGAGTTAAGCCATAAATGTCAGGCAAGCCTTT +candidate_22414716 pos=16:6125809-6125849 -52.316 -314.300 -0.845 45.97 AAAACAAATGATTGGCATGTTCAGTGGAGGGCCTGTTGGT +candidate_22416928 pos=16:55125756-55125796 -47.273 -311.800 -0.853 39.55 AAAACAAATGCATCAATCTAATGCTAGAAAGGAATCTGGC +candidate_22420280 pos=16:94159288-94159328 -50.595 -312.300 -0.844 43.99 AAAACAAATGCTTCCTCCCTTAAGTTGCACAGCCTAGGAA +candidate_22422286 pos=16:57100406-57100446 -47.088 -307.800 -0.841 39.92 AAAACAAATGGAGTCTCAAGGTACCCATAAATTGTGTCTT +candidate_22423546 pos=16:41192808-41192848 -47.830 -309.100 -0.842 40.66 AAAACAAATGGCCCAATTTGTCATTGCTATACCTCATCAT +candidate_22427785 pos=16:65176726-65176766 -48.207 -311.400 -0.849 40.98 AAAACAAATGTAGACCTGAGAACTTCATGTGAGAGATGGG +candidate_22431224 pos=16:56124062-56124102 -49.621 -313.900 -0.852 42.29 AAAACAAATGTGCTTTAATGGCTAGTGTGACTTTTGCCCA +candidate_22431606 pos=16:11140939-11140979 -50.239 -316.100 -0.857 42.92 AAAACAAATGTGGTGCACATCTTTACTCCAAGTACTCCGG +candidate_22431610 pos=16:13150836-13150876 -52.935 -316.500 -0.850 46.59 AAAACAAATGTGGTGGCCATCAGCCCTGTCCTCAGTAGTC +candidate_22432810 pos=16:10143517-10143557 -46.285 -308.300 -0.845 38.82 AAAACAAATGTTATCAGTCTGAAGGATAACATCCCTTTCC +candidate_22439916 pos=16:90141470-90141510 -49.361 -310.600 -0.842 42.68 AAAACAAATTACTGGGGAAGAGCCAGGAGAATCATCCAAG +candidate_22442846 pos=16:73115936-73115976 -48.184 -308.400 -0.839 41.32 AAAACAAATTATCTGGGTTTGGAGAGATGGTTCTGTGGTT +candidate_22445629 pos=16:16131714-16131754 -50.331 -314.300 -0.851 43.22 AAAACAAATTCACACATTGTCTTTCCACGAATCCAGCCCT +candidate_22446077 pos=16:44104803-44104843 -48.698 -314.000 -0.855 41.10 AAAACAAATTCAGAGACTGACACGGTTCATGTCTGAGAAA +candidate_22448911 pos=16:84178196-84178236 -49.099 -316.200 -0.861 41.37 AAAACAAATTCTACTGTCCTACTCACACACACACACACAC +candidate_22451921 pos=16:13142802-13142842 -51.321 -315.600 -0.852 44.47 AAAACAAATTGAGGCAGGGAGCCACCGAATGACTTATTCC +candidate_22454116 pos=16:6181586-6181626 -53.275 -315.600 -0.846 47.19 AAAACAAATTGGGCTACTGGGATGGCTCAGTGGGAAAGGC +candidate_22455527 pos=16:12145387-12145427 -49.831 -313.800 -0.851 42.77 AAAACAAATTGTGTCAGAGTATCTGGCTAAGGGGTTCTGC +candidate_22461655 pos=16:76185390-76185430 -52.210 -315.000 -0.847 45.82 AAAACAAATTTCTGGGGTGACACCTGCCTTCTTCCCTGTG +candidate_22462363 pos=16:38165907-38165947 -48.017 -311.800 -0.850 40.48 AAAACAAATTTGAGGTGAATCCTGTTTTACAGTAGCAGCA +candidate_22478627 pos=16:67150981-67151021 -47.647 -314.500 -0.860 39.62 AAAACAACAAAACAAGTAAACACTAGCATTCACTCACTGG +candidate_22481196 pos=16:97166331-97166371 -47.904 -311.500 -0.850 40.49 AAAACAACAAAAGACATACATACACTCCCATTTCCCACAG +candidate_22482990 pos=16:34149365-34149405 -47.116 -309.100 -0.845 39.75 AAAACAACAAAATATCATTGTCACCTCCTGCTCTAGATGT +candidate_22483304 pos=16:14130104-14130144 -50.640 -311.600 -0.841 44.16 AAAACAACAAAATCCCCACAAAGCACTCTAGGGTGATGGT +candidate_22483415 pos=16:96191713-96191753 -47.606 -309.900 -0.846 40.25 AAAACAACAAAATCTTAAAGCACTCATAGTGAGGTGGGTT +candidate_22486781 pos=16:28140215-28140255 -50.523 -312.600 -0.845 43.75 AAAACAACAAACAATCAAAGCCCATCCCTCAACCAACCAA +candidate_22487831 pos=16:20136212-20136252 -46.984 -307.200 -0.839 39.87 AAAACAACAAACCACTAAGGAAATTAGTGTTAGGGGTTCT +candidate_22488479 pos=16:4169917-4169957 -48.774 -315.100 -0.859 41.03 AAAACAACAAACTACTTTCACCAGCATGTCATCCACTTTG +candidate_22488840 pos=16:40123532-40123572 -48.277 -313.300 -0.855 40.58 AAAACAACAAACTTCGCTTAGGTGTCCTAAGCAAATGATT +candidate_22489854 pos=16:15135210-15135250 -48.073 -307.700 -0.837 41.29 AAAACAACAAAGAGGGCATATTCTGAGGAGATTTGGGAAT +candidate_22490642 pos=16:96113584-96113624 -53.503 -321.100 -0.863 46.43 AAAACAACAAAGCTTCATCCAGCATCCACAGCACCAGCAC +candidate_22491482 pos=16:97160493-97160533 -51.489 -319.800 -0.865 43.90 AAAACAACAAAGTGCTGATCAAAAGCAGAAACACGGGGTC +candidate_22494369 pos=16:15155435-15155475 -48.597 -312.100 -0.850 41.17 AAAACAACAAATTCTGCCATGCTTAGGGTTACAAATTGCT +candidate_22501160 pos=16:45181676-45181716 -48.655 -312.500 -0.851 41.18 AAAACAACAACAAAACCCACACAATGGATGTGATGAGTTT +candidate_22510637 pos=16:90188453-90188493 -47.184 -312.300 -0.855 39.36 AAAACAACAACAACAAACTCAGCTAGCTCCCATTAATAAG +candidate_22513714 pos=16:92173690-92173730 -52.779 -315.600 -0.847 46.34 AAAACAACAACAACAACAAAACCCCAAGTCCCCAGCACCA +candidate_22516171 pos=16:94158568-94158608 -48.360 -313.600 -0.855 40.74 AAAACAACAACAACAACAACAAAATACTGGTCCTCTCCTC +candidate_22518786 pos=16:94100674-94100714 -49.844 -318.000 -0.865 41.92 AAAACAACAACAACAACAACAACAACCATGTTCTGCATCC +candidate_22518902 pos=16:75105564-75105604 -48.158 -315.600 -0.862 40.09 AAAACAACAACAACAACAACAACAATCTCAGTGCATATCC +candidate_22519056 pos=16:94128515-94128555 -50.305 -316.600 -0.859 42.82 AAAACAACAACAACAACAACAACATCATTACTGTGGGCCC +candidate_22519488 pos=16:80166974-80167014 -48.814 -313.000 -0.852 41.41 AAAACAACAACAACAACAACACCTCTGTGATTACTGGAGA +candidate_22519521 pos=16:32145524-32145564 -49.956 -314.700 -0.854 42.58 AAAACAACAACAACAACAACAGAAAGAAACTGGGCATGGT +candidate_22519965 pos=16:96109738-96109778 -48.826 -315.400 -0.859 41.05 AAAACAACAACAACAACAAGAAGCTACTGATTATGGTGGC +candidate_22520899 pos=16:38131343-38131383 -51.168 -318.300 -0.861 43.74 AAAACAACAACAACAACCAGTCCAGTGCAGAGACCAAAAC +candidate_22522157 pos=16:6119212-6119252 -48.439 -313.400 -0.854 40.77 AAAACAACAACAACACCTGTTGTAAATAGACACAAGGCAA +candidate_22522176 pos=16:75109734-75109774 -49.306 -316.500 -0.862 41.48 AAAACAACAACAACACTCCAAAACAAACTGGAGAAGCAAG +candidate_22523023 pos=16:35115313-35115353 -48.790 -313.100 -0.852 41.26 AAAACAACAACAACCAAACCTACAAGAACAACAAAGGCAT +candidate_22525042 pos=16:9111319-9111359 -52.976 -322.000 -0.867 45.40 AAAACAACAACAATAACAGCAACAGCAGCAGCAGCAGCAA +candidate_22526849 pos=16:12172836-12172876 -52.852 -317.100 -0.852 46.28 AAAACAACAACAGACACACACAGCTGTGGTAGGGTAGCCA +candidate_22528041 pos=16:23191959-23191999 -53.508 -319.400 -0.857 46.72 AAAACAACAACAGTACATTCCCTGCCGTGGCCGATGAACT +candidate_22528622 pos=16:17193799-17193839 -54.549 -319.200 -0.853 48.30 AAAACAACAACATCAGCACTGGCTGCTCTTCCAGGGGACC +candidate_22530271 pos=16:42145836-42145876 -46.971 -307.900 -0.841 39.75 AAAACAACAACCATAAACTACCCTAGACATGGCTTTAAGT +candidate_22530532 pos=16:8117580-8117620 -49.945 -314.100 -0.852 42.87 AAAACAACAACCCACTTTGGGTCTATCTCTGTCAATGCTC +candidate_22530904 pos=16:58147083-58147123 -53.263 -319.000 -0.857 46.58 AAAACAACAACCGTAAGAAGGAGGCTGGAGGCTGATGCTC +candidate_22532719 pos=16:70126324-70126364 -51.199 -318.300 -0.861 43.67 AAAACAACAACTGGCAACAAACAAACGCTTGAGAGGATGT +candidate_22534710 pos=16:91136208-91136248 -46.426 -307.200 -0.841 39.16 AAAACAACAAGACTATAGGGGACATCTCATTCAAACACTA +candidate_22535706 pos=16:85174980-85175020 -53.894 -318.700 -0.854 47.34 AAAACAACAAGCAGTTTCTGCCACTGCCCAGTTCCTGCTT +candidate_22536165 pos=16:55102898-55102938 -52.160 -317.400 -0.855 45.24 AAAACAACAAGCTGTTCACATTTCTCTCCTGGGCGCTACT +candidate_22540553 pos=16:12181858-12181898 -48.458 -311.000 -0.847 41.37 AAAACAACAATAGTATGCTCTAACCAACCCATGACTTCCC +candidate_22540990 pos=16:41118273-41118313 -46.667 -307.100 -0.840 39.49 AAAACAACAATATCAACTAACTGGACACCTCAGGGATTAA +candidate_22542201 pos=16:38187412-38187452 -52.404 -316.900 -0.853 45.74 AAAACAACAATCTAGCCAGCTGGCCTGAGAAAAGTGGGTG +candidate_22543874 pos=16:63183017-63183057 -49.146 -314.200 -0.855 41.64 AAAACAACAATGTTGAAAGAAGCCAATATTTGCAGGGGTG +candidate_22544870 pos=16:53130099-53130139 -49.510 -312.300 -0.847 42.60 AAAACAACAATTTCAACTAACCAGACTCCCTGTCCCAGAG +candidate_22547933 pos=16:27108597-27108637 -54.031 -312.200 -0.832 49.00 AAAACAACACAAGTGGGGAGGGAGGGAGGGATTTGGGAGG +candidate_22548148 pos=16:60142430-60142470 -49.897 -314.300 -0.853 42.67 AAAACAACACAATCAGGTCTGTCACAGCAACACTCCATAA +candidate_22548235 pos=16:12159703-12159743 -47.821 -311.200 -0.849 40.33 AAAACAACACAATGAGACAGAGAAGCCTGGATTTTAACAA +candidate_22548621 pos=16:12161010-12161050 -47.124 -311.000 -0.851 39.48 AAAACAACACACAACTCCACAATACAAGAACTACACTAGA +candidate_22550604 pos=16:61104641-61104681 -50.454 -317.400 -0.861 42.98 AAAACAACACAGAGATACACACACATGCATGTACCCACAC +candidate_22551772 pos=16:62190688-62190728 -50.358 -312.900 -0.846 43.59 AAAACAACACAGTCAGGTCTGTGACAGCAATACCCCATTA +candidate_22553460 pos=16:30124149-30124189 -52.152 -316.400 -0.852 45.40 AAAACAACACATTTCAGGCTGTGTCTTGCCCAGAGTGACT +candidate_22554080 pos=16:22145308-22145348 -53.100 -316.200 -0.848 46.76 AAAACAACACCAAGGTCATGGAAGGCAGCTGGTGACATCA +candidate_22556001 pos=16:97101262-97101302 -50.796 -319.200 -0.865 43.13 AAAACAACACCGTGACACTCTTGCCTCACATTCTACAAAC +candidate_22556004 pos=16:91190766-91190806 -51.737 -318.900 -0.861 44.46 AAAACAACACCGTGGCCCAGCTAATTAGAACACACACTTC +candidate_22556430 pos=16:4139209-4139249 -51.436 -317.700 -0.859 44.17 AAAACAACACCTGCTCTAGACTGCAGCAACACAAACTGAA +candidate_22557039 pos=16:7141448-7141488 -53.319 -324.700 -0.875 45.39 AAAACAACACGCGGCTCCGTGAACACAATTGCATTGAAAA +candidate_22559472 pos=16:47180265-47180305 -49.963 -314.800 -0.854 42.78 AAAACAACACTGAGATTCCACCTCACAACAGTCAGAATGG +candidate_22559612 pos=16:77145310-77145350 -48.207 -311.400 -0.849 40.98 AAAACAACACTGAGATTCCATCTTAGACCTGTCAGAATGG +candidate_22560242 pos=16:37102570-37102610 -45.875 -308.200 -0.846 38.32 AAAACAACACTGGGGAAAAGAGTCTCATTATTATACTCTG +candidate_22560764 pos=16:57137711-57137751 -47.876 -311.100 -0.849 40.41 AAAACAACACTTAGCAGGTTTCATTGACATAGGCTTTCAT +candidate_22562354 pos=16:72178247-72178287 -48.791 -314.000 -0.855 41.12 AAAACAACAGAAAATGAGTGAGTTGTTTGAAGGCAGCATT +candidate_22563296 pos=16:87145435-87145475 -51.121 -314.500 -0.849 44.30 AAAACAACAGAAAGCCCACATACACATGGAAGCTGACCAA +candidate_22563325 pos=16:15143614-15143654 -50.229 -315.500 -0.855 42.90 AAAACAACAGAAAGCCCACATACACGAGGAAACTGAACAA diff --git a/test_data/test_db/chr16.bin b/test_data/test_db/chr16.bin new file mode 100644 index 0000000000000000000000000000000000000000..4a510b146f9c90e27107a8414665b6e6cf4e0567 GIT binary patch literal 49500 zcmaK#34GMW`Tut}S=5M1F;-Ez54p+i<^;mApaI2$7!eT^6;p4acvSE}E%j#=(Na;u zEohZ0^`IIRL5WsH@UD?swb80osPzJ?MgRZz=b7*9e!sDnC@ZTdGl*lh42xX?6KwF(q(1krI`|gc)s`W*ym6HVdAg`5g7=hM)GZ95>quJM>Z_lW)PQdIC@jV zwq;G{e{}N3;6LCL1JNgY*~j$}L6ufkmR3|5#1kuq$3B2^f|5W4fp!5grg)3W z?ZcW_>`8-IaL_0$YN-jTu~U!izmI=^SXfY*l5|Oh6V#VGkB%L(>u3)F69`;t##$wN ziOi|nF(P&EfzjS|$an;`q-ouA6E@b@S7pbvYz_-5ovNs+Dsx8rtN(X&Y%SykHHv1X zUOJAl1;r03L}0ukqu~-%%eNCZ#hzT&)NbNQ8&^*sk*#|_85R_}z%QKZmHpzF*c8Y^ zNEda;$841TqYg7Fvo9=Hx<~-={3W9i)Z(Tc<0o#Mzo~cjl*jf8L!?vbl1#>NG2)(M zVrM}f0tS#1hHBgZ;j{o##t2+EUA)}`U5r~|eo@=lGyDDP&xHk*s>qa~3{&?_1;@r7 zhCBoarU0>mu0fM{oMQBWbWsEs#RKa$H7r`zbnl^)HdYr6&c3iR8HPxwOUuivoY5|z z`Nu;LH1}hz12wXyzP`=y{eb8^_ry)H5zEalW>gPr4UxiT%QG3{;<6);jje=oTsY-Q zFp>@SYhjVb6+i^>;jlOm^Rvfps{e3V)BAUxys>F#Iy>{MS2l!7Itr;E>j zF(uaFvOI*eY%QBhSkR#Raz)d3oz#uCV+%)(-&Eggskz>mmWph{qK_jGnR1-Z3F_Nr zQ)1nghaga@I!^C%%}P!dM(}hWX}_;K0*hK=T-4Y1$*wr~r6@#2S!KpW+8gee5_<^p zf|4-sH^LG&Men5$ePLu4;Jq%suNwx$VuP5!sdM(Yd5=UP%1SFsT>#m#aZ2nfC=a2Q zWkrILE=*41O7CsdD?m_huRg}OP>fnVy%dNO!w{*eR9R(-8@v0yI3-pKc?gYd3blHX z|4CpV0tOdgii@^Dto}?EwY2G~b0%+W?9?rL)j5BSKvbqGN;3|kl;$UgA^vN_#ut__ zYNYq>FKQVtfRO8DG8I37sK}I-RJinD+TW+dZiMoE=bd?*LagODw9ikBOI(Qy1@jG^ zhi;0^ajv&|ddF;P&v9YD!0{?eN?aH`o91r`LHv)_WdozUU$nWphVf#F4N3Di^=l20 zs;nT?I(1JOaY}41l;c7MD@{uwayJW5`4UK%=_U}5m$1se5+X6N0uZ$wb! zf+c}pjQRI@vFT6%fhc4_>OAd=6O0R3IMT2ARPF8~PT16N(j85)*wl@a=a*%t4OtL@ zNL5vo1q18GJA zzv%bO?AY;;hd}1$$ZAy1XFr?)h#gWjr|u(foP?lOHXSl(3c47UT{!BD2t-+?q%7l- zoN;f@j$H%=5Z11u9t=2lkbuODlUR<6wa;R-ZCx;Lnbj}bylPAsB2`&l>b-l~PcM(% z2zf3f59LlmG3kS+pCF1Wn_qm6@15RmC=d-zicO83I%j*fxjL*1(t}Dut&QEE)LtHI ze|#9iL~p^uOqaIJ=S&@f_;T1jNbA6D6G(EFTiQIkcxd+gkA{S~z`4sj#Gb#oJXQjE zF648lS|(-hq+^K*wLqilyhSY;J!})+(NtY@A~|ihY@4eO2xlOS-DM@EP8SF6aYJl4 z6w-wxC7r8Ly@tOnn9n0^KL4ZRfmqq}@Rw6IHY_U3W~cTHbCD{qEH4i-^Tn^+5Nm=w z7jiWQ`RAe# zKi0Zj(FRuO;^O^Do5w9~+VgFo4RL#zt&Tu9!s9AqW4H3p;# z-e3ncmVqc6oLH4*e$mj>?>fy`duJz2+a9r~it#Ri04k-vH1(zE~4uYPWUr60zMBzy$CPDF!A?ZmQyE{%A z$y{%-r3bru_sBMO8W4r3swxix$WMANj#WXP3lluetKV`F4HV+Q@KCxSuEnHIc}$u4 zBD1I+<9lQu8+&79V9hX3O1o_E{;L4WQ>fJ57?||B{x>Mz4rQT?-xc#2kosfr+y~?}oMOd;X7!pg8nYhrP@#*EG@$RKI zOOkg_{b2g=(ELIHq_oNnN!QT)n*RdvUs^|YBh9;Ui&&fZScaq}#zp731AYKeQCU(R zWP{hy{2!taKh`=3qw0Jf)$YxsERRx7yJLJRd+CN#!(6a>kV>bVF5daaJ+U?)=LIFf zAP@PPdW{8}O5`rctHvM-VB@pHj3YnUOz~3G9@LMAV$3hL{SLhf3z-~QOeB! z3`BkXQMTlz^{A$u1GB@+I)z=2>13uXn22o|yC(J(qD-G!B%9_E(|`rY)$MPCyfN*x;(0= zxmWhOpDv1IASD&)%D}s)|8Y(1b|?qI8_7uFTw+pM$ZxPE8ylI6v`=kTFkjjvi>j~h z!Mr;a7F4RLq_n)mjolMBuZhipJcK!$B!topM+hhd$(beiN%6YphB9MqundHyqwKa9 z9|?28!d*#au);a8?9tc+C=a1d8y7S#8*=`EtTaaDRyd#EHJI_jL9DImsD-<*>yhA; zr7N6wcdUFgb~xlAWKML~WQ7*c2Oyy@anT!#dSPXLnPu+wZrLI4UKJKpnzd#yY}DIc z`)F+ctrCT9w=>YnbkA<{+)}T2zz%)WeMZA>7v)}M`Oo80fYo&{dZbWD6w!N z5DQ&Wx3aVyUeSRu}cpKK$iBBM_OY6gx4-#RbXdVhbS;VS2`Lr3V?T0tqit1_1dm zIO7Rca@gq67D;Vmd3OCp`$r&BnNlXL1~H-kbFnKS4`C{%G5NB!N!v8-*g;qd=B03P zWZR?6FSJ-Rqq+n^-4;mA*{FRvA*@91+UPr?0ya3pHc6t@20ZM zvb5=|@9LPs9NRki$GcNifnT)0;knpg$U`WwO7O0E3|E?P_N3r$11n76dPmzbi!^?E4}VfG^}sPCqAn%1bndw@+B;-Y7p2|%oBT3d4(>MqO9 zsQxyh?hMOzRnBPl+2{FK8RWT;E6a@J+xQ*~xDdkU{Bx@Zg1GAtb|+^pvc06{Rh@w7 z8-ZXi zNmW(GjTh~wJs%qkUSW1G5h<{X-ZcRau&@ z2!^DqPiT(a19=Ggti~-cDU?{0qUqqLWrHK&;+ZZ-+Kg2z|C!8y><2GrhlgSm$$wcY z@a}&!G{@R44nsIFS(KSCsx~XO7*%InNKntLILZQuhNStM24$;@hKDT*bE-(CoG$(e z!~s!=A8Q>3^SdzDJ~`g}Lf&0nRM{FLU0RvR1p60_H2=3egk)r9B#T1fGApwHv<+J> z`PZm7c|MVL%i<=N4VJWCZBDazJ>w6cOcqesf`A z)8Pb=B{p8vHulLbIH))(D7HU?W%*Uxn`19PYR4K=(B_Q|Nb0(L+k&EOYNSo=VS*Ve zQ~SFXTQFZ+b1?her9;E&W_5zR*&=O^Q{Rk@gK`k+Iw*1j=NYn9`H6FRaUns?JCG!Y zN%0+rPhiyRrC=VO6tk$7s;G2H&b>3=jJ*!!Ag~~LvV{-DJ;Y^=OKvE}rw31Mu4W43 zT(4CzG@!vt0M%!jf5P!7U6P4~qHt(saSxIlj5!Yz3XVYS(9F3hMtG<(P4 zmqfWJWlzk7!8z}J7`q$FLGXsoJFk|fqhn{qlA7DUkh<56QBJ$aj5d?$m_2aYi`5}@ zvl~`XS?L7z%|Abkb^SCCA*+%F5ilH*8!jX>*{p4mFzB&1h%WA05|o;BB+^Fns8aUS zg9?gIKL0S*{)-%h5F`@>gvQNIF(yn*LK8oJ5%sAfM=*tP7PYH)Pp0 zT-2SBWnf)m5XEbIWS{ABe>i|plT(qdaszAffsbMXAey#zG@zP0paT1;cFmv=8Y=hR zO+H94Ut(*6vDl#Ok!{;YyqmdRNl@N!Pvb|iSD+k(!i3o;3PIz70aRunNCwun!}o%V zs}DGt#iC_Rr?;EP>cMDgayEw{Fxc{vU>o=RT{~m9LLNe_s8O}*jL3{ushU2|m73I@ zak#AwYKx@4zAu^icM-oREiEe#mLIR_wJWv;@(?Hj6q=V)D0AW$^sJv28)dYeaqll` z$J%0%#%}G}U)a7NtZv3`5-GQ!o&I`PY!c)l)ILo^d`Ufe2S3=aeXc3YH2k7!-4V71 zqUq$AmcH3*pKJ(2Xyv~=$Ob=Y|8=bW{$J-H5Qdtwa8A<-?Vu~32-YS4-=mAi#*VY( z-|b(dvR}Mo=Bnx)@9$@uY*hd?;;WP;8ubKm)hBN3mM$7Qb;*vtVMlmsPh!q;QLs*X zRGWC4abXBqkK_Vhih(94EX(QLAZ7!xq4NmBpi2){Pw%D}6&6%FRZ>BeGC`G}+$Mes ziDJX;e`itcYl`E8p+GKb9Qh08 zzkiF1{}jh!N0c8+q-|(AXMG)Wy((pcVL_!T+2{#YILpTr$4`NB5b8F+1RR)y6QX3Z zmNR(Q>-ZP84#~{rdY$L?&Q92OpNOE?=1B(|JrnDS<8z=Kgj%x*C10~JD07l83M4mU zJ#HQaGxe_2q`Ih-Mbvm0LS>>Q!PLIt|BBi3-S;Wl$upU5+72&Q@#F>pA@&7$c#0!)XL#H&mBk})jtA}Au|t# zq<4RRKzxsTLlA+sZN#H-p`aENuJEoMF}DVCVf*6PxjTd~*C2&$o}&DAF`*DF&P398!J@%5QessFnJvbBZF(i|NFwIIN8nESX zvL|yD8^Ud1b(_&6ET>fl(zLT1yD-J!QIFLFxNx(i;*pv7P$=MnCQ*ahlv0%68b`cJ zdWcJ-9)UKt>|aCR!mUTO%<9a%J5u(e%}Fn);&Xw30*GKNl88(NrV(SsMX4ObkasC> zpoUZ9Ma!%n*}2=F3Uk3$QdK%A6YZep!w^5-y1{xbx|Xn)#5S%Vwr=Ux8iJJrLam!$ z%wLs>KLU9!q+#?y=nGU@B#0SU6uYz(A>Mzcr7lkNeKujpK zW6jFUuaecqD4)K|r3aJer&YW(JhXbC#GExw<6<(+|MG_r|E+aX2W=1Eo0lUVK8b;K zxfQ#rAb;jrw}f>;g?8E}|EJOX^%004Z5_v}%SGB9<4U21!*Gpe(#A=tYpWh2J8 zIP~N3@zIb;MiMfim=VcvWwBC&^q^Rq+e@mir&_+lG8^@(i-wT=M+(W5)24#W=vzM@ zAAbT0Amj;hZ2gdnnAR;YqIW67FHk&tlv_PeX1;Yx-)#4{7DX%y=dMaQi#oV%Z9EI* zAmj}43|@@`X+F@tIFv;xGw+;a^?-S|=6VW)1oeozskbW)3ds(ut&JZG~@L=tf-Bj0OcSg8p&M(!$;`3 z{7;-H>e{B8Y_?_A;WlH{8c20f@9bTRpN22VG^6 zTUDbbXPetP6cW!Nb&sR@iy{y|+PWf3&Z6F4t$Fui^9z-lRIM8khG37i zvZU0FdbhQl7T*X3T+rP>ILeq|#a5>DD&1oT$_AzG)SeRmLCrW;*`e}%$GLpdGBP#i!SVUe;@IS%8FE3 zupV_4&HpY05ou4prm!n(6-z*P*XwuP=uIkbkVVB}hh;BbusSR#4%0E4bb`8c%=Gwj zDA#2&1JkU+D#F)$-UKQim8%0O9!T+0u(?pwoT66k%m^2Z+~q-S^M*60$3KK}5OQoe zoW3oBz=8B2e)y9gSgFdk;w2?HEweh2{QoVYi!{0j)}vl(HzWQvQow{GdeL~Prz@Q_qV7z_^6{bk=d@x*>}au5=S`<6;**aWAaPF8~0 z11|bZt|FK>1PgbEP-osbtP9Qc%7fyiSrg~P?|?iPN4H^uil{H8pFMGM6aMJrUm4}NNlGNycz)7+gp zb7GVhi!zx$RI@xE78JUuqT0m5;DraykKYD)F05G^m+R@h`ze{pc3q7699?M5ykXlC zEBmP~>e1Tu(wR)EB;_Cmmd%e(fII|-W4*>BoQ^Rpl%w~?lAliA|Hbj72TN=sR@6L{ zU_LEkQDq!!3?^bbS1*lsymP6CFzFzA=X27$Be{sZ)jI7ug4Bl26Kz#ZyY{izXsYG+ z4*Lb(U0M+=%WvwrEdB|kPFhb{GMB;?&rSG1$T|2MzdJ#7z@o-gXh+Pgnb$UUr<6S& zhG0OVddUfD(12y}6Cn>l!!%{BW2pjB?}cgVHt$x+?$#|sttLlfcP7)R^$`zNn=@6x zrrTAQE{p#T@(@9H)u1yfje6P)5EwCC+2B~zo#;oc+LtSurVTljNINil|Ihys<)VtM zLua(tT)8a12J#SU*NKcb5)tZF7)R;$C%N9!K(wy%YF-sRBbMTDW{@6y(dNGR!F$}7 zhfw?0bNRF4xN`}BWmmZ>udl99j9O-OgSCx4IJpo#Q%vm=)$HaMkDPvA{9P#EB4EK- zp+(R%_DRBer>J1OaC>+n1nslCfU%UniAS~LUV1#dJllV|b z!CkNc-uqzQZsIToR(~Y0i%uPey*pKv(K4#bX_ws>9}VRpXi)tY2p>8gz~mE&OzMV- z*sk83j6P|polBa#Jw?J9Imb#Vdl>~%2Jyj*_r>>lDGVX|RO3>wTcQ^~K!M=6K-;mq zk6^Ax^`mmy`I|aYCi+f<3ldJwM;Jt}Hc!Nlfviov7=jHyV#h3%&rrQU@)NOzO)jTZ z7#!2moioL2!jYC!B#sZN4!ue#o}+yY>_IJ>2R*R2Z;$HA`0@Ws4g-=Z8-mh_=ivqLVA|Moe5d+knUjv<>Zr`*c^r=PUGs((CX=Zv%7lF ziALJ848xv5TzvNn@ug4zp>C_s@-q{RnspHoU_g95?OltHW68@^+^N`g^87Ety1=tD zOvMc1vJYQ~uY~ekNIW=#Bqkd|7Zz&y4+8U}-Ya*EVn|xrw5#`Ixah%7ap$lu2!mx* zX&A(9bz9;aArC?OQm%0HEgzJvn%rarg3w~oj3*AaBu5sd^WD#1(kaY^u2v`w4%6+p z^)K<_g?|Y_Sb$RdDj}1-A~}JG7njp&esTUsgKbM)ml8BAI+$SIBccmx`uwqi_m}=9 zzW1^`1kIuagrej|?4SX8HXP_XS1sS~y0JDS>9|c}r$NjwA|<u^VBxjIaIVe;k zodCsWelvPu(>U`Bl~30;mH_c)#G+US&ZJ!0d{mpi#%DqvLamv(x;K~+eyCwd{=rX; z7im~oGFrQn?ubY6+Af@~x+N?qmLDs~a*T`PX#N+iAq?gRtz)$AjF^n}+wZkD=FNV&3__81{-*vvfZ)(jDwx8I|K{WP zWsnz-Y?QXpuHuE%4ydXU6;n`$PdHZ`Jc+bCMSqk8tVR=NNh%K`mfS~H$XPx#-mo{fIJ+dvcO2g`AU9cn-RA?{QX@70>02j5cWxrvq(N1GSE*!6?z?eTqvn4qc zMSa%T9Euk+NPUM<5sPs2%M?CDvKIBm1g@)j+7>nQ8y_heaUqG3x#=RORIk{H~sU7^NoHhFuT8Aa8bQ^Vl_eCT2h$!Zcy= z2&teET18~`SMzi4-Rs7{1^XAu1{)UjXMV9PG9+;nhMgW0)Xx3)N^~sV%R`t~sOt)T z76^?C*_SCjw_Wx8C9J9uX?5yQ=aO30N2Sx;b3)C|{IlLm&1%|#nw#WitScJEFsL%sy8b+ zT_X@2WA*zNRsDJ=PJ{9g>a+FR*)N>PH!P@QV^a45AYyYyTY8{i-n^<;>rsz|;1UiM zo6&yKy*$yrN4bXxno_&;-5eZSvTuuw76zq@*qjPm;nddQ+L{j8R`=vk22xJpk3lTC zsXXyCq&BVZ=E_ol8pa=_4fAgR5tMhmL2n;v)5%-@Ihjh-{@FkO;+{wVNmrDV1S>gv z-BOWAK^{U@Bqf;l@u4t;MDuzdS_5(C^;BvyyZF%T)whm{K#(1oIn79M_E(>z_Fy@ps5`p}0ZI@@I{sjst$TsEAJd zyu06Z?830}FQd(5x^cNvmk1YPBRHOU?jP$C3m^}nfMKqUbfkAFS=tc~;>pjFG7nK| za+j;g*)hJ1dfMNF!yp&&Xr^@EoqTu?1jTIMY3_0kg(yCKhoWRG;5T*Qgmm(41M@CPrbXSxivdA9_$ zV|>T#S+|@Yfyk6nmE+2Oe)8!Fi7LoL*jR^#B_f#?EJ$8jNsyVDy4zs1wUx)R6zq2G zYa27{B~^z7rIQO)!I8lKqxt*85b^+IgRbF#pHcyiC725EE6zfMS82zf4KmB9iPSAoW`j+zCulb0>O~nXhOVV|%Px1DRbskQ1QM`l!lM5(F1% zZ~6NfiASLvgxZ(sNKDeU;-GBGj5qJy&vY4KE1cq@&*ZKYX}l6qHy1Nj21{Ny4xN@* z2L%ukKM>5~t^bO$0Y?%Y8u9_;u0tr<<@|+K4|a_2mOU&L*_}*hSda=PV!KCAOY}HA z2cc+cA_B@x36&rq$&KI9jd#8F1=@vKZWlyU7gcb3L#t(Z>?t^Pc=gQT z1g%$bA&dI6UKNBkm{;!Xmm?tVjOCXR=45OiI75Qx4FO|SOt!eCDz z-oKMwm=3P+SlQr^cmELKg5^!0aE?4@X5wrpfIt%_B{dJJ`?M|&q!B)oy8FRK;`f6| z)fU->LQOk6lH~j>Y*Fl}qj5K0?73oQq6G3>(2l&qf`<6u4f;S}0%L&ky14oP7PN14 zMH-Xm>loVV2n0@nGAz=*S9VdNsQjWl1Z`^Q#(30ez0>H;Z}7pZH(E9$tsG9XBu$FT zPKg9_U7JF!i9y^s_@cyC$a8^hs$m+F0f_~L6QpIZ`AA!Feg4LP*~OjNh3Oelw=U8M z<`=hSFG@TCc?iU=CJ_os*I*$v=%-v9x%puJ@R!^Orj{?d-`}`!gaCtWTtaE%p8fU7M(b0thu{qLS6hn&fY& z#>9rGa$Fqq9`kOF1Zv?H2#1- zye@XUqN^30>uufAgJWosQzRUY;A$4<7k_x~+C($tA=HdKPG9B`k`fS#CK8|5#k||N z%ZuVAC7fegx=Sy~b)yBtLdk)7Nm#j@_TR7R#sIfi zq&#ZfbAJj8N;UuGX=hP)e|JmbWynLQ`!<}KSR^F#Z7D@>bD8<->DuUV3wJus|I*i^ z!d#?C%<&9!y$kpKP2x5v2SMkN4Xs%$MCBIH!DX0&EuZ{fI*fZbKXl~{_4R4ydSjzp zlva=+7{o<1za#?jqpcGM-PO=C+T-?_z<9C3%6^)5R#DVC*a%=SUAeUx8BktOLr%>fLz`VZh?5JE8)i^9&h0YuJBk-1HbWi)bz4w1HS;27 zXj!q4_xY0xAK!J1saqLHby0>$`$R?8KFcb080)VF89&{PKa7iF+XrAy-zz@&=1g8tZcYts4W}UeXOa>TD6!ol+m#x*%UmURA-U z_u^|S6T6@ggybU)1EIJs^}`6hCnb4{y6kL>Hnz;N!J_7YZ1hxxjg~N|Gd-q@cH37b zDj^R+GsXzbTHnn#4Q7i%rj$}d(lP{YZNm=ey0MLHw)lL!|n#1zag29J9naXOTPpx?+}s@AIvScqo4 zid}xj`h8tKRZ}6^wimyS%#tcfxeL&xY9F2RKw`gh^AJLC-|`O$ir?fPk`^y=Jr!7X zoTOq`HzcX%pR<$^L6wzocdT1P-2p^#9^!wsE{)s3DqS=#Pus2afQxbM0CNWtN!G|=zX6| zoCkRb#S0W6p9Vso%Cz{>XXr+{7>K?ru4jvcS~VGKQFDLB?p;v`JAh$aY~S!?V*iaH z2C*nuymeC%TA_D-NXE@6#zntJUrHPg(TG}AyEvN+ z$(n=%8L!mg)Z$aM15a`{lF2V-RQIIzAhI4sK|WE?Wgs7a{8Hj4pX4B{X%mnPRyqe) z(L+*`@hS|Cr!t`9U+`|u>nTPxcIpSjX<=R9+-$Nsi(2>TONqZiIWCM9JWa}_^U}5; z!~_tgZY>2jE~CJbDlY}|$@BX%WBoy@R$A@^^(f7^gdu*sb$a0-bT}eAmHR*_0@pfi z=ee2`Mm8_)g+#$U~Uut-r8iW2=4kfZjMgIR={Iw=0+H73>-Efj_PaI_ z2rgCQo^FFUXvaH=5s-(lG)=mN9kd_^G_5OODJ=R0idXI!XIqD=ZLV!hY2`n1$dpU; zcyxq8^f~a|#CXU<$buvm$z6jGT9(csa4`WtDW3K?Hy(4GUwcWq_`Tz#+rxfA!pUsX zK@6n%2_cC8(K=xHio11Vj;(N$*fjs2J*eCDgci5}@ zn+;1gwQq}iFZ-7)%3X7zQSbH(Hnq|POXd#Z+T-6%{2uZU7K}_22p;K3B`%k8dhs!8 z;VAB>rA%~q*(vO?mcm6ORU?3~2kN~0rfKgc9)>)G3|0t%&C1)v6#o>v+^U*lRBdB5 z1FOH%unU!_v4}3xR5t{Vb-3!meaiwhv=2G{P(fPuF$@2$guNa;TtD8CyoZDrC>z>%1_$!oyQ2RCt znIfFXj3tRLT;7nsc}d=#oqA?CfRLH9x!@x0Z(iS>cntCoYE#Z8$w>SbcQtm{0FvMD zE;>;+ySkiqcJTlP*2vWgKya&xascCC00Tn0*h5hh2X-pAfqyE2qU)?JnuFZQCX+e@ytGx zwTK!yLaselDx@sZZln45)e#7(8*wS>Dbn&D2pd_!l3z&OEwe_OMd^r#uDN*a=xf4U zu&YNYh>Nrf*M67S0C_It5vak$genXGyTWc^0p=9UHFjS=l9m6HTriKt`f~kCL)fBp z1r~QJ7#AOG*}Gt$t$P=E2s2pWNCgT^Hrz=o{NugPqi(+-e*!edLt9!^Q0Puna&vUXR@^W)MUBW+YNc3?hRQ;3&52x6FcH4p>kcS{lNY_G; z9_%+0me@dCf_M;p-?f-?tYjb>_4-Wi#PVbGK67@&(1!`?wYK{d{0H(7YT8zwcw>Gi z$H0HH{^yL9pOJPHqMT zXA;zPKvWk|2SPTeS(5H7s#LCV72Mu%=*E5pqahE0EI=_?$r0p#QUa|zxAzI>lF@`g&Ud?m z@U|lsh2TLU!4dL?*Q*LPK{*KZpT6UBG)m*r3hyL3;duydmC3D{>)z(<)VUD|Y8xm7 zF{7<{v#Q`i$V1ScniVNvKyo_qra#o!ahndf-YJi8?OEC%tKt6j-aHArkz7sL~R?5Q51>>k1E^UYivP}!^V0p)E??E-{3`! zO8sWHV#f9_GeQ8^$}eVYJD}!A4ZKWXodno$uwQRof#o2`Ltg7 ziD7wlKYt0e2b9BUI;r}oR`Uz?CaIQp8OVNhV+$%E4}nm4>zYL6ih?vOKHQ6k=(mR; z+y-c$$%kb-&s`khf_fQ$fb0MEJF?(@C^DF?CRYoyJ7jP z2p1FcA-X&vxRKI9?9 z0Pn?(zUY2nu+9o{)5)o4>IO@9{z602?H5GPh>_5i29dV*S7#N>f;>T$x2iU#r8gB6`$a8^Q)t1y-f5f9D!3lXaUl#PQTj4*=~t{th6a`n4WVt$Urb?( zg}Z%V~?(b|T5SGb|`Q5WycB zI_05T3w{L!5YDLqQOtvY5{fe|1w@S(LxH$%VGTL$QXBP(*Y?F|=MM{I=F~1x7~t}# znaPC(iy_a2dhJN!0ziJKAIOe(HWAZ|wd?(?)5hGgylzc=_Nd5459jrCgv$a*Vfn&> z{*Z?-(Wp%fNj`3VZVEzRK^O!f_I3~L>p687ukD___t1kQx+pCn)H*KaoV>8$ZpcGO z$#5YX#T^vD5szbtj~y3+;4U@G2DRE;+juZXWm_U)kR!!hifUZMPhVZo2MQoe_=rXN zc3%<`tk~ehCrZ^85Y0b$nHo;=C_Q&_?)HA!HJ_)$>b3`k1naa?2g z!}gi9F7H!#?0~e#_ zZa*|zUmw}m(=oKlU;}jh&P@e>hddV=7Q_Or>xcMJcmh`M@?mgoO@5hWZB1wHr)^bx zfU<*2&sJX8RPa3HAvE|%KGFgzR}2qe^e&%petZ`h2uH}J?lCPL*|onZ?0PKAQ>5Ws z?_YN`6&$!K51~*F1g#+*Yo2yNfy7sCBG$BXlvScC;jC@!#Wi|`5nV7vs;YErAcs8E zR4@w4b3yMV7C?ew!UQI*pc7NKu2#5o7`v0P21}bWnO+2tR$GT`6bE7Oo`aq)cm)a| z)V|r0Fw8e(Qg8+<@=;D+%s88xvQD509-A06mB(_LW!RkTw(pL-4fjk5facU5fn6Tf4iy43- zzt~P3d}f7qirxI8Wmb0%N1PFkw5rhH8R5poBXeFYco*^z7Bi5P*l-Ra6V@((0NfFe z!_mcY^M)9NE{G^9(ILzv~zeRz?MB^=q3@gvXh-reDs zRA@is%BOYT;F`~W6){?FO!v2%l%CvDFc}I#NJRXz7t?}_R~pw(r3ZSZ+mg{bujdNM z>g!W1+(j0&Nt?Ne$8C{hY5trLgja9AQAH04&VgvW(2%t3U#uQ5OL7)fLD|pe5kV28 z{6puvJ*r3gje;zE&j_#ai8=!|y9_@1rrJ)qc??FE+}Ed1qr z1sfm_;i4X`DNHFQq6z6*UpPo^YX9%oqzgB&DwzM^p)D+e1g8#9df>Byt050z4j?0v z?J8pEE$yRp{^WLHbU5O;dAhy9P3`sg-7ziESyC!f;m_Ltwehop!bc+zI5QGb7=a`! zF#{(kJfAjidr=4BonJI8>YgoL8+qIb`7C*}3m~gL`K;gt$a5hDn3U9i6P9BKtJPPo zLVLkMN0?uz_F(SzK0K}9U+{%^{D`|`<|6y2rEqtcErv+;`4%ekcY5lO%<4rnpGT>ftiQo1=a4&{5CEbE|Ka&`bZ}XxxdN|8@_n!TAJDj^=rn;!>59ZyaT)P^a zt}0&tdBIS~Lr6Td12RA~0Usjy zp45FZesR?&qYXl%-qtO>sHgo&I6dHI1qN0ZY0Hn^ukaKo4?&aW1kwmC8!Jv70`{wF z)kPHbJ?REkJ?Okc;lp7;>0w4Vh6VGszud2|6!H)z5eWq~pa-eISa3${bipz$_YG=b zb=y_Cg#U`+&x9dZQDc?G#i+{;YFD@t@(^g-^a>9yfJi!~7B?>Wjh=U3(!-2g`E+gL zK<>$jKEi0SzJdSzvFy~zFCvfro>$TdyIeTv0?4&A|NAJ! zkF^dvbyoAQRIT$|iZrOumUnlan`#ZgbHqy6pENE`-e*|hwUFlmd28fxN|)0~Liz*& zN>qMGI_!aJxN!ARI;is0<_E%pV)1~Qe3yZYEge@l1M(2qCGt@8P-s%aVCY+Mm!E<# zE|MI+p5u<8?dsj}2TNX=GOnO=Ic?%E;|lvi9zymc%P|1Cgy~)eB~|1v6dG5d>m?l* zeJ0Dhe;($7f;-BBouHoHHLh?6N`nZ?xwOWu2DfU#kawCU>ONmV@hBG@BMFK$HqiWs5r`jc9lZRI z)Hb1FS2w??ZS09(EDuAlPRn^4mq&fIWOCu5OY>Z)yV9|~B`Bu}`@sI9F!-Pb?--*V zj}o|I_z7$-^!vfRYMiC>Pb+wp=D!U=NZsh!EY-4cXR>@Mo60Xx?Af1kIF5M8l6H*m ztt)WDM#~B(Pjq(6@(*pCT=*6g(uH+hFSIWEbrwKKffrk+6%Vi6K{?!(CALMP2TM_F z6cLoR4uhh;ZClSRjK6qp4uTBR>{f9^+J+%PpldU%T=nB2gO0IaF4yZbIn5&Kv?v5Q zZLrL;xz~AxUqGG$yK_ge!-eyS+b;2#-|U*`-K9q&+k_ zt8g?FKp>4)--@*|SU`j>qy2yg^1@1tc8j~x`4t@CoiMM$2v?!?h$3m|o;&nmne@?A!&$R74z%)TLcY#B}L?PFY7YClC%VXVDJae~ah_v&%ma zvcZ8@{km`hTB?`LZ9?aDMi?KZO@4xM3!DW%@}pe{}@nM_ZQwb5j^q zc_|xIIo#GQeRM@tG=S)NtS+aWxzD1)#gONMR!s6@K~37Ld?JvS59UXdtAfJiQ9H&T zMi`8i!*MRjKVR>i9*YXw^vpqEvO$Q_5P^8)auStcfGLP9D-^9)IBz)bqlhjzJIUB; zezE7vzbh<(JQp-6q3c(g$DE`P-e6hg7lM#3=G~@?Q(Of_bgaq}V&6#b|+z#wK7 z-CcMGW^9vP{Y1jU(Z@!PHTaN$@ynEN#cNca#Cl6um zBOD8d!ZCj2fO1EtZgFvXJDsj_m&fV=*V{eXgds@NNDth2alop(3#%c|g+ye{>P0pr zNg+Iw7N04A=pN2n&ZiQU^Li@Mn7^qH6%^lub-{d<0!ufwzwM#B3pYX@!Zk(PC|Lj& z#laAg41v}yfMgyzff%*i%6@7ahy38N)Kn&N+}?DtZ@zr7i-4RZ8JIj!{^C~E z_628G@3HuW<3h&@T3xiIdk?s0*C0mU`KQA3AP*ranMvtI0TA0&^MVyqQa1?*HJmI^ zj9An(f71zexl`BsAB?Qz;1yh2WDx82dA9JcP!57#)2!S;DptF^VoH1@7$3}e>bO+} ztEjJKR!@w!CNf@dnyJNMxEu0Z$k}8}#(`@Y_XgHnGM|Awvx0Is0*EeVtgr737nepL zm?l*O1v7s=`i;WEW8TO?NFrvTk``o+p{zvaglfF&aYH)Z?KY#eSk(GBKeZ;l4&?CP zzEOBS6h5vy(7id;umtg^=S&Z@ylz>*mm-mb2?y8S+ z18e8G-B^!`Y)0$!R%sAG9{J{j!gnDLp{CKRtkwKkuP8OnTc=&opyzkHBJdsKdvKG+r(p<= z^Rry!!r-3|00Qz5G>ldyC7P8^^qT*&^xzT%b?GpMq_&IfL4>*|=k7lp6^T(C2&8h* zxLAAf&cZh!4}maD+i+pg$w475r|w*4KJUO`2+CdcxvO_qf_X)R3zmv-aD%8kw;(wc z@(>ys#DJV!dH_iIEuSf-xFQYtMcw<9njk1`Q-uj4-$$0zu6`XW@;D^-Bwqe}_DT_1?v9HEkiv zX4VahcW;mH|X43V5{$?FRiq~7mIc>}>* zRl#$&AELX0BV1rntQVOs_P)P;G6Q)ooJCU~ga2s_vqBsmWsvw!j(D8z-r zhiMz3xiCUZkskQYmF%whoI3L_UD~W8#9L3zq9i7o%_B;S@}Y6=`?%?xiA)h@i@NT55@Ny{FggpWFcj5Q-DBA=#3JZ@tM7YT421{qOWe0XkPJuiZYFYyZK3=-IDVl4}mOja9NRF%$}5a(6|uuNzTO!s#prX z-4ae&RHEOrkzmdpcU8f%e3zrUC&xe@LVZ`3BQEGZZObpDYChvHey%t3to+r`JI41% zP-7yl#~l~`8K85nOeODzJcLs>eRc`}$D+B~H|D&cboZkU4NaPMGBK)a_L(l9g}Go^ zo}EJ%2Kz5gCF`I(gsIzttCXV9XB^3tQM_08?B9;J3+R+^7ByG0h#GxnH1*l(DrZq| zJ)TMytj|HvBw%JmNXiEgeIgyfqSAvUSnWr%d1f^0QJN+3K(E$MGNsCk(=cv2`G=|L zWHaQsKpZZDW4Ka@k_CszU%*h3^M<1N94;&+8&ohaUR%Z#CXz=H1!f5k4XLr z%0XC=vKJbpRe`+pDapack78*YY3LSs)BXeUpz7*xdO^@VO>}EWwkOQwJ$T~GbH9ywXd$Iv9ViQ zhdPGV>Z!8n43Eb357++Zh~!z2hmh?{3sQtUTiTFon{QwMe&MdR@_3uEs^YG;v4Z{X zZ^M2;X0FGj+K_a{BO{YHKpp~d$lcU$6fOXH9WE$W=P%+yg8Ja){4*D{^1tr6OCn*A zbkpA$(BUbX7xB-efq)c56gA*Qy|*d>;uQZ}#T^J_g9P)3Tm?nLqJh-YMwYx-e&kuH zj*Il4Pf1RKJcMK<*-PzazlP{yx%|WjkR7j}i<$nQNDtPIZUeX!-!= z=5YwgW*hpOAG>E%bHsz~D*45X>K@#@6gihf!AvQ;>Zb0^@12_b0`gp_;z}4ehKq*E zpTv`Mm0SS%_DT*7VYG_0s^Prs9D`^)U~2MjkcY77q)wX)dZ%zg0y?(= zddg$$!f+F~j8=umt?%LFTy#YssKtG!CYvA+AzQVWE1R`%geDU(rMun9zY)#%9l%}^ zH)-gx4h@UC>gk!o!?UCc-DmD5Vk>C=xmFNA(z>Zc$$wk?!asCg`+8a|Y6Za_Ye{(! zK<=dZt$B$5)wVis_=q*r~~JP)<-XCw{R(NviNZ zCnLZL{CLs&Y0Jz06%8O{&3>*obMghr#gK=PUzqbLs;f~$#1r`)=-j5;bw54UQZ*T^ zj*#E|r|7X|76w_&F)osqU633Ac?fef^fGFYIy5%q) z;g^kgHxCK)Iql0UE=c|x3Lt1uey8C=EJ#Z72m$d6e~`Mh@?W)%$L~_!pu2*bR~^bD z!jB7E6y?)8W@=otdHsUqK*)1JvkFsu5iu;`2SKqHL?L_czV=CmBnoESbHuu_%<^j3 z^|(nxH#Zx^$Zsx4o(*{jNnAov=PfdcA%2ryAWL$zEPv@RE(5&F?O%*(8Nf|_kw+ox z5DAN%265C07ba&yIS7-v7_l&A;t?iaAmlTUeeXM(8LOMx&n_K3ePpDYTin~k0-uIn&}L+-sIISTR+>c3Mr z9MFGRl?+U8QH5n7M8Vj^N7=P!omK_;_4VDdgWm2D&S_Z}WJ2k5am344BrkwGggn~_ z!SF4oknnPEWVA;C@xjYlxbrv6^x~|2;fPSAW$flj0&W-P<}p_$8zB!NCg`<#EEV$# z2l6~fam!~QgQgs5shX<1#eJ~2Gy2!?Ci zNEg3_iw8R%k1pJPHxJs@13Dw#O`PQ*iRt31Tdz$14$5=kLI!;nFQ`CnZeA!I*;4R8 zAl~jVn)JZ!6!)3jhk}__$CmXNau+~$FTXL_W5ta*2>Gydfnk}+Y6gSA1SV4>fVj;3 zt;VDv* zdC6^%hfsQhZA$#Kucjq34HyD(kEMna4w>pnLoUf#TQdOfjviZPQJxbRW>K5|x;Xg> z6hMTHHh3=wQ5XRW>lGIbj7iz4nz1goB&T@oVeBPEo)X9!NG_Ofs#ucz1j=zCDe;T= z&}>`GNDXko9|Ykns%htmWFX6}cxm$dVVuT|mcy|DS`r+NxOVK4NBi;vXB9B-?HLF$lO(^YU+tyzc6@n}Jw8T_>Ym z9@Vt78*{z;!(os!VjPZeqh8}vOOk(s@`93XEs(pRTRJc&k?!5I$ll|{-xE<0NfGg@X4dT7fRukI5WSlNWB2zJEQ()=4C2wA8) z%|9uCZ)a2rg|a9m|89Xor6#USR5dxRXRKP#4jxX?wfV8+SV(QEVb`qmYy)=QYJtMO zZ23`JBu{PDjMW{L-MS^svkoKo9%%WIXU~`}w$Fb&x&O_N=OBb3%Rx3EVp#k$JOj@^ zbK#IdN}JsUbS<;e1dv%_iy~FauzhF{-~Z2M(pQn3)-rSF-7ntxd~z2gfzUqUQD&~67?j2(K-7P!M*qbx79BE(>xdV* zQLppd{y)6BjmpFd$HlrmHz)rJ1rQRv%_C?M1UZOI)n#q)k(-EJv5_-kAG*Q-Rm(qr z$@dX1*md*QT->?O=Hyn$Luiavm^Fi<-$;!1WlS=F{H4nOevMI&s$h*5_4R{TGe02g z7nCMadhAv>M@`?HJQwm1G^24r?jSdi4Z{rWODU+x&o8E)iJ;iESAEp#>6z9L=~5P( zgVMwS^EM|>fC31~TP?x}GSV+*#L|uARhQGn`meN&>vYkuXwVNXh|p8WgL`t`S-Cmc z=8hbM`GE6jx-FGEmxBp}2Y(ooC7kWAB?I};-7Pwc;SA}ne;XMLSLcTx{T`2WY5EKUFb literal 0 HcmV?d00001 diff --git a/test_data/test_db/db.pickle b/test_data/test_db/db.pickle new file mode 100644 index 0000000000000000000000000000000000000000..97a8b39c4a05d9cff8e2d3a85dfb7e6620fc9542 GIT binary patch literal 11136 zcmZA7d7O>)`^Rzjea~RXR+h+;NoS8Xe2D6wmV~cDV+fmUeA$z1% zB}65qvbCpu-%I*<{PocB31|BcV=q+3f{RXFuEGjTz@YF2J> zVSZt(Fh3eg#B1i|6lJ$d<-SC`dSAPsUtU&8;+8~$$EX;j)`3V z|6N@Epj})mqd1yXSe%`aIjtm`5zCt%O{8V%OB6)%qlw&?xgsmC2R@l?So)NZo*g9eBhOHO&%&_&tHVAuG*oI*ng>4+R zN!YW)HVu1D*mJ|47q(g0^TRd|d+Ix=-@g`VS#r6rXsK~(WxCMR+LUT)W4g%H*3`~) zvFz}rQnGHe*En@Bbu@J{bvAV|bv1P}bvN~p@yRl&if;7OIQ261HuW)GV(M$^XXH1)lx>R2yEWu+E#1h`IE^#qn(|EJO%qHL zP5Gt*Q=zmzU0$iH8$}wYNv2{`%v543HBB~6F-c)*4r<+VSo0gfD zn{F{BOt+eDGp&%#O=Vs)-MC%jw9>T7wAyrsX^m;EX`N}kX@h*xOlmaOjg1t&uOY@exai7NNe$xY{ZKelJ51Ae|Z8tq)+98Wu%Es2Zu~Xx; z%k-#ew`q^*G1KFwCro=yPfBvC5EL^rq=8)7z$ZOz)cBGrcdDwv!X> zb>jn#(}$*yOdp#*F@0+K%=EeG3)7b}rh_c#s2g8toW3?4Gks(F*7Tj}d(#i5A5A~W zv5qpivu^yXar(vdtLZn>@1{RYf0~Y){xY4Aw>!(aF1qoz#_1o^zowJ_lT`4G9`s=V zlVGwZepflzwJaeOJ*{IUSQ)0kDzGX%4OWBIVGU1Ob(3A)b*-kSb*u$XhiAarunw#X z>%lW&eNP(nkS#rRt%0X?JPS62jbLNg1fC6>!gJuco}~1WmwM^id7jp>89X00hZn#W zuqA8-FNCc(~W$h23Cx z*aP;2yjla1&~@J4tOycsU@WZ`hBJyO?}ds@d^U;^F>Z-Xn~?QkVr1y_4AWuzRsQrGVAw2o`w zTDT6bha2EVxC!0~H+yp7Rr2W7y0*pBI^G4h!n@%;@LqTyydORQw|R2bHBx1?u07~! z9Up=Z!|m`9xC8ElyWpd6ws9vG`@ z&v;tLXW?`306Yi}!Nc$fd>+2wNv(*y8PT;DJ+0$Q@MZW4d=pTW=J7w}8?75o|=gWq`4 zXPk`B)wORut>bs_d-wzV5&i^!hQGjH;cuS2kSk3l=-Tg|*6|PcCp-@Sf+yhL@E`au zJn6~Y2{I{P*DCm0M-TcifJrbJR)m#cWtig2(R{t>S`}Coo(8MI>aYf^32VXA;TgVk zDvnoQI@W=8VLf;ztPdN&vtUEm$d~hrWauPaYwT+so4~VSQ+N(M7oG>3!Si8r zUml($8)CY4fvsJ1K>b72o8p6a0nEb4u`^F z@G_{s-~Qiw7!F6kk?;z5CA9UJJ*-3^*1>U?$A+<*(_o z?>b$}_O*^tm;=YbT$l&P!wGOA%=hJ7{nh47T`Talj)kxYPJ+cS21{TmoD8SQthI4#bJ4;&5(Y3k0)^Q%Z0nUeIZ~I$Mz{&y2{*$n@GiI&-t9}GOa?8|wR?Q6J_+~1r{L3YKYRv03!j4r zeED~Y-gNCCJOmHJBk+0n0(=p^1Yd@)_!5cB;-$Lws;_l?4IYKB!#CiY@GbZ@d3^lmkG|INC-^h`1^xJz`x-?@LzZm zRtW4BJm|w9kPa*4_7%F86lfijVMSO8R)#6C3akoGgVh2#u|gKC)V1n?*0Bbx32VXA z;Tf!qU0_$( z4R(h;U{Ba9kXCDD#5!H;9cUf@kBjFYBN_Z8#8eRiO!O`&AKt|muO*iY>m_X~80ms4! z%!FAm8%ALc92dw9o8|s3x|SPg9rNILH~~(C`LF;M!Xh{+keYYN$*sCp9B3V5umqOE z$#4ps3a7#8@H#jH&V<*)S#UO-1Lwkd@CG$n=;0oTB_a2;F^ zH^7Z>Qy>{T)^dhFJ<2Li3*HuxZX2tEwA z!$;r_xD)OQWc_Xl_UPK9f!1+1+yftjkHaV6Uic*32cHTgXODdRgswduXdU;%XW+B& zId}jbgoof^cqEX1d*%4PvP5ZVW@%CsHeGiXz1^T~0~Y!=kaGh`tLugPH6eOOID9EG;Q2)$^j2^bBW7 zMs}vY)7;WnZsOWRyso=T52Us!S8DnFsX38EBwi^$swYYd#+6@H=Ra4K Date: Tue, 16 Mar 2021 17:26:34 +0100 Subject: [PATCH 051/185] Added test_data to package. --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4bcc8770..ba1be4d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,8 @@ classifiers = [ ] include = [ "CHANGELOG.md", - "LICENSE" + "LICENSE", + "test_data" ] [tool.poetry.dependencies] From aa20dd22c828240758293645649a4a016733568e Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 17:27:23 +0100 Subject: [PATCH 052/185] Added pytest setup --- .github/workflows/pythonpackage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3f4261d6..e43d32d2 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -23,7 +23,7 @@ jobs: restore-keys: ${{ runner.os }}-pip # install linters - name: Setup linters - run: python -m pip install black flake8 mypy + run: python -m pip install black flake8 mypy pytest # run linters - name: Lint run: | From 3db1938ac7e61d385f490df608fb5951041a7102 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 17:30:01 +0100 Subject: [PATCH 053/185] Fixed pytest setup --- .github/workflows/pythonpackage.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index e43d32d2..df97ee4b 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -23,7 +23,7 @@ jobs: restore-keys: ${{ runner.os }}-pip # install linters - name: Setup linters - run: python -m pip install black flake8 mypy pytest + run: python -m pip install black flake8 mypy # run linters - name: Lint run: | @@ -51,6 +51,9 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true + # install tester + - name: Setup tester + run: python -m pip install pytest # Load cached venv if cache exists - name: Load cached venv (poetry) id: cached-poetry-dependencies From 988c910a0c67129ae9ba63192aa1774f26bc0e54 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 17:35:15 +0100 Subject: [PATCH 054/185] Added pytest to and updated dependencies --- .github/workflows/pythonpackage.yml | 3 - poetry.lock | 181 +++++++++++++++++++++++++++- pyproject.toml | 1 + 3 files changed, 178 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index df97ee4b..3f4261d6 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -51,9 +51,6 @@ jobs: with: virtualenvs-create: true virtualenvs-in-project: true - # install tester - - name: Setup tester - run: python -m pip install pytest # Load cached venv if cache exists - name: Load cached venv (poetry) id: cached-poetry-dependencies diff --git a/poetry.lock b/poetry.lock index 48577a4e..ff0d11e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,25 @@ +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "20.3.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] + [[package]] name = "colorama" version = "0.4.4" @@ -17,6 +39,30 @@ python-versions = "*" [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] +[[package]] +name = "importlib-metadata" +version = "3.7.3" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "numpy" version = "1.20.1" @@ -25,6 +71,17 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pyparsing = ">=2.0.2" + [[package]] name = "pandas" version = "1.2.3" @@ -41,14 +98,66 @@ pytz = ">=2017.3" [package.extras] test = ["pytest (>=5.0.1)", "pytest-xdist", "hypothesis (>=3.58)"] +[[package]] +name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] + +[[package]] +name = "py" +version = "1.10.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "pygments" -version = "2.8.0" +version = "2.8.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "pytest" +version = "6.2.2" +description = "pytest: simple powerful testing with Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<1.0.0a1" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + [[package]] name = "python-dateutil" version = "2.8.1" @@ -93,6 +202,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "tqdm" version = "4.59.0" @@ -114,12 +231,32 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "zipp" +version = "3.4.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "3324de22d426cbe16ffca39ab777b8c7a0561efc34400dfca8d8d82c94cf5310" +content-hash = "cfec7ad6df5eeb9a1b1340568c2975620466a8525dd4f53a8fa77dfac76088ff" [metadata.files] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, + {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, +] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -128,6 +265,14 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] +importlib-metadata = [ + {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"}, + {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] numpy = [ {file = "numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae61f02b84a0211abb56462a3b6cd1e7ec39d466d3160eb4e1da8bf6717cdbeb"}, {file = "numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:65410c7f4398a0047eea5cca9b74009ea61178efd78d1be9847fac1d6716ec1e"}, @@ -154,6 +299,10 @@ numpy = [ {file = "numpy-1.20.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:9eb551d122fadca7774b97db8a112b77231dcccda8e91a5bc99e79890797175e"}, {file = "numpy-1.20.1.zip", hash = "sha256:3bc63486a870294683980d76ec1e3efc786295ae00128f9ea38e2c6e74d5a60a"}, ] +packaging = [ + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, +] pandas = [ {file = "pandas-1.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4d821b9b911fc1b7d428978d04ace33f0af32bb7549525c8a7b08444bce46b74"}, {file = "pandas-1.2.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9f5829e64507ad10e2561b60baf285c470f3c4454b007c860e77849b88865ae7"}, @@ -172,9 +321,25 @@ pandas = [ {file = "pandas-1.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:09761bf5f8c741d47d4b8b9073288de1be39bbfccc281d70b889ade12b2aad29"}, {file = "pandas-1.2.3.tar.gz", hash = "sha256:df6f10b85aef7a5bb25259ad651ad1cc1d6bb09000595cab47e718cbac250b1d"}, ] +pluggy = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] +py = [ + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, +] pygments = [ - {file = "Pygments-2.8.0-py3-none-any.whl", hash = "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88"}, - {file = "Pygments-2.8.0.tar.gz", hash = "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0"}, + {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, + {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, +] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] +pytest = [ + {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"}, + {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -192,6 +357,10 @@ six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] tqdm = [ {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, @@ -201,3 +370,7 @@ typing-extensions = [ {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] +zipp = [ + {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, + {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, +] diff --git a/pyproject.toml b/pyproject.toml index ba1be4d7..3a7ac7c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,7 @@ numpy = "^1.20.1" pandas = "^1.2.2" rich = "^9.10.0" tqdm = "^4.58.0" +pytest = "^6.2.2" [build-system] requires = ["poetry>=0.12"] From 90a5fea28fa37ac35e338a4bee0de2dfc00cda43 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 20:49:31 +0100 Subject: [PATCH 055/185] Moved GenomicRegion to new region module --- ifpd2/__init__.py | 3 +- ifpd2/region.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++ ifpd2/walker2.py | 92 +-------------------------------------------- 3 files changed, 100 insertions(+), 91 deletions(-) create mode 100644 ifpd2/region.py diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index be221c14..6e68e36e 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -6,7 +6,7 @@ from ifpd2.const import __version__ from ifpd2 import asserts, io from ifpd2 import walker, walker2 -from ifpd2 import chromosome, database +from ifpd2 import chromosome, database, region from ifpd2 import oligo, probe, probe_set __all__ = [ @@ -17,6 +17,7 @@ "walker2", "chromosome", "database", + "region", "oligo", "probe", "probe_set", diff --git a/ifpd2/region.py b/ifpd2/region.py new file mode 100644 index 00000000..d0adb077 --- /dev/null +++ b/ifpd2/region.py @@ -0,0 +1,96 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import logging +from typing import Tuple + + +class GenomicRegion(object): + """Details on genomic region with a central focus region.""" + + __chrom: bytes + __chromStart: int + __chromEnd: int + __focusStart: int + __focusEnd: int + __focusSize: int + __focusStep: int + + def __init__( + self, + chrom: bytes, + chromStart: int, + chromEnd: int, + focus: float = 1, + focus_step: float = 1, + ): + super(GenomicRegion, self).__init__() + self.__init_region(chrom, chromStart, chromEnd) + self.__init_focus(focus, focus_step) + + def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: + assert 0 != len(chrom), "chromosome cannot be empty" + assert ( + chromStart >= 0 + ), f"start should be greater than or equal to 0: {chromStart}" + assert ( + chromEnd > chromStart + ), f"end should be greater than start: {chromStart}-{chromEnd}" + self.__chrom = chrom + self.__chromStart = chromStart + self.__chromEnd = chromEnd + + def __init_focus(self, focus: float, focus_step: float) -> None: + if focus > 1: + assert focus <= self.__chromEnd - self.__chromStart + self.__focusSize = int(focus) + else: + self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus) + self.__focusStart = int( + (self.__chromStart + self.__chromEnd) / 2 - self.__focusSize / 2 + ) + self.__focusEnd = int( + (self.__chromStart + self.__chromEnd) / 2 + self.__focusSize / 2 + ) + assert focus_step > 0 + if focus_step > 1: + self.__focusStep = int(focus_step) + else: + self.__focusStep = int(self.__focusSize * focus_step) + + @property + def chromosome(self) -> bytes: + return self.__chrom + + @property + def start(self) -> int: + return self.__chromStart + + @property + def end(self) -> int: + return self.__chromEnd + + @property + def region(self) -> Tuple[int, int]: + return (self.__chromStart, self.__chromEnd) + + @property + def focus(self) -> Tuple[int, int]: + return (self.__focusStart, self.__focusEnd) + + @property + def focus_step(self) -> int: + return self.__focusStep + + def can_increase_focus(self) -> bool: + return self.focus != self.region + + def increase_focus(self) -> None: + if self.can_increase_focus(): + logging.warning("cannot increase the focus region any further") + self.__focusStart = max( + self.__chromStart, self.__focusStart - self.__focusStep // 2 + ) + self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index c6dacba0..443ff527 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -4,99 +4,11 @@ """ from ifpd2.database import DataBase, Record +from ifpd2.region import GenomicRegion import itertools import logging import os -from typing import IO, Iterator, List, Tuple, Union - - -class GenomicRegion(object): - """Details on genomic region with a central focus region.""" - - __chrom: bytes - __chromStart: int - __chromEnd: int - __focusStart: int - __focusEnd: int - __focusSize: int - __focusStep: int - - def __init__( - self, - chrom: bytes, - chromStart: int, - chromEnd: int, - focus: float = 1, - focus_step: float = 1, - ): - super(GenomicRegion, self).__init__() - self.__init_region(chrom, chromStart, chromEnd) - self.__init_focus(focus, focus_step) - - def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: - assert 0 != len(chrom), "chromosome cannot be empty" - assert ( - chromStart >= 0 - ), f"start should be greater than or equal to 0: {chromStart}" - assert ( - chromEnd > chromStart - ), f"end should be greater than start: {chromStart}-{chromEnd}" - self.__chrom = chrom - self.__chromStart = chromStart - self.__chromEnd = chromEnd - - def __init_focus(self, focus: float, focus_step: float) -> None: - if focus > 1: - assert focus <= self.__chromEnd - self.__chromStart - self.__focusSize = int(focus) - else: - self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus) - self.__focusStart = int( - (self.__chromStart + self.__chromEnd) / 2 - self.__focusSize / 2 - ) - self.__focusEnd = int( - (self.__chromStart + self.__chromEnd) / 2 + self.__focusSize / 2 - ) - assert focus_step > 0 - if focus_step > 1: - self.__focusStep = int(focus_step) - else: - self.__focusStep = int(self.__focusSize * focus_step) - - @property - def chromosome(self) -> bytes: - return self.__chrom - - @property - def start(self) -> int: - return self.__chromStart - - @property - def end(self) -> int: - return self.__chromEnd - - @property - def region(self) -> Tuple[int, int]: - return (self.__chromStart, self.__chromEnd) - - @property - def focus(self) -> Tuple[int, int]: - return (self.__focusStart, self.__focusEnd) - - @property - def focus_step(self) -> int: - return self.__focusStep - - def can_increase_focus(self) -> bool: - return self.focus != self.region - - def increase_focus(self) -> None: - if self.can_increase_focus(): - logging.warning("cannot increase the focus region any further") - self.__focusStart = max( - self.__chromStart, self.__focusStart - self.__focusStep // 2 - ) - self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) +from typing import IO, Iterator, List, Union class ChromosomeWalker(object): From 6c2200e8808cd0255374b1cd8df5d5c8c9e7e9c3 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 21:28:01 +0100 Subject: [PATCH 056/185] Moved pytest and black to dev dependencies --- poetry.lock | 188 +++++++++++++++++++++++++++++++++++++++++++++---- pyproject.toml | 3 + 2 files changed, 179 insertions(+), 12 deletions(-) diff --git a/poetry.lock b/poetry.lock index ff0d11e0..3309a265 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,8 +1,16 @@ +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "atomicwrites" version = "1.4.0" description = "Atomic file writes." -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -10,7 +18,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" name = "attrs" version = "20.3.0" description = "Classes Without Boilerplate" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -20,6 +28,36 @@ docs = ["furo", "sphinx", "zope.interface"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +[[package]] +name = "black" +version = "20.8b1" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +appdirs = "*" +click = ">=7.1.2" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.6,<1" +regex = ">=2020.1.8" +toml = ">=0.10.1" +typed-ast = ">=1.4.0" +typing-extensions = ">=3.7.4" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] + +[[package]] +name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "colorama" version = "0.4.4" @@ -43,7 +81,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "importlib-metadata" version = "3.7.3" description = "Read metadata from Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" @@ -59,7 +97,15 @@ testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "main" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" optional = false python-versions = "*" @@ -75,7 +121,7 @@ python-versions = ">=3.7" name = "packaging" version = "20.9" description = "Core utilities for Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -98,11 +144,19 @@ pytz = ">=2017.3" [package.extras] test = ["pytest (>=5.0.1)", "pytest-xdist", "hypothesis (>=3.58)"] +[[package]] +name = "pathspec" +version = "0.8.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "pluggy" version = "0.13.1" description = "plugin and hook calling mechanisms for python" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -116,7 +170,7 @@ dev = ["pre-commit", "tox"] name = "py" version = "1.10.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -132,7 +186,7 @@ python-versions = ">=3.5" name = "pyparsing" version = "2.4.7" description = "Python parsing module" -category = "main" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -140,7 +194,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" name = "pytest" version = "6.2.2" description = "pytest: simple powerful testing with Python" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" @@ -177,6 +231,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "regex" +version = "2020.11.13" +description = "Alternative regular expression module, to replace re." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "rich" version = "9.13.0" @@ -206,7 +268,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" @@ -223,6 +285,14 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] +[[package]] +name = "typed-ast" +version = "1.4.2" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "typing-extensions" version = "3.7.4.3" @@ -235,7 +305,7 @@ python-versions = "*" name = "zipp" version = "3.4.1" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" @@ -246,9 +316,13 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.7.1" -content-hash = "cfec7ad6df5eeb9a1b1340568c2975620466a8525dd4f53a8fa77dfac76088ff" +content-hash = "a61d0c5369dda4bf4e058692e6daa118f099aa9be37a2f860c4518f997845848" [metadata.files] +appdirs = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -257,6 +331,13 @@ attrs = [ {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] +black = [ + {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, +] +click = [ + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, +] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -273,6 +354,10 @@ iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] numpy = [ {file = "numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae61f02b84a0211abb56462a3b6cd1e7ec39d466d3160eb4e1da8bf6717cdbeb"}, {file = "numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:65410c7f4398a0047eea5cca9b74009ea61178efd78d1be9847fac1d6716ec1e"}, @@ -321,6 +406,10 @@ pandas = [ {file = "pandas-1.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:09761bf5f8c741d47d4b8b9073288de1be39bbfccc281d70b889ade12b2aad29"}, {file = "pandas-1.2.3.tar.gz", hash = "sha256:df6f10b85aef7a5bb25259ad651ad1cc1d6bb09000595cab47e718cbac250b1d"}, ] +pathspec = [ + {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, + {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, +] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, @@ -349,6 +438,49 @@ pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] +regex = [ + {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6"}, + {file = "regex-2020.11.13-cp36-cp36m-win32.whl", hash = "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e"}, + {file = "regex-2020.11.13-cp36-cp36m-win_amd64.whl", hash = "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884"}, + {file = "regex-2020.11.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538"}, + {file = "regex-2020.11.13-cp37-cp37m-win32.whl", hash = "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4"}, + {file = "regex-2020.11.13-cp37-cp37m-win_amd64.whl", hash = "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444"}, + {file = "regex-2020.11.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b"}, + {file = "regex-2020.11.13-cp38-cp38-win32.whl", hash = "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c"}, + {file = "regex-2020.11.13-cp38-cp38-win_amd64.whl", hash = "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683"}, + {file = "regex-2020.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c"}, + {file = "regex-2020.11.13-cp39-cp39-win32.whl", hash = "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f"}, + {file = "regex-2020.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d"}, + {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, +] rich = [ {file = "rich-9.13.0-py3-none-any.whl", hash = "sha256:9004f6449c89abadf689dad6f92393e760b8c3a8a8c4ea6d8d474066307c0e66"}, {file = "rich-9.13.0.tar.gz", hash = "sha256:d59e94a0e3e686f0d268fe5c7060baa1bd6744abca71b45351f5850a3aaa6764"}, @@ -365,6 +497,38 @@ tqdm = [ {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, ] +typed-ast = [ + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"}, + {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"}, + {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"}, + {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"}, + {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"}, + {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"}, + {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"}, + {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"}, + {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"}, + {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"}, +] typing-extensions = [ {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, diff --git a/pyproject.toml b/pyproject.toml index 3a7ac7c4..54235a34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,10 @@ numpy = "^1.20.1" pandas = "^1.2.2" rich = "^9.10.0" tqdm = "^4.58.0" + +[tool.poetry.dev-dependencies] pytest = "^6.2.2" +black = "^20.8b1" [build-system] requires = ["poetry>=0.12"] From 76b82289034bfd3bbd692b7d589a6b2bdbd9a8e5 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 22:11:46 +0100 Subject: [PATCH 057/185] Implemented region builder and multi walk --- ifpd2/chromosome.py | 6 +++- ifpd2/database.py | 5 ++- ifpd2/region.py | 75 ++++++++++++++++++++++++++++++++++++++++----- ifpd2/walker2.py | 18 ++++++++++- 4 files changed, 93 insertions(+), 11 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index b1a6adb3..d0884381 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -131,7 +131,7 @@ def __eq__(self, other) -> bool: class ChromosomeData(object): """Contains information on a chromosome""" - _name: str + _name: bytes _size_nt: int _size_bytes: int _recordno: int @@ -161,6 +161,10 @@ def __init__( self._build_index(chromosome_db, index_bin_size, progress) + @property + def name(self) -> bytes: + return self._name + @property def record_byte_size(self) -> int: return self._record_byte_size diff --git a/ifpd2/database.py b/ifpd2/database.py index 2f27d912..3f1affd0 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -6,7 +6,7 @@ import argparse import copy from ifpd2 import const -from ifpd2.chromosome import ChromosomeDict +from ifpd2.chromosome import ChromosomeData, ChromosomeDict from ifpd2.io import get_dtype_length import logging import numpy as np # type: ignore @@ -188,6 +188,9 @@ def record_byte_size(self) -> int: def dtype(self) -> Dict[str, str]: return copy.copy(self._dtype) + def get_chromosome(self, chromosome: bytes) -> ChromosomeData: + return self._chromosomes.get_chromosome(chromosome) + def log_details(self) -> None: """Log database details.""" logging.info(f"Database name: {self._args.output}") diff --git a/ifpd2/region.py b/ifpd2/region.py index d0adb077..521823ee 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -3,8 +3,9 @@ @contact: gigi.ga90@gmail.com """ +from ifpd2.chromosome import ChromosomeData import logging -from typing import Tuple +from typing import List, Tuple class GenomicRegion(object): @@ -20,15 +21,12 @@ class GenomicRegion(object): def __init__( self, - chrom: bytes, - chromStart: int, - chromEnd: int, - focus: float = 1, - focus_step: float = 1, + chrom_region: Tuple[bytes, int, int], + focus_style: Tuple[float, float] = (1, 1), ): super(GenomicRegion, self).__init__() - self.__init_region(chrom, chromStart, chromEnd) - self.__init_focus(focus, focus_step) + self.__init_region(*chrom_region) + self.__init_focus(*focus_style) def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: assert 0 != len(chrom), "chromosome cannot be empty" @@ -94,3 +92,64 @@ def increase_focus(self) -> None: self.__chromStart, self.__focusStart - self.__focusStep // 2 ) self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) + + +class GenomicRegionBuilder(object): + """docstring for GenomicRegionBuilder""" + + __chromosome: bytes + __chromosome_size_nt: int + __focus_style: Tuple[float, float] + + def __init__( + self, chromosome_data: ChromosomeData, focus: float = 1, focus_step: float = 1 + ): + super(GenomicRegionBuilder, self).__init__() + self.__chromosome = chromosome_data.name + self.__chromosome_size_nt = chromosome_data.size_nt + assert focus > 0 + assert focus_step > 0 + self.__focus_style = (focus, focus_step) + + def __build_overlapping(self, size: int, step: int) -> List[List[GenomicRegion]]: + assert step < size + region_set_list: List[List[GenomicRegion]] = [] + for range_start in range(0, size, step): + genomic_region_set: List[GenomicRegion] = [] + for start in range(range_start, self.__chromosome_size_nt, step): + end = start + size + if end < self.__chromosome_size_nt: + genomic_region_set.append( + GenomicRegion( + (self.__chromosome, start, end), self.__focus_style + ) + ) + region_set_list.append(genomic_region_set) + return region_set_list + + def __build_non_overlapping( + self, size: int, step: int + ) -> List[List[GenomicRegion]]: + assert step == size + genomic_region_set: List[GenomicRegion] = [] + for start in range(0, self.__chromosome_size_nt, step): + end = start + size + if end <= self.__chromosome_size_nt: + genomic_region_set.append( + GenomicRegion((self.__chromosome, start, end), self.__focus_style) + ) + return [genomic_region_set] + + def build_by_number(self, n: int) -> List[List[GenomicRegion]]: + step: int = self.__chromosome_size_nt // n + return self.build_by_size(step, step) + + def build_by_size(self, size: int, step_style: float) -> List[List[GenomicRegion]]: + if step_style > 1: + step = int(step_style) + else: + step = int(size * step_style) + if step < size: + return self.__build_overlapping(size, step) + else: + return self.__build_non_overlapping(size, step) diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 443ff527..07350597 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -158,7 +158,7 @@ def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record yield parsed_record record = self.read_next_record() - def walk_region(self, region: GenomicRegion) -> Iterator[List[Record]]: + def walk_single_region(self, region: GenomicRegion) -> Iterator[List[Record]]: assert region.chromosome == self.__chromosome focus_start, focus_end = region.focus record_list = [r for r in self.buffer(focus_start, focus_end)] @@ -177,3 +177,19 @@ def walk_region(self, region: GenomicRegion) -> Iterator[List[Record]]: ) yield record_list focus_start, focus_end = region.focus + + def walk_multiple_regions(self, region_set_list: List[List[GenomicRegion]]) -> None: + for region_set_idx in range(len(region_set_list)): + region_set = region_set_list[region_set_idx] + for region_idx in range(len(region_set)): + region = region_set[region_idx] + for record_set in self.walk_single_region(region): + logging.info( + " ".join( + [ + f"Window {region_set_idx}.{region_idx}", + f"({region.focus}):", + f"read {len(record_set)} records", + ] + ) + ) From 5671620376f80ff8448a778a1bb5d44e8a27a2af Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 22:11:54 +0100 Subject: [PATCH 058/185] Implementing new query script --- ifpd2/scripts/__init__.py | 3 +- ifpd2/scripts/ifpd2.py | 1 + ifpd2/scripts/query2.py | 265 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 ifpd2/scripts/query2.py diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index 1984afdf..2a5dad2c 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -6,7 +6,7 @@ from ifpd2.scripts import arguments, ifpd2 from ifpd2.scripts import db, db_check, db_dump, db_info from ifpd2.scripts import db_make, db_merge, db_reindex -from ifpd2.scripts import query +from ifpd2.scripts import query, query2 import logging from rich.logging import RichHandler # type: ignore @@ -28,4 +28,5 @@ "db_merge", "db_reindex", "query", + "query2", ] diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 4f736517..fdb4d0e2 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -37,6 +37,7 @@ def main(): scripts.db.init_parser(subparsers) scripts.query.init_parser(subparsers) + scripts.query2.init_parser(subparsers) args = parser.parse_args() args = args.parse(args) diff --git a/ifpd2/scripts/query2.py b/ifpd2/scripts/query2.py new file mode 100644 index 00000000..43c1938f --- /dev/null +++ b/ifpd2/scripts/query2.py @@ -0,0 +1,265 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import argparse +from ifpd2.asserts import enable_rich_assert +from ifpd2.database import DataBase +from ifpd2.region import GenomicRegionBuilder +from ifpd2.walker2 import ChromosomeWalker +from ifpd2.logging import add_log_file_handler +import logging +import os + + +def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: + parser = subparsers.add_parser( + __name__.split(".")[-1], + description=""" + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta, aspernatur, + natus. Possimus recusandae distinctio, voluptatem fuga delectus laudantium ut, + inventore culpa sit amet ullam officiis, tenetur nobis eius vitae dolore. + """, + formatter_class=argparse.RawDescriptionHelpFormatter, + help="Check integrity of a database.", + ) + + parser.add_argument( + "database", metavar="database", type=str, help="Path to database folder." + ) + parser.add_argument( + "chrom", + type=str, + help="Database feature to query for a probe.", + ) + + query = parser.add_argument_group("query arguments") + query.add_argument( + "--region", + metavar=("chromStart", "chromEnd"), + type=int, + nargs=2, + help="""Start and end locations (space-separated) of the region of interest. + When a region is not provided (or start/end coincide), + the whole feature is queried.""", + ) + query.add_argument( + "-X", + metavar="probes", + type=int, + default=None, + help="""Number of probes to query for. Default: 1.""", + ) + query.add_argument( + "-N", + metavar="oligos", + type=int, + default=48, + help="""Number of oligos per probe. Default: 48.""", + ) + query.add_argument( + "-D", + metavar="dist", + type=float, + default=2, + help="""Minimum distance between consecutive oligos. Default: 2""", + ) + query.add_argument( + "--single", + action="store_const", + dest="single", + const=True, + default=False, + help="""Useful flag for + designing single probes. Same as "-X 1 -w 1". It overrides -X and -w, and + deactivate -W, if specified.""", + ) + + window = parser.add_argument_group("window arguments") + window.add_argument( + "-W", metavar="size", type=int, default=None, help="""Window size.""" + ) + window.add_argument( + "-w", + metavar="shift", + type=float, + default=0.1, + help="""Window shift as a percentage of window size. Default: 0.1""", + ) + + focus = parser.add_argument_group("focus region arguments") + focus.add_argument( + "-R", + metavar="size", + type=float, + default=8000, + help="""Central focus region size, either in nt or as fraction of window + size. Default: 8000""", + ) + focus.add_argument( + "-r", + metavar="step", + type=float, + default=1000, + help="""Central focus region step, either in nt or as fraction of central + focus region size. Default: 1000""", + ) + + filters = parser.add_argument_group("filter arguments") + filters.add_argument( + "-F", + metavar="nOT", + type=int, + nargs=2, + default=[0, 99], + help="""Acceptable range of off-targets. Default: [0,99]""", + ) + filters.add_argument( + "-G", + metavar="dG", + type=float, + nargs=2, + default=[0.0, 0.5], + help="""Acceptable range of secondary structure delta free energy. Either + as absolute kcal/mol os as a fraction of delta free energy of hybridization. + Default: [.0,.5]""", + ) + filters.add_argument( + "-o", + metavar="step", + type=float, + default=0.1, + help="""Step for oligo score relaxation. Default: .1""", + ) + filters.add_argument( + "-t", + metavar="temp", + type=float, + default=10.0, + help="""Melting temperature range half-width. Default: 10.""", + ) + filters.add_argument( + "-P", + metavar="size", + type=int, + default=10000, + help="""Maximum probe size in nt. Default: 10000""", + ) + filters.add_argument( + "-H", + metavar="size", + type=float, + default=0.1, + help="""Maximum hole size in a probe as fraction of probe size. + Default: .1""", + ) + + probe_set = parser.add_argument_group("probe set arguments") + probe_set.add_argument( + "-I", + metavar="oligos", + type=float, + default=0.5, + help="""Probe oligo intersection threshold as shared oligo fraction. + Default: .5""", + ) + + advanced = parser.add_argument_group("advanced arguments") + advanced.add_argument( + "-k", + metavar="length", + type=int, + help="""Oligo length in nt. Use this when all oligos in the + database have the same length, for optimization purposes.""", + ) + advanced.add_argument( + "-O", + metavar="outpath", + type=str, + default=".", + help="Path to output directory. Default to current folder.", + ) + advanced.add_argument( + "--threads", + type=int, + default=1, + help="Number of threads for parallelization. Default: 1", + ) + advanced.add_argument( + "--reuse", + action="store_const", + dest="reuse", + const=True, + default=False, + help="Avoid overwriting previous database walk, load instead.", + ) + + parser.set_defaults(parse=parse_arguments, run=run) + + return parser + + +def assert_reusable(args): + assert_msg = " ".join( + [ + "output path should NOT direct towards an existing directory", + "or file. Use '--reuse' to load previous results.", + f"Provided path '{args.O}'", + ] + ) + assert not os.path.isfile(args.O), assert_msg + " leads to a file" + if not args.reuse: + assert not os.path.isdir(args.O), assert_msg + " leads to a directory." + + +@enable_rich_assert +def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: + assert not all([isinstance(args.X, type(None)), isinstance(args.W, type(None))]) + if args.region is None: + args.region = [0, -1] + else: + assert args.region[1] > args.region[0] + + args.R = int(args.R) if args.R > 1 else float(args.R) + args.r = int(args.r) if args.r > 1 else float(args.r) + + if args.single: + args.X = 1 + args.w = None + args.W = None + + assert args.X is not None or args.W is not None + if args.X is not None and args.W is not None: + logging.warning("cannot combine -X and -W. Using -X.") + args.W = None + args.w = None + if args.W is not None and args.w is None: + args.w = 1 + + assert_reusable(args) + + return args + + +@enable_rich_assert +def run(args: argparse.Namespace) -> None: + if not os.path.isdir(args.O): + os.mkdir(args.O) + add_log_file_handler("{0}/{1}.log".format(args.O, "ifpd2-main")) + + DB = DataBase(args.database) + + RB = GenomicRegionBuilder(DB.get_chromosome(args.chrom.encode())) + if args.X is not None: + region_set_list = RB.build_by_number(args.X) + else: + region_set_list = RB.build_by_size(args.W, args.w) + + walker = ChromosomeWalker(DB, args.chrom.encode()) + walker.walk_multiple_regions(region_set_list) + + # print((DB, RB, walker, region_set_list)) + + logging.info("Done. :thumbs_up: :smiley:") + logging.shutdown() From 35e00ed1426d8a12cf0ea406f3fbf694338892c4 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 22:13:54 +0100 Subject: [PATCH 059/185] Fixed decoding --- ifpd2/chromosome.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index d0884381..f94f318b 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -199,7 +199,7 @@ def _build_index( """ assert index_bin_size > 0 indexing_track = progress.add_task( - f"indexing {self._name}.bin", + f"indexing {self._name.decode()}.bin", total=chromosome_db.shape[0], transient=True, ) From e8951aca1b2f49830dcf53779e75cc020bf78ccd Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 22:28:08 +0100 Subject: [PATCH 060/185] Added docstrings --- ifpd2/region.py | 126 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 112 insertions(+), 14 deletions(-) diff --git a/ifpd2/region.py b/ifpd2/region.py index 521823ee..f78a63fe 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -29,6 +29,13 @@ def __init__( self.__init_focus(*focus_style) def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: + """Initialize region coordinates. + + Arguments: + chrom {bytes} -- chromosome name + chromStart {int} -- chromosome start position (usually 0) + chromEnd {int} -- chromosome end position + """ assert 0 != len(chrom), "chromosome cannot be empty" assert ( chromStart >= 0 @@ -40,23 +47,61 @@ def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: self.__chromStart = chromStart self.__chromEnd = chromEnd - def __init_focus(self, focus: float, focus_step: float) -> None: - if focus > 1: - assert focus <= self.__chromEnd - self.__chromStart - self.__focusSize = int(focus) + def __init_focus_size(self, focus_style: float) -> None: + """Initialize focus region size. + + Set the size of the central focus region. When focus style is lower than or + equal to 1, it is considered to be a fraction of the genomic region size. When + it is greater than 1, instead, it is considered to be the size in nt. + + Arguments: + focus_style {float} -- focus region size in nt + or as a fraction of the genomic region + """ + assert focus_style > 0 + if focus_style > 1: + assert focus_style <= self.__chromEnd - self.__chromStart + self.__focusSize = int(focus_style) + else: + self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus_style) + + def __init_focus_step(self, step_style: float) -> None: + """Initialize step for focus region growth. + + Set the step at which the focus region grows. When step style is lower than or + equal to 1, it is considered to be a fraction of the focus region size. When + it is greater than 1, instead, it is considered to be in nt. + + Arguments: + step_style {float} -- focus region growth step in nt + or as a fraction of the focus region + """ + assert step_style > 0 + if step_style > 1: + self.__focusStep = int(step_style) else: - self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus) + self.__focusStep = int(self.__focusSize * step_style) + + def __init_focus(self, focus_style: float, focus_step_style: float) -> None: + """Initialize focus region. + + More details on focus and focus step style in the __init_focus_size and + __init_focus_step functions. + + Arguments: + focus_style {float} -- focus region size in nt + or as a fraction of the genomic region + focus_step_style {float} -- focus region growth step in nt + or as a fraction of the focus region + """ + self.__init_focus_size(focus_style) + self.__init_focus_step(focus_step_style) self.__focusStart = int( (self.__chromStart + self.__chromEnd) / 2 - self.__focusSize / 2 ) self.__focusEnd = int( (self.__chromStart + self.__chromEnd) / 2 + self.__focusSize / 2 ) - assert focus_step > 0 - if focus_step > 1: - self.__focusStep = int(focus_step) - else: - self.__focusStep = int(self.__focusSize * focus_step) @property def chromosome(self) -> bytes: @@ -83,9 +128,15 @@ def focus_step(self) -> int: return self.__focusStep def can_increase_focus(self) -> bool: + """Check if the focus region can grow more + + Returns: + bool -- whether growth is possible + """ return self.focus != self.region def increase_focus(self) -> None: + """Grow the focus region.""" if self.can_increase_focus(): logging.warning("cannot increase the focus region any further") self.__focusStart = max( @@ -102,16 +153,31 @@ class GenomicRegionBuilder(object): __focus_style: Tuple[float, float] def __init__( - self, chromosome_data: ChromosomeData, focus: float = 1, focus_step: float = 1 + self, + chromosome_data: ChromosomeData, + focus_style: float = 1, + focus_step_style: float = 1, ): super(GenomicRegionBuilder, self).__init__() self.__chromosome = chromosome_data.name self.__chromosome_size_nt = chromosome_data.size_nt - assert focus > 0 - assert focus_step > 0 - self.__focus_style = (focus, focus_step) + assert focus_style > 0 + assert focus_step_style > 0 + self.__focus_style = (focus_style, focus_step_style) def __build_overlapping(self, size: int, step: int) -> List[List[GenomicRegion]]: + """Build lists of regions. + + Windows are generated based on size and step. Step should be smaller than size. + Overlapping regions are placed in separate lists. + + Arguments: + size {int} -- region size in nt + step {int} -- region step in nt + + Returns: + List[List[GenomicRegion]] -- generated region lists + """ assert step < size region_set_list: List[List[GenomicRegion]] = [] for range_start in range(0, size, step): @@ -130,6 +196,15 @@ def __build_overlapping(self, size: int, step: int) -> List[List[GenomicRegion]] def __build_non_overlapping( self, size: int, step: int ) -> List[List[GenomicRegion]]: + """Build a list of non-overlapping regions. + + Arguments: + size {int} -- region size in nt + step {int} -- region step in nt + + Returns: + List[List[GenomicRegion]] -- generated region lists + """ assert step == size genomic_region_set: List[GenomicRegion] = [] for start in range(0, self.__chromosome_size_nt, step): @@ -141,10 +216,33 @@ def __build_non_overlapping( return [genomic_region_set] def build_by_number(self, n: int) -> List[List[GenomicRegion]]: + """Build a number of regions. + + Build a number of region instances covering the current chromosome. + + Arguments: + n {int} -- number of regions + + Returns: + List[List[GenomicRegion]] -- generated region lists + """ step: int = self.__chromosome_size_nt // n return self.build_by_size(step, step) def build_by_size(self, size: int, step_style: float) -> List[List[GenomicRegion]]: + """Build regions by size and step (allows for overlap). + + Build region instances based on their size and step. Step is the distance + between the start of a region and the start of the next region. Overlapping + regions are placed in separate lists. + + Arguments: + size {int} -- region size in nt + step_style {float} -- region step in nt or as a fraction of the region size + + Returns: + List[List[GenomicRegion]] -- generated region lists + """ if step_style > 1: step = int(step_style) else: From 1fae13700111908f79d748fe94abb3e760b39574 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 16 Mar 2021 22:45:46 +0100 Subject: [PATCH 061/185] Hidden some prototype code tagged by vulture --- ifpd2/database.py | 6 +++--- ifpd2/region.py | 6 +++--- ifpd2/scripts/arguments.py | 15 ++++++++------- ifpd2/walker2.py | 26 +++++++++++++------------- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 3f1affd0..ed5c4767 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -172,9 +172,9 @@ def chromosome_list(self) -> List[bytes]: def chromosome_sizes_nt(self) -> Dict[bytes, int]: return self._chromosomes.sizes_nt - @property - def chromosome_sizes_bytes(self) -> Dict[bytes, int]: - return self._chromosomes.sizes_bytes + # @property + # def chromosome_sizes_bytes(self) -> Dict[bytes, int]: + # return self._chromosomes.sizes_bytes @property def chromosome_recordnos(self) -> Dict[bytes, int]: diff --git a/ifpd2/region.py b/ifpd2/region.py index f78a63fe..16eb0635 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -123,9 +123,9 @@ def region(self) -> Tuple[int, int]: def focus(self) -> Tuple[int, int]: return (self.__focusStart, self.__focusEnd) - @property - def focus_step(self) -> int: - return self.__focusStep + # @property + # def focus_step(self) -> int: + # return self.__focusStep def can_increase_focus(self) -> bool: """Check if the focus region can grow more diff --git a/ifpd2/scripts/arguments.py b/ifpd2/scripts/arguments.py index 6181b803..f6fd9fbd 100644 --- a/ifpd2/scripts/arguments.py +++ b/ifpd2/scripts/arguments.py @@ -5,9 +5,10 @@ import argparse from ifpd2.const import __version__ -import multiprocessing as mp import sys +# import multiprocessing as mp + def add_version_option(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: parser.add_argument( @@ -16,9 +17,9 @@ def add_version_option(parser: argparse.ArgumentParser) -> argparse.ArgumentPars return parser -def check_threads(threads: int) -> int: - if threads > mp.cpu_count(): - return mp.cpu_count() - elif threads <= 0: - return 1 - return threads +# def check_threads(threads: int) -> int: +# if threads > mp.cpu_count(): +# return mp.cpu_count() +# elif threads <= 0: +# return 1 +# return threads diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 07350597..0f2a4ce2 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -55,16 +55,16 @@ def read_next_record(self) -> bytes: """ return self.__IH.read(self.__db.record_byte_size) - def read_previous_record(self) -> bytes: - """Read the previous record. + # def read_previous_record(self) -> bytes: + # """Read the previous record. - The buffer pointer does not move. + # The buffer pointer does not move. - Returns: - bytes -- record bytes - """ - self.rewind() - return self.read_next_record() + # Returns: + # bytes -- record bytes + # """ + # self.rewind() + # return self.read_next_record() def read_next_record_and_rewind(self) -> bytes: """Reads the next record. @@ -95,12 +95,12 @@ def rewind(self) -> None: """ self.__IH.seek(max(self.__IH.tell() - self.__db.record_byte_size, 0)) - def skip(self) -> None: - """Skip one record. + # def skip(self) -> None: + # """Skip one record. - The buffer pointer moves to the beginning of the following record. - """ - self.__IH.seek(self.__IH.tell() + self.__db.record_byte_size) + # The buffer pointer moves to the beginning of the following record. + # """ + # self.__IH.seek(self.__IH.tell() + self.__db.record_byte_size) def fastforward(self, start_from_nt: int) -> None: """Jump to the first record at a given position. From 90f93c3fa52b3fa7cb59598cb4f07389b20d6ca2 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 08:54:30 +0100 Subject: [PATCH 062/185] Fixed links --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 54235a34..7b05d5f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,8 +5,8 @@ description = "An iFISH probe design pipeline (II)" authors = ["Gabriele Girelli "] license = "MIT" readme = "README.md" -homepage = "https://github.com/ggirelli/iFISH-Probe-Design" -repository = "https://github.com/ggirelli/iFISH-Probe-Design" +homepage = "https://github.com/ggirelli/ifpd2" +repository = "https://github.com/ggirelli/ifpd2" keywords = ["biology", "cell", "DNA", "RNA", "FISH", "fluorescence", "hybridization"] classifiers = [ "Development Status :: 3 - Beta", From 262d501e1bf4100e6cb93ed8a847f45347ff5fda Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 10:07:03 +0100 Subject: [PATCH 063/185] Fixed link to repo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c27825d6..db9dc880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,4 +19,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [1.0.0-alpha] - 2021-02-26 -[1.0.0-alpha] https://github.com/ggirelli/ifpd/releases/tag/v1.0.0-alpha +[1.0.0-alpha] https://github.com/ggirelli/ifpd2/releases/tag/v1.0.0-alpha From d31a1ad0d9e1264b7167c1b878d5702064907f3c Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 16:54:02 +0100 Subject: [PATCH 064/185] Fixed threads check. --- ifpd2/walker.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index a684851d..7a6bf238 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -274,8 +274,7 @@ def threads(self): @threads.setter def threads(self, threads): ass.ert_type(threads, int, threads) - threads = max(1, threads) - threads = min(mp.cpu_count(), threads) + threads = max(1, min(threads, mp.cpu_count())) self._threads = threads @property @@ -465,7 +464,7 @@ def __end_walk(self, exec_results): def __start_walk( self, *args, start_from_nt: int = 0, end_at_nt: int = -1, **kwargs ): - self.pool = mp.Pool(np.min([self.threads, mp.cpu_count()])) + self.pool = mp.Pool(max(1, min(self.threads, mp.cpu_count()))) self.logger.info(f"Prepared a pool of {self.threads} threads.") self._preprocess_window() From e61f20a195962a6dbbd525bbfeea44aa109b1b76 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 17:36:36 +0100 Subject: [PATCH 065/185] Updated version management. --- ifpd2/__init__.py | 8 +++++++- ifpd2/const.py | 2 -- ifpd2/scripts/arguments.py | 10 +--------- ifpd2/scripts/ifpd2.py | 2 +- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index 6e68e36e..124604a8 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -3,12 +3,18 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2.const import __version__ from ifpd2 import asserts, io from ifpd2 import walker, walker2 from ifpd2 import chromosome, database, region from ifpd2 import oligo, probe, probe_set +from importlib.metadata import version, PackageNotFoundError + +try: + __version__ = version(__name__) +except PackageNotFoundError: + pass + __all__ = [ "__version__", "asserts", diff --git a/ifpd2/const.py b/ifpd2/const.py index 171c8a8f..5304343c 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -3,8 +3,6 @@ @contact: gigi.ga90@gmail.com """ -__version__ = "1.0.0-alpha" - dtype_melting = dict( [ ("name", "|S"), diff --git a/ifpd2/scripts/arguments.py b/ifpd2/scripts/arguments.py index f6fd9fbd..ce65f497 100644 --- a/ifpd2/scripts/arguments.py +++ b/ifpd2/scripts/arguments.py @@ -4,7 +4,7 @@ """ import argparse -from ifpd2.const import __version__ +from ifpd2 import __version__ import sys # import multiprocessing as mp @@ -15,11 +15,3 @@ def add_version_option(parser: argparse.ArgumentParser) -> argparse.ArgumentPars "--version", action="version", version=f"{sys.argv[0]} {__version__}" ) return parser - - -# def check_threads(threads: int) -> int: -# if threads > mp.cpu_count(): -# return mp.cpu_count() -# elif threads <= 0: -# return 1 -# return threads diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index fdb4d0e2..8a3eda2a 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -4,7 +4,7 @@ """ import argparse -from ifpd2.const import __version__ +from ifpd2 import __version__ from ifpd2.scripts import arguments as ap from ifpd2 import scripts import sys From 5a0c7b8a7eae78020b1c954b6bac1108f3d9d61d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 21:42:32 +0100 Subject: [PATCH 066/185] Dropped support for Python 3.7 --- .github/workflows/pythonpackage.yml | 2 +- README.md | 6 +- poetry.lock | 128 ++++++++++------------------ pyproject.toml | 3 +- requirements.txt | 11 +++ 5 files changed, 60 insertions(+), 90 deletions(-) create mode 100644 requirements.txt diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 3f4261d6..2b5702dc 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -37,7 +37,7 @@ jobs: fail-fast: true matrix: os: ["ubuntu-latest"] - python-version: [3.7, 3.8, 3.9] + python-version: [3.8, 3.9] runs-on: ${{ matrix.os }} steps: # Checkout repo and setup python diff --git a/README.md b/README.md index ffc0fd25..1339734a 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ [PyPi](https://pypi.org/project/ifpd2/) | [docs](https://ggirelli.github.io/ifpd2/) -`ifpd2` is a Python3.7+ package containing tools for selection of complementary oligonucleotides to build iFISH probes. It is based on our previous `ifpd` package, but works with a different and more detailed database format, allowing for more precise control on the probe design process. Read the online [documentation](https://ggirelli.github.io/ifpd2/) for more details. +`ifpd2` is a Python3.8+ package containing tools for selection of complementary oligonucleotides to build iFISH probes. It is based on our previous `ifpd` package, but works with a different and more detailed database format, allowing for more precise control on the probe design process. Read the online [documentation](https://ggirelli.github.io/ifpd2/) for more details. ## Requirements -`ifpd2` is fully implemented in Python3.7+, thus you need the corresponding Python version to run it. Check out [here](https://realpython.com/installing-python/) how to install Python+ on your machine if you don't have it yet. +`ifpd2` is fully implemented in Python3.8+, thus you need the corresponding Python version to run it. Check out [here](https://realpython.com/installing-python/) how to install Python+ on your machine if you don't have it yet. -`ifpd2` has been tested with Python 3.7 and 3.8. We recommend installing it using `pipx` (see [below](https://github.com/ggirelli/ifpd2#installation)) to avoid dependency conflicts with other packages. The packages it depends on are listed in our [dependency graph](https://github.com/ggirelli/ifpd2/network/dependencies). We use [`poetry`](https://github.com/python-poetry/poetry) to handle our dependencies. +`ifpd2` has been tested with Python 3.8 and 3.9. We recommend installing it using `pipx` (see [below](https://github.com/ggirelli/ifpd2#installation)) to avoid dependency conflicts with other packages. The packages it depends on are listed in our [dependency graph](https://github.com/ggirelli/ifpd2/network/dependencies). We use [`poetry`](https://github.com/python-poetry/poetry) to handle our dependencies. ## Installation diff --git a/poetry.lock b/poetry.lock index 3309a265..95d6d9b2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -77,22 +77,6 @@ python-versions = "*" [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] -[[package]] -name = "importlib-metadata" -version = "3.7.3" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - [[package]] name = "iniconfig" version = "1.1.1" @@ -160,9 +144,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - [package.extras] dev = ["pre-commit", "tox"] @@ -202,7 +183,6 @@ python-versions = ">=3.6" atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<1.0.0a1" @@ -233,7 +213,7 @@ python-versions = "*" [[package]] name = "regex" -version = "2020.11.13" +version = "2021.3.17" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -301,22 +281,10 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "zipp" -version = "3.4.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - [metadata] lock-version = "1.1" -python-versions = "^3.7.1" -content-hash = "a61d0c5369dda4bf4e058692e6daa118f099aa9be37a2f860c4518f997845848" +python-versions = "^3.8" +content-hash = "01c025bacf285bcd0c6ff4346600f79d12df935acdee9a3355b16149942cfaf3" [metadata.files] appdirs = [ @@ -346,10 +314,6 @@ commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -importlib-metadata = [ - {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"}, - {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"}, -] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -439,47 +403,47 @@ pytz = [ {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, ] regex = [ - {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa"}, - {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6"}, - {file = "regex-2020.11.13-cp36-cp36m-win32.whl", hash = "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e"}, - {file = "regex-2020.11.13-cp36-cp36m-win_amd64.whl", hash = "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884"}, - {file = "regex-2020.11.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba"}, - {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538"}, - {file = "regex-2020.11.13-cp37-cp37m-win32.whl", hash = "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4"}, - {file = "regex-2020.11.13-cp37-cp37m-win_amd64.whl", hash = "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444"}, - {file = "regex-2020.11.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5"}, - {file = "regex-2020.11.13-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b"}, - {file = "regex-2020.11.13-cp38-cp38-win32.whl", hash = "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c"}, - {file = "regex-2020.11.13-cp38-cp38-win_amd64.whl", hash = "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683"}, - {file = "regex-2020.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9"}, - {file = "regex-2020.11.13-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c"}, - {file = "regex-2020.11.13-cp39-cp39-win32.whl", hash = "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f"}, - {file = "regex-2020.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d"}, - {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, + {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"}, + {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"}, + {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"}, + {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"}, + {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"}, + {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"}, + {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"}, + {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"}, + {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"}, + {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"}, + {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"}, + {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"}, + {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ {file = "rich-9.13.0-py3-none-any.whl", hash = "sha256:9004f6449c89abadf689dad6f92393e760b8c3a8a8c4ea6d8d474066307c0e66"}, @@ -534,7 +498,3 @@ typing-extensions = [ {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] -zipp = [ - {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, - {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, -] diff --git a/pyproject.toml b/pyproject.toml index 7b05d5f7..462f6aca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Operating System :: Unix", "Operating System :: POSIX :: Linux", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Typing :: Typed", @@ -28,7 +27,7 @@ include = [ ] [tool.poetry.dependencies] -python = "^3.7.1" +python = "^3.8" numpy = "^1.20.1" pandas = "^1.2.2" rich = "^9.10.0" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..a4288de0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" +commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0" +numpy==1.20.1; python_version >= "3.7" +pandas==1.2.3; python_full_version >= "3.7.1" +pygments==2.8.1; python_version >= "3.6" and python_version < "4.0" +python-dateutil==2.8.1; python_full_version >= "3.7.1" +pytz==2021.1; python_full_version >= "3.7.1" +rich==9.13.0; python_version >= "3.6" and python_version < "4.0" +six==1.15.0; python_full_version >= "3.7.1" +tqdm==4.59.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") +typing-extensions==3.7.4.3; python_version >= "3.6" and python_version < "4.0" From 13f7c439fe166e95461ecff328a68dc39e9f05f2 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 23 Mar 2021 22:23:16 +0100 Subject: [PATCH 067/185] Removed default number of queried probes. --- CHANGELOG.md | 1 + ifpd2/scripts/query.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db9dc880..88bf1280 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - New database format. - `dbchk` entry point changed to `db check`. - Dropped sequence length column, as it can be inferred from the end/start columns. +- Removed `-X` default from `query`. ## [1.0.0-alpha] - 2021-02-26 diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index e66e8eb1..2af1fe1a 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -48,8 +48,7 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars "-X", metavar="probes", type=int, - default=1, - help="""Number of probes to query for. Default: 1.""", + help="""Number of probes to query for.""", ) query.add_argument( "-N", From 446402f94af8aa8379394461833faaea209fed1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Mar 2021 08:56:59 +0000 Subject: [PATCH 068/185] Bump rich from 9.13.0 to 10.0.0 (#19) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 95d6d9b2..1c089be6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "9.13.0" +version = "10.0.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -284,7 +284,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "01c025bacf285bcd0c6ff4346600f79d12df935acdee9a3355b16149942cfaf3" +content-hash = "53a1d5688159f9e8474b25ac22bab36d1ca885d8280e2ba5e2a23474f5bb70b5" [metadata.files] appdirs = [ @@ -446,8 +446,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-9.13.0-py3-none-any.whl", hash = "sha256:9004f6449c89abadf689dad6f92393e760b8c3a8a8c4ea6d8d474066307c0e66"}, - {file = "rich-9.13.0.tar.gz", hash = "sha256:d59e94a0e3e686f0d268fe5c7060baa1bd6744abca71b45351f5850a3aaa6764"}, + {file = "rich-10.0.0-py3-none-any.whl", hash = "sha256:01b3fcc305ae71b9ade4a645b6e371d395c6cd9ba52dcf180bfba69ef05c13b5"}, + {file = "rich-10.0.0.tar.gz", hash = "sha256:4674bd3056a72bb282ad581e3f8092dc110cdcc456b5ba76e34965cb85a69724"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, diff --git a/pyproject.toml b/pyproject.toml index 462f6aca..482fad80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ include = [ python = "^3.8" numpy = "^1.20.1" pandas = "^1.2.2" -rich = "^9.10.0" +rich = ">=9.10,<11.0" tqdm = "^4.58.0" [tool.poetry.dev-dependencies] From a0613f72f9fa9e29f9195f39df5823de4298b967 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Mar 2021 10:33:20 +0000 Subject: [PATCH 069/185] Bump numpy from 1.20.1 to 1.20.2 (#18) --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1c089be6..3657aaaa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,7 +95,7 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.20.1" +version = "1.20.2" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -323,30 +323,30 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae61f02b84a0211abb56462a3b6cd1e7ec39d466d3160eb4e1da8bf6717cdbeb"}, - {file = "numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:65410c7f4398a0047eea5cca9b74009ea61178efd78d1be9847fac1d6716ec1e"}, - {file = "numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d7e27442599104ee08f4faed56bb87c55f8b10a5494ac2ead5c98a4b289e61f"}, - {file = "numpy-1.20.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4ed8e96dc146e12c1c5cdd6fb9fd0757f2ba66048bf94c5126b7efebd12d0090"}, - {file = "numpy-1.20.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ecb5b74c702358cdc21268ff4c37f7466357871f53a30e6f84c686952bef16a9"}, - {file = "numpy-1.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b9410c0b6fed4a22554f072a86c361e417f0258838957b78bd063bde2c7f841f"}, - {file = "numpy-1.20.1-cp37-cp37m-win32.whl", hash = "sha256:3d3087e24e354c18fb35c454026af3ed8997cfd4997765266897c68d724e4845"}, - {file = "numpy-1.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:89f937b13b8dd17b0099c7c2e22066883c86ca1575a975f754babc8fbf8d69a9"}, - {file = "numpy-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a1d7995d1023335e67fb070b2fae6f5968f5be3802b15ad6d79d81ecaa014fe0"}, - {file = "numpy-1.20.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:60759ab15c94dd0e1ed88241fd4fa3312db4e91d2c8f5a2d4cf3863fad83d65b"}, - {file = "numpy-1.20.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:125a0e10ddd99a874fd357bfa1b636cd58deb78ba4a30b5ddb09f645c3512e04"}, - {file = "numpy-1.20.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c26287dfc888cf1e65181f39ea75e11f42ffc4f4529e5bd19add57ad458996e2"}, - {file = "numpy-1.20.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:7199109fa46277be503393be9250b983f325880766f847885607d9b13848f257"}, - {file = "numpy-1.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:72251e43ac426ff98ea802a931922c79b8d7596480300eb9f1b1e45e0543571e"}, - {file = "numpy-1.20.1-cp38-cp38-win32.whl", hash = "sha256:c91ec9569facd4757ade0888371eced2ecf49e7982ce5634cc2cf4e7331a4b14"}, - {file = "numpy-1.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:13adf545732bb23a796914fe5f891a12bd74cf3d2986eed7b7eba2941eea1590"}, - {file = "numpy-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104f5e90b143dbf298361a99ac1af4cf59131218a045ebf4ee5990b83cff5fab"}, - {file = "numpy-1.20.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:89e5336f2bec0c726ac7e7cdae181b325a9c0ee24e604704ed830d241c5e47ff"}, - {file = "numpy-1.20.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:032be656d89bbf786d743fee11d01ef318b0781281241997558fa7950028dd29"}, - {file = "numpy-1.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:66b467adfcf628f66ea4ac6430ded0614f5cc06ba530d09571ea404789064adc"}, - {file = "numpy-1.20.1-cp39-cp39-win32.whl", hash = "sha256:12e4ba5c6420917571f1a5becc9338abbde71dd811ce40b37ba62dec7b39af6d"}, - {file = "numpy-1.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:9c94cab5054bad82a70b2e77741271790304651d584e2cdfe2041488e753863b"}, - {file = "numpy-1.20.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:9eb551d122fadca7774b97db8a112b77231dcccda8e91a5bc99e79890797175e"}, - {file = "numpy-1.20.1.zip", hash = "sha256:3bc63486a870294683980d76ec1e3efc786295ae00128f9ea38e2c6e74d5a60a"}, + {file = "numpy-1.20.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e9459f40244bb02b2f14f6af0cd0732791d72232bbb0dc4bab57ef88e75f6935"}, + {file = "numpy-1.20.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a8e6859913ec8eeef3dbe9aed3bf475347642d1cdd6217c30f28dee8903528e6"}, + {file = "numpy-1.20.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:9cab23439eb1ebfed1aaec9cd42b7dc50fc96d5cd3147da348d9161f0501ada5"}, + {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9c0fab855ae790ca74b27e55240fe4f2a36a364a3f1ebcfd1fb5ac4088f1cec3"}, + {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:61d5b4cf73622e4d0c6b83408a16631b670fc045afd6540679aa35591a17fe6d"}, + {file = "numpy-1.20.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d15007f857d6995db15195217afdbddfcd203dfaa0ba6878a2f580eaf810ecd6"}, + {file = "numpy-1.20.2-cp37-cp37m-win32.whl", hash = "sha256:d76061ae5cab49b83a8cf3feacefc2053fac672728802ac137dd8c4123397677"}, + {file = "numpy-1.20.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bad70051de2c50b1a6259a6df1daaafe8c480ca98132da98976d8591c412e737"}, + {file = "numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:719656636c48be22c23641859ff2419b27b6bdf844b36a2447cb39caceb00935"}, + {file = "numpy-1.20.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:aa046527c04688af680217fffac61eec2350ef3f3d7320c07fd33f5c6e7b4d5f"}, + {file = "numpy-1.20.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2428b109306075d89d21135bdd6b785f132a1f5a3260c371cee1fae427e12727"}, + {file = "numpy-1.20.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e8e4fbbb7e7634f263c5b0150a629342cc19b47c5eba8d1cd4363ab3455ab576"}, + {file = "numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:edb1f041a9146dcf02cd7df7187db46ab524b9af2515f392f337c7cbbf5b52cd"}, + {file = "numpy-1.20.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:c73a7975d77f15f7f68dacfb2bca3d3f479f158313642e8ea9058eea06637931"}, + {file = "numpy-1.20.2-cp38-cp38-win32.whl", hash = "sha256:6c915ee7dba1071554e70a3664a839fbc033e1d6528199d4621eeaaa5487ccd2"}, + {file = "numpy-1.20.2-cp38-cp38-win_amd64.whl", hash = "sha256:471c0571d0895c68da309dacee4e95a0811d0a9f9f532a48dc1bea5f3b7ad2b7"}, + {file = "numpy-1.20.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4703b9e937df83f5b6b7447ca5912b5f5f297aba45f91dbbbc63ff9278c7aa98"}, + {file = "numpy-1.20.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:abc81829c4039e7e4c30f7897938fa5d4916a09c2c7eb9b244b7a35ddc9656f4"}, + {file = "numpy-1.20.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:377751954da04d4a6950191b20539066b4e19e3b559d4695399c5e8e3e683bf6"}, + {file = "numpy-1.20.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:6e51e417d9ae2e7848314994e6fc3832c9d426abce9328cf7571eefceb43e6c9"}, + {file = "numpy-1.20.2-cp39-cp39-win32.whl", hash = "sha256:780ae5284cb770ade51d4b4a7dce4faa554eb1d88a56d0e8b9f35fca9b0270ff"}, + {file = "numpy-1.20.2-cp39-cp39-win_amd64.whl", hash = "sha256:924dc3f83de20437de95a73516f36e09918e9c9c18d5eac520062c49191025fb"}, + {file = "numpy-1.20.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:97ce8b8ace7d3b9288d88177e66ee75480fb79b9cf745e91ecfe65d91a856042"}, + {file = "numpy-1.20.2.zip", hash = "sha256:878922bf5ad7550aa044aa9301d417e2d3ae50f0f577de92051d739ac6096cee"}, ] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, From fd6db3913e0233d6a1565b1c1a48c20ab0068817 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Mar 2021 08:40:09 +0000 Subject: [PATCH 070/185] Bump rich from 10.0.0 to 10.0.1 (#20) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3657aaaa..9a874986 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.0.0" +version = "10.0.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -446,8 +446,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.0.0-py3-none-any.whl", hash = "sha256:01b3fcc305ae71b9ade4a645b6e371d395c6cd9ba52dcf180bfba69ef05c13b5"}, - {file = "rich-10.0.0.tar.gz", hash = "sha256:4674bd3056a72bb282ad581e3f8092dc110cdcc456b5ba76e34965cb85a69724"}, + {file = "rich-10.0.1-py3-none-any.whl", hash = "sha256:bd13f71c32692d08489f1dd90993308f6ab10d24b1cd28a71db8af771d8ee9f9"}, + {file = "rich-10.0.1.tar.gz", hash = "sha256:d5f620a067e5d5f9c6e8039d9b09d8bb7b730bca5c696ca7e32788b37c0b9fa5"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From f9715390a17e6f337f83ef392bf6279c0c5e1a2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Apr 2021 15:58:55 +0000 Subject: [PATCH 071/185] Bump tqdm from 4.59.0 to 4.60.0 (#23) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9a874986..1e080458 100644 --- a/poetry.lock +++ b/poetry.lock @@ -254,7 +254,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.59.0" +version = "4.60.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -458,8 +458,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"}, - {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"}, + {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, + {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, ] typed-ast = [ {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, From 99fe0bd1ea7341c3c5ad9d79c2c5624d95843166 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Apr 2021 15:59:38 +0000 Subject: [PATCH 072/185] Bump pytest from 6.2.2 to 6.2.3 (#22) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1e080458..37690301 100644 --- a/poetry.lock +++ b/poetry.lock @@ -173,7 +173,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.2" +version = "6.2.3" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -284,7 +284,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "53a1d5688159f9e8474b25ac22bab36d1ca885d8280e2ba5e2a23474f5bb70b5" +content-hash = "32817a3aef8fe3f33780462d7f9578f32f73894f3e2e777e8d401bed4feaf370" [metadata.files] appdirs = [ @@ -391,8 +391,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"}, - {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"}, + {file = "pytest-6.2.3-py3-none-any.whl", hash = "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc"}, + {file = "pytest-6.2.3.tar.gz", hash = "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, diff --git a/pyproject.toml b/pyproject.toml index 482fad80..781f70f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ rich = ">=9.10,<11.0" tqdm = "^4.58.0" [tool.poetry.dev-dependencies] -pytest = "^6.2.2" +pytest = "^6.2.3" black = "^20.8b1" [build-system] From bb319cbeb97acce79d2044f2cd4de9b057a52cb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Apr 2021 16:03:29 +0000 Subject: [PATCH 073/185] Bump rich from 10.0.1 to 10.1.0 (#21) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 37690301..810aa5fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.0.1" +version = "10.1.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -446,8 +446,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.0.1-py3-none-any.whl", hash = "sha256:bd13f71c32692d08489f1dd90993308f6ab10d24b1cd28a71db8af771d8ee9f9"}, - {file = "rich-10.0.1.tar.gz", hash = "sha256:d5f620a067e5d5f9c6e8039d9b09d8bb7b730bca5c696ca7e32788b37c0b9fa5"}, + {file = "rich-10.1.0-py3-none-any.whl", hash = "sha256:60cd6d6ea697a1704f2057e791e3062b506b5c74a6e2ad2ced71eccb37557259"}, + {file = "rich-10.1.0.tar.gz", hash = "sha256:8f05431091601888c50341697cfc421dc398ce37b12bca0237388ef9c7e2c9e9"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From d352095c22048c71f5aa20fd41faf29a6e5807bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Apr 2021 07:26:57 +0000 Subject: [PATCH 074/185] Bump pandas from 1.2.3 to 1.2.4 (#24) --- poetry.lock | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/poetry.lock b/poetry.lock index 810aa5fc..7751c928 100644 --- a/poetry.lock +++ b/poetry.lock @@ -114,7 +114,7 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.2.3" +version = "1.2.4" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -353,22 +353,22 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4d821b9b911fc1b7d428978d04ace33f0af32bb7549525c8a7b08444bce46b74"}, - {file = "pandas-1.2.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9f5829e64507ad10e2561b60baf285c470f3c4454b007c860e77849b88865ae7"}, - {file = "pandas-1.2.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:97b1954533b2a74c7e20d1342c4f01311d3203b48f2ebf651891e6a6eaf01104"}, - {file = "pandas-1.2.3-cp37-cp37m-win32.whl", hash = "sha256:5e3c8c60541396110586bcbe6eccdc335a38e7de8c217060edaf4722260b158f"}, - {file = "pandas-1.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8a051e957c5206f722e83f295f95a2cf053e890f9a1fba0065780a8c2d045f5d"}, - {file = "pandas-1.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a93e34f10f67d81de706ce00bf8bb3798403cabce4ccb2de10c61b5ae8786ab5"}, - {file = "pandas-1.2.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:46fc671c542a8392a4f4c13edc8527e3a10f6cb62912d856f82248feb747f06e"}, - {file = "pandas-1.2.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:43e00770552595c2250d8d712ec8b6e08ca73089ac823122344f023efa4abea3"}, - {file = "pandas-1.2.3-cp38-cp38-win32.whl", hash = "sha256:475b7772b6e18a93a43ea83517932deff33954a10d4fbae18d0c1aba4182310f"}, - {file = "pandas-1.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:72ffcea00ae8ffcdbdefff800284311e155fbb5ed6758f1a6110fc1f8f8f0c1c"}, - {file = "pandas-1.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:621c044a1b5e535cf7dcb3ab39fca6f867095c3ef223a524f18f60c7fee028ea"}, - {file = "pandas-1.2.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:0f27fd1adfa256388dc34895ca5437eaf254832223812afd817a6f73127f969c"}, - {file = "pandas-1.2.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:dbb255975eb94143f2e6ec7dadda671d25147939047839cd6b8a4aff0379bb9b"}, - {file = "pandas-1.2.3-cp39-cp39-win32.whl", hash = "sha256:d59842a5aa89ca03c2099312163ffdd06f56486050e641a45d926a072f04d994"}, - {file = "pandas-1.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:09761bf5f8c741d47d4b8b9073288de1be39bbfccc281d70b889ade12b2aad29"}, - {file = "pandas-1.2.3.tar.gz", hash = "sha256:df6f10b85aef7a5bb25259ad651ad1cc1d6bb09000595cab47e718cbac250b1d"}, + {file = "pandas-1.2.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c601c6fdebc729df4438ec1f62275d6136a0dd14d332fc0e8ce3f7d2aadb4dd6"}, + {file = "pandas-1.2.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8d4c74177c26aadcfb4fd1de6c1c43c2bf822b3e0fc7a9b409eeaf84b3e92aaa"}, + {file = "pandas-1.2.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b730add5267f873b3383c18cac4df2527ac4f0f0eed1c6cf37fcb437e25cf558"}, + {file = "pandas-1.2.4-cp37-cp37m-win32.whl", hash = "sha256:2cb7e8f4f152f27dc93f30b5c7a98f6c748601ea65da359af734dd0cf3fa733f"}, + {file = "pandas-1.2.4-cp37-cp37m-win_amd64.whl", hash = "sha256:2111c25e69fa9365ba80bbf4f959400054b2771ac5d041ed19415a8b488dc70a"}, + {file = "pandas-1.2.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:167693a80abc8eb28051fbd184c1b7afd13ce2c727a5af47b048f1ea3afefff4"}, + {file = "pandas-1.2.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:612add929bf3ba9d27b436cc8853f5acc337242d6b584203f207e364bb46cb12"}, + {file = "pandas-1.2.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:971e2a414fce20cc5331fe791153513d076814d30a60cd7348466943e6e909e4"}, + {file = "pandas-1.2.4-cp38-cp38-win32.whl", hash = "sha256:68d7baa80c74aaacbed597265ca2308f017859123231542ff8a5266d489e1858"}, + {file = "pandas-1.2.4-cp38-cp38-win_amd64.whl", hash = "sha256:bd659c11a4578af740782288cac141a322057a2e36920016e0fc7b25c5a4b686"}, + {file = "pandas-1.2.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9db70ffa8b280bb4de83f9739d514cd0735825e79eef3a61d312420b9f16b758"}, + {file = "pandas-1.2.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:298f0553fd3ba8e002c4070a723a59cdb28eda579f3e243bc2ee397773f5398b"}, + {file = "pandas-1.2.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52d2472acbb8a56819a87aafdb8b5b6d2b3386e15c95bde56b281882529a7ded"}, + {file = "pandas-1.2.4-cp39-cp39-win32.whl", hash = "sha256:d0877407359811f7b853b548a614aacd7dea83b0c0c84620a9a643f180060950"}, + {file = "pandas-1.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:2b063d41803b6a19703b845609c0b700913593de067b552a8b24dd8eeb8c9895"}, + {file = "pandas-1.2.4.tar.gz", hash = "sha256:649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, From d8cef9201186db8ac77272f7d5ca9f29efa1af9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 09:45:06 +0000 Subject: [PATCH 075/185] Bump black from 20.8b1 to 21.4b0 (#25) --- poetry.lock | 52 ++++++-------------------------------------------- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 47 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7751c928..0758ba36 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,11 +30,11 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "20.8b1" +version = "21.4b0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.2" [package.dependencies] appdirs = "*" @@ -43,12 +43,11 @@ mypy-extensions = ">=0.4.3" pathspec = ">=0.6,<1" regex = ">=2020.1.8" toml = ">=0.10.1" -typed-ast = ">=1.4.0" -typing-extensions = ">=3.7.4" [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +python2 = ["typed-ast (>=1.4.2)"] [[package]] name = "click" @@ -265,14 +264,6 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] -[[package]] -name = "typed-ast" -version = "1.4.2" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "typing-extensions" version = "3.7.4.3" @@ -284,7 +275,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "32817a3aef8fe3f33780462d7f9578f32f73894f3e2e777e8d401bed4feaf370" +content-hash = "e9fc3ca7c29de6f0c0dad73f78af5ec74aa7765592d4e323fe64128003b8d7f6" [metadata.files] appdirs = [ @@ -300,7 +291,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, + {file = "black-21.4b0-py3-none-any.whl", hash = "sha256:2db7040bbbbaa46247bfcc05c6efdebd7ebe50c1c3ca745ca6e0f6776438c96c"}, + {file = "black-21.4b0.tar.gz", hash = "sha256:915d916c48646dbe8040d5265cff7111421a60a3dfe7f7e07273176a57c24a34"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -461,38 +453,6 @@ tqdm = [ {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, ] -typed-ast = [ - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"}, - {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"}, - {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"}, - {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"}, - {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"}, - {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"}, - {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"}, - {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"}, - {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"}, - {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"}, - {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"}, - {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"}, - {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"}, - {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"}, - {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"}, - {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"}, - {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"}, - {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"}, - {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"}, - {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"}, - {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"}, -] typing-extensions = [ {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, diff --git a/pyproject.toml b/pyproject.toml index 781f70f7..8e5cf251 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.3" -black = "^20.8b1" +black = "^21.4b0" [build-system] requires = ["poetry>=0.12"] From 8d5e77dce7da772df1d9891f784c9af2f9b9cb70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Apr 2021 08:44:37 +0000 Subject: [PATCH 076/185] Bump black from 21.4b0 to 21.4b1 (#26) --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0758ba36..5a84ce3e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.4b0" +version = "21.4b1" description = "The uncompromising code formatter." category = "dev" optional = false @@ -40,7 +40,7 @@ python-versions = ">=3.6.2" appdirs = "*" click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.6,<1" +pathspec = ">=0.8.1,<1" regex = ">=2020.1.8" toml = ">=0.10.1" @@ -275,7 +275,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "e9fc3ca7c29de6f0c0dad73f78af5ec74aa7765592d4e323fe64128003b8d7f6" +content-hash = "013b274c2bae9fe5ded7c22cbeb4744f86ec544e3d0739c655475f82babf3b2b" [metadata.files] appdirs = [ @@ -291,8 +291,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.4b0-py3-none-any.whl", hash = "sha256:2db7040bbbbaa46247bfcc05c6efdebd7ebe50c1c3ca745ca6e0f6776438c96c"}, - {file = "black-21.4b0.tar.gz", hash = "sha256:915d916c48646dbe8040d5265cff7111421a60a3dfe7f7e07273176a57c24a34"}, + {file = "black-21.4b1-py3-none-any.whl", hash = "sha256:c9601dc863779db2fb1bf18b345bbfa2bb868463123cde6a7eff44b59e4ef739"}, + {file = "black-21.4b1.tar.gz", hash = "sha256:20d326de75d13be6290925a95c94a9f368aca2f71cb7b753a938a5ae20f34a37"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index 8e5cf251..6fd43e34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.3" -black = "^21.4b0" +black = "^21.4b1" [build-system] requires = ["poetry>=0.12"] From ac943ee84aa27793d4f7fd80858f773152de6514 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 07:28:03 +0000 Subject: [PATCH 077/185] Bump black from 21.4b1 to 21.4b2 (#27) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5a84ce3e..4a3ec7ea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.4b1" +version = "21.4b2" description = "The uncompromising code formatter." category = "dev" optional = false @@ -275,7 +275,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "013b274c2bae9fe5ded7c22cbeb4744f86ec544e3d0739c655475f82babf3b2b" +content-hash = "a42dc23a26d5799ca4b24fb189292eac01055805a3ff347facf36e05b96f48c3" [metadata.files] appdirs = [ @@ -291,8 +291,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.4b1-py3-none-any.whl", hash = "sha256:c9601dc863779db2fb1bf18b345bbfa2bb868463123cde6a7eff44b59e4ef739"}, - {file = "black-21.4b1.tar.gz", hash = "sha256:20d326de75d13be6290925a95c94a9f368aca2f71cb7b753a938a5ae20f34a37"}, + {file = "black-21.4b2-py3-none-any.whl", hash = "sha256:bff7067d8bc25eb21dcfdbc8c72f2baafd9ec6de4663241a52fb904b304d391f"}, + {file = "black-21.4b2.tar.gz", hash = "sha256:fc9bcf3b482b05c1f35f6a882c079dc01b9c7795827532f4cc43c0ec88067bbc"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index 6fd43e34..1c02f0b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.3" -black = "^21.4b1" +black = "^21.4b2" [build-system] requires = ["poetry>=0.12"] From 815e7f2b9ffe29fb00378c36a685cb05e90049f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 07:51:03 +0000 Subject: [PATCH 078/185] Bump black from 21.4b2 to 21.5b0 (#28) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4a3ec7ea..57f39b1f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.4b2" +version = "21.5b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -275,7 +275,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "a42dc23a26d5799ca4b24fb189292eac01055805a3ff347facf36e05b96f48c3" +content-hash = "5832bb72e4197f95a5764a0cc42ccf30d6f5dede363c94718e4727f2bf82160a" [metadata.files] appdirs = [ @@ -291,8 +291,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.4b2-py3-none-any.whl", hash = "sha256:bff7067d8bc25eb21dcfdbc8c72f2baafd9ec6de4663241a52fb904b304d391f"}, - {file = "black-21.4b2.tar.gz", hash = "sha256:fc9bcf3b482b05c1f35f6a882c079dc01b9c7795827532f4cc43c0ec88067bbc"}, + {file = "black-21.5b0-py3-none-any.whl", hash = "sha256:0e80435b8a88f383c9149ae89d671eb2095b72344b0fe8a1d61d2ff5110ed173"}, + {file = "black-21.5b0.tar.gz", hash = "sha256:9dc2042018ca10735366d944c2c12d9cad6dec74a3d5f679d09384ea185d9943"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index 1c02f0b2..0b81e736 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.3" -black = "^21.4b2" +black = "^21.5b0" [build-system] requires = ["poetry>=0.12"] From 3b3968e12c7f3b5c6a14760ecb99f92036802b70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 09:02:40 +0000 Subject: [PATCH 079/185] Bump pytest from 6.2.3 to 6.2.4 (#29) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 57f39b1f..bca6d0d5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -172,7 +172,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.3" +version = "6.2.4" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -275,7 +275,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "5832bb72e4197f95a5764a0cc42ccf30d6f5dede363c94718e4727f2bf82160a" +content-hash = "6b70114cf4f10bd639be28eb826403fbe7d38f57a6fb2372abec91d4286bbcee" [metadata.files] appdirs = [ @@ -383,8 +383,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.3-py3-none-any.whl", hash = "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc"}, - {file = "pytest-6.2.3.tar.gz", hash = "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634"}, + {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, + {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, diff --git a/pyproject.toml b/pyproject.toml index 0b81e736..d787bc9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ rich = ">=9.10,<11.0" tqdm = "^4.58.0" [tool.poetry.dev-dependencies] -pytest = "^6.2.3" +pytest = "^6.2.4" black = "^21.5b0" [build-system] From 1f97dc581017a593cbcb569adf083c9b782ed0bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 May 2021 11:11:17 +0000 Subject: [PATCH 080/185] Bump rich from 10.1.0 to 10.2.0 (#32) --- poetry.lock | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/poetry.lock b/poetry.lock index bca6d0d5..2c6349e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -220,7 +220,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.1.0" +version = "10.2.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -230,7 +230,6 @@ python-versions = ">=3.6,<4.0" colorama = ">=0.4.0,<0.5.0" commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" -typing-extensions = ">=3.7.4,<4.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] @@ -264,14 +263,6 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] -[[package]] -name = "typing-extensions" -version = "3.7.4.3" -description = "Backported and Experimental Type Hints for Python 3.5+" -category = "main" -optional = false -python-versions = "*" - [metadata] lock-version = "1.1" python-versions = "^3.8" @@ -438,8 +429,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.1.0-py3-none-any.whl", hash = "sha256:60cd6d6ea697a1704f2057e791e3062b506b5c74a6e2ad2ced71eccb37557259"}, - {file = "rich-10.1.0.tar.gz", hash = "sha256:8f05431091601888c50341697cfc421dc398ce37b12bca0237388ef9c7e2c9e9"}, + {file = "rich-10.2.0-py3-none-any.whl", hash = "sha256:2701b69b9646a12b05d80f9d96a48615d4b68678fbfa67a60aa2834a62ad01e7"}, + {file = "rich-10.2.0.tar.gz", hash = "sha256:a30429d82363d42e7c64e324c2c8735c045f190cba609feee91a7b9f563a64b5"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, @@ -453,8 +444,3 @@ tqdm = [ {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, ] -typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, -] From 2f35974b8a669c1426c7dc8985a4bc39d740a7e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 May 2021 11:12:03 +0000 Subject: [PATCH 081/185] Bump black from 21.5b0 to 21.5b1 (#31) --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2c6349e6..d8de905c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b0" +version = "21.5b1" description = "The uncompromising code formatter." category = "dev" optional = false @@ -46,7 +46,7 @@ toml = ">=0.10.1" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +d = ["aiohttp (>=3.6.0)", "aiohttp-cors"] python2 = ["typed-ast (>=1.4.2)"] [[package]] @@ -266,7 +266,7 @@ telegram = ["requests"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "6b70114cf4f10bd639be28eb826403fbe7d38f57a6fb2372abec91d4286bbcee" +content-hash = "27a1f0933820a2c7703c34567136561508867366df5815324fe491ef10699f5e" [metadata.files] appdirs = [ @@ -282,8 +282,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.5b0-py3-none-any.whl", hash = "sha256:0e80435b8a88f383c9149ae89d671eb2095b72344b0fe8a1d61d2ff5110ed173"}, - {file = "black-21.5b0.tar.gz", hash = "sha256:9dc2042018ca10735366d944c2c12d9cad6dec74a3d5f679d09384ea185d9943"}, + {file = "black-21.5b1-py3-none-any.whl", hash = "sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008"}, + {file = "black-21.5b1.tar.gz", hash = "sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index d787bc9f..de887f6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.4" -black = "^21.5b0" +black = "^21.5b1" [build-system] requires = ["poetry>=0.12"] From 342972f8c2a2c9632b99f60002fc6900c4fd2ae5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 May 2021 11:12:46 +0000 Subject: [PATCH 082/185] Bump numpy from 1.20.2 to 1.20.3 (#30) --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index d8de905c..b69ca438 100644 --- a/poetry.lock +++ b/poetry.lock @@ -94,7 +94,7 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.20.2" +version = "1.20.3" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -306,30 +306,30 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.20.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e9459f40244bb02b2f14f6af0cd0732791d72232bbb0dc4bab57ef88e75f6935"}, - {file = "numpy-1.20.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a8e6859913ec8eeef3dbe9aed3bf475347642d1cdd6217c30f28dee8903528e6"}, - {file = "numpy-1.20.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:9cab23439eb1ebfed1aaec9cd42b7dc50fc96d5cd3147da348d9161f0501ada5"}, - {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9c0fab855ae790ca74b27e55240fe4f2a36a364a3f1ebcfd1fb5ac4088f1cec3"}, - {file = "numpy-1.20.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:61d5b4cf73622e4d0c6b83408a16631b670fc045afd6540679aa35591a17fe6d"}, - {file = "numpy-1.20.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d15007f857d6995db15195217afdbddfcd203dfaa0ba6878a2f580eaf810ecd6"}, - {file = "numpy-1.20.2-cp37-cp37m-win32.whl", hash = "sha256:d76061ae5cab49b83a8cf3feacefc2053fac672728802ac137dd8c4123397677"}, - {file = "numpy-1.20.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bad70051de2c50b1a6259a6df1daaafe8c480ca98132da98976d8591c412e737"}, - {file = "numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:719656636c48be22c23641859ff2419b27b6bdf844b36a2447cb39caceb00935"}, - {file = "numpy-1.20.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:aa046527c04688af680217fffac61eec2350ef3f3d7320c07fd33f5c6e7b4d5f"}, - {file = "numpy-1.20.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2428b109306075d89d21135bdd6b785f132a1f5a3260c371cee1fae427e12727"}, - {file = "numpy-1.20.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e8e4fbbb7e7634f263c5b0150a629342cc19b47c5eba8d1cd4363ab3455ab576"}, - {file = "numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:edb1f041a9146dcf02cd7df7187db46ab524b9af2515f392f337c7cbbf5b52cd"}, - {file = "numpy-1.20.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:c73a7975d77f15f7f68dacfb2bca3d3f479f158313642e8ea9058eea06637931"}, - {file = "numpy-1.20.2-cp38-cp38-win32.whl", hash = "sha256:6c915ee7dba1071554e70a3664a839fbc033e1d6528199d4621eeaaa5487ccd2"}, - {file = "numpy-1.20.2-cp38-cp38-win_amd64.whl", hash = "sha256:471c0571d0895c68da309dacee4e95a0811d0a9f9f532a48dc1bea5f3b7ad2b7"}, - {file = "numpy-1.20.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4703b9e937df83f5b6b7447ca5912b5f5f297aba45f91dbbbc63ff9278c7aa98"}, - {file = "numpy-1.20.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:abc81829c4039e7e4c30f7897938fa5d4916a09c2c7eb9b244b7a35ddc9656f4"}, - {file = "numpy-1.20.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:377751954da04d4a6950191b20539066b4e19e3b559d4695399c5e8e3e683bf6"}, - {file = "numpy-1.20.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:6e51e417d9ae2e7848314994e6fc3832c9d426abce9328cf7571eefceb43e6c9"}, - {file = "numpy-1.20.2-cp39-cp39-win32.whl", hash = "sha256:780ae5284cb770ade51d4b4a7dce4faa554eb1d88a56d0e8b9f35fca9b0270ff"}, - {file = "numpy-1.20.2-cp39-cp39-win_amd64.whl", hash = "sha256:924dc3f83de20437de95a73516f36e09918e9c9c18d5eac520062c49191025fb"}, - {file = "numpy-1.20.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:97ce8b8ace7d3b9288d88177e66ee75480fb79b9cf745e91ecfe65d91a856042"}, - {file = "numpy-1.20.2.zip", hash = "sha256:878922bf5ad7550aa044aa9301d417e2d3ae50f0f577de92051d739ac6096cee"}, + {file = "numpy-1.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70eb5808127284c4e5c9e836208e09d685a7978b6a216db85960b1a112eeace8"}, + {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6ca2b85a5997dabc38301a22ee43c82adcb53ff660b89ee88dded6b33687e1d8"}, + {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5bf0e132acf7557fc9bb8ded8b53bbbbea8892f3c9a1738205878ca9434206a"}, + {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db250fd3e90117e0312b611574cd1b3f78bec046783195075cbd7ba9c3d73f16"}, + {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:637d827248f447e63585ca3f4a7d2dfaa882e094df6cfa177cc9cf9cd6cdf6d2"}, + {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8b7bb4b9280da3b2856cb1fc425932f46fba609819ee1c62256f61799e6a51d2"}, + {file = "numpy-1.20.3-cp37-cp37m-win32.whl", hash = "sha256:67d44acb72c31a97a3d5d33d103ab06d8ac20770e1c5ad81bdb3f0c086a56cf6"}, + {file = "numpy-1.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:43909c8bb289c382170e0282158a38cf306a8ad2ff6dfadc447e90f9961bef43"}, + {file = "numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1452578d0516283c87608a5a5548b0cdde15b99650efdfd85182102ef7a7c17"}, + {file = "numpy-1.20.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6e51534e78d14b4a009a062641f465cfaba4fdcb046c3ac0b1f61dd97c861b1b"}, + {file = "numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e515c9a93aebe27166ec9593411c58494fa98e5fcc219e47260d9ab8a1cc7f9f"}, + {file = "numpy-1.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1c09247ccea742525bdb5f4b5ceeacb34f95731647fe55774aa36557dbb5fa4"}, + {file = "numpy-1.20.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66fbc6fed94a13b9801fb70b96ff30605ab0a123e775a5e7a26938b717c5d71a"}, + {file = "numpy-1.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ea9cff01e75a956dbee133fa8e5b68f2f92175233de2f88de3a682dd94deda65"}, + {file = "numpy-1.20.3-cp38-cp38-win32.whl", hash = "sha256:f39a995e47cb8649673cfa0579fbdd1cdd33ea497d1728a6cb194d6252268e48"}, + {file = "numpy-1.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:1676b0a292dd3c99e49305a16d7a9f42a4ab60ec522eac0d3dd20cdf362ac010"}, + {file = "numpy-1.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:830b044f4e64a76ba71448fce6e604c0fc47a0e54d8f6467be23749ac2cbd2fb"}, + {file = "numpy-1.20.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:55b745fca0a5ab738647d0e4db099bd0a23279c32b31a783ad2ccea729e632df"}, + {file = "numpy-1.20.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5d050e1e4bc9ddb8656d7b4f414557720ddcca23a5b88dd7cff65e847864c400"}, + {file = "numpy-1.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9c65473ebc342715cb2d7926ff1e202c26376c0dcaaee85a1fd4b8d8c1d3b2f"}, + {file = "numpy-1.20.3-cp39-cp39-win32.whl", hash = "sha256:16f221035e8bd19b9dc9a57159e38d2dd060b48e93e1d843c49cb370b0f415fd"}, + {file = "numpy-1.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:6690080810f77485667bfbff4f69d717c3be25e5b11bb2073e76bb3f578d99b4"}, + {file = "numpy-1.20.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e465afc3b96dbc80cf4a5273e5e2b1e3451286361b4af70ce1adb2984d392f9"}, + {file = "numpy-1.20.3.zip", hash = "sha256:e55185e51b18d788e49fe8305fd73ef4470596b33fc2c1ceb304566b99c71a69"}, ] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, From 7fc625493b4ea3ad70b1718688fae3d3a623b9dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 May 2021 12:00:20 +0000 Subject: [PATCH 083/185] Bump rich from 10.2.0 to 10.2.2 (#34) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b69ca438..af8cfd66 100644 --- a/poetry.lock +++ b/poetry.lock @@ -220,7 +220,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.2.0" +version = "10.2.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -429,8 +429,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.2.0-py3-none-any.whl", hash = "sha256:2701b69b9646a12b05d80f9d96a48615d4b68678fbfa67a60aa2834a62ad01e7"}, - {file = "rich-10.2.0.tar.gz", hash = "sha256:a30429d82363d42e7c64e324c2c8735c045f190cba609feee91a7b9f563a64b5"}, + {file = "rich-10.2.2-py3-none-any.whl", hash = "sha256:203e79c9012f57e0148a2132d0b43fe070a5c213cf080982c186e1d3ae4f8e1d"}, + {file = "rich-10.2.2.tar.gz", hash = "sha256:17b3f486c38e79cc219d8848974b277ef532a82d12b3ad6eb37bb8c6f22ab5fc"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From a1042de7e94a0538e4f359b6e813b84f1605aaa7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 08:32:15 +0000 Subject: [PATCH 084/185] Bump black from 21.5b1 to 21.5b2 (#36) --- poetry.lock | 11 ++++++----- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index af8cfd66..3c8e68ac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b1" +version = "21.5b2" description = "The uncompromising code formatter." category = "dev" optional = false @@ -46,8 +46,9 @@ toml = ">=0.10.1" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors"] +d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] python2 = ["typed-ast (>=1.4.2)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" @@ -266,7 +267,7 @@ telegram = ["requests"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "27a1f0933820a2c7703c34567136561508867366df5815324fe491ef10699f5e" +content-hash = "60dfdc5aa454c7a3406206718fc0bdd7acfdc0465a43430deda71c7e28e3d248" [metadata.files] appdirs = [ @@ -282,8 +283,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.5b1-py3-none-any.whl", hash = "sha256:8a60071a0043876a4ae96e6c69bd3a127dad2c1ca7c8083573eb82f92705d008"}, - {file = "black-21.5b1.tar.gz", hash = "sha256:23695358dbcb3deafe7f0a3ad89feee5999a46be5fec21f4f1d108be0bcdb3b1"}, + {file = "black-21.5b2-py3-none-any.whl", hash = "sha256:e5cf21ebdffc7a9b29d73912b6a6a9a4df4ce70220d523c21647da2eae0751ef"}, + {file = "black-21.5b2.tar.gz", hash = "sha256:1fc0e0a2c8ae7d269dfcf0c60a89afa299664f3e811395d40b1922dff8f854b5"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index de887f6f..4187baa8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.4" -black = "^21.5b1" +black = "^21.5b2" [build-system] requires = ["poetry>=0.12"] From 0511be320e300eb335e7188e1454d1e854afef9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 08:32:22 +0000 Subject: [PATCH 085/185] Bump tqdm from 4.60.0 to 4.61.0 (#35) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3c8e68ac..83a38964 100644 --- a/poetry.lock +++ b/poetry.lock @@ -253,7 +253,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.60.0" +version = "4.61.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -442,6 +442,6 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, - {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, + {file = "tqdm-4.61.0-py2.py3-none-any.whl", hash = "sha256:736524215c690621b06fc89d0310a49822d75e599fcd0feb7cc742b98d692493"}, + {file = "tqdm-4.61.0.tar.gz", hash = "sha256:cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"}, ] From 5e9d01e3d88372ff6baae193fca241f1ce5f732b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 05:46:23 +0000 Subject: [PATCH 086/185] Bump rich from 10.2.2 to 10.3.0 (#37) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83a38964..89cbdbab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.2.2" +version = "10.3.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -430,8 +430,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.2.2-py3-none-any.whl", hash = "sha256:203e79c9012f57e0148a2132d0b43fe070a5c213cf080982c186e1d3ae4f8e1d"}, - {file = "rich-10.2.2.tar.gz", hash = "sha256:17b3f486c38e79cc219d8848974b277ef532a82d12b3ad6eb37bb8c6f22ab5fc"}, + {file = "rich-10.3.0-py3-none-any.whl", hash = "sha256:b3b5e6c47bf6ea7a2479f5d9245d5ed32f542931912e14203292dfaa0c6c1437"}, + {file = "rich-10.3.0.tar.gz", hash = "sha256:a83bff83309687e1859c75b499879738b135d700738dd2721c22965497af05bd"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 4961f18b9c7d23295ae6638752282d05d91b9e46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 05:46:31 +0000 Subject: [PATCH 087/185] Bump black from 21.5b2 to 21.6b0 (#38) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 89cbdbab..5ad18167 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.5b2" +version = "21.6b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -267,7 +267,7 @@ telegram = ["requests"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "60dfdc5aa454c7a3406206718fc0bdd7acfdc0465a43430deda71c7e28e3d248" +content-hash = "325465aaf0018392a1837691cf3a3c1ac2c687fa4ad3e3b69904dd601b735cd7" [metadata.files] appdirs = [ @@ -283,8 +283,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.5b2-py3-none-any.whl", hash = "sha256:e5cf21ebdffc7a9b29d73912b6a6a9a4df4ce70220d523c21647da2eae0751ef"}, - {file = "black-21.5b2.tar.gz", hash = "sha256:1fc0e0a2c8ae7d269dfcf0c60a89afa299664f3e811395d40b1922dff8f854b5"}, + {file = "black-21.6b0-py3-none-any.whl", hash = "sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"}, + {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index 4187baa8..695db2fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.4" -black = "^21.5b2" +black = "^21.6b0" [build-system] requires = ["poetry>=0.12"] From b647e52bf4c4d746624d713f72ffc82a1a4caa36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 22:13:29 +0000 Subject: [PATCH 088/185] Bump tqdm from 4.61.0 to 4.61.1 (#39) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5ad18167..04892577 100644 --- a/poetry.lock +++ b/poetry.lock @@ -253,7 +253,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.61.0" +version = "4.61.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -442,6 +442,6 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.61.0-py2.py3-none-any.whl", hash = "sha256:736524215c690621b06fc89d0310a49822d75e599fcd0feb7cc742b98d692493"}, - {file = "tqdm-4.61.0.tar.gz", hash = "sha256:cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"}, + {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, + {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, ] From f9f454b8eced0477a3fcee254d974e9d2e94cc89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 14:10:05 +0000 Subject: [PATCH 089/185] Bump rich from 10.3.0 to 10.4.0 (#40) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 04892577..c3283906 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.3.0" +version = "10.4.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -430,8 +430,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.3.0-py3-none-any.whl", hash = "sha256:b3b5e6c47bf6ea7a2479f5d9245d5ed32f542931912e14203292dfaa0c6c1437"}, - {file = "rich-10.3.0.tar.gz", hash = "sha256:a83bff83309687e1859c75b499879738b135d700738dd2721c22965497af05bd"}, + {file = "rich-10.4.0-py3-none-any.whl", hash = "sha256:9fb2404c4e870d4de3837c11d0cd1f26c44725865535caba1379c2343a49f6a1"}, + {file = "rich-10.4.0.tar.gz", hash = "sha256:6e8a3e2c61e6cf6193bfcffbb89865a0973af7779d3ead913fdbbbc33f457c2c"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From f519ca6a97bd5c04fe2c9e260b41232798222926 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 15:24:46 +0000 Subject: [PATCH 090/185] Bump pandas from 1.2.4 to 1.2.5 (#41) --- poetry.lock | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/poetry.lock b/poetry.lock index c3283906..cc202204 100644 --- a/poetry.lock +++ b/poetry.lock @@ -114,7 +114,7 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.2.4" +version = "1.2.5" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -337,22 +337,24 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.2.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c601c6fdebc729df4438ec1f62275d6136a0dd14d332fc0e8ce3f7d2aadb4dd6"}, - {file = "pandas-1.2.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8d4c74177c26aadcfb4fd1de6c1c43c2bf822b3e0fc7a9b409eeaf84b3e92aaa"}, - {file = "pandas-1.2.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b730add5267f873b3383c18cac4df2527ac4f0f0eed1c6cf37fcb437e25cf558"}, - {file = "pandas-1.2.4-cp37-cp37m-win32.whl", hash = "sha256:2cb7e8f4f152f27dc93f30b5c7a98f6c748601ea65da359af734dd0cf3fa733f"}, - {file = "pandas-1.2.4-cp37-cp37m-win_amd64.whl", hash = "sha256:2111c25e69fa9365ba80bbf4f959400054b2771ac5d041ed19415a8b488dc70a"}, - {file = "pandas-1.2.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:167693a80abc8eb28051fbd184c1b7afd13ce2c727a5af47b048f1ea3afefff4"}, - {file = "pandas-1.2.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:612add929bf3ba9d27b436cc8853f5acc337242d6b584203f207e364bb46cb12"}, - {file = "pandas-1.2.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:971e2a414fce20cc5331fe791153513d076814d30a60cd7348466943e6e909e4"}, - {file = "pandas-1.2.4-cp38-cp38-win32.whl", hash = "sha256:68d7baa80c74aaacbed597265ca2308f017859123231542ff8a5266d489e1858"}, - {file = "pandas-1.2.4-cp38-cp38-win_amd64.whl", hash = "sha256:bd659c11a4578af740782288cac141a322057a2e36920016e0fc7b25c5a4b686"}, - {file = "pandas-1.2.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9db70ffa8b280bb4de83f9739d514cd0735825e79eef3a61d312420b9f16b758"}, - {file = "pandas-1.2.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:298f0553fd3ba8e002c4070a723a59cdb28eda579f3e243bc2ee397773f5398b"}, - {file = "pandas-1.2.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52d2472acbb8a56819a87aafdb8b5b6d2b3386e15c95bde56b281882529a7ded"}, - {file = "pandas-1.2.4-cp39-cp39-win32.whl", hash = "sha256:d0877407359811f7b853b548a614aacd7dea83b0c0c84620a9a643f180060950"}, - {file = "pandas-1.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:2b063d41803b6a19703b845609c0b700913593de067b552a8b24dd8eeb8c9895"}, - {file = "pandas-1.2.4.tar.gz", hash = "sha256:649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279"}, + {file = "pandas-1.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1102d719038e134e648e7920672188a00375f3908f0383fd3b202fbb9d2c3a95"}, + {file = "pandas-1.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38e7486410de23069392bdf1dc7297ae75d2d67531750753f3149c871cd1c6e3"}, + {file = "pandas-1.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94ca6ea3f46f44a979a38a4d5a70a88cee734f7248d7aeeed202e6b3ba485af1"}, + {file = "pandas-1.2.5-cp37-cp37m-win32.whl", hash = "sha256:821d92466fcd2826656374a9b6fe4f2ec2ba5e370cce71d5a990577929d948df"}, + {file = "pandas-1.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:0dbd125b0e44e5068163cbc9080a00db1756a5e36309329ae14fd259747f2300"}, + {file = "pandas-1.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7b09293c7119ab22ab3f7f086f813ac2acbfa3bcaaaeb650f4cddfb5b9fa9be4"}, + {file = "pandas-1.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc9215dd1dd836ff26b896654e66b2dfcf4bbb18aa4c1089a79bab527b665a90"}, + {file = "pandas-1.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e36515163829e0e95a6af10820f178dd8768102482c01872bff8ae592e508e58"}, + {file = "pandas-1.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0c34b89215f984a9e4956446e0a29330d720085efa08ea72022387ee37d8b373"}, + {file = "pandas-1.2.5-cp38-cp38-win32.whl", hash = "sha256:f20e4b8a7909f5a0c0a9e745091e3ea18b45af9f73496a4d498688badbdac7ea"}, + {file = "pandas-1.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:9244fb0904512b074d8c6362fb13aac1da6c4db94372760ddb2565c620240264"}, + {file = "pandas-1.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c862cd72353921c102166784fc4db749f1c3b691dd017fc36d9df2c67a9afe4e"}, + {file = "pandas-1.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e6edddeac9a8e473391d2d2067bb3c9dc7ad79fd137af26a39ee425c2b4c78"}, + {file = "pandas-1.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a67227e17236442c6bc31c02cb713b5277b26eee204eac14b5aecba52492e3a3"}, + {file = "pandas-1.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4bfbf62b00460f78a8bc4407112965c5ab44324f34551e8e1f4cac271a07706c"}, + {file = "pandas-1.2.5-cp39-cp39-win32.whl", hash = "sha256:25fc8ef6c6beb51c9224284a1ad89dfb591832f23ceff78845f182de35c52356"}, + {file = "pandas-1.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:78de96c1174bcfdbe8dece9c38c2d7994e407fd8bb62146bb46c61294bcc06ef"}, + {file = "pandas-1.2.5.tar.gz", hash = "sha256:14abb8ea73fce8aebbb1fb44bec809163f1c55241bcc1db91c2c780e97265033"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, From 82cec89ce33a07ee294848b8cb4720b3c8f28585 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Jun 2021 13:11:37 +0000 Subject: [PATCH 091/185] Bump numpy from 1.20.3 to 1.21.0 (#42) --- poetry.lock | 54 ++++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index cc202204..720c9a3a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,7 +95,7 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.20.3" +version = "1.21.0" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -307,30 +307,34 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70eb5808127284c4e5c9e836208e09d685a7978b6a216db85960b1a112eeace8"}, - {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6ca2b85a5997dabc38301a22ee43c82adcb53ff660b89ee88dded6b33687e1d8"}, - {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5bf0e132acf7557fc9bb8ded8b53bbbbea8892f3c9a1738205878ca9434206a"}, - {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db250fd3e90117e0312b611574cd1b3f78bec046783195075cbd7ba9c3d73f16"}, - {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:637d827248f447e63585ca3f4a7d2dfaa882e094df6cfa177cc9cf9cd6cdf6d2"}, - {file = "numpy-1.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8b7bb4b9280da3b2856cb1fc425932f46fba609819ee1c62256f61799e6a51d2"}, - {file = "numpy-1.20.3-cp37-cp37m-win32.whl", hash = "sha256:67d44acb72c31a97a3d5d33d103ab06d8ac20770e1c5ad81bdb3f0c086a56cf6"}, - {file = "numpy-1.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:43909c8bb289c382170e0282158a38cf306a8ad2ff6dfadc447e90f9961bef43"}, - {file = "numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1452578d0516283c87608a5a5548b0cdde15b99650efdfd85182102ef7a7c17"}, - {file = "numpy-1.20.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6e51534e78d14b4a009a062641f465cfaba4fdcb046c3ac0b1f61dd97c861b1b"}, - {file = "numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e515c9a93aebe27166ec9593411c58494fa98e5fcc219e47260d9ab8a1cc7f9f"}, - {file = "numpy-1.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1c09247ccea742525bdb5f4b5ceeacb34f95731647fe55774aa36557dbb5fa4"}, - {file = "numpy-1.20.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66fbc6fed94a13b9801fb70b96ff30605ab0a123e775a5e7a26938b717c5d71a"}, - {file = "numpy-1.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ea9cff01e75a956dbee133fa8e5b68f2f92175233de2f88de3a682dd94deda65"}, - {file = "numpy-1.20.3-cp38-cp38-win32.whl", hash = "sha256:f39a995e47cb8649673cfa0579fbdd1cdd33ea497d1728a6cb194d6252268e48"}, - {file = "numpy-1.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:1676b0a292dd3c99e49305a16d7a9f42a4ab60ec522eac0d3dd20cdf362ac010"}, - {file = "numpy-1.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:830b044f4e64a76ba71448fce6e604c0fc47a0e54d8f6467be23749ac2cbd2fb"}, - {file = "numpy-1.20.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:55b745fca0a5ab738647d0e4db099bd0a23279c32b31a783ad2ccea729e632df"}, - {file = "numpy-1.20.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5d050e1e4bc9ddb8656d7b4f414557720ddcca23a5b88dd7cff65e847864c400"}, - {file = "numpy-1.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9c65473ebc342715cb2d7926ff1e202c26376c0dcaaee85a1fd4b8d8c1d3b2f"}, - {file = "numpy-1.20.3-cp39-cp39-win32.whl", hash = "sha256:16f221035e8bd19b9dc9a57159e38d2dd060b48e93e1d843c49cb370b0f415fd"}, - {file = "numpy-1.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:6690080810f77485667bfbff4f69d717c3be25e5b11bb2073e76bb3f578d99b4"}, - {file = "numpy-1.20.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e465afc3b96dbc80cf4a5273e5e2b1e3451286361b4af70ce1adb2984d392f9"}, - {file = "numpy-1.20.3.zip", hash = "sha256:e55185e51b18d788e49fe8305fd73ef4470596b33fc2c1ceb304566b99c71a69"}, + {file = "numpy-1.21.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d5caa946a9f55511e76446e170bdad1d12d6b54e17a2afe7b189112ed4412bb8"}, + {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ac4fd578322842dbda8d968e3962e9f22e862b6ec6e3378e7415625915e2da4d"}, + {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:598fe100b2948465cf3ed64b1a326424b5e4be2670552066e17dfaa67246011d"}, + {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c55407f739f0bfcec67d0df49103f9333edc870061358ac8a8c9e37ea02fcd2"}, + {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75579acbadbf74e3afd1153da6177f846212ea2a0cc77de53523ae02c9256513"}, + {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cc367c86eb87e5b7c9592935620f22d13b090c609f1b27e49600cd033b529f54"}, + {file = "numpy-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:d89b0dc7f005090e32bb4f9bf796e1dcca6b52243caf1803fdd2b748d8561f63"}, + {file = "numpy-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eda2829af498946c59d8585a9fd74da3f810866e05f8df03a86f70079c7531dd"}, + {file = "numpy-1.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1a784e8ff7ea2a32e393cc53eb0003eca1597c7ca628227e34ce34eb11645a0e"}, + {file = "numpy-1.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bba474a87496d96e61461f7306fba2ebba127bed7836212c360f144d1e72ac54"}, + {file = "numpy-1.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd0a359c1c17f00cb37de2969984a74320970e0ceef4808c32e00773b06649d9"}, + {file = "numpy-1.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4d5a86a5257843a18fb1220c5f1c199532bc5d24e849ed4b0289fb59fbd4d8f"}, + {file = "numpy-1.21.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:620732f42259eb2c4642761bd324462a01cdd13dd111740ce3d344992dd8492f"}, + {file = "numpy-1.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9205711e5440954f861ceeea8f1b415d7dd15214add2e878b4d1cf2bcb1a914"}, + {file = "numpy-1.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ad09f55cc95ed8d80d8ab2052f78cc21cb231764de73e229140d81ff49d8145e"}, + {file = "numpy-1.21.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a1f2fb2da242568af0271455b89aee0f71e4e032086ee2b4c5098945d0e11cf6"}, + {file = "numpy-1.21.0-cp38-cp38-win32.whl", hash = "sha256:e58ddb53a7b4959932f5582ac455ff90dcb05fac3f8dcc8079498d43afbbde6c"}, + {file = "numpy-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:d2910d0a075caed95de1a605df00ee03b599de5419d0b95d55342e9a33ad1fb3"}, + {file = "numpy-1.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a290989cd671cd0605e9c91a70e6df660f73ae87484218e8285c6522d29f6e38"}, + {file = "numpy-1.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3537b967b350ad17633b35c2f4b1a1bbd258c018910b518c30b48c8e41272717"}, + {file = "numpy-1.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc6c650f8700ce1e3a77668bb7c43e45c20ac06ae00d22bdf6760b38958c883"}, + {file = "numpy-1.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:709884863def34d72b183d074d8ba5cfe042bc3ff8898f1ffad0209161caaa99"}, + {file = "numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bebab3eaf0641bba26039fb0b2c5bf9b99407924b53b1ea86e03c32c64ef5aef"}, + {file = "numpy-1.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf680682ad0a3bef56dae200dbcbac2d57294a73e5b0f9864955e7dd7c2c2491"}, + {file = "numpy-1.21.0-cp39-cp39-win32.whl", hash = "sha256:d95d16204cd51ff1a1c8d5f9958ce90ae190be81d348b514f9be39f878b8044a"}, + {file = "numpy-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:2ba579dde0563f47021dcd652253103d6fd66165b18011dce1a0609215b2791e"}, + {file = "numpy-1.21.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c40e6b860220ed862e8097b8f81c9af6d7405b723f4a7af24a267b46f90e461"}, + {file = "numpy-1.21.0.zip", hash = "sha256:e80fe25cba41c124d04c662f33f6364909b985f2eb5998aaa5ae4b9587242cce"}, ] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, From 223bd89f464664981601ee9f51d56fd36b100682 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Jul 2021 12:42:37 +0000 Subject: [PATCH 092/185] Bump pandas from 1.2.5 to 1.3.0 (#43) --- poetry.lock | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 720c9a3a..d0ab3887 100644 --- a/poetry.lock +++ b/poetry.lock @@ -114,19 +114,19 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.2.5" +version = "1.3.0" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false python-versions = ">=3.7.1" [package.dependencies] -numpy = ">=1.16.5" +numpy = ">=1.17.3" python-dateutil = ">=2.7.3" pytz = ">=2017.3" [package.extras] -test = ["pytest (>=5.0.1)", "pytest-xdist", "hypothesis (>=3.58)"] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] [[package]] name = "pathspec" @@ -341,24 +341,12 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1102d719038e134e648e7920672188a00375f3908f0383fd3b202fbb9d2c3a95"}, - {file = "pandas-1.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38e7486410de23069392bdf1dc7297ae75d2d67531750753f3149c871cd1c6e3"}, - {file = "pandas-1.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94ca6ea3f46f44a979a38a4d5a70a88cee734f7248d7aeeed202e6b3ba485af1"}, - {file = "pandas-1.2.5-cp37-cp37m-win32.whl", hash = "sha256:821d92466fcd2826656374a9b6fe4f2ec2ba5e370cce71d5a990577929d948df"}, - {file = "pandas-1.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:0dbd125b0e44e5068163cbc9080a00db1756a5e36309329ae14fd259747f2300"}, - {file = "pandas-1.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7b09293c7119ab22ab3f7f086f813ac2acbfa3bcaaaeb650f4cddfb5b9fa9be4"}, - {file = "pandas-1.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc9215dd1dd836ff26b896654e66b2dfcf4bbb18aa4c1089a79bab527b665a90"}, - {file = "pandas-1.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e36515163829e0e95a6af10820f178dd8768102482c01872bff8ae592e508e58"}, - {file = "pandas-1.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0c34b89215f984a9e4956446e0a29330d720085efa08ea72022387ee37d8b373"}, - {file = "pandas-1.2.5-cp38-cp38-win32.whl", hash = "sha256:f20e4b8a7909f5a0c0a9e745091e3ea18b45af9f73496a4d498688badbdac7ea"}, - {file = "pandas-1.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:9244fb0904512b074d8c6362fb13aac1da6c4db94372760ddb2565c620240264"}, - {file = "pandas-1.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c862cd72353921c102166784fc4db749f1c3b691dd017fc36d9df2c67a9afe4e"}, - {file = "pandas-1.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e6edddeac9a8e473391d2d2067bb3c9dc7ad79fd137af26a39ee425c2b4c78"}, - {file = "pandas-1.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a67227e17236442c6bc31c02cb713b5277b26eee204eac14b5aecba52492e3a3"}, - {file = "pandas-1.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4bfbf62b00460f78a8bc4407112965c5ab44324f34551e8e1f4cac271a07706c"}, - {file = "pandas-1.2.5-cp39-cp39-win32.whl", hash = "sha256:25fc8ef6c6beb51c9224284a1ad89dfb591832f23ceff78845f182de35c52356"}, - {file = "pandas-1.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:78de96c1174bcfdbe8dece9c38c2d7994e407fd8bb62146bb46c61294bcc06ef"}, - {file = "pandas-1.2.5.tar.gz", hash = "sha256:14abb8ea73fce8aebbb1fb44bec809163f1c55241bcc1db91c2c780e97265033"}, + {file = "pandas-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c81b8d91e9ae861eb4406b4e0f8d4dabbc105b9c479b3d1e921fba1d35b5b62a"}, + {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08eeff3da6a188e24db7f292b39a8ca9e073bf841fbbeadb946b3ad5c19d843e"}, + {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88864c1e28353b958b1f30e4193818519624ad9a1776921622a6a2a016d5d807"}, + {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:872aa91e0f9ca913046ab639d4181a899f5e592030d954d28c2529b88756a736"}, + {file = "pandas-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:92835113a67cbd34747c198d41f09f4b63f6fe11ca5643baebc7ab1e30e89e95"}, + {file = "pandas-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7d3cd2c99faa94d717ca00ea489264a291ad7209453dffbf059bfb7971fd3a61"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, From e9790c3f3bd88a5994610f0ae282e60828143f44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jul 2021 14:26:29 +0000 Subject: [PATCH 093/185] Bump rich from 10.4.0 to 10.5.0 (#45) --- poetry.lock | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d0ab3887..7930c652 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.4.0" +version = "10.5.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -347,6 +347,19 @@ pandas = [ {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:872aa91e0f9ca913046ab639d4181a899f5e592030d954d28c2529b88756a736"}, {file = "pandas-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:92835113a67cbd34747c198d41f09f4b63f6fe11ca5643baebc7ab1e30e89e95"}, {file = "pandas-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7d3cd2c99faa94d717ca00ea489264a291ad7209453dffbf059bfb7971fd3a61"}, + {file = "pandas-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:823737830364d0e2af8c3912a28ba971296181a07950873492ed94e12d28c405"}, + {file = "pandas-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c746876cdd8380be0c3e70966d4566855901ac9aaa5e4b9ccaa5ca5311457d11"}, + {file = "pandas-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe7a549d10ca534797095586883a5c17d140d606747591258869c56e14d1b457"}, + {file = "pandas-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f058c786e7b0a9e7fa5e0b9f4422e0ccdd3bf3aa3053c18d77ed2a459bd9a45a"}, + {file = "pandas-1.3.0-cp38-cp38-win32.whl", hash = "sha256:98efc2d4983d5bb47662fe2d97b2c81b91566cb08b266490918b9c7d74a5ef64"}, + {file = "pandas-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e6b75091fa54a53db3927b4d1bc997c23c5ba6f87acdfe1ee5a92c38c6b2ed6a"}, + {file = "pandas-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ff13eed501e07e7fb26a4ea18a846b6e5d7de549b497025601fd9ccb7c1d123"}, + {file = "pandas-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:798675317d0e4863a92a9a6bc5bd2490b5f6fef8c17b95f29e2e33f28bef9eca"}, + {file = "pandas-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed4fc66f23fe17c93a5d439230ca2d6b5f8eac7154198d327dbe8a16d98f3f10"}, + {file = "pandas-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:522bfea92f3ef6207cadc7428bda1e7605dae0383b8065030e7b5d0266717b48"}, + {file = "pandas-1.3.0-cp39-cp39-win32.whl", hash = "sha256:7897326cae660eee69d501cbfa950281a193fcf407393965e1bc07448e1cc35a"}, + {file = "pandas-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b10d7910ae9d7920a5ff7816d794d99acbc361f7b16a0f017d4fa83ced8cb55e"}, + {file = "pandas-1.3.0.tar.gz", hash = "sha256:c554e6c9cf2d5ea1aba5979cc837b3649539ced0e18ece186f055450c86622e2"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, @@ -424,8 +437,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.4.0-py3-none-any.whl", hash = "sha256:9fb2404c4e870d4de3837c11d0cd1f26c44725865535caba1379c2343a49f6a1"}, - {file = "rich-10.4.0.tar.gz", hash = "sha256:6e8a3e2c61e6cf6193bfcffbb89865a0973af7779d3ead913fdbbbc33f457c2c"}, + {file = "rich-10.5.0-py3-none-any.whl", hash = "sha256:d36d4dddbb6cb87cdcb2c02f8ffd7836e1b136e3ba45d4b5a4da057f3b5e7798"}, + {file = "rich-10.5.0.tar.gz", hash = "sha256:f8a16484b3d70708bdafd04f659f9ca0e2c0129b33a343c10c734838d361777f"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 632b0559b2127716d35ed71266a9540ce4b0961c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jul 2021 14:26:32 +0000 Subject: [PATCH 094/185] Bump tqdm from 4.61.1 to 4.61.2 (#44) --- poetry.lock | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7930c652..2c01178d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -253,12 +253,15 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.61.1" +version = "4.61.2" description = "Fast, Extensible Progress Meter" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [package.extras] dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] @@ -449,6 +452,6 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.61.1-py2.py3-none-any.whl", hash = "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2"}, - {file = "tqdm-4.61.1.tar.gz", hash = "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd"}, + {file = "tqdm-4.61.2-py2.py3-none-any.whl", hash = "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64"}, + {file = "tqdm-4.61.2.tar.gz", hash = "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"}, ] From f9759e8e71d7716a6b8c0fb00ebb10646df75061 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Jul 2021 06:06:17 +0000 Subject: [PATCH 095/185] Bump rich from 10.5.0 to 10.6.0 (#46) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2c01178d..aaddb1bd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.5.0" +version = "10.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -440,8 +440,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.5.0-py3-none-any.whl", hash = "sha256:d36d4dddbb6cb87cdcb2c02f8ffd7836e1b136e3ba45d4b5a4da057f3b5e7798"}, - {file = "rich-10.5.0.tar.gz", hash = "sha256:f8a16484b3d70708bdafd04f659f9ca0e2c0129b33a343c10c734838d361777f"}, + {file = "rich-10.6.0-py3-none-any.whl", hash = "sha256:d3f72827cd5df13b2ef7f1a97f81ec65548d4fdeb92cef653234f227580bbb2a"}, + {file = "rich-10.6.0.tar.gz", hash = "sha256:128261b3e2419a4ef9c97066ccc2abbfb49fa7c5e89c3fe4056d00aa5e9c1e65"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 54fe12b7ec5530f807ff2a88194b25bd6a1b974c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jul 2021 09:04:52 +0000 Subject: [PATCH 096/185] Bump black from 21.6b0 to 21.7b0 (#47) --- poetry.lock | 22 +++++++++++++++++----- pyproject.toml | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index aaddb1bd..2708a1ff 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,7 +30,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.6b0" +version = "21.7b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -42,7 +42,7 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.8.1,<1" regex = ">=2020.1.8" -toml = ">=0.10.1" +tomli = ">=0.2.6,<2.0.0" [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -251,6 +251,14 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "tomli" +version = "1.0.4" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "tqdm" version = "4.61.2" @@ -270,7 +278,7 @@ telegram = ["requests"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "325465aaf0018392a1837691cf3a3c1ac2c687fa4ad3e3b69904dd601b735cd7" +content-hash = "56e69baf10f9651d2f440eef696ec1dbe97211d2d7dd4df4cff477e70ccbe0e5" [metadata.files] appdirs = [ @@ -286,8 +294,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.6b0-py3-none-any.whl", hash = "sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"}, - {file = "black-21.6b0.tar.gz", hash = "sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04"}, + {file = "black-21.7b0-py3-none-any.whl", hash = "sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116"}, + {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -451,6 +459,10 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +tomli = [ + {file = "tomli-1.0.4-py3-none-any.whl", hash = "sha256:0713b16ff91df8638a6a694e295c8159ab35ba93e3424a626dd5226d386057be"}, + {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, +] tqdm = [ {file = "tqdm-4.61.2-py2.py3-none-any.whl", hash = "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64"}, {file = "tqdm-4.61.2.tar.gz", hash = "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"}, diff --git a/pyproject.toml b/pyproject.toml index 695db2fa..7d919021 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.4" -black = "^21.6b0" +black = "^21.7b0" [build-system] requires = ["poetry>=0.12"] From 147aa5c9a433ae4ec03d4fd5a0d57b6abc7bb4c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jul 2021 09:04:55 +0000 Subject: [PATCH 097/185] Bump numpy from 1.21.0 to 1.21.1 (#48) --- poetry.lock | 58 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2708a1ff..cd2753db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,7 +95,7 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.21.0" +version = "1.21.1" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -318,34 +318,34 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.21.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d5caa946a9f55511e76446e170bdad1d12d6b54e17a2afe7b189112ed4412bb8"}, - {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ac4fd578322842dbda8d968e3962e9f22e862b6ec6e3378e7415625915e2da4d"}, - {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:598fe100b2948465cf3ed64b1a326424b5e4be2670552066e17dfaa67246011d"}, - {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c55407f739f0bfcec67d0df49103f9333edc870061358ac8a8c9e37ea02fcd2"}, - {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75579acbadbf74e3afd1153da6177f846212ea2a0cc77de53523ae02c9256513"}, - {file = "numpy-1.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cc367c86eb87e5b7c9592935620f22d13b090c609f1b27e49600cd033b529f54"}, - {file = "numpy-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:d89b0dc7f005090e32bb4f9bf796e1dcca6b52243caf1803fdd2b748d8561f63"}, - {file = "numpy-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eda2829af498946c59d8585a9fd74da3f810866e05f8df03a86f70079c7531dd"}, - {file = "numpy-1.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1a784e8ff7ea2a32e393cc53eb0003eca1597c7ca628227e34ce34eb11645a0e"}, - {file = "numpy-1.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bba474a87496d96e61461f7306fba2ebba127bed7836212c360f144d1e72ac54"}, - {file = "numpy-1.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd0a359c1c17f00cb37de2969984a74320970e0ceef4808c32e00773b06649d9"}, - {file = "numpy-1.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4d5a86a5257843a18fb1220c5f1c199532bc5d24e849ed4b0289fb59fbd4d8f"}, - {file = "numpy-1.21.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:620732f42259eb2c4642761bd324462a01cdd13dd111740ce3d344992dd8492f"}, - {file = "numpy-1.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9205711e5440954f861ceeea8f1b415d7dd15214add2e878b4d1cf2bcb1a914"}, - {file = "numpy-1.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ad09f55cc95ed8d80d8ab2052f78cc21cb231764de73e229140d81ff49d8145e"}, - {file = "numpy-1.21.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a1f2fb2da242568af0271455b89aee0f71e4e032086ee2b4c5098945d0e11cf6"}, - {file = "numpy-1.21.0-cp38-cp38-win32.whl", hash = "sha256:e58ddb53a7b4959932f5582ac455ff90dcb05fac3f8dcc8079498d43afbbde6c"}, - {file = "numpy-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:d2910d0a075caed95de1a605df00ee03b599de5419d0b95d55342e9a33ad1fb3"}, - {file = "numpy-1.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a290989cd671cd0605e9c91a70e6df660f73ae87484218e8285c6522d29f6e38"}, - {file = "numpy-1.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3537b967b350ad17633b35c2f4b1a1bbd258c018910b518c30b48c8e41272717"}, - {file = "numpy-1.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc6c650f8700ce1e3a77668bb7c43e45c20ac06ae00d22bdf6760b38958c883"}, - {file = "numpy-1.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:709884863def34d72b183d074d8ba5cfe042bc3ff8898f1ffad0209161caaa99"}, - {file = "numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bebab3eaf0641bba26039fb0b2c5bf9b99407924b53b1ea86e03c32c64ef5aef"}, - {file = "numpy-1.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf680682ad0a3bef56dae200dbcbac2d57294a73e5b0f9864955e7dd7c2c2491"}, - {file = "numpy-1.21.0-cp39-cp39-win32.whl", hash = "sha256:d95d16204cd51ff1a1c8d5f9958ce90ae190be81d348b514f9be39f878b8044a"}, - {file = "numpy-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:2ba579dde0563f47021dcd652253103d6fd66165b18011dce1a0609215b2791e"}, - {file = "numpy-1.21.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c40e6b860220ed862e8097b8f81c9af6d7405b723f4a7af24a267b46f90e461"}, - {file = "numpy-1.21.0.zip", hash = "sha256:e80fe25cba41c124d04c662f33f6364909b985f2eb5998aaa5ae4b9587242cce"}, + {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, + {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, + {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, + {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, + {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, + {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, + {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, + {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, + {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, ] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, From 4349df9c7ce13c7f3ef10d62fb6626b126b34370 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Aug 2021 12:07:49 +0000 Subject: [PATCH 098/185] Bump tqdm from 4.61.2 to 4.62.0 (#50) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index cd2753db..5d3e076b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -261,7 +261,7 @@ python-versions = ">=3.6" [[package]] name = "tqdm" -version = "4.61.2" +version = "4.62.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -464,6 +464,6 @@ tomli = [ {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, ] tqdm = [ - {file = "tqdm-4.61.2-py2.py3-none-any.whl", hash = "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64"}, - {file = "tqdm-4.61.2.tar.gz", hash = "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"}, + {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"}, + {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"}, ] From b2bb4d03006d7cf7d4d8059b8d4088c61b3b5f51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Aug 2021 12:08:37 +0000 Subject: [PATCH 099/185] Bump pandas from 1.3.0 to 1.3.1 (#49) --- poetry.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5d3e076b..d23f9a0d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -114,7 +114,7 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.3.0" +version = "1.3.1" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -352,25 +352,25 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c81b8d91e9ae861eb4406b4e0f8d4dabbc105b9c479b3d1e921fba1d35b5b62a"}, - {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08eeff3da6a188e24db7f292b39a8ca9e073bf841fbbeadb946b3ad5c19d843e"}, - {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88864c1e28353b958b1f30e4193818519624ad9a1776921622a6a2a016d5d807"}, - {file = "pandas-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:872aa91e0f9ca913046ab639d4181a899f5e592030d954d28c2529b88756a736"}, - {file = "pandas-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:92835113a67cbd34747c198d41f09f4b63f6fe11ca5643baebc7ab1e30e89e95"}, - {file = "pandas-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7d3cd2c99faa94d717ca00ea489264a291ad7209453dffbf059bfb7971fd3a61"}, - {file = "pandas-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:823737830364d0e2af8c3912a28ba971296181a07950873492ed94e12d28c405"}, - {file = "pandas-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c746876cdd8380be0c3e70966d4566855901ac9aaa5e4b9ccaa5ca5311457d11"}, - {file = "pandas-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe7a549d10ca534797095586883a5c17d140d606747591258869c56e14d1b457"}, - {file = "pandas-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f058c786e7b0a9e7fa5e0b9f4422e0ccdd3bf3aa3053c18d77ed2a459bd9a45a"}, - {file = "pandas-1.3.0-cp38-cp38-win32.whl", hash = "sha256:98efc2d4983d5bb47662fe2d97b2c81b91566cb08b266490918b9c7d74a5ef64"}, - {file = "pandas-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e6b75091fa54a53db3927b4d1bc997c23c5ba6f87acdfe1ee5a92c38c6b2ed6a"}, - {file = "pandas-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ff13eed501e07e7fb26a4ea18a846b6e5d7de549b497025601fd9ccb7c1d123"}, - {file = "pandas-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:798675317d0e4863a92a9a6bc5bd2490b5f6fef8c17b95f29e2e33f28bef9eca"}, - {file = "pandas-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed4fc66f23fe17c93a5d439230ca2d6b5f8eac7154198d327dbe8a16d98f3f10"}, - {file = "pandas-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:522bfea92f3ef6207cadc7428bda1e7605dae0383b8065030e7b5d0266717b48"}, - {file = "pandas-1.3.0-cp39-cp39-win32.whl", hash = "sha256:7897326cae660eee69d501cbfa950281a193fcf407393965e1bc07448e1cc35a"}, - {file = "pandas-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b10d7910ae9d7920a5ff7816d794d99acbc361f7b16a0f017d4fa83ced8cb55e"}, - {file = "pandas-1.3.0.tar.gz", hash = "sha256:c554e6c9cf2d5ea1aba5979cc837b3649539ced0e18ece186f055450c86622e2"}, + {file = "pandas-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ee8418d0f936ff2216513aa03e199657eceb67690995d427a4a7ecd2e68f442"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d9acfca191140a518779d1095036d842d5e5bc8e8ad8b5eaad1aff90fe1870d"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e323028ab192fcfe1e8999c012a0fa96d066453bb354c7e7a4a267b25e73d3c8"}, + {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d06661c6eb741ae633ee1c57e8c432bb4203024e263fe1a077fa3fda7817fdb"}, + {file = "pandas-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:23c7452771501254d2ae23e9e9dac88417de7e6eff3ce64ee494bb94dc88c300"}, + {file = "pandas-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7150039e78a81eddd9f5a05363a11cadf90a4968aac6f086fd83e66cf1c8d1d6"}, + {file = "pandas-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5c09a2538f0fddf3895070579082089ff4ae52b6cb176d8ec7a4dacf7e3676c1"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:905fc3e0fcd86b0a9f1f97abee7d36894698d2592b22b859f08ea5a8fe3d3aab"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ee927c70794e875a59796fab8047098aa59787b1be680717c141cd7873818ae"}, + {file = "pandas-1.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c976e023ed580e60a82ccebdca8e1cc24d8b1fbb28175eb6521025c127dab66"}, + {file = "pandas-1.3.1-cp38-cp38-win32.whl", hash = "sha256:22f3fcc129fb482ef44e7df2a594f0bd514ac45aabe50da1a10709de1b0f9d84"}, + {file = "pandas-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45656cd59ae9745a1a21271a62001df58342b59c66d50754390066db500a8362"}, + {file = "pandas-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:114c6789d15862508900a25cb4cb51820bfdd8595ea306bab3b53cd19f990b65"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:527c43311894aff131dea99cf418cd723bfd4f0bcf3c3da460f3b57e52a64da5"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb3b33dde260b1766ea4d3c6b8fbf6799cee18d50a2a8bc534cf3550b7c819a"}, + {file = "pandas-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c28760932283d2c9f6fa5e53d2f77a514163b9e67fd0ee0879081be612567195"}, + {file = "pandas-1.3.1-cp39-cp39-win32.whl", hash = "sha256:be12d77f7e03c40a2466ed00ccd1a5f20a574d3c622fe1516037faa31aa448aa"}, + {file = "pandas-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9e1fe6722cbe27eb5891c1977bca62d456c19935352eea64d33956db46139364"}, + {file = "pandas-1.3.1.tar.gz", hash = "sha256:341935a594db24f3ff07d1b34d1d231786aa9adfa84b76eab10bf42907c8aed3"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, From cabf2a9991c77356022829bf746365c90f25f2b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 11:34:34 +0000 Subject: [PATCH 100/185] Bump rich from 10.6.0 to 10.7.0 (#51) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d23f9a0d..cfbfd716 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.6.0" +version = "10.7.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -448,8 +448,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.6.0-py3-none-any.whl", hash = "sha256:d3f72827cd5df13b2ef7f1a97f81ec65548d4fdeb92cef653234f227580bbb2a"}, - {file = "rich-10.6.0.tar.gz", hash = "sha256:128261b3e2419a4ef9c97066ccc2abbfb49fa7c5e89c3fe4056d00aa5e9c1e65"}, + {file = "rich-10.7.0-py3-none-any.whl", hash = "sha256:517b4e0efd064dd1fe821ca93dd3095d73380ceac1f0a07173d507d9b18f1396"}, + {file = "rich-10.7.0.tar.gz", hash = "sha256:13ac80676e12cf528dc4228dc682c8402f82577c2aa67191e294350fa2c3c4e9"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From aa1de015775aef948b40e6319115ff1566e3a0c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Aug 2021 17:20:05 +0000 Subject: [PATCH 101/185] Bump tqdm from 4.62.0 to 4.62.1 (#52) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index cfbfd716..3295d894 100644 --- a/poetry.lock +++ b/poetry.lock @@ -261,7 +261,7 @@ python-versions = ">=3.6" [[package]] name = "tqdm" -version = "4.62.0" +version = "4.62.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -464,6 +464,6 @@ tomli = [ {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, ] tqdm = [ - {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"}, - {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"}, + {file = "tqdm-4.62.1-py2.py3-none-any.whl", hash = "sha256:07856e19a1fe4d2d9621b539d3f072fa88c9c1ef1f3b7dd4d4953383134c3164"}, + {file = "tqdm-4.62.1.tar.gz", hash = "sha256:35540feeaca9ac40c304e916729e6b78045cbbeccd3e941b2868f09306798ac9"}, ] From d0a9461660e83e687ca8b77047161009bee79b9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Aug 2021 17:20:39 +0000 Subject: [PATCH 102/185] Bump pandas from 1.3.1 to 1.3.2 (#53) --- poetry.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3295d894..e7f113e2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -114,7 +114,7 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.3.1" +version = "1.3.2" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -352,25 +352,25 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ee8418d0f936ff2216513aa03e199657eceb67690995d427a4a7ecd2e68f442"}, - {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d9acfca191140a518779d1095036d842d5e5bc8e8ad8b5eaad1aff90fe1870d"}, - {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e323028ab192fcfe1e8999c012a0fa96d066453bb354c7e7a4a267b25e73d3c8"}, - {file = "pandas-1.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d06661c6eb741ae633ee1c57e8c432bb4203024e263fe1a077fa3fda7817fdb"}, - {file = "pandas-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:23c7452771501254d2ae23e9e9dac88417de7e6eff3ce64ee494bb94dc88c300"}, - {file = "pandas-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7150039e78a81eddd9f5a05363a11cadf90a4968aac6f086fd83e66cf1c8d1d6"}, - {file = "pandas-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5c09a2538f0fddf3895070579082089ff4ae52b6cb176d8ec7a4dacf7e3676c1"}, - {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:905fc3e0fcd86b0a9f1f97abee7d36894698d2592b22b859f08ea5a8fe3d3aab"}, - {file = "pandas-1.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ee927c70794e875a59796fab8047098aa59787b1be680717c141cd7873818ae"}, - {file = "pandas-1.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c976e023ed580e60a82ccebdca8e1cc24d8b1fbb28175eb6521025c127dab66"}, - {file = "pandas-1.3.1-cp38-cp38-win32.whl", hash = "sha256:22f3fcc129fb482ef44e7df2a594f0bd514ac45aabe50da1a10709de1b0f9d84"}, - {file = "pandas-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45656cd59ae9745a1a21271a62001df58342b59c66d50754390066db500a8362"}, - {file = "pandas-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:114c6789d15862508900a25cb4cb51820bfdd8595ea306bab3b53cd19f990b65"}, - {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:527c43311894aff131dea99cf418cd723bfd4f0bcf3c3da460f3b57e52a64da5"}, - {file = "pandas-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb3b33dde260b1766ea4d3c6b8fbf6799cee18d50a2a8bc534cf3550b7c819a"}, - {file = "pandas-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c28760932283d2c9f6fa5e53d2f77a514163b9e67fd0ee0879081be612567195"}, - {file = "pandas-1.3.1-cp39-cp39-win32.whl", hash = "sha256:be12d77f7e03c40a2466ed00ccd1a5f20a574d3c622fe1516037faa31aa448aa"}, - {file = "pandas-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9e1fe6722cbe27eb5891c1977bca62d456c19935352eea64d33956db46139364"}, - {file = "pandas-1.3.1.tar.gz", hash = "sha256:341935a594db24f3ff07d1b34d1d231786aa9adfa84b76eab10bf42907c8aed3"}, + {file = "pandas-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ba7ceb8abc6dbdb1e34612d1173d61e4941f1a1eb7e6f703b2633134ae6a6c89"}, + {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb71b1935249de80e3a808227189eee381d4d74a31760ced2df21eedc92a8e3"}, + {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa54dc1d3e5d004a09ab0b1751473698011ddf03e14f1f59b84ad9a6ac630975"}, + {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34ced9ce5d5b17b556486da7256961b55b471d64a8990b56e67a84ebeb259416"}, + {file = "pandas-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:a56246de744baf646d1f3e050c4653d632bc9cd2e0605f41051fea59980e880a"}, + {file = "pandas-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:53b17e4debba26b7446b1e4795c19f94f0c715e288e08145e44bdd2865e819b3"}, + {file = "pandas-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f07a9745ca075ae73a5ce116f5e58f691c0dc9de0bff163527858459df5c176f"}, + {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9e8e0ce5284ebebe110efd652c164ed6eab77f5de4c3533abc756302ee77765"}, + {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a78d7066d1c921a77e3306aa0ebf6e55396c097d5dfcc4df8defe3dcecb735"}, + {file = "pandas-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:132def05e73d292c949b02e7ef873debb77acc44a8b119d215921046f0c3a91d"}, + {file = "pandas-1.3.2-cp38-cp38-win32.whl", hash = "sha256:69e1b2f5811f46827722fd641fdaeedb26002bd1e504eacc7a8ec36bdc25393e"}, + {file = "pandas-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:7996d311413379136baf0f3cf2a10e331697657c87ced3f17ac7c77f77fe34a3"}, + {file = "pandas-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1738154049062156429a5cf2fd79a69c9f3fa4f231346a7ec6fd156cd1a9a621"}, + {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cce01f6d655b4add966fcd36c32c5d1fe84628e200626b3f5e2f40db2d16a0f"}, + {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1099e2a0cd3a01ec62cca183fc1555833a2d43764950ef8cb5948c8abfc51014"}, + {file = "pandas-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cd5776be891331a3e6b425b5abeab9596abea18435c5982191356f9b24ae731"}, + {file = "pandas-1.3.2-cp39-cp39-win32.whl", hash = "sha256:66a95361b81b4ba04b699ecd2416b0591f40cd1e24c60a8bfe0d19009cfa575a"}, + {file = "pandas-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:89f40e5d21814192802421df809f948247d39ffe171e45fe2ab4abf7bd4279d8"}, + {file = "pandas-1.3.2.tar.gz", hash = "sha256:cbcb84d63867af3411fa063af3de64902665bb5b3d40b25b2059e40603594e87"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, From 26ae68dac51d1d518c38f78b815b03786ef8692b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Aug 2021 07:18:40 +0000 Subject: [PATCH 103/185] Bump tqdm from 4.62.1 to 4.62.2 (#54) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index e7f113e2..f13481d0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -261,7 +261,7 @@ python-versions = ">=3.6" [[package]] name = "tqdm" -version = "4.62.1" +version = "4.62.2" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -464,6 +464,6 @@ tomli = [ {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, ] tqdm = [ - {file = "tqdm-4.62.1-py2.py3-none-any.whl", hash = "sha256:07856e19a1fe4d2d9621b539d3f072fa88c9c1ef1f3b7dd4d4953383134c3164"}, - {file = "tqdm-4.62.1.tar.gz", hash = "sha256:35540feeaca9ac40c304e916729e6b78045cbbeccd3e941b2868f09306798ac9"}, + {file = "tqdm-4.62.2-py2.py3-none-any.whl", hash = "sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588"}, + {file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"}, ] From e4ff3c117d06cae8767bd638975d372db55e00b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 14:45:12 +0000 Subject: [PATCH 104/185] Bump rich from 10.7.0 to 10.9.0 (#55) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index f13481d0..9db08ce0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,7 +221,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.7.0" +version = "10.9.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -448,8 +448,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.7.0-py3-none-any.whl", hash = "sha256:517b4e0efd064dd1fe821ca93dd3095d73380ceac1f0a07173d507d9b18f1396"}, - {file = "rich-10.7.0.tar.gz", hash = "sha256:13ac80676e12cf528dc4228dc682c8402f82577c2aa67191e294350fa2c3c4e9"}, + {file = "rich-10.9.0-py3-none-any.whl", hash = "sha256:2c84d9b3459c16bf413fe0f9644c7ae1791971e0bb944dfae56e7c7634b187ab"}, + {file = "rich-10.9.0.tar.gz", hash = "sha256:ba285f1c519519490034284e6a9d2e6e3f16dc7690f2de3d9140737d81304d22"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From be59c501277f56d277d1e67b7ff9f1bc6cdd6bf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 14:45:15 +0000 Subject: [PATCH 105/185] Bump black from 21.7b0 to 21.8b0 (#56) --- poetry.lock | 77 +++++++++++++++++++++++++++++++++++--------------- pyproject.toml | 2 +- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9db08ce0..6a3d1dbb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,11 +1,3 @@ -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "atomicwrites" version = "1.4.0" @@ -30,23 +22,28 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.7b0" +version = "21.8b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -appdirs = "*" click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.8.1,<1" +pathspec = ">=0.9.0,<1" +platformdirs = ">=2" regex = ">=2020.1.8" tomli = ">=0.2.6,<2.0.0" +typing-extensions = [ + {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, + {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, +] [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] python2 = ["typed-ast (>=1.4.2)"] uvloop = ["uvloop (>=0.15.2)"] @@ -130,11 +127,23 @@ test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] [[package]] name = "pathspec" -version = "0.8.1" +version = "0.9.0" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "platformdirs" +version = "2.2.0" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pluggy" @@ -275,16 +284,28 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] +[[package]] +name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "typing-extensions" +version = "3.10.0.1" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "dev" +optional = false +python-versions = "*" + [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "56e69baf10f9651d2f440eef696ec1dbe97211d2d7dd4df4cff477e70ccbe0e5" +content-hash = "24751837576b6250517f9d6841a1a68bf8390beae52861c000e936ef8545eb4e" [metadata.files] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -294,8 +315,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.7b0-py3-none-any.whl", hash = "sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116"}, - {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, + {file = "black-21.8b0-py3-none-any.whl", hash = "sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7"}, + {file = "black-21.8b0.tar.gz", hash = "sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -373,8 +394,12 @@ pandas = [ {file = "pandas-1.3.2.tar.gz", hash = "sha256:cbcb84d63867af3411fa063af3de64902665bb5b3d40b25b2059e40603594e87"}, ] pathspec = [ - {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, - {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +platformdirs = [ + {file = "platformdirs-2.2.0-py3-none-any.whl", hash = "sha256:4666d822218db6a262bdfdc9c39d21f23b4cfdb08af331a81e92751daf6c866c"}, + {file = "platformdirs-2.2.0.tar.gz", hash = "sha256:632daad3ab546bd8e6af0537d09805cec458dce201bccfe23012df73332e181e"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, @@ -467,3 +492,11 @@ tqdm = [ {file = "tqdm-4.62.2-py2.py3-none-any.whl", hash = "sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588"}, {file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"}, ] +typing-extensions = [ + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, + {file = "typing_extensions-3.10.0.1-py2-none-any.whl", hash = "sha256:8bbffbd37fbeb9747a0241fdfde5ae99d4531ad1d1a41ccaea62100e15a5814c"}, + {file = "typing_extensions-3.10.0.1-py3-none-any.whl", hash = "sha256:045dd532231acfa03628df5e0c66dba64e2cc8fc8b844538d4ad6d5dd6cb82dc"}, + {file = "typing_extensions-3.10.0.1.tar.gz", hash = "sha256:83af6730a045fda60f46510f7f1f094776d90321caa4d97d20ef38871bef4bd3"}, +] diff --git a/pyproject.toml b/pyproject.toml index 7d919021..f58f153c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.4" -black = "^21.7b0" +black = "^21.8b0" [build-system] requires = ["poetry>=0.12"] From d69a8977b2806e25ac96ea0d4c9571b28537776e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Aug 2021 19:50:41 +0000 Subject: [PATCH 106/185] Bump pytest from 6.2.4 to 6.2.5 (#57) --- poetry.lock | 20 ++++++++++---------- pyproject.toml | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6a3d1dbb..5536d3ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -182,7 +182,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.2.4" +version = "6.2.5" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -194,7 +194,7 @@ attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0.0a1" +pluggy = ">=0.12,<2.0" py = ">=1.8.2" toml = "*" @@ -286,7 +286,7 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "3.7.4.3" +version = "3.10.0.1" description = "Backported and Experimental Type Hints for Python 3.5+" category = "dev" optional = false @@ -294,7 +294,7 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "3.10.0.1" +version = "3.10.0.2" description = "Backported and Experimental Type Hints for Python 3.5+" category = "dev" optional = false @@ -303,7 +303,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "24751837576b6250517f9d6841a1a68bf8390beae52861c000e936ef8545eb4e" +content-hash = "bab0efbfec6fcd008ee3d8c7299896ad1af2b80a629b71d651b73526123fbf6b" [metadata.files] atomicwrites = [ @@ -418,8 +418,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, - {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -493,10 +493,10 @@ tqdm = [ {file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, {file = "typing_extensions-3.10.0.1-py2-none-any.whl", hash = "sha256:8bbffbd37fbeb9747a0241fdfde5ae99d4531ad1d1a41ccaea62100e15a5814c"}, {file = "typing_extensions-3.10.0.1-py3-none-any.whl", hash = "sha256:045dd532231acfa03628df5e0c66dba64e2cc8fc8b844538d4ad6d5dd6cb82dc"}, {file = "typing_extensions-3.10.0.1.tar.gz", hash = "sha256:83af6730a045fda60f46510f7f1f094776d90321caa4d97d20ef38871bef4bd3"}, + {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, + {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, + {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, ] diff --git a/pyproject.toml b/pyproject.toml index f58f153c..aeb35b34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ rich = ">=9.10,<11.0" tqdm = "^4.58.0" [tool.poetry.dev-dependencies] -pytest = "^6.2.4" +pytest = "^6.2.5" black = "^21.8b0" [build-system] From 8f3f6210ee4061a14dfa7da8bdb5ea2327b2ff6c Mon Sep 17 00:00:00 2001 From: "sourcery-ai[bot]" <58596630+sourcery-ai[bot]@users.noreply.github.com> Date: Wed, 8 Sep 2021 11:37:06 +0200 Subject: [PATCH 107/185] 'Refactored by Sourcery' (#58) Co-authored-by: Sourcery AI <> --- ifpd2/asserts.py | 9 ++-- ifpd2/chromosome.py | 8 ++-- ifpd2/database.py | 9 ++-- ifpd2/io.py | 4 +- ifpd2/logging.py | 2 +- ifpd2/oligo.py | 46 +++++++++----------- ifpd2/probe.py | 54 ++++++++++------------- ifpd2/probe_set.py | 16 +++---- ifpd2/region.py | 5 +-- ifpd2/scripts/db_make.py | 6 +-- ifpd2/scripts/db_merge.py | 1 - ifpd2/scripts/db_reindex.py | 1 - ifpd2/scripts/query.py | 2 +- ifpd2/walker.py | 87 ++++++++++++++++++------------------- ifpd2/walker2.py | 13 ++---- 15 files changed, 117 insertions(+), 146 deletions(-) diff --git a/ifpd2/asserts.py b/ifpd2/asserts.py index fadf47e2..d0e9f7fe 100644 --- a/ifpd2/asserts.py +++ b/ifpd2/asserts.py @@ -14,7 +14,7 @@ def ert_type(x, stype, label): def ert_multiTypes(x, types, label): - cond = any([isinstance(x, t) for t in types]) + cond = any(isinstance(x, t) for t in types) assert cond, f"{label} should be one of {types}, {type(x)} instead" @@ -31,11 +31,10 @@ def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True): assert x >= vmin and x <= vmax, f"expected {vmin}<={label}<={vmax}" else: assert x >= vmin and x < vmax, f"expected {vmin}<={label}<{vmax}" + elif rightClose: + assert x > vmin and x <= vmax, f"expected {vmin}<{label}<={vmax}" else: - if rightClose: - assert x > vmin and x <= vmax, f"expected {vmin}<{label}<={vmax}" - else: - assert x > vmin and x < vmax, f"expected {vmin}<{label}<{vmax}" + assert x > vmin and x < vmax, f"expected {vmin}<{label}<{vmax}" def ert_in_dtype(x, dtype): diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index f94f318b..fe1dca95 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -33,7 +33,7 @@ def __init_index(self, chrom_db: pd.DataFrame) -> None: """ self._index = {} chrom_size_nt = chrom_db["end"].values.max() - for bin_id in range(0, (chrom_size_nt // self._bin_size) + 1): + for bin_id in range((chrom_size_nt // self._bin_size) + 1): self._index[bin_id] = (np.inf, 0) @property @@ -70,10 +70,8 @@ def __populate_bins( binned_to = position_in_nt // self._bin_size bin_start, bin_end = list(self._index[binned_to]) - if bin_start > position_in_bytes: - bin_start = position_in_bytes - if bin_end < position_in_bytes: - bin_end = position_in_bytes + bin_start = min(bin_start, position_in_bytes) + bin_end = max(bin_end, position_in_bytes) self._index[binned_to] = (bin_start, bin_end) def __fill_empty_bins(self) -> None: diff --git a/ifpd2/database.py b/ifpd2/database.py index ed5c4767..3ae4e6fe 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -64,7 +64,7 @@ def to_csv(self, sep: str = ",") -> str: @staticmethod def __norm_value_in_range(v, r): - if 0 == r[1]: + if r[1] == 0: return np.nan return (v - r[0]) / (r[1] - r[0]) @@ -103,7 +103,7 @@ def add_score(self, F, Gs) -> None: norm_nOT = self.__update_score_by_nOT(F) if norm_nOT is None: return - if all([x >= 0 for x in Gs]): + if all(x >= 0 for x in Gs): norm_ss_dG = self.__update_score_by_dG_Tm(Gs) else: norm_ss_dG = self.__update_score_by_dG_Gs(Gs) @@ -112,8 +112,7 @@ def add_score(self, F, Gs) -> None: self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) def __getitem__(self, key: str) -> Any: - allowed_columns = ["score"] - allowed_columns.extend(const.database_columns) + allowed_columns = ['score', *const.database_columns] if key not in allowed_columns: raise KeyError(f"unrecognized key '{key}'") else: @@ -205,7 +204,7 @@ def log_details(self) -> None: logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") logging.info("Chromosomes:") for chromosome, data in self._chromosomes.items(): - empty_label = "".join([" " for c in chromosome.decode()]) + empty_label = "".join(" " for c in chromosome.decode()) logging.info(f"\t{chromosome.decode()} => size : {data.size_nt} (nt)") logging.info(f"\t{chromosome.decode()} => size : {data.size_bytes} (bytes)") logging.info(f"\t{empty_label} => recordno : {data.recordno}") diff --git a/ifpd2/io.py b/ifpd2/io.py index 1cf3fee0..f009a782 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -22,7 +22,7 @@ def get_dtype_length(dtype: Dict[str, str]) -> int: Returns: int -- length of record in bytes """ - return sum([int(label.strip("><|SUuif")) for label in dtype.values()]) + return sum(int(label.strip("><|SUuif")) for label in dtype.values()) def parse_hush(path: str) -> pd.DataFrame: @@ -81,7 +81,7 @@ def parse_melting(path: str, sep: str = "\t", header: bool = True) -> pd.DataFra expected_columns.pop("name", None) expected_columns[ "sequence" - ] = f'|S{max(set([len(seq) for seq in melting_df["sequence"].values]))}' + ] = f'|S{max({len(seq) for seq in melting_df["sequence"].values})}' return melting_df.astype(expected_columns) diff --git a/ifpd2/logging.py b/ifpd2/logging.py index 6de9d49d..1995f193 100644 --- a/ifpd2/logging.py +++ b/ifpd2/logging.py @@ -13,7 +13,7 @@ def add_log_file_handler(path: str, logger_name: Optional[str] = None) -> None: assert not os.path.isdir(path) log_dir = os.path.dirname(path) - assert os.path.isdir(log_dir) or "" == log_dir + assert os.path.isdir(log_dir) or log_dir == "" fh = RichHandler(console=Console(file=open(path, mode="w+")), markup=True) fh.setLevel(logging.INFO) logging.getLogger(logger_name).addHandler(fh) diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index acc9fd55..e7ee4287 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -75,7 +75,7 @@ def score(self): @staticmethod def __norm_value_in_range(v, r): - if 0 == r[1]: + if r[1] == 0: return np.nan return (v - r[0]) / (r[1] - r[0]) @@ -114,7 +114,7 @@ def add_score(self, F, Gs): norm_nOT = self.__update_score_by_nOT(F) if norm_nOT is None: return - if all([x >= 0 for x in Gs]): + if all(x >= 0 for x in Gs): norm_ss_dG = self.__update_score_by_dG_Tm(Gs) else: norm_ss_dG = self.__update_score_by_dG_Gs(Gs) @@ -188,7 +188,7 @@ def get_focused_oligos(self, onlyUsable=False): return self._data.loc[self.oligos_in_focus_window, :] def get_n_focused_oligos(self, onlyUsable=False): - if 0 == self.usable_oligos.sum(): + if self.usable_oligos.sum() == 0: return 0 return self.get_focused_oligos(onlyUsable).shape[0] @@ -225,7 +225,7 @@ def expand_focus_to_n_oligos(self, n, verbose=True): if n <= self.get_n_focused_oligos(): return - for i in range(n - self.get_n_focused_oligos()): + for _ in range(n - self.get_n_focused_oligos()): if not self.expand_focus_to_closest(): return @@ -245,17 +245,19 @@ def expand_focus_by_step(self, step, verbose=True): # Expand the current focus window of a given step (in nt) assert 0 < step - if self.focus_window[0] <= self._data["start"].min(): - if self.focus_window[1] >= self._data["end"].max(): - self.logger.warning( - " ".join( - [ - "Cannot expand the focus region any further ", - "(all oligos already included)", - ] - ) + if ( + self.focus_window[0] <= self._data["start"].min() + and self.focus_window[1] >= self._data["end"].max() + ): + self.logger.warning( + " ".join( + [ + "Cannot expand the focus region any further ", + "(all oligos already included)", + ] ) - return False + ) + return False new_focus_start, new_focus_end = self.focus_window new_focus_start -= step / 2 @@ -269,18 +271,10 @@ def expand_focus_by_step(self, step, verbose=True): def __get_focus_extremes(self): earl = self._data["start"].values < self.focus_window[0] max_start = self._data.loc[earl, "start"].max() - if 0 != earl.sum(): - d_earl = self.focus_window[0] - max_start - else: - d_earl = np.inf - + d_earl = self.focus_window[0] - max_start if earl.sum() != 0 else np.inf late = self._data["end"].values >= self.focus_window[1] min_end = self._data.loc[late, "end"].min() - if 0 != late.sum(): - d_late = min_end - self.focus_window[1] - else: - d_late = np.inf - + d_late = min_end - self.focus_window[1] if late.sum() != 0 else np.inf return (max_start, min_end, d_earl, d_late) def __set_focus_windows_for_inifinite_extreme(self): @@ -340,7 +334,7 @@ def __check_oligos_to_discard_safeN(self, safeN, start, end, D): c = 1 while c <= safeN: passing_oData = oData.loc[oData["start"] > start, :] - if 0 == passing_oData.shape[0]: + if passing_oData.shape[0] == 0: self.logger.info("Not enough oligos, skipped discard step.") return False start = passing_oData["start"].values[0] @@ -350,7 +344,7 @@ def __check_oligos_to_discard_safeN(self, safeN, start, end, D): c = 1 while c <= safeN: passing_oData = oData.loc[oData["end"] <= end] - if 0 == passing_oData.shape[-1]: + if passing_oData.shape[-1] == 0: self.logger.info("Not enough oligos, skipped discard step.") return False end = passing_oData["end"].values[-1] diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 49b1c234..4516350e 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -27,7 +27,7 @@ def data(self): def data(self, oligo_data): assert isinstance(oligo_data, pd.DataFrame) required_columns = ["start", "end", "Tm"] - assert all([col in oligo_data.columns for col in required_columns]) + assert all(col in oligo_data.columns for col in required_columns) self._data = oligo_data self._range = (self._data["start"].min(), self._data["end"].max()) self._size = self._range[1] - self._range[0] @@ -171,9 +171,10 @@ def get_paths(A): idxs = [ i for i in range(A.shape[0] - 1) - if i in path_start_set or 0 != len(A[i, i + 1].nonzero()[0]) + if i in path_start_set or len(A[i, i + 1].nonzero()[0]) != 0 ] + for i in idxs: path = [i] k = i @@ -202,18 +203,13 @@ def get_non_overlapping_paths(oData, D): # distance equal to D ass.ert_type(oData, pd.DataFrame, "oData") - edges = [] start_positions = oData["start"].values end_positions = oData["end"].values - for i in range(oData.shape[0]): - edges.append( - np.logical_or( + edges = [np.logical_or( end_positions + D < oData["start"].values[i], start_positions - D >= oData["end"].values[i], - ) - ) - + ) for i in range(oData.shape[0])] return OligoPathBuilder.get_paths(np.vstack(edges).astype("i")) def __size_paths(self, path_set, exit_polls): @@ -247,7 +243,7 @@ def filter_paths(self, path_set, oData): continue selected_paths.add(path) - comment = "".join([f"{r}{c}" for (c, r) in exit_polls.items()]) + comment = "".join(f"{r}{c}" for (c, r) in exit_polls.items()) return (list(selected_paths), comment) def __path_passes(self, path, oData): @@ -272,7 +268,7 @@ def convert_paths_to_probes(path_list, oData): # Converts a list of paths into a list of probes ass.ert_type(path_list, list, "path list") probe_list = [] - if 0 != len(path_list): + if len(path_list) != 0: for path in path_list: probe_list.append(OligoProbeBuilder.path2probe(path, oData)) return probe_list @@ -341,17 +337,16 @@ def _assert(self): assert self.Gs[1] <= self.Gs[0] ass.ert_type(self.Ot, float, "Ot") - assert 0 < self.Ot and 1 >= self.Ot + assert self.Ot > 0 and self.Ot <= 1 def get_prologue(self): s = "* OligoProbeBuilder *\n\n" s += f"Aim to build probes with {self.N} oligos each.\n" s += f"Off-target threshold range set at {self.F}.\n" + s += "Threshold on the delta free energy of the most stable" if isinstance(self.Gs[0], int): - s += "Threshold on the delta free energy of the most stable" s += f" secondary structure set at range {self.Gs} kcal/mol.\n" else: - s += "Threshold on the delta free energy of the most stable" s += " secondary structure\nset at range" s += f" {[t*100 for t in self.Gs]}% of the delta free energy of" s += " hybridization.\n" @@ -383,7 +378,7 @@ def __build_probe_candidates(self, oGroup, window, cfr_step, logger): oGroup = self.__focus_oligos(window, oGroup) probe_list = self.__explore_filter(oGroup, logger) if not np.isnan(window["cfr_start"]): - while 0 == len(probe_list): + while len(probe_list) == 0: oGroup.reset_threshold() if oGroup.focus_window_size >= self.Ps: oGroup.discard_focused_oligos_safeN(self.N - 1, self.D) @@ -399,14 +394,14 @@ def __build_probe_list(self, oGroup, noligos, score_thr, max_score, logger): probe_list = self.__get_non_overlapping_probes( oGroup.get_focused_oligos(True), logger ) - while 0 == len(probe_list): + while len(probe_list) == 0: score_thr += self.Ot if score_thr > max_score: break oGroup.apply_threshold(score_thr) nOligosUsable = oGroup.get_n_focused_oligos(True) - if nOligosUsable == noligos or 0 == nOligosUsable: + if nOligosUsable in [noligos, 0]: continue logger.info( @@ -457,7 +452,7 @@ def __explore_filter(self, oGroup, logger): ) ) - if 0 == max_score and 0 == nOligos_prev_score_thr: + if max_score == 0 and nOligos_prev_score_thr == 0: return [] while 0 == nOligos_prev_score_thr and score_thr <= max_score - self.Ot: @@ -483,7 +478,7 @@ def __get_non_overlapping_probes(self, oData, logger, verbosity=True): # to OligoProbe objects. paths = self.get_non_overlapping_paths(oData, self.D) - if 0 == len(paths): + if len(paths) == 0: logger.warning("No oligo paths found.") return [] @@ -537,7 +532,7 @@ def __init_probe_selection(self, sorted_probes): def reduce_probe_list(self, probe_list): try: - if 0 == len(probe_list): + if len(probe_list) == 0: return [] sorted_probes = sorted(probe_list, key=lambda p: p.range[0]) @@ -583,11 +578,10 @@ def import_probes(ipath): oligos = pd.read_csv(oPath, "\t", index_col=0) paths = pd.read_csv(pPath, "\t", index_col=0) - probe_list = [] - for p in paths.iloc[:, 0]: - probe_list.append(OligoProbe(oligos.loc[[int(o) for o in p.split(",")]])) - - return probe_list + return [ + OligoProbe(oligos.loc[[int(o) for o in p.split(",")]]) + for p in paths.iloc[:, 0] + ] @staticmethod def export_probes(probe_list, opath): @@ -602,11 +596,11 @@ def export_probes(probe_list, opath): os.path.join(opath, "oligos.tsv"), "\t" ) - probe_paths = [] - for pi in range(len(probe_list)): - probe_paths.append( - [",".join([str(x) for x in probe_list[pi].data.index.tolist()])] - ) + probe_paths = [ + [",".join(str(x) for x in probe_list[pi].data.index.tolist())] + for pi in range(len(probe_list)) + ] + probe_paths = pd.DataFrame(probe_paths) probe_paths.columns = ["cs_oligos"] probe_paths.to_csv(os.path.join(opath, "probe_paths.tsv"), "\t") diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index 4ddfe7ac..be27f4f0 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -28,7 +28,7 @@ def probe_list(self): @probe_list.setter def probe_list(self, probe_list): - assert all([isinstance(p, OligoProbe) for p in probe_list]) + assert all(isinstance(p, OligoProbe) for p in probe_list) self._probe_list = sorted(probe_list, key=lambda p: p.range[0]) self._probe_tm_ranges = [p.tm_range for p in self.probe_list] self._tm_range = ( @@ -41,10 +41,7 @@ def probe_list(self, probe_list): probe_starts = np.array([r[0] for r in self.probe_ranges]) probe_ends = np.array([r[1] for r in self.probe_ranges]) self._range = (probe_starts.min(), probe_ends.max()) - if 1 == len(probe_list): - self._ds = 0 - else: - self._ds = probe_starts[1:] - probe_ends[:-1] + self._ds = 0 if len(probe_list) == 1 else probe_starts[1:] - probe_ends[:-1] self._d_mean = np.mean(self.ds) self._d_range = (np.min(self.ds), np.max(self.ds)) tm = [p.data["Tm"].tolist() for p in self.probe_list] @@ -190,7 +187,7 @@ def __build_probe_set_list(self, window_list, i): probe_set_list = [(p,) for p in window_list[i]] for w in window_list[(i + 1) :]: - if 0 == len(w): + if len(w) == 0: continue current_probe_set_list = list(tuple(probe_set_list)) @@ -209,9 +206,10 @@ def build(self, probe_candidates): window_list = list(window_list.values()) non_empty_ids = [ - i for i in range(len(window_list)) if 0 != len(window_list[i]) + i for i in range(len(window_list)) if len(window_list[i]) != 0 ] - if 0 == len(non_empty_ids): + + if not non_empty_ids: logging.warning(f"No probe candidates found, dropped. [ws{wSet+1}]") continue else: @@ -234,7 +232,7 @@ def build(self, probe_candidates): f"Built {len(self.probe_set_list)} " + "probe set candidates in total." ) - if 0 < len(self.probe_set_list): + if self.probe_set_list: pd.concat([ps.featDF for ps in self.probe_set_list]).reset_index( drop=True ).to_csv(os.path.join(self.out_path, "probe_sets.tsv"), "\t") diff --git a/ifpd2/region.py b/ifpd2/region.py index 16eb0635..ff2fdad5 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -243,10 +243,7 @@ def build_by_size(self, size: int, step_style: float) -> List[List[GenomicRegion Returns: List[List[GenomicRegion]] -- generated region lists """ - if step_style > 1: - step = int(step_style) - else: - step = int(size * step_style) + step = int(step_style) if step_style > 1 else int(size * step_style) if step < size: return self.__build_overlapping(size, step) else: diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db_make.py index d7d5cd91..a70673b6 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db_make.py @@ -163,7 +163,7 @@ def populate_db( def reduce_sequence_columns(df: pd.DataFrame) -> pd.DataFrame: logging.info("discarding redundant sequence columns") seq_columns = [c for c in df.columns if "sequence" in c] - if 1 == len(seq_columns): + if len(seq_columns) == 1: return df df.drop(seq_columns[1:], axis=1, inplace=True) df.rename(columns=dict([(seq_columns[0], "sequence")]), inplace=True) @@ -293,14 +293,14 @@ def run(args: argparse.Namespace) -> None: dbdf, dtype_sequence = parse_sequences(dbdf) dbdf, dtype_header = parse_record_headers(dbdf, args.prefix) - dtype = dict() + dtype = {} dtype.update(const.dtype_melting) dtype.update(const.dtype_hush) dtype.update(const.dtype_secondary) dtype.update(dtype_sequence) dtype.update(dtype_header) - for column in dtype.keys(): + for column in dtype: if column not in dbdf.columns: dbdf["column"] = np.repeat(np.nan, dbdf.shape[0]) dbdf = dbdf.loc[:, const.database_columns] diff --git a/ifpd2/scripts/db_merge.py b/ifpd2/scripts/db_merge.py index 844979e8..51992e65 100644 --- a/ifpd2/scripts/db_merge.py +++ b/ifpd2/scripts/db_merge.py @@ -33,4 +33,3 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: @enable_rich_assert def run(args: argparse.Namespace) -> None: raise NotImplementedError - logging.info("Done. :thumbs_up: :smiley:") diff --git a/ifpd2/scripts/db_reindex.py b/ifpd2/scripts/db_reindex.py index 58502248..5b5487b7 100644 --- a/ifpd2/scripts/db_reindex.py +++ b/ifpd2/scripts/db_reindex.py @@ -33,4 +33,3 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: @enable_rich_assert def run(args: argparse.Namespace) -> None: raise NotImplementedError - logging.info("Done. :thumbs_up: :smiley:") diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 2af1fe1a..24a40b8e 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -268,7 +268,7 @@ def run(args: argparse.Namespace) -> None: ow = Walker(args.database) ow.C = args.chrom ow.S = args.region[0] - ow.E = args.region[1] if args.region[1] >= 0 else 0 + ow.E = max(args.region[1], 0) ow.X = args.X ow.Ws = args.W ow.Wh = args.w diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 7a6bf238..91c21e3a 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -136,10 +136,11 @@ def _init_windows(self): if isinstance(self.X, int): self.Ws = ( self.E - self.S - if 1 == self.X + if self.X == 1 else np.floor((self.E - self.S) / (self.X + 1)).astype("i") ) + self._w = 0 # Window ID self._reached_last_window = False @@ -158,7 +159,7 @@ def __update_focus(self): def __mk_all_window_sets(self): # Prepare all window sets in a region of interest window_starts = np.floor(np.arange(self.S, self.E, self.Ws)).astype("i") - if 0 != (self.E - self.S) % self.Ws or 1 != len(window_starts): + if 0 != (self.E - self.S) % self.Ws or len(window_starts) != 1: window_starts = window_starts[:-1] window_mids = (window_starts + self.Ws / 2).reshape((window_starts.shape[0], 1)) @@ -223,7 +224,7 @@ def _add_window(self): new_window_id = 0 new_set_id = self.window_sets["s"].max() + 1 - if 0 != len(non_overlapping_group_ids): + if len(non_overlapping_group_ids) != 0: new_set_id = gData[non_overlapping_group_ids].min() new_window_id = ( self.window_sets[self.window_sets["s"] == new_set_id]["w"].max() + 1 @@ -374,55 +375,54 @@ def __finished_parsing(self, record, DBHpb, args, kwargs): # True to parse in current window # Parsed output to append it - if record["start"] >= self.current_window["end"]: - # DBHpb.clear() - - parsed_output = self.__process_window_async( - self.current_oligos, - self.current_window, - self.fprocess, - self.fpost, - *args, - opath=self.window_path, - loggerName=self.logger.name, - **kwargs, - ) + if record["start"] < self.current_window["end"]: + return (None, "continue") + # DBHpb.clear() - if self.reached_last_window: - self.logger.info("Reached last window") - return (None, "break") + parsed_output = self.__process_window_async( + self.current_oligos, + self.current_window, + self.fprocess, + self.fpost, + *args, + opath=self.window_path, + loggerName=self.logger.name, + **kwargs, + ) - self.go_to_next_window() - self._preprocess_window() - self._load_windows_until_next_to_do() - if self.reached_last_window and self._window_done(): - self.logger.info("Reached last window and done") - return (None, "break") + if self.reached_last_window: + self.logger.info("Reached last window") + return (None, "break") - if 0 != len(self.current_oligos): - self.remove_oligos_starting_before(self.current_window["start"]) + self.go_to_next_window() + self._preprocess_window() + self._load_windows_until_next_to_do() + if self.reached_last_window and self._window_done(): + self.logger.info("Reached last window and done") + return (None, "break") - return (parsed_output, "append") - return (None, "continue") + if len(self.current_oligos) != 0: + self.remove_oligos_starting_before(self.current_window["start"]) + + return (parsed_output, "append") def __parse_line(self, record, DBHpb, args, kwargs): if record["start"] >= self.current_window["start"]: parsing_output, parsing_status = self.__finished_parsing( record, DBHpb, args, kwargs ) - if parsing_status == "continue": - if record["end"] > self.walk_destination: # End reached - self.logger.info("Reached destination") - return (None, "break") + if parsing_status != "continue": + return (parsing_output, parsing_status) + if record["end"] > self.walk_destination: # End reached + self.logger.info("Reached destination") + return (None, "break") - self.fparse(record, *args, **kwargs) + self.fparse(record, *args, **kwargs) - if not np.isnan(record["score"]): - self.current_oligos.append(record) + if not np.isnan(record["score"]): + self.current_oligos.append(record) - self.rw += 1 - else: - return (parsing_output, parsing_status) + self.rw += 1 return (None, "continue") def __parse_database(self, DBHpb, args, kwargs): @@ -438,7 +438,7 @@ def __parse_database(self, DBHpb, args, kwargs): exec_results.append(parsing_output) self.r += 1 - if 0 != len(self.current_oligos): + if len(self.current_oligos) != 0: exec_results.append( self.__process_window_async( self.current_oligos, @@ -495,9 +495,8 @@ def __start_walk( def _window_done(self): s = int(self.current_window["s"]) w = int(self.current_window["w"]) - if s in self.walk_results.keys(): - if w in self.walk_results[s].keys(): - return isinstance(self.walk_results[s][w], list) + if s in self.walk_results.keys() and w in self.walk_results[s].keys(): + return isinstance(self.walk_results[s][w], list) return False def _load_windows_until_next_to_do(self): @@ -675,7 +674,7 @@ def fimport(path, *args, **kwargs): def fpost(results, opath, *args, **kwargs): assert isinstance(kwargs["opb"], OligoProbeBuilder) logger = logging.getLogger(kwargs["loggerName"]) - if 0 == len(results): + if len(results) == 0: logger.critical(f"Built {len(results)} oligo probe candidates") logger.handlers = logger.handlers[:-1] else: diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 0f2a4ce2..e57e196e 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -20,10 +20,7 @@ class ChromosomeWalker(object): def __init__(self, db: Union[DataBase, str], chromosome: bytes): super(ChromosomeWalker, self).__init__() - if isinstance(db, str): - self.__db = DataBase(db) - else: - self.__db = db + self.__db = DataBase(db) if isinstance(db, str) else db assert chromosome in self.__db._chromosomes.keys() self.__IH = open( os.path.join(self.__db._root, f"{chromosome.decode()}.bin"), "rb" @@ -84,9 +81,7 @@ def next_record_exists(self) -> bool: Returns: bool -- whether next record exists """ - if 0 == len(self.read_next_record_and_rewind()): - return False - return True + return len(self.read_next_record_and_rewind()) != 0 def rewind(self) -> None: """Rewind of one record. @@ -115,7 +110,7 @@ def fastforward(self, start_from_nt: int) -> None: chromosome {bytes} -- chromosome label start_from_nt {int} -- position to fastforward to (in nucleotides) """ - if 0 == start_from_nt: + if start_from_nt == 0: self.__IH.seek(0) return self.__jump_to_bin(start_from_nt) @@ -151,7 +146,7 @@ def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record """ self.fastforward(start_from_nt) record = self.read_next_record() - while 0 != len(record): + while len(record) != 0: parsed_record = Record(record, self.__db.dtype) if parsed_record["start"] > end_at_nt and end_at_nt > 0: break From 6e3db9b911d3aa5edc3e76578397988363134d72 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 8 Sep 2021 11:46:36 +0200 Subject: [PATCH 108/185] Blacked, flaked, and mypyed --- ifpd2/chromosome.py | 6 +++--- ifpd2/database.py | 2 +- ifpd2/probe.py | 12 +++++++----- ifpd2/scripts/db_merge.py | 1 - ifpd2/scripts/db_reindex.py | 1 - ifpd2/walker.py | 1 - 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index fe1dca95..58bde757 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -16,7 +16,7 @@ class ChromosomeIndex(object): """ChromosomeIndex""" _bin_size: int - _index: Dict[int, Tuple[int, int]] + _index: Dict[int, Tuple[float, float]] def __init__(self, bin_size: int): super(ChromosomeIndex, self).__init__() @@ -41,7 +41,7 @@ def bin_size(self) -> int: return self._bin_size @property - def data(self) -> Dict[int, Tuple[int, int]]: + def data(self) -> Dict[int, Tuple[float, float]]: return copy.copy(self._index) def __populate_bins( @@ -115,7 +115,7 @@ def __getitem__(self, position_in_nt: int) -> int: if binned_to not in self._index: return -1 - position_in_bytes = self._index[binned_to][0] + position_in_bytes = int(self._index[binned_to][0]) if not np.isfinite(position_in_bytes): return -1 return position_in_bytes diff --git a/ifpd2/database.py b/ifpd2/database.py index 3ae4e6fe..74251a81 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -112,7 +112,7 @@ def add_score(self, F, Gs) -> None: self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) def __getitem__(self, key: str) -> Any: - allowed_columns = ['score', *const.database_columns] + allowed_columns = ["score", *const.database_columns] if key not in allowed_columns: raise KeyError(f"unrecognized key '{key}'") else: diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 4516350e..404f8bc4 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -174,7 +174,6 @@ def get_paths(A): if i in path_start_set or len(A[i, i + 1].nonzero()[0]) != 0 ] - for i in idxs: path = [i] k = i @@ -206,10 +205,13 @@ def get_non_overlapping_paths(oData, D): start_positions = oData["start"].values end_positions = oData["end"].values - edges = [np.logical_or( - end_positions + D < oData["start"].values[i], - start_positions - D >= oData["end"].values[i], - ) for i in range(oData.shape[0])] + edges = [ + np.logical_or( + end_positions + D < oData["start"].values[i], + start_positions - D >= oData["end"].values[i], + ) + for i in range(oData.shape[0]) + ] return OligoPathBuilder.get_paths(np.vstack(edges).astype("i")) def __size_paths(self, path_set, exit_polls): diff --git a/ifpd2/scripts/db_merge.py b/ifpd2/scripts/db_merge.py index 51992e65..b289ee9e 100644 --- a/ifpd2/scripts/db_merge.py +++ b/ifpd2/scripts/db_merge.py @@ -6,7 +6,6 @@ import argparse from ifpd2.asserts import enable_rich_assert from ifpd2.scripts import arguments as ap -import logging def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: diff --git a/ifpd2/scripts/db_reindex.py b/ifpd2/scripts/db_reindex.py index 5b5487b7..39db2ef1 100644 --- a/ifpd2/scripts/db_reindex.py +++ b/ifpd2/scripts/db_reindex.py @@ -6,7 +6,6 @@ import argparse from ifpd2.asserts import enable_rich_assert from ifpd2.scripts import arguments as ap -import logging def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 91c21e3a..a0d4be27 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -140,7 +140,6 @@ def _init_windows(self): else np.floor((self.E - self.S) / (self.X + 1)).astype("i") ) - self._w = 0 # Window ID self._reached_last_window = False From a11bb35d62f2fcabe26c652e2a566c40674df092 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 14:30:02 +0000 Subject: [PATCH 109/185] Bump pandas from 1.3.2 to 1.3.3 (#59) --- poetry.lock | 53 ++++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5536d3ad..89288b32 100644 --- a/poetry.lock +++ b/poetry.lock @@ -111,7 +111,7 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.3.2" +version = "1.3.3" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false @@ -284,14 +284,6 @@ dev = ["py-make (>=0.1.0)", "twine", "wheel"] notebook = ["ipywidgets (>=6)"] telegram = ["requests"] -[[package]] -name = "typing-extensions" -version = "3.10.0.1" -description = "Backported and Experimental Type Hints for Python 3.5+" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "typing-extensions" version = "3.10.0.2" @@ -373,25 +365,27 @@ packaging = [ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pandas = [ - {file = "pandas-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ba7ceb8abc6dbdb1e34612d1173d61e4941f1a1eb7e6f703b2633134ae6a6c89"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb71b1935249de80e3a808227189eee381d4d74a31760ced2df21eedc92a8e3"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa54dc1d3e5d004a09ab0b1751473698011ddf03e14f1f59b84ad9a6ac630975"}, - {file = "pandas-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34ced9ce5d5b17b556486da7256961b55b471d64a8990b56e67a84ebeb259416"}, - {file = "pandas-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:a56246de744baf646d1f3e050c4653d632bc9cd2e0605f41051fea59980e880a"}, - {file = "pandas-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:53b17e4debba26b7446b1e4795c19f94f0c715e288e08145e44bdd2865e819b3"}, - {file = "pandas-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f07a9745ca075ae73a5ce116f5e58f691c0dc9de0bff163527858459df5c176f"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9e8e0ce5284ebebe110efd652c164ed6eab77f5de4c3533abc756302ee77765"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a78d7066d1c921a77e3306aa0ebf6e55396c097d5dfcc4df8defe3dcecb735"}, - {file = "pandas-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:132def05e73d292c949b02e7ef873debb77acc44a8b119d215921046f0c3a91d"}, - {file = "pandas-1.3.2-cp38-cp38-win32.whl", hash = "sha256:69e1b2f5811f46827722fd641fdaeedb26002bd1e504eacc7a8ec36bdc25393e"}, - {file = "pandas-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:7996d311413379136baf0f3cf2a10e331697657c87ced3f17ac7c77f77fe34a3"}, - {file = "pandas-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1738154049062156429a5cf2fd79a69c9f3fa4f231346a7ec6fd156cd1a9a621"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cce01f6d655b4add966fcd36c32c5d1fe84628e200626b3f5e2f40db2d16a0f"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1099e2a0cd3a01ec62cca183fc1555833a2d43764950ef8cb5948c8abfc51014"}, - {file = "pandas-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cd5776be891331a3e6b425b5abeab9596abea18435c5982191356f9b24ae731"}, - {file = "pandas-1.3.2-cp39-cp39-win32.whl", hash = "sha256:66a95361b81b4ba04b699ecd2416b0591f40cd1e24c60a8bfe0d19009cfa575a"}, - {file = "pandas-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:89f40e5d21814192802421df809f948247d39ffe171e45fe2ab4abf7bd4279d8"}, - {file = "pandas-1.3.2.tar.gz", hash = "sha256:cbcb84d63867af3411fa063af3de64902665bb5b3d40b25b2059e40603594e87"}, + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, + {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, + {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, + {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, + {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, + {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, + {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, + {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, + {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, + {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, + {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, + {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, + {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, + {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, + {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, ] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, @@ -493,9 +487,6 @@ tqdm = [ {file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.1-py2-none-any.whl", hash = "sha256:8bbffbd37fbeb9747a0241fdfde5ae99d4531ad1d1a41ccaea62100e15a5814c"}, - {file = "typing_extensions-3.10.0.1-py3-none-any.whl", hash = "sha256:045dd532231acfa03628df5e0c66dba64e2cc8fc8b844538d4ad6d5dd6cb82dc"}, - {file = "typing_extensions-3.10.0.1.tar.gz", hash = "sha256:83af6730a045fda60f46510f7f1f094776d90321caa4d97d20ef38871bef4bd3"}, {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, From c1554672cfb0dbb745c3e4c547e954707f18961d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Sep 2021 09:35:33 +0000 Subject: [PATCH 110/185] Bump black from 21.8b0 to 21.9b0 (#60) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 89288b32..23fdc119 100644 --- a/poetry.lock +++ b/poetry.lock @@ -22,7 +22,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "black" -version = "21.8b0" +version = "21.9b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -295,7 +295,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "bab0efbfec6fcd008ee3d8c7299896ad1af2b80a629b71d651b73526123fbf6b" +content-hash = "cd22854c8b57c9386db5e8652cd22aae16f2a177a2bab00f10bfaefa664d61ba" [metadata.files] atomicwrites = [ @@ -307,8 +307,8 @@ attrs = [ {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-21.8b0-py3-none-any.whl", hash = "sha256:2a0f9a8c2b2a60dbcf1ccb058842fb22bdbbcb2f32c6cc02d9578f90b92ce8b7"}, - {file = "black-21.8b0.tar.gz", hash = "sha256:570608d28aa3af1792b98c4a337dbac6367877b47b12b88ab42095cfc1a627c2"}, + {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, + {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, diff --git a/pyproject.toml b/pyproject.toml index aeb35b34..26d22f25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.5" -black = "^21.8b0" +black = "^21.9b0" [build-system] requires = ["poetry>=0.12"] From 48f0506af3492c069d05af668345c0d00b10ebed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 12:16:31 +0000 Subject: [PATCH 111/185] Bump rich from 10.9.0 to 10.10.0 (#61) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 23fdc119..6d8a46b9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -230,7 +230,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.9.0" +version = "10.10.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -467,8 +467,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.9.0-py3-none-any.whl", hash = "sha256:2c84d9b3459c16bf413fe0f9644c7ae1791971e0bb944dfae56e7c7634b187ab"}, - {file = "rich-10.9.0.tar.gz", hash = "sha256:ba285f1c519519490034284e6a9d2e6e3f16dc7690f2de3d9140737d81304d22"}, + {file = "rich-10.10.0-py3-none-any.whl", hash = "sha256:0b8cbcb0b8d476a7f002feaed9f35e51615f673c6c291d76ddf0c555574fd3c7"}, + {file = "rich-10.10.0.tar.gz", hash = "sha256:bacf58b25fea6b920446fe4e7abdc6c7664c4530c4098e7a1bc79b16b8551dfa"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From ee1dbd7d5d0da939ced2eb45b8f498f3ade6cc58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 20:44:58 +0000 Subject: [PATCH 112/185] Bump tqdm from 4.62.2 to 4.62.3 (#62) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d8a46b9..c941b0ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -270,7 +270,7 @@ python-versions = ">=3.6" [[package]] name = "tqdm" -version = "4.62.2" +version = "4.62.3" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -483,8 +483,8 @@ tomli = [ {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, ] tqdm = [ - {file = "tqdm-4.62.2-py2.py3-none-any.whl", hash = "sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588"}, - {file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"}, + {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, + {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, ] typing-extensions = [ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, From db7f2c58077c14838c55bcecc1a79aa64edbf65c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Sep 2021 09:33:09 +0000 Subject: [PATCH 113/185] Bump rich from 10.10.0 to 10.11.0 (#63) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c941b0ad..ba24d01f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -230,7 +230,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.10.0" +version = "10.11.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -467,8 +467,8 @@ regex = [ {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] rich = [ - {file = "rich-10.10.0-py3-none-any.whl", hash = "sha256:0b8cbcb0b8d476a7f002feaed9f35e51615f673c6c291d76ddf0c555574fd3c7"}, - {file = "rich-10.10.0.tar.gz", hash = "sha256:bacf58b25fea6b920446fe4e7abdc6c7664c4530c4098e7a1bc79b16b8551dfa"}, + {file = "rich-10.11.0-py3-none-any.whl", hash = "sha256:44bb3f9553d00b3c8938abf89828df870322b9ba43caf3b12bb7758debdc6dec"}, + {file = "rich-10.11.0.tar.gz", hash = "sha256:016fa105f34b69c434e7f908bb5bd7fefa9616efdb218a2917117683a6394ce5"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, From 0445b7d53eb7fa497201722af962f2cf0a43a88e Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 12:47:03 +0200 Subject: [PATCH 114/185] Argparse to click (#65) * Updated dependencies * Preparing for click. * Swapped argparse for click and using dataclasses * 'Refactored by Sourcery' (#66) Co-authored-by: Sourcery AI <> Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- ifpd2/__init__.py | 3 +- ifpd2/const.py | 2 + ifpd2/dataclasses.py | 135 +++++++ ifpd2/probe.py | 2 +- ifpd2/scripts/__init__.py | 14 +- ifpd2/scripts/db.py | 39 -- ifpd2/scripts/db/__init__.py | 9 + ifpd2/scripts/db/check.py | 32 ++ ifpd2/scripts/db/dump.py | 77 ++++ ifpd2/scripts/db/info.py | 20 + ifpd2/scripts/{db_make.py => db/make.py} | 249 +++++------- ifpd2/scripts/db/run.py | 23 ++ ifpd2/scripts/db/settings.py | 89 ++++ ifpd2/scripts/db_check.py | 56 --- ifpd2/scripts/db_dump.py | 107 ----- ifpd2/scripts/db_info.py | 46 --- ifpd2/scripts/db_merge.py | 34 -- ifpd2/scripts/db_reindex.py | 34 -- ifpd2/scripts/ifpd2.py | 58 ++- ifpd2/scripts/query.py | 490 +++++++++++------------ ifpd2/scripts/query2.py | 456 +++++++++++---------- ifpd2/walker.py | 10 +- poetry.lock | 168 ++++---- pyproject.toml | 1 + requirements.txt | 11 - 25 files changed, 1085 insertions(+), 1080 deletions(-) create mode 100644 ifpd2/dataclasses.py delete mode 100644 ifpd2/scripts/db.py create mode 100644 ifpd2/scripts/db/__init__.py create mode 100644 ifpd2/scripts/db/check.py create mode 100644 ifpd2/scripts/db/dump.py create mode 100644 ifpd2/scripts/db/info.py rename ifpd2/scripts/{db_make.py => db/make.py} (59%) create mode 100644 ifpd2/scripts/db/run.py create mode 100644 ifpd2/scripts/db/settings.py delete mode 100644 ifpd2/scripts/db_check.py delete mode 100644 ifpd2/scripts/db_dump.py delete mode 100644 ifpd2/scripts/db_info.py delete mode 100644 ifpd2/scripts/db_merge.py delete mode 100644 ifpd2/scripts/db_reindex.py delete mode 100644 requirements.txt diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index 124604a8..f2565edb 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -3,7 +3,7 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2 import asserts, io +from ifpd2 import asserts, dataclasses, io from ifpd2 import walker, walker2 from ifpd2 import chromosome, database, region from ifpd2 import oligo, probe, probe_set @@ -18,6 +18,7 @@ __all__ = [ "__version__", "asserts", + "dataclasses", "io", "walker", "walker2", diff --git a/ifpd2/const.py b/ifpd2/const.py index 5304343c..ae5b6a38 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -3,6 +3,8 @@ @contact: gigi.ga90@gmail.com """ +CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) + dtype_melting = dict( [ ("name", "|S"), diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py new file mode 100644 index 00000000..0569fca1 --- /dev/null +++ b/ifpd2/dataclasses.py @@ -0,0 +1,135 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from dataclasses import dataclass +from os.path import isdir, isfile +from typing import Optional, Tuple + + +def path_exists(path: str) -> bool: + return not isdir(path) and not isfile(path) + + +@dataclass(frozen=True) +class Folder: + path: str + exists: bool = False + + def __post_init__(self): + if self.exists: + assert isdir(self.path) + else: + assert not path_exists(self.path) + + +@dataclass(frozen=True) +class File: + path: str + exists: bool = False + + def __post_init__(self): + if self.exists: + assert isfile(self.path) + else: + assert not path_exists(self.path) + + +@dataclass(frozen=True) +class PositiveInteger: + n: int + + def __post_init__(self): + assert self.n >= 1 + + +@dataclass(frozen=True) +class NonNegativeFloat: + n: float + + def __post_init__(self): + assert self.n >= 0 + + +@dataclass(frozen=True) +class NonNegativeInteger: + n: int + + def __post_init__(self): + assert self.n > 0 + + +@dataclass(frozen=True) +class PositiveFloat: + n: float + limit: Optional[float] = None + limit_included: bool = True + + def __post_init__(self): + if self.limit is None: + assert 0 < self.n + + elif self.limit_included: + assert 0 < self.n <= self.limit + else: + assert 0 < self.n < self.limit + + +@dataclass(frozen=True) +class GenomicRegion: + start: int + end: int + + def __post_init__(self): + assert self.start >= 0 + assert self.end >= self.start or self.end == -1 + + def astuple(self) -> Tuple[int, int]: + return (self.start, self.end) + + +@dataclass(frozen=True) +class NonNegativeIntInterval: + start: int + end: int + + def __post_init__(self): + assert self._from >= 0 + assert self.end >= self.first + + def astuple(self) -> Tuple[int, int]: + return (self.start, self.end) + + +@dataclass(frozen=True) +class QueryWindow: + size: Optional[int] + shift: Optional[float] + + def __post_init__(self): + if self.size is not None: + assert self.size >= 1 + assert 0 < self.shift <= 1 + + def astuple(self) -> Tuple[Optional[int], Optional[float]]: + return (self.size, self.shift) + + +@dataclass(frozen=True) +class QueryFocus: + size: float + step: float + + def __post_init__(self): + assert self.size > 0 + assert self.step > 0 + + +@dataclass(frozen=True) +class FreeEnergyInterval: + start: float + end: float + + def astuple(self) -> Tuple[float, float]: + return (self.start, self.end) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 404f8bc4..dc88521b 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -135,7 +135,7 @@ class OligoPathBuilder(object): oligos (i.e., probes) from an oligo DataFrame in input.""" N = int(48) # Number of oligos per probe - D = int(2) # Minimum distance between consecutive oligos + D: int = int(2) # Minimum distance between consecutive oligos Tr = 10.0 # Melting temperature range half-width Ps = int(10000) # Probe size threshold, in nt (Ps > 1) Ph = 0.1 # Maximum hole size in probe as fraction of probe size diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index 2a5dad2c..5d80fea6 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -3,9 +3,8 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2.scripts import arguments, ifpd2 -from ifpd2.scripts import db, db_check, db_dump, db_info -from ifpd2.scripts import db_make, db_merge, db_reindex +from ifpd2.scripts import db +from ifpd2.scripts import ifpd2 from ifpd2.scripts import query, query2 import logging @@ -18,15 +17,8 @@ ) __all__ = [ - "arguments", - "ifpd2", "db", - "db_check", - "db_dump", - "db_info", - "db_make", - "db_merge", - "db_reindex", + "ifpd2", "query", "query2", ] diff --git a/ifpd2/scripts/db.py b/ifpd2/scripts/db.py deleted file mode 100644 index 03ef1020..00000000 --- a/ifpd2/scripts/db.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.scripts import arguments as ap -from ifpd2 import scripts -import sys - - -def default_parser(*args) -> None: - print("ifpd db -h for usage details.") - sys.exit() - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - __name__.split(".")[-1], - description="""Possible ifpd db queries.""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Possible ifpd db queries.", - ) - parser.set_defaults(parse=default_parser) - parser = ap.add_version_option(parser) - - sub_subparsers = parser.add_subparsers( - title="sub-commands", - help="Access the help page for a sub-command with: sub-command -h", - ) - - scripts.db_check.init_parser(sub_subparsers) - scripts.db_dump.init_parser(sub_subparsers) - scripts.db_info.init_parser(sub_subparsers) - scripts.db_make.init_parser(sub_subparsers) - scripts.db_merge.init_parser(sub_subparsers) - scripts.db_reindex.init_parser(sub_subparsers) - - return parser diff --git a/ifpd2/scripts/db/__init__.py b/ifpd2/scripts/db/__init__.py new file mode 100644 index 00000000..61542aff --- /dev/null +++ b/ifpd2/scripts/db/__init__.py @@ -0,0 +1,9 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from ifpd2.scripts.db import check, dump, info, make +from ifpd2.scripts.db import run, settings + +__all__ = ["check", "dump", "info", "make", "run", "settings"] diff --git a/ifpd2/scripts/db/check.py b/ifpd2/scripts/db/check.py new file mode 100644 index 00000000..00902802 --- /dev/null +++ b/ifpd2/scripts/db/check.py @@ -0,0 +1,32 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.database import DataBase +from ifpd2.walker2 import ChromosomeWalker +import logging +from tqdm import tqdm # type: ignore + + +@click.command( + name="check", + context_settings=CONTEXT_SETTINGS, + help="""Check integrity of INPUT database.""", +) +@click.argument("input_paths", metavar="INPUT", nargs=1, type=click.Path(exists=True)) +def main(input_paths: str) -> None: + DB = DataBase(input_paths) + for chromosome in DB.chromosome_list: + walker = ChromosomeWalker(DB, chromosome) + previous_position = -1 + for record in tqdm( + walker.buffer(), + desc=f"Checking sorting '{chromosome.decode()}'", + total=DB.chromosome_recordnos[chromosome], + ): + assert record["start"] > previous_position + previous_position = record["start"] + logging.info("That's all! :smiley:") diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py new file mode 100644 index 00000000..347ccf2e --- /dev/null +++ b/ifpd2/scripts/db/dump.py @@ -0,0 +1,77 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import click # type: ignore +from ifpd2 import const +from ifpd2.database import DataBase +from ifpd2.walker2 import ChromosomeWalker +from tqdm import tqdm # type: ignore +from typing import List, Optional, Tuple + + +@click.command( + name="dump", + context_settings=const.CONTEXT_SETTINGS, + help="""Dump whole INPUT database to the terminal, in tsv format. + To dump a single feature, specify it with the --chrom option. + To dump a region of a feature, also use the --start and --end options.""", +) +@click.argument("input_paths", metavar="INPUT", nargs=1, type=click.Path(exists=True)) +@click.option("--chrom", type=click.STRING, help="Database chromosome to dump from.") +@click.option("--start", type=click.INT, help="Start location of the region to dump.") +@click.option("--end", type=click.INT, help="End location of the region to dump.") +def main( + input_paths: str, + chrom: Optional[str] = None, + start: Optional[int] = None, + end: Optional[int] = None, +) -> None: + DB = DataBase(input_paths) + chrom, start, end = check_region(DB, chrom, start, end) + + print("\t".join(const.database_columns)) + for chromosome in get_chromosome_list(DB, chrom): + walker = ChromosomeWalker(DB, chromosome) + for record in tqdm( + walker.buffer(start, end), + desc=f"dumping '{chromosome.decode()}'", + total=DB.chromosome_recordnos[chromosome], + ): + if start > record["start"]: + continue + print(record.to_csv("\t")) + + +def check_region( + DB: DataBase, + chrom: Optional[str] = None, + start: Optional[int] = None, + end: Optional[int] = None, +) -> Tuple[Optional[str], int, int]: + if chrom is None: + assert ( + start is None and end is None + ), "cannot use --region-start or --region-end without --chrom" + elif start is not None: + chrom_size = DB.chromosome_sizes_nt[chrom.encode()] + assert ( + start < chrom_size + ), f"{start} larger than chromosome size: {chrom_size}" + if end is not None: + assert start < end, "end location smaller than start" + + return ( + chrom, + 0 if start is None else start, + -1 if end is None else end, + ) + + +def get_chromosome_list(DB: DataBase, chrom: Optional[str]) -> List[bytes]: + chromosome_list = DB.chromosome_list + if chrom is not None: + assert chrom.encode() in chromosome_list, f"'{chrom}' not found" + chromosome_list = [chrom.encode()] + return chromosome_list diff --git a/ifpd2/scripts/db/info.py b/ifpd2/scripts/db/info.py new file mode 100644 index 00000000..f57b916d --- /dev/null +++ b/ifpd2/scripts/db/info.py @@ -0,0 +1,20 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.database import DataBase +import logging + + +@click.command( + name="info", context_settings=CONTEXT_SETTINGS, help="Show INPUT database details." +) +@click.argument("input_paths", metavar="INPUT", nargs=1, type=click.Path(exists=True)) +def main(input_paths: str) -> None: + DB = DataBase(input_paths) + DB.log_details() + logging.info("") + logging.info("That's all! :smiley:") diff --git a/ifpd2/scripts/db_make.py b/ifpd2/scripts/db/make.py similarity index 59% rename from ifpd2/scripts/db_make.py rename to ifpd2/scripts/db/make.py index a70673b6..96383f85 100644 --- a/ifpd2/scripts/db_make.py +++ b/ifpd2/scripts/db/make.py @@ -3,25 +3,28 @@ @contact: gigi.ga90@gmail.com """ -import argparse +import click # type: ignore import copy +from ifpd2.const import CONTEXT_SETTINGS, DEFAULT_DATABASE_INDEX_BIN_SIZE +from ifpd2.const import dtype_header_features, dtype_sequence_features +from ifpd2.const import database_columns, dtype_hush, dtype_melting, dtype_secondary from ifpd2 import asserts as ass -from ifpd2.asserts import enable_rich_assert -from ifpd2 import const, database as db, io -from ifpd2.scripts import arguments as ap +from ifpd2.chromosome import ChromosomeDict +from ifpd2.io import parse_hush, parse_melting, parse_secondary +from ifpd2.scripts.db.settings import DBMakeSettings import logging import numpy as np # type: ignore import os import pandas as pd # type: ignore import pickle from rich.progress import Progress, track # type: ignore -from typing import Callable, Dict, List, Optional, Set, Tuple +from typing import Callable, Dict, List, Set, Tuple -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "make", - description=""" +@click.command( + name="make", + context_settings=CONTEXT_SETTINGS, + help=""" Assembles files into a database. At least one of the following is required, to retrieve sequence: hush output (-O), or oligo-melting output (-T). @@ -39,104 +42,106 @@ def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentPars Files are merged by: hush header, oligo-melting name, and OligoArrayAux name (3rd field of 1st column). """, - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Assemble a database.", - ) - - parser.add_argument("output", type=str, help="Path to database folder (output).") - - indata = parser.add_argument_group("input arguments") - indata.add_argument( - "-O", - "--hush", - metavar="hush_path", - nargs="+", - type=str, - help="Path to hush output. Format details above.", - ) - indata.add_argument( - "-T", - "--melting", - metavar="oligomelting_path", - nargs="+", - type=str, - help="Path to oligo-melting output. Format details above.", - ) - indata.add_argument( - "-S", - "--secondary", - metavar="oligoarrayaux_path", - nargs="+", - type=str, - help="Path to OligoArrayAux output. Format details above.", - ) +) +@click.argument("output", nargs=1, type=click.Path(exists=False)) +@click.option( + "--hush", + "-O", + metavar="hush_path", + nargs=1, + multiple=True, + type=click.Path(exists=True), + help="Path to hush output. Format details above.", +) +@click.option( + "--melting", + "-T", + metavar="hush_oligomelting_pathpath", + nargs=1, + multiple=True, + type=click.Path(exists=True), + help="Path to oligo-melting output. Format details above.", +) +@click.option( + "--secondary", + "-S", + metavar="oligoarrayaux_path", + nargs=1, + multiple=True, + type=click.Path(exists=True), + help="Path to OligoArrayAux output. Format details above.", +) +@click.option( + "--prefix", + "-p", + type=click.STRING, + default="", + help="Prefix to be added to chromosome labels.", +) +@click.option( + "--binsize", + "-b", + default=DEFAULT_DATABASE_INDEX_BIN_SIZE, + type=click.INT, + help=f"Index bin size. Default: {DEFAULT_DATABASE_INDEX_BIN_SIZE}", +) +def main( + output: str, + hush: List[str], + melting: List[str], + secondary: List[str], + prefix: str, + binsize: int, +) -> None: + settings = DBMakeSettings(output) + settings.add_off_target_path_list(hush) + settings.add_melting_temperature_path_list(melting) + settings.add_secondary_structure_path_list(secondary) + settings.bin_size = binsize + settings.prefix = prefix + + assert not ( + 0 == len(settings.off_target_paths) + and 0 != len(settings.melting_temperature_paths) + ), "please provide either --hush or --melting" + + os.mkdir(settings.output_path) + dbdf = pd.DataFrame(columns=["name"]) + dbdf.set_index("name", inplace=True) - advanced = parser.add_argument_group("advanced arguments") - advanced.add_argument( - "-p", - "--prefix", - metavar="chromPrefix", - default="", - type=str, - help="Prefix to be added to chromosome labels. Default: ''.", + dbdf = populate_db(dbdf, settings.off_target_paths, parse_hush, "hush") + dbdf = populate_db( + dbdf, settings.melting_temperature_paths, parse_melting, "oligo-melting" ) - advanced.add_argument( - "-b", - "--binsize", - metavar="indexBin", - default=const.DEFAULT_DATABASE_INDEX_BIN_SIZE, - type=int, - help="Binning for the index.", + dbdf = populate_db( + dbdf, settings.secondary_structure_paths, parse_secondary, "OligoArrayAux" ) - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -def init_log(args: argparse.Namespace) -> None: - logging.info(f"output folder: '{args.output}'") - logging.info(f"chromosome prefix: '{args.prefix}'") - if args.hush is not None: - logging.info(f"hush: {args.hush}") - if args.melting is not None: - logging.info(f"oligo-melting: {args.melting}") - if args.secondary is not None: - logging.info(f"OligoArrayAux: {args.secondary}") - - -def check_files_exist(path_list: Optional[List[str]], software_name: str) -> None: - if path_list is None: - return - for path in path_list: - assert os.path.isfile(path), f"{software_name} output not found: {path}" + dbdf = reduce_sequence_columns(dbdf) + dbdf, dtype_sequence = parse_sequences(dbdf) + dbdf, dtype_header = parse_record_headers(dbdf, prefix) + dtype = {} + dtype.update(dtype_melting) + dtype.update(dtype_hush) + dtype.update(dtype_secondary) + dtype.update(dtype_sequence) + dtype.update(dtype_header) -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert not os.path.isdir( - args.output - ), f"database folder already exists: {args.output}." + for column in dtype: + if column not in dbdf.columns: + dbdf["column"] = np.repeat(np.nan, dbdf.shape[0]) + dbdf = dbdf.loc[:, database_columns] - check_files_exist(args.hush, "hush") - check_files_exist(args.melting, "oligo-melting") - check_files_exist(args.secondary, "OligoArrayAux") + write_database(dbdf, dtype, settings) - assert 1 <= ((args.hush is not None) + (args.melting is not None)), " ".join( - [ - "one of the following is required:", - "FASTA input, hush output, or oligo-melting output", - ] - ) - - return args + logging.info("Done. :thumbs_up: :smiley:") def parse_input( - path_list: Optional[List[str]], parse_function: Callable, software_name: str + path_list: Set[str], parse_function: Callable, software_name: str ) -> pd.DataFrame: - if path_list is None: + if len(path_list) == 0: return pd.DataFrame() logging.info(f"parsing {software_name} output") return pd.concat([parse_function(path) for path in path_list]) @@ -144,11 +149,11 @@ def parse_input( def populate_db( db: pd.DataFrame, - path_list: Optional[List[str]], + path_list: Set[str], parse_function: Callable, software_name: str, ) -> pd.DataFrame: - if path_list is None: + if len(path_list) == 0: return db parsed_db = parse_input(path_list, parse_function, software_name) logging.info(f"adding {software_name} output to database") @@ -185,7 +190,7 @@ def parse_sequences(df: pd.DataFrame) -> Tuple[pd.DataFrame, Dict[str, str]]: ) df["gc_content"] = gc_content_list - dtype = copy.copy(const.dtype_sequence_features) + dtype = copy.copy(dtype_sequence_features) dtype["sequence"] = f"|S{max(sequence_length_list)}" return (df.astype(dtype), dtype) @@ -228,18 +233,18 @@ def parse_record_headers( ass.ert_in_dtype(db["end"].values.max(), "u4") db.reset_index(drop=True, inplace=True) - dtype = copy.copy(const.dtype_header_features) + dtype = copy.copy(dtype_header_features) dtype["name"] = f"|S{max(name_length_set)}" dtype["chromosome"] = f"|S{max(chromosome_length_set)}" return (db.astype(dtype), dtype) def write_database( - dbdf: pd.DataFrame, dtype: Dict[str, str], args: argparse.Namespace + dbdf: pd.DataFrame, dtype: Dict[str, str], settings: DBMakeSettings ) -> None: with Progress() as progress: chromosome_set: Set[bytes] = set(dbdf["chromosome"].values) - chromosome_data = db.ChromosomeDict(args.binsize) + chromosome_data = ChromosomeDict(settings.bin_size) chromosome_task = progress.add_task( "exporting chromosome", total=len(chromosome_set), @@ -256,7 +261,8 @@ def write_database( chromosome_data.add_chromosome(chromosome_db, dtype, progress) with open( - os.path.join(args.output, f"{selected_chrom.decode()}.bin"), "wb" + os.path.join(settings.output_path, f"{selected_chrom.decode()}.bin"), + "wb", ) as IH: writing_track = progress.add_task( f"writing {selected_chrom.decode()}.bin", @@ -271,40 +277,5 @@ def write_database( progress.update(chromosome_task, advance=1) logging.info("writing db.pickle") - with open(os.path.join(args.output, "db.pickle"), "wb") as OH: - args.parse = None - args.run = None - pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=args), OH) - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - init_log(args) - os.mkdir(args.output) - - dbdf = pd.DataFrame(columns=["name"]) - dbdf.set_index("name", inplace=True) - - dbdf = populate_db(dbdf, args.hush, io.parse_hush, "hush") - dbdf = populate_db(dbdf, args.melting, io.parse_melting, "oligo-melting") - dbdf = populate_db(dbdf, args.secondary, io.parse_secondary, "OligoArrayAux") - - dbdf = reduce_sequence_columns(dbdf) - dbdf, dtype_sequence = parse_sequences(dbdf) - dbdf, dtype_header = parse_record_headers(dbdf, args.prefix) - - dtype = {} - dtype.update(const.dtype_melting) - dtype.update(const.dtype_hush) - dtype.update(const.dtype_secondary) - dtype.update(dtype_sequence) - dtype.update(dtype_header) - - for column in dtype: - if column not in dbdf.columns: - dbdf["column"] = np.repeat(np.nan, dbdf.shape[0]) - dbdf = dbdf.loc[:, const.database_columns] - - write_database(dbdf, dtype, args) - - logging.info("Done. :thumbs_up: :smiley:") + with open(os.path.join(settings.output_path, "db.pickle"), "wb") as OH: + pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=settings), OH) diff --git a/ifpd2/scripts/db/run.py b/ifpd2/scripts/db/run.py new file mode 100644 index 00000000..40bda120 --- /dev/null +++ b/ifpd2/scripts/db/run.py @@ -0,0 +1,23 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.scripts.db import check, dump, info, make + + +@click.group( + name="db", + context_settings=CONTEXT_SETTINGS, + help="Tools to manage ifpd2 databases.", +) +def main() -> None: + pass + + +main.add_command(check.main) +main.add_command(dump.main) +main.add_command(info.main) +main.add_command(make.main) diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py new file mode 100644 index 00000000..898fc3d0 --- /dev/null +++ b/ifpd2/scripts/db/settings.py @@ -0,0 +1,89 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from copy import copy +from ifpd2.const import DEFAULT_DATABASE_INDEX_BIN_SIZE +import logging +from os.path import isdir, isfile +from typing import List, Set + + +class DBMakeSettings(object): + _output_path: str + _off_target_paths: Set[str] + _melting_temperature_paths: Set[str] + _secondary_structure_paths: Set[str] + _bin_size: int = DEFAULT_DATABASE_INDEX_BIN_SIZE + prefix: str = "" + + def __init__(self, output_path: str): + super(DBMakeSettings, self).__init__() + self.output_path = output_path + self._off_target_paths = set() + self._melting_temperature_paths = set() + self._secondary_structure_paths = set() + + @property + def output_path(self) -> str: + return self._output_path + + @output_path.setter + def output_path(self, output_path: str) -> None: + assert not isdir(output_path) and not isfile( + output_path + ), f"'{output_path}' already exists" + self._output_path = output_path + + @property + def bin_size(self) -> int: + return self._bin_size + + @bin_size.setter + def bin_size(self, bin_size: int) -> None: + assert bin_size >= 1 + self._bin_size = bin_size + + @property + def off_target_paths(self) -> Set[str]: + return copy(self._off_target_paths) + + @property + def melting_temperature_paths(self) -> Set[str]: + return copy(self._melting_temperature_paths) + + @property + def secondary_structure_paths(self) -> Set[str]: + return copy(self._secondary_structure_paths) + + def add_off_target_path(self, path: str) -> None: + assert isfile(path), f"'{path}' not found." + self._off_target_paths.add(path) + + def add_off_target_path_list(self, path_list: List[str]) -> None: + for path in path_list: + self.add_off_target_path(path) + + def add_melting_temperature_path(self, path: str) -> None: + assert isfile(path), f"'{path}' not found." + self._melting_temperature_paths.add(path) + + def add_melting_temperature_path_list(self, path_list: List[str]) -> None: + for path in path_list: + self.add_melting_temperature_path(path) + + def add_secondary_structure_path(self, path: str) -> None: + assert isfile(path), f"'{path}' not found." + self._secondary_structure_paths.add(path) + + def add_secondary_structure_path_list(self, path_list: List[str]) -> None: + for path in path_list: + self.add_secondary_structure_path(path) + + def init_login(self) -> None: + logging.info(f"output folder: '{self.output_path}'") + logging.info(f"chromosome prefix: '{self.prefix}'") + logging.info(f"hush: {self.off_target_paths}") + logging.info(f"oligo-melting: {self.melting_temperature_paths}") + logging.info(f"OligoArrayAux: {self.secondary_structure_paths}") diff --git a/ifpd2/scripts/db_check.py b/ifpd2/scripts/db_check.py deleted file mode 100644 index d816059b..00000000 --- a/ifpd2/scripts/db_check.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.asserts import enable_rich_assert -from ifpd2.database import DataBase -from ifpd2.scripts import arguments as ap -from ifpd2.walker2 import ChromosomeWalker -import logging -import os -from tqdm import tqdm # type: ignore - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "check", - description=""" -Check database integrity. -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Check database integrity.", - ) - - parser.add_argument("input", type=str, help="Path to database folder (input).") - - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert os.path.isdir(args.input), f"cannot find database folder: '{args.input}'" - assert os.path.isfile( - os.path.join(args.input, "db.pickle") - ), "db.pickle file is missing" - return args - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - DB = DataBase(args.input) - for chromosome in DB.chromosome_list: - walker = ChromosomeWalker(DB, chromosome) - previous_position = -1 - for record in tqdm( - walker.buffer(), - desc=f"Checking sorting '{chromosome.decode()}'", - total=DB.chromosome_recordnos[chromosome], - ): - assert record["start"] > previous_position - previous_position = record["start"] - logging.info("That's all! :smiley:") diff --git a/ifpd2/scripts/db_dump.py b/ifpd2/scripts/db_dump.py deleted file mode 100644 index 96d4af42..00000000 --- a/ifpd2/scripts/db_dump.py +++ /dev/null @@ -1,107 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.asserts import enable_rich_assert -from ifpd2 import const -from ifpd2.database import DataBase -from ifpd2.scripts import arguments as ap -from ifpd2.walker2 import ChromosomeWalker -from tqdm import tqdm # type: ignore -from typing import List - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "dump", - description=""" -Dumps a database to a tsv. -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Dump a database to tsv format.", - ) - - parser.add_argument("input", type=str, help="Path to database folder (input).") - - parser.add_argument( - "--chrom", - type=str, - help="Database feature to dump.", - ) - parser.add_argument( - "--region-start", - type=int, - help="""Start location (space-separated) of the region of interest. - When a region is not provided, the whole feature is dumped.""", - ) - parser.add_argument( - "--region-end", - type=int, - help="""End location (space-separated) of the region of interest. - When a region is not provided, the whole feature is dumped.""", - ) - - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - if args.chrom is None and ( - args.region_start is not None or args.region_end is not None - ): - raise Exception( - "cannot use --region-start or --region-end without --chrom. Stopped." - ) - if args.region_start is not None and args.region_end is not None: - assert ( - args.region_start < args.region_end - ), "region end should be greater than region start" - - args.region = [0, -1] - if args.region_end is not None: - args.region[1] = args.region_end - return args - - -def get_chromosome_list(args: argparse.Namespace, DB: DataBase) -> List[bytes]: - chromosome_list = DB.chromosome_list - if args.chrom is not None: - assert args.chrom.encode() in chromosome_list, f"'{args.chrom}' not found" - chromosome_list = [args.chrom.encode()] - return chromosome_list - - -def dump(args: argparse.Namespace, DB: DataBase) -> None: - print("\t".join(const.database_columns)) - for chromosome in get_chromosome_list(args, DB): - walker = ChromosomeWalker(DB, chromosome) - for record in tqdm( - walker.buffer(args.region[0], args.region[1]), - desc=f"dumping '{chromosome.decode()}'", - total=DB.chromosome_recordnos[chromosome], - ): - if args.region[0] > record["start"]: - continue - print(record.to_csv("\t")) - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - DB = DataBase(args.input) - - if args.region_start is not None: - chrom_size_nt = DB.chromosome_sizes_nt[args.chrom.encode()] - assert args.region_start < chrom_size_nt, " ".join( - [ - f"requested window starts ({args.region_start})", - f"after the chromosome end ({chrom_size_nt})", - ] - ) - args.region[0] = args.region_start - - dump(args, DB) diff --git a/ifpd2/scripts/db_info.py b/ifpd2/scripts/db_info.py deleted file mode 100644 index 56c8a0c5..00000000 --- a/ifpd2/scripts/db_info.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.asserts import enable_rich_assert -from ifpd2.database import DataBase -from ifpd2.scripts import arguments as ap -import logging -import os - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "info", - description=""" -Shows database details. -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Show database details.", - ) - - parser.add_argument("input", type=str, help="Path to database folder (input).") - - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert os.path.isdir(args.input), f"cannot find database folder: '{args.input}'" - assert os.path.isfile( - os.path.join(args.input, "db.pickle") - ), "db.pickle file is missing" - return args - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - DB = DataBase(args.input) - DB.log_details() - logging.info("") - logging.info("That's all! :smiley:") diff --git a/ifpd2/scripts/db_merge.py b/ifpd2/scripts/db_merge.py deleted file mode 100644 index b289ee9e..00000000 --- a/ifpd2/scripts/db_merge.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.asserts import enable_rich_assert -from ifpd2.scripts import arguments as ap - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "merge", - description=""" -Merge multiple databases into one. -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Merge databases.", - ) - - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - return args - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - raise NotImplementedError diff --git a/ifpd2/scripts/db_reindex.py b/ifpd2/scripts/db_reindex.py deleted file mode 100644 index 39db2ef1..00000000 --- a/ifpd2/scripts/db_reindex.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -@author: Gabriele Girelli -@contact: gigi.ga90@gmail.com -""" - -import argparse -from ifpd2.asserts import enable_rich_assert -from ifpd2.scripts import arguments as ap - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - "reindex", - description=""" -Re-build a database's index. -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Reindex a database.", - ) - - parser = ap.add_version_option(parser) - parser.set_defaults(parse=parse_arguments, run=run) - - return parser - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - return args - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - raise NotImplementedError diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 8a3eda2a..8375be5f 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -3,42 +3,40 @@ @contact: gigi.ga90@gmail.com """ -import argparse +import click # type: ignore from ifpd2 import __version__ -from ifpd2.scripts import arguments as ap -from ifpd2 import scripts +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.scripts import db, query, query2 import sys +import webbrowser -def default_parser(*args) -> None: - print("ifpd2 -h for usage details.") - sys.exit() - - -def main(): - parser = argparse.ArgumentParser( - description=f""" +@click.group( + name="ifpd2", + context_settings=CONTEXT_SETTINGS, + help=f"""\b Version: {__version__} Author: Gabriele Girelli Docs: http://ggirelli.github.io/ifpd2 Code: http://github.com/ggirelli/ifpd2 -Another iFISH probe design pipeline (II). -""", - formatter_class=argparse.RawDescriptionHelpFormatter, - ) - parser.set_defaults(parse=default_parser) - parser = ap.add_version_option(parser) - - subparsers = parser.add_subparsers( - title="sub-commands", - help="Access the help page for a sub-command with: sub-command -h", - ) - - scripts.db.init_parser(subparsers) - scripts.query.init_parser(subparsers) - scripts.query2.init_parser(subparsers) - - args = parser.parse_args() - args = args.parse(args) - args.run(args) +Another iFISH probe design pipeline (II).""", +) +@click.version_option(__version__) +def main(): + pass + + +@click.command( + "_docs", + help="Open online documentation on your favorite browser.", +) +def open_documentation() -> None: + webbrowser.open("https://ggirelli.github.io/radiantkit/") + sys.exit() + + +main.add_command(open_documentation) +main.add_command(db.run.main) +main.add_command(query.main) +main.add_command(query2.main) diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 24a40b8e..2dac009c 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -3,224 +3,187 @@ @contact: gigi.ga90@gmail.com """ -import argparse -from ifpd2.asserts import enable_rich_assert +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.dataclasses import Folder, GenomicRegion, FreeEnergyInterval +from ifpd2.dataclasses import NonNegativeInteger, PositiveInteger +from ifpd2.dataclasses import PositiveFloat +from ifpd2.dataclasses import NonNegativeIntInterval +from ifpd2.dataclasses import QueryFocus, QueryWindow from ifpd2.walker import Walker from ifpd2.logging import add_log_file_handler from ifpd2.probe import OligoProbeBuilder from ifpd2.probe_set import OligoProbeSetBuilder import logging -import os +from os.path import isdir, isfile, join as path_join +from os import mkdir +from typing import Optional, Tuple -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - __name__.split(".")[-1], - description=""" - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta, aspernatur, - natus. Possimus recusandae distinctio, voluptatem fuga delectus laudantium ut, - inventore culpa sit amet ullam officiis, tenetur nobis eius vitae dolore. - """, - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Check integrity of a database.", - ) - - parser.add_argument( - "database", metavar="database", type=str, help="Path to database folder." - ) - parser.add_argument( - "chrom", - type=str, - help="Database feature to query for a probe.", - ) - - query = parser.add_argument_group("query arguments") - query.add_argument( - "--region", - metavar=("chromStart", "chromEnd"), - type=int, - nargs=2, - help="""Start and end locations (space-separated) of the region of interest. - When a region is not provided (or start/end coincide), - the whole feature is queried.""", - ) - query.add_argument( - "-X", - metavar="probes", - type=int, - help="""Number of probes to query for.""", - ) - query.add_argument( - "-N", - metavar="oligos", - type=int, - default=48, - help="""Number of oligos per probe. Default: 48.""", - ) - query.add_argument( - "-D", - metavar="dist", - type=float, - default=2, - help="""Minimum distance between consecutive oligos. Default: 2""", - ) - query.add_argument( - "--single", - action="store_const", - dest="single", - const=True, - default=False, - help="""Useful flag for - designing single probes. Same as "-X 1 -w 1". It overrides -X and -w, and - deactivate -W, if specified.""", - ) - - window = parser.add_argument_group("window arguments") - window.add_argument( - "-W", metavar="size", type=int, default=None, help="""Window size.""" - ) - window.add_argument( - "-w", - metavar="shift", - type=float, - default=0.1, - help="""Window shift as a percentage of window size. Default: 0.1""", - ) - - focus = parser.add_argument_group("focus region arguments") - focus.add_argument( - "-R", - metavar="size", - type=float, - default=8000, - help="""Central focus region size, either in nt or as fraction of window - size. Default: 8000""", - ) - focus.add_argument( - "-r", - metavar="step", - type=float, - default=1000, - help="""Central focus region step, either in nt or as fraction of central - focus region size. Default: 1000""", - ) - - filters = parser.add_argument_group("filter arguments") - filters.add_argument( - "-F", - metavar="nOT", - type=int, - nargs=2, - default=[0, 99], - help="""Acceptable range of off-targets. Default: [0,99]""", - ) - filters.add_argument( - "-G", - metavar="dG", - type=float, - nargs=2, - default=[0.0, 0.5], - help="""Acceptable range of secondary structure delta free energy. Either - as absolute kcal/mol os as a fraction of delta free energy of hybridization. - Default: [.0,.5]""", - ) - filters.add_argument( - "-o", - metavar="step", - type=float, - default=0.1, - help="""Step for oligo score relaxation. Default: .1""", - ) - filters.add_argument( - "-t", - metavar="temp", - type=float, - default=10.0, - help="""Melting temperature range half-width. Default: 10.""", - ) - filters.add_argument( - "-P", - metavar="size", - type=int, - default=10000, - help="""Maximum probe size in nt. Default: 10000""", - ) - filters.add_argument( - "-H", - metavar="size", - type=float, - default=0.1, - help="""Maximum hole size in a probe as fraction of probe size. - Default: .1""", - ) - - probe_set = parser.add_argument_group("probe set arguments") - probe_set.add_argument( - "-I", - metavar="oligos", - type=float, - default=0.5, - help="""Probe oligo intersection threshold as shared oligo fraction. - Default: .5""", - ) - - advanced = parser.add_argument_group("advanced arguments") - advanced.add_argument( - "-k", - metavar="length", - type=int, - help="""Oligo length in nt. Use this when all oligos in the - database have the same length, for optimization purposes.""", - ) - advanced.add_argument( - "-O", - metavar="outpath", - type=str, - default=".", - help="Path to output directory. Default to current folder.", - ) - advanced.add_argument( - "--threads", - type=int, - default=1, - help="Number of threads for parallelization. Default: 1", - ) - advanced.add_argument( - "--reuse", - action="store_const", - dest="reuse", - const=True, - default=False, - help="Avoid overwriting previous database walk, load instead.", - ) - - parser.set_defaults(parse=parse_arguments, run=run) +@click.command( + name="query", + context_settings=CONTEXT_SETTINGS, + help="""Design FISH probes on a database chromosome. + When a --region is not specified, the whole chromosome is used. + Use -M for the number of probes, and -N for the number of oligos per probe. + Use -D to specify the minimum distance between consecutive oligos in a probe. - return parser + Use --single to access single-probe design. Same as "-X 1 -w 1", this option + overrides -X and -w, and ignores -W, if specified.""", +) +@click.argument("db_folder", type=click.Path(exists=True)) +@click.argument("chromosome", type=click.STRING) +@click.argument("output_path", metavar="OUTPUT", type=click.Path(exists=False)) +@click.option( + "--region", + type=click.INT, + nargs=2, + default=(0, -1), + help="Space-separate region start and end location.", +) +@click.option("-M", "--probes", type=click.INT, help="Design M probes.") +@click.option( + "-N", + "--oligos", + type=click.INT, + default=48, + help="N oligos per probe. Default: 48", +) +@click.option( + "-D", + "--dist", + type=click.INT, + default=2, + help="Consecutive oligo distance. Default: 2", +) +@click.option("--single", is_flag=True, help="Easy access to single probe design.") +@click.option("-W", "--window-size", type=click.INT) +@click.option( + "-w", + "--window-shift", + type=click.FLOAT, + default=0.1, + help="Shift as window fraction. Default: 0.1", +) +@click.option( + "-R", + "--focus-size", + type=click.FLOAT, + default=8e3, + help="""\b + Focus size in nt or window fraction. + Default: 8000""", +) +@click.option( + "-r", + "--focus-step", + type=click.FLOAT, + default=1e3, + help="""\b + Focus step in nt or focus fraction. + Default: 1000""", +) +@click.option( + "-F", + "--off-targets", + type=click.INT, + nargs=2, + default=(0, 99), + help="""Extremities of acceptable off-target range. + Default: [0, 99]""", +) +@click.option( + "-G", + "--free-energy", + type=click.FLOAT, + nargs=2, + default=(0.0, 0.5), + help="""Extremities of acceptable 2nd structure dG range, + in absolute kcal/mol or hybridization dG fraction. + Default: [0.0, 0.5]""", +) +@click.option( + "-o", + "--oligo-score-step", + type=click.FLOAT, + default=0.1, + help="Oligo score relaxation step. Default: 0.1", +) +@click.option( + "-t", + "--melting-half-width", + type=click.FLOAT, + default=10.0, + help="Melting range half-width. Default: 10.0", +) +@click.option( + "-P", + "--probe-size", + type=click.INT, + default=1e4, + help="Max probe size in nt. Default: 10000", +) +@click.option( + "-H", + "--gap-size", + type=click.FLOAT, + default=0.1, + help="""\b + Max gap size as probe size fraction. + Default: 0.1""", +) +@click.option( + "-I", + "--oligo-intersection", + type=click.FLOAT, + default=0.5, + help="""Probe intersection threshold as shared oligo fraction. + Default: .5""", +) +@click.option( + "-k", + "--oligo-length", + type=click.INT, +) +@click.option( + "--threads", + type=click.INT, + default=1, + help="Threads for parallelization. Default: 1", +) +def main( + db_folder: str, + chromosome: str, + output_path: str, + region: Tuple[int, int], + probes: Optional[int], + oligos: int, + dist: int, + single: bool, + window_size: Optional[int], + window_shift: float, + focus_size: float, + focus_step: float, + off_targets: Tuple[int, int], + free_energy: Tuple[float, float], + oligo_score_step: float, + melting_half_width: float, + probe_size: int, + gap_size: float, + oligo_intersection: float, + oligo_length: Optional[int], + threads: int, +) -> None: + settings = QuerySettings(db_folder, output_path) + if single: + probes = 1 + window_shift = 1.0 + window_size = None -def assert_reusable(args): - assert_msg = " ".join( - [ - "output path should NOT direct towards an existing directory", - "or file. Use '--reuse' to load previous results.", - f"Provided path '{args.O}'", - ] - ) - assert not os.path.isfile(args.O), assert_msg + " leads to a file" - if not args.reuse: - assert not os.path.isdir(args.O), assert_msg + " leads to a directory." - - -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert not all([isinstance(args.X, type(None)), isinstance(args.W, type(None))]) - if args.region is None: - args.region = [0, -1] - else: - assert args.region[1] > args.region[0] - if args.region[1] <= 0: - args.X = None + assert probes is not None or window_size is not None + if region[1] <= 0: + probes = None logging.info( " ".join( [ @@ -230,58 +193,47 @@ def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: ) ) - args.R = int(args.R) if args.R > 1 else float(args.R) - args.r = int(args.r) if args.r > 1 else float(args.r) - - if args.single: - args.X = 1 - args.w = 1.0 - args.W = None - - assert_reusable(args) - - return args - - -@enable_rich_assert -def run(args: argparse.Namespace) -> None: + assert_reusable(settings.output_path) - if not os.path.isdir(args.O): - os.mkdir(args.O) - add_log_file_handler("{0}/{1}.log".format(args.O, "ifpd2-main")) + if not isdir(settings.output_path): + mkdir(settings.output_path) + add_log_file_handler(f"{settings.output_path}/ifpd2-main.log") opb = OligoProbeBuilder() - opb.N = args.N - opb.D = args.D - opb.Tr = args.t - opb.Ps = args.P - opb.Ph = args.H - opb.Po = args.I - opb.k = args.k - opb.F = args.F - opb.Gs = args.G - opb.Ot = args.o + opb.N = PositiveInteger(oligos).n + opb.D = NonNegativeInteger(dist).n + opb.Tr = PositiveFloat(melting_half_width).n + opb.Ps = PositiveInteger(probe_size).n + opb.Ph = PositiveFloat(gap_size, 1).n + opb.Po = PositiveFloat(oligo_intersection, 1).n + opb.k = oligo_length + opb.F = NonNegativeIntInterval(*off_targets).astuple() + opb.Gs = FreeEnergyInterval(*free_energy).astuple() + opb.Ot = PositiveFloat(oligo_score_step, 1).n - opsb = OligoProbeSetBuilder(os.path.join(args.O, "probe_sets")) + opsb = OligoProbeSetBuilder(path_join(settings.output_path, "probe_sets")) logging.info(opb.get_prologue()) - ow = Walker(args.database) - ow.C = args.chrom - ow.S = args.region[0] - ow.E = max(args.region[1], 0) - ow.X = args.X - ow.Ws = args.W - ow.Wh = args.w - ow.Rs = args.R - ow.Rt = args.r - ow.out_path = args.O - ow.reuse = args.reuse - ow.threads = args.threads + ow = Walker(settings.db_folder_path) + ow.C = chromosome + genomic_region = GenomicRegion(*region) + ow.S = genomic_region.start + ow.E = max(genomic_region.end, genomic_region.start) + ow.X = 1 if probes is None else PositiveInteger(probes).n + window = QueryWindow(window_size, window_shift) + ow.Ws = window.size + ow.Wh = window.shift + focus = QueryFocus(focus_size, focus_step) + ow.Rs = focus.size + ow.Rt = focus.step + ow.out_path = settings.output_path + ow.reuse = False + ow.threads = PositiveInteger(threads).n ow.start( - start_from_nt=args.region[0], - end_at_nt=args.region[1], - N=args.N, + start_from_nt=genomic_region.start, + end_at_nt=genomic_region.end, + N=opb.N, opb=opb, cfr_step=ow.Rt, ) @@ -291,3 +243,37 @@ def run(args: argparse.Namespace) -> None: logging.info("Done. :thumbs_up: :smiley:") logging.shutdown() + + +class QuerySettings(object): + _db_folder: Folder + _output_path: Folder + + def __init__(self, db_folder: str, output_path: str): + super(QuerySettings, self).__init__() + self._db_folder = Folder(db_folder, True) + self._output_path = Folder(output_path, False) + + @property + def db_folder_path(self) -> str: + return self._db_folder.path + + @property + def output_path(self) -> str: + return self._output_path.path + + @property + def reusable(self) -> bool: + return False + + +def assert_reusable(output_path: str): + assert_msg = " ".join( + [ + "output path should NOT direct towards an existing directory", + "or file. Use '--reuse' to load previous results.", + f"Provided path '{output_path}'", + ] + ) + assert not isfile(output_path), assert_msg + " leads to a file" + assert not isdir(output_path), assert_msg + " leads to a directory." diff --git a/ifpd2/scripts/query2.py b/ifpd2/scripts/query2.py index 43c1938f..2711821c 100644 --- a/ifpd2/scripts/query2.py +++ b/ifpd2/scripts/query2.py @@ -3,263 +3,255 @@ @contact: gigi.ga90@gmail.com """ -import argparse -from ifpd2.asserts import enable_rich_assert +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.dataclasses import Folder +from ifpd2.dataclasses import PositiveInteger +from ifpd2.dataclasses import QueryWindow +from ifpd2.logging import add_log_file_handler from ifpd2.database import DataBase from ifpd2.region import GenomicRegionBuilder from ifpd2.walker2 import ChromosomeWalker -from ifpd2.logging import add_log_file_handler import logging -import os - - -def init_parser(subparsers: argparse._SubParsersAction) -> argparse.ArgumentParser: - parser = subparsers.add_parser( - __name__.split(".")[-1], - description=""" - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Soluta, aspernatur, - natus. Possimus recusandae distinctio, voluptatem fuga delectus laudantium ut, - inventore culpa sit amet ullam officiis, tenetur nobis eius vitae dolore. - """, - formatter_class=argparse.RawDescriptionHelpFormatter, - help="Check integrity of a database.", - ) - - parser.add_argument( - "database", metavar="database", type=str, help="Path to database folder." - ) - parser.add_argument( - "chrom", - type=str, - help="Database feature to query for a probe.", - ) - - query = parser.add_argument_group("query arguments") - query.add_argument( - "--region", - metavar=("chromStart", "chromEnd"), - type=int, - nargs=2, - help="""Start and end locations (space-separated) of the region of interest. - When a region is not provided (or start/end coincide), - the whole feature is queried.""", - ) - query.add_argument( - "-X", - metavar="probes", - type=int, - default=None, - help="""Number of probes to query for. Default: 1.""", - ) - query.add_argument( - "-N", - metavar="oligos", - type=int, - default=48, - help="""Number of oligos per probe. Default: 48.""", - ) - query.add_argument( - "-D", - metavar="dist", - type=float, - default=2, - help="""Minimum distance between consecutive oligos. Default: 2""", - ) - query.add_argument( - "--single", - action="store_const", - dest="single", - const=True, - default=False, - help="""Useful flag for - designing single probes. Same as "-X 1 -w 1". It overrides -X and -w, and - deactivate -W, if specified.""", - ) +from os.path import isdir, isfile +from os import mkdir +from typing import Optional, Tuple - window = parser.add_argument_group("window arguments") - window.add_argument( - "-W", metavar="size", type=int, default=None, help="""Window size.""" - ) - window.add_argument( - "-w", - metavar="shift", - type=float, - default=0.1, - help="""Window shift as a percentage of window size. Default: 0.1""", - ) - focus = parser.add_argument_group("focus region arguments") - focus.add_argument( - "-R", - metavar="size", - type=float, - default=8000, - help="""Central focus region size, either in nt or as fraction of window - size. Default: 8000""", - ) - focus.add_argument( - "-r", - metavar="step", - type=float, - default=1000, - help="""Central focus region step, either in nt or as fraction of central - focus region size. Default: 1000""", - ) +@click.command( + name="query2", + context_settings=CONTEXT_SETTINGS, + help="""Design FISH probes on a database chromosome. + When a --region is not specified, the whole chromosome is used. + Use -M for the number of probes, and -N for the number of oligos per probe. + Use -D to specify the minimum distance between consecutive oligos in a probe. - filters = parser.add_argument_group("filter arguments") - filters.add_argument( - "-F", - metavar="nOT", - type=int, - nargs=2, - default=[0, 99], - help="""Acceptable range of off-targets. Default: [0,99]""", - ) - filters.add_argument( - "-G", - metavar="dG", - type=float, - nargs=2, - default=[0.0, 0.5], - help="""Acceptable range of secondary structure delta free energy. Either - as absolute kcal/mol os as a fraction of delta free energy of hybridization. - Default: [.0,.5]""", - ) - filters.add_argument( - "-o", - metavar="step", - type=float, - default=0.1, - help="""Step for oligo score relaxation. Default: .1""", - ) - filters.add_argument( - "-t", - metavar="temp", - type=float, - default=10.0, - help="""Melting temperature range half-width. Default: 10.""", - ) - filters.add_argument( - "-P", - metavar="size", - type=int, - default=10000, - help="""Maximum probe size in nt. Default: 10000""", - ) - filters.add_argument( - "-H", - metavar="size", - type=float, - default=0.1, - help="""Maximum hole size in a probe as fraction of probe size. - Default: .1""", - ) - - probe_set = parser.add_argument_group("probe set arguments") - probe_set.add_argument( - "-I", - metavar="oligos", - type=float, - default=0.5, - help="""Probe oligo intersection threshold as shared oligo fraction. - Default: .5""", - ) + Use --single to access single-probe design. Same as "-X 1 -w 1", this option + overrides -X and -w, and ignores -W, if specified.""", +) +@click.argument("db_folder", type=click.Path(exists=True)) +@click.argument("chromosome", type=click.STRING) +@click.argument("output_path", metavar="OUTPUT", type=click.Path(exists=False)) +@click.option( + "--region", + type=click.INT, + nargs=2, + default=(0, -1), + help="Space-separate region start and end location.", +) +@click.option("-M", "--probes", type=click.INT, help="Design M probes.") +@click.option( + "-N", + "--oligos", + type=click.INT, + default=48, + help="N oligos per probe. Default: 48", +) +@click.option( + "-D", + "--dist", + type=click.INT, + default=2, + help="Consecutive oligo distance. Default: 2", +) +@click.option("--single", is_flag=True, help="Easy access to single probe design.") +@click.option("-W", "--window-size", type=click.INT) +@click.option( + "-w", + "--window-shift", + type=click.FLOAT, + default=0.1, + help="Shift as window fraction. Default: 0.1", +) +@click.option( + "-R", + "--focus-size", + type=click.FLOAT, + default=8e3, + help="""\b + Focus size in nt or window fraction. + Default: 8000""", +) +@click.option( + "-r", + "--focus-step", + type=click.FLOAT, + default=1e3, + help="""\b + Focus step in nt or focus fraction. + Default: 1000""", +) +@click.option( + "-F", + "--off-targets", + type=click.INT, + nargs=2, + default=(0, 99), + help="""Extremities of acceptable off-target range. + Default: [0, 99]""", +) +@click.option( + "-G", + "--free-energy", + type=click.FLOAT, + nargs=2, + default=(0.0, 0.5), + help="""Extremities of acceptable 2nd structure dG range, + in absolute kcal/mol or hybridization dG fraction. + Default: [0.0, 0.5]""", +) +@click.option( + "-o", + "--oligo-score-step", + type=click.FLOAT, + default=0.1, + help="Oligo score relaxation step. Default: 0.1", +) +@click.option( + "-t", + "--melting-half-width", + type=click.FLOAT, + default=10.0, + help="Melting range half-width. Default: 10.0", +) +@click.option( + "-P", + "--probe-size", + type=click.INT, + default=1e4, + help="Max probe size in nt. Default: 10000", +) +@click.option( + "-H", + "--gap-size", + type=click.FLOAT, + default=0.1, + help="""\b + Max gap size as probe size fraction. + Default: 0.1""", +) +@click.option( + "-I", + "--oligo-intersection", + type=click.FLOAT, + default=0.5, + help="""Probe intersection threshold as shared oligo fraction. + Default: .5""", +) +@click.option( + "-k", + "--oligo-length", + type=click.INT, +) +@click.option( + "--threads", + type=click.INT, + default=1, + help="Threads for parallelization. Default: 1", +) +def main( + db_folder: str, + chromosome: str, + output_path: str, + region: Tuple[int, int], + probes: Optional[int], + oligos: int, + dist: int, + single: bool, + window_size: Optional[int], + window_shift: Optional[float], + focus_size: float, + focus_step: float, + off_targets: Tuple[int, int], + free_energy: Tuple[float, float], + oligo_score_step: float, + melting_half_width: float, + probe_size: int, + gap_size: float, + oligo_intersection: float, + oligo_length: Optional[int], + threads: int, +) -> None: + settings = QuerySettings(db_folder, output_path) - advanced = parser.add_argument_group("advanced arguments") - advanced.add_argument( - "-k", - metavar="length", - type=int, - help="""Oligo length in nt. Use this when all oligos in the - database have the same length, for optimization purposes.""", - ) - advanced.add_argument( - "-O", - metavar="outpath", - type=str, - default=".", - help="Path to output directory. Default to current folder.", - ) - advanced.add_argument( - "--threads", - type=int, - default=1, - help="Number of threads for parallelization. Default: 1", - ) - advanced.add_argument( - "--reuse", - action="store_const", - dest="reuse", - const=True, - default=False, - help="Avoid overwriting previous database walk, load instead.", + probes, window_size, window_shift = check_input( + single, probes, window_size, window_shift ) - parser.set_defaults(parse=parse_arguments, run=run) + if not isdir(settings.output_path): + mkdir(settings.output_path) + add_log_file_handler(f"{settings.output_path}/ifpd2-main.log") - return parser + DB = DataBase(settings.db_folder_path) + RB = GenomicRegionBuilder(DB.get_chromosome(chromosome.encode())) + if probes is not None: + region_set_list = RB.build_by_number(PositiveInteger(probes).n) + else: + window_size, window_shift = QueryWindow(window_size, window_shift).astuple() + assert window_size is not None and window_shift is not None + region_set_list = RB.build_by_size(window_size, window_shift) -def assert_reusable(args): - assert_msg = " ".join( - [ - "output path should NOT direct towards an existing directory", - "or file. Use '--reuse' to load previous results.", - f"Provided path '{args.O}'", - ] - ) - assert not os.path.isfile(args.O), assert_msg + " leads to a file" - if not args.reuse: - assert not os.path.isdir(args.O), assert_msg + " leads to a directory." + walker = ChromosomeWalker(DB, chromosome.encode()) + walker.walk_multiple_regions(region_set_list) + # print((DB, RB, walker, region_set_list)) -@enable_rich_assert -def parse_arguments(args: argparse.Namespace) -> argparse.Namespace: - assert not all([isinstance(args.X, type(None)), isinstance(args.W, type(None))]) - if args.region is None: - args.region = [0, -1] - else: - assert args.region[1] > args.region[0] + logging.info("Done. :thumbs_up: :smiley:") + logging.shutdown() - args.R = int(args.R) if args.R > 1 else float(args.R) - args.r = int(args.r) if args.r > 1 else float(args.r) - if args.single: - args.X = 1 - args.w = None - args.W = None +def check_input( + single: bool, + probes: Optional[int], + window_size: Optional[int], + window_shift: Optional[float], +) -> Tuple[Optional[int], Optional[int], Optional[float]]: + if single: + probes = 1 + window_shift = None + window_size = None - assert args.X is not None or args.W is not None - if args.X is not None and args.W is not None: + assert probes is not None or window_size is not None + if probes is not None and window_size is not None: logging.warning("cannot combine -X and -W. Using -X.") - args.W = None - args.w = None - if args.W is not None and args.w is None: - args.w = 1 + window_size = None + window_shift = None + if window_size is not None and window_shift is None: + window_shift = 1 - assert_reusable(args) + return (probes, window_size, window_shift) - return args +class QuerySettings(object): + _db_folder: Folder + _output_path: Folder -@enable_rich_assert -def run(args: argparse.Namespace) -> None: - if not os.path.isdir(args.O): - os.mkdir(args.O) - add_log_file_handler("{0}/{1}.log".format(args.O, "ifpd2-main")) + def __init__(self, db_folder: str, output_path: str): + super(QuerySettings, self).__init__() + self._db_folder = Folder(db_folder, True) + self._output_path = Folder(output_path, False) - DB = DataBase(args.database) + @property + def db_folder_path(self) -> str: + return self._db_folder.path - RB = GenomicRegionBuilder(DB.get_chromosome(args.chrom.encode())) - if args.X is not None: - region_set_list = RB.build_by_number(args.X) - else: - region_set_list = RB.build_by_size(args.W, args.w) + @property + def output_path(self) -> str: + return self._output_path.path - walker = ChromosomeWalker(DB, args.chrom.encode()) - walker.walk_multiple_regions(region_set_list) + @property + def reusable(self) -> bool: + return False - # print((DB, RB, walker, region_set_list)) - logging.info("Done. :thumbs_up: :smiley:") - logging.shutdown() +def assert_reusable(output_path: str): + assert_msg = " ".join( + [ + "output path should NOT direct towards an existing directory", + "or file. Use '--reuse' to load previous results.", + f"Provided path '{output_path}'", + ] + ) + assert not isfile(output_path), assert_msg + " leads to a file" + assert not isdir(output_path), assert_msg + " leads to a directory." diff --git a/ifpd2/walker.py b/ifpd2/walker.py index a0d4be27..c498d215 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -13,7 +13,7 @@ from pathlib import Path import shutil from tqdm import tqdm # type: ignore -from typing import Dict, List +from typing import Dict, List, Optional, Union from ifpd2 import asserts as ass from ifpd2.logging import add_log_file_handler @@ -33,13 +33,13 @@ class GenomicWindowSet(object): E = int(3500000) # Region end coordinate (excluded) X = 20 # Number of probes to design - Ws = None # Window size (used when X is not provided) - Wh = 0.1 # Window shift (as a percentage of the window size) + Ws: Optional[int] = None # Window size (used when X is not provided) + Wh: Optional[float] = 0.1 # Window shift (as a percentage of the window size) - Rs = int(8000) # Region focus size, either in nt (Rs > 1) + Rs: Union[int, float] = int(8000) # Region focus size, either in nt (Rs > 1) # or fraction of Ws (0 1) + Rt: Union[int, float] = int(1000) # Region focus step, either in nt (Rt > 1) # or fraction of Rs (0=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] [[package]] name = "black" @@ -49,11 +49,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" -version = "7.1.2" +version = "8.0.1" description = "Composable command line interface toolkit" -category = "dev" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" @@ -100,11 +103,11 @@ python-versions = ">=3.7" [[package]] name = "packaging" -version = "20.9" +version = "21.0" description = "Core utilities for Python packages" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] pyparsing = ">=2.0.2" @@ -135,7 +138,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "platformdirs" -version = "2.2.0" +version = "2.4.0" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -147,14 +150,15 @@ test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock [[package]] name = "pluggy" -version = "0.13.1" +version = "1.0.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.extras] dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "py" @@ -166,7 +170,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.8.1" +version = "2.10.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -203,7 +207,7 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm [[package]] name = "python-dateutil" -version = "2.8.1" +version = "2.8.2" description = "Extensions to the standard Python datetime module" category = "main" optional = false @@ -214,7 +218,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2021.1" +version = "2021.3" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -222,7 +226,7 @@ python-versions = "*" [[package]] name = "regex" -version = "2021.3.17" +version = "2021.9.30" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -246,7 +250,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "six" -version = "1.15.0" +version = "1.16.0" description = "Python 2 and 3 compatibility utilities" category = "main" optional = false @@ -262,7 +266,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.0.4" +version = "1.2.1" description = "A lil' TOML parser" category = "dev" optional = false @@ -295,7 +299,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "cd22854c8b57c9386db5e8652cd22aae16f2a177a2bab00f10bfaefa664d61ba" +content-hash = "e84f0ed4b3fea5765f57cffe4e05fdeff09458318d387c48e39e469a74ef9f28" [metadata.files] atomicwrites = [ @@ -303,16 +307,16 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, - {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, + {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, + {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] black = [ {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, ] click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, + {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, + {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -361,8 +365,8 @@ numpy = [ {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, ] packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, + {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, + {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pandas = [ {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, @@ -392,20 +396,20 @@ pathspec = [ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, ] platformdirs = [ - {file = "platformdirs-2.2.0-py3-none-any.whl", hash = "sha256:4666d822218db6a262bdfdc9c39d21f23b4cfdb08af331a81e92751daf6c866c"}, - {file = "platformdirs-2.2.0.tar.gz", hash = "sha256:632daad3ab546bd8e6af0537d09805cec458dce201bccfe23012df73332e181e"}, + {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, + {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, ] pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] py = [ {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pygments = [ - {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, - {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"}, + {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, + {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, @@ -416,71 +420,71 @@ pytest = [ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, ] python-dateutil = [ - {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, - {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [ - {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, - {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] regex = [ - {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"}, - {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"}, - {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"}, - {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"}, - {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"}, - {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"}, - {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"}, - {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"}, - {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"}, - {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"}, - {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"}, - {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"}, - {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"}, - {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"}, - {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"}, - {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"}, - {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, + {file = "regex-2021.9.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66696c8336a1b5d1182464f3af3427cc760118f26d0b09a2ddc16a976a4d2637"}, + {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d87459ad3ab40cd8493774f8a454b2e490d8e729e7e402a0625867a983e4e02"}, + {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cf6a1e023caf5e9a982f5377414e1aeac55198831b852835732cfd0a0ca5ff"}, + {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:255791523f80ea8e48e79af7120b4697ef3b74f6886995dcdb08c41f8e516be0"}, + {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e502f8d4e5ef714bcc2c94d499684890c94239526d61fdf1096547db91ca6aa6"}, + {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4907fb0f9b9309a5bded72343e675a252c2589a41871874feace9a05a540241e"}, + {file = "regex-2021.9.30-cp310-cp310-win32.whl", hash = "sha256:3be40f720af170a6b20ddd2ad7904c58b13d2b56f6734ee5d09bbdeed2fa4816"}, + {file = "regex-2021.9.30-cp310-cp310-win_amd64.whl", hash = "sha256:c2b180ed30856dfa70cfe927b0fd38e6b68198a03039abdbeb1f2029758d87e7"}, + {file = "regex-2021.9.30-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6f2d2f93001801296fe3ca86515eb04915472b5380d4d8752f09f25f0b9b0ed"}, + {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fa7ba9ab2eba7284e0d7d94f61df7af86015b0398e123331362270d71fab0b9"}, + {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28040e89a04b60d579c69095c509a4f6a1a5379cd865258e3a186b7105de72c6"}, + {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f588209d3e4797882cd238195c175290dbc501973b10a581086b5c6bcd095ffb"}, + {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42952d325439ef223e4e9db7ee6d9087b5c68c5c15b1f9de68e990837682fc7b"}, + {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cae4099031d80703954c39680323dabd87a69b21262303160776aa0e55970ca0"}, + {file = "regex-2021.9.30-cp36-cp36m-win32.whl", hash = "sha256:0de8ad66b08c3e673b61981b9e3626f8784d5564f8c3928e2ad408c0eb5ac38c"}, + {file = "regex-2021.9.30-cp36-cp36m-win_amd64.whl", hash = "sha256:b345ecde37c86dd7084c62954468a4a655fd2d24fd9b237949dd07a4d0dd6f4c"}, + {file = "regex-2021.9.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6f08187136f11e430638c2c66e1db091105d7c2e9902489f0dbc69b44c222b4"}, + {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55442650f541d195a535ccec33078c78a9521973fb960923da7515e9ed78fa6"}, + {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87e9c489aa98f50f367fb26cc9c8908d668e9228d327644d7aa568d47e456f47"}, + {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2cb7d4909ed16ed35729d38af585673f1f0833e73dfdf0c18e5be0061107b99"}, + {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0861e7f6325e821d5c40514c551fd538b292f8cc3960086e73491b9c5d8291d"}, + {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81fdc90f999b2147fc62e303440c424c47e5573a9b615ed5d43a5b832efcca9e"}, + {file = "regex-2021.9.30-cp37-cp37m-win32.whl", hash = "sha256:8c1ad61fa024195136a6b7b89538030bd00df15f90ac177ca278df9b2386c96f"}, + {file = "regex-2021.9.30-cp37-cp37m-win_amd64.whl", hash = "sha256:e3770781353a4886b68ef10cec31c1f61e8e3a0be5f213c2bb15a86efd999bc4"}, + {file = "regex-2021.9.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c065d95a514a06b92a5026766d72ac91bfabf581adb5b29bc5c91d4b3ee9b83"}, + {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9925985be05d54b3d25fd6c1ea8e50ff1f7c2744c75bdc4d3b45c790afa2bcb3"}, + {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470f2c882f2672d8eeda8ab27992aec277c067d280b52541357e1acd7e606dae"}, + {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad0517df22a97f1da20d8f1c8cb71a5d1997fa383326b81f9cf22c9dadfbdf34"}, + {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e30838df7bfd20db6466fd309d9b580d32855f8e2c2e6d74cf9da27dcd9b63"}, + {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b34d2335d6aedec7dcadd3f8283b9682fadad8b9b008da8788d2fce76125ebe"}, + {file = "regex-2021.9.30-cp38-cp38-win32.whl", hash = "sha256:e07049cece3462c626d650e8bf42ddbca3abf4aa08155002c28cb6d9a5a281e2"}, + {file = "regex-2021.9.30-cp38-cp38-win_amd64.whl", hash = "sha256:37868075eda024470bd0feab872c692ac4ee29db1e14baec103257bf6cc64346"}, + {file = "regex-2021.9.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d331f238a7accfbbe1c4cd1ba610d4c087b206353539331e32a8f05345c74aec"}, + {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6348a7ab2a502cbdd0b7fd0496d614007489adb7361956b38044d1d588e66e04"}, + {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b1cca6c23f19bee8dc40228d9c314d86d1e51996b86f924aca302fc8f8bf9"}, + {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1f1125bc5172ab3a049bc6f4b9c0aae95a2a2001a77e6d6e4239fa3653e202b5"}, + {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:638e98d069b14113e8afba6a54d1ca123f712c0d105e67c1f9211b2a825ef926"}, + {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a0b0db6b49da7fa37ca8eddf9f40a8dbc599bad43e64f452284f37b6c34d91c"}, + {file = "regex-2021.9.30-cp39-cp39-win32.whl", hash = "sha256:9910869c472e5a6728680ca357b5846546cbbd2ab3ad5bef986ef0bc438d0aa6"}, + {file = "regex-2021.9.30-cp39-cp39-win_amd64.whl", hash = "sha256:3b71213ec3bad9a5a02e049f2ec86b3d7c3e350129ae0f4e2f99c12b5da919ed"}, + {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ {file = "rich-10.11.0-py3-none-any.whl", hash = "sha256:44bb3f9553d00b3c8938abf89828df870322b9ba43caf3b12bb7758debdc6dec"}, {file = "rich-10.11.0.tar.gz", hash = "sha256:016fa105f34b69c434e7f908bb5bd7fefa9616efdb218a2917117683a6394ce5"}, ] six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.0.4-py3-none-any.whl", hash = "sha256:0713b16ff91df8638a6a694e295c8159ab35ba93e3424a626dd5226d386057be"}, - {file = "tomli-1.0.4.tar.gz", hash = "sha256:be670d0d8d7570fd0ea0113bd7bb1ba3ac6706b4de062cc4c952769355c9c268"}, + {file = "tomli-1.2.1-py3-none-any.whl", hash = "sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f"}, + {file = "tomli-1.2.1.tar.gz", hash = "sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442"}, ] tqdm = [ {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, diff --git a/pyproject.toml b/pyproject.toml index 26d22f25..22cd10a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ include = [ [tool.poetry.dependencies] python = "^3.8" +click = "^8.0.1" numpy = "^1.20.1" pandas = "^1.2.2" rich = ">=9.10,<11.0" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index a4288de0..00000000 --- a/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0" -commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0" -numpy==1.20.1; python_version >= "3.7" -pandas==1.2.3; python_full_version >= "3.7.1" -pygments==2.8.1; python_version >= "3.6" and python_version < "4.0" -python-dateutil==2.8.1; python_full_version >= "3.7.1" -pytz==2021.1; python_full_version >= "3.7.1" -rich==9.13.0; python_version >= "3.6" and python_version < "4.0" -six==1.15.0; python_full_version >= "3.7.1" -tqdm==4.59.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") -typing-extensions==3.7.4.3; python_version >= "3.6" and python_version < "4.0" From 98ef3bfe4b6c005532103efb97393c4245a6ca62 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 12:48:49 +0200 Subject: [PATCH 115/185] Blacked --- ifpd2/scripts/db/dump.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py index 347ccf2e..827c56e8 100644 --- a/ifpd2/scripts/db/dump.py +++ b/ifpd2/scripts/db/dump.py @@ -56,9 +56,7 @@ def check_region( ), "cannot use --region-start or --region-end without --chrom" elif start is not None: chrom_size = DB.chromosome_sizes_nt[chrom.encode()] - assert ( - start < chrom_size - ), f"{start} larger than chromosome size: {chrom_size}" + assert start < chrom_size, f"{start} larger than chromosome size: {chrom_size}" if end is not None: assert start < end, "end location smaller than start" From 4af88351b9dfe0368ea20a357ba07034dcb514ca Mon Sep 17 00:00:00 2001 From: "sourcery-ai[bot]" <58596630+sourcery-ai[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:49:43 +0200 Subject: [PATCH 116/185] 'Refactored by Sourcery' (#67) Co-authored-by: Sourcery AI <> --- ifpd2/scripts/db/make.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ifpd2/scripts/db/make.py b/ifpd2/scripts/db/make.py index 96383f85..e404bfec 100644 --- a/ifpd2/scripts/db/make.py +++ b/ifpd2/scripts/db/make.py @@ -101,10 +101,11 @@ def main( settings.prefix = prefix assert not ( - 0 == len(settings.off_target_paths) - and 0 != len(settings.melting_temperature_paths) + len(settings.off_target_paths) == 0 + and len(settings.melting_temperature_paths) != 0 ), "please provide either --hush or --melting" + os.mkdir(settings.output_path) dbdf = pd.DataFrame(columns=["name"]) dbdf.set_index("name", inplace=True) @@ -141,7 +142,7 @@ def main( def parse_input( path_list: Set[str], parse_function: Callable, software_name: str ) -> pd.DataFrame: - if len(path_list) == 0: + if not path_list: return pd.DataFrame() logging.info(f"parsing {software_name} output") return pd.concat([parse_function(path) for path in path_list]) @@ -153,7 +154,7 @@ def populate_db( parse_function: Callable, software_name: str, ) -> pd.DataFrame: - if len(path_list) == 0: + if not path_list: return db parsed_db = parse_input(path_list, parse_function, software_name) logging.info(f"adding {software_name} output to database") From 11fbe3db8c335be7201e37615e4646ffc66ce667 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 12:50:54 +0200 Subject: [PATCH 117/185] Blacked. --- ifpd2/scripts/db/make.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ifpd2/scripts/db/make.py b/ifpd2/scripts/db/make.py index e404bfec..6d036011 100644 --- a/ifpd2/scripts/db/make.py +++ b/ifpd2/scripts/db/make.py @@ -105,7 +105,6 @@ def main( and len(settings.melting_temperature_paths) != 0 ), "please provide either --hush or --melting" - os.mkdir(settings.output_path) dbdf = pd.DataFrame(columns=["name"]) dbdf.set_index("name", inplace=True) From 2ce16ccae61409b2ee3ef4af6da6d8abc1d3dc8a Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 13:05:53 +0200 Subject: [PATCH 118/185] Now passing tests. --- ifpd2/database.py | 10 +++++----- ifpd2/scripts/db/make.py | 4 +++- ifpd2/scripts/db/settings.py | 12 +++++++++++- ifpd2/tests/test_scripts_db.py | 2 +- test_data/test_db/db.pickle | Bin 11136 -> 11146 bytes 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 74251a81..1ef5ed89 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -126,7 +126,7 @@ class DataBase(object): """Buffering and checking class for ifpd2 database.""" _root: str - _args: argparse.Namespace + _args: Dict[str, Any] _chromosomes: ChromosomeDict _dtype: Dict[str, str] _record_byte_size: int @@ -192,13 +192,13 @@ def get_chromosome(self, chromosome: bytes) -> ChromosomeData: def log_details(self) -> None: """Log database details.""" - logging.info(f"Database name: {self._args.output}") + logging.info(f"Database name: {self._args['output_path']}") logging.info(f"Sequence max length: {self._dtype['sequence'][2:]}") logging.info("") logging.info("[bold]## Input files[/bold]") - logging.info(f"hush files: {self._args.hush}") - logging.info(f"oligo-melting files: {self._args.melting}") - logging.info(f"OligoArrayAux files: {self._args.secondary}") + logging.info(f"hush files: {self._args['off_target_paths']}") + logging.info(f"oligo-melting files: {self._args['melting_temperature_paths']}") + logging.info(f"OligoArrayAux files: {self._args['secondary_structure_paths']}") logging.info("") logging.info("[bold]## Chromosome details[/bold]") logging.info(f"Expecting {len(self._chromosomes)} chromosomes.") diff --git a/ifpd2/scripts/db/make.py b/ifpd2/scripts/db/make.py index 6d036011..88de9341 100644 --- a/ifpd2/scripts/db/make.py +++ b/ifpd2/scripts/db/make.py @@ -278,4 +278,6 @@ def write_database( logging.info("writing db.pickle") with open(os.path.join(settings.output_path, "db.pickle"), "wb") as OH: - pickle.dump(dict(chromosomes=chromosome_data, dtype=dtype, args=settings), OH) + pickle.dump( + dict(chromosomes=chromosome_data, dtype=dtype, args=settings.asdict()), OH + ) diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py index 898fc3d0..310cdc61 100644 --- a/ifpd2/scripts/db/settings.py +++ b/ifpd2/scripts/db/settings.py @@ -7,7 +7,7 @@ from ifpd2.const import DEFAULT_DATABASE_INDEX_BIN_SIZE import logging from os.path import isdir, isfile -from typing import List, Set +from typing import Any, Dict, List, Set class DBMakeSettings(object): @@ -87,3 +87,13 @@ def init_login(self) -> None: logging.info(f"hush: {self.off_target_paths}") logging.info(f"oligo-melting: {self.melting_temperature_paths}") logging.info(f"OligoArrayAux: {self.secondary_structure_paths}") + + def asdict(self) -> Dict[str, Any]: + return dict( + output_path=self.output_path, + off_target_paths=self.off_target_paths, + melting_temperature_paths=self.melting_temperature_paths, + secondary_structure_paths=self.secondary_structure_paths, + bin_size=self.bin_size, + prefix=self.prefix, + ) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index cc6fb9fc..9f4bdc6b 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -18,6 +18,7 @@ def test_db_make(): "ifpd2", "db", "make", + "test_db", "-O", "test_data/test.hush.fa", "-T", @@ -26,7 +27,6 @@ def test_db_make(): "test_data/test.ss.ct", "-p", "chr", - "test_db", ] ) assert b"Error" not in script_output diff --git a/test_data/test_db/db.pickle b/test_data/test_db/db.pickle index 97a8b39c4a05d9cff8e2d3a85dfb7e6620fc9542..1334e78abc59e22c9535d3f735165d9ad92e8618 100644 GIT binary patch delta 217 zcmZ9^y$ZrG6a`?#qJoQyigOoHh>zgz3v>)=d(#wb8Rj21={x|%7yOJhPi zH!7zsHD7 Date: Wed, 6 Oct 2021 13:31:47 +0200 Subject: [PATCH 119/185] Added biopython dependency and extract_kmers script. (#68) --- ifpd2/database.py | 1 - ifpd2/scripts/__init__.py | 3 +- ifpd2/scripts/extract_kmers.py | 66 ++++++++++++++++++++++++++++++++++ ifpd2/scripts/ifpd2.py | 3 +- poetry.lock | 40 ++++++++++++++++++++- pyproject.toml | 1 + 6 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 ifpd2/scripts/extract_kmers.py diff --git a/ifpd2/database.py b/ifpd2/database.py index 1ef5ed89..28f1611b 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -3,7 +3,6 @@ @contact: gigi.ga90@gmail.com """ -import argparse import copy from ifpd2 import const from ifpd2.chromosome import ChromosomeData, ChromosomeDict diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index 5d80fea6..7cb98673 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -3,7 +3,7 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2.scripts import db +from ifpd2.scripts import db, extract_kmers from ifpd2.scripts import ifpd2 from ifpd2.scripts import query, query2 @@ -18,6 +18,7 @@ __all__ = [ "db", + "extract_kmers", "ifpd2", "query", "query2", diff --git a/ifpd2/scripts/extract_kmers.py b/ifpd2/scripts/extract_kmers.py new file mode 100644 index 00000000..03ff9aa0 --- /dev/null +++ b/ifpd2/scripts/extract_kmers.py @@ -0,0 +1,66 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from Bio import SeqIO # type: ignore +from Bio.Seq import Seq # type: ignore +from Bio.SeqRecord import SeqRecord # type: ignore +import click # type: ignore +from ifpd2.const import CONTEXT_SETTINGS +import logging +from os.path import join as path_join +from os.path import basename, normpath, splitext + + +@click.command( + name="extract_kmers", + context_settings=CONTEXT_SETTINGS, + help="Generate oligonucleotides K-mers from FASTA", +) +@click.argument("input_path", metavar="INPUT_FASTA", type=click.Path(exists=True)) +@click.argument("output_path", metavar="OUTPUT_DIRECTORY", type=click.Path(exists=True)) +@click.argument("kmer_size", metavar="KMER_LENGTH", type=click.INT) +def main(input_path: str, output_path: str, kmer_size: int) -> None: + seqRec = SeqIO.parse(input_path, "fasta") + + oligos_list = list() + for record in seqRec: + record = record + for i in range(len(record) - kmer_size + 1): + oligos_list.append( + SeqRecord( + Seq(str(record.seq)[slice(i, i + kmer_size)]).reverse_complement(), + id=f"{record.id}|{i+1}:{i+kmer_size+1}", + name="", + description="", + ) + ) + logging.info(f"Extracted {len(oligos_list)} sequences") + + valid_oligos = [ + oligo + for oligo in oligos_list + if (oligo.seq.count("C") + oligo.seq.count("G")) / kmer_size >= 0.35 + and (oligo.seq.count("C") + oligo.seq.count("G")) / kmer_size <= 0.85 + and "N" not in oligo.seq + ] + + print("Sequences with correct GC content:", len(valid_oligos)) + + base, _ = splitext(basename(input_path)) + SeqIO.write( + valid_oligos, + path_join(normpath(output_path), f"{base}.GC35to85_RevCompl.fa"), + "fasta", + ) + + oligos_rc = [ + oligo.reverse_complement(id=True, name="", description="") + for oligo in valid_oligos + ] + SeqIO.write( + oligos_rc, + path_join(normpath(output_path), f"{base}.GC35to85_Reference.fa"), + "fasta", + ) diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 8375be5f..81b1795a 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -6,7 +6,7 @@ import click # type: ignore from ifpd2 import __version__ from ifpd2.const import CONTEXT_SETTINGS -from ifpd2.scripts import db, query, query2 +from ifpd2.scripts import db, extract_kmers, query, query2 import sys import webbrowser @@ -37,6 +37,7 @@ def open_documentation() -> None: main.add_command(open_documentation) +main.add_command(extract_kmers.main) main.add_command(db.run.main) main.add_command(query.main) main.add_command(query2.main) diff --git a/poetry.lock b/poetry.lock index adbe0fae..ef71a3b4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -20,6 +20,17 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +[[package]] +name = "biopython" +version = "1.79" +description = "Freely available tools for computational molecular biology." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +numpy = "*" + [[package]] name = "black" version = "21.9b0" @@ -299,7 +310,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "e84f0ed4b3fea5765f57cffe4e05fdeff09458318d387c48e39e469a74ef9f28" +content-hash = "c193c889a18d0bbcf280f38e20d50cf80e6fb232124bd129d5351dd421c7f6dc" [metadata.files] atomicwrites = [ @@ -310,6 +321,33 @@ attrs = [ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] +biopython = [ + {file = "biopython-1.79-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:72a1477cf1701964c7224e506a54fd65d1cc5228da200b634a17992230aa1cbd"}, + {file = "biopython-1.79-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:365569543ea58dd07ef205ec351c23b6c1a3200d5d321eb28ceaecd55eb5955e"}, + {file = "biopython-1.79-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4be31815226052d86d4c2f6a103c40504e34bba3e25cc1b1d687a3203c42fb6e"}, + {file = "biopython-1.79-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ceab668be9cbdcddef55ad459f87acd0316ae4a00d32251fea4cf665f5062fda"}, + {file = "biopython-1.79-cp36-cp36m-win32.whl", hash = "sha256:83bfea8a19f9352c47b13965c4b73853e7aeef3c5aed8489895b0679e32c621b"}, + {file = "biopython-1.79-cp36-cp36m-win_amd64.whl", hash = "sha256:98deacc30b8654cfcdcf707d93fa4e3c8717bbda07c3f9f828cf84753d4a1e4d"}, + {file = "biopython-1.79-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:884a2b99ac7820cb84f70089769a512e3238ee60438b8c934ed519613dc570ce"}, + {file = "biopython-1.79-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51eb467a60c38820ad1e6c3a7d4cb10535606f559646e824cc65c96091d91ff7"}, + {file = "biopython-1.79-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03ee5c72b3cc3f0675a8c22ce1c45fe99a32a60db18df059df479ae6cf619708"}, + {file = "biopython-1.79-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9580978803b582e0612b71673cab289e6bf261a865009cfb9501d65bc726a76e"}, + {file = "biopython-1.79-cp37-cp37m-win32.whl", hash = "sha256:5ae69c5e09769390643aa0f8064517665df6fb99c37433821d6664584d0ecb8c"}, + {file = "biopython-1.79-cp37-cp37m-win_amd64.whl", hash = "sha256:f0a7e1d94a318f74974345fd0987ec389b16988ec484e67218e900b116b932a8"}, + {file = "biopython-1.79-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aa23a83a220486af6193760d079b36543fe00afcfbd18280ca2fd0b2c1c8dd6d"}, + {file = "biopython-1.79-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3d4eec2e348c3d97a7fde80ee0f2b8ebeed849d2bd64a616833a9be03b93c8"}, + {file = "biopython-1.79-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:947b793e804c59ea45ae46945a57612ad1789ca87af4af0d6a62dcecf3a6246a"}, + {file = "biopython-1.79-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d9f6ce961e0c380e2a5435f64c96421dbcebeab6a1b41506bd81251feb733c08"}, + {file = "biopython-1.79-cp38-cp38-win32.whl", hash = "sha256:155c5b95857bca7ebd607210cb9d8ea459bb0b86b3ca37ea44ec47c26ede7e9a"}, + {file = "biopython-1.79-cp38-cp38-win_amd64.whl", hash = "sha256:2dbb4388c75b5dfca8ce729e791f465c9c878dbd7ba2ab9a1f9854609d2b5426"}, + {file = "biopython-1.79-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:76988ed3d7383d566db1d7fc69c9cf136c6275813fb749fc6753c340f81f1a8f"}, + {file = "biopython-1.79-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e921571b51514a6d35944242d6fef6427c3998acf58940fe1f209ac8a92a6e87"}, + {file = "biopython-1.79-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf634a56f449a4123e48e538d661948e5ac29fb452acd2962b8cb834b472a9d7"}, + {file = "biopython-1.79-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ab93d5749b375be3682866b3a606aa2ebd3e6d868079793925bf4fbb0987cf1f"}, + {file = "biopython-1.79-cp39-cp39-win32.whl", hash = "sha256:8f33dafd3c7254fff5e1684b965e45a7c08d9b8e1bf51562b0a521ff9a6f5ea0"}, + {file = "biopython-1.79-cp39-cp39-win_amd64.whl", hash = "sha256:b3ab26f26a1956ef26303386510d84e917e31fcbbc94918c336da0163ef628df"}, + {file = "biopython-1.79.tar.gz", hash = "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b"}, +] black = [ {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, diff --git a/pyproject.toml b/pyproject.toml index 22cd10a7..5539c742 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ include = [ [tool.poetry.dependencies] python = "^3.8" +biopython = "^1.79" click = "^8.0.1" numpy = "^1.20.1" pandas = "^1.2.2" From 3bc8a7a7e3e20c101dce6f06d1bd6fc6402fbd91 Mon Sep 17 00:00:00 2001 From: "sourcery-ai[bot]" <58596630+sourcery-ai[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 13:33:00 +0200 Subject: [PATCH 120/185] 'Refactored by Sourcery' (#70) Co-authored-by: Sourcery AI <> --- ifpd2/scripts/extract_kmers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ifpd2/scripts/extract_kmers.py b/ifpd2/scripts/extract_kmers.py index 03ff9aa0..cd28298e 100644 --- a/ifpd2/scripts/extract_kmers.py +++ b/ifpd2/scripts/extract_kmers.py @@ -24,7 +24,7 @@ def main(input_path: str, output_path: str, kmer_size: int) -> None: seqRec = SeqIO.parse(input_path, "fasta") - oligos_list = list() + oligos_list = [] for record in seqRec: record = record for i in range(len(record) - kmer_size + 1): From 8cfe1b587076a2d585138f4deb105c98c0fbd65f Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 14:28:32 +0200 Subject: [PATCH 121/185] Improved extract_kmers script --- ifpd2/__init__.py | 3 +- ifpd2/dataclasses.py | 11 ++++++ ifpd2/fasta.py | 34 +++++++++++++++++++ ifpd2/io.py | 12 ++++++- ifpd2/oligo.py | 19 +++++++++-- ifpd2/scripts/extract_kmers.py | 61 +++++++++++++--------------------- 6 files changed, 98 insertions(+), 42 deletions(-) create mode 100644 ifpd2/fasta.py diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index f2565edb..d67eb197 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -3,7 +3,7 @@ @contact: gigi.ga90@gmail.com """ -from ifpd2 import asserts, dataclasses, io +from ifpd2 import asserts, dataclasses, fasta, io from ifpd2 import walker, walker2 from ifpd2 import chromosome, database, region from ifpd2 import oligo, probe, probe_set @@ -19,6 +19,7 @@ "__version__", "asserts", "dataclasses", + "fasta", "io", "walker", "walker2", diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py index 0569fca1..58a43c1d 100644 --- a/ifpd2/dataclasses.py +++ b/ifpd2/dataclasses.py @@ -133,3 +133,14 @@ class FreeEnergyInterval: def astuple(self) -> Tuple[float, float]: return (self.start, self.end) + + +@dataclass(frozen=True) +class GCRange: + low: float + high: float + + def __post_init__(self): + assert 0 <= self.low <= 1 + assert 0 <= self.high <= 1 + assert self.low <= self.high diff --git a/ifpd2/fasta.py b/ifpd2/fasta.py new file mode 100644 index 00000000..65164dd6 --- /dev/null +++ b/ifpd2/fasta.py @@ -0,0 +1,34 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +from Bio.SeqIO.FastaIO import SimpleFastaParser # type: ignore +from os.path import isfile +from tqdm import tqdm # type: ignore +from typing import List, Tuple + + +def extract_kmers(input_path: str, kmer_size: int) -> List[Tuple[str, str]]: + assert isfile(input_path) + FH = open(input_path) + oligos_list: List[Tuple[str, str]] = [] + for record_header, record_sequence in tqdm( + SimpleFastaParser(FH), desc="Parsing region", leave=False + ): + for i in tqdm( + range(len(record_sequence) - kmer_size + 1), + desc="Extracting oligos", + leave=False, + ): + oligo_sequence = str(record_sequence)[slice(i, i + kmer_size)] + if "N" in oligo_sequence: + continue + oligos_list.append( + ( + f"{record_header}|{i+1}:{i+kmer_size+1}", + oligo_sequence, + ) + ) + FH.close() + return oligos_list diff --git a/ifpd2/io.py b/ifpd2/io.py index f009a782..9fbb71f9 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -9,7 +9,7 @@ import logging import os import pandas as pd # type: ignore -from typing import Dict, List, Set, Tuple +from typing import Dict, Generator, List, Set, Tuple from tqdm import tqdm # type: ignore @@ -107,3 +107,13 @@ def parse_secondary(path: str) -> pd.DataFrame: secondary_df.set_index("name", inplace=True) ass.ert_in_dtype(secondary_df["ss_dG"].values.max(), "f4") return secondary_df.astype(const.dtype_secondary) + + +def write_oligos( + output_path: str, + oligo_generator: Generator[Tuple[str, str], None, None], + desc: str = "writing", +) -> None: + with open(output_path, "w+") as OH: + for oligo in tqdm(oligo_generator, desc=desc, leave=False): + OH.write("%s\n%s\n" % oligo) diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index e7ee4287..73c6892c 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -3,11 +3,13 @@ @contact: gigi.ga90@gmail.com """ +from ifpd2 import asserts as ass +from ifpd2.dataclasses import GCRange import logging import numpy as np # type: ignore import pandas as pd # type: ignore - -from ifpd2 import asserts as ass +from tqdm import tqdm # type: ignore +from typing import List, Tuple class Oligo(object): @@ -389,3 +391,16 @@ def __apply_keep_condition(self, keep_condition): self._oligos_passing_score_filter = self._oligos_passing_score_filter[ keep_condition ] + + +def select_by_GC( + oligos_list: List[Tuple[str, str]], + kmer_size: int, + gc_range: GCRange = GCRange(0.35, 0.85), +) -> List[Tuple[str, str]]: + return [ + (header, sequence) + for header, sequence in tqdm(oligos_list, desc="GC check", leave=False) + if (sequence.count("C") + sequence.count("G")) / kmer_size >= gc_range.low + and (sequence.count("C") + sequence.count("G")) / kmer_size <= gc_range.high + ] diff --git a/ifpd2/scripts/extract_kmers.py b/ifpd2/scripts/extract_kmers.py index cd28298e..45950aeb 100644 --- a/ifpd2/scripts/extract_kmers.py +++ b/ifpd2/scripts/extract_kmers.py @@ -3,13 +3,14 @@ @contact: gigi.ga90@gmail.com """ -from Bio import SeqIO # type: ignore -from Bio.Seq import Seq # type: ignore -from Bio.SeqRecord import SeqRecord # type: ignore +from Bio.Seq import reverse_complement # type: ignore import click # type: ignore from ifpd2.const import CONTEXT_SETTINGS +from ifpd2.fasta import extract_kmers +from ifpd2.io import write_oligos +from ifpd2.oligo import select_by_GC import logging -from os.path import join as path_join +from os.path import isdir, isfile, join as path_join from os.path import basename, normpath, splitext @@ -22,45 +23,29 @@ @click.argument("output_path", metavar="OUTPUT_DIRECTORY", type=click.Path(exists=True)) @click.argument("kmer_size", metavar="KMER_LENGTH", type=click.INT) def main(input_path: str, output_path: str, kmer_size: int) -> None: - seqRec = SeqIO.parse(input_path, "fasta") + assert isfile(input_path) + assert isdir(output_path) - oligos_list = [] - for record in seqRec: - record = record - for i in range(len(record) - kmer_size + 1): - oligos_list.append( - SeqRecord( - Seq(str(record.seq)[slice(i, i + kmer_size)]).reverse_complement(), - id=f"{record.id}|{i+1}:{i+kmer_size+1}", - name="", - description="", - ) - ) - logging.info(f"Extracted {len(oligos_list)} sequences") + logging.info(f"Input : {input_path}") + logging.info(f"Output : {output_path}") + logging.info(f"Length : {kmer_size}") - valid_oligos = [ - oligo - for oligo in oligos_list - if (oligo.seq.count("C") + oligo.seq.count("G")) / kmer_size >= 0.35 - and (oligo.seq.count("C") + oligo.seq.count("G")) / kmer_size <= 0.85 - and "N" not in oligo.seq - ] + oligos_list = extract_kmers(input_path, kmer_size) + logging.info(f"Extracted {len(oligos_list)} sequences") - print("Sequences with correct GC content:", len(valid_oligos)) + valid_oligos = select_by_GC(oligos_list, kmer_size) + logging.info(f"{len(valid_oligos)} sequences with correct GC content") base, _ = splitext(basename(input_path)) - SeqIO.write( - valid_oligos, + write_oligos( + path_join(normpath(output_path), f"{base}.GC35to85_Reference.fa"), + (o for o in valid_oligos), + ) + write_oligos( path_join(normpath(output_path), f"{base}.GC35to85_RevCompl.fa"), - "fasta", + ((h, reverse_complement(s)) for h, s in valid_oligos), + "writing rc", ) - oligos_rc = [ - oligo.reverse_complement(id=True, name="", description="") - for oligo in valid_oligos - ] - SeqIO.write( - oligos_rc, - path_join(normpath(output_path), f"{base}.GC35to85_Reference.fa"), - "fasta", - ) + logging.info("Done. :thumbs_up: :smiley:") + logging.shutdown() From 84f0c08e0e6bde24c8ac8e3849c1dd17180b1ed0 Mon Sep 17 00:00:00 2001 From: "sourcery-ai[bot]" <58596630+sourcery-ai[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:30:04 +0200 Subject: [PATCH 122/185] 'Refactored by Sourcery' (#71) Co-authored-by: Sourcery AI <> --- ifpd2/fasta.py | 35 +++++++++++++++++----------------- ifpd2/scripts/extract_kmers.py | 3 ++- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/ifpd2/fasta.py b/ifpd2/fasta.py index 65164dd6..45edb7bd 100644 --- a/ifpd2/fasta.py +++ b/ifpd2/fasta.py @@ -11,24 +11,23 @@ def extract_kmers(input_path: str, kmer_size: int) -> List[Tuple[str, str]]: assert isfile(input_path) - FH = open(input_path) - oligos_list: List[Tuple[str, str]] = [] - for record_header, record_sequence in tqdm( - SimpleFastaParser(FH), desc="Parsing region", leave=False - ): - for i in tqdm( - range(len(record_sequence) - kmer_size + 1), - desc="Extracting oligos", - leave=False, + with open(input_path) as FH: + oligos_list: List[Tuple[str, str]] = [] + for record_header, record_sequence in tqdm( + SimpleFastaParser(FH), desc="Parsing region", leave=False ): - oligo_sequence = str(record_sequence)[slice(i, i + kmer_size)] - if "N" in oligo_sequence: - continue - oligos_list.append( - ( - f"{record_header}|{i+1}:{i+kmer_size+1}", - oligo_sequence, + for i in tqdm( + range(len(record_sequence) - kmer_size + 1), + desc="Extracting oligos", + leave=False, + ): + oligo_sequence = str(record_sequence)[slice(i, i + kmer_size)] + if "N" in oligo_sequence: + continue + oligos_list.append( + ( + f"{record_header}|{i+1}:{i+kmer_size+1}", + oligo_sequence, + ) ) - ) - FH.close() return oligos_list diff --git a/ifpd2/scripts/extract_kmers.py b/ifpd2/scripts/extract_kmers.py index 45950aeb..1edf5e38 100644 --- a/ifpd2/scripts/extract_kmers.py +++ b/ifpd2/scripts/extract_kmers.py @@ -39,8 +39,9 @@ def main(input_path: str, output_path: str, kmer_size: int) -> None: base, _ = splitext(basename(input_path)) write_oligos( path_join(normpath(output_path), f"{base}.GC35to85_Reference.fa"), - (o for o in valid_oligos), + iter(valid_oligos), ) + write_oligos( path_join(normpath(output_path), f"{base}.GC35to85_RevCompl.fa"), ((h, reverse_complement(s)) for h, s in valid_oligos), From dc661222339b3acd6718a91c266c7f3a32ebc50e Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 14:31:14 +0200 Subject: [PATCH 123/185] Mypyed after sorcery refactoring --- ifpd2/io.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ifpd2/io.py b/ifpd2/io.py index 9fbb71f9..22dcdf6f 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -9,7 +9,7 @@ import logging import os import pandas as pd # type: ignore -from typing import Dict, Generator, List, Set, Tuple +from typing import Dict, Iterator, List, Set, Tuple from tqdm import tqdm # type: ignore @@ -111,7 +111,7 @@ def parse_secondary(path: str) -> pd.DataFrame: def write_oligos( output_path: str, - oligo_generator: Generator[Tuple[str, str], None, None], + oligo_generator: Iterator[Tuple[str, str]], desc: str = "writing", ) -> None: with open(output_path, "w+") as OH: From daac6edeed5b5949a8e6d617e22576021a774721 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:11:39 +0000 Subject: [PATCH 124/185] Bump rich from 10.11.0 to 10.12.0 (#72) --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index ef71a3b4..c7ef0ad6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -245,11 +245,11 @@ python-versions = "*" [[package]] name = "rich" -version = "10.11.0" +version = "10.12.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.6.2,<4.0.0" [package.dependencies] colorama = ">=0.4.0,<0.5.0" @@ -509,8 +509,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.11.0-py3-none-any.whl", hash = "sha256:44bb3f9553d00b3c8938abf89828df870322b9ba43caf3b12bb7758debdc6dec"}, - {file = "rich-10.11.0.tar.gz", hash = "sha256:016fa105f34b69c434e7f908bb5bd7fefa9616efdb218a2917117683a6394ce5"}, + {file = "rich-10.12.0-py3-none-any.whl", hash = "sha256:c30d6808d1cd3defd56a7bd2d587d13e53b5f55de6cf587f035bcbb56bc3f37b"}, + {file = "rich-10.12.0.tar.gz", hash = "sha256:83fb3eff778beec3c55201455c17cccde1ccdf66d5b4dade8ef28f56b50c4bd4"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From 03ecb7970e29e7637cc7d6d15a97268535d09641 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 16:48:47 +0200 Subject: [PATCH 125/185] Added autocompletion. (#73) * Added autocompletion. * 'Refactored by Sourcery' (#74) Co-authored-by: Sourcery AI <> Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- ifpd2/autocomplete/.ifpd2-complete.bash | 29 +++++++++ ifpd2/autocomplete/.ifpd2-complete.fish | 22 +++++++ ifpd2/autocomplete/.ifpd2-complete.zsh | 35 +++++++++++ ifpd2/scripts/__init__.py | 5 +- ifpd2/scripts/autocomplete.py | 84 +++++++++++++++++++++++++ pyproject.toml | 1 + 6 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 ifpd2/autocomplete/.ifpd2-complete.bash create mode 100644 ifpd2/autocomplete/.ifpd2-complete.fish create mode 100644 ifpd2/autocomplete/.ifpd2-complete.zsh create mode 100644 ifpd2/scripts/autocomplete.py diff --git a/ifpd2/autocomplete/.ifpd2-complete.bash b/ifpd2/autocomplete/.ifpd2-complete.bash new file mode 100644 index 00000000..f045cfc9 --- /dev/null +++ b/ifpd2/autocomplete/.ifpd2-complete.bash @@ -0,0 +1,29 @@ +_ifpd2_completion() { + local IFS=$'\n' + local response + + response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD _IFPD2_COMPLETE=bash_complete $1) + + for completion in $response; do + IFS=',' read type value <<< "$completion" + + if [[ $type == 'dir' ]]; then + COMREPLY=() + compopt -o dirnames + elif [[ $type == 'file' ]]; then + COMREPLY=() + compopt -o default + elif [[ $type == 'plain' ]]; then + COMPREPLY+=($value) + fi + done + + return 0 +} + +_ifpd2_completion_setup() { + complete -o nosort -F _ifpd2_completion ifpd2 +} + +_ifpd2_completion_setup; + diff --git a/ifpd2/autocomplete/.ifpd2-complete.fish b/ifpd2/autocomplete/.ifpd2-complete.fish new file mode 100644 index 00000000..075e65ff --- /dev/null +++ b/ifpd2/autocomplete/.ifpd2-complete.fish @@ -0,0 +1,22 @@ +function _ifpd2_completion; + set -l response; + + for value in (env _IFPD2_COMPLETE=fish_complete COMP_WORDS=(commandline -cp) COMP_CWORD=(commandline -t) ifpd2); + set response $response $value; + end; + + for completion in $response; + set -l metadata (string split "," $completion); + + if test $metadata[1] = "dir"; + __fish_complete_directories $metadata[2]; + else if test $metadata[1] = "file"; + __fish_complete_path $metadata[2]; + else if test $metadata[1] = "plain"; + echo $metadata[2]; + end; + end; +end; + +complete --no-files --command ifpd2 --arguments "(_ifpd2_completion)"; + diff --git a/ifpd2/autocomplete/.ifpd2-complete.zsh b/ifpd2/autocomplete/.ifpd2-complete.zsh new file mode 100644 index 00000000..b68c1464 --- /dev/null +++ b/ifpd2/autocomplete/.ifpd2-complete.zsh @@ -0,0 +1,35 @@ +#compdef ifpd2 + +_ifpd2_completion() { + local -a completions + local -a completions_with_descriptions + local -a response + (( ! $+commands[ifpd2] )) && return 1 + + response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) _IFPD2_COMPLETE=zsh_complete ifpd2)}") + + for type key descr in ${response}; do + if [[ "$type" == "plain" ]]; then + if [[ "$descr" == "_" ]]; then + completions+=("$key") + else + completions_with_descriptions+=("$key":"$descr") + fi + elif [[ "$type" == "dir" ]]; then + _path_files -/ + elif [[ "$type" == "file" ]]; then + _path_files -f + fi + done + + if [ -n "$completions_with_descriptions" ]; then + _describe -V unsorted completions_with_descriptions -U + fi + + if [ -n "$completions" ]; then + compadd -U -V unsorted -a completions + fi +} + +compdef _ifpd2_completion ifpd2; + diff --git a/ifpd2/scripts/__init__.py b/ifpd2/scripts/__init__.py index 7cb98673..0a89b35e 100644 --- a/ifpd2/scripts/__init__.py +++ b/ifpd2/scripts/__init__.py @@ -3,8 +3,8 @@ @contact: gigi.ga90@gmail.com """ +from ifpd2.scripts import autocomplete, ifpd2 from ifpd2.scripts import db, extract_kmers -from ifpd2.scripts import ifpd2 from ifpd2.scripts import query, query2 import logging @@ -17,9 +17,10 @@ ) __all__ = [ + "autocomplete", + "ifpd2", "db", "extract_kmers", - "ifpd2", "query", "query2", ] diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py new file mode 100644 index 00000000..1fc5bdc1 --- /dev/null +++ b/ifpd2/scripts/autocomplete.py @@ -0,0 +1,84 @@ +""" +@author: Gabriele Girelli +@contact: gigi.ga90@gmail.com +""" + +import click # type: ignore +import os +from rich import print # type: ignore +from shutil import copyfile +import sys + +from ifpd2 import __path__, __version__ +from ifpd2.const import CONTEXT_SETTINGS + + +@click.command(context_settings=CONTEXT_SETTINGS) +@click.option( + "--shell-type", + "-s", + help="shell type for which to activate autocompletion", + type=click.Choice(["bash", "zsh", "fish"], case_sensitive=False), + default="bash", + show_default=True, +) +@click.option( + "--regenerate", + help="to regenerate autocompletion file, mainly for developers", + type=click.BOOL, + default=False, + is_flag=True, +) +@click.version_option(__version__) +def main(shell_type: str, regenerate: bool) -> None: + user_home_path = os.path.expanduser("~") + autocomplete_path = os.path.join( + __path__[0], "autocomplete", f".ifpd2-complete.{shell_type}" + ) + + if regenerate: + regenerate_autocompletion_files(shell_type, autocomplete_path) + + if shell_type in {"bash", "zsh"}: + autocomplete_bash_or_zsh(user_home_path, autocomplete_path, shell_type) + elif shell_type == "fish": + autocomplete_fish(user_home_path, autocomplete_path) + + print("Done. :thumbs_up: :smiley:") + + +def regenerate_autocompletion_files(shell_type: str, autocomplete_path: str) -> None: + os.system(f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}") + print(f"Regenerated {shell_type} completion file: {autocomplete_path}") + + +def autocomplete_fish(user_home_path: str, autocomplete_path: str) -> None: + destination_path = os.path.join( + user_home_path, ".config/fish/completions/ifpd2.fish" + ) + + if os.path.isfile(destination_path): + print("Autocompletion was previously set up. Skipping.") + sys.exit() + + copyfile( + autocomplete_path, + destination_path, + ) + + +def autocomplete_bash_or_zsh( + user_home_path: str, autocomplete_path: str, shell_type: str = "bash" +) -> None: + assert shell_type in {"bash", "zsh"} + + autocompletion_string = f". {autocomplete_path} # IFPD2-AUTOCOMPLETE\n" + run_command_path = os.path.join(user_home_path, f".{shell_type}rc") + + with open(run_command_path, "r") as OH: + if autocompletion_string in OH.readlines(): + print("Autocompletion was previously set up. Skipping.") + sys.exit() + + with open(run_command_path, "a+") as OH: + OH.write(f"\n{autocompletion_string}") diff --git a/pyproject.toml b/pyproject.toml index 5539c742..c05daca6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,3 +45,4 @@ build-backend = "poetry.masonry.api" [tool.poetry.scripts] "ifpd2" = "ifpd2.scripts.ifpd2:main" +"ifpd2-autocomplete" = "ifpd2.scripts.autocomplete:main" From dee0d87cb14978247f825629667e166ccefe4c2f Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Wed, 6 Oct 2021 16:50:43 +0200 Subject: [PATCH 126/185] Fixed __path__ --- ifpd2/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ifpd2/__init__.py b/ifpd2/__init__.py index d67eb197..99151f66 100644 --- a/ifpd2/__init__.py +++ b/ifpd2/__init__.py @@ -9,6 +9,7 @@ from ifpd2 import oligo, probe, probe_set from importlib.metadata import version, PackageNotFoundError +from typing import List try: __version__ = version(__name__) @@ -30,3 +31,4 @@ "probe", "probe_set", ] +__path__: List[str] From e9e18959d7e4bb0c8f619ef87560d86c36a61cf0 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Thu, 7 Oct 2021 08:36:48 +0200 Subject: [PATCH 127/185] Added missing fasta header starting character --- ifpd2/io.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ifpd2/io.py b/ifpd2/io.py index 22dcdf6f..b43898e8 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -116,4 +116,4 @@ def write_oligos( ) -> None: with open(output_path, "w+") as OH: for oligo in tqdm(oligo_generator, desc=desc, leave=False): - OH.write("%s\n%s\n" % oligo) + OH.write(">%s\n%s\n" % oligo) From 41a25819a146c6509300565555d4bf61adc16c18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Oct 2021 07:56:18 +0000 Subject: [PATCH 128/185] Bump click from 8.0.1 to 8.0.3 (#75) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c7ef0ad6..e2ca9271 100644 --- a/poetry.lock +++ b/poetry.lock @@ -60,7 +60,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" -version = "8.0.1" +version = "8.0.3" description = "Composable command line interface toolkit" category = "main" optional = false @@ -353,8 +353,8 @@ black = [ {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, ] click = [ - {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, - {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"}, + {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, + {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, From 9f3a9d5b66a3fdd82ddeff8e5da78b530c9f4d31 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 15 Oct 2021 12:04:45 +0200 Subject: [PATCH 129/185] Added compatibility with previous database pickled arguments. --- ifpd2/database.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 28f1611b..a95304d6 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -3,6 +3,7 @@ @contact: gigi.ga90@gmail.com """ +import argparse import copy from ifpd2 import const from ifpd2.chromosome import ChromosomeData, ChromosomeDict @@ -144,7 +145,10 @@ def __init__(self, path: str): details = pickle.load(IH) self._chromosomes = details["chromosomes"] self._dtype = details["dtype"] - self._args = details["args"] + if isinstance(details["args"], argparse.Namespace): + self._args = self.__parse_old_pickle(details["args"]) + else: + self._args = dict(details["args"]) assert isinstance(self._chromosomes, ChromosomeDict) for chromosome in self.chromosome_list: @@ -186,6 +190,18 @@ def record_byte_size(self) -> int: def dtype(self) -> Dict[str, str]: return copy.copy(self._dtype) + @staticmethod + def __parse_old_pickle(args: argparse.Namespace) -> Dict[str, Any]: + _args = vars(args) + return dict( + output_path=_args["output"], + off_target_paths=_args["hush"], + melting_temperature_paths=_args["melting"], + secondary_structure_paths=_args["secondary"], + bin_size=_args["binsize"], + prefix=_args["prefix"], + ) + def get_chromosome(self, chromosome: bytes) -> ChromosomeData: return self._chromosomes.get_chromosome(chromosome) From dd0f5bc976d8a1faca1052c363d9baad885e4adb Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Mon, 18 Oct 2021 15:24:18 +0200 Subject: [PATCH 130/185] Added pre-commits. --- .pre-commit-config.yaml | 40 +++++++++++++++++++++++++++++++++++++++ ignore-spelling-words.txt | 0 2 files changed, 40 insertions(+) create mode 100644 .pre-commit-config.yaml create mode 100644 ignore-spelling-words.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..2fff86e9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,40 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +default_language_version: + python: python3.8 +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: "v4.0.1" + hooks: + - id: check-added-large-files + - id: check-ast + - id: check-docstring-first + - id: check-yaml +- repo: https://github.com/pre-commit/mirrors-mypy + rev: "v0.910-1" + hooks: + - id: mypy +- repo: https://github.com/psf/black + rev: "21.9b0" + hooks: + - id: black +- repo: https://github.com/PyCQA/flake8 + rev: "4.0.1" + hooks: + - id: flake8 + args: ["--count", "--select=E9,F63,F7,F82", "--show-source", "--statistics"] + - id: flake8 + args: ["--count", "--exit-zero", "--max-complexity=5", "--max-line-length=88", "--ignore=E203", "--statistics"] +- repo: https://github.com/jendrikseipp/vulture + rev: "v2.3" + hooks: + - id: vulture +- repo: https://github.com/codespell-project/codespell + rev: v2.1.0 + hooks: + - id: codespell + name: codespell + description: Checks for common misspellings in text files. + entry: codespell --ignore-words ignore-spelling-words.txt readme.md code.py + language: python + types: [text] \ No newline at end of file diff --git a/ignore-spelling-words.txt b/ignore-spelling-words.txt new file mode 100644 index 00000000..e69de29b From b8ef91ce2795c020efddaad4441d41a67f105216 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Mon, 18 Oct 2021 15:39:23 +0200 Subject: [PATCH 131/185] Fixed spelling --- .pre-commit-config.yaml | 4 +--- ifpd2/walker.py | 2 +- ifpd2/walker2.py | 2 +- ignore-spelling-words.txt | 1 + pyproject.toml | 5 +++++ 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2fff86e9..4e59a592 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,8 +33,6 @@ repos: rev: v2.1.0 hooks: - id: codespell - name: codespell - description: Checks for common misspellings in text files. - entry: codespell --ignore-words ignore-spelling-words.txt readme.md code.py + entry: codespell --ignore-words=ignore-spelling-words.txt language: python types: [text] \ No newline at end of file diff --git a/ifpd2/walker.py b/ifpd2/walker.py index c498d215..8fd8c8d1 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -611,7 +611,7 @@ def process_window( **kwargs, ): # Process oligos from window using fprocess. Then, post-process them - # with fopost. Requires at least N oligos to proceeed. If opath is + # with fopost. Requires at least N oligos to proceed. If opath is # specified, a ".done" file is touched upon successful postprocessing. logger = logging.getLogger(loggerName) kwargs["loggerName"] = loggerName diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index e57e196e..672b1f3c 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -134,7 +134,7 @@ def fastforward(self, start_from_nt: int) -> None: def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record]: """Buffer a chromosome's records. - Buffer records from a chromosome withing the specified region. + Buffer records from a chromosome within the specified region. To buffer the whole records, specify a [0, -1] region. Keyword Arguments: diff --git a/ignore-spelling-words.txt b/ignore-spelling-words.txt index e69de29b..dfb34046 100644 --- a/ignore-spelling-words.txt +++ b/ignore-spelling-words.txt @@ -0,0 +1 @@ +ot \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index c05daca6..3e25cee9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,11 @@ tqdm = "^4.58.0" pytest = "^6.2.5" black = "^21.9b0" +[tool.vulture] +paths = ["ifpd2"] +min_confidence = 80 +verbose = true + [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api" From 22ac84152abca7ea956e542532f8df27505e8d29 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Mon, 18 Oct 2021 15:39:54 +0200 Subject: [PATCH 132/185] Added support for hush gzipped files --- ifpd2/io.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/ifpd2/io.py b/ifpd2/io.py index b43898e8..96c17a19 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -6,6 +6,7 @@ import copy from ifpd2 import asserts as ass from ifpd2 import const +import gzip import logging import os import pandas as pd # type: ignore @@ -25,6 +26,16 @@ def get_dtype_length(dtype: Dict[str, str]) -> int: return sum(int(label.strip("><|SUuif")) for label in dtype.values()) +def iterate_lines(path: str) -> Iterator: + """Iterate lines of a file, even if gzipped.""" + if not path.endswith(".gz"): + yield from open(path) + else: + with gzip.open(path) as IH: + for line in IH: + yield line.decode() + + def parse_hush(path: str) -> pd.DataFrame: """Parse HUSH output. @@ -38,18 +49,17 @@ def parse_hush(path: str) -> pd.DataFrame: logging.info(f"parsing: '{path}'") sequence_lengths: Set[int] = set() parsed_lines: List[Tuple[str, str, int]] = [] - with open(path) as IH: - header = "" - for line in tqdm(IH, desc="Parsing hush output", leave=False): - if line.startswith(">"): - header = line.strip() - else: - line_split = line.strip().split(",") - parsed_lines.append( - (header[1:], line_split[0], int(line_split[1].strip())) - ) - sequence_lengths.add(len(line_split[0])) - header = "" + + header = "" + for line in tqdm(iterate_lines(path), desc="Parsing hush output", leave=False): + if line.startswith(">"): + header = line.strip() + else: + line_split = line.strip().split(",") + parsed_lines.append((header[1:], line_split[0], int(line_split[1].strip()))) + sequence_lengths.add(len(line_split[0])) + header = "" + hush_df = pd.DataFrame(parsed_lines, columns=["name", "sequence", "off_target_no"]) hush_df.set_index("name", inplace=True) ass.ert_in_dtype(hush_df["off_target_no"].values.max(), "u4") From 676e3ca631472223e02f6747856bf25b08640f18 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 09:03:59 +0200 Subject: [PATCH 133/185] Create .deepsource.toml --- .deepsource.toml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 00000000..7e92eaec --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,16 @@ +version = 1 + +[[analyzers]] +name = "shell" +enabled = true + +[[analyzers]] +name = "secrets" +enabled = true + +[[analyzers]] +name = "python" +enabled = true + + [analyzers.meta] + runtime_version = "3.x.x" From c70335bcf2ae0d526171ba41849dabe3079d350b Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:06:52 +0200 Subject: [PATCH 134/185] Fix comparison constant position (#76) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/chromosome.py | 4 ++-- ifpd2/oligo.py | 4 ++-- ifpd2/probe.py | 6 +++--- ifpd2/region.py | 2 +- ifpd2/walker.py | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index 58bde757..8f42bf46 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -103,7 +103,7 @@ def build( for colname in ("chromosome", "start", "end"): assert colname in chrom_db.columns, f"missing '{colname}' column" chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) - assert 1 == len(chromosome_set) + assert len(chromosome_set) == 1 self.__init_index(chrom_db) self.__populate_bins(chrom_db, record_byte_size, track) @@ -147,7 +147,7 @@ def __init__( assert "chromosome" in chromosome_db.columns selected_chrom = chromosome_db["chromosome"][0] - assert 1 == len(set(chromosome_db["chromosome"].values)) + assert len(set(chromosome_db["chromosome"].values)) == 1 self._record_byte_size = get_dtype_length(dtype) assert self._record_byte_size > 0 diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 73c6892c..13bb2e3b 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -155,7 +155,7 @@ def focus_window(self): @focus_window.setter def focus_window(self, focus_window): ass.ert_type(focus_window, tuple, "focus window") - assert 2 == len(focus_window) + assert len(focus_window) == 2 assert focus_window[1] > focus_window[0] self._focus_window = focus_window @@ -245,7 +245,7 @@ def expand_focus_to_n_oligos(self, n, verbose=True): def expand_focus_by_step(self, step, verbose=True): # Expand the current focus window of a given step (in nt) - assert 0 < step + assert step < 0 if ( self.focus_window[0] <= self._data["start"].min() diff --git a/ifpd2/probe.py b/ifpd2/probe.py index dc88521b..d02defbb 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -321,14 +321,14 @@ def _assert(self): assert (self.k + self.D) * self.N <= self.Ps ass.ert_type(self.F, list, "F") - assert 2 == len(self.F) + assert len(self.F) == 2 for i in range(2): ass.ert_type(self.F[i], int, f"F[{i}]") assert self.F[i] >= 0 assert self.F[1] >= self.F[0] ass.ert_type(self.Gs, list, "Gs") - assert 2 == len(self.Gs) + assert len(self.Gs) == 2 for i in range(2): ass.ert_type(self.Gs[i], float, f"Gs[{i}]") assert self.Gs[i] <= 1 @@ -457,7 +457,7 @@ def __explore_filter(self, oGroup, logger): if max_score == 0 and nOligos_prev_score_thr == 0: return [] - while 0 == nOligos_prev_score_thr and score_thr <= max_score - self.Ot: + while nOligos_prev_score_thr == 0 and score_thr <= max_score - self.Ot: score_thr += self.Ot oGroup.apply_threshold(score_thr) nOligos_prev_score_thr = oGroup.get_n_focused_oligos(True) diff --git a/ifpd2/region.py b/ifpd2/region.py index ff2fdad5..72fe772a 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -36,7 +36,7 @@ def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: chromStart {int} -- chromosome start position (usually 0) chromEnd {int} -- chromosome end position """ - assert 0 != len(chrom), "chromosome cannot be empty" + assert len(chrom) != 0, "chromosome cannot be empty" assert ( chromStart >= 0 ), f"start should be greater than or equal to 0: {chromStart}" diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 8fd8c8d1..cc1dc8d3 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -158,7 +158,7 @@ def __update_focus(self): def __mk_all_window_sets(self): # Prepare all window sets in a region of interest window_starts = np.floor(np.arange(self.S, self.E, self.Ws)).astype("i") - if 0 != (self.E - self.S) % self.Ws or len(window_starts) != 1: + if (self.E - self.S) % self.Ws != 0 or len(window_starts) != 1: window_starts = window_starts[:-1] window_mids = (window_starts + self.Ws / 2).reshape((window_starts.shape[0], 1)) From 25a89232c90ab8c7273a7726aef4e0361abb12d0 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:07:36 +0200 Subject: [PATCH 135/185] Replace `dict` call with comprehension (#77) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/chromosome.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index 8f42bf46..ba89d1b0 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -244,15 +244,15 @@ def index_bin_size(self) -> int: @property def sizes_nt(self) -> Dict[bytes, int]: - return dict([(name, data.size_nt) for name, data in self._data.items()]) + return {name: data.size_nt for name, data in self._data.items()} @property def sizes_bytes(self) -> Dict[bytes, int]: - return dict([(name, data.size_bytes) for name, data in self._data.items()]) + return {name: data.size_bytes for name, data in self._data.items()} @property def recordnos(self) -> Dict[bytes, int]: - return dict([(name, data.recordno) for name, data in self._data.items()]) + return {name: data.recordno for name, data in self._data.items()} def get_chromosome(self, chromosome: bytes) -> ChromosomeData: return copy.copy(self._data[chromosome]) From 20b2ec3793f79154019510f39a9ad8544dfc2414 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:08:53 +0200 Subject: [PATCH 136/185] Remove unnecessary use of comprehension (#78) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/walker2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 672b1f3c..c61c011c 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -156,7 +156,7 @@ def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record def walk_single_region(self, region: GenomicRegion) -> Iterator[List[Record]]: assert region.chromosome == self.__chromosome focus_start, focus_end = region.focus - record_list = [r for r in self.buffer(focus_start, focus_end)] + record_list = list(self.buffer(focus_start, focus_end)) yield record_list while region.can_increase_focus(): region.increase_focus() @@ -164,9 +164,9 @@ def walk_single_region(self, region: GenomicRegion) -> Iterator[List[Record]]: record_list = list( itertools.chain( *[ - [r for r in self.buffer(new_focus_start, focus_start)], + list(self.buffer(new_focus_start, focus_start)), record_list, - [r for r in self.buffer(focus_end, new_focus_end)], + list(self.buffer(focus_end, new_focus_end)), ] ) ) From 4c79e9de2897818a54bb622955e70338c2c61d9a Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:09:55 +0200 Subject: [PATCH 137/185] Change methods not using its bound instance to staticmethods (#79) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/probe.py | 3 ++- ifpd2/probe_set.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index d02defbb..3e34587b 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -549,7 +549,8 @@ def reduce_probe_list(self, probe_list): print(e) raise - def select_probe_from_pair(self, probeA, probeB): + @staticmethod + def select_probe_from_pair(probeA, probeB): if probeA.size < probeB.size: return probeA else: diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index be27f4f0..8c51e250 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -183,7 +183,8 @@ def __init__(self, out_path): shutil.rmtree(out_path) os.mkdir(out_path) - def __build_probe_set_list(self, window_list, i): + @staticmethod + def __build_probe_set_list(window_list, i): probe_set_list = [(p,) for p in window_list[i]] for w in window_list[(i + 1) :]: From 9bf303e5c1c298be9454f40c1ac96a3293a730f8 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:12:11 +0200 Subject: [PATCH 138/185] Remove assert statement from non-test files (#80) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/asserts.py | 50 ++++++++++++++++----------- ifpd2/chromosome.py | 30 ++++++++++------ ifpd2/database.py | 20 +++++++---- ifpd2/dataclasses.py | 63 ++++++++++++++++++++++------------ ifpd2/fasta.py | 3 +- ifpd2/io.py | 12 ++++--- ifpd2/logging.py | 6 ++-- ifpd2/oligo.py | 18 ++++++---- ifpd2/probe.py | 42 +++++++++++++++-------- ifpd2/probe_set.py | 9 +++-- ifpd2/region.py | 38 ++++++++++++-------- ifpd2/scripts/autocomplete.py | 3 +- ifpd2/scripts/db/check.py | 3 +- ifpd2/scripts/db/dump.py | 14 +++++--- ifpd2/scripts/db/make.py | 10 +++--- ifpd2/scripts/db/settings.py | 17 +++++---- ifpd2/scripts/extract_kmers.py | 6 ++-- ifpd2/scripts/query.py | 9 +++-- ifpd2/scripts/query2.py | 12 ++++--- ifpd2/tests/test_scripts_db.py | 18 ++++++---- ifpd2/walker.py | 31 ++++++++++------- ifpd2/walker2.py | 6 ++-- 22 files changed, 272 insertions(+), 148 deletions(-) diff --git a/ifpd2/asserts.py b/ifpd2/asserts.py index d0e9f7fe..6aeea9a7 100644 --- a/ifpd2/asserts.py +++ b/ifpd2/asserts.py @@ -10,48 +10,58 @@ def ert_type(x, stype, label): - assert isinstance(x, stype), f"{label} should be {stype}, {type(x)} instead" + if not isinstance(x, stype): + raise AssertionError(f"{label} should be {stype}, {type(x)} instead") def ert_multiTypes(x, types, label): cond = any(isinstance(x, t) for t in types) - assert cond, f"{label} should be one of {types}, {type(x)} instead" + if not cond: + raise AssertionError(f"{label} should be one of {types}, {type(x)} instead") def ert_nonNeg(x, label, include_zero=False): if not include_zero: - assert x > 0, f"{label} should be greater than 0" + if x <= 0: + raise AssertionError(f"{label} should be greater than 0") else: - assert x >= 0, f"{label} should be greater than or equal to 0" + if x < 0: + raise AssertionError(f"{label} should be greater than or equal to 0") def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True): if leftClose: if rightClose: - assert x >= vmin and x <= vmax, f"expected {vmin}<={label}<={vmax}" + if not (x >= vmin and x <= vmax): + raise AssertionError(f"expected {vmin}<={label}<={vmax}") else: - assert x >= vmin and x < vmax, f"expected {vmin}<={label}<{vmax}" + if not (x >= vmin and x < vmax): + raise AssertionError(f"expected {vmin}<={label}<{vmax}") elif rightClose: - assert x > vmin and x <= vmax, f"expected {vmin}<{label}<={vmax}" + if not (x > vmin and x <= vmax): + raise AssertionError(f"expected {vmin}<{label}<={vmax}") else: - assert x > vmin and x < vmax, f"expected {vmin}<{label}<{vmax}" + if not (x > vmin and x < vmax): + raise AssertionError(f"expected {vmin}<{label}<{vmax}") def ert_in_dtype(x, dtype): if dtype.startswith("f"): - assert x <= np.finfo(dtype).max, " ".join( - [ - "expected to be lower than {dtype} max:", - f"{x} < {np.finfo(dtype).max}", - ] - ) + if x > np.finfo(dtype).max: + raise AssertionError(" ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.finfo(dtype).max}", + ] + )) elif dtype.startswith("u") or dtype.startswith("i"): - assert x <= np.iinfo(dtype).max, " ".join( - [ - "expected to be lower than {dtype} max:", - f"{x} < {np.iinfo(dtype).max}", - ] - ) + if x > np.iinfo(dtype).max: + raise AssertionError(" ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.iinfo(dtype).max}", + ] + )) else: logging.warning(f"assert not implemented for dtype '{dtype}'") diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index ba89d1b0..9623fac5 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -20,7 +20,8 @@ class ChromosomeIndex(object): def __init__(self, bin_size: int): super(ChromosomeIndex, self).__init__() - assert bin_size >= 1 + if bin_size < 1: + raise AssertionError self._bin_size = bin_size def __init_index(self, chrom_db: pd.DataFrame) -> None: @@ -63,7 +64,8 @@ def __populate_bins( for i in range(chrom_db.shape[0]): track[0].update(track[1], advance=1) position_in_nt = chrom_db["start"].values[i] - assert position_in_nt > current_position + if position_in_nt <= current_position: + raise AssertionError current_position = position_in_nt position_in_bytes = record_byte_size * i @@ -101,16 +103,19 @@ def build( track {Tuple[Progress, TaskID]} -- progress bar details """ for colname in ("chromosome", "start", "end"): - assert colname in chrom_db.columns, f"missing '{colname}' column" + if colname not in chrom_db.columns: + raise AssertionError(f"missing '{colname}' column") chromosome_set: Set[bytes] = set(chrom_db["chromosome"].values) - assert len(chromosome_set) == 1 + if len(chromosome_set) != 1: + raise AssertionError self.__init_index(chrom_db) self.__populate_bins(chrom_db, record_byte_size, track) self.__fill_empty_bins() def __getitem__(self, position_in_nt: int) -> int: - assert self._index is not None + if self._index is None: + raise AssertionError binned_to = position_in_nt // self._bin_size if binned_to not in self._index: return -1 @@ -145,12 +150,15 @@ def __init__( ): super(ChromosomeData, self).__init__() - assert "chromosome" in chromosome_db.columns + if "chromosome" not in chromosome_db.columns: + raise AssertionError selected_chrom = chromosome_db["chromosome"][0] - assert len(set(chromosome_db["chromosome"].values)) == 1 + if len(set(chromosome_db["chromosome"].values)) != 1: + raise AssertionError self._record_byte_size = get_dtype_length(dtype) - assert self._record_byte_size > 0 + if self._record_byte_size <= 0: + raise AssertionError self._name = selected_chrom self._recordno = chromosome_db.shape[0] @@ -195,7 +203,8 @@ def _build_index( index_bin_size {int} -- index bin size progress {Progress} -- progress instance for progress bar with rich """ - assert index_bin_size > 0 + if index_bin_size <= 0: + raise AssertionError indexing_track = progress.add_task( f"indexing {self._name.decode()}.bin", total=chromosome_db.shape[0], @@ -226,7 +235,8 @@ class ChromosomeDict(object): def __init__(self, index_bin_size: int = const.DEFAULT_DATABASE_INDEX_BIN_SIZE): super(ChromosomeDict, self).__init__() self._data = {} - assert index_bin_size > 0 + if index_bin_size <= 0: + raise AssertionError self._index_bin_size = index_bin_size def __len__(self) -> int: diff --git a/ifpd2/database.py b/ifpd2/database.py index a95304d6..d2110c44 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -38,7 +38,8 @@ def __parse_bytes(self, record: bytes, column_dtypes: Dict[str, str]) -> None: record {bytes} -- record bytes column_dtypes {Dict[str, str]} -- column dtypes """ - assert len(record) == get_dtype_length(column_dtypes) + if len(record) != get_dtype_length(column_dtypes): + raise AssertionError self._data = {} current_location = 0 for label in const.database_columns: @@ -137,9 +138,11 @@ def __init__(self, path: str): path {str} -- absolute path to database folder """ super(DataBase, self).__init__() - assert os.path.isdir(path), f"cannot find database folder '{path}'" + if not os.path.isdir(path): + raise AssertionError(f"cannot find database folder '{path}'") db_pickle_path = os.path.join(path, "db.pickle") - assert os.path.isfile(db_pickle_path), f"'db.pickle is missing in '{path}'" + if not os.path.isfile(db_pickle_path): + raise AssertionError(f"'db.pickle is missing in '{path}'") with open(db_pickle_path, "rb") as IH: details = pickle.load(IH) @@ -150,15 +153,18 @@ def __init__(self, path: str): else: self._args = dict(details["args"]) - assert isinstance(self._chromosomes, ChromosomeDict) + if not isinstance(self._chromosomes, ChromosomeDict): + raise AssertionError for chromosome in self.chromosome_list: chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") - assert os.path.isfile( + if not os.path.isfile( chromosome_path - ), f"missing expected chromosome file: '{chromosome_path}'" + ): + raise AssertionError(f"missing expected chromosome file: '{chromosome_path}'") self._record_byte_size = get_dtype_length(self._dtype) - assert self._record_byte_size > 0 + if self._record_byte_size <= 0: + raise AssertionError self._root = path diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py index 58a43c1d..83cf7e55 100644 --- a/ifpd2/dataclasses.py +++ b/ifpd2/dataclasses.py @@ -19,9 +19,11 @@ class Folder: def __post_init__(self): if self.exists: - assert isdir(self.path) + if not isdir(self.path): + raise AssertionError else: - assert not path_exists(self.path) + if path_exists(self.path): + raise AssertionError @dataclass(frozen=True) @@ -31,9 +33,11 @@ class File: def __post_init__(self): if self.exists: - assert isfile(self.path) + if not isfile(self.path): + raise AssertionError else: - assert not path_exists(self.path) + if path_exists(self.path): + raise AssertionError @dataclass(frozen=True) @@ -41,7 +45,8 @@ class PositiveInteger: n: int def __post_init__(self): - assert self.n >= 1 + if self.n < 1: + raise AssertionError @dataclass(frozen=True) @@ -49,7 +54,8 @@ class NonNegativeFloat: n: float def __post_init__(self): - assert self.n >= 0 + if self.n < 0: + raise AssertionError @dataclass(frozen=True) @@ -57,7 +63,8 @@ class NonNegativeInteger: n: int def __post_init__(self): - assert self.n > 0 + if self.n <= 0: + raise AssertionError @dataclass(frozen=True) @@ -68,12 +75,15 @@ class PositiveFloat: def __post_init__(self): if self.limit is None: - assert 0 < self.n + if 0 >= self.n: + raise AssertionError elif self.limit_included: - assert 0 < self.n <= self.limit + if not 0 < self.n <= self.limit: + raise AssertionError else: - assert 0 < self.n < self.limit + if not 0 < self.n < self.limit: + raise AssertionError @dataclass(frozen=True) @@ -82,8 +92,10 @@ class GenomicRegion: end: int def __post_init__(self): - assert self.start >= 0 - assert self.end >= self.start or self.end == -1 + if self.start < 0: + raise AssertionError + if not (self.end >= self.start or self.end == -1): + raise AssertionError def astuple(self) -> Tuple[int, int]: return (self.start, self.end) @@ -95,8 +107,10 @@ class NonNegativeIntInterval: end: int def __post_init__(self): - assert self._from >= 0 - assert self.end >= self.first + if self._from < 0: + raise AssertionError + if self.end < self.first: + raise AssertionError def astuple(self) -> Tuple[int, int]: return (self.start, self.end) @@ -109,8 +123,10 @@ class QueryWindow: def __post_init__(self): if self.size is not None: - assert self.size >= 1 - assert 0 < self.shift <= 1 + if self.size < 1: + raise AssertionError + if not 0 < self.shift <= 1: + raise AssertionError def astuple(self) -> Tuple[Optional[int], Optional[float]]: return (self.size, self.shift) @@ -122,8 +138,10 @@ class QueryFocus: step: float def __post_init__(self): - assert self.size > 0 - assert self.step > 0 + if self.size <= 0: + raise AssertionError + if self.step <= 0: + raise AssertionError @dataclass(frozen=True) @@ -141,6 +159,9 @@ class GCRange: high: float def __post_init__(self): - assert 0 <= self.low <= 1 - assert 0 <= self.high <= 1 - assert self.low <= self.high + if not 0 <= self.low <= 1: + raise AssertionError + if not 0 <= self.high <= 1: + raise AssertionError + if self.low > self.high: + raise AssertionError diff --git a/ifpd2/fasta.py b/ifpd2/fasta.py index 45edb7bd..2334cc02 100644 --- a/ifpd2/fasta.py +++ b/ifpd2/fasta.py @@ -10,7 +10,8 @@ def extract_kmers(input_path: str, kmer_size: int) -> List[Tuple[str, str]]: - assert isfile(input_path) + if not isfile(input_path): + raise AssertionError with open(input_path) as FH: oligos_list: List[Tuple[str, str]] = [] for record_header, record_sequence in tqdm( diff --git a/ifpd2/io.py b/ifpd2/io.py index 96c17a19..b61e85fe 100644 --- a/ifpd2/io.py +++ b/ifpd2/io.py @@ -45,7 +45,8 @@ def parse_hush(path: str) -> pd.DataFrame: Returns: pd.DataFrame -- parsed HUSH data """ - assert os.path.isfile(path), f"cannot find file '{path}'" + if not os.path.isfile(path): + raise AssertionError(f"cannot find file '{path}'") logging.info(f"parsing: '{path}'") sequence_lengths: Set[int] = set() parsed_lines: List[Tuple[str, str, int]] = [] @@ -81,11 +82,13 @@ def parse_melting(path: str, sep: str = "\t", header: bool = True) -> pd.DataFra Returns: pd.DataFrame -- parsed oligo-melting data """ - assert os.path.isfile(path), f"cannot find file '{path}'" + if not os.path.isfile(path): + raise AssertionError(f"cannot find file '{path}'") logging.info(f"parsing: '{path}'") expected_columns = copy.copy(const.dtype_melting) melting_df = pd.read_csv(path, sep=sep, header=None, skiprows=1 if header else 0) - assert melting_df.shape[1] == len(expected_columns) + if melting_df.shape[1] != len(expected_columns): + raise AssertionError melting_df.columns = list(expected_columns.keys()) melting_df.set_index("name", inplace=True) expected_columns.pop("name", None) @@ -104,7 +107,8 @@ def parse_secondary(path: str) -> pd.DataFrame: Returns: pd.DataFrame -- parsed OligoArrayAux .ct data """ - assert os.path.isfile(path), f"cannot find file '{path}'" + if not os.path.isfile(path): + raise AssertionError(f"cannot find file '{path}'") logging.info(f"parsing: '{path}'") parsed_lines: List[Tuple[str, float]] = [] with open(path, "r") as IH: diff --git a/ifpd2/logging.py b/ifpd2/logging.py index 1995f193..92047969 100644 --- a/ifpd2/logging.py +++ b/ifpd2/logging.py @@ -11,9 +11,11 @@ def add_log_file_handler(path: str, logger_name: Optional[str] = None) -> None: - assert not os.path.isdir(path) + if os.path.isdir(path): + raise AssertionError log_dir = os.path.dirname(path) - assert os.path.isdir(log_dir) or log_dir == "" + if not (os.path.isdir(log_dir) or log_dir == ""): + raise AssertionError fh = RichHandler(console=Console(file=open(path, mode="w+")), markup=True) fh.setLevel(logging.INFO) logging.getLogger(logger_name).addHandler(fh) diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 13bb2e3b..6d388689 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -37,7 +37,8 @@ class Oligo(object): def __init__(self, oligo, i): super(Oligo, self).__init__() ass.ert_type(i, int, "oligo id") - assert i >= 0 + if i < 0: + raise AssertionError self._raw_data = oligo.strip().split("\t") for i in [2, 3, 9, 10]: self._raw_data[i] = int(self._raw_data[i]) @@ -155,8 +156,10 @@ def focus_window(self): @focus_window.setter def focus_window(self, focus_window): ass.ert_type(focus_window, tuple, "focus window") - assert len(focus_window) == 2 - assert focus_window[1] > focus_window[0] + if len(focus_window) != 2: + raise AssertionError + if focus_window[1] <= focus_window[0]: + raise AssertionError self._focus_window = focus_window @property @@ -222,7 +225,8 @@ def set_focus_window(self, start, end, verbose=True): def expand_focus_to_n_oligos(self, n, verbose=True): # Expand the sub-window of interest to retrieve at least n oligos - assert not isinstance(self.focus_window, type(None)) + if isinstance(self.focus_window, type(None)): + raise AssertionError if n <= self.get_n_focused_oligos(): return @@ -245,7 +249,8 @@ def expand_focus_to_n_oligos(self, n, verbose=True): def expand_focus_by_step(self, step, verbose=True): # Expand the current focus window of a given step (in nt) - assert step < 0 + if step >= 0: + raise AssertionError if ( self.focus_window[0] <= self._data["start"].min() @@ -318,7 +323,8 @@ def expand_focus_to_closest(self): def apply_threshold(self, threshold): # Unfocuses oligos with score higher than the threshold - assert threshold <= 1 and threshold >= 0 + if not (threshold <= 1 and threshold >= 0): + raise AssertionError self._oligos_passing_score_filter = self._data["score"] <= threshold def reset_threshold(self): diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 3e34587b..071e4019 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -25,9 +25,11 @@ def data(self): @data.setter def data(self, oligo_data): - assert isinstance(oligo_data, pd.DataFrame) + if not isinstance(oligo_data, pd.DataFrame): + raise AssertionError required_columns = ["start", "end", "Tm"] - assert all(col in oligo_data.columns for col in required_columns) + if not all(col in oligo_data.columns for col in required_columns): + raise AssertionError self._data = oligo_data self._range = (self._data["start"].min(), self._data["end"].max()) self._size = self._range[1] - self._range[0] @@ -108,7 +110,8 @@ def count_shared_oligos(self, probe): return np.intersect1d(self.path, probe.path).shape[0] def export(self, path): - assert not os.path.isfile(path) + if os.path.isfile(path): + raise AssertionError if os.path.isdir(path): shutil.rmtree(path) os.mkdir(path) @@ -155,7 +158,8 @@ def _assert(self): ass.ert_nonNeg(self.Tr, "Tr") ass.ert_type(self.Ps, int, "Ps") - assert self.Ps > 1 + if self.Ps <= 1: + raise AssertionError ass.ert_type(self.Ph, float, "Ph") ass.ert_inInterv(self.Ph, 0, 1, "Ph") @@ -318,28 +322,38 @@ def _assert(self): if not isinstance(self.k, type(None)): ass.ert_type(self.k, int, "k") ass.ert_nonNeg(self.k, "k") - assert (self.k + self.D) * self.N <= self.Ps + if (self.k + self.D) * self.N > self.Ps: + raise AssertionError ass.ert_type(self.F, list, "F") - assert len(self.F) == 2 + if len(self.F) != 2: + raise AssertionError for i in range(2): ass.ert_type(self.F[i], int, f"F[{i}]") - assert self.F[i] >= 0 - assert self.F[1] >= self.F[0] + if self.F[i] < 0: + raise AssertionError + if self.F[1] < self.F[0]: + raise AssertionError ass.ert_type(self.Gs, list, "Gs") - assert len(self.Gs) == 2 + if len(self.Gs) != 2: + raise AssertionError for i in range(2): ass.ert_type(self.Gs[i], float, f"Gs[{i}]") - assert self.Gs[i] <= 1 - assert all(np.array(self.Gs) < 0) or all(np.array(self.Gs) >= 0) + if self.Gs[i] > 1: + raise AssertionError + if not (all(np.array(self.Gs) < 0) or all(np.array(self.Gs) >= 0)): + raise AssertionError if self.Gs[0] >= 0: - assert self.Gs[1] >= self.Gs[0] + if self.Gs[1] < self.Gs[0]: + raise AssertionError else: - assert self.Gs[1] <= self.Gs[0] + if self.Gs[1] > self.Gs[0]: + raise AssertionError ass.ert_type(self.Ot, float, "Ot") - assert self.Ot > 0 and self.Ot <= 1 + if not (self.Ot > 0 and self.Ot <= 1): + raise AssertionError def get_prologue(self): s = "* OligoProbeBuilder *\n\n" diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index 8c51e250..539da7a9 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -28,7 +28,8 @@ def probe_list(self): @probe_list.setter def probe_list(self, probe_list): - assert all(isinstance(p, OligoProbe) for p in probe_list) + if not all(isinstance(p, OligoProbe) for p in probe_list): + raise AssertionError self._probe_list = sorted(probe_list, key=lambda p: p.range[0]) self._probe_tm_ranges = [p.tm_range for p in self.probe_list] self._tm_range = ( @@ -141,7 +142,8 @@ def featDF(self): return df def export(self, path): - assert not os.path.isfile(path) + if os.path.isfile(path): + raise AssertionError if os.path.isdir(path): shutil.rmtree(path) os.mkdir(path) @@ -177,7 +179,8 @@ class OligoProbeSetBuilder(object): def __init__(self, out_path): super(OligoProbeSetBuilder, self).__init__() - assert not os.path.isfile(out_path) + if os.path.isfile(out_path): + raise AssertionError self.out_path = out_path if os.path.isdir(out_path): shutil.rmtree(out_path) diff --git a/ifpd2/region.py b/ifpd2/region.py index 72fe772a..00b83a2a 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -36,13 +36,16 @@ def __init_region(self, chrom: bytes, chromStart: int, chromEnd: int) -> None: chromStart {int} -- chromosome start position (usually 0) chromEnd {int} -- chromosome end position """ - assert len(chrom) != 0, "chromosome cannot be empty" - assert ( - chromStart >= 0 - ), f"start should be greater than or equal to 0: {chromStart}" - assert ( - chromEnd > chromStart - ), f"end should be greater than start: {chromStart}-{chromEnd}" + if len(chrom) == 0: + raise AssertionError("chromosome cannot be empty") + if ( + chromStart < 0 + ): + raise AssertionError(f"start should be greater than or equal to 0: {chromStart}") + if ( + chromEnd <= chromStart + ): + raise AssertionError(f"end should be greater than start: {chromStart}-{chromEnd}") self.__chrom = chrom self.__chromStart = chromStart self.__chromEnd = chromEnd @@ -58,9 +61,11 @@ def __init_focus_size(self, focus_style: float) -> None: focus_style {float} -- focus region size in nt or as a fraction of the genomic region """ - assert focus_style > 0 + if focus_style <= 0: + raise AssertionError if focus_style > 1: - assert focus_style <= self.__chromEnd - self.__chromStart + if focus_style > self.__chromEnd - self.__chromStart: + raise AssertionError self.__focusSize = int(focus_style) else: self.__focusSize = int((self.__chromEnd - self.__chromStart) * focus_style) @@ -76,7 +81,8 @@ def __init_focus_step(self, step_style: float) -> None: step_style {float} -- focus region growth step in nt or as a fraction of the focus region """ - assert step_style > 0 + if step_style <= 0: + raise AssertionError if step_style > 1: self.__focusStep = int(step_style) else: @@ -161,8 +167,10 @@ def __init__( super(GenomicRegionBuilder, self).__init__() self.__chromosome = chromosome_data.name self.__chromosome_size_nt = chromosome_data.size_nt - assert focus_style > 0 - assert focus_step_style > 0 + if focus_style <= 0: + raise AssertionError + if focus_step_style <= 0: + raise AssertionError self.__focus_style = (focus_style, focus_step_style) def __build_overlapping(self, size: int, step: int) -> List[List[GenomicRegion]]: @@ -178,7 +186,8 @@ def __build_overlapping(self, size: int, step: int) -> List[List[GenomicRegion]] Returns: List[List[GenomicRegion]] -- generated region lists """ - assert step < size + if step >= size: + raise AssertionError region_set_list: List[List[GenomicRegion]] = [] for range_start in range(0, size, step): genomic_region_set: List[GenomicRegion] = [] @@ -205,7 +214,8 @@ def __build_non_overlapping( Returns: List[List[GenomicRegion]] -- generated region lists """ - assert step == size + if step != size: + raise AssertionError genomic_region_set: List[GenomicRegion] = [] for start in range(0, self.__chromosome_size_nt, step): end = start + size diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py index 1fc5bdc1..adc4cd77 100644 --- a/ifpd2/scripts/autocomplete.py +++ b/ifpd2/scripts/autocomplete.py @@ -70,7 +70,8 @@ def autocomplete_fish(user_home_path: str, autocomplete_path: str) -> None: def autocomplete_bash_or_zsh( user_home_path: str, autocomplete_path: str, shell_type: str = "bash" ) -> None: - assert shell_type in {"bash", "zsh"} + if shell_type not in {"bash", "zsh"}: + raise AssertionError autocompletion_string = f". {autocomplete_path} # IFPD2-AUTOCOMPLETE\n" run_command_path = os.path.join(user_home_path, f".{shell_type}rc") diff --git a/ifpd2/scripts/db/check.py b/ifpd2/scripts/db/check.py index 00902802..eb6c99b7 100644 --- a/ifpd2/scripts/db/check.py +++ b/ifpd2/scripts/db/check.py @@ -27,6 +27,7 @@ def main(input_paths: str) -> None: desc=f"Checking sorting '{chromosome.decode()}'", total=DB.chromosome_recordnos[chromosome], ): - assert record["start"] > previous_position + if record["start"] <= previous_position: + raise AssertionError previous_position = record["start"] logging.info("That's all! :smiley:") diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py index 827c56e8..3e904dec 100644 --- a/ifpd2/scripts/db/dump.py +++ b/ifpd2/scripts/db/dump.py @@ -51,14 +51,17 @@ def check_region( end: Optional[int] = None, ) -> Tuple[Optional[str], int, int]: if chrom is None: - assert ( + if not ( start is None and end is None - ), "cannot use --region-start or --region-end without --chrom" + ): + raise AssertionError("cannot use --region-start or --region-end without --chrom") elif start is not None: chrom_size = DB.chromosome_sizes_nt[chrom.encode()] - assert start < chrom_size, f"{start} larger than chromosome size: {chrom_size}" + if start >= chrom_size: + raise AssertionError(f"{start} larger than chromosome size: {chrom_size}") if end is not None: - assert start < end, "end location smaller than start" + if start >= end: + raise AssertionError("end location smaller than start") return ( chrom, @@ -70,6 +73,7 @@ def check_region( def get_chromosome_list(DB: DataBase, chrom: Optional[str]) -> List[bytes]: chromosome_list = DB.chromosome_list if chrom is not None: - assert chrom.encode() in chromosome_list, f"'{chrom}' not found" + if chrom.encode() not in chromosome_list: + raise AssertionError(f"'{chrom}' not found") chromosome_list = [chrom.encode()] return chromosome_list diff --git a/ifpd2/scripts/db/make.py b/ifpd2/scripts/db/make.py index 88de9341..fceafc21 100644 --- a/ifpd2/scripts/db/make.py +++ b/ifpd2/scripts/db/make.py @@ -100,10 +100,11 @@ def main( settings.bin_size = binsize settings.prefix = prefix - assert not ( + if ( len(settings.off_target_paths) == 0 and len(settings.melting_temperature_paths) != 0 - ), "please provide either --hush or --melting" + ): + raise AssertionError("please provide either --hush or --melting") os.mkdir(settings.output_path) dbdf = pd.DataFrame(columns=["name"]) @@ -219,9 +220,10 @@ def parse_record_headers( chromosome_list.append(f"{chromosome_prefix}{chromosome}") chromosome_length_set.add(len(f"{chromosome_prefix}{chromosome}")) start, end = [int(x) for x in extremes.split("-")] - assert (end - start) == len( + if (end - start) != len( record.sequence - ), f"{end - start} != {len(record.sequence)}" + ): + raise AssertionError(f"{end - start} != {len(record.sequence)}") start_list.append(start) end_list.append(end) diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py index 310cdc61..6ea5521f 100644 --- a/ifpd2/scripts/db/settings.py +++ b/ifpd2/scripts/db/settings.py @@ -31,9 +31,10 @@ def output_path(self) -> str: @output_path.setter def output_path(self, output_path: str) -> None: - assert not isdir(output_path) and not isfile( + if not (not isdir(output_path) and not isfile( output_path - ), f"'{output_path}' already exists" + )): + raise AssertionError(f"'{output_path}' already exists") self._output_path = output_path @property @@ -42,7 +43,8 @@ def bin_size(self) -> int: @bin_size.setter def bin_size(self, bin_size: int) -> None: - assert bin_size >= 1 + if bin_size < 1: + raise AssertionError self._bin_size = bin_size @property @@ -58,7 +60,8 @@ def secondary_structure_paths(self) -> Set[str]: return copy(self._secondary_structure_paths) def add_off_target_path(self, path: str) -> None: - assert isfile(path), f"'{path}' not found." + if not isfile(path): + raise AssertionError(f"'{path}' not found.") self._off_target_paths.add(path) def add_off_target_path_list(self, path_list: List[str]) -> None: @@ -66,7 +69,8 @@ def add_off_target_path_list(self, path_list: List[str]) -> None: self.add_off_target_path(path) def add_melting_temperature_path(self, path: str) -> None: - assert isfile(path), f"'{path}' not found." + if not isfile(path): + raise AssertionError(f"'{path}' not found.") self._melting_temperature_paths.add(path) def add_melting_temperature_path_list(self, path_list: List[str]) -> None: @@ -74,7 +78,8 @@ def add_melting_temperature_path_list(self, path_list: List[str]) -> None: self.add_melting_temperature_path(path) def add_secondary_structure_path(self, path: str) -> None: - assert isfile(path), f"'{path}' not found." + if not isfile(path): + raise AssertionError(f"'{path}' not found.") self._secondary_structure_paths.add(path) def add_secondary_structure_path_list(self, path_list: List[str]) -> None: diff --git a/ifpd2/scripts/extract_kmers.py b/ifpd2/scripts/extract_kmers.py index 1edf5e38..492731c1 100644 --- a/ifpd2/scripts/extract_kmers.py +++ b/ifpd2/scripts/extract_kmers.py @@ -23,8 +23,10 @@ @click.argument("output_path", metavar="OUTPUT_DIRECTORY", type=click.Path(exists=True)) @click.argument("kmer_size", metavar="KMER_LENGTH", type=click.INT) def main(input_path: str, output_path: str, kmer_size: int) -> None: - assert isfile(input_path) - assert isdir(output_path) + if not isfile(input_path): + raise AssertionError + if not isdir(output_path): + raise AssertionError logging.info(f"Input : {input_path}") logging.info(f"Output : {output_path}") diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 2dac009c..1481e635 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -181,7 +181,8 @@ def main( window_shift = 1.0 window_size = None - assert probes is not None or window_size is not None + if not (probes is not None or window_size is not None): + raise AssertionError if region[1] <= 0: probes = None logging.info( @@ -275,5 +276,7 @@ def assert_reusable(output_path: str): f"Provided path '{output_path}'", ] ) - assert not isfile(output_path), assert_msg + " leads to a file" - assert not isdir(output_path), assert_msg + " leads to a directory." + if isfile(output_path): + raise AssertionError(assert_msg + " leads to a file") + if isdir(output_path): + raise AssertionError(assert_msg + " leads to a directory.") diff --git a/ifpd2/scripts/query2.py b/ifpd2/scripts/query2.py index 2711821c..f3264591 100644 --- a/ifpd2/scripts/query2.py +++ b/ifpd2/scripts/query2.py @@ -189,7 +189,8 @@ def main( region_set_list = RB.build_by_number(PositiveInteger(probes).n) else: window_size, window_shift = QueryWindow(window_size, window_shift).astuple() - assert window_size is not None and window_shift is not None + if not (window_size is not None and window_shift is not None): + raise AssertionError region_set_list = RB.build_by_size(window_size, window_shift) walker = ChromosomeWalker(DB, chromosome.encode()) @@ -212,7 +213,8 @@ def check_input( window_shift = None window_size = None - assert probes is not None or window_size is not None + if not (probes is not None or window_size is not None): + raise AssertionError if probes is not None and window_size is not None: logging.warning("cannot combine -X and -W. Using -X.") window_size = None @@ -253,5 +255,7 @@ def assert_reusable(output_path: str): f"Provided path '{output_path}'", ] ) - assert not isfile(output_path), assert_msg + " leads to a file" - assert not isdir(output_path), assert_msg + " leads to a directory." + if isfile(output_path): + raise AssertionError(assert_msg + " leads to a file") + if isdir(output_path): + raise AssertionError(assert_msg + " leads to a directory.") diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index 9f4bdc6b..d6844f74 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -29,13 +29,16 @@ def test_db_make(): "chr", ] ) - assert b"Error" not in script_output + if b"Error" in script_output: + raise AssertionError test_db = open("test_data/test_db/chr16.bin", "rb").read() new_db = open("test_db/chr16.bin", "rb").read() - assert test_db == new_db + if test_db != new_db: + raise AssertionError test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) new_pickle = pickle.load(open("test_db/db.pickle", "rb")) - assert test_pickle == new_pickle + if test_pickle != new_pickle: + raise AssertionError def test_db_check(): @@ -47,7 +50,8 @@ def test_db_check(): "test_db", ] ) - assert b"Error" not in script_output, script_output + if b"Error" in script_output: + raise AssertionError(script_output) def test_db_dump(): @@ -60,7 +64,8 @@ def test_db_dump(): ] ) test_dump = open("test_data/test.dump.txt", "rb").read() - assert script_output == test_dump + if script_output != test_dump: + raise AssertionError def test_db_info(): @@ -72,7 +77,8 @@ def test_db_info(): "test_db", ] ) - assert b"Error" not in script_output + if b"Error" in script_output: + raise AssertionError def test_cleanup(): diff --git a/ifpd2/walker.py b/ifpd2/walker.py index cc1dc8d3..c68515c5 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -88,7 +88,8 @@ def _assert(self): ass.ert_nonNeg(self.S, "S", True) ass.ert_type(self.E, int, "E") ass.ert_nonNeg(self.E, "E", True) - assert self.S <= self.E + if self.S > self.E: + raise AssertionError ass.ert_multiTypes(self.X, [int, type(None)], "X") ass.ert_multiTypes(self.Ws, [int, type(None)], "Ws") @@ -110,13 +111,15 @@ def _assert(self): ass.ert_multiTypes(self.Rs, [int, float], "Rs") if isinstance(self.Rs, int): - assert self.Rs > 1 + if self.Rs <= 1: + raise AssertionError else: ass.ert_inInterv(self.Rs, 0, 1, "Rs") ass.ert_multiTypes(self.Rt, [int, float], "Rt") if isinstance(self.Rt, int): - assert self.Rt > 1 + if self.Rt <= 1: + raise AssertionError else: ass.ert_inInterv(self.Rt, 0, 1, "Rt") @@ -126,12 +129,13 @@ def _init_windows(self): os.mkdir(os.path.join(self.out_path, "window_sets")) if self.S == self.E: - assert not isinstance(self.Ws, type(None)), " ".join( - [ - "During full-chromosome search, provide a window size.", - "I.e., it is not possible to design X probes.", - ] - ) + if isinstance(self.Ws, type(None)): + raise AssertionError(" ".join( + [ + "During full-chromosome search, provide a window size.", + "I.e., it is not possible to design X probes.", + ] + )) if isinstance(self.X, int): self.Ws = ( @@ -332,7 +336,8 @@ def config(self): def _assert(self): GenomicWindowSet._assert(self) - assert os.path.isdir(self.out_path) + if not os.path.isdir(self.out_path): + raise AssertionError def start(self, *args, start_from_nt: int = 0, end_at_nt: int = -1, **kwargs): self._assert() @@ -656,7 +661,8 @@ def fparse(record, opb=None, *args, **kwargs): @staticmethod def fprocess(oGroup, window, *args, **kwargs): opb = copy.copy(kwargs["opb"]) - assert isinstance(opb, OligoProbeBuilder) + if not isinstance(opb, OligoProbeBuilder): + raise AssertionError logger = logging.getLogger(kwargs["loggerName"]) probe_list = opb.start(oGroup, window, kwargs["cfr_step"], logger) reduced_probe_list = opb.reduce_probe_list(probe_list) @@ -671,7 +677,8 @@ def fimport(path, *args, **kwargs): @staticmethod def fpost(results, opath, *args, **kwargs): - assert isinstance(kwargs["opb"], OligoProbeBuilder) + if not isinstance(kwargs["opb"], OligoProbeBuilder): + raise AssertionError logger = logging.getLogger(kwargs["loggerName"]) if len(results) == 0: logger.critical(f"Built {len(results)} oligo probe candidates") diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index c61c011c..4bb511e7 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -21,7 +21,8 @@ class ChromosomeWalker(object): def __init__(self, db: Union[DataBase, str], chromosome: bytes): super(ChromosomeWalker, self).__init__() self.__db = DataBase(db) if isinstance(db, str) else db - assert chromosome in self.__db._chromosomes.keys() + if chromosome not in self.__db._chromosomes.keys(): + raise AssertionError self.__IH = open( os.path.join(self.__db._root, f"{chromosome.decode()}.bin"), "rb" ) @@ -154,7 +155,8 @@ def buffer(self, start_from_nt: int = 0, end_at_nt: int = -1) -> Iterator[Record record = self.read_next_record() def walk_single_region(self, region: GenomicRegion) -> Iterator[List[Record]]: - assert region.chromosome == self.__chromosome + if region.chromosome != self.__chromosome: + raise AssertionError focus_start, focus_end = region.focus record_list = list(self.buffer(focus_start, focus_end)) yield record_list From 92b0db83444b88e033de45060b275ab54cb190a2 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:13:57 +0200 Subject: [PATCH 139/185] Set `check` flag to `True` (#82) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/tests/test_scripts_db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index d6844f74..77d0ab18 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -8,7 +8,7 @@ def remove_test_db(): - subprocess.run(["rm", "-r", "test_db"]) + subprocess.run(["rm", "-r", "test_db"], check=True) def test_db_make(): From 9e02ab323daf4913d0f6c3ddcfbffe3da1460ef6 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:36:27 +0200 Subject: [PATCH 140/185] Remove implicit `object` from the base class (#83) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/chromosome.py | 6 +++--- ifpd2/database.py | 4 ++-- ifpd2/oligo.py | 4 ++-- ifpd2/probe.py | 4 ++-- ifpd2/probe_set.py | 4 ++-- ifpd2/region.py | 4 ++-- ifpd2/scripts/db/settings.py | 2 +- ifpd2/scripts/query.py | 2 +- ifpd2/scripts/query2.py | 2 +- ifpd2/walker.py | 2 +- ifpd2/walker2.py | 2 +- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index 9623fac5..d57226c4 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -12,7 +12,7 @@ from typing import Dict, List, Set, Tuple -class ChromosomeIndex(object): +class ChromosomeIndex: """ChromosomeIndex""" _bin_size: int @@ -131,7 +131,7 @@ def __eq__(self, other) -> bool: return condition -class ChromosomeData(object): +class ChromosomeData: """Contains information on a chromosome""" _name: bytes @@ -225,7 +225,7 @@ def __eq__(self, other) -> bool: return condition -class ChromosomeDict(object): +class ChromosomeDict: """Wraps ChromosomeData instances into a dictionary and allow easier access to their attributes.""" diff --git a/ifpd2/database.py b/ifpd2/database.py index d2110c44..4f8a1a93 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -16,7 +16,7 @@ from typing import Any, Dict, List -class Record(object): +class Record: """DataBase Record""" _data: Dict[str, Any] @@ -123,7 +123,7 @@ def __repr__(self) -> str: return str(self._data) -class DataBase(object): +class DataBase: """Buffering and checking class for ifpd2 database.""" _root: str diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 6d388689..f564839b 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -12,7 +12,7 @@ from typing import List, Tuple -class Oligo(object): +class Oligo: """Oligo database line/record parser. Presents oligo values as properties.""" @@ -126,7 +126,7 @@ def add_score(self, F, Gs): self.data["score"] = np.mean([norm_nOT, norm_ss_dG]) -class OligoGroup(object): +class OligoGroup: """Allows to select oligos from a group based on a "focus" window of interest. The window can be expanded to the closest oligo or to retain at least a given number of oligos.""" diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 071e4019..a66853b7 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -12,7 +12,7 @@ from ifpd2 import asserts as ass -class OligoProbe(object): +class OligoProbe: """Converts a DataFrame of oligo data into an OligoProbe.""" def __init__(self, oligo_data): @@ -133,7 +133,7 @@ def export(self, path): BH.write(f"{oligo['sequence']}\n") -class OligoPathBuilder(object): +class OligoPathBuilder: """OligoPathBuilder contains methods to select non-overlapping sets of oligos (i.e., probes) from an oligo DataFrame in input.""" diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index 539da7a9..07648947 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -15,7 +15,7 @@ from ifpd2.probe import OligoProbe -class OligoProbeSet(object): +class OligoProbeSet: """Set of non-overlapping probes built from windows.""" def __init__(self, probe_list): @@ -172,7 +172,7 @@ def export(self, path): BH.write(f"{probe.data.iloc[i]['sequence']}\n") -class OligoProbeSetBuilder(object): +class OligoProbeSetBuilder: """Class to build OligoProbeSet objects.""" probe_set_list: List = [] diff --git a/ifpd2/region.py b/ifpd2/region.py index 00b83a2a..88b319b7 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -8,7 +8,7 @@ from typing import List, Tuple -class GenomicRegion(object): +class GenomicRegion: """Details on genomic region with a central focus region.""" __chrom: bytes @@ -151,7 +151,7 @@ def increase_focus(self) -> None: self.__focusEnd = min(self.__chromEnd, self.__focusEnd + self.__focusStep // 2) -class GenomicRegionBuilder(object): +class GenomicRegionBuilder: """docstring for GenomicRegionBuilder""" __chromosome: bytes diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py index 6ea5521f..32c7080b 100644 --- a/ifpd2/scripts/db/settings.py +++ b/ifpd2/scripts/db/settings.py @@ -10,7 +10,7 @@ from typing import Any, Dict, List, Set -class DBMakeSettings(object): +class DBMakeSettings: _output_path: str _off_target_paths: Set[str] _melting_temperature_paths: Set[str] diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 1481e635..14b03ad8 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -246,7 +246,7 @@ def main( logging.shutdown() -class QuerySettings(object): +class QuerySettings: _db_folder: Folder _output_path: Folder diff --git a/ifpd2/scripts/query2.py b/ifpd2/scripts/query2.py index f3264591..66cc8694 100644 --- a/ifpd2/scripts/query2.py +++ b/ifpd2/scripts/query2.py @@ -225,7 +225,7 @@ def check_input( return (probes, window_size, window_shift) -class QuerySettings(object): +class QuerySettings: _db_folder: Folder _output_path: Folder diff --git a/ifpd2/walker.py b/ifpd2/walker.py index c68515c5..2a8e331c 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -23,7 +23,7 @@ from ifpd2.walker2 import ChromosomeWalker -class GenomicWindowSet(object): +class GenomicWindowSet: """Genomic window manager.""" _window_sets = None diff --git a/ifpd2/walker2.py b/ifpd2/walker2.py index 4bb511e7..68531692 100644 --- a/ifpd2/walker2.py +++ b/ifpd2/walker2.py @@ -11,7 +11,7 @@ from typing import IO, Iterator, List, Union -class ChromosomeWalker(object): +class ChromosomeWalker: """docstring for Walker""" __chromosome: bytes From 2157cf9c32ff9a70e97203eb0338cd5af8811b5e Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:37:12 +0200 Subject: [PATCH 141/185] Remove assert statement from non-test files (#84) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/probe.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index a66853b7..eb231e9f 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -582,7 +582,8 @@ def select_probe_from_pair(probeA, probeB): @staticmethod def import_probes(ipath): # Imports output from given directory path - assert os.path.isdir(ipath) + if not os.path.isdir(ipath): + raise AssertionError pPath = os.path.join(ipath, "probe_paths.tsv") if not os.path.isfile(pPath): @@ -603,7 +604,8 @@ def import_probes(ipath): @staticmethod def export_probes(probe_list, opath): # Exports a list of probes to a directory - assert os.path.isdir(opath) + if not os.path.isdir(opath): + raise AssertionError probe_df = pd.concat([p.featDF for p in probe_list], ignore_index=True) probe_df.sort_values("start", inplace=True) From fdff793fc6697e9635bda2080951c6a5cb4d497e Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:38:28 +0200 Subject: [PATCH 142/185] Refactor unnecessary `else` / `elif` when `if` block has a `continue` statement (#85) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/probe_set.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ifpd2/probe_set.py b/ifpd2/probe_set.py index 07648947..a519b24c 100644 --- a/ifpd2/probe_set.py +++ b/ifpd2/probe_set.py @@ -216,8 +216,7 @@ def build(self, probe_candidates): if not non_empty_ids: logging.warning(f"No probe candidates found, dropped. [ws{wSet+1}]") continue - else: - i = non_empty_ids[0] + i = non_empty_ids[0] probe_set_list = self.__build_probe_set_list(window_list, i) From 993e51785a62721ae2fd90ae734f76528e8a98d1 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:39:26 +0200 Subject: [PATCH 143/185] Refactor unnecessary `else` / `elif` when `if` block has a `return` statement (#86) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/oligo.py | 3 +-- ifpd2/probe.py | 9 +++------ ifpd2/region.py | 3 +-- ifpd2/walker.py | 5 ++--- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index f564839b..1883f90e 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -189,8 +189,7 @@ def usable_oligos(self): def get_focused_oligos(self, onlyUsable=False): if onlyUsable: return self._data.loc[self.usable_oligos] - else: - return self._data.loc[self.oligos_in_focus_window, :] + return self._data.loc[self.oligos_in_focus_window, :] def get_n_focused_oligos(self, onlyUsable=False): if self.usable_oligos.sum() == 0: diff --git a/ifpd2/probe.py b/ifpd2/probe.py index eb231e9f..a0d46dad 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -567,16 +567,13 @@ def reduce_probe_list(self, probe_list): def select_probe_from_pair(probeA, probeB): if probeA.size < probeB.size: return probeA - else: - return probeB + return probeB if np.diff(probeA.tm_range)[0] < np.diff(probeB.tm_range)[0]: return probeA - else: - return probeB + return probeB if probeA.spread / probeA.d_mean < probeB.spread / probeB.d_mean: return probeA - else: - return probeB + return probeB return probeA @staticmethod diff --git a/ifpd2/region.py b/ifpd2/region.py index 88b319b7..83de71ad 100644 --- a/ifpd2/region.py +++ b/ifpd2/region.py @@ -256,5 +256,4 @@ def build_by_size(self, size: int, step_style: float) -> List[List[GenomicRegion step = int(step_style) if step_style > 1 else int(size * step_style) if step < size: return self.__build_overlapping(size, step) - else: - return self.__build_non_overlapping(size, step) + return self.__build_non_overlapping(size, step) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 2a8e331c..c11149c1 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -531,9 +531,8 @@ def _preprocess_window_do(self): wid = int(self.current_window["w"]) self.__walk_results[sid][wid] = self.fimport(self.window_path) return - else: - shutil.rmtree(self.window_path) - os.mkdir(self.window_path) + shutil.rmtree(self.window_path) + os.mkdir(self.window_path) else: shutil.rmtree(self.window_path) os.mkdir(self.window_path) From b1d8869e4b454bdbf358dae691ef29386297ccd4 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:41:25 +0200 Subject: [PATCH 144/185] Use literal syntax to create data structure (#87) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/const.py | 36 +++++------------------------------- ifpd2/scripts/db/make.py | 2 +- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/ifpd2/const.py b/ifpd2/const.py index ae5b6a38..b91527a3 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -5,37 +5,11 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) -dtype_melting = dict( - [ - ("name", "|S"), - ("Tm_dG", " pd.DataFrame: if len(seq_columns) == 1: return df df.drop(seq_columns[1:], axis=1, inplace=True) - df.rename(columns=dict([(seq_columns[0], "sequence")]), inplace=True) + df.rename(columns={seq_columns[0]: "sequence"}, inplace=True) return df From 5af06fd915a54c52ce32694cb6c46ebae1fa7246 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:43:18 +0200 Subject: [PATCH 145/185] Merge collapsible `if` statements (#88) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/scripts/db/dump.py | 5 ++--- ifpd2/walker.py | 15 +++++++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py index 3e904dec..3052ab11 100644 --- a/ifpd2/scripts/db/dump.py +++ b/ifpd2/scripts/db/dump.py @@ -59,9 +59,8 @@ def check_region( chrom_size = DB.chromosome_sizes_nt[chrom.encode()] if start >= chrom_size: raise AssertionError(f"{start} larger than chromosome size: {chrom_size}") - if end is not None: - if start >= end: - raise AssertionError("end location smaller than start") + if end is not None and start >= end: + raise AssertionError("end location smaller than start") return ( chrom, diff --git a/ifpd2/walker.py b/ifpd2/walker.py index c11149c1..d0cbbefc 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -128,14 +128,13 @@ def _init_windows(self): if not os.path.isdir(os.path.join(self.out_path, "window_sets")): os.mkdir(os.path.join(self.out_path, "window_sets")) - if self.S == self.E: - if isinstance(self.Ws, type(None)): - raise AssertionError(" ".join( - [ - "During full-chromosome search, provide a window size.", - "I.e., it is not possible to design X probes.", - ] - )) + if self.S == self.E and isinstance(self.Ws, type(None)): + raise AssertionError(" ".join( + [ + "During full-chromosome search, provide a window size.", + "I.e., it is not possible to design X probes.", + ] + )) if isinstance(self.X, int): self.Ws = ( From 45147b9e754a5d84cdb4d6b8588a2a0e88c1c4a7 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 12:49:15 +0200 Subject: [PATCH 146/185] fix: added docstring explaining emptiness. --- ifpd2/scripts/db/run.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ifpd2/scripts/db/run.py b/ifpd2/scripts/db/run.py index 40bda120..136c8199 100644 --- a/ifpd2/scripts/db/run.py +++ b/ifpd2/scripts/db/run.py @@ -14,6 +14,7 @@ help="Tools to manage ifpd2 databases.", ) def main() -> None: + '''Just a hook for the entry point. Silence is golden!''' pass From 7adec2ca0815418c540eeb5a0872c5e5a2cb3000 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 12:49:30 +0200 Subject: [PATCH 147/185] fix: added docstring explaining emptiness. --- ifpd2/scripts/ifpd2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 81b1795a..32a3819c 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -24,6 +24,7 @@ ) @click.version_option(__version__) def main(): + '''Just a hook for the entry point. Silence is golden!''' pass From 157592d5f2c57aa86923e66592e57a39cfb10ccd Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:50:26 +0200 Subject: [PATCH 148/185] Refactor unnecessary `else` / `elif` when `if` block has a `raise` statement (#89) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/database.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 4f8a1a93..a4fca122 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -116,8 +116,7 @@ def __getitem__(self, key: str) -> Any: allowed_columns = ["score", *const.database_columns] if key not in allowed_columns: raise KeyError(f"unrecognized key '{key}'") - else: - return self.data[key] + return self.data[key] def __repr__(self) -> str: return str(self._data) From 0adc0569f115942d5cf7b44c6eb137000a62c239 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:51:32 +0200 Subject: [PATCH 149/185] Remove unnecessary `pass` (#90) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/scripts/db/run.py | 1 - ifpd2/scripts/ifpd2.py | 1 - 2 files changed, 2 deletions(-) diff --git a/ifpd2/scripts/db/run.py b/ifpd2/scripts/db/run.py index 136c8199..2c664654 100644 --- a/ifpd2/scripts/db/run.py +++ b/ifpd2/scripts/db/run.py @@ -15,7 +15,6 @@ ) def main() -> None: '''Just a hook for the entry point. Silence is golden!''' - pass main.add_command(check.main) diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 32a3819c..4ab10284 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -25,7 +25,6 @@ @click.version_option(__version__) def main(): '''Just a hook for the entry point. Silence is golden!''' - pass @click.command( From 8155fda8abf4dfaf4b92df029ad9ab47b8fa9dec Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:53:10 +0200 Subject: [PATCH 150/185] Remove methods with unnecessary super delegation. (#91) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/probe.py | 3 --- ifpd2/walker.py | 3 --- 2 files changed, 6 deletions(-) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index a0d46dad..05e23825 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -144,9 +144,6 @@ class OligoPathBuilder: Ph = 0.1 # Maximum hole size in probe as fraction of probe size Po = 0.5 # Probe oligo intersection threshold for path reduction - def __init__(self): - super(OligoPathBuilder, self).__init__() - def _assert(self): ass.ert_type(self.N, int, "N") ass.ert_nonNeg(self.N, "N") diff --git a/ifpd2/walker.py b/ifpd2/walker.py index d0cbbefc..81a8986c 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -44,9 +44,6 @@ class GenomicWindowSet: # for focus region expansion _growing = False - def __init__(self): - super(GenomicWindowSet, self).__init__() - @property def window_sets(self): return self._window_sets From 06dfffc3b9d33193ab6e6b1ccf45b15607222d4d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 12:54:46 +0200 Subject: [PATCH 151/185] fix: probe selection & unreachable statements --- ifpd2/probe.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 05e23825..ba4e6c58 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -564,14 +564,11 @@ def reduce_probe_list(self, probe_list): def select_probe_from_pair(probeA, probeB): if probeA.size < probeB.size: return probeA - return probeB if np.diff(probeA.tm_range)[0] < np.diff(probeB.tm_range)[0]: return probeA - return probeB if probeA.spread / probeA.d_mean < probeB.spread / probeB.d_mean: return probeA return probeB - return probeA @staticmethod def import_probes(ipath): From 48bd5483d960c8144d779341deb66d24ebcc9c2c Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 12:58:21 +0200 Subject: [PATCH 152/185] Remove unused private attribute (#92) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/walker.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 81a8986c..5268457d 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -208,7 +208,6 @@ def __mk_first_window(self): self.__focus_on_center = True else: cstart, cend = (np.nan, np.nan) - self.__focus_on_center = False return [[self.S, mid, self.S + self.Ws, cstart, cend, 0, 0]] def _add_window(self): From 02a1db06ba6ae3c2edd12412bd0257e777e7a98d Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:00:17 +0200 Subject: [PATCH 153/185] fix: Multi-line docstring closing quotes should be on a separate line --- ifpd2/chromosome.py | 3 ++- ifpd2/oligo.py | 6 ++++-- ifpd2/probe.py | 3 ++- ifpd2/walker.py | 17 ++++++++++------- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ifpd2/chromosome.py b/ifpd2/chromosome.py index d57226c4..e176cf1d 100644 --- a/ifpd2/chromosome.py +++ b/ifpd2/chromosome.py @@ -227,7 +227,8 @@ def __eq__(self, other) -> bool: class ChromosomeDict: """Wraps ChromosomeData instances into a dictionary - and allow easier access to their attributes.""" + and allow easier access to their attributes. + """ _index_bin_size: int _data: Dict[bytes, ChromosomeData] diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 1883f90e..e6f5a5c5 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -14,7 +14,8 @@ class Oligo: """Oligo database line/record parser. - Presents oligo values as properties.""" + Presents oligo values as properties. + """ _data = None @@ -129,7 +130,8 @@ def add_score(self, F, Gs): class OligoGroup: """Allows to select oligos from a group based on a "focus" window of interest. The window can be expanded to the closest oligo or to retain at - least a given number of oligos.""" + least a given number of oligos. + """ _focus_window = None # Left-close, right-open _oligos_in_focus_window = None diff --git a/ifpd2/probe.py b/ifpd2/probe.py index ba4e6c58..daeef5cc 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -135,7 +135,8 @@ def export(self, path): class OligoPathBuilder: """OligoPathBuilder contains methods to select non-overlapping sets of - oligos (i.e., probes) from an oligo DataFrame in input.""" + oligos (i.e., probes) from an oligo DataFrame in input. + """ N = int(48) # Number of oligos per probe D: int = int(2) # Minimum distance between consecutive oligos diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 81a8986c..583f709e 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -126,12 +126,14 @@ def _init_windows(self): os.mkdir(os.path.join(self.out_path, "window_sets")) if self.S == self.E and isinstance(self.Ws, type(None)): - raise AssertionError(" ".join( - [ - "During full-chromosome search, provide a window size.", - "I.e., it is not possible to design X probes.", - ] - )) + raise AssertionError( + " ".join( + [ + "During full-chromosome search, provide a window size.", + "I.e., it is not possible to design X probes.", + ] + ) + ) if isinstance(self.X, int): self.Ws = ( @@ -252,7 +254,8 @@ def export_window_set(self): class Walker(GenomicWindowSet): """Walker walks through the oligos stored in an ifpd2 database, assigns them to windows based on user-defined parameters, and then builds - probe candidates.""" + probe candidates. + """ out_path = "." reuse = False From 9dd7dbc8c3ab149ae7bf954259d727760b2420cc Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:01:11 +0200 Subject: [PATCH 154/185] fix: swapped single for double quotes --- ifpd2/scripts/db/run.py | 2 +- ifpd2/scripts/ifpd2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ifpd2/scripts/db/run.py b/ifpd2/scripts/db/run.py index 2c664654..83fb68bd 100644 --- a/ifpd2/scripts/db/run.py +++ b/ifpd2/scripts/db/run.py @@ -14,7 +14,7 @@ help="Tools to manage ifpd2 databases.", ) def main() -> None: - '''Just a hook for the entry point. Silence is golden!''' + """Just a hook for the entry point. Silence is golden!""" main.add_command(check.main) diff --git a/ifpd2/scripts/ifpd2.py b/ifpd2/scripts/ifpd2.py index 4ab10284..0a6ec084 100644 --- a/ifpd2/scripts/ifpd2.py +++ b/ifpd2/scripts/ifpd2.py @@ -24,7 +24,7 @@ ) @click.version_option(__version__) def main(): - '''Just a hook for the entry point. Silence is golden!''' + """Just a hook for the entry point. Silence is golden!""" @click.command( From 8f6c3c73c5e6ad61763812b34ffa9eff56db8d94 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:03:55 +0200 Subject: [PATCH 155/185] fix: inconsistent return statements --- ifpd2/database.py | 20 ++++++++++---------- ifpd2/oligo.py | 12 ++++++------ ifpd2/walker.py | 1 + 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index a4fca122..12ab4fd8 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -84,32 +84,32 @@ def __update_score_by_dG_Tm(self, Gs): tm_dG = self._data["Tm_dG"] if ss_dG >= tm_dG * min(Gs): self._data["score"] = 0 - return + return None if ss_dG < tm_dG * max(Gs): self._data["score"] = np.inf - return + return None return self.__norm_value_in_range(ss_dG, [tm_dG * f for f in Gs]) def __update_score_by_dG_Gs(self, Gs): ss_dG = self._data["ss_dG"] if ss_dG >= Gs[0]: self._data["score"] = 0 - return + return None if ss_dG < Gs[1]: self._data["score"] = np.inf - return + return None return self.__norm_value_in_range(ss_dG, Gs) def add_score(self, F, Gs) -> None: norm_nOT = self.__update_score_by_nOT(F) if norm_nOT is None: - return + return None if all(x >= 0 for x in Gs): norm_ss_dG = self.__update_score_by_dG_Tm(Gs) else: norm_ss_dG = self.__update_score_by_dG_Gs(Gs) if norm_ss_dG is None: - return + return None self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) def __getitem__(self, key: str) -> Any: @@ -156,10 +156,10 @@ def __init__(self, path: str): raise AssertionError for chromosome in self.chromosome_list: chromosome_path = os.path.join(path, f"{chromosome.decode()}.bin") - if not os.path.isfile( - chromosome_path - ): - raise AssertionError(f"missing expected chromosome file: '{chromosome_path}'") + if not os.path.isfile(chromosome_path): + raise AssertionError( + f"missing expected chromosome file: '{chromosome_path}'" + ) self._record_byte_size = get_dtype_length(self._dtype) if self._record_byte_size <= 0: diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index e6f5a5c5..1e16aeeb 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -87,10 +87,10 @@ def __update_score_by_nOT(self, F): nOT = self.data["nOT"].values if nOT <= F[0]: self.data["score"] = 0 - return + return None if nOT > F[1]: self.data["score"] = np.inf - return + return None return self.__norm_value_in_range(nOT, F) def __update_score_by_dG_Tm(self, Gs): @@ -98,20 +98,20 @@ def __update_score_by_dG_Tm(self, Gs): tm_dG = self.data["tm_dG"].values if ss_dG >= tm_dG * min(Gs): self.data["score"] = 0 - return + return None if ss_dG < tm_dG * max(Gs): self.data["score"] = np.inf - return + return None return self.__norm_value_in_range(ss_dG, [tm_dG * f for f in Gs]) def __update_score_by_dG_Gs(self, Gs): ss_dG = self.data["ss_dG"].values if ss_dG >= Gs[0]: self.data["score"] = 0 - return + return None if ss_dG < Gs[1]: self.data["score"] = np.inf - return + return None return self.__norm_value_in_range(ss_dG, Gs) def add_score(self, F, Gs): diff --git a/ifpd2/walker.py b/ifpd2/walker.py index bab1328a..28830bf8 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -599,6 +599,7 @@ def process_window_async( def __process_window_async(self, *args, **kwargs): if self.pool is not None: return self.pool.apply_async(Walker.process_window_async, args, kwargs) + return None @staticmethod def process_window( From c483d81c282bd09ab41937647a42a164a488befe Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:07:12 +0200 Subject: [PATCH 156/185] fix: blacked. --- ifpd2/asserts.py | 28 ++++++++++++++++------------ ifpd2/const.py | 9 ++++++++- ifpd2/region.py | 16 ++++++++-------- ifpd2/scripts/db/dump.py | 8 ++++---- ifpd2/scripts/db/make.py | 4 +--- ifpd2/scripts/db/settings.py | 4 +--- 6 files changed, 38 insertions(+), 31 deletions(-) diff --git a/ifpd2/asserts.py b/ifpd2/asserts.py index 6aeea9a7..e93073c6 100644 --- a/ifpd2/asserts.py +++ b/ifpd2/asserts.py @@ -48,20 +48,24 @@ def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True): def ert_in_dtype(x, dtype): if dtype.startswith("f"): if x > np.finfo(dtype).max: - raise AssertionError(" ".join( - [ - "expected to be lower than {dtype} max:", - f"{x} < {np.finfo(dtype).max}", - ] - )) + raise AssertionError( + " ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.finfo(dtype).max}", + ] + ) + ) elif dtype.startswith("u") or dtype.startswith("i"): if x > np.iinfo(dtype).max: - raise AssertionError(" ".join( - [ - "expected to be lower than {dtype} max:", - f"{x} < {np.iinfo(dtype).max}", - ] - )) + raise AssertionError( + " ".join( + [ + "expected to be lower than {dtype} max:", + f"{x} < {np.iinfo(dtype).max}", + ] + ) + ) else: logging.warning(f"assert not implemented for dtype '{dtype}'") diff --git a/ifpd2/const.py b/ifpd2/const.py index b91527a3..7303f5d2 100644 --- a/ifpd2/const.py +++ b/ifpd2/const.py @@ -5,7 +5,14 @@ CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) -dtype_melting = {"name": "|S", "Tm_dG": " None: """ if len(chrom) == 0: raise AssertionError("chromosome cannot be empty") - if ( - chromStart < 0 - ): - raise AssertionError(f"start should be greater than or equal to 0: {chromStart}") - if ( - chromEnd <= chromStart - ): - raise AssertionError(f"end should be greater than start: {chromStart}-{chromEnd}") + if chromStart < 0: + raise AssertionError( + f"start should be greater than or equal to 0: {chromStart}" + ) + if chromEnd <= chromStart: + raise AssertionError( + f"end should be greater than start: {chromStart}-{chromEnd}" + ) self.__chrom = chrom self.__chromStart = chromStart self.__chromEnd = chromEnd diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py index 3052ab11..dba981d0 100644 --- a/ifpd2/scripts/db/dump.py +++ b/ifpd2/scripts/db/dump.py @@ -51,10 +51,10 @@ def check_region( end: Optional[int] = None, ) -> Tuple[Optional[str], int, int]: if chrom is None: - if not ( - start is None and end is None - ): - raise AssertionError("cannot use --region-start or --region-end without --chrom") + if not (start is None and end is None): + raise AssertionError( + "cannot use --region-start or --region-end without --chrom" + ) elif start is not None: chrom_size = DB.chromosome_sizes_nt[chrom.encode()] if start >= chrom_size: diff --git a/ifpd2/scripts/db/make.py b/ifpd2/scripts/db/make.py index 27f26524..db0fadd7 100644 --- a/ifpd2/scripts/db/make.py +++ b/ifpd2/scripts/db/make.py @@ -220,9 +220,7 @@ def parse_record_headers( chromosome_list.append(f"{chromosome_prefix}{chromosome}") chromosome_length_set.add(len(f"{chromosome_prefix}{chromosome}")) start, end = [int(x) for x in extremes.split("-")] - if (end - start) != len( - record.sequence - ): + if (end - start) != len(record.sequence): raise AssertionError(f"{end - start} != {len(record.sequence)}") start_list.append(start) end_list.append(end) diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py index 32c7080b..79e01c8b 100644 --- a/ifpd2/scripts/db/settings.py +++ b/ifpd2/scripts/db/settings.py @@ -31,9 +31,7 @@ def output_path(self) -> str: @output_path.setter def output_path(self, output_path: str) -> None: - if not (not isdir(output_path) and not isfile( - output_path - )): + if not (not isdir(output_path) and not isfile(output_path)): raise AssertionError(f"'{output_path}' already exists") self._output_path = output_path From 1b9062a3c0de272d1ae7a57fddda8d2689ae3ef8 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:09:50 +0200 Subject: [PATCH 157/185] fix: process from shell, escaping parameters --- ifpd2/scripts/autocomplete.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py index adc4cd77..a6df2ed3 100644 --- a/ifpd2/scripts/autocomplete.py +++ b/ifpd2/scripts/autocomplete.py @@ -6,6 +6,7 @@ import click # type: ignore import os from rich import print # type: ignore +import shlex from shutil import copyfile import sys @@ -13,12 +14,15 @@ from ifpd2.const import CONTEXT_SETTINGS +SHELL_TYPES = ("bash", "zsh", "fish") + + @click.command(context_settings=CONTEXT_SETTINGS) @click.option( "--shell-type", "-s", help="shell type for which to activate autocompletion", - type=click.Choice(["bash", "zsh", "fish"], case_sensitive=False), + type=click.Choice(SHELL_TYPES, case_sensitive=False), default="bash", show_default=True, ) @@ -48,6 +52,9 @@ def main(shell_type: str, regenerate: bool) -> None: def regenerate_autocompletion_files(shell_type: str, autocomplete_path: str) -> None: + if not shell_type in SHELL_TYPES: + raise AssertionError(f"unrecognized shell type '{shell_type}'.") + autocomplete_path = shlex.quote(autocomplete_path) os.system(f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}") print(f"Regenerated {shell_type} completion file: {autocomplete_path}") From f382ee70e32897dcd5c464778b4c1da2fe9df3fe Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:10:55 +0200 Subject: [PATCH 158/185] fix: inconsistent return statements --- ifpd2/database.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ifpd2/database.py b/ifpd2/database.py index 12ab4fd8..8fd0e623 100644 --- a/ifpd2/database.py +++ b/ifpd2/database.py @@ -73,10 +73,10 @@ def __update_score_by_nOT(self, F): off_target_no = self._data["off_target_no"] if off_target_no <= F[0]: self._data["score"] = 0 - return + return None if off_target_no > F[1]: self._data["score"] = np.inf - return + return None return self.__norm_value_in_range(off_target_no, F) def __update_score_by_dG_Tm(self, Gs): @@ -111,6 +111,7 @@ def add_score(self, F, Gs) -> None: if norm_ss_dG is None: return None self._data["score"] = np.mean([norm_nOT, norm_ss_dG]) + return None def __getitem__(self, key: str) -> Any: allowed_columns = ["score", *const.database_columns] From 398ae7965104115a779fcf7e6e689c483bf946bf Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:12:25 +0200 Subject: [PATCH 159/185] fix: removed unused private attribute --- ifpd2/walker.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 28830bf8..d2017e0b 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -178,11 +178,9 @@ def __mk_all_window_sets(self): np.floor(window_mids + self.Rs / 2), ] ) - self.__focus_on_center = True else: nans = np.array([np.nan for x in range(window_mids.shape[0])]) central_regions = np.vstack([nans, nans]).transpose() - self.__focus_on_center = False window_sets = [] for i in range(len(np.arange(0, 1, self.Wh))): @@ -207,7 +205,6 @@ def __mk_first_window(self): mid = self.S + self.Ws / 2 if self.Rs < self.Ws: cstart, cend = (np.floor(mid - self.Rs / 2), np.floor(mid + self.Rs / 2)) - self.__focus_on_center = True else: cstart, cend = (np.nan, np.nan) return [[self.S, mid, self.S + self.Ws, cstart, cend, 0, 0]] From 9c5ce0b1bd8b66cd3ad449ca8549a960ff5bb8d9 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:15:42 +0200 Subject: [PATCH 160/185] fix: escaping shell subprocess cmd --- ifpd2/scripts/autocomplete.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py index a6df2ed3..27090f7b 100644 --- a/ifpd2/scripts/autocomplete.py +++ b/ifpd2/scripts/autocomplete.py @@ -54,8 +54,10 @@ def main(shell_type: str, regenerate: bool) -> None: def regenerate_autocompletion_files(shell_type: str, autocomplete_path: str) -> None: if not shell_type in SHELL_TYPES: raise AssertionError(f"unrecognized shell type '{shell_type}'.") - autocomplete_path = shlex.quote(autocomplete_path) - os.system(f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}") + cmd = shlex.quote( + f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}" + ) + os.system(cmd) print(f"Regenerated {shell_type} completion file: {autocomplete_path}") From 1f3920c88f145160f3f01b74312b4e7a5e779af0 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:17:06 +0200 Subject: [PATCH 161/185] fix: open files with `with` statement --- ifpd2/tests/test_scripts_db.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index 77d0ab18..3ffcf0df 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -31,14 +31,14 @@ def test_db_make(): ) if b"Error" in script_output: raise AssertionError - test_db = open("test_data/test_db/chr16.bin", "rb").read() - new_db = open("test_db/chr16.bin", "rb").read() - if test_db != new_db: - raise AssertionError - test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) - new_pickle = pickle.load(open("test_db/db.pickle", "rb")) - if test_pickle != new_pickle: - raise AssertionError + with open("test_data/test_db/chr16.bin", "rb").read() as test_db: + with open("test_db/chr16.bin", "rb").read() as new_db: + if test_db != new_db: + raise AssertionError + test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) + new_pickle = pickle.load(open("test_db/db.pickle", "rb")) + if test_pickle != new_pickle: + raise AssertionError def test_db_check(): @@ -63,9 +63,9 @@ def test_db_dump(): "test_db", ] ) - test_dump = open("test_data/test.dump.txt", "rb").read() - if script_output != test_dump: - raise AssertionError + with open("test_data/test.dump.txt", "rb").read() as test_dump: + if script_output != test_dump: + raise AssertionError def test_db_info(): From 0b742ea5589837d06491a6b8d10c3e295637c1b1 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:18:12 +0200 Subject: [PATCH 162/185] fix: quoted upon subprocess spawning --- ifpd2/scripts/autocomplete.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py index 27090f7b..9df2deb1 100644 --- a/ifpd2/scripts/autocomplete.py +++ b/ifpd2/scripts/autocomplete.py @@ -54,10 +54,8 @@ def main(shell_type: str, regenerate: bool) -> None: def regenerate_autocompletion_files(shell_type: str, autocomplete_path: str) -> None: if not shell_type in SHELL_TYPES: raise AssertionError(f"unrecognized shell type '{shell_type}'.") - cmd = shlex.quote( - f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}" - ) - os.system(cmd) + cmd = f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}" + os.system(shlex.quote(cmd)) print(f"Regenerated {shell_type} completion file: {autocomplete_path}") From 33111c0b222b1fa4ae60461f1a33db1baf1a39bd Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 13:18:49 +0200 Subject: [PATCH 163/185] Merge collapsible `with` statements (#95) Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- ifpd2/tests/test_scripts_db.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index 3ffcf0df..743398c5 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -31,14 +31,13 @@ def test_db_make(): ) if b"Error" in script_output: raise AssertionError - with open("test_data/test_db/chr16.bin", "rb").read() as test_db: - with open("test_db/chr16.bin", "rb").read() as new_db: - if test_db != new_db: - raise AssertionError - test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) - new_pickle = pickle.load(open("test_db/db.pickle", "rb")) - if test_pickle != new_pickle: - raise AssertionError + with open("test_data/test_db/chr16.bin", "rb").read() as test_db, open("test_db/chr16.bin", "rb").read() as new_db: + if test_db != new_db: + raise AssertionError + test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) + new_pickle = pickle.load(open("test_db/db.pickle", "rb")) + if test_pickle != new_pickle: + raise AssertionError def test_db_check(): From 4a8491d9af55c2ab2a7e609491a9bf8a01e1a0d5 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:19:28 +0200 Subject: [PATCH 164/185] fix: blacked --- ifpd2/tests/test_scripts_db.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index 743398c5..cdae554c 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -31,7 +31,9 @@ def test_db_make(): ) if b"Error" in script_output: raise AssertionError - with open("test_data/test_db/chr16.bin", "rb").read() as test_db, open("test_db/chr16.bin", "rb").read() as new_db: + with open("test_data/test_db/chr16.bin", "rb").read() as test_db, open( + "test_db/chr16.bin", "rb" + ).read() as new_db: if test_db != new_db: raise AssertionError test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) From 200d602a1f08e50b675fbbf6a90185700c55bdda Mon Sep 17 00:00:00 2001 From: "sourcery-ai[bot]" <58596630+sourcery-ai[bot]@users.noreply.github.com> Date: Tue, 19 Oct 2021 13:28:14 +0200 Subject: [PATCH 165/185] 'Refactored by Sourcery' (#81) Co-authored-by: Sourcery AI <> --- ifpd2/asserts.py | 19 +++++++---------- ifpd2/dataclasses.py | 40 +++++++++++++++++------------------ ifpd2/oligo.py | 2 +- ifpd2/probe.py | 11 +++++----- ifpd2/scripts/autocomplete.py | 2 +- ifpd2/scripts/db/dump.py | 2 +- ifpd2/scripts/db/settings.py | 2 +- ifpd2/scripts/query.py | 2 +- ifpd2/scripts/query2.py | 4 ++-- ifpd2/walker.py | 7 ++---- 10 files changed, 42 insertions(+), 49 deletions(-) diff --git a/ifpd2/asserts.py b/ifpd2/asserts.py index e93073c6..93c67cc0 100644 --- a/ifpd2/asserts.py +++ b/ifpd2/asserts.py @@ -24,25 +24,22 @@ def ert_nonNeg(x, label, include_zero=False): if not include_zero: if x <= 0: raise AssertionError(f"{label} should be greater than 0") - else: - if x < 0: - raise AssertionError(f"{label} should be greater than or equal to 0") + elif x < 0: + raise AssertionError(f"{label} should be greater than or equal to 0") def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True): if leftClose: if rightClose: - if not (x >= vmin and x <= vmax): + if x < vmin or x > vmax: raise AssertionError(f"expected {vmin}<={label}<={vmax}") - else: - if not (x >= vmin and x < vmax): - raise AssertionError(f"expected {vmin}<={label}<{vmax}") + elif x < vmin or x >= vmax: + raise AssertionError(f"expected {vmin}<={label}<{vmax}") elif rightClose: - if not (x > vmin and x <= vmax): + if x <= vmin or x > vmax: raise AssertionError(f"expected {vmin}<{label}<={vmax}") - else: - if not (x > vmin and x < vmax): - raise AssertionError(f"expected {vmin}<{label}<{vmax}") + elif x <= vmin or x >= vmax: + raise AssertionError(f"expected {vmin}<{label}<{vmax}") def ert_in_dtype(x, dtype): diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py index 83cf7e55..fec70764 100644 --- a/ifpd2/dataclasses.py +++ b/ifpd2/dataclasses.py @@ -18,12 +18,13 @@ class Folder: exists: bool = False def __post_init__(self): - if self.exists: - if not isdir(self.path): - raise AssertionError - else: - if path_exists(self.path): - raise AssertionError + if ( + self.exists + and not isdir(self.path) + or not self.exists + and path_exists(self.path) + ): + raise AssertionError @dataclass(frozen=True) @@ -32,12 +33,13 @@ class File: exists: bool = False def __post_init__(self): - if self.exists: - if not isfile(self.path): - raise AssertionError - else: - if path_exists(self.path): - raise AssertionError + if ( + self.exists + and not isfile(self.path) + or not self.exists + and path_exists(self.path) + ): + raise AssertionError @dataclass(frozen=True) @@ -75,15 +77,14 @@ class PositiveFloat: def __post_init__(self): if self.limit is None: - if 0 >= self.n: + if self.n <= 0: raise AssertionError elif self.limit_included: if not 0 < self.n <= self.limit: raise AssertionError - else: - if not 0 < self.n < self.limit: - raise AssertionError + elif not 0 < self.n < self.limit: + raise AssertionError @dataclass(frozen=True) @@ -94,7 +95,7 @@ class GenomicRegion: def __post_init__(self): if self.start < 0: raise AssertionError - if not (self.end >= self.start or self.end == -1): + if self.end < self.start and self.end != -1: raise AssertionError def astuple(self) -> Tuple[int, int]: @@ -122,9 +123,8 @@ class QueryWindow: shift: Optional[float] def __post_init__(self): - if self.size is not None: - if self.size < 1: - raise AssertionError + if self.size is not None and self.size < 1: + raise AssertionError if not 0 < self.shift <= 1: raise AssertionError diff --git a/ifpd2/oligo.py b/ifpd2/oligo.py index 1e16aeeb..3f991c35 100644 --- a/ifpd2/oligo.py +++ b/ifpd2/oligo.py @@ -324,7 +324,7 @@ def expand_focus_to_closest(self): def apply_threshold(self, threshold): # Unfocuses oligos with score higher than the threshold - if not (threshold <= 1 and threshold >= 0): + if threshold > 1 or threshold < 0: raise AssertionError self._oligos_passing_score_filter = self._data["score"] <= threshold diff --git a/ifpd2/probe.py b/ifpd2/probe.py index daeef5cc..5b821d62 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -28,7 +28,7 @@ def data(self, oligo_data): if not isinstance(oligo_data, pd.DataFrame): raise AssertionError required_columns = ["start", "end", "Tm"] - if not all(col in oligo_data.columns for col in required_columns): + if any(col not in oligo_data.columns for col in required_columns): raise AssertionError self._data = oligo_data self._range = (self._data["start"].min(), self._data["end"].max()) @@ -340,17 +340,16 @@ def _assert(self): ass.ert_type(self.Gs[i], float, f"Gs[{i}]") if self.Gs[i] > 1: raise AssertionError - if not (all(np.array(self.Gs) < 0) or all(np.array(self.Gs) >= 0)): + if not all(np.array(self.Gs) < 0) and not all(np.array(self.Gs) >= 0): raise AssertionError if self.Gs[0] >= 0: if self.Gs[1] < self.Gs[0]: raise AssertionError - else: - if self.Gs[1] > self.Gs[0]: - raise AssertionError + elif self.Gs[1] > self.Gs[0]: + raise AssertionError ass.ert_type(self.Ot, float, "Ot") - if not (self.Ot > 0 and self.Ot <= 1): + if self.Ot <= 0 or self.Ot > 1: raise AssertionError def get_prologue(self): diff --git a/ifpd2/scripts/autocomplete.py b/ifpd2/scripts/autocomplete.py index 9df2deb1..6f6b5a1b 100644 --- a/ifpd2/scripts/autocomplete.py +++ b/ifpd2/scripts/autocomplete.py @@ -52,7 +52,7 @@ def main(shell_type: str, regenerate: bool) -> None: def regenerate_autocompletion_files(shell_type: str, autocomplete_path: str) -> None: - if not shell_type in SHELL_TYPES: + if shell_type not in SHELL_TYPES: raise AssertionError(f"unrecognized shell type '{shell_type}'.") cmd = f"_IFPD2_COMPLETE={shell_type}_source ifpd2 > {autocomplete_path}" os.system(shlex.quote(cmd)) diff --git a/ifpd2/scripts/db/dump.py b/ifpd2/scripts/db/dump.py index dba981d0..211a0483 100644 --- a/ifpd2/scripts/db/dump.py +++ b/ifpd2/scripts/db/dump.py @@ -51,7 +51,7 @@ def check_region( end: Optional[int] = None, ) -> Tuple[Optional[str], int, int]: if chrom is None: - if not (start is None and end is None): + if start is not None or end is not None: raise AssertionError( "cannot use --region-start or --region-end without --chrom" ) diff --git a/ifpd2/scripts/db/settings.py b/ifpd2/scripts/db/settings.py index 79e01c8b..d383edce 100644 --- a/ifpd2/scripts/db/settings.py +++ b/ifpd2/scripts/db/settings.py @@ -31,7 +31,7 @@ def output_path(self) -> str: @output_path.setter def output_path(self, output_path: str) -> None: - if not (not isdir(output_path) and not isfile(output_path)): + if isdir(output_path) or isfile(output_path): raise AssertionError(f"'{output_path}' already exists") self._output_path = output_path diff --git a/ifpd2/scripts/query.py b/ifpd2/scripts/query.py index 14b03ad8..69ee40ff 100644 --- a/ifpd2/scripts/query.py +++ b/ifpd2/scripts/query.py @@ -181,7 +181,7 @@ def main( window_shift = 1.0 window_size = None - if not (probes is not None or window_size is not None): + if probes is None and window_size is None: raise AssertionError if region[1] <= 0: probes = None diff --git a/ifpd2/scripts/query2.py b/ifpd2/scripts/query2.py index 66cc8694..a3800311 100644 --- a/ifpd2/scripts/query2.py +++ b/ifpd2/scripts/query2.py @@ -189,7 +189,7 @@ def main( region_set_list = RB.build_by_number(PositiveInteger(probes).n) else: window_size, window_shift = QueryWindow(window_size, window_shift).astuple() - if not (window_size is not None and window_shift is not None): + if window_size is None or window_shift is None: raise AssertionError region_set_list = RB.build_by_size(window_size, window_shift) @@ -213,7 +213,7 @@ def check_input( window_shift = None window_size = None - if not (probes is not None or window_size is not None): + if probes is None and window_size is None: raise AssertionError if probes is not None and window_size is not None: logging.warning("cannot combine -X and -W. Using -X.") diff --git a/ifpd2/walker.py b/ifpd2/walker.py index d2017e0b..2b736091 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -526,11 +526,8 @@ def _preprocess_window_do(self): wid = int(self.current_window["w"]) self.__walk_results[sid][wid] = self.fimport(self.window_path) return - shutil.rmtree(self.window_path) - os.mkdir(self.window_path) - else: - shutil.rmtree(self.window_path) - os.mkdir(self.window_path) + shutil.rmtree(self.window_path) + os.mkdir(self.window_path) def _preprocess_window(self): # Preprocess current window From 92a0cbeee93a44eab39eda4d37cf7fbb3dede3c0 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:37:35 +0200 Subject: [PATCH 166/185] Dropped broken scripts test. --- ifpd2/tests/test_scripts_db.py | 82 ---------------------------------- 1 file changed, 82 deletions(-) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index cdae554c..ab8ca15a 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -2,85 +2,3 @@ @author: Gabriele Girelli @contact: gigi.ga90@gmail.com """ - -import subprocess -import pickle - - -def remove_test_db(): - subprocess.run(["rm", "-r", "test_db"], check=True) - - -def test_db_make(): - remove_test_db() - script_output = subprocess.check_output( - [ - "ifpd2", - "db", - "make", - "test_db", - "-O", - "test_data/test.hush.fa", - "-T", - "test_data/test.tm.tsv", - "-S", - "test_data/test.ss.ct", - "-p", - "chr", - ] - ) - if b"Error" in script_output: - raise AssertionError - with open("test_data/test_db/chr16.bin", "rb").read() as test_db, open( - "test_db/chr16.bin", "rb" - ).read() as new_db: - if test_db != new_db: - raise AssertionError - test_pickle = pickle.load(open("test_data/test_db/db.pickle", "rb")) - new_pickle = pickle.load(open("test_db/db.pickle", "rb")) - if test_pickle != new_pickle: - raise AssertionError - - -def test_db_check(): - script_output = subprocess.check_output( - [ - "ifpd2", - "db", - "check", - "test_db", - ] - ) - if b"Error" in script_output: - raise AssertionError(script_output) - - -def test_db_dump(): - script_output = subprocess.check_output( - [ - "ifpd2", - "db", - "dump", - "test_db", - ] - ) - with open("test_data/test.dump.txt", "rb").read() as test_dump: - if script_output != test_dump: - raise AssertionError - - -def test_db_info(): - script_output = subprocess.check_output( - [ - "ifpd2", - "db", - "info", - "test_db", - ] - ) - if b"Error" in script_output: - raise AssertionError - - -def test_cleanup(): - remove_test_db() From 6d1f0cbbacf07c8a0746b43925fbfc567ac80ef8 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 19 Oct 2021 13:39:47 +0200 Subject: [PATCH 167/185] fix: added test placeholder --- ifpd2/tests/test_scripts_db.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ifpd2/tests/test_scripts_db.py b/ifpd2/tests/test_scripts_db.py index ab8ca15a..91959330 100644 --- a/ifpd2/tests/test_scripts_db.py +++ b/ifpd2/tests/test_scripts_db.py @@ -2,3 +2,7 @@ @author: Gabriele Girelli @contact: gigi.ga90@gmail.com """ + + +def test_placeholder(): + """Test the scripts here!""" From b77570a45ba00a3bf39bc50c087fb7d6eea6c50a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Oct 2021 17:09:59 +0000 Subject: [PATCH 168/185] Bump pandas from 1.3.3 to 1.3.4 (#97) --- poetry.lock | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index e2ca9271..ad25176e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -125,14 +125,19 @@ pyparsing = ">=2.0.2" [[package]] name = "pandas" -version = "1.3.3" +version = "1.3.4" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = false python-versions = ">=3.7.1" [package.dependencies] -numpy = ">=1.17.3" +numpy = [ + {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, + {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, +] python-dateutil = ">=2.7.3" pytz = ">=2017.3" @@ -407,27 +412,27 @@ packaging = [ {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pandas = [ - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68408a39a54ebadb9014ee5a4fae27b2fe524317bc80adf56c9ac59e8f8ea431"}, - {file = "pandas-1.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b16b1b920c4cb27fdd65a2c20258bcd9c794be491290660722bb0ea765054d"}, - {file = "pandas-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37d63e78e87eb3791da7be4100a65da0383670c2b59e493d9e73098d7a879226"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e2fb11f86f6253bb1df26e3aeab3bf2e000aaa32a953ec394571bec5dc6fd6"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7326b37de08d42dd3fff5b7ef7691d0fd0bf2428f4ba5a2bdc3b3247e9a52e4c"}, - {file = "pandas-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2f29b4da6f6ae7c68f4b3708d9d9e59fa89b2f9e87c2b64ce055cbd39f729e"}, - {file = "pandas-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:3f5020613c1d8e304840c34aeb171377dc755521bf5e69804991030c2a48aec3"}, - {file = "pandas-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c399200631db9bd9335d013ec7fce4edb98651035c249d532945c78ad453f23a"}, - {file = "pandas-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a800df4e101b721e94d04c355e611863cc31887f24c0b019572e26518cbbcab6"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3334a5a9eeaca953b9db1b2b165dcdc5180b5011f3bec3a57a3580c9c22eae68"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fd2889d8116d7acef0709e4c82b8560a8b22b0f77471391d12c27596e90267"}, - {file = "pandas-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7557b39c8e86eb0543a17a002ac1ea0f38911c3c17095bc9350d0a65b32d801c"}, - {file = "pandas-1.3.3-cp38-cp38-win32.whl", hash = "sha256:629138b7cf81a2e55aa29ce7b04c1cece20485271d1f6c469c6a0c03857db6a4"}, - {file = "pandas-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:45649503e167d45360aa7c52f18d1591a6d5c70d2f3a26bc90a3297a30ce9a66"}, - {file = "pandas-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebbed7312547a924df0cbe133ff1250eeb94cdff3c09a794dc991c5621c8c735"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f1b54d7efc9df05320b14a48fb18686f781aa66cc7b47bb62fabfc67a0985c"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9bc59855598cb57f68fdabd4897d3ed2bc3a3b3bef7b868a0153c4cd03f3207"}, - {file = "pandas-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4def2ef2fb7fcd62f2aa51bacb817ee9029e5c8efe42fe527ba21f6a3ddf1a9f"}, - {file = "pandas-1.3.3-cp39-cp39-win32.whl", hash = "sha256:f7d84f321674c2f0f31887ee6d5755c54ca1ea5e144d6d54b3bbf566dd9ea0cc"}, - {file = "pandas-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:e574c2637c9d27f322e911650b36e858c885702c5996eda8a5a60e35e6648cf2"}, - {file = "pandas-1.3.3.tar.gz", hash = "sha256:272c8cb14aa9793eada6b1ebe81994616e647b5892a370c7135efb2924b701df"}, + {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:372d72a3d8a5f2dbaf566a5fa5fa7f230842ac80f29a931fb4b071502cf86b9a"}, + {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99d2350adb7b6c3f7f8f0e5dfb7d34ff8dd4bc0a53e62c445b7e43e163fce63"}, + {file = "pandas-1.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c2646458e1dce44df9f71a01dc65f7e8fa4307f29e5c0f2f92c97f47a5bf22f5"}, + {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5298a733e5bfbb761181fd4672c36d0c627320eb999c59c65156c6a90c7e1b4f"}, + {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22808afb8f96e2269dcc5b846decacb2f526dd0b47baebc63d913bf847317c8f"}, + {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b528e126c13816a4374e56b7b18bfe91f7a7f6576d1aadba5dee6a87a7f479ae"}, + {file = "pandas-1.3.4-cp37-cp37m-win32.whl", hash = "sha256:fe48e4925455c964db914b958f6e7032d285848b7538a5e1b19aeb26ffaea3ec"}, + {file = "pandas-1.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eaca36a80acaacb8183930e2e5ad7f71539a66805d6204ea88736570b2876a7b"}, + {file = "pandas-1.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:42493f8ae67918bf129869abea8204df899902287a7f5eaf596c8e54e0ac7ff4"}, + {file = "pandas-1.3.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a388960f979665b447f0847626e40f99af8cf191bce9dc571d716433130cb3a7"}, + {file = "pandas-1.3.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba0aac1397e1d7b654fccf263a4798a9e84ef749866060d19e577e927d66e1b"}, + {file = "pandas-1.3.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f567e972dce3bbc3a8076e0b675273b4a9e8576ac629149cf8286ee13c259ae5"}, + {file = "pandas-1.3.4-cp38-cp38-win32.whl", hash = "sha256:c1aa4de4919358c5ef119f6377bc5964b3a7023c23e845d9db7d9016fa0c5b1c"}, + {file = "pandas-1.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:dd324f8ee05925ee85de0ea3f0d66e1362e8c80799eb4eb04927d32335a3e44a"}, + {file = "pandas-1.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d47750cf07dee6b55d8423471be70d627314277976ff2edd1381f02d52dbadf9"}, + {file = "pandas-1.3.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d1dc09c0013d8faa7474574d61b575f9af6257ab95c93dcf33a14fd8d2c1bab"}, + {file = "pandas-1.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10e10a2527db79af6e830c3d5842a4d60383b162885270f8cffc15abca4ba4a9"}, + {file = "pandas-1.3.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35c77609acd2e4d517da41bae0c11c70d31c87aae8dd1aabd2670906c6d2c143"}, + {file = "pandas-1.3.4-cp39-cp39-win32.whl", hash = "sha256:003ba92db58b71a5f8add604a17a059f3068ef4e8c0c365b088468d0d64935fd"}, + {file = "pandas-1.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:a51528192755f7429c5bcc9e80832c517340317c861318fea9cea081b57c9afd"}, + {file = "pandas-1.3.4.tar.gz", hash = "sha256:a2aa18d3f0b7d538e21932f637fbfe8518d085238b429e4790a35e1e44a96ffc"}, ] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, From b64314d10b2269a8a4cf5aa9c768fe2af8bda1af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 21:29:34 +0000 Subject: [PATCH 169/185] Bump black from 21.9b0 to 21.10b0 (#98) --- poetry.lock | 15 +++++++++------ pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index ad25176e..77ff48ab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ numpy = "*" [[package]] name = "black" -version = "21.9b0" +version = "21.10b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -53,9 +53,9 @@ typing-extensions = [ [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] +d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.2)"] +python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -315,7 +315,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "c193c889a18d0bbcf280f38e20d50cf80e6fb232124bd129d5351dd421c7f6dc" +content-hash = "c269e841763556b0135f45140666399ecd6a9ba521e48e82dfb66b963d0d8475" [metadata.files] atomicwrites = [ @@ -354,8 +354,8 @@ biopython = [ {file = "biopython-1.79.tar.gz", hash = "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b"}, ] black = [ - {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, - {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, + {file = "black-21.10b0-py3-none-any.whl", hash = "sha256:6eb7448da9143ee65b856a5f3676b7dda98ad9abe0f87fce8c59291f15e82a5b"}, + {file = "black-21.10b0.tar.gz", hash = "sha256:a9952229092e325fe5f3dae56d81f639b23f7131eb840781947e4b2886030f33"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -412,8 +412,11 @@ packaging = [ {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pandas = [ + {file = "pandas-1.3.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9707bdc1ea9639c886b4d3be6e2a45812c1ac0c2080f94c31b71c9fa35556f9b"}, + {file = "pandas-1.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c2f44425594ae85e119459bb5abb0748d76ef01d9c08583a667e3339e134218e"}, {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:372d72a3d8a5f2dbaf566a5fa5fa7f230842ac80f29a931fb4b071502cf86b9a"}, {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99d2350adb7b6c3f7f8f0e5dfb7d34ff8dd4bc0a53e62c445b7e43e163fce63"}, + {file = "pandas-1.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:4acc28364863127bca1029fb72228e6f473bb50c32e77155e80b410e2068eeac"}, {file = "pandas-1.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c2646458e1dce44df9f71a01dc65f7e8fa4307f29e5c0f2f92c97f47a5bf22f5"}, {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5298a733e5bfbb761181fd4672c36d0c627320eb999c59c65156c6a90c7e1b4f"}, {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22808afb8f96e2269dcc5b846decacb2f526dd0b47baebc63d913bf847317c8f"}, diff --git a/pyproject.toml b/pyproject.toml index 3e25cee9..ead765f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.5" -black = "^21.9b0" +black = "^21.10b0" [tool.vulture] paths = ["ifpd2"] From f331e7ecf0bf501bf7c6a164457da66c3e32222d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 14:09:27 +0000 Subject: [PATCH 170/185] Bump rich from 10.12.0 to 10.13.0 (#99) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 77ff48ab..0e32a8d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,7 +250,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.12.0" +version = "10.13.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -517,8 +517,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.12.0-py3-none-any.whl", hash = "sha256:c30d6808d1cd3defd56a7bd2d587d13e53b5f55de6cf587f035bcbb56bc3f37b"}, - {file = "rich-10.12.0.tar.gz", hash = "sha256:83fb3eff778beec3c55201455c17cccde1ccdf66d5b4dade8ef28f56b50c4bd4"}, + {file = "rich-10.13.0-py3-none-any.whl", hash = "sha256:96d15285b64dbf8154e0717298d2fdfdbbe03da26a392632c23820068f06c3b3"}, + {file = "rich-10.13.0.tar.gz", hash = "sha256:d80fc76f34d819c481a48f73ec9ac396bed3bd6a16ecd57f9e0654cd89a8fb56"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From bf614dd959443b9200440d16f9d16a71352c6cec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Nov 2021 13:51:58 +0000 Subject: [PATCH 171/185] Bump black from 21.10b0 to 21.11b0 (#100) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e32a8d2..3b6fc5dc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ numpy = "*" [[package]] name = "black" -version = "21.10b0" +version = "21.11b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -315,7 +315,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "c269e841763556b0135f45140666399ecd6a9ba521e48e82dfb66b963d0d8475" +content-hash = "88d2a4b5000d99cc282850253aaa7bf40cc6099d187c0e2c41da3eb6b971a3b3" [metadata.files] atomicwrites = [ @@ -354,8 +354,8 @@ biopython = [ {file = "biopython-1.79.tar.gz", hash = "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b"}, ] black = [ - {file = "black-21.10b0-py3-none-any.whl", hash = "sha256:6eb7448da9143ee65b856a5f3676b7dda98ad9abe0f87fce8c59291f15e82a5b"}, - {file = "black-21.10b0.tar.gz", hash = "sha256:a9952229092e325fe5f3dae56d81f639b23f7131eb840781947e4b2886030f33"}, + {file = "black-21.11b0-py3-none-any.whl", hash = "sha256:0b1f66cbfadcd332ceeaeecf6373d9991d451868d2e2219ad0ac1213fb701117"}, + {file = "black-21.11b0.tar.gz", hash = "sha256:83f3852301c8dcb229e9c444dd79f573c8d31c7c2dad9bbaaa94c808630e32aa"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, diff --git a/pyproject.toml b/pyproject.toml index ead765f4..9c476c18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.5" -black = "^21.10b0" +black = "^21.11b0" [tool.vulture] paths = ["ifpd2"] From f641a2d2e749f52d91bc1028f927582fa19e8ada Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Nov 2021 13:52:00 +0000 Subject: [PATCH 172/185] Bump rich from 10.13.0 to 10.14.0 (#101) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3b6fc5dc..b5d34ce6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,7 +250,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.13.0" +version = "10.14.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -517,8 +517,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.13.0-py3-none-any.whl", hash = "sha256:96d15285b64dbf8154e0717298d2fdfdbbe03da26a392632c23820068f06c3b3"}, - {file = "rich-10.13.0.tar.gz", hash = "sha256:d80fc76f34d819c481a48f73ec9ac396bed3bd6a16ecd57f9e0654cd89a8fb56"}, + {file = "rich-10.14.0-py3-none-any.whl", hash = "sha256:ab9cbfd7a3802d8c6f0fa91e974630e2a69447972dcbb9dfe9b01016dd95e38e"}, + {file = "rich-10.14.0.tar.gz", hash = "sha256:8bfe4546d56b4131298d3a9e571a0742de342f1593770bd0d4707299f772a0af"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From 08b58e1bd6647136e95714e6a151bb4d1e5c5435 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Nov 2021 08:17:06 +0000 Subject: [PATCH 173/185] Bump black from 21.11b0 to 21.11b1 (#102) --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index b5d34ce6..7f7c16b9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ numpy = "*" [[package]] name = "black" -version = "21.11b0" +version = "21.11b1" description = "The uncompromising code formatter." category = "dev" optional = false @@ -44,7 +44,7 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0,<1" platformdirs = ">=2" -regex = ">=2020.1.8" +regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typing-extensions = [ {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, @@ -315,7 +315,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "88d2a4b5000d99cc282850253aaa7bf40cc6099d187c0e2c41da3eb6b971a3b3" +content-hash = "b735a69c5f89a8c4739b507077a25d882f4bf22ec9a73b5bd8ed0fb0e28f46da" [metadata.files] atomicwrites = [ @@ -354,8 +354,8 @@ biopython = [ {file = "biopython-1.79.tar.gz", hash = "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b"}, ] black = [ - {file = "black-21.11b0-py3-none-any.whl", hash = "sha256:0b1f66cbfadcd332ceeaeecf6373d9991d451868d2e2219ad0ac1213fb701117"}, - {file = "black-21.11b0.tar.gz", hash = "sha256:83f3852301c8dcb229e9c444dd79f573c8d31c7c2dad9bbaaa94c808630e32aa"}, + {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, + {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, diff --git a/pyproject.toml b/pyproject.toml index 9c476c18..7bf6ea53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.5" -black = "^21.11b0" +black = "^21.11b1" [tool.vulture] paths = ["ifpd2"] From bfd189aa3b861fb606268d03edee038b05ea5905 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 26 Nov 2021 10:49:00 +0100 Subject: [PATCH 174/185] fix: wrong condition of path_exists function --- ifpd2/dataclasses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py index fec70764..a7d0168b 100644 --- a/ifpd2/dataclasses.py +++ b/ifpd2/dataclasses.py @@ -9,7 +9,7 @@ def path_exists(path: str) -> bool: - return not isdir(path) and not isfile(path) + return isdir(path) or isfile(path) @dataclass(frozen=True) @@ -24,7 +24,7 @@ def __post_init__(self): or not self.exists and path_exists(self.path) ): - raise AssertionError + raise AssertionError((self.path, self.exists)) @dataclass(frozen=True) From 569fc93958e4313cdef98382ef1a5b9e355085bb Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 26 Nov 2021 10:52:18 +0100 Subject: [PATCH 175/185] fix: correct variable names --- ifpd2/dataclasses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ifpd2/dataclasses.py b/ifpd2/dataclasses.py index a7d0168b..ca84bf0c 100644 --- a/ifpd2/dataclasses.py +++ b/ifpd2/dataclasses.py @@ -108,9 +108,9 @@ class NonNegativeIntInterval: end: int def __post_init__(self): - if self._from < 0: + if self.start < 0: raise AssertionError - if self.end < self.first: + if self.end < self.start: raise AssertionError def astuple(self) -> Tuple[int, int]: From e010fd6c7756cdf888d52e0ac5a16b4655332b95 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Fri, 26 Nov 2021 11:03:08 +0100 Subject: [PATCH 176/185] fix: assertions on input params --- ifpd2/walker.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ifpd2/walker.py b/ifpd2/walker.py index 2b736091..20024ad7 100644 --- a/ifpd2/walker.py +++ b/ifpd2/walker.py @@ -107,16 +107,14 @@ def _assert(self): ass.ert_inInterv(self.Wh, 0, 1, "Wh") ass.ert_multiTypes(self.Rs, [int, float], "Rs") - if isinstance(self.Rs, int): - if self.Rs <= 1: - raise AssertionError + if self.Rs > 1: + self.Rs = int(self.Rs) else: ass.ert_inInterv(self.Rs, 0, 1, "Rs") ass.ert_multiTypes(self.Rt, [int, float], "Rt") - if isinstance(self.Rt, int): - if self.Rt <= 1: - raise AssertionError + if self.Rt > 1: + self.Rt = int(self.Rt) else: ass.ert_inInterv(self.Rt, 0, 1, "Rt") From 60c1a7932c5a8d5a3993003b390a86733ff0f906 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 15:40:34 +0000 Subject: [PATCH 177/185] Bump rich from 10.14.0 to 10.15.0 (#103) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7f7c16b9..b9116505 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,7 +250,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.14.0" +version = "10.15.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -517,8 +517,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.14.0-py3-none-any.whl", hash = "sha256:ab9cbfd7a3802d8c6f0fa91e974630e2a69447972dcbb9dfe9b01016dd95e38e"}, - {file = "rich-10.14.0.tar.gz", hash = "sha256:8bfe4546d56b4131298d3a9e571a0742de342f1593770bd0d4707299f772a0af"}, + {file = "rich-10.15.0-py3-none-any.whl", hash = "sha256:11516740a10dddead0c782dc11fdde552b19fd0614dbbba8f78ea7602d940720"}, + {file = "rich-10.15.0.tar.gz", hash = "sha256:3f7b0851e097ae90e43216375db413c2f910a0f310705614bce1a2ae43c8264e"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From b681c6d6c4f9b527a418b2d7eacf201efc4478e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Nov 2021 15:09:53 +0000 Subject: [PATCH 178/185] Bump rich from 10.15.0 to 10.15.1 (#104) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b9116505..63c2a3f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,7 +250,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.15.0" +version = "10.15.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -517,8 +517,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.15.0-py3-none-any.whl", hash = "sha256:11516740a10dddead0c782dc11fdde552b19fd0614dbbba8f78ea7602d940720"}, - {file = "rich-10.15.0.tar.gz", hash = "sha256:3f7b0851e097ae90e43216375db413c2f910a0f310705614bce1a2ae43c8264e"}, + {file = "rich-10.15.1-py3-none-any.whl", hash = "sha256:a59fb2721c52c5061ac65f318c0afb709e098b1ab6ce5813ea38982654c4b6ee"}, + {file = "rich-10.15.1.tar.gz", hash = "sha256:93d0ea3c35ecfd8703dbe52b76885e224ad8d68c7766c921c726b14b22a57b7d"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From a35f108cd30ed01e678f19fe322f49f22854709a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Dec 2021 09:33:08 +0000 Subject: [PATCH 179/185] Bump rich from 10.15.1 to 10.15.2 (#105) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 63c2a3f9..fe4c734c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,7 +250,7 @@ python-versions = "*" [[package]] name = "rich" -version = "10.15.1" +version = "10.15.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -517,8 +517,8 @@ regex = [ {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, ] rich = [ - {file = "rich-10.15.1-py3-none-any.whl", hash = "sha256:a59fb2721c52c5061ac65f318c0afb709e098b1ab6ce5813ea38982654c4b6ee"}, - {file = "rich-10.15.1.tar.gz", hash = "sha256:93d0ea3c35ecfd8703dbe52b76885e224ad8d68c7766c921c726b14b22a57b7d"}, + {file = "rich-10.15.2-py3-none-any.whl", hash = "sha256:43b2c6ad51f46f6c94992aee546f1c177719f4e05aff8f5ea4d2efae3ebdac89"}, + {file = "rich-10.15.2.tar.gz", hash = "sha256:1dded089b79dd042b3ab5cd63439a338e16652001f0c16e73acdcf4997ad772d"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, From 54cdf587f0bd4ec1e6e5393505965478b093c63d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Dec 2021 08:14:30 +0000 Subject: [PATCH 180/185] Bump black from 21.11b1 to 21.12b0 (#106) --- poetry.lock | 60 ++++---------------------------------------------- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 57 deletions(-) diff --git a/poetry.lock b/poetry.lock index fe4c734c..59f2b380 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ numpy = "*" [[package]] name = "black" -version = "21.11b1" +version = "21.12b0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -44,7 +44,6 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0,<1" platformdirs = ">=2" -regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typing-extensions = [ {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, @@ -240,14 +239,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "regex" -version = "2021.9.30" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "rich" version = "10.15.2" @@ -315,7 +306,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "b735a69c5f89a8c4739b507077a25d882f4bf22ec9a73b5bd8ed0fb0e28f46da" +content-hash = "b4151de747c88b1906a65853c89bf0c58077062264c2dac9048a245e0bc2ed7c" [metadata.files] atomicwrites = [ @@ -354,8 +345,8 @@ biopython = [ {file = "biopython-1.79.tar.gz", hash = "sha256:edb07eac99d3b8abd7ba56ff4bedec9263f76dfc3c3f450e7d2e2bcdecf8559b"}, ] black = [ - {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, - {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -473,49 +464,6 @@ pytz = [ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] -regex = [ - {file = "regex-2021.9.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66696c8336a1b5d1182464f3af3427cc760118f26d0b09a2ddc16a976a4d2637"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d87459ad3ab40cd8493774f8a454b2e490d8e729e7e402a0625867a983e4e02"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cf6a1e023caf5e9a982f5377414e1aeac55198831b852835732cfd0a0ca5ff"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:255791523f80ea8e48e79af7120b4697ef3b74f6886995dcdb08c41f8e516be0"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e502f8d4e5ef714bcc2c94d499684890c94239526d61fdf1096547db91ca6aa6"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4907fb0f9b9309a5bded72343e675a252c2589a41871874feace9a05a540241e"}, - {file = "regex-2021.9.30-cp310-cp310-win32.whl", hash = "sha256:3be40f720af170a6b20ddd2ad7904c58b13d2b56f6734ee5d09bbdeed2fa4816"}, - {file = "regex-2021.9.30-cp310-cp310-win_amd64.whl", hash = "sha256:c2b180ed30856dfa70cfe927b0fd38e6b68198a03039abdbeb1f2029758d87e7"}, - {file = "regex-2021.9.30-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6f2d2f93001801296fe3ca86515eb04915472b5380d4d8752f09f25f0b9b0ed"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fa7ba9ab2eba7284e0d7d94f61df7af86015b0398e123331362270d71fab0b9"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28040e89a04b60d579c69095c509a4f6a1a5379cd865258e3a186b7105de72c6"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f588209d3e4797882cd238195c175290dbc501973b10a581086b5c6bcd095ffb"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42952d325439ef223e4e9db7ee6d9087b5c68c5c15b1f9de68e990837682fc7b"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cae4099031d80703954c39680323dabd87a69b21262303160776aa0e55970ca0"}, - {file = "regex-2021.9.30-cp36-cp36m-win32.whl", hash = "sha256:0de8ad66b08c3e673b61981b9e3626f8784d5564f8c3928e2ad408c0eb5ac38c"}, - {file = "regex-2021.9.30-cp36-cp36m-win_amd64.whl", hash = "sha256:b345ecde37c86dd7084c62954468a4a655fd2d24fd9b237949dd07a4d0dd6f4c"}, - {file = "regex-2021.9.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6f08187136f11e430638c2c66e1db091105d7c2e9902489f0dbc69b44c222b4"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55442650f541d195a535ccec33078c78a9521973fb960923da7515e9ed78fa6"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87e9c489aa98f50f367fb26cc9c8908d668e9228d327644d7aa568d47e456f47"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2cb7d4909ed16ed35729d38af585673f1f0833e73dfdf0c18e5be0061107b99"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0861e7f6325e821d5c40514c551fd538b292f8cc3960086e73491b9c5d8291d"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81fdc90f999b2147fc62e303440c424c47e5573a9b615ed5d43a5b832efcca9e"}, - {file = "regex-2021.9.30-cp37-cp37m-win32.whl", hash = "sha256:8c1ad61fa024195136a6b7b89538030bd00df15f90ac177ca278df9b2386c96f"}, - {file = "regex-2021.9.30-cp37-cp37m-win_amd64.whl", hash = "sha256:e3770781353a4886b68ef10cec31c1f61e8e3a0be5f213c2bb15a86efd999bc4"}, - {file = "regex-2021.9.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c065d95a514a06b92a5026766d72ac91bfabf581adb5b29bc5c91d4b3ee9b83"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9925985be05d54b3d25fd6c1ea8e50ff1f7c2744c75bdc4d3b45c790afa2bcb3"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470f2c882f2672d8eeda8ab27992aec277c067d280b52541357e1acd7e606dae"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad0517df22a97f1da20d8f1c8cb71a5d1997fa383326b81f9cf22c9dadfbdf34"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e30838df7bfd20db6466fd309d9b580d32855f8e2c2e6d74cf9da27dcd9b63"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b34d2335d6aedec7dcadd3f8283b9682fadad8b9b008da8788d2fce76125ebe"}, - {file = "regex-2021.9.30-cp38-cp38-win32.whl", hash = "sha256:e07049cece3462c626d650e8bf42ddbca3abf4aa08155002c28cb6d9a5a281e2"}, - {file = "regex-2021.9.30-cp38-cp38-win_amd64.whl", hash = "sha256:37868075eda024470bd0feab872c692ac4ee29db1e14baec103257bf6cc64346"}, - {file = "regex-2021.9.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d331f238a7accfbbe1c4cd1ba610d4c087b206353539331e32a8f05345c74aec"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6348a7ab2a502cbdd0b7fd0496d614007489adb7361956b38044d1d588e66e04"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b1cca6c23f19bee8dc40228d9c314d86d1e51996b86f924aca302fc8f8bf9"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1f1125bc5172ab3a049bc6f4b9c0aae95a2a2001a77e6d6e4239fa3653e202b5"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:638e98d069b14113e8afba6a54d1ca123f712c0d105e67c1f9211b2a825ef926"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a0b0db6b49da7fa37ca8eddf9f40a8dbc599bad43e64f452284f37b6c34d91c"}, - {file = "regex-2021.9.30-cp39-cp39-win32.whl", hash = "sha256:9910869c472e5a6728680ca357b5846546cbbd2ab3ad5bef986ef0bc438d0aa6"}, - {file = "regex-2021.9.30-cp39-cp39-win_amd64.whl", hash = "sha256:3b71213ec3bad9a5a02e049f2ec86b3d7c3e350129ae0f4e2f99c12b5da919ed"}, - {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, -] rich = [ {file = "rich-10.15.2-py3-none-any.whl", hash = "sha256:43b2c6ad51f46f6c94992aee546f1c177719f4e05aff8f5ea4d2efae3ebdac89"}, {file = "rich-10.15.2.tar.gz", hash = "sha256:1dded089b79dd042b3ab5cd63439a338e16652001f0c16e73acdcf4997ad772d"}, diff --git a/pyproject.toml b/pyproject.toml index 7bf6ea53..e4b4af08 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ tqdm = "^4.58.0" [tool.poetry.dev-dependencies] pytest = "^6.2.5" -black = "^21.11b1" +black = "^21.12b0" [tool.vulture] paths = ["ifpd2"] From 3e6967d9fae59fed1fc651e3228518bfaf989d5f Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 7 Dec 2021 09:19:43 +0100 Subject: [PATCH 181/185] fix: minor assert change --- ifpd2/probe.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ifpd2/probe.py b/ifpd2/probe.py index 5b821d62..d2a78723 100644 --- a/ifpd2/probe.py +++ b/ifpd2/probe.py @@ -323,6 +323,8 @@ def _assert(self): if (self.k + self.D) * self.N > self.Ps: raise AssertionError + if isinstance(self.F, tuple): + self.F = list(self.F) ass.ert_type(self.F, list, "F") if len(self.F) != 2: raise AssertionError @@ -333,6 +335,8 @@ def _assert(self): if self.F[1] < self.F[0]: raise AssertionError + if isinstance(self.Gs, tuple): + self.Gs = list(self.Gs) ass.ert_type(self.Gs, list, "Gs") if len(self.Gs) != 2: raise AssertionError From 6f9cef51e5f06ccd575a059feaf0bc202ab273c1 Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 7 Dec 2021 09:20:26 +0100 Subject: [PATCH 182/185] fix: trove classifier --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e4b4af08..8ba7b195 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ homepage = "https://github.com/ggirelli/ifpd2" repository = "https://github.com/ggirelli/ifpd2" keywords = ["biology", "cell", "DNA", "RNA", "FISH", "fluorescence", "hybridization"] classifiers = [ - "Development Status :: 3 - Beta", + "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering :: Bio-Informatics", From c8b44e3848c3e0a601e9b3774f09e0a7364817af Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 7 Dec 2021 09:23:07 +0100 Subject: [PATCH 183/185] doc: updated with version flag --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88bf1280..a3b1a4d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased + +## [1.0.1a1] - 2021-12-07 ### Added - New entry points: `db make`, `db dump`, `db info`, `db merge`, and `db_reindex`. - Module `io` with parsing functions for output generated via oligo-melting, hush, or OligoArrayAux. @@ -20,4 +22,5 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [1.0.0-alpha] - 2021-02-26 +[1.0.1a1] https://github.com/ggirelli/ifpd2/releases/tag/v1.0.1a1 [1.0.0-alpha] https://github.com/ggirelli/ifpd2/releases/tag/v1.0.0-alpha From 53fbcdd853beeb2ea36a2200bf0d5e1719e36eda Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 7 Dec 2021 09:23:35 +0100 Subject: [PATCH 184/185] docs: updated version flag --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8ba7b195..12a5baef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ifpd2" -version = "1.0.1" +version = "1.0.1a1" description = "An iFISH probe design pipeline (II)" authors = ["Gabriele Girelli "] license = "MIT" From 8adbe8c8b1f2edbd163a2793910a2c315b8a888b Mon Sep 17 00:00:00 2001 From: Gabriele Girelli Date: Tue, 7 Dec 2021 09:24:51 +0100 Subject: [PATCH 185/185] feat: updated lock file --- poetry.lock | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 59f2b380..18035302 100644 --- a/poetry.lock +++ b/poetry.lock @@ -113,14 +113,14 @@ python-versions = ">=3.7" [[package]] name = "packaging" -version = "21.0" +version = "21.3" description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -pyparsing = ">=2.0.2" +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pandas" @@ -177,11 +177,11 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pygments" @@ -193,11 +193,14 @@ python-versions = ">=3.5" [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.6" description = "Python parsing module" category = "dev" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" @@ -273,7 +276,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.1" +version = "1.2.2" description = "A lil' TOML parser" category = "dev" optional = false @@ -297,11 +300,11 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "3.10.0.2" -description = "Backported and Experimental Type Hints for Python 3.5+" +version = "4.0.1" +description = "Backported and Experimental Type Hints for Python 3.6+" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" [metadata] lock-version = "1.1" @@ -399,8 +402,8 @@ numpy = [ {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, ] packaging = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pandas = [ {file = "pandas-1.3.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9707bdc1ea9639c886b4d3be6e2a45812c1ac0c2080f94c31b71c9fa35556f9b"}, @@ -441,16 +444,16 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pygments = [ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, + {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -477,15 +480,14 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.1-py3-none-any.whl", hash = "sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f"}, - {file = "tomli-1.2.1.tar.gz", hash = "sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442"}, + {file = "tomli-1.2.2-py3-none-any.whl", hash = "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade"}, + {file = "tomli-1.2.2.tar.gz", hash = "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee"}, ] tqdm = [ {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, - {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, - {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ]