diff --git a/.github/workflows/linting.yml b/.github/workflows/code-linting.yml similarity index 100% rename from .github/workflows/linting.yml rename to .github/workflows/code-linting.yml diff --git a/.github/workflows/nf-core-linting.yml b/.github/workflows/nf-core-linting.yml new file mode 100644 index 00000000..af4cade7 --- /dev/null +++ b/.github/workflows/nf-core-linting.yml @@ -0,0 +1,75 @@ +name: nf-core linting +# This workflow is triggered on pushes and PRs to the repository. +# It runs the `nf-core lint` tests to ensure that the module code meets the nf-core guidelines +on: [push, pull_request] + +jobs: + changes: + name: Check for changes + runs-on: ubuntu-latest + outputs: + # Expose matched filters as job 'modules' output variable + modules: ${{ steps.filter.outputs.changes }} + steps: + - uses: actions/checkout@v2 + + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: "tests/config/pytest_software.yml" + + lint: + runs-on: ubuntu-20.04 + env: + NXF_VER: 21.04.0 + + name: ${{ matrix.tags }} + needs: changes + if: needs.changes.outputs.modules != '[]' + strategy: + fail-fast: false + matrix: + tags: ["${{ fromJson(needs.changes.outputs.modules) }}"] + steps: + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - name: Install pip + run: python -m pip install --upgrade pip + + # FIXME: Remove this when nf-core modules lint stabilizes and install stable release + - name: Install nf-core tools development version + run: python -m pip install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev + + - name: Install Nextflow + env: + CAPSULE_LOG: none + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + + - name: Lint ${{ matrix.tags }} + run: nf-core modules lint ${{ matrix.tags }} + + - uses: actions/cache@v2 + with: + path: /usr/local/bin/nextflow + key: ${{ runner.os }} + restore-keys: | + ${{ runner.os }} diff --git a/.github/workflows/pytest-workflow.yml b/.github/workflows/pytest-workflow.yml index c7479963..d58a1881 100644 --- a/.github/workflows/pytest-workflow.yml +++ b/.github/workflows/pytest-workflow.yml @@ -10,6 +10,7 @@ jobs: modules: ${{ steps.filter.outputs.changes }} steps: - uses: actions/checkout@v2 + - uses: dorny/paths-filter@v2 id: filter with: @@ -17,29 +18,41 @@ jobs: test: runs-on: ubuntu-20.04 + name: ${{ matrix.tags }} ${{ matrix.profile }} ${{ matrix.nxf_version }} needs: changes if: needs.changes.outputs.modules != '[]' strategy: fail-fast: false matrix: - nxf_version: ['20.11.0-edge', '21.03.0-edge'] + nxf_version: ['21.04.0'] tags: ['${{ fromJson(needs.changes.outputs.modules) }}'] profile: ['docker', 'singularity', 'conda'] env: NXF_ANSI_LOG: false steps: - uses: actions/checkout@v2 + - name: Set up Python uses: actions/setup-python@v2 with: python-version: "3.x" + - uses: actions/cache@v2 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - name: Install Python dependencies + run: python -m pip install --upgrade pip pytest-workflow + - uses: actions/cache@v2 with: path: /usr/local/bin/nextflow @@ -50,17 +63,11 @@ jobs: - name: Install Nextflow env: NXF_VER: ${{ matrix.nxf_version }} + CAPSULE_LOG: none run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: "3.x" - - name: Install dependencies - run: python -m pip install --upgrade pip pytest-workflow - - name: Set up Singularity if: matrix.profile == 'singularity' uses: eWaterCycle/setup-singularity@v5 @@ -74,6 +81,7 @@ jobs: auto-update-conda: true channels: conda-forge,bioconda,defaults python-version: ${{ matrix.python-version }} + - name: Conda clean if: matrix.profile == 'conda' run: conda clean -a diff --git a/.gitignore b/.gitignore index 4e3815b1..2cbbac1a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ test_output/ output/ .DS_Store *.code-workspace +.screenrc +.*.sw? diff --git a/README.md b/README.md index c4313f21..eba12c01 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ![nf-core/modules](docs/images/nfcore-modules_logo.png) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A520.11.0--edge-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.0-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -27,7 +27,6 @@ A repository for hosting [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl - [Uploading to `nf-core/modules`](#uploading-to-nf-coremodules) - [Guidelines](#guidelines) - [Terminology](#terminology) -- [Nextflow edge releases](#nextflow-edge-releases) - [Help](#help) - [Citation](#citation) @@ -167,10 +166,22 @@ If the module doesn't exist on `nf-core/modules`: We have implemented a number of commands in the `nf-core/tools` package to make it incredibly easy for you to create and contribute your own modules to nf-core/modules. 1. Install the latest version of [`nf-core/tools`](https://github.com/nf-core/tools#installation) (`>=1.13`) -2. Install [`nextflow`](https://nf-co.re/usage/installation) (`>=20.11.0-edge`; see [Nextflow edge releases](#nextflow-edge-releases)) +2. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) 3. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html) 4. [Fork and clone this repo locally](#uploading-to-nf-coremodules) -5. Create a module using the [nf-core DSL2 module template](https://github.com/nf-core/tools/blob/master/nf_core/module-template/software/main.nf): +5. Set up git by adding a new remote of the nf-core git repo called `upstream` + + ```bash + git remote add upstream https://github.com/nf-core/modules.git + ``` + + Make a new branch for your module and check it out + + ```bash + git checkout -b fastqc + ``` + +6. Create a module using the [nf-core DSL2 module template](https://github.com/nf-core/tools/blob/master/nf_core/module-template/software/main.nf): ```console $ nf-core modules create . --tool fastqc --author @joebloggs --label process_low --meta @@ -218,7 +229,7 @@ We have implemented a number of commands in the `nf-core/tools` package to make `md5sum` checks are the preferable choice of test to determine file changes, however, this may not be possible for all outputs generated by some tools e.g. if they include time stamps or command-related headers. Please do your best to avoid just checking for the file being present e.g. it may still be possible to check that the file contains the appropriate text snippets. -6. Create a yaml file containing information required for module unit testing +7. Create a yaml file containing information required for module unit testing ```console $ nf-core modules create-test-yml @@ -251,7 +262,7 @@ We have implemented a number of commands in the `nf-core/tools` package to make > NB: See docs for [running tests manually](#running-tests-manually) if you would like to run the tests manually. -7. Lint the module locally to check that it adheres to nf-core guidelines before submission +8. Lint the module locally to check that it adheres to nf-core guidelines before submission ```console $ nf-core modules lint . --tool fastqc @@ -294,23 +305,52 @@ We have implemented a number of commands in the `nf-core/tools` package to make ╰──────────────────────╯ ``` +9. Once ready, the code can be pushed and a pull request (PR) created + + On a regular basis you can pull upstream changes into this branch and it is recommended to do so before pushing and creating a pull request - see below. Rather than merging changes directly from upstream the rebase strategy is recommended so that your changes are applied on top of the latest master branch from the nf-core repo. This can be performed as follows + + ```bash + git pull --rebase upstream master + ``` + + Once you are ready you can push the code and create a PR + + ```bash + git push -u origin fastqc + ``` + + Once the PR has been accepted you should delete the branch and checkout master again. + + ```bash + git checkout master + git branch -d fastqc + ``` + + In case there are commits on the local branch that didn't make it into the PR (usually commits made after the PR), git will warn about this and not delete the branch. If you are sure you want to delete, use the following command + + ```bash + git branch -D fastqc + ``` + ### Test data In order to test that each module added to `nf-core/modules` is actually working and to be able to track any changes to results files between module updates we have set-up a number of Github Actions CI tests to run each module on a minimal test dataset using Docker, Singularity and Conda. -- All test data for `nf-core/modules` MUST be added to [`tests/data/`](tests/data/) and organised by filename extension. +- All test data for `nf-core/modules` MUST be added to the `modules` branch of [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) and organised by filename extension. -- In order to keep the size of this repository as minimal as possible, pre-existing files from [`tests/data/`](tests/data/) MUST be reused if at all possible. +- In order to keep the size of this repository as minimal as possible, pre-existing files from [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) MUST be reused if at all possible. - Test files MUST be kept as tiny as possible. +- If the appropriate test data doesn't exist in the `modules` branch of [`nf-core/test-datasets`](https://github.com/nf-core/test-datasets/tree/modules/data) please contact us on the [nf-core Slack `#modules` channel](https://nfcore.slack.com/channels/modules) (you can join with [this invite](https://nf-co.re/join/slack)) to discuss possible options. + ### Running tests manually As outlined in the [nf-core modules create](#nf-core-modules-create) section we have made it quite trivial to create an initial yaml file (via the `nf-core modules create-test-yml` command) containing a listing of all of the module output files and their associated md5sums. However, md5sum checks may not be appropriate for all output files if for example they contain timestamps. This is why it is a good idea to re-run the tests locally with `pytest-workflow` before you create your pull request adding the module. If your files do indeed have timestamps or other issues that prevent you from using the md5sum check, then you can edit the `test.yml` file to instead check that the file contains some specific content or as a last resort, if it exists. The different test options are listed in the [pytest-workflow docs](https://pytest-workflow.readthedocs.io/en/stable/#test-options). Please follow the steps below to run the tests locally: -1. Install [`nextflow`](https://nf-co.re/usage/installation) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Conda`](https://conda.io/miniconda.html) @@ -322,21 +362,21 @@ Please follow the steps below to run the tests locally: ```console cd /path/to/git/clone/of/nf-core/modules/ - PROFILE=docker pytest --tag fastqc_single_end --symlink --keep-workflow-wd + PROFILE=docker pytest --tag fastqc --symlink --keep-workflow-wd ``` - Typical command with Singularity: ```console cd /path/to/git/clone/of/nf-core/modules/ - TMPDIR=~ PROFILE=singularity pytest --tag fastqc_single_end --symlink --keep-workflow-wd + TMPDIR=~ PROFILE=singularity pytest --tag fastqc --symlink --keep-workflow-wd ``` - Typical command with Conda: ```console cd /path/to/git/clone/of/nf-core/modules/ - PROFILE=conda pytest --tag fastqc_single_end --symlink --keep-workflow-wd + PROFILE=conda pytest --tag fastqc --symlink --keep-workflow-wd ``` - See [docs on running pytest-workflow](https://pytest-workflow.readthedocs.io/en/stable/#running-pytest-workflow) for more info. @@ -488,25 +528,6 @@ The features offered by Nextflow DSL2 can be used in various ways depending on t - *Workflow*: What DSL1 users would consider an end-to-end pipeline. For example, from one or more inputs to a series of outputs. This can either be implemented using a large monolithic script as with DSL1, or by using a combination of DSL2 individual modules and sub-workflows. -## Nextflow edge releases - -Stable releases will be becoming more infrequent as Nextflow shifts its development model to becoming more dynamic via the usage of plugins. This will allow functionality to be added as an extension to the core codebase with a release cycle that could potentially be independent to that of Nextflow itself. As a result of the reduction in stable releases, some pipelines may be required to use Nextflow `edge` releases in order to be able to exploit cutting "edge" features e.g. version 3.0 of the nf-core/rnaseq pipeline requires Nextflow `>=20.11.0-edge` in order to be able to directly download Singularity containers over `http` (see [nf-core/rnaseq#496](https://github.com/nf-core/rnaseq/issues/496)). - -There are a number of ways you can install Nextflow `edge` releases, the main difference with stable releases being that you have to `export` the version you would like to install before issuing the appropriate installation/execution commands as highlighted below. - -- If you would like to download and install a Nextflow `edge` release from scratch with minimal fuss: - - ```bash - export NXF_VER="20.11.0-edge" - wget -qO- get.nextflow.io | bash - sudo mv nextflow /usr/local/bin/ - nextflow run nf-core/rnaseq -profile test,docker -r 3.0 - ``` - - > Note if you don't have `sudo` privileges required for the last command above then you can move the `nextflow` binary to somewhere else and export that directory to `$PATH` instead. One way of doing that on Linux would be to add `export PATH=$PATH:/path/to/nextflow/binary/` to your `~/.bashrc` file so that it is available every time you login to your system. - -- Manually download and install Nextflow from the available [assets](https://github.com/nextflow-io/nextflow/releases) on Github. See [Nextflow installation docs](https://www.nextflow.io/docs/latest/getstarted.html#installation). - ## Help For further information or help, don't hesitate to get in touch on [Slack `#modules` channel](https://nfcore.slack.com/channels/modules) (you can join with [this invite](https://nf-co.re/join/slack)). @@ -541,5 +562,5 @@ nextflow run /path/to/pipeline/ -c /path/to/custom_module.conf > files + singularity containers + institutional configs + modules in one go for you, to make this process easier. # New test data created for the module- sequenzautils/bam2seqz -The new test data is an output from another module- sequenzautils/bcwiggle- (which uses sarscov2 genome fasta file as an input). +The new test data is an output from another module- sequenzautils/bcwiggle- (which uses sarscov2 genome fasta file as an input). --> diff --git a/docs/images/nf-core-modules_social_preview.png b/docs/images/nf-core-modules_social_preview.png deleted file mode 100644 index 5f1cf9cd..00000000 Binary files a/docs/images/nf-core-modules_social_preview.png and /dev/null differ diff --git a/docs/images/nf-core-modules_social_preview.svg b/docs/images/nf-core-modules_social_preview.svg deleted file mode 100644 index 25821790..00000000 --- a/docs/images/nf-core-modules_social_preview.svg +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - Repository to host tool-specific module files forthe Nextflow DSL2 community! - modules - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/software/abacas/functions.nf b/software/abacas/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/abacas/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/abacas/main.nf b/software/abacas/main.nf new file mode 100644 index 00000000..6ec65ea2 --- /dev/null +++ b/software/abacas/main.nf @@ -0,0 +1,45 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process ABACAS { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::abacas=1.3.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/abacas:1.3.1--pl526_0" + } else { + container "quay.io/biocontainers/abacas:1.3.1--pl526_0" + } + + input: + tuple val(meta), path(scaffold) + path fasta + + output: + tuple val(meta), path('*.abacas*'), emit: results + path '*.version.txt' , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + abacas.pl \\ + -r $fasta \\ + -q $scaffold \\ + $options.args \\ + -o ${prefix}.abacas + + mv nucmer.delta ${prefix}.abacas.nucmer.delta + mv nucmer.filtered.delta ${prefix}.abacas.nucmer.filtered.delta + mv nucmer.tiling ${prefix}.abacas.nucmer.tiling + mv unused_contigs.out ${prefix}.abacas.unused.contigs.out + echo \$(abacas.pl -v 2>&1) | sed 's/^.*ABACAS.//; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/abacas/meta.yml b/software/abacas/meta.yml new file mode 100644 index 00000000..d60afee0 --- /dev/null +++ b/software/abacas/meta.yml @@ -0,0 +1,58 @@ +name: abacas +description: contiguate draft genome assembly +keywords: + - genome + - assembly + - contiguate +tools: + - abacas: + description: | + ABACAS is intended to rapidly contiguate (align, order, orientate), + visualize and design primers to close gaps on shotgun assembled + contigs based on a reference sequence. + homepage: http://abacas.sourceforge.net/documentation.html + documentation: http://abacas.sourceforge.net/documentation.html + tool_dev_url: None + doi: "10.1093/bioinformatics/btp347" + licence: ['GPL v2-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - scaffold: + type: file + description: Fasta file containing scaffold + pattern: "*.{fasta,fa}" + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: files + description: | + List containing abacas output files + [ 'test.abacas.bin', 'test.abacas.fasta', 'test.abacas.gaps', + 'test.abacas.gaps.tab', 'test.abacas.nucmer.delta', + 'test.abacas.nucmer.filtered.delta', 'test.abacas.nucmer.tiling', + 'test.abacas.tab', 'test.abacas.unused.contigs.out', + 'test.abacas.MULTIFASTA.fa' ] + pattern: "*.{abacas}*" + + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/adapterremoval/functions.nf b/software/adapterremoval/functions.nf index f177f0c8..da9da093 100644 --- a/software/adapterremoval/functions.nf +++ b/software/adapterremoval/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/adapterremoval/main.nf b/software/adapterremoval/main.nf index 7432cae0..08b1b8bf 100644 --- a/software/adapterremoval/main.nf +++ b/software/adapterremoval/main.nf @@ -8,7 +8,7 @@ process ADAPTERREMOVAL { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::adapterremoval=2.3.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/allelecounter/functions.nf b/software/allelecounter/functions.nf index f177f0c8..da9da093 100644 --- a/software/allelecounter/functions.nf +++ b/software/allelecounter/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/allelecounter/main.nf b/software/allelecounter/main.nf index cb91b5ec..8f090566 100644 --- a/software/allelecounter/main.nf +++ b/software/allelecounter/main.nf @@ -9,7 +9,7 @@ process ALLELECOUNTER { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::cancerit-allelecount=4.2.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/artic/guppyplex/functions.nf b/software/artic/guppyplex/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/artic/guppyplex/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/artic/guppyplex/main.nf b/software/artic/guppyplex/main.nf new file mode 100644 index 00000000..41178298 --- /dev/null +++ b/software/artic/guppyplex/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process ARTIC_GUPPYPLEX { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::artic=1.2.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/artic:1.2.1--py_0" + } else { + container "quay.io/biocontainers/artic:1.2.1--py_0" + } + + input: + tuple val(meta), path(fastq_dir) + + output: + tuple val(meta), path("*.fastq.gz"), emit: fastq + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + artic \\ + guppyplex \\ + $options.args \\ + --directory $fastq_dir \\ + --output ${prefix}.fastq + + pigz -p $task.cpus *.fastq + echo \$(artic --version 2>&1) | sed 's/^.*artic //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/artic/guppyplex/meta.yml b/software/artic/guppyplex/meta.yml new file mode 100644 index 00000000..0caaf5d2 --- /dev/null +++ b/software/artic/guppyplex/meta.yml @@ -0,0 +1,44 @@ +name: artic_guppyplex +description: Aggregates fastq files with demultiplexed reads +keywords: + - artic + - aggregate + - demultiplexed reads +tools: + - artic: + description: ARTIC pipeline - a bioinformatics pipeline for working with virus sequencing data sequenced with nanopore + homepage: https://artic.readthedocs.io/en/latest/ + documentation: https://artic.readthedocs.io/en/latest/ + tool_dev_url: https://github.com/artic-network/fieldbioinformatics + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq_dir: + type: directory + description: Directory containing the fastq files with demultiplexed reads + pattern: "*" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: Aggregated FastQ files + pattern: "*.{fastq.gz}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/artic/minion/functions.nf b/software/artic/minion/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/artic/minion/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/artic/minion/main.nf b/software/artic/minion/main.nf new file mode 100644 index 00000000..e408551b --- /dev/null +++ b/software/artic/minion/main.nf @@ -0,0 +1,73 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process ARTIC_MINION { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::artic=1.2.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/artic:1.2.1--py_0" + } else { + container "quay.io/biocontainers/artic:1.2.1--py_0" + } + + input: + tuple val(meta), path(fastq) + path fast5_dir + path sequencing_summary + path ("primer-schemes/${scheme}/V${scheme_version}/${scheme}.reference.fasta") + path ("primer-schemes/${scheme}/V${scheme_version}/${scheme}.scheme.bed") + path medaka_model + val scheme + val scheme_version + + output: + tuple val(meta), path("${prefix}.*") , emit: results + tuple val(meta), path("${prefix}.sorted.bam") , emit: bam + tuple val(meta), path("${prefix}.sorted.bam.bai") , emit: bai + tuple val(meta), path("${prefix}.trimmed.rg.sorted.bam") , emit: bam_trimmed + tuple val(meta), path("${prefix}.trimmed.rg.sorted.bam.bai") , emit: bai_trimmed + tuple val(meta), path("${prefix}.primertrimmed.rg.sorted.bam") , emit: bam_primertrimmed + tuple val(meta), path("${prefix}.primertrimmed.rg.sorted.bam.bai"), emit: bai_primertrimmed + tuple val(meta), path("${prefix}.consensus.fasta") , emit: fasta + tuple val(meta), path("${prefix}.pass.vcf.gz") , emit: vcf + tuple val(meta), path("${prefix}.pass.vcf.gz.tbi") , emit: tbi + tuple val(meta), path("*.json"), optional:true , emit: json + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def version = scheme_version.toString().toLowerCase().replaceAll('v','') + def fast5 = params.fast5_dir ? "--fast5-directory $fast5_dir" : "" + def summary = params.sequencing_summary ? "--sequencing-summary $sequencing_summary" : "" + def model = "" + if (options.args.tokenize().contains('--medaka')) { + fast5 = "" + summary = "" + model = file(params.artic_minion_medaka_model).exists() ? "--medaka-model ./$medaka_model" : "--medaka-model $params.artic_minion_medaka_model" + } + """ + artic \\ + minion \\ + $options.args \\ + --threads $task.cpus \\ + --read-file $fastq \\ + --scheme-directory ./primer-schemes \\ + --scheme-version $version \\ + $model \\ + $fast5 \\ + $summary \\ + $scheme \\ + $prefix + + echo \$(artic --version 2>&1) | sed 's/^.*artic //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/artic/minion/meta.yml b/software/artic/minion/meta.yml new file mode 100644 index 00000000..1b6a73cf --- /dev/null +++ b/software/artic/minion/meta.yml @@ -0,0 +1,113 @@ +name: artic_minion +description: | + Run the alignment/variant-call/consensus logic of the artic pipeline +keywords: + - artic + - aggregate + - demultiplexed reads +tools: + - artic: + description: ARTIC pipeline - a bioinformatics pipeline for working with virus sequencing data sequenced with nanopore + homepage: https://artic.readthedocs.io/en/latest/ + documentation: https://artic.readthedocs.io/en/latest/ + tool_dev_url: https://github.com/artic-network/fieldbioinformatics + doi: "" + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: FastQ file containing reads + pattern: "*.{fastq.gz}" + - fast5_dir: + type: directory + description: Directory containing MinION FAST5 files + pattern: "*" + - sequencing_summary: + type: file + description: Path to Guppy sequencing summary + pattern: "*.{txt}" + - primer_scheme_fasta: + type: file + description: | + Sequence of the reference genome used in the scheme in FASTA format + pattern: "*.{reference.fasta}" + - primer_scheme_bed: + type: file + description: | + bed files containing coordinates of each primer in the scheme, + relative to the reference genome + pattern: "*.{scheme.bed}" + - medaka_model: + type: file + description: | + Medaka model to use (if option --medaka is set) + pattern: "*.*" + - scheme: + type: value + description: Name of the primer scheme + - scheme_version: + type: value + description: Version of the primer scheme +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: + description: Aggregated FastQ files + pattern: "*.fastq.gz" + - bam: + type: file + description: BAM file + pattern: "*.{sorted.bam}" + - bai: + type: file + description: BAM index file + pattern: "*.{sorted.bai}" + - bam_trimmed: + type: file + description: BAM file with the primers left on + pattern: "*.{trimmed.rg.sorted.bam}" + - bai_trimmed: + type: file + description: BAM index file of bam_trimmed + pattern: "*.{sorted.bai}" + - bam_primertrimmed: + type: file + description: BAM containing reads after primer-binding site trimming + pattern: "*.{trimmed.rg.sorted.bam}" + - bai_primertrimmed: + type: file + description: BAM index file of bam_primertrimmed + pattern: "*.{primertrimmed.rg.sorted.bam.bai}" + - fasta: + type: file + description: FAST file with consensus sequence + pattern: "*.{consensus.fasta}" + - vcf: + type: file + description: VCF file containing detected variants passing quality filter + pattern: "*.{pass.vcf.gz}" + - tbi: + type: file + description: VCF index + pattern: "*.{pass.vcf.gz.tbi}" + - json: + type: file + description: JSON file for MultiQC + pattern: "*.json" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/bandage/image/functions.nf b/software/bandage/image/functions.nf index d25eea86..da9da093 100644 --- a/software/bandage/image/functions.nf +++ b/software/bandage/image/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bandage/image/main.nf b/software/bandage/image/main.nf index f4547f21..6afdb60d 100644 --- a/software/bandage/image/main.nf +++ b/software/bandage/image/main.nf @@ -9,7 +9,7 @@ process BANDAGE_IMAGE { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::bandage=0.8.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bbmap/bbduk/functions.nf b/software/bbmap/bbduk/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/bbmap/bbduk/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/bbmap/bbduk/main.nf b/software/bbmap/bbduk/main.nf new file mode 100644 index 00000000..797dc8b5 --- /dev/null +++ b/software/bbmap/bbduk/main.nf @@ -0,0 +1,47 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BBMAP_BBDUK { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bbmap=38.90" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bbmap:38.90--he522d1c_1" + } else { + container "quay.io/biocontainers/bbmap:38.90--he522d1c_1" + } + + input: + tuple val(meta), path(reads) + path contaminants + + output: + tuple val(meta), path('*.fastq.gz'), emit: reads + tuple val(meta), path('*.log') , emit: log + path '*.version.txt' , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def raw = meta.single_end ? "in=${reads[0]}" : "in1=${reads[0]} in2=${reads[1]}" + def trimmed = meta.single_end ? "out=${prefix}.fastq.gz" : "out1=${prefix}_1.fastq.gz out2=${prefix}_2.fastq.gz" + def contaminants_fa = contaminants ? "ref=$contaminants" : '' + """ + maxmem=\$(echo \"$task.memory\"| sed 's/ GB/g/g') + bbduk.sh \\ + -Xmx\$maxmem \\ + $raw \\ + $trimmed \\ + threads=$task.cpus \\ + $options.args \\ + $contaminants_fa \\ + &> ${prefix}.bbduk.log + echo \$(bbversion.sh) > ${software}.version.txt + """ +} diff --git a/software/bbmap/bbduk/meta.yml b/software/bbmap/bbduk/meta.yml new file mode 100644 index 00000000..ee2eea2c --- /dev/null +++ b/software/bbmap/bbduk/meta.yml @@ -0,0 +1,52 @@ +name: bbmap_bbduk +description: Adapter and quality trimming of sequencing reads +keywords: + - trimming + - adapter trimming + - quality trimming +tools: + - bbmap: + description: BBMap is a short read aligner, as well as various other bioinformatic tools. + homepage: https://jgi.doe.gov/data-and-tools/bbtools/bb-tools-user-guide/ + documentation: https://jgi.doe.gov/data-and-tools/bbtools/bb-tools-user-guide/ + tool_dev_url: None + doi: "" + licence: ['UC-LBL license (see package)'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - contaminants: + type: file + description: | + Reference files containing adapter and/or contaminant sequences for sequence kmer matching + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: The trimmed/modified fastq reads + pattern: "*fastq.gz" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - log: + type: file + description: Bbduk log file + pattern: "*bbduk.log" + +authors: + - "@MGordon09" diff --git a/software/bcftools/consensus/functions.nf b/software/bcftools/consensus/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bcftools/consensus/functions.nf +++ b/software/bcftools/consensus/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/consensus/main.nf b/software/bcftools/consensus/main.nf index 213655fa..67321fc2 100644 --- a/software/bcftools/consensus/main.nf +++ b/software/bcftools/consensus/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_CONSENSUS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::bcftools=1.11' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bcftools/filter/functions.nf b/software/bcftools/filter/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bcftools/filter/functions.nf +++ b/software/bcftools/filter/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/filter/main.nf b/software/bcftools/filter/main.nf index 070b3e99..d7ec0d2b 100644 --- a/software/bcftools/filter/main.nf +++ b/software/bcftools/filter/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_FILTER { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bcftools/isec/functions.nf b/software/bcftools/isec/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bcftools/isec/functions.nf +++ b/software/bcftools/isec/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/isec/main.nf b/software/bcftools/isec/main.nf index b7be2fe4..b0bde522 100644 --- a/software/bcftools/isec/main.nf +++ b/software/bcftools/isec/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_ISEC { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bcftools/merge/functions.nf b/software/bcftools/merge/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bcftools/merge/functions.nf +++ b/software/bcftools/merge/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/merge/main.nf b/software/bcftools/merge/main.nf index 52ca4513..09bc2e7d 100644 --- a/software/bcftools/merge/main.nf +++ b/software/bcftools/merge/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_MERGE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bcftools/mpileup/functions.nf b/software/bcftools/mpileup/functions.nf index 779feec6..da9da093 100644 --- a/software/bcftools/mpileup/functions.nf +++ b/software/bcftools/mpileup/functions.nf @@ -1,50 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/mpileup/main.nf b/software/bcftools/mpileup/main.nf index f09630dc..287a0c9d 100644 --- a/software/bcftools/mpileup/main.nf +++ b/software/bcftools/mpileup/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_MPILEUP { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bcftools/stats/functions.nf b/software/bcftools/stats/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bcftools/stats/functions.nf +++ b/software/bcftools/stats/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bcftools/stats/main.nf b/software/bcftools/stats/main.nf index fd36495f..84e48c05 100644 --- a/software/bcftools/stats/main.nf +++ b/software/bcftools/stats/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_STATS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/bamtobed/functions.nf b/software/bedtools/bamtobed/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/bedtools/bamtobed/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/bedtools/bamtobed/main.nf b/software/bedtools/bamtobed/main.nf new file mode 100644 index 00000000..22f5713c --- /dev/null +++ b/software/bedtools/bamtobed/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_BAMTOBED { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedtools \\ + bamtobed \\ + $options.args \\ + -i $bam \\ + | bedtools sort > ${prefix}.bed + + bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt + """ +} diff --git a/software/bedtools/bamtobed/meta.yml b/software/bedtools/bamtobed/meta.yml new file mode 100644 index 00000000..3594d2d4 --- /dev/null +++ b/software/bedtools/bamtobed/meta.yml @@ -0,0 +1,37 @@ +name: bedtools_bamtobed +description: Converts a bam file to a bed12 file. +keywords: + - bam + - bed +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/complement.html +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM file + pattern: "*.{bam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Bed file containing genomic intervals. + pattern: "*.{bed}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/software/bedtools/complement/functions.nf b/software/bedtools/complement/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/complement/functions.nf +++ b/software/bedtools/complement/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/complement/main.nf b/software/bedtools/complement/main.nf index ab9f1008..3c39f289 100644 --- a/software/bedtools/complement/main.nf +++ b/software/bedtools/complement/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_COMPLEMENT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/genomecov/functions.nf b/software/bedtools/genomecov/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/genomecov/functions.nf +++ b/software/bedtools/genomecov/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/genomecov/main.nf b/software/bedtools/genomecov/main.nf index 1244e130..647ee2c3 100644 --- a/software/bedtools/genomecov/main.nf +++ b/software/bedtools/genomecov/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_GENOMECOV { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/getfasta/functions.nf b/software/bedtools/getfasta/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/getfasta/functions.nf +++ b/software/bedtools/getfasta/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/getfasta/main.nf b/software/bedtools/getfasta/main.nf index 1818b37c..374a310b 100644 --- a/software/bedtools/getfasta/main.nf +++ b/software/bedtools/getfasta/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_GETFASTA { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/intersect/functions.nf b/software/bedtools/intersect/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/intersect/functions.nf +++ b/software/bedtools/intersect/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/intersect/main.nf b/software/bedtools/intersect/main.nf index d779972d..3e0a2e02 100644 --- a/software/bedtools/intersect/main.nf +++ b/software/bedtools/intersect/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_INTERSECT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/maskfasta/functions.nf b/software/bedtools/maskfasta/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/maskfasta/functions.nf +++ b/software/bedtools/maskfasta/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/maskfasta/main.nf b/software/bedtools/maskfasta/main.nf index 6afef67f..02110149 100644 --- a/software/bedtools/maskfasta/main.nf +++ b/software/bedtools/maskfasta/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_MASKFASTA { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/merge/functions.nf b/software/bedtools/merge/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/merge/functions.nf +++ b/software/bedtools/merge/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/merge/main.nf b/software/bedtools/merge/main.nf index 3b668c13..4ac7d1a5 100644 --- a/software/bedtools/merge/main.nf +++ b/software/bedtools/merge/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_MERGE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/slop/functions.nf b/software/bedtools/slop/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/slop/functions.nf +++ b/software/bedtools/slop/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/slop/main.nf b/software/bedtools/slop/main.nf index dc783efa..33dc1930 100644 --- a/software/bedtools/slop/main.nf +++ b/software/bedtools/slop/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_SLOP { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bedtools/sort/functions.nf b/software/bedtools/sort/functions.nf index d25eea86..da9da093 100644 --- a/software/bedtools/sort/functions.nf +++ b/software/bedtools/sort/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bedtools/sort/main.nf b/software/bedtools/sort/main.nf index a3d0321f..908514d9 100644 --- a/software/bedtools/sort/main.nf +++ b/software/bedtools/sort/main.nf @@ -9,7 +9,7 @@ process BEDTOOLS_SORT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/align/functions.nf b/software/bismark/align/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/align/functions.nf +++ b/software/bismark/align/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/align/main.nf b/software/bismark/align/main.nf index 7659cfa6..02f439f6 100644 --- a/software/bismark/align/main.nf +++ b/software/bismark/align/main.nf @@ -9,7 +9,7 @@ process BISMARK_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/deduplicate/functions.nf b/software/bismark/deduplicate/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/deduplicate/functions.nf +++ b/software/bismark/deduplicate/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/deduplicate/main.nf b/software/bismark/deduplicate/main.nf index 96f61c96..6d7010af 100644 --- a/software/bismark/deduplicate/main.nf +++ b/software/bismark/deduplicate/main.nf @@ -9,7 +9,7 @@ process BISMARK_DEDUPLICATE { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/genomepreparation/functions.nf b/software/bismark/genomepreparation/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/genomepreparation/functions.nf +++ b/software/bismark/genomepreparation/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/genomepreparation/main.nf b/software/bismark/genomepreparation/main.nf index 904d9922..3d48d955 100644 --- a/software/bismark/genomepreparation/main.nf +++ b/software/bismark/genomepreparation/main.nf @@ -9,7 +9,7 @@ process BISMARK_GENOMEPREPARATION { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/methylationextractor/functions.nf b/software/bismark/methylationextractor/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/methylationextractor/functions.nf +++ b/software/bismark/methylationextractor/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/methylationextractor/main.nf b/software/bismark/methylationextractor/main.nf index 7ec52d14..cdc4999c 100644 --- a/software/bismark/methylationextractor/main.nf +++ b/software/bismark/methylationextractor/main.nf @@ -9,7 +9,7 @@ process BISMARK_METHYLATIONEXTRACTOR { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/report/functions.nf b/software/bismark/report/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/report/functions.nf +++ b/software/bismark/report/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/report/main.nf b/software/bismark/report/main.nf index 574e0ffb..180efc7e 100644 --- a/software/bismark/report/main.nf +++ b/software/bismark/report/main.nf @@ -9,7 +9,7 @@ process BISMARK_REPORT { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bismark/summary/functions.nf b/software/bismark/summary/functions.nf index d25eea86..da9da093 100644 --- a/software/bismark/summary/functions.nf +++ b/software/bismark/summary/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bismark/summary/main.nf b/software/bismark/summary/main.nf index 8cb23be6..f5c03529 100644 --- a/software/bismark/summary/main.nf +++ b/software/bismark/summary/main.nf @@ -8,7 +8,7 @@ process BISMARK_SUMMARY { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bismark=0.23.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/blast/blastn/functions.nf b/software/blast/blastn/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/blast/blastn/functions.nf +++ b/software/blast/blastn/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/blast/blastn/main.nf b/software/blast/blastn/main.nf index cb4beb89..8d519613 100644 --- a/software/blast/blastn/main.nf +++ b/software/blast/blastn/main.nf @@ -9,7 +9,7 @@ process BLAST_BLASTN { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/blast/makeblastdb/functions.nf b/software/blast/makeblastdb/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/blast/makeblastdb/functions.nf +++ b/software/blast/makeblastdb/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/blast/makeblastdb/main.nf b/software/blast/makeblastdb/main.nf index 75266990..3e3b74c2 100644 --- a/software/blast/makeblastdb/main.nf +++ b/software/blast/makeblastdb/main.nf @@ -9,7 +9,7 @@ process BLAST_MAKEBLASTDB { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? 'bioconda::blast=2.10.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bowtie/align/functions.nf b/software/bowtie/align/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bowtie/align/functions.nf +++ b/software/bowtie/align/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bowtie/align/main.nf b/software/bowtie/align/main.nf index 2197dffc..9cafbfd2 100644 --- a/software/bowtie/align/main.nf +++ b/software/bowtie/align/main.nf @@ -9,7 +9,7 @@ process BOWTIE_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::bowtie=1.3.0 bioconda::samtools=1.11' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -29,6 +29,7 @@ process BOWTIE_ALIGN { tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq script: + def split_cpus = Math.floor(task.cpus/2) def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def unaligned = params.save_unaligned ? "--un ${prefix}.unmapped.fastq" : '' @@ -36,7 +37,7 @@ process BOWTIE_ALIGN { """ INDEX=`find -L ./ -name "*.3.ebwt" | sed 's/.3.ebwt//'` bowtie \\ - --threads $task.cpus \\ + --threads ${split_cpus} \\ --sam \\ -x \$INDEX \\ -q \\ @@ -44,7 +45,7 @@ process BOWTIE_ALIGN { $options.args \\ $endedness \\ 2> ${prefix}.out \\ - | samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - + | samtools view $options.args2 -@ ${split_cpus} -bS -o ${prefix}.bam - if [ -f ${prefix}.unmapped.fastq ]; then gzip ${prefix}.unmapped.fastq diff --git a/software/bowtie/build/functions.nf b/software/bowtie/build/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bowtie/build/functions.nf +++ b/software/bowtie/build/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bowtie/build/main.nf b/software/bowtie/build/main.nf index 5f4d695a..3a6071a9 100644 --- a/software/bowtie/build/main.nf +++ b/software/bowtie/build/main.nf @@ -9,7 +9,7 @@ process BOWTIE_BUILD { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? 'bioconda::bowtie=1.3.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bowtie2/align/functions.nf b/software/bowtie2/align/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bowtie2/align/functions.nf +++ b/software/bowtie2/align/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bowtie2/align/main.nf b/software/bowtie2/align/main.nf index 846589e6..d43d479d 100644 --- a/software/bowtie2/align/main.nf +++ b/software/bowtie2/align/main.nf @@ -9,7 +9,7 @@ process BOWTIE2_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2 bioconda::samtools=1.11 conda-forge::pigz=2.3.4' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -29,8 +29,9 @@ process BOWTIE2_ALIGN { tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def split_cpus = Math.floor(task.cpus/2) + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' """ @@ -38,11 +39,11 @@ process BOWTIE2_ALIGN { bowtie2 \\ -x \$INDEX \\ -U $reads \\ - --threads $task.cpus \\ + --threads ${split_cpus} \\ $unaligned \\ $options.args \\ 2> ${prefix}.bowtie2.log \\ - | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam - echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt """ @@ -54,11 +55,11 @@ process BOWTIE2_ALIGN { -x \$INDEX \\ -1 ${reads[0]} \\ -2 ${reads[1]} \\ - --threads $task.cpus \\ + --threads ${split_cpus} \\ $unaligned \\ $options.args \\ 2> ${prefix}.bowtie2.log \\ - | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam - if [ -f ${prefix}.unmapped.fastq.1.gz ]; then mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz diff --git a/software/bowtie2/build/functions.nf b/software/bowtie2/build/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/bowtie2/build/functions.nf +++ b/software/bowtie2/build/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bowtie2/build/main.nf b/software/bowtie2/build/main.nf index ca3527ee..42ff1d20 100644 --- a/software/bowtie2/build/main.nf +++ b/software/bowtie2/build/main.nf @@ -9,7 +9,7 @@ process BOWTIE2_BUILD { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bwa/index/functions.nf b/software/bwa/index/functions.nf index d25eea86..da9da093 100644 --- a/software/bwa/index/functions.nf +++ b/software/bwa/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwa/index/main.nf b/software/bwa/index/main.nf index 0ae9f1ce..aabd187c 100644 --- a/software/bwa/index/main.nf +++ b/software/bwa/index/main.nf @@ -9,7 +9,7 @@ process BWA_INDEX { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bwa=0.7.17" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bwa/mem/functions.nf b/software/bwa/mem/functions.nf index d25eea86..da9da093 100644 --- a/software/bwa/mem/functions.nf +++ b/software/bwa/mem/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwa/mem/main.nf b/software/bwa/mem/main.nf index fb7d848d..5e139d5a 100644 --- a/software/bwa/mem/main.nf +++ b/software/bwa/mem/main.nf @@ -9,7 +9,7 @@ process BWA_MEM { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bwa=0.7.17 bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -27,6 +27,7 @@ process BWA_MEM { path "*.version.txt" , emit: version script: + def split_cpus = Math.floor(task.cpus/2) def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" @@ -36,10 +37,10 @@ process BWA_MEM { bwa mem \\ $options.args \\ $read_group \\ - -t $task.cpus \\ + -t ${split_cpus} \\ \$INDEX \\ $reads \\ - | samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - + | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam - echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//' > ${software}.version.txt """ diff --git a/software/bwamem2/index/functions.nf b/software/bwamem2/index/functions.nf index d25eea86..da9da093 100644 --- a/software/bwamem2/index/functions.nf +++ b/software/bwamem2/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwamem2/index/main.nf b/software/bwamem2/index/main.nf index 7f9dbf19..b667f266 100644 --- a/software/bwamem2/index/main.nf +++ b/software/bwamem2/index/main.nf @@ -9,7 +9,7 @@ process BWAMEM2_INDEX { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/bwamem2/mem/functions.nf b/software/bwamem2/mem/functions.nf index d25eea86..da9da093 100644 --- a/software/bwamem2/mem/functions.nf +++ b/software/bwamem2/mem/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwamem2/mem/main.nf b/software/bwamem2/mem/main.nf index 427caa3a..5d0ff617 100644 --- a/software/bwamem2/mem/main.nf +++ b/software/bwamem2/mem/main.nf @@ -9,7 +9,7 @@ process BWAMEM2_MEM { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -27,6 +27,7 @@ process BWAMEM2_MEM { path "*.version.txt" , emit: version script: + def split_cpus = Math.floor(task.cpus/2) def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" @@ -36,10 +37,10 @@ process BWAMEM2_MEM { bwa-mem2 mem \\ $options.args \\ $read_group \\ - -t $task.cpus \\ + -t ${split_cpus} \\ \$INDEX \\ $reads \\ - | samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - + | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam - echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt """ diff --git a/software/bwameth/align/functions.nf b/software/bwameth/align/functions.nf index d25eea86..da9da093 100644 --- a/software/bwameth/align/functions.nf +++ b/software/bwameth/align/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwameth/align/main.nf b/software/bwameth/align/main.nf index 3d4e2a85..0e8db58f 100644 --- a/software/bwameth/align/main.nf +++ b/software/bwameth/align/main.nf @@ -9,7 +9,7 @@ process BWAMETH_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -27,6 +27,7 @@ process BWAMETH_ALIGN { path "*.version.txt" , emit: version script: + def split_cpus = Math.floor(task.cpus/2) def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" @@ -36,10 +37,10 @@ process BWAMETH_ALIGN { bwameth.py \\ $options.args \\ $read_group \\ - -t $task.cpus \\ + -t ${split_cpus} \\ --reference \$INDEX \\ $reads \\ - | samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - + | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam - echo \$(bwameth.py --version 2>&1) | cut -f2 -d" " > ${software}.version.txt """ diff --git a/software/bwameth/index/functions.nf b/software/bwameth/index/functions.nf index d25eea86..da9da093 100644 --- a/software/bwameth/index/functions.nf +++ b/software/bwameth/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/bwameth/index/main.nf b/software/bwameth/index/main.nf index 045cffb7..dbea0ae4 100644 --- a/software/bwameth/index/main.nf +++ b/software/bwameth/index/main.nf @@ -9,7 +9,7 @@ process BWAMETH_INDEX { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bwameth=0.2.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/cat/fastq/functions.nf b/software/cat/fastq/functions.nf index d25eea86..da9da093 100644 --- a/software/cat/fastq/functions.nf +++ b/software/cat/fastq/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/cat/fastq/main.nf b/software/cat/fastq/main.nf index ed62e432..55ccca90 100644 --- a/software/cat/fastq/main.nf +++ b/software/cat/fastq/main.nf @@ -9,7 +9,7 @@ process CAT_FASTQ { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/cnvkit/functions.nf b/software/cnvkit/functions.nf index d25eea86..da9da093 100755 --- a/software/cnvkit/functions.nf +++ b/software/cnvkit/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/cnvkit/main.nf b/software/cnvkit/main.nf index ca6acbae..dee6051d 100755 --- a/software/cnvkit/main.nf +++ b/software/cnvkit/main.nf @@ -2,14 +2,14 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process CNVKIT { tag "$meta.id" label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::cnvkit=0.9.8" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -20,8 +20,8 @@ process CNVKIT { input: tuple val(meta), path(tumourbam), path(normalbam) - path fasta - path targetfile + path fasta + path targetfile output: tuple val(meta), path("*.bed"), emit: bed @@ -32,15 +32,15 @@ process CNVKIT { script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" """ - cnvkit.py batch \\ + cnvkit.py \\ + batch \\ $tumourbam \\ --normal $normalbam\\ --fasta $fasta \\ --targets $targetfile \\ $options.args - cnvkit.py version | sed -e "s/cnvkit v//g" > ${software}.version.txt + echo \$(cnvkit.py version) | sed -e "s/cnvkit v//g" > ${software}.version.txt """ } diff --git a/software/cooler/digest/functions.nf b/software/cooler/digest/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/cooler/digest/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/cooler/digest/main.nf b/software/cooler/digest/main.nf new file mode 100644 index 00000000..399541d9 --- /dev/null +++ b/software/cooler/digest/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process COOLER_DIGEST { + tag '$fasta' + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::cooler=0.8.11" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/cooler:0.8.11--pyh3252c3a_0" + } else { + container "quay.io/biocontainers/cooler:0.8.11--pyh3252c3a_0" + } + + input: + path fasta + path chromsizes + val enzyme + + output: + path "*.bed" , emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + cooler digest \\ + $options.args \\ + -o "${fasta.baseName}_${enzyme.replaceAll(/[^0-9a-zA-Z]+/, "_")}.bed" \\ + $chromsizes \\ + $fasta \\ + $enzyme + + echo \$(cooler --version 2>&1) | sed 's/cooler, version //' > ${software}.version.txt + """ +} diff --git a/software/cooler/digest/meta.yml b/software/cooler/digest/meta.yml new file mode 100644 index 00000000..4623adda --- /dev/null +++ b/software/cooler/digest/meta.yml @@ -0,0 +1,39 @@ +name: cooler_digest +description: Generate fragment-delimited genomic bins +keywords: + - digest + - enzyme +tools: + - cooler: + description: Sparse binary format for genomic interaction matrices + homepage: https://cooler.readthedocs.io/en/latest/index.html + documentation: https://cooler.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/open2c/cooler + doi: "10.1093/bioinformatics/btz540" + licence: ['BSD-3-clause'] + +input: + - fasta: + type: file + description: Genome assembly FASTA file or folder containing FASTA files (uncompressed). + pattern: "*.{fasta,fa}" + - chromsizes: + type: file + description: Path to a chromsizes file. + - enzyme: + type: String + description: Name of restriction enzyme. e.g. CviQI. + documentation: http://biopython.org/DIST/docs/cookbook/Restriction.html + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bed: + type: file + description: A genome segmentation of restriction fragments as a BED file. + pattern: "*.{bed}" + +authors: + - "@jianhong" diff --git a/software/cooler/dump/functions.nf b/software/cooler/dump/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/cooler/dump/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/cooler/dump/main.nf b/software/cooler/dump/main.nf new file mode 100644 index 00000000..c381722c --- /dev/null +++ b/software/cooler/dump/main.nf @@ -0,0 +1,39 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process COOLER_DUMP { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::cooler=0.8.11" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/cooler:0.8.11--pyh3252c3a_0" + } else { + container "quay.io/biocontainers/cooler:0.8.11--pyh3252c3a_0" + } + + input: + tuple val(meta), path(cool) + + output: + tuple val(meta), path("*.bedpe"), emit: bedpe + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + cooler dump \\ + $options.args \\ + -o ${prefix}.bedpe \\ + $cool + + echo \$(cooler --version 2>&1) | sed 's/cooler, version //' > ${software}.version.txt + """ +} diff --git a/software/cooler/dump/meta.yml b/software/cooler/dump/meta.yml new file mode 100644 index 00000000..0b2fcc60 --- /dev/null +++ b/software/cooler/dump/meta.yml @@ -0,0 +1,41 @@ +name: cooler_dump +description: Dump a cooler’s data to a text stream. +keywords: + - dump +tools: + - cooler: + description: Sparse binary format for genomic interaction matrices + homepage: https://cooler.readthedocs.io/en/latest/index.html + documentation: https://cooler.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/open2c/cooler + doi: "10.1093/bioinformatics/btz540" + licence: ['BSD-3-clause'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cool: + type: file + description: Path to COOL file + pattern: "*.{cool,mcool}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bedpe: + type: file + description: Output text file + pattern: "*.bedpe" + +authors: + - "@jianhong" diff --git a/software/cutadapt/functions.nf b/software/cutadapt/functions.nf index d25eea86..da9da093 100644 --- a/software/cutadapt/functions.nf +++ b/software/cutadapt/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/cutadapt/main.nf b/software/cutadapt/main.nf index 05ef8842..c392367e 100644 --- a/software/cutadapt/main.nf +++ b/software/cutadapt/main.nf @@ -9,7 +9,7 @@ process CUTADAPT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::cutadapt=3.2' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/damageprofiler/functions.nf b/software/damageprofiler/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/damageprofiler/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/damageprofiler/main.nf b/software/damageprofiler/main.nf new file mode 100644 index 00000000..b370ae3b --- /dev/null +++ b/software/damageprofiler/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DAMAGEPROFILER { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::damageprofiler=1.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/damageprofiler:1.1--hdfd78af_2" + } else { + container "quay.io/biocontainers/damageprofiler:1.1--hdfd78af_2" + } + + input: + tuple val(meta), path(bam) + path fasta + path fai + + output: + tuple val(meta), path("${prefix}"), emit: results + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + """ + damageprofiler \\ + -i $bam \\ + -r $fasta \\ + -o $prefix/ \\ + $options.args + + + echo \$(damageprofiler -v) | sed 's/^DamageProfiler v//' > ${software}.version.txt + """ +} diff --git a/software/damageprofiler/meta.yml b/software/damageprofiler/meta.yml new file mode 100644 index 00000000..b32b9bff --- /dev/null +++ b/software/damageprofiler/meta.yml @@ -0,0 +1,53 @@ +name: damageprofiler +description: A Java based tool to determine damage patterns on ancient DNA as a replacement for mapDamage +keywords: + - damage + - deamination + - miscoding lesions + - C to T + - ancient DNA + - aDNA + - palaeogenomics + - archaeogenomics + - palaeogenetics + - archaeogenetics +tools: + - damageprofiler: + description: A Java based tool to determine damage patterns on ancient DNA as a replacement for mapDamage + homepage: https://github.com/Integrative-Transcriptomics/DamageProfiler + documentation: https://damageprofiler.readthedocs.io/ + tool_dev_url: https://github.com/Integrative-Transcriptomics/DamageProfiler + doi: "10.1093/bioinformatics/btab190" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fna,fa}" + - fai: + type: file + description: FASTA index file from samtools faidx + pattern: "*.{fai}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - results: + type: dir + description: DamageProfiler results directory + pattern: "*/*" + +authors: + - "@jfy133" diff --git a/software/deeptools/computematrix/functions.nf b/software/deeptools/computematrix/functions.nf index d25eea86..da9da093 100644 --- a/software/deeptools/computematrix/functions.nf +++ b/software/deeptools/computematrix/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/deeptools/computematrix/main.nf b/software/deeptools/computematrix/main.nf index 4c61b9e0..bee16d3c 100644 --- a/software/deeptools/computematrix/main.nf +++ b/software/deeptools/computematrix/main.nf @@ -9,7 +9,7 @@ process DEEPTOOLS_COMPUTEMATRIX { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/deeptools/computematrix/meta.yml b/software/deeptools/computematrix/meta.yml new file mode 100644 index 00000000..d6fd78c7 --- /dev/null +++ b/software/deeptools/computematrix/meta.yml @@ -0,0 +1,58 @@ +name: deeptools_computematrix +description: calculates scores per genome regions for other deeptools plotting utilities +keywords: + - genome + - regions + - scores + - matrix +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bigwig: + type: file + description: bigwig file containing genomic scores + pattern: "*.{bw,bigwig}" + - bed: + type: file + description: bed file containing genomic regions + pattern: "*.{bed}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - matrix: + type: file + description: | + gzipped matrix file needed by the plotHeatmap and plotProfile + deeptools utilities + pattern: "*.{computeMatrix.mat.gz}" + - table: + type: file + description: | + tabular file containing the scores of the generated matrix + pattern: "*.{computeMatrix.vals.mat.tab}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@jeremy1805" + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" diff --git a/software/deeptools/plotfingerprint/functions.nf b/software/deeptools/plotfingerprint/functions.nf index d25eea86..da9da093 100644 --- a/software/deeptools/plotfingerprint/functions.nf +++ b/software/deeptools/plotfingerprint/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/deeptools/plotfingerprint/main.nf b/software/deeptools/plotfingerprint/main.nf index 25d185e2..42d5e6a2 100644 --- a/software/deeptools/plotfingerprint/main.nf +++ b/software/deeptools/plotfingerprint/main.nf @@ -9,7 +9,7 @@ process DEEPTOOLS_PLOTFINGERPRINT { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/deeptools/plotfingerprint/meta.yml b/software/deeptools/plotfingerprint/meta.yml new file mode 100644 index 00000000..6b6f9d8e --- /dev/null +++ b/software/deeptools/plotfingerprint/meta.yml @@ -0,0 +1,61 @@ +name: deeptools_plotfingerprint +description: plots cumulative reads coverages by BAM file +keywords: + - plot + - fingerprint + - cumulative coverage + - bam +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bam: + type: file + description: One or more BAM files + pattern: "*.{bam}" + - bais: + type: file + description: Corresponding BAM file indexes + pattern: "*.bam.bai" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pdf: + type: file + description: | + Output figure containing resulting plot + pattern: "*.{plotFingerprint.pdf}" + - matrix: + type: file + description: | + Output file summarizing the read counts per bin + pattern: "*.{plotFingerprint.raw.txt}" + - metrics: + type: file + description: | + file containing BAM file quality metrics + pattern: "*.{qcmetrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" diff --git a/software/deeptools/plotheatmap/functions.nf b/software/deeptools/plotheatmap/functions.nf index d25eea86..da9da093 100644 --- a/software/deeptools/plotheatmap/functions.nf +++ b/software/deeptools/plotheatmap/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/deeptools/plotheatmap/main.nf b/software/deeptools/plotheatmap/main.nf index e59fcd05..552dc117 100644 --- a/software/deeptools/plotheatmap/main.nf +++ b/software/deeptools/plotheatmap/main.nf @@ -9,7 +9,7 @@ process DEEPTOOLS_PLOTHEATMAP { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/deeptools/plotheatmap/meta.yml b/software/deeptools/plotheatmap/meta.yml new file mode 100644 index 00000000..14311332 --- /dev/null +++ b/software/deeptools/plotheatmap/meta.yml @@ -0,0 +1,55 @@ +name: deeptools_plotheatmap +description: plots values produced by deeptools_computematrix as a heatmap +keywords: + - plot + - heatmap + - scores + - matrix +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - matrix: + type: file + description: | + gzipped matrix file produced by deeptools_ + computematrix deeptools utility + pattern: "*.{mat.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pdf: + type: file + description: | + Output figure containing resulting plot + pattern: "*.{plotHeatmap.pdf}" + - matrix: + type: file + description: | + File containing the matrix of values + used to generate the heatmap + pattern: "*.{plotHeatmap.mat.tab}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" diff --git a/software/deeptools/plotprofile/functions.nf b/software/deeptools/plotprofile/functions.nf index d25eea86..da9da093 100644 --- a/software/deeptools/plotprofile/functions.nf +++ b/software/deeptools/plotprofile/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/deeptools/plotprofile/main.nf b/software/deeptools/plotprofile/main.nf index 8b7cae1b..59bfacd3 100644 --- a/software/deeptools/plotprofile/main.nf +++ b/software/deeptools/plotprofile/main.nf @@ -9,7 +9,7 @@ process DEEPTOOLS_PLOTPROFILE { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/deeptools/plotprofile/meta.yml b/software/deeptools/plotprofile/meta.yml new file mode 100644 index 00000000..120280de --- /dev/null +++ b/software/deeptools/plotprofile/meta.yml @@ -0,0 +1,55 @@ +name: deeptools_plotprofile +description: plots values produced by deeptools_computematrix as a profile plot +keywords: + - plot + - profile + - scores + - matrix +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - matrix: + type: file + description: | + gzipped matrix file produced by deeptools_ + computematrix deeptools utility + pattern: "*.{mat.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pdf: + type: file + description: | + Output figure containing resulting plot + pattern: "*.{plotProfile.pdf}" + - matrix: + type: file + description: | + File containing the matrix of values + used to generate the profile + pattern: "*.{plotProfile.mat.tab}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" diff --git a/software/delly/call/functions.nf b/software/delly/call/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/delly/call/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/delly/call/main.nf b/software/delly/call/main.nf new file mode 100644 index 00000000..3bbda48a --- /dev/null +++ b/software/delly/call/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DELLY_CALL { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::delly=0.8.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/delly:0.8.7--he03298f_1" + } else { + container "quay.io/biocontainers/delly:0.8.7--he03298f_1" + } + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + + output: + tuple val(meta), path("*.bcf"), emit: bcf + tuple val(meta), path("*.csi"), emit: csi + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + delly \\ + call \\ + $options.args \\ + -o ${prefix}.bcf \\ + -g $fasta \\ + $bam \\ + + echo \$(delly --version 2>&1) | sed 's/^.*Delly //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/software/delly/call/meta.yml b/software/delly/call/meta.yml new file mode 100644 index 00000000..9fb79959 --- /dev/null +++ b/software/delly/call/meta.yml @@ -0,0 +1,55 @@ +name: delly_call +description: Call structural variants +keywords: + - genome + - structural + - variants + - bcf + +tools: + - delly: + description: Structural variant discovery by integrated paired-end and split-read analysis + homepage: https://github.com/dellytools/delly + documentation: https://github.com/dellytools/delly/blob/master/README.md + tool_dev_url: None + doi: "DOI:10.1093/bioinformatics/bts378" + licence: ["BSD-3-clause"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file from alignment must be sorted, indexed, and duplicate marked + pattern: "*.{bam}" + - fasta: + type: file + description: The reference fasta file + - fai: + type: file + description: Index of reference fasta file to identify split-reads + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bcf: + type: file + description: BCF format + pattern: "*.{bcf}" + - csi: + type: file + description: A generated csi index that matches the bcf output + pattern: "*.{bcf.csi}" + +authors: + - "@projectoriented" diff --git a/software/dsh/filterbed/functions.nf b/software/dsh/filterbed/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/software/dsh/filterbed/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/software/dsh/splitbed/functions.nf b/software/dsh/splitbed/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/software/dsh/splitbed/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/software/dshbio/filterbed/functions.nf b/software/dshbio/filterbed/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/dshbio/filterbed/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/dsh/filterbed/main.nf b/software/dshbio/filterbed/main.nf similarity index 76% rename from software/dsh/filterbed/main.nf rename to software/dshbio/filterbed/main.nf index 4bfda752..92aadc41 100644 --- a/software/dsh/filterbed/main.nf +++ b/software/dshbio/filterbed/main.nf @@ -4,18 +4,18 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] options = initOptions(params.options) -process DSH_FILTERBED { +process DSHBIO_FILTERBED { tag "${meta.id}" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::dsh-bio=2.0.3" : null) + conda (params.enable_conda ? "bioconda::dsh-bio=2.0.4" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.3--0" + container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.4--hdfd78af_0" } else { - container "quay.io/biocontainers/dsh-bio:2.0.3--0" + container "quay.io/biocontainers/dsh-bio:2.0.4--hdfd78af_0" } input: @@ -29,7 +29,8 @@ process DSH_FILTERBED { def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ - dsh-filter-bed \\ + dsh-bio \\ + filter-bed \\ $options.args \\ -i $bed \\ -o ${prefix}.bed.gz diff --git a/software/dsh/filterbed/meta.yml b/software/dshbio/filterbed/meta.yml similarity index 96% rename from software/dsh/filterbed/meta.yml rename to software/dshbio/filterbed/meta.yml index 4b3d5fb4..61626ead 100644 --- a/software/dsh/filterbed/meta.yml +++ b/software/dshbio/filterbed/meta.yml @@ -1,9 +1,9 @@ -name: dsh_filterbed +name: dshbio_filterbed description: Filter features in gzipped BED format keywords: - bed tools: - - dsh: + - dshbio: description: | Reads, features, variants, assemblies, alignments, genomic range trees, pangenome graphs, and a bunch of random command line tools for bioinformatics. LGPL version 3 diff --git a/software/dshbio/filtergff3/functions.nf b/software/dshbio/filtergff3/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/dshbio/filtergff3/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/dshbio/filtergff3/main.nf b/software/dshbio/filtergff3/main.nf new file mode 100644 index 00000000..bb3a4abd --- /dev/null +++ b/software/dshbio/filtergff3/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DSHBIO_FILTERGFF3 { + tag "${meta.id}" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::dsh-bio=2.0.4" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.4--hdfd78af_0" + } else { + container "quay.io/biocontainers/dsh-bio:2.0.4--hdfd78af_0" + } + + input: + tuple val(meta), path(gff3) + + output: + tuple val(meta), path("*.gff3.gz"), emit: gff3 + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + dsh-bio \\ + filter-gff3 \\ + $options.args \\ + -i $gff3 \\ + -o ${prefix}.gff3.gz + + echo \$(dsh-bio --version 2>&1) | grep -o 'dsh-bio-tools .*' | cut -f2 -d ' ' > ${software}.version.txt + """ +} diff --git a/software/dshbio/filtergff3/meta.yml b/software/dshbio/filtergff3/meta.yml new file mode 100644 index 00000000..3f89d71b --- /dev/null +++ b/software/dshbio/filtergff3/meta.yml @@ -0,0 +1,38 @@ +name: dshbio_filtergff3 +description: Filter features in gzipped GFF3 format +keywords: + - gff3 +tools: + - dshbio: + description: | + Reads, features, variants, assemblies, alignments, genomic range trees, pangenome + graphs, and a bunch of random command line tools for bioinformatics. LGPL version 3 + or later. + homepage: https://github.com/heuermh/dishevelled-bio + documentation: https://github.com/heuermh/dishevelled-bio +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff3: + type: file + description: Features in gzipped GFF3 format + pattern: "*.{gff3.gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff3: + type: file + description: Features in gzipped GFF3 format + pattern: "*.{gff3.gz}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@heuermh" diff --git a/software/dshbio/splitbed/functions.nf b/software/dshbio/splitbed/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/dshbio/splitbed/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/dsh/splitbed/main.nf b/software/dshbio/splitbed/main.nf similarity index 76% rename from software/dsh/splitbed/main.nf rename to software/dshbio/splitbed/main.nf index d9e0ef2a..233b5319 100644 --- a/software/dsh/splitbed/main.nf +++ b/software/dshbio/splitbed/main.nf @@ -4,18 +4,18 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] options = initOptions(params.options) -process DSH_SPLITBED { +process DSHBIO_SPLITBED { tag "${meta.id}" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::dsh-bio=2.0.3" : null) + conda (params.enable_conda ? "bioconda::dsh-bio=2.0.4" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.3--0" + container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.4--hdfd78af_0" } else { - container "quay.io/biocontainers/dsh-bio:2.0.3--0" + container "quay.io/biocontainers/dsh-bio:2.0.4--hdfd78af_0" } input: @@ -29,7 +29,8 @@ process DSH_SPLITBED { def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ - dsh-split-bed \\ + dsh-bio \\ + split-bed \\ $options.args \\ -p $prefix \\ -s '.bed.gz' \\ diff --git a/software/dsh/splitbed/meta.yml b/software/dshbio/splitbed/meta.yml similarity index 96% rename from software/dsh/splitbed/meta.yml rename to software/dshbio/splitbed/meta.yml index 9136efe7..f2257812 100644 --- a/software/dsh/splitbed/meta.yml +++ b/software/dshbio/splitbed/meta.yml @@ -1,9 +1,9 @@ -name: dsh_splitbed +name: dshbio_splitbed description: Split features in gzipped BED format keywords: - bed tools: - - dsh: + - dshbio: description: | Reads, features, variants, assemblies, alignments, genomic range trees, pangenome graphs, and a bunch of random command line tools for bioinformatics. LGPL version 3 diff --git a/software/dshbio/splitgff3/functions.nf b/software/dshbio/splitgff3/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/dshbio/splitgff3/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/dshbio/splitgff3/main.nf b/software/dshbio/splitgff3/main.nf new file mode 100644 index 00000000..62f72241 --- /dev/null +++ b/software/dshbio/splitgff3/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DSHBIO_SPLITGFF3 { + tag "${meta.id}" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::dsh-bio=2.0.4" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/dsh-bio:2.0.4--hdfd78af_0" + } else { + container "quay.io/biocontainers/dsh-bio:2.0.4--hdfd78af_0" + } + + input: + tuple val(meta), path(gff3) + + output: + tuple val(meta), path("*.gff3.gz"), emit: gff3 + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + dsh-bio \\ + split-gff3 \\ + $options.args \\ + -p $prefix \\ + -s '.gff3.gz' \\ + -i $gff3 + + echo \$(dsh-bio --version 2>&1) | grep -o 'dsh-bio-tools .*' | cut -f2 -d ' ' > ${software}.version.txt + """ +} diff --git a/software/dshbio/splitgff3/meta.yml b/software/dshbio/splitgff3/meta.yml new file mode 100644 index 00000000..46118bb7 --- /dev/null +++ b/software/dshbio/splitgff3/meta.yml @@ -0,0 +1,38 @@ +name: dshbio_splitgff3 +description: Split features in gzipped GFF3 format +keywords: + - gff3 +tools: + - dshbio: + description: | + Reads, features, variants, assemblies, alignments, genomic range trees, pangenome + graphs, and a bunch of random command line tools for bioinformatics. LGPL version 3 + or later. + homepage: https://github.com/heuermh/dishevelled-bio + documentation: https://github.com/heuermh/dishevelled-bio +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff3: + type: file + description: Features in gzipped GFF3 format to split + pattern: "*.{gff3.gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff3: + type: file + description: Features in split gzipped GFF3 formatted files + pattern: "*.{gff3.gz}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@heuermh" diff --git a/software/ensemblvep/Dockerfile b/software/ensemblvep/Dockerfile new file mode 100644 index 00000000..ac1b4691 --- /dev/null +++ b/software/ensemblvep/Dockerfile @@ -0,0 +1,30 @@ +FROM nfcore/base:1.14 +LABEL \ + author="Maxime Garcia" \ + description="VEP image for nf-core pipelines" \ + maintainer="maxime.garcia@scilifelab.se" + +# Install the conda environment +COPY environment.yml / +RUN conda env create -f /environment.yml && conda clean -a + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-vep-104.3/bin:$PATH + +# Setup default ARG variables +ARG GENOME=GRCh38 +ARG SPECIES=homo_sapiens +ARG VEP_VERSION=99 + +# Download Genome +RUN vep_install \ + -a c \ + -c .vep \ + -s ${SPECIES} \ + -y ${GENOME} \ + --CACHE_VERSION ${VEP_VERSION} \ + --CONVERT \ + --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-vep-104.3 > nf-core-vep-104.3.yml diff --git a/software/ensemblvep/build.sh b/software/ensemblvep/build.sh new file mode 100755 index 00000000..5fcb91df --- /dev/null +++ b/software/ensemblvep/build.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build and push all containers + +build_push() { + GENOME=$1 + SPECIES=$2 + VEP_VERSION=$3 + VEP_TAG=$4 + + docker build \ + -t nfcore/vep:${VEP_TAG}.${GENOME} \ + software/vep/. \ + --build-arg GENOME=${GENOME} \ + --build-arg SPECIES=${SPECIES} \ + --build-arg VEP_VERSION=${VEP_VERSION} + + docker push nfcore/vep:${VEP_TAG}.${GENOME} +} + +build_push "GRCh37" "homo_sapiens" "104" "104.3" +build_push "GRCh38" "homo_sapiens" "104" "104.3" +build_push "GRCm38" "mus_musculus" "102" "104.3" +build_push "GRCm39" "mus_musculus" "104" "104.3" +build_push "CanFam3.1" "canis_lupus_familiaris" "104" "104.3" +build_push "WBcel235" "caenorhabditis_elegans" "104" "104.3" diff --git a/software/ensemblvep/environment.yml b/software/ensemblvep/environment.yml new file mode 100644 index 00000000..c0731c26 --- /dev/null +++ b/software/ensemblvep/environment.yml @@ -0,0 +1,10 @@ +# You can use this file to create a conda environment for this module: +# conda env create -f environment.yml +name: nf-core-vep-104.3 +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - bioconda::ensembl-vep=104.3 diff --git a/software/ensemblvep/functions.nf b/software/ensemblvep/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/ensemblvep/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/ensemblvep/main.nf b/software/ensemblvep/main.nf new file mode 100644 index 00000000..c2194e77 --- /dev/null +++ b/software/ensemblvep/main.nf @@ -0,0 +1,62 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) +params.use_cache = false +params.vep_tag = "" + +process ENSEMBLVEP { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::ensembl-vep=104.3" : null) + if (params.use_cache) { + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ensembl-vep:104.3--pl5262h4a94de4_0" + } else { + container "quay.io/biocontainers/ensembl-vep:104.3--pl5262h4a94de4_0" + } + } else { + container "nfcore/vep:${params.vep_tag}" + } + + input: + tuple val(meta), path(vcf) + val genome + val species + val cache_version + path cache + + output: + tuple val(meta), path("*.ann.vcf"), emit: vcf + path "*.summary.html" , emit: report + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + dir_cache = params.use_cache ? "\${PWD}/${cache}" : "/.vep" + """ + mkdir $prefix + + vep \\ + -i $vcf \\ + -o ${prefix}.ann.vcf \\ + $options.args \\ + --assembly $genome \\ + --species $species \\ + --cache \\ + --cache_version $cache_version \\ + --dir_cache $dir_cache \\ + --fork $task.cpus \\ + --format vcf \\ + --stats_file ${prefix}.summary.html + + rm -rf $prefix + + echo \$(vep --help 2>&1) > ${software}.version.txt + """ +} diff --git a/software/ensemblvep/meta.yml b/software/ensemblvep/meta.yml new file mode 100644 index 00000000..5eb111e9 --- /dev/null +++ b/software/ensemblvep/meta.yml @@ -0,0 +1,64 @@ +name: ENSEMBLVEP +description: Ensembl Variant Effect Predictor (VEP) +keywords: + - annotation +tools: + - ensemblvep: + description: | + VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs + or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. + homepage: https://www.ensembl.org/info/docs/tools/vep/index.html + documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html +params: + - use_cache: + type: boolean + description: | + Enable the usage of containers with cache + Does not work with conda + - vep_tag: + type: value + description: | + Specify the tag for the container + https://hub.docker.com/r/nfcore/vep/tags +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - genome: + type: value + description: | + which genome to annotate with + - species: + type: value + description: | + which species to annotate with + - cache_version: + type: value + description: | + which version of the cache to annotate with + - cache: + type: file + description: | + path to VEP cache (optional) +output: + - vcf: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - report: + type: file + description: VEP report file + pattern: "*.html" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@maxulysse" diff --git a/software/fastp/functions.nf b/software/fastp/functions.nf index d25eea86..da9da093 100644 --- a/software/fastp/functions.nf +++ b/software/fastp/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/fastp/main.nf b/software/fastp/main.nf index d192c725..6d703615 100644 --- a/software/fastp/main.nf +++ b/software/fastp/main.nf @@ -9,7 +9,7 @@ process FASTP { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::fastp=0.20.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/fastp/meta.yml b/software/fastp/meta.yml index bbf2f1ca..1fc3dfb6 100644 --- a/software/fastp/meta.yml +++ b/software/fastp/meta.yml @@ -5,7 +5,7 @@ keywords: - quality control - fastq tools: - - fastq: + - fastp: description: | A tool designed to provide fast all-in-one preprocessing for FastQ files. This tool is developed in C++ with multithreading supported to afford high performance. documentation: https://github.com/OpenGene/fastp diff --git a/software/fastqc/functions.nf b/software/fastqc/functions.nf index d25eea86..da9da093 100644 --- a/software/fastqc/functions.nf +++ b/software/fastqc/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/fastqc/main.nf b/software/fastqc/main.nf index 4e847876..39c327b2 100644 --- a/software/fastqc/main.nf +++ b/software/fastqc/main.nf @@ -9,7 +9,7 @@ process FASTQC { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -29,7 +29,7 @@ process FASTQC { script: // Add soft-links to original FastQs for consistent naming in pipeline def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz diff --git a/software/fasttree/functions.nf b/software/fasttree/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/fasttree/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/fasttree/main.nf b/software/fasttree/main.nf new file mode 100644 index 00000000..f0bacb87 --- /dev/null +++ b/software/fasttree/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process FASTTREE { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::fasttree=2.1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/fasttree:2.1.10--h516909a_4" + } else { + container "quay.io/biocontainers/fasttree:2.1.10--h516909a_4" + } + + input: + path alignment + + output: + path "*.tre", emit: phylogeny + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + fasttree \\ + $options.args \\ + -log fasttree_phylogeny.tre.log \\ + -nt $alignment \\ + > fasttree_phylogeny.tre + + echo \$(fasttree -help 2>&1) | head -1 | sed 's/^FastTree \\([0-9\\.]*\\) .*\$/\\1/' > ${software}.version.txt + """ +} diff --git a/software/fasttree/meta.yml b/software/fasttree/meta.yml new file mode 100644 index 00000000..5912395d --- /dev/null +++ b/software/fasttree/meta.yml @@ -0,0 +1,32 @@ +name: fasttree +description: Produces a Newick format phylogeny from a multiple sequence alignment. Capable of bacterial genome size alignments. +keywords: + - phylogeny + - newick +tools: + - fasttree: + description: FastTree infers approximately-maximum-likelihood phylogenetic trees from alignments of nucleotide or protein sequences + homepage: http://www.microbesonline.org/fasttree/ + documentation: http://www.microbesonline.org/fasttree/#Usage + tool_dev_url: None + doi: "" + licence: ['GPL v2'] + +input: + - alignment: + type: file + description: A FASTA format multiple sequence alignment file + pattern: "*.{fasta,fas,fa,mfa}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - phylogeny: + type: file + description: A phylogeny in Newick format + pattern: "*.{tre}" + +authors: + - "@aunderwo" diff --git a/software/fgbio/callmolecularconsensusreads/functions.nf b/software/fgbio/callmolecularconsensusreads/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/fgbio/callmolecularconsensusreads/functions.nf +++ b/software/fgbio/callmolecularconsensusreads/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/fgbio/callmolecularconsensusreads/main.nf b/software/fgbio/callmolecularconsensusreads/main.nf index 5e5bc577..a530ba55 100644 --- a/software/fgbio/callmolecularconsensusreads/main.nf +++ b/software/fgbio/callmolecularconsensusreads/main.nf @@ -8,7 +8,7 @@ process FGBIO_CALLMOLECULARCONSENSUSREADS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::fgbio=1.3.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/fgbio/sortbam/functions.nf b/software/fgbio/sortbam/functions.nf index f177f0c8..da9da093 100644 --- a/software/fgbio/sortbam/functions.nf +++ b/software/fgbio/sortbam/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/fgbio/sortbam/main.nf b/software/fgbio/sortbam/main.nf index 4beeaf5e..798d5f23 100644 --- a/software/fgbio/sortbam/main.nf +++ b/software/fgbio/sortbam/main.nf @@ -8,7 +8,7 @@ process FGBIO_SORTBAM { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::fgbio=1.3.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/flash/functions.nf b/software/flash/functions.nf index 779feec6..da9da093 100644 --- a/software/flash/functions.nf +++ b/software/flash/functions.nf @@ -1,50 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/flash/main.nf b/software/flash/main.nf index 399a2705..acdc10a7 100644 --- a/software/flash/main.nf +++ b/software/flash/main.nf @@ -9,8 +9,8 @@ process FLASH { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - conda (params.enable_conda ? "bioconda::flash=1.2.11" : null) + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::flash=1.2.11" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/flash:1.2.11--hed695b0_5" } else { diff --git a/software/gatk4/applybqsr/functions.nf b/software/gatk4/applybqsr/functions.nf index f177f0c8..da9da093 100644 --- a/software/gatk4/applybqsr/functions.nf +++ b/software/gatk4/applybqsr/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/applybqsr/main.nf b/software/gatk4/applybqsr/main.nf index 9663166f..19b8c3d6 100644 --- a/software/gatk4/applybqsr/main.nf +++ b/software/gatk4/applybqsr/main.nf @@ -9,7 +9,7 @@ process GATK4_APPLYBQSR { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -19,11 +19,11 @@ process GATK4_APPLYBQSR { } input: - tuple val(meta), path(bam), path(bqsr_table) - path fasta - path fastaidx - path dict - path intervalsBed + tuple val(meta), path(bam), path(bai), path(bqsr_table) + path fasta + path fastaidx + path dict + path intervals output: tuple val(meta), path("*.bam"), emit: bam @@ -32,17 +32,16 @@ process GATK4_APPLYBQSR { script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - def intervalsCommand = intervalsBed ? "-L ${intervalsBed}" : "" - + def interval = intervals ? "-L ${intervals}" : "" """ gatk ApplyBQSR \\ -R $fasta \\ -I $bam \\ --bqsr-recal-file $bqsr_table \\ - $intervalsCommand \\ + $interval \\ -O ${prefix}.bam \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/baserecalibrator/functions.nf b/software/gatk4/baserecalibrator/functions.nf index f177f0c8..da9da093 100644 --- a/software/gatk4/baserecalibrator/functions.nf +++ b/software/gatk4/baserecalibrator/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/baserecalibrator/main.nf b/software/gatk4/baserecalibrator/main.nf index 09c2b5e8..4e2730f2 100644 --- a/software/gatk4/baserecalibrator/main.nf +++ b/software/gatk4/baserecalibrator/main.nf @@ -9,7 +9,7 @@ process GATK4_BASERECALIBRATOR { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -19,7 +19,7 @@ process GATK4_BASERECALIBRATOR { } input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path fasta path fastaidx path dict @@ -45,6 +45,6 @@ process GATK4_BASERECALIBRATOR { $options.args \ -O ${prefix}.table - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/bedtointervallist/functions.nf b/software/gatk4/bedtointervallist/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/bedtointervallist/functions.nf +++ b/software/gatk4/bedtointervallist/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/bedtointervallist/main.nf b/software/gatk4/bedtointervallist/main.nf index b10254d1..6d98e1d6 100644 --- a/software/gatk4/bedtointervallist/main.nf +++ b/software/gatk4/bedtointervallist/main.nf @@ -9,7 +9,7 @@ process GATK4_BEDTOINTERVALLIST { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::gatk4=4.1.9.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -28,7 +28,7 @@ process GATK4_BEDTOINTERVALLIST { script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ gatk BedToIntervalList \\ -I $bed \\ @@ -36,6 +36,6 @@ process GATK4_BEDTOINTERVALLIST { -O ${prefix}.interval_list \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/createsequencedictionary/functions.nf b/software/gatk4/createsequencedictionary/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/createsequencedictionary/functions.nf +++ b/software/gatk4/createsequencedictionary/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/createsequencedictionary/main.nf b/software/gatk4/createsequencedictionary/main.nf index c67e2cbf..3cf5543a 100644 --- a/software/gatk4/createsequencedictionary/main.nf +++ b/software/gatk4/createsequencedictionary/main.nf @@ -9,7 +9,7 @@ process GATK4_CREATESEQUENCEDICTIONARY { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::gatk4=4.1.9.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -40,6 +40,6 @@ process GATK4_CREATESEQUENCEDICTIONARY { --URI $fasta \\ $options.args - echo \$(gatk CreateSequenceDictionary --version 2>&1) | sed 's/^.*(GATK) v//; s/ HTSJDK.*\$//' > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/fastqtosam/functions.nf b/software/gatk4/fastqtosam/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/fastqtosam/functions.nf +++ b/software/gatk4/fastqtosam/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/fastqtosam/main.nf b/software/gatk4/fastqtosam/main.nf index 4e37a4c5..e00f34f5 100644 --- a/software/gatk4/fastqtosam/main.nf +++ b/software/gatk4/fastqtosam/main.nf @@ -9,7 +9,7 @@ process GATK4_FASTQTOSAM { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -35,6 +35,7 @@ process GATK4_FASTQTOSAM { -O ${prefix}.bam \\ -SM $prefix \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/haplotypecaller/functions.nf b/software/gatk4/haplotypecaller/functions.nf index f177f0c8..da9da093 100644 --- a/software/gatk4/haplotypecaller/functions.nf +++ b/software/gatk4/haplotypecaller/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/haplotypecaller/main.nf b/software/gatk4/haplotypecaller/main.nf index d8938297..c451de7f 100644 --- a/software/gatk4/haplotypecaller/main.nf +++ b/software/gatk4/haplotypecaller/main.nf @@ -9,7 +9,7 @@ process GATK4_HAPLOTYPECALLER { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -47,6 +47,6 @@ process GATK4_HAPLOTYPECALLER { -O ${prefix}.vcf.gz \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/intervallisttools/functions.nf b/software/gatk4/intervallisttools/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/gatk4/intervallisttools/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/gatk4/intervallisttools/main.nf b/software/gatk4/intervallisttools/main.nf new file mode 100644 index 00000000..b2486eac --- /dev/null +++ b/software/gatk4/intervallisttools/main.nf @@ -0,0 +1,53 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GATK4_INTERVALLISTTOOLS { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/gatk4:4.2.0.0--hdfd78af_1" + } else { + container "quay.io/biocontainers/gatk4:4.2.0.0--hdfd78af_1" + } + + input: + tuple val(meta), path(interval_list) + + output: + tuple val(meta), path("*_split/*/*.interval_list"), emit: interval_list + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + + mkdir ${prefix}_split + + gatk \\ + IntervalListTools \\ + -I ${interval_list} \\ + -O ${prefix}_split \\ + $options.args + + python3 <&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/gatk4/intervallisttools/meta.yml b/software/gatk4/intervallisttools/meta.yml new file mode 100644 index 00000000..efe31da1 --- /dev/null +++ b/software/gatk4/intervallisttools/meta.yml @@ -0,0 +1,46 @@ +name: gatk4_intervallisttools + +description: Splits the interval list file into unique, equally-sized interval files and place it under a directory +keywords: + - sort + - bed + - interval list +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + doi: 10.1158/1538-7445.AM2017-3590 + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + + - interval_list: + type: file + description: Interval list file + pattern: "*.interval_list" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - interval_list: + type: file + description: Interval list files + pattern: "*.interval_list" + +authors: + - "@praveenraj2018" diff --git a/software/gatk4/markduplicates/functions.nf b/software/gatk4/markduplicates/functions.nf index f177f0c8..da9da093 100644 --- a/software/gatk4/markduplicates/functions.nf +++ b/software/gatk4/markduplicates/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/markduplicates/main.nf b/software/gatk4/markduplicates/main.nf index 8d70c8ca..6df2a47c 100644 --- a/software/gatk4/markduplicates/main.nf +++ b/software/gatk4/markduplicates/main.nf @@ -9,7 +9,7 @@ process GATK4_MARKDUPLICATES { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -39,6 +39,6 @@ process GATK4_MARKDUPLICATES { --OUTPUT ${prefix}.bam \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/mergebamalignment/functions.nf b/software/gatk4/mergebamalignment/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/mergebamalignment/functions.nf +++ b/software/gatk4/mergebamalignment/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/mergebamalignment/main.nf b/software/gatk4/mergebamalignment/main.nf index bc8a62c4..b65f4653 100644 --- a/software/gatk4/mergebamalignment/main.nf +++ b/software/gatk4/mergebamalignment/main.nf @@ -2,14 +2,14 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process GATK4_MERGEBAMALIGNMENT { tag "$meta.id" label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -20,25 +20,25 @@ process GATK4_MERGEBAMALIGNMENT { input: tuple val(meta), path(aligned) - path unmapped - path fasta - path dict + path unmapped + path fasta + path dict output: - tuple val(meta), path('*.merged.bam'), emit: bam - path '*.version.txt' , emit: version + tuple val(meta), path('*.bam'), emit: bam + path '*.version.txt' , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ gatk MergeBamAlignment \\ ALIGNED=$aligned \\ UNMAPPED=$unmapped \\ R=$fasta \\ - O=${prefix}.merged.bam \\ + O=${prefix}.bam \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/mergevcfs/functions.nf b/software/gatk4/mergevcfs/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/mergevcfs/functions.nf +++ b/software/gatk4/mergevcfs/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/mergevcfs/main.nf b/software/gatk4/mergevcfs/main.nf index 913c56e3..9feb8187 100644 --- a/software/gatk4/mergevcfs/main.nf +++ b/software/gatk4/mergevcfs/main.nf @@ -9,7 +9,7 @@ process GATK4_MERGEVCFS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::gatk4=4.1.9.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -20,16 +20,17 @@ process GATK4_MERGEVCFS { input: tuple val(meta), path(vcfs) - path(ref_dict) - val use_ref_dict + path ref_dict + val use_ref_dict output: - tuple val(meta), path('*.vcf.gz') , emit: vcf - path '*.version.txt' , emit: version + tuple val(meta), path('*.vcf.gz'), emit: vcf + path '*.version.txt' , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + // Make list of VCFs to merge def input = "" for (vcf in vcfs) { @@ -39,10 +40,10 @@ process GATK4_MERGEVCFS { """ gatk MergeVcfs \\ $input \\ - O=${prefix}.merged.vcf.gz \\ + O=${prefix}.vcf.gz \\ $ref \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/revertsam/functions.nf b/software/gatk4/revertsam/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/revertsam/functions.nf +++ b/software/gatk4/revertsam/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/revertsam/main.nf b/software/gatk4/revertsam/main.nf index 150ccf60..a3bf3004 100644 --- a/software/gatk4/revertsam/main.nf +++ b/software/gatk4/revertsam/main.nf @@ -9,7 +9,7 @@ process GATK4_REVERTSAM { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::gatk4=4.1.9.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -22,18 +22,18 @@ process GATK4_REVERTSAM { tuple val(meta), path(bam) output: - tuple val(meta), path('*.bam') , emit: bam - path '*.version.txt' , emit: version + tuple val(meta), path('*.bam'), emit: bam + path '*.version.txt' , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ gatk RevertSam \\ I=$bam \\ O=${prefix}.reverted.bam \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/samtofastq/functions.nf b/software/gatk4/samtofastq/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/samtofastq/functions.nf +++ b/software/gatk4/samtofastq/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/samtofastq/main.nf b/software/gatk4/samtofastq/main.nf index ff4e7016..00d5d359 100644 --- a/software/gatk4/samtofastq/main.nf +++ b/software/gatk4/samtofastq/main.nf @@ -9,7 +9,7 @@ process GATK4_SAMTOFASTQ { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::gatk4=4.1.9.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -22,19 +22,19 @@ process GATK4_SAMTOFASTQ { tuple val(meta), path(bam) output: - tuple val(meta), path('*.fastq.gz') , emit: fastq - path '*.version.txt' , emit: version + tuple val(meta), path('*.fastq.gz'), emit: fastq + path '*.version.txt' , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" - def output = meta.single_end ? "FASTQ=${prefix}.fastq.gz" : "FASTQ=${prefix}_1.fastq.gz SECOND_END_FASTQ=${prefix}_2.fastq.gz" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def output = meta.single_end ? "FASTQ=${prefix}.fastq.gz" : "FASTQ=${prefix}_1.fastq.gz SECOND_END_FASTQ=${prefix}_2.fastq.gz" """ gatk SamToFastq \\ I=$bam \\ $output \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/splitncigarreads/functions.nf b/software/gatk4/splitncigarreads/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/splitncigarreads/functions.nf +++ b/software/gatk4/splitncigarreads/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/splitncigarreads/main.nf b/software/gatk4/splitncigarreads/main.nf index dd80e934..5c7a6ca8 100644 --- a/software/gatk4/splitncigarreads/main.nf +++ b/software/gatk4/splitncigarreads/main.nf @@ -9,7 +9,7 @@ process GATK4_SPLITNCIGARREADS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::gatk4=4.1.9.0' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -23,19 +23,19 @@ process GATK4_SPLITNCIGARREADS { tuple path(fasta), path(fai), path(dict) output: - tuple val(meta), path('*.split_cigar.bam'), emit: bam - path '*.version.txt' , emit: version + tuple val(meta), path('*.bam'), emit: bam + path '*.version.txt' , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ gatk SplitNCigarReads \\ -R $fasta \\ -I $bam \\ - -O ${prefix}.split_cigar.bam \\ + -O ${prefix}.bam \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/gatk4/variantfiltration/functions.nf b/software/gatk4/variantfiltration/functions.nf index d25eea86..da9da093 100644 --- a/software/gatk4/variantfiltration/functions.nf +++ b/software/gatk4/variantfiltration/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gatk4/variantfiltration/main.nf b/software/gatk4/variantfiltration/main.nf index 698dfb4c..82593d18 100644 --- a/software/gatk4/variantfiltration/main.nf +++ b/software/gatk4/variantfiltration/main.nf @@ -2,14 +2,14 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process GATK4_VARIANTFILTRATION { tag "$meta.id" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::gatk4=4.2.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -20,9 +20,9 @@ process GATK4_VARIANTFILTRATION { input: tuple val(meta), path(vcf) - path fasta - path fai - path dict + path fasta + path fai + path dict output: tuple val(meta), path("*.vcf"), emit: vcf @@ -39,6 +39,6 @@ process GATK4_VARIANTFILTRATION { -O ${prefix}.vcf \\ $options.args - gatk --version | grep Picard | sed "s/Picard Version: //g" > ${software}.version.txt + echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/genmap/index/functions.nf b/software/genmap/index/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/genmap/index/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/genmap/index/main.nf b/software/genmap/index/main.nf new file mode 100644 index 00000000..8166315e --- /dev/null +++ b/software/genmap/index/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GENMAP_INDEX { + tag '$fasta' + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::genmap=1.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/genmap:1.3.0--h1b792b2_1" + } else { + container "quay.io/biocontainers/genmap:1.3.0--h1b792b2_1" + } + + input: + path fasta + + output: + path "genmap" , emit: index + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + genmap \\ + index \\ + -F $fasta \\ + -I genmap + + echo \$(genmap --version 2>&1) | sed 's/GenMap version: //; s/SeqAn.*\$//' > ${software}.version.txt + """ +} diff --git a/software/genmap/index/meta.yml b/software/genmap/index/meta.yml new file mode 100644 index 00000000..332c3ba7 --- /dev/null +++ b/software/genmap/index/meta.yml @@ -0,0 +1,31 @@ +name: genmap_index +description: create index file for genmap +keywords: + - index +tools: + - genmap: + description: Ultra-fast computation of genome mappability. + homepage: https://github.com/cpockrandt/genmap + documentation: https://github.com/cpockrandt/genmap + tool_dev_url: https://github.com/cpockrandt/genmap + doi: "10.1093/bioinformatics/btaa222" + licence: ['BSD'] + +input: + - fasta: + type: file + description: fasta file + pattern: "*.{fasta,fa}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - index: + type: index + description: Genmap index file + pattern: "{index}.*" + +authors: + - "@jianhong" diff --git a/software/genmap/mappability/functions.nf b/software/genmap/mappability/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/genmap/mappability/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/genmap/mappability/main.nf b/software/genmap/mappability/main.nf new file mode 100644 index 00000000..8587c950 --- /dev/null +++ b/software/genmap/mappability/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GENMAP_MAPPABILITY { + tag '$fasta' + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::genmap=1.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/genmap:1.3.0--h1b792b2_1" + } else { + container "quay.io/biocontainers/genmap:1.3.0--h1b792b2_1" + } + + input: + path index + + output: + path "*.wig" , optional:true, emit: wig + path "*.bedgraph" , optional:true, emit: bedgraph + path "*.txt" , optional:true, emit: txt + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + genmap \\ + map \\ + $options.args \\ + -I $index \\ + -O mappability + + echo \$(genmap --version 2>&1) | sed 's/GenMap version: //; s/SeqAn.*\$//' > ${software}.version.txt + """ +} diff --git a/software/genmap/mappability/meta.yml b/software/genmap/mappability/meta.yml new file mode 100644 index 00000000..851119c9 --- /dev/null +++ b/software/genmap/mappability/meta.yml @@ -0,0 +1,42 @@ +name: genmap_mappability +description: create mappability file for a genome +keywords: + - mappability +tools: + - genmap: + description: Ultra-fast computation of genome mappability. + homepage: https://github.com/cpockrandt/genmap + documentation: https://github.com/cpockrandt/genmap + tool_dev_url: https://github.com/cpockrandt/genmap + doi: "10.1093/bioinformatics/btaa222" + licence: ['BSD'] + +input: + - fasta: + type: file + description: fasta file + pattern: "*.{fasta,fa}" + - index: + type: file + description: index file + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - wig: + type: file + description: genmap wig mappability file + pattern: "*.wig" + - bedgraph: + type: file + description: genmap bedgraph mappability file + pattern: "*.bedgraph" + - txt: + type: file + description: genmap text mappability file + pattern: "*.txt" + +authors: + - "@jianhong" diff --git a/software/gffread/functions.nf b/software/gffread/functions.nf index d25eea86..da9da093 100644 --- a/software/gffread/functions.nf +++ b/software/gffread/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gffread/main.nf b/software/gffread/main.nf index e9290888..6c5aecbc 100644 --- a/software/gffread/main.nf +++ b/software/gffread/main.nf @@ -9,7 +9,7 @@ process GFFREAD { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::gffread=0.12.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/gffread/meta.yml b/software/gffread/meta.yml new file mode 100644 index 00000000..63d281f5 --- /dev/null +++ b/software/gffread/meta.yml @@ -0,0 +1,43 @@ +name: gffread +description: Validate, filter, convert and perform various other operations on GFF files +keywords: + - gff + - conversion + - validation +tools: + - gffread: + description: GFF/GTF utility providing format conversions, region filtering, FASTA sequence extraction and more. + homepage: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + documentation: http://ccb.jhu.edu/software/stringtie/gff.shtml#gffread + tool_dev_url: https://github.com/gpertea/gffread + doi: 10.12688/f1000research.23297.1 + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gff: + type: file + description: A GFF file in either the GFF3 or GFF2 format. + patter: "*.gff" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gtf: + type: file + description: GTF file resulting from the conversion of the GFF input file + pattern: "*.gtf" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@emiller88" diff --git a/software/graphmap2/align/functions.nf b/software/graphmap2/align/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/graphmap2/align/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/graphmap2/align/main.nf b/software/graphmap2/align/main.nf new file mode 100644 index 00000000..0ee4c02b --- /dev/null +++ b/software/graphmap2/align/main.nf @@ -0,0 +1,46 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GRAPHMAP2_ALIGN { + tag "$meta.id" + label 'process_medium' + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::graphmap=0.6.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/graphmap:0.6.3--he513fc3_0" + } else { + container "quay.io/biocontainers/graphmap:0.6.3--he513fc3_0" + } + + input: + tuple val(meta), path(reads) + path fasta + path index + + output: + tuple val(meta), path("*.sam"), emit: sam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + graphmap2 \\ + align \\ + -t $task.cpus \\ + -r $fasta \\ + -i $index \\ + -d $reads \\ + -o ${prefix}.sam \\ + $options.args + + echo \$(graphmap2 align 2>&1) | sed 's/^.*Version: v//; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/graphmap2/align/meta.yml b/software/graphmap2/align/meta.yml new file mode 100644 index 00000000..da773ed2 --- /dev/null +++ b/software/graphmap2/align/meta.yml @@ -0,0 +1,50 @@ +name: graphmap2_align +description: A versatile pairwise aligner for genomic and spliced nucleotide sequences +keywords: + - align + - fasta + - fastq + - genome + - reference +tools: + - graphmap2: + description: | + A versatile pairwise aligner for genomic and spliced nucleotide sequences. + homepage: https://github.com/lbcb-sci/graphmap2 + documentation: https://github.com/lbcb-sci/graphmap2#graphmap2---a-highly-sensitive-and-accurate-mapper-for-long-error-prone-reads +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: | + List of input FASTQ files + and paired-end data, respectively. + - fasta: + type: file + description: | + Reference database in FASTA format. + - index: + type: file + description: | + FASTA index in gmidx. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sam: + type: file + description: Alignment in SAM format + pattern: "*.sam" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/software/graphmap2/index/functions.nf b/software/graphmap2/index/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/graphmap2/index/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/graphmap2/index/main.nf b/software/graphmap2/index/main.nf new file mode 100644 index 00000000..17811d4c --- /dev/null +++ b/software/graphmap2/index/main.nf @@ -0,0 +1,39 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GRAPHMAP2_INDEX { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:['']) } + + conda (params.enable_conda ? "bioconda::graphmap=0.6.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/graphmap:0.6.3--he513fc3_0" + } else { + container "quay.io/biocontainers/graphmap:0.6.3--he513fc3_0" + } + + input: + path fasta + + output: + path "*.gmidx" , emit: index + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + graphmap2 \\ + align \\ + -t $task.cpus \\ + -I \\ + $options.args \\ + -r $fasta + + echo \$(graphmap2 align 2>&1) | sed 's/^.*Version: v//; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/graphmap2/index/meta.yml b/software/graphmap2/index/meta.yml new file mode 100644 index 00000000..b74f985a --- /dev/null +++ b/software/graphmap2/index/meta.yml @@ -0,0 +1,29 @@ +name: graphmap2_index +description: A versatile pairwise aligner for genomic and spliced nucleotide sequences +keywords: + - index + - fasta + - reference +tools: + - graphmap2: + description: | + A versatile pairwise aligner for genomic and spliced nucleotide sequences. + homepage: https://github.com/lbcb-sci/graphmap2 + documentation: https://github.com/lbcb-sci/graphmap2#graphmap2---a-highly-sensitive-and-accurate-mapper-for-long-error-prone-reads +input: + - fasta: + type: file + description: | + Reference database in FASTA format. +output: + - gmidx: + type: file + description: Graphmap2 fasta index in gmidx format + pattern: "*.gmidx" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/software/gubbins/functions.nf b/software/gubbins/functions.nf index f177f0c8..da9da093 100644 --- a/software/gubbins/functions.nf +++ b/software/gubbins/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gubbins/main.nf b/software/gubbins/main.nf index 536aa2bd..9129d14b 100644 --- a/software/gubbins/main.nf +++ b/software/gubbins/main.nf @@ -8,7 +8,7 @@ process GUBBINS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::gubbins=2.4.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/gunzip/functions.nf b/software/gunzip/functions.nf index d25eea86..da9da093 100644 --- a/software/gunzip/functions.nf +++ b/software/gunzip/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/gunzip/main.nf b/software/gunzip/main.nf index d6bbe045..29248796 100644 --- a/software/gunzip/main.nf +++ b/software/gunzip/main.nf @@ -9,7 +9,7 @@ process GUNZIP { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/hisat2/align/functions.nf b/software/hisat2/align/functions.nf index d25eea86..da9da093 100644 --- a/software/hisat2/align/functions.nf +++ b/software/hisat2/align/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/hisat2/align/main.nf b/software/hisat2/align/main.nf index fc04da27..17547c91 100644 --- a/software/hisat2/align/main.nf +++ b/software/hisat2/align/main.nf @@ -11,7 +11,7 @@ process HISAT2_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::hisat2=2.2.0 bioconda::samtools=1.10" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/hisat2/build/functions.nf b/software/hisat2/build/functions.nf index d25eea86..da9da093 100644 --- a/software/hisat2/build/functions.nf +++ b/software/hisat2/build/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/hisat2/build/main.nf b/software/hisat2/build/main.nf index 6d088c91..ce8bfb26 100644 --- a/software/hisat2/build/main.nf +++ b/software/hisat2/build/main.nf @@ -9,9 +9,10 @@ def VERSION = '2.2.0' process HISAT2_BUILD { tag "$fasta" label 'process_high' + label 'process_high_memory' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::hisat2=2.2.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -26,7 +27,7 @@ process HISAT2_BUILD { path splicesites output: - path "hisat2", emit: index + path "hisat2" , emit: index path "*.version.txt", emit: version script: @@ -38,17 +39,18 @@ process HISAT2_BUILD { avail_mem = task.memory.toGiga() } - def extract_exons = '' def ss = '' def exon = '' - if (avail_mem > params.hisat_build_memory) { - log.info "[HISAT2 index build] Over ${params.hisat_build_memory} GB available, so using splice sites and exons in HISAT2 index" + def extract_exons = '' + def hisat2_build_memory = params.hisat2_build_memory ? (params.hisat2_build_memory as nextflow.util.MemoryUnit).toGiga() : 0 + if (avail_mem >= hisat2_build_memory) { + log.info "[HISAT2 index build] At least ${hisat2_build_memory} GB available, so using splice sites and exons to build HISAT2 index" extract_exons = "hisat2_extract_exons.py $gtf > ${gtf.baseName}.exons.txt" ss = "--ss $splicesites" exon = "--exon ${gtf.baseName}.exons.txt" } else { - log.info "[HISAT2 index build] Less than ${params.hisat_build_memory} GB available, so NOT using splice sites and exons in HISAT2 index." - log.info "[HISAT2 index build] Use --hisat_build_memory [small number] to skip this check." + log.info "[HISAT2 index build] Less than ${hisat2_build_memory} GB available, so NOT using splice sites and exons to build HISAT2 index." + log.info "[HISAT2 index build] Use --hisat2_build_memory [small number] to skip this check." } def software = getSoftwareName(task.process) diff --git a/software/hisat2/extractsplicesites/functions.nf b/software/hisat2/extractsplicesites/functions.nf index d25eea86..da9da093 100644 --- a/software/hisat2/extractsplicesites/functions.nf +++ b/software/hisat2/extractsplicesites/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/hisat2/extractsplicesites/main.nf b/software/hisat2/extractsplicesites/main.nf index b40a97da..57f4dedb 100644 --- a/software/hisat2/extractsplicesites/main.nf +++ b/software/hisat2/extractsplicesites/main.nf @@ -11,7 +11,7 @@ process HISAT2_EXTRACTSPLICESITES { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::hisat2=2.2.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/hmmer/hmmalign/functions.nf b/software/hmmer/hmmalign/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/hmmer/hmmalign/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/hmmer/hmmalign/main.nf b/software/hmmer/hmmalign/main.nf new file mode 100644 index 00000000..0446707b --- /dev/null +++ b/software/hmmer/hmmalign/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process HMMER_HMMALIGN { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::hmmer=3.3.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/hmmer:3.3.2--h1b792b2_1" + } else { + container "quay.io/biocontainers/hmmer:3.3.2--h1b792b2_1" + } + + input: + tuple val(meta), path(fasta) + path hmm + + output: + tuple val(meta), path("*.sthlm.gz"), emit: sthlm + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def fastacmd = fasta.getExtension() == 'gz' ? "gunzip -c $fasta" : "cat $fasta" + """ + $fastacmd | \\ + hmmalign \\ + $options.args \\ + $hmm \\ + - | gzip -c > ${meta.id}.sthlm.gz + + echo \$(hmmalign -h | grep -o '^# HMMER [0-9.]*') | sed 's/^# HMMER *//' > ${software}.version.txt + """ +} diff --git a/software/hmmer/hmmalign/meta.yml b/software/hmmer/hmmalign/meta.yml new file mode 100644 index 00000000..563d227d --- /dev/null +++ b/software/hmmer/hmmalign/meta.yml @@ -0,0 +1,45 @@ +name: hmmer_hmmalign +description: hmmalign from the HMMER suite aligns a number of sequences to an HMM profile +keywords: + - alignment +tools: + - hmmer: + description: Biosequence analysis using profile hidden Markov models + homepage: http://hmmer.org/ + documentation: http://hmmer.org/documentation.html + tool_dev_url: None + doi: "http://dx.doi.org/10.1371/journal.pcbi.1002195" + licence: ['BSD'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Amino acid or nucleotide fasta file, gzipped or not + pattern: "*.{fna,fna.gz,faa,faa.gz,fasta,fasta.gz,fa,fa.gz}" + - hmm: + type: file + description: HMM file + pattern: "*.hmm" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - sthlm: + type: file + description: Multiple alignment in gzipped Stockholm format + pattern: "*.sthlm.gz" + +authors: + - "@erikrikarddaniel" diff --git a/software/homer/annotatepeaks/functions.nf b/software/homer/annotatepeaks/functions.nf index d25eea86..da9da093 100644 --- a/software/homer/annotatepeaks/functions.nf +++ b/software/homer/annotatepeaks/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/homer/annotatepeaks/main.nf b/software/homer/annotatepeaks/main.nf index 9b3b1910..22dbb955 100644 --- a/software/homer/annotatepeaks/main.nf +++ b/software/homer/annotatepeaks/main.nf @@ -11,7 +11,7 @@ process HOMER_ANNOTATEPEAKS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::homer=4.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/iqtree/functions.nf b/software/iqtree/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/iqtree/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/iqtree/main.nf b/software/iqtree/main.nf new file mode 100644 index 00000000..1eeb3a2a --- /dev/null +++ b/software/iqtree/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process IQTREE { + tag "$alignment" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::iqtree=2.1.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/iqtree:2.1.2--h56fc30b_0" + } else { + container "quay.io/biocontainers/iqtree:2.1.2--h56fc30b_0" + } + + input: + path alignment + val constant_sites + + output: + path "*.treefile", emit: phylogeny + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + def fconst_args = constant_sites ? "-fconst $constant_sites" : '' + def memory = task.memory.toString().replaceAll(' ', '') + """ + iqtree \\ + $fconst_args \\ + $options.args \\ + -s $alignment \\ + -nt AUTO \\ + -ntmax $task.cpus \\ + -mem $memory \\ + + echo \$(iqtree -version 2>&1) | sed 's/^IQ-TREE multicore version \\([0-9\\.]*\\) .*\$/\\1/' > ${software}.version.txt + """ +} diff --git a/software/iqtree/meta.yml b/software/iqtree/meta.yml new file mode 100644 index 00000000..19f81b15 --- /dev/null +++ b/software/iqtree/meta.yml @@ -0,0 +1,34 @@ +name: iqtree +description: Produces a Newick format phylogeny from a multiple sequence alignment using the maxium likelihood algorithm. Capable of bacterial genome size alignments. +keywords: + - phylogeny + - newick + - maximum likelihood +tools: + - iqtree: + description: Efficient phylogenomic software by maximum likelihood. + homepage: http://www.iqtree.org + documentation: http://www.iqtree.org/doc + tool_dev_url: https://github.com/iqtree/iqtree2 + doi: doi.org/10.1093/molbev/msaa015 + licence: ['GPL v2-or-later'] + +input: + - alignment: + type: file + description: A FASTA format multiple sequence alignment file + pattern: "*.{fasta,fas,fa,mfa}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - phylogeny: + type: file + description: A phylogeny in Newick format + pattern: "*.{treefile}" + +authors: + - "@avantonder" + - "@aunderwo" diff --git a/software/ivar/consensus/functions.nf b/software/ivar/consensus/functions.nf index d25eea86..da9da093 100644 --- a/software/ivar/consensus/functions.nf +++ b/software/ivar/consensus/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/ivar/consensus/main.nf b/software/ivar/consensus/main.nf index 05fa13d5..1b1019cf 100644 --- a/software/ivar/consensus/main.nf +++ b/software/ivar/consensus/main.nf @@ -9,7 +9,7 @@ process IVAR_CONSENSUS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ivar=1.3.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/ivar/trim/functions.nf b/software/ivar/trim/functions.nf index d25eea86..da9da093 100644 --- a/software/ivar/trim/functions.nf +++ b/software/ivar/trim/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/ivar/trim/main.nf b/software/ivar/trim/main.nf index ec18ba55..afdc99e4 100644 --- a/software/ivar/trim/main.nf +++ b/software/ivar/trim/main.nf @@ -9,7 +9,7 @@ process IVAR_TRIM { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ivar=1.3.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/ivar/variants/functions.nf b/software/ivar/variants/functions.nf index d25eea86..da9da093 100644 --- a/software/ivar/variants/functions.nf +++ b/software/ivar/variants/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/ivar/variants/main.nf b/software/ivar/variants/main.nf index 343536cd..154f309c 100644 --- a/software/ivar/variants/main.nf +++ b/software/ivar/variants/main.nf @@ -9,7 +9,7 @@ process IVAR_VARIANTS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ivar=1.3.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/kallisto/index/functions.nf b/software/kallisto/index/functions.nf index f177f0c8..da9da093 100644 --- a/software/kallisto/index/functions.nf +++ b/software/kallisto/index/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/kallisto/index/main.nf b/software/kallisto/index/main.nf index bf3f2415..85eb7f0d 100644 --- a/software/kallisto/index/main.nf +++ b/software/kallisto/index/main.nf @@ -9,7 +9,7 @@ process KALLISTO_INDEX { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::kallisto=0.46.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/kallistobustools/count/functions.nf b/software/kallistobustools/count/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/kallistobustools/count/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/kallistobustools/count/main.nf b/software/kallistobustools/count/main.nf new file mode 100644 index 00000000..5b7416ea --- /dev/null +++ b/software/kallistobustools/count/main.nf @@ -0,0 +1,58 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process KALLISTOBUSTOOLS_COUNT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::kb-python=0.26.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/kb-python:0.26.0--pyhdfd78af_0" + } else { + container "quay.io/biocontainers/kb-python:0.26.0--pyhdfd78af_0" + } + + input: + tuple val(meta), path(reads) + path index + path t2g + path t1c + path t2c + val use_t1c + val use_t2c + val workflow + val technology + + output: + tuple val(meta), path ("*_kallistobustools_count") , emit: kallistobustools_count + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def cdna = use_t1c ? "-c1 $t1c" : '' + def introns = use_t2c ? "-c2 $t2c" : '' + """ + kb \\ + count \\ + -t $task.cpus \\ + -i $index \\ + -g $t2g \\ + $cdna \\ + $introns \\ + --workflow $workflow \\ + -x $technology \\ + $options.args \\ + -o ${prefix}_kallistobustools_count \\ + ${reads[0]} \\ + ${reads[1]} + + echo \$(kb 2>&1) | sed 's/^kb_python //; s/Usage.*\$//' > ${software}.version.txt + """ +} diff --git a/software/kallistobustools/count/meta.yml b/software/kallistobustools/count/meta.yml new file mode 100644 index 00000000..9e6fa720 --- /dev/null +++ b/software/kallistobustools/count/meta.yml @@ -0,0 +1,77 @@ +name: kallistobustools_count +description: quantifies scRNA-seq data from fastq files using kb-python. +keywords: + - scRNA-seq + - count +tools: + - kb: + description: kallisto and bustools are wrapped in an easy-to-use program called kb + homepage: https://www.kallistobus.tools/ + documentation: https://kb-python.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/pachterlab/kb_python + doi: "" + licence: MIT License + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq1: + type: file + description: Read 1 fastq file + pattern: "*.{fastq,fastq.gz}" + - fastq2: + type: file + description: Read 2 fastq file + pattern: "*.{fastq,fastq.gz}" + - index: + type: file + description: kb-ref index file (.idx) + pattern: "*.{idx}" + - t2g: + type: file + description: t2g file from kallisto + pattern: "*t2g.txt" + - t1c: + type: file + description: kb ref's c1 spliced_t2c file + pattern: "*.{cdna_t2c.txt}" + - use_t1c: + type: boolean + description: Whether to use the c1 txt file for RNA velocity and nucleus workflows + - t2c: + type: file + description: kb ref's c2 unspliced_t2c file + pattern: "*.{introns_t2c.txt}" + - use_t2c: + type: boolean + description: Whether to use the c2 txt file for RNA velocity and nucleus workflows + - kb_workflow: + type: value + description: String value defining worfklow to use, can be one of "standard", "lamanno", "nucleus" + pattern: "{standard,lamanno,nucleus,kite}" + - technology: + type: value + description: String value defining the sequencing technology used. + pattern: "{10XV1,10XV2,10XV3,CELSEQ,CELSEQ2,DROPSEQ,INDROPSV1,INDROPSV2,INDROPSV3,SCRUBSEQ,SURECELL,SMARTSEQ}" + + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - kallistobustools_count: + type: file + description: kb count output folder + pattern: "*_{kallistobustools_count}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@flowuenne" diff --git a/software/kallistobustools/ref/functions.nf b/software/kallistobustools/ref/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/kallistobustools/ref/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/kallistobustools/ref/main.nf b/software/kallistobustools/ref/main.nf new file mode 100644 index 00000000..427251cc --- /dev/null +++ b/software/kallistobustools/ref/main.nf @@ -0,0 +1,67 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process KALLISTOBUSTOOLS_REF { + tag "$fasta" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::kb-python=0.26.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/kb-python:0.26.0--pyhdfd78af_0" + } else { + container "quay.io/biocontainers/kb-python:0.26.0--pyhdfd78af_0" + } + + input: + path fasta + path gtf + val workflow + + output: + path "*.version.txt" , emit: version + path "kb_ref_out.idx" , emit: index + path "t2g.txt" , emit: t2g + path "cdna.fa" , emit: cdna + path "intron.fa" , optional:true, emit: intron + path "cdna_t2c.txt" , optional:true, emit: cdna_t2c + path "intron_t2c.txt" , optional:true, emit: intron_t2c + + script: + def software = getSoftwareName(task.process) + if (workflow == "standard") { + """ + kb \\ + ref \\ + -i kb_ref_out.idx \\ + -g t2g.txt \\ + -f1 cdna.fa \\ + --workflow $workflow \\ + $fasta \\ + $gtf + + echo \$(kb 2>&1) | sed 's/^kb_python //; s/Usage.*\$//' > ${software}.version.txt + """ + } else { + """ + kb \\ + ref \\ + -i kb_ref_out.idx \\ + -g t2g.txt \\ + -f1 cdna.fa \\ + -f2 intron.fa \\ + -c1 cdna_t2c.txt \\ + -c2 intron_t2c.txt \\ + --workflow $workflow \\ + $fasta \\ + $gtf + + echo \$(kb 2>&1) | sed 's/^kb_python //; s/Usage.*\$//' > ${software}.version.txt + """ + } +} diff --git a/software/kallistobustools/ref/meta.yml b/software/kallistobustools/ref/meta.yml new file mode 100644 index 00000000..c2a85b37 --- /dev/null +++ b/software/kallistobustools/ref/meta.yml @@ -0,0 +1,60 @@ +name: kallistobustools_ref +description: index creation for kb count quantification of single-cell data. +keywords: + - kallisto-bustools + - index +tools: + - kb: + description: kallisto|bustools (kb) is a tool developed for fast and efficient processing of single-cell OMICS data. + homepage: https://www.kallistobus.tools/ + documentation: https://kb-python.readthedocs.io/en/latest/index.html + tool_dev_url: https://github.com/pachterlab/kb_python + doi: "https://doi.org/10.22002/D1.1876" + licence: MIT License + +input: + - fasta: + type: file + description: Genomic DNA fasta file + pattern: "*.{fasta,fasta.gz}" + - gtf: + type: file + description: Genomic gtf file + pattern: "*.{gtf,gtf.gz}" + - workflow: + type: value + description: String value defining worfklow to use, can be one of "standard", "lamanno", "nucleus" + pattern: "{standard,lamanno,nucleus}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - kb_ref_idx: + type: file + description: Index file from kb ref. + pattern: "*.{idx}" + - t2g: + type: file + description: Transcript to gene table + pattern: "*t2g.{txt}" + - cdna: + type: file + description: Cdna fasta file + pattern: "*cdna.{fa}" + - intron: + type: file + description: intron fasta file + pattern: "*intron.{fa}" + - cdna_t2c: + type: file + description: cdna transcript to capture file + pattern: "*cdna_t2c.{txt}" + - intron_t2c: + type: file + description: intron transcript to capture file + pattern: "*intron_t2c.{txt}" + +authors: + - "@flowuenne" diff --git a/software/kraken2/kraken2/functions.nf b/software/kraken2/kraken2/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/kraken2/kraken2/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/kraken2/run/main.nf b/software/kraken2/kraken2/main.nf similarity index 72% rename from software/kraken2/run/main.nf rename to software/kraken2/kraken2/main.nf index 4c2ca098..ea0b72fd 100644 --- a/software/kraken2/run/main.nf +++ b/software/kraken2/kraken2/main.nf @@ -2,20 +2,20 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) -process KRAKEN2_RUN { +process KRAKEN2_KRAKEN2 { tag "$meta.id" label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::kraken2=2.1.1' : null) + conda (params.enable_conda ? 'bioconda::kraken2=2.1.1 conda-forge::pigz=2.6' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container 'https://depot.galaxyproject.org/singularity/kraken2:2.1.1--pl526hc9558a2_0' + container 'https://depot.galaxyproject.org/singularity/mulled-v2-5799ab18b5fc681e75923b2450abaa969907ec98:941789bd7fe00db16531c26de8bf3c5c985242a5-0' } else { - container 'quay.io/biocontainers/kraken2:2.1.1--pl526hc9558a2_0' + container 'quay.io/biocontainers/mulled-v2-5799ab18b5fc681e75923b2450abaa969907ec98:941789bd7fe00db16531c26de8bf3c5c985242a5-0' } input: @@ -46,7 +46,8 @@ process KRAKEN2_RUN { $options.args \\ $reads - gzip *.fastq + pigz -p $task.cpus *.fastq + echo \$(kraken2 --version 2>&1) | sed 's/^.*Kraken version //; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/kraken2/kraken2/meta.yml b/software/kraken2/kraken2/meta.yml new file mode 100644 index 00000000..cb1ec0de --- /dev/null +++ b/software/kraken2/kraken2/meta.yml @@ -0,0 +1,59 @@ +name: kraken2_kraken2 +description: Classifies metagenomic sequence data +keywords: + - classify + - metagenomics + - fastq + - db +tools: + - kraken2: + description: | + Kraken2 is a taxonomic sequence classifier that assigns taxonomic labels to sequence reads + homepage: https://ccb.jhu.edu/software/kraken2/ + documentation: https://github.com/DerrickWood/kraken2/wiki/Manual + doi: 10.1186/s13059-019-1891-0 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - db: + type: directory + description: Kraken2 database +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - classified: + type: file + description: | + Reads classified to belong to any of the taxa + on the Kraken2 database. + pattern: "*{fastq.gz}" + - unclassified: + type: file + description: | + Reads not classified to belong to any of the taxa + on the Kraken2 database. + pattern: "*{fastq.gz}" + - txt: + type: file + description: | + Kraken2 report containing stats about classified + and not classifed reads. + pattern: "*.{report.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/kraken2/run/functions.nf b/software/kraken2/run/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/software/kraken2/run/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/software/kraken2/run/meta.yml b/software/kraken2/run/meta.yml deleted file mode 100644 index 453c05a9..00000000 --- a/software/kraken2/run/meta.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: kraken2_run -description: Classifies metagenomic sequence data -keywords: - - classify - - metagenomics - - fastq - - db -tools: - - kraken2: - description: | - Kraken2 is a taxonomic sequence classifier that assigns taxonomic labels to sequence reads - homepage: https://ccb.jhu.edu/software/kraken2/ - documentation: https://github.com/DerrickWood/kraken2/wiki/Manual - doi: 10.1186/s13059-019-1891-0 -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - db: - type: directory - description: Kraken2 database -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - classified: - type: file - description: | - Reads classified to belong to any of the taxa - on the Kraken2 database. - pattern: "*{fastq.gz}" - - unclassified: - type: file - description: | - Reads not classified to belong to any of the taxa - on the Kraken2 database. - pattern: "*{fastq.gz}" - - txt: - type: file - description: | - Kraken2 report containing stats about classified - and not classifed reads. - pattern: "*.{report.txt}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@joseespinosa" - - "@drpatelh" diff --git a/software/last/dotplot/functions.nf b/software/last/dotplot/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/dotplot/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/dotplot/main.nf b/software/last/dotplot/main.nf new file mode 100644 index 00000000..4771aa4c --- /dev/null +++ b/software/last/dotplot/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_DOTPLOT { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(maf) + val(format) + + output: + tuple val(meta), path("*.gif"), optional:true, emit: gif + tuple val(meta), path("*.png"), optional:true, emit: png + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + last-dotplot \\ + $options.args \\ + $maf \\ + $prefix.$format + + # last-dotplot has no --version option so let's use lastal from the same suite + lastal --version | sed 's/lastal //' > ${software}.version.txt + """ +} diff --git a/software/last/dotplot/meta.yml b/software/last/dotplot/meta.yml new file mode 100644 index 00000000..ab57dab7 --- /dev/null +++ b/software/last/dotplot/meta.yml @@ -0,0 +1,47 @@ +name: last_dotplot +description: Makes a dotplot (Oxford Grid) of pair-wise sequence alignments +keywords: + - LAST + - plot + - pair + - alignment + - MAF +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/last-dotplot.rst + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL-3.0-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - maf: + type: file + description: Multiple Aligment Format (MAF) file, compressed with gzip + pattern: "*.{maf.gz}" + - format: + type: value + description: Output format (PNG or GIF). + +output: + - png: + type: file + description: Pairwise alignment dot plot image, in PNG format. + pattern: "*.png" + - gif: + type: file + description: Pairwise alignment dot plot image, in GIF format. + pattern: "*.gif" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@charles-plessy" diff --git a/software/last/lastal/functions.nf b/software/last/lastal/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/lastal/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/lastal/main.nf b/software/last/lastal/main.nf new file mode 100644 index 00000000..4d1cb9c7 --- /dev/null +++ b/software/last/lastal/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_LASTAL { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(fastx), path (param_file) + path index + + output: + tuple val(meta), path("*.maf.gz"), emit: maf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def trained_params = param_file ? "-p ${param_file}" : '' + """ + INDEX_NAME=\$(basename \$(ls $index/*.des) .des) + lastal \\ + $trained_params \\ + $options.args \\ + -P $task.cpus \\ + ${index}/\$INDEX_NAME \\ + $fastx \\ + | gzip --no-name > ${prefix}.\$INDEX_NAME.maf.gz + # gzip needs --no-name otherwise it puts a timestamp in the file, + # which makes its checksum non-reproducible. + + echo \$(lastal --version 2>&1) | sed 's/lastal //' > ${software}.version.txt + """ +} diff --git a/software/last/lastal/meta.yml b/software/last/lastal/meta.yml new file mode 100644 index 00000000..2237c75a --- /dev/null +++ b/software/last/lastal/meta.yml @@ -0,0 +1,52 @@ +name: last_lastal +description: Find suitable score parameters for sequence alignment +keywords: + - LAST + - align + - fastq + - fasta +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/last-train.rst + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL v3-or-later'] + +input: + - index: + type: directory + description: Directory containing the files of the LAST index + pattern: "lastdb/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastx: + type: file + description: FASTA/FASTQ file + pattern: "*.{fasta,fastq}" + - param_file: + type: file + description: Trained parameter file + pattern: "*.par" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - maf: + type: file + description: Gzipped MAF (Multiple Alignment Format) file + pattern: "*.{maf.gz}" + +authors: + - "@charles-plessy" diff --git a/software/last/lastdb/functions.nf b/software/last/lastdb/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/lastdb/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/lastdb/main.nf b/software/last/lastdb/main.nf new file mode 100644 index 00000000..ca376f67 --- /dev/null +++ b/software/last/lastdb/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_LASTDB { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(fastx) + + output: + tuple val(meta), path("lastdb"), emit: index + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + mkdir lastdb + lastdb \\ + $options.args \\ + -P $task.cpus \\ + lastdb/${prefix} \\ + $fastx + + echo \$(lastdb --version 2>&1) | sed 's/lastdb //' > ${software}.version.txt + """ +} diff --git a/software/last/lastdb/meta.yml b/software/last/lastdb/meta.yml new file mode 100644 index 00000000..64e4d3e3 --- /dev/null +++ b/software/last/lastdb/meta.yml @@ -0,0 +1,41 @@ +name: last_lastdb +description: Prepare sequences for subsequent alignment with lastal. +keywords: + - LAST + - index + - fasta + - fastq +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/lastdb.rst + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL-3.0-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastx: + type: file + description: > + Sequence file in FASTA or FASTQ format. + May be compressed with gzip. + pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - index: + type: directory + description: directory containing the files of the LAST index + pattern: "lastdb/" + +authors: + - "@charles-plessy" diff --git a/software/last/mafconvert/functions.nf b/software/last/mafconvert/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/mafconvert/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/mafconvert/main.nf b/software/last/mafconvert/main.nf new file mode 100644 index 00000000..89c7d818 --- /dev/null +++ b/software/last/mafconvert/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_MAFCONVERT { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(maf) + val(format) + + output: + tuple val(meta), path("*.axt.gz"), optional:true, emit: axt_gz + tuple val(meta), path("*.blast.gz"), optional:true, emit: blast_gz + tuple val(meta), path("*.blasttab.gz"), optional:true, emit: blasttab_gz + tuple val(meta), path("*.chain.gz"), optional:true, emit: chain_gz + tuple val(meta), path("*.gff.gz"), optional:true, emit: gff_gz + tuple val(meta), path("*.html.gz"), optional:true, emit: html_gz + tuple val(meta), path("*.psl.gz"), optional:true, emit: psl_gz + tuple val(meta), path("*.sam.gz"), optional:true, emit: sam_gz + tuple val(meta), path("*.tab.gz"), optional:true, emit: tab_gz + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + maf-convert $options.args $format $maf | gzip --no-name \\ + > ${prefix}.${format}.gz + + # maf-convert has no --version option but lastdb (part of the same package) has. + echo \$(lastdb --version 2>&1) | sed 's/lastdb //' > ${software}.version.txt + """ +} diff --git a/software/last/mafconvert/meta.yml b/software/last/mafconvert/meta.yml new file mode 100644 index 00000000..0ab87457 --- /dev/null +++ b/software/last/mafconvert/meta.yml @@ -0,0 +1,79 @@ +name: last_mafconvert +description: Converts MAF alignments in another format. +keywords: + - LAST + - convert + - alignment + - MAF +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/ + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL v3-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - maf: + type: file + description: Multiple Aligment Format (MAF) file, optionally compressed with gzip + pattern: "*.{maf.gz,maf}" + - format: + type: value + description: Output format (one of axt, blast, blasttab, chain, gff, html, psl, sam, or tab) + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - axt_gz: + type: file + description: Gzipped pairwise alignment in Axt (Blastz) format (optional) + pattern: "*.axt.gz" + - blast_gz: + type: file + description: Gzipped pairwise alignment in blast format (optional) + pattern: "*.blast.gz" + - blasttab_gz: + type: file + description: Gzipped pairwise alignment in blasttab format (optional) + pattern: "*.blasttab.gz" + - chain_gz: + type: file + description: Gzipped pairwise alignment in UCSC chain format (optional) + pattern: "*.chain.gz" + - gff_gz: + type: file + description: Gzipped pairwise alignment in GFF format (optional) + pattern: "*.gff.gz" + - html_gz: + type: file + description: Gzipped pairwise alignment in HTML format (optional) + pattern: "*.html.gz" + - psl_gz: + type: file + description: Gzipped pairwise alignment in PSL (BLAT) format (optional) + pattern: "*.psl.gz" + - SAM: + type: file + description: Gzipped pairwise alignment in SAM format (optional) + pattern: "*.sam.gz" + - tab: + type: file + description: Gzipped pairwise alignment in TAB format (optional) + pattern: "*.tab.gz" + +authors: + - "@aleksandrabliznina" diff --git a/software/last/mafswap/functions.nf b/software/last/mafswap/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/mafswap/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/mafswap/main.nf b/software/last/mafswap/main.nf new file mode 100644 index 00000000..e0a697f4 --- /dev/null +++ b/software/last/mafswap/main.nf @@ -0,0 +1,37 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_MAFSWAP { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(maf) + + output: + tuple val(meta), path("*.maf.gz"), emit: maf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + maf-swap $options.args $maf | gzip --no-name > ${prefix}.swapped.maf.gz + + # maf-swap has no --version option but lastdb, part of the same package, has. + echo \$(lastdb --version 2>&1) | sed 's/lastdb //' > ${software}.version.txt + """ +} diff --git a/software/last/mafswap/meta.yml b/software/last/mafswap/meta.yml new file mode 100644 index 00000000..eb35a46c --- /dev/null +++ b/software/last/mafswap/meta.yml @@ -0,0 +1,39 @@ +name: last_mafswap +description: Reorder alignments in a MAF file +keywords: + - LAST + - reorder + - alignment + - MAF +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/ + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL-3.0-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - maf: + type: file + description: Multiple Aligment Format (MAF) file, optionally compressed with gzip + pattern: "*.{maf.gz,maf}" + +output: + - maf: + type: file + description: Multiple Aligment Format (MAF) file, compressed with gzip + pattern: "*.{maf.gz}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@charles-plessy" diff --git a/software/last/postmask/functions.nf b/software/last/postmask/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/postmask/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/postmask/main.nf b/software/last/postmask/main.nf new file mode 100644 index 00000000..72584b3e --- /dev/null +++ b/software/last/postmask/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_POSTMASK { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(maf) + + output: + tuple val(meta), path("*.maf.gz"), emit: maf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + if( "$maf" == "${prefix}.maf.gz" ) error "Input and output names are the same, use the suffix option to disambiguate" + """ + last-postmask $options.args $maf | gzip --no-name > ${prefix}.maf.gz + + # last-postmask does not have a --version option + echo \$(lastal --version 2>&1) | sed 's/lastal //' > ${software}.version.txt + """ +} diff --git a/software/last/postmask/meta.yml b/software/last/postmask/meta.yml new file mode 100644 index 00000000..45eaa2b9 --- /dev/null +++ b/software/last/postmask/meta.yml @@ -0,0 +1,39 @@ +name: last_postmask +description: Post-alignment masking +keywords: + - LAST + - mask + - alignment + - MAF +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/last-postmask.rst + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "10.1371/journal.pone.0028819" + licence: ['GPL-3.0-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - maf: + type: file + description: Multiple Aligment Format (MAF) file, optionally compressed with gzip + pattern: "*.{maf.gz,maf}" + +output: + - maf: + type: file + description: Multiple Aligment Format (MAF) file, compressed with gzip + pattern: "*.{maf.gz}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@charles-plessy" diff --git a/software/last/split/functions.nf b/software/last/split/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/split/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/split/main.nf b/software/last/split/main.nf new file mode 100644 index 00000000..021b1bbf --- /dev/null +++ b/software/last/split/main.nf @@ -0,0 +1,36 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_SPLIT { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(maf) + + output: + tuple val(meta), path("*.maf.gz"), emit: maf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + zcat < $maf | last-split $options.args | gzip --no-name > ${prefix}.maf.gz + + echo \$(last-split --version 2>&1) | sed 's/last-split //' > ${software}.version.txt + """ +} diff --git a/software/last/split/meta.yml b/software/last/split/meta.yml new file mode 100644 index 00000000..73f37784 --- /dev/null +++ b/software/last/split/meta.yml @@ -0,0 +1,45 @@ +name: last_split +description: Find split or spliced alignments in a MAF file +keywords: + - LAST + - split + - spliced + - alignment + - MAF +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/ + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL v3-or-later'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - maf: + type: file + description: Multiple Aligment Format (MAF) file, compressed with gzip + pattern: "*.{maf.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - maf: + type: file + description: Multiple Aligment Format (MAF) file, compressed with gzip + pattern: "*.{maf.gz}" + +authors: + - "@aleksandrabliznina" diff --git a/software/last/train/functions.nf b/software/last/train/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/last/train/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/last/train/main.nf b/software/last/train/main.nf new file mode 100644 index 00000000..d6fd4007 --- /dev/null +++ b/software/last/train/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LAST_TRAIN { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::last=1238" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0" + } else { + container "quay.io/biocontainers/last:1238--h2e03b76_0" + } + + input: + tuple val(meta), path(fastx) + path index + + output: + tuple val(meta), path("*.par"), emit: param_file + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + INDEX_NAME=\$(basename \$(ls $index/*.des) .des) + + last-train \\ + $options.args \\ + -P $task.cpus \\ + ${index}/\$INDEX_NAME \\ + $fastx \\ + > ${prefix}.\$INDEX_NAME.par + + lastdb --version | sed 's/lastdb //' > ${software}.version.txt + """ +} diff --git a/software/last/train/meta.yml b/software/last/train/meta.yml new file mode 100644 index 00000000..5796b764 --- /dev/null +++ b/software/last/train/meta.yml @@ -0,0 +1,48 @@ +name: last_train +description: Find suitable score parameters for sequence alignment +keywords: + - LAST + - train + - fastq + - fasta +tools: + - last: + description: LAST finds & aligns related regions of sequences. + homepage: https://gitlab.com/mcfrith/last + documentation: https://gitlab.com/mcfrith/last/-/blob/main/doc/last-train.rst + tool_dev_url: https://gitlab.com/mcfrith/last + doi: "" + licence: ['GPL v3-or-later'] + +input: + - index: + type: directory + description: Directory containing the files of the LAST index + pattern: "lastdb/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastx: + type: file + description: FASTA/FASTQ file + pattern: "*.{fasta,fastq}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - param_file: + type: file + description: Trained parameter file + pattern: "*.par" + +authors: + - "@aleksandrabliznina" diff --git a/software/lib/functions.nf b/software/lib/functions.nf index d25eea86..da9da093 100644 --- a/software/lib/functions.nf +++ b/software/lib/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/lofreq/call/functions.nf b/software/lofreq/call/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/lofreq/call/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/lofreq/call/main.nf b/software/lofreq/call/main.nf new file mode 100644 index 00000000..d342c929 --- /dev/null +++ b/software/lofreq/call/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LOFREQ_CALL { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::lofreq=2.1.5" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4" + } else { + container "quay.io/biocontainers/lofreq:2.1.5--py38h588ecb2_4" + } + + input: + tuple val(meta), path(bam) + path fasta + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + lofreq \\ + call \\ + $options.args \\ + -f $fasta \\ + -o ${prefix}.vcf.gz \\ + $bam + + echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//' > ${software}.version.txt + """ +} diff --git a/software/lofreq/call/meta.yml b/software/lofreq/call/meta.yml new file mode 100644 index 00000000..f14115d2 --- /dev/null +++ b/software/lofreq/call/meta.yml @@ -0,0 +1,46 @@ +name: lofreq_call +description: Lofreq subcommand to call low frequency variants from alignments +keywords: + - variant calling + - low frequency variant calling + - lofreq + - lofreq/call +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM input file + pattern: "*.{bam}" + - fasta: + type: file + description: The reference fasta file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - vcf: + type: file + description: VCF output file + pattern: "*.{vcf}" + +authors: + - "@bjohnnyd" diff --git a/software/lofreq/callparallel/functions.nf b/software/lofreq/callparallel/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/lofreq/callparallel/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/lofreq/callparallel/main.nf b/software/lofreq/callparallel/main.nf new file mode 100644 index 00000000..9ebb2805 --- /dev/null +++ b/software/lofreq/callparallel/main.nf @@ -0,0 +1,43 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LOFREQ_CALLPARALLEL { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::lofreq=2.1.5" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4" + } else { + container "quay.io/biocontainers/lofreq:2.1.5--py38h588ecb2_4" + } + + input: + tuple val(meta), path(bam), path(bai) + file fasta + file fai + + output: + tuple val(meta), path("*.vcf"), emit: vcf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + lofreq \\ + call-parallel \\ + --pp-threads $task.cpus \\ + -f $fasta \\ + -o ${prefix}.vcf \\ + $bam + + echo \$(lofreq version 2>&1) | sed 's/^.*lofreq //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/software/lofreq/callparallel/meta.yml b/software/lofreq/callparallel/meta.yml new file mode 100644 index 00000000..43756e2b --- /dev/null +++ b/software/lofreq/callparallel/meta.yml @@ -0,0 +1,53 @@ +name: lofreq_callparallel +description: It predicts variants using multiple processors +keywords: + - call + - variants +tools: + - lofreq: + description: Lofreq is a fast and sensitive variant-caller for inferring SNVs and indels from next-generation sequencing data. It's call-parallel programme predicts variants using multiple processors + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/ + doi: "10.1093/nar/gks918" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - bai: + type: file + description: BAM index file + pattern: "*.{bai}" + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fasta}" + - fai: + type: file + description: Reference genome FASTA index file + pattern: "*.{fai}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - vcf: + type: file + description: Predicted variants file + pattern: "*.{vcf}" + +authors: + - "@kaurravneet4123" diff --git a/software/lofreq/filter/functions.nf b/software/lofreq/filter/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/lofreq/filter/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/lofreq/filter/main.nf b/software/lofreq/filter/main.nf new file mode 100644 index 00000000..a2b53f08 --- /dev/null +++ b/software/lofreq/filter/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LOFREQ_FILTER { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::lofreq=2.1.5" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4" + } else { + container "quay.io/biocontainers/lofreq:2.1.5--py38h588ecb2_4" + } + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.gz"), emit: vcf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + lofreq \\ + filter \\ + $options.args \\ + -i $vcf \\ + -o ${prefix}.vcf.gz + + echo \$(lofreq version 2>&1) | sed 's/^version: //; s/ *commit.*\$//' > ${software}.version.txt + """ +} diff --git a/software/lofreq/filter/meta.yml b/software/lofreq/filter/meta.yml new file mode 100644 index 00000000..9de18d4d --- /dev/null +++ b/software/lofreq/filter/meta.yml @@ -0,0 +1,44 @@ +name: lofreq_filter +description: Lofreq subcommand to remove variants with low coverage or strand bias potential +keywords: + - variant calling + - low frequency variant calling + - filtering + - lofreq + - lofreq/filter +tools: + - lofreq: + description: A fast and sensitive variant-caller for inferring SNVs and indels from next-generation sequencing data + homepage: https://csb5.github.io/lofreq/ + documentation: https://csb5.github.io/lofreq/commands/ + doi: "10.1093/nar/gks918 " + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - vcf: + type: file + description: VCF filtered output file + pattern: "*.{vcf}" + +authors: + - "@bjohnnyd" diff --git a/software/lofreq/indelqual/functions.nf b/software/lofreq/indelqual/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/lofreq/indelqual/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/lofreq/indelqual/main.nf b/software/lofreq/indelqual/main.nf new file mode 100644 index 00000000..befd8d7a --- /dev/null +++ b/software/lofreq/indelqual/main.nf @@ -0,0 +1,40 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process LOFREQ_INDELQUAL { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::lofreq=2.1.5" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/lofreq:2.1.5--py38h588ecb2_4" + } else { + container "quay.io/biocontainers/lofreq:2.1.5--py38h588ecb2_4" + } + + input: + tuple val(meta), path(bam) + path fasta + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + lofreq indelqual \\ + $options.args \\ + -f $fasta \\ + -o ${prefix}.bam \\ + $bam + + echo \$(lofreq version 2>&1) | sed 's/^.*lofreq //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/software/lofreq/indelqual/meta.yml b/software/lofreq/indelqual/meta.yml new file mode 100644 index 00000000..294cf17d --- /dev/null +++ b/software/lofreq/indelqual/meta.yml @@ -0,0 +1,44 @@ +name: lofreq_indelqual +description: Inserts indel qualities in a BAM file +keywords: + - bam + - indel + - qualities +tools: + - lofreq: + description: Lofreq is a fast and sensitive variant-caller for inferring SNVs and indels from next-generation sequencing data. It's indelqual programme inserts indel qualities in a BAM file + homepage: https://csb5.github.io/lofreq/ + doi: "10.1093/nar/gks918" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fasta}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bam: + type: file + description: BAM file with indel qualities inserted into it + pattern: "*.{bam}" + +authors: + - "@kaurravneet4123" diff --git a/software/macs2/callpeak/functions.nf b/software/macs2/callpeak/functions.nf index 85ebd767..da9da093 100644 --- a/software/macs2/callpeak/functions.nf +++ b/software/macs2/callpeak/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = (args.publish_files instanceof Map) ? args.publish_files : null - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { @@ -52,7 +61,7 @@ def saveFiles(Map args) { return "${getPathFromList(ext_list)}/$args.filename" } } - } else { + } else if (ioptions.publish_files == null) { return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/software/macs2/callpeak/main.nf b/software/macs2/callpeak/main.nf index 49b3a055..67d686c6 100644 --- a/software/macs2/callpeak/main.nf +++ b/software/macs2/callpeak/main.nf @@ -9,7 +9,7 @@ process MACS2_CALLPEAK { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::macs2=2.2.7.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/mash/sketch/functions.nf b/software/mash/sketch/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/mash/sketch/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/mash/sketch/main.nf b/software/mash/sketch/main.nf new file mode 100644 index 00000000..3cc7e199 --- /dev/null +++ b/software/mash/sketch/main.nf @@ -0,0 +1,40 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process MASH_SKETCH { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + conda (params.enable_conda ? "bioconda::mash=2.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mash:2.3--he348c14_1" + } else { + container "quay.io/biocontainers/mash:2.3--he348c14_1" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.msh") , emit: mash + tuple val(meta), path("*.mash_stats") , emit: stats + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + mash \\ + sketch \\ + $options.args \\ + -p $task.cpus \\ + -o ${prefix} \\ + -r $reads \\ + 2> ${prefix}.mash_stats + echo \$(mash --version 2>&1) > ${software}.version.txt + """ +} diff --git a/software/mash/sketch/meta.yml b/software/mash/sketch/meta.yml new file mode 100644 index 00000000..3c8c714e --- /dev/null +++ b/software/mash/sketch/meta.yml @@ -0,0 +1,40 @@ +name: mash_sketch +description: Creates vastly reduced representations of sequences using MinHash +keywords: + - mash/sketch +tools: + - mash: + description: Fast sequence distance estimator that uses MinHash + homepage: https://github.com/marbl/Mash + documentation: https://mash.readthedocs.io/en/latest/sketches.html + tool_dev_url: https://github.com/marbl/Mash + doi: "10.1186/s13059-016-0997-x" + licence: ['https://github.com/marbl/Mash/blob/master/LICENSE.txt'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: List of input paired-end FastQ files + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: Sketch output + pattern: "*.{mash}" + - stats: + type: file + description: Sketch statistics + pattern: "*.{mash_stats}" + +authors: + - "@thanhleviet" diff --git a/software/metaphlan3/functions.nf b/software/metaphlan3/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/metaphlan3/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/metaphlan3/main.nf b/software/metaphlan3/main.nf new file mode 100644 index 00000000..83bb9883 --- /dev/null +++ b/software/metaphlan3/main.nf @@ -0,0 +1,50 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process METAPHLAN3 { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::metaphlan=3.0.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/metaphlan:3.0.10--pyhb7b1952_0" + } else { + container "quay.io/biocontainers/metaphlan:3.0.10--pyhb7b1952_0" + } + + input: + tuple val(meta), path(input) + path metaphlan_db + + output: + tuple val(meta), path("*_profile.txt") , emit: profile + tuple val(meta), path("*.biom") , emit: biom + tuple val(meta), path('*.bowtie2out.txt'), optional:true, emit: bt2out + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def input_type = ("$input".endsWith(".fastq.gz")) ? "--input_type fastq" : ("$input".contains(".fasta")) ? "--input_type fasta" : ("$input".endsWith(".bowtie2out.txt")) ? "--input_type bowtie2out" : "--input_type sam" + def input_data = ("$input_type".contains("fastq")) && !meta.single_end ? "${input[0]},${input[1]}" : "$input" + def bowtie2_out = "$input_type" == "--input_type bowtie2out" || "$input_type" == "--input_type sam" ? '' : "--bowtie2out ${prefix}.bowtie2out.txt" + + """ + metaphlan \\ + --nproc $task.cpus \\ + $input_type \\ + $input_data \\ + $options.args \\ + $bowtie2_out \\ + --bowtie2db ${metaphlan_db} \\ + --biom ${prefix}.biom \\ + --output_file ${prefix}_profile.txt + echo \$(metaphlan --version 2>&1) | awk '{print \$3}' > ${software}.version.txt + """ +} diff --git a/software/metaphlan3/meta.yml b/software/metaphlan3/meta.yml new file mode 100644 index 00000000..e0d54d88 --- /dev/null +++ b/software/metaphlan3/meta.yml @@ -0,0 +1,52 @@ +name: metaphlan3 +description: MetaPhlAn is a tool for profiling the composition of microbial communities from metagenomic shotgun sequencing data. +keywords: + - metagenomics + - classification + - fastq + - bam + - fasta +tools: + - metaphlan3: + description: Identify clades (phyla to species) present in the metagenome obtained from a microbiome sample and their relative abundance + homepage: https://huttenhower.sph.harvard.edu/metaphlan/ + documentation: https://github.com/biobakery/MetaPhlAn + doi: "10.7554/eLife.65088" + licence: ['MIT License'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Metaphlan 3.0 can classify the metagenome from a variety of input data types, including FASTQ files (single-end and paired-end), FASTA, bowtie2-produced SAM files (produced from alignments to the MetaPHlAn marker database) and intermediate bowtie2 alignment files (bowtie2out) + pattern: "*.{fastq.gz, fasta, fasta.gz, sam, bowtie2out.txt}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - profile: + type: file + description: Tab-separated output file of the predicted taxon relative abundances + pattern: "*.{txt}" + - biom: + type: file + description: General-use format for representing biological sample by observation contingency tables + pattern: "*.{biom}" + - bowtie2out: + type: file + description: Intermediate Bowtie2 output produced from mapping the metagenome against the MetaPHlAn marker database ( not compatible with `bowtie2out` files generated with MetaPhlAn versions below 3 ) + pattern: "*.{bowtie2out.txt}" + +authors: + - "@MGordon09" diff --git a/software/methyldackel/extract/functions.nf b/software/methyldackel/extract/functions.nf index d25eea86..da9da093 100644 --- a/software/methyldackel/extract/functions.nf +++ b/software/methyldackel/extract/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/methyldackel/extract/main.nf b/software/methyldackel/extract/main.nf index 11a599e0..d0a0b58d 100644 --- a/software/methyldackel/extract/main.nf +++ b/software/methyldackel/extract/main.nf @@ -9,7 +9,7 @@ process METHYLDACKEL_EXTRACT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::methyldackel=0.5.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/methyldackel/mbias/functions.nf b/software/methyldackel/mbias/functions.nf index d25eea86..da9da093 100644 --- a/software/methyldackel/mbias/functions.nf +++ b/software/methyldackel/mbias/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/methyldackel/mbias/main.nf b/software/methyldackel/mbias/main.nf index be5ad730..dcff677e 100644 --- a/software/methyldackel/mbias/main.nf +++ b/software/methyldackel/mbias/main.nf @@ -9,7 +9,7 @@ process METHYLDACKEL_MBIAS { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::methyldackel=0.5.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/minia/functions.nf b/software/minia/functions.nf index d25eea86..da9da093 100644 --- a/software/minia/functions.nf +++ b/software/minia/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/minia/main.nf b/software/minia/main.nf index b2b4df8f..9ae79ede 100644 --- a/software/minia/main.nf +++ b/software/minia/main.nf @@ -2,13 +2,14 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) + process MINIA { tag "$meta.id" label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::minia=3.2.4" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -36,6 +37,7 @@ process MINIA { -nb-cores $task.cpus \\ -in input_files.txt \\ -out $prefix + echo \$(minia --version 2>&1) | sed 's/^.*Minia version //; s/ .*\$//' > ${software}.version.txt """ } diff --git a/software/minimap2/align/functions.nf b/software/minimap2/align/functions.nf index d25eea86..da9da093 100644 --- a/software/minimap2/align/functions.nf +++ b/software/minimap2/align/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/minimap2/align/main.nf b/software/minimap2/align/main.nf index 27418c4f..71b745a3 100644 --- a/software/minimap2/align/main.nf +++ b/software/minimap2/align/main.nf @@ -9,7 +9,7 @@ process MINIMAP2_ALIGN { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::minimap2=2.17" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/minimap2/index/functions.nf b/software/minimap2/index/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/minimap2/index/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/minimap2/index/main.nf b/software/minimap2/index/main.nf new file mode 100644 index 00000000..ee0c1b36 --- /dev/null +++ b/software/minimap2/index/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process MINIMAP2_INDEX { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:['']) } + + conda (params.enable_conda ? "bioconda::minimap2=2.17" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/minimap2:2.17--hed695b0_3" + } else { + container "quay.io/biocontainers/minimap2:2.17--hed695b0_3" + } + + input: + path fasta + + output: + path "*.mmi" , emit: index + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + minimap2 \\ + -t $task.cpus \\ + -d ${fasta.baseName}.mmi \\ + $options.args \\ + $fasta + + echo \$(minimap2 --version 2>&1) > ${software}.version.txt + """ +} diff --git a/software/minimap2/index/meta.yml b/software/minimap2/index/meta.yml new file mode 100644 index 00000000..065e5c32 --- /dev/null +++ b/software/minimap2/index/meta.yml @@ -0,0 +1,29 @@ +name: minimap2_index +description: Provides fasta index required by minimap2 alignment. +keywords: + - index + - fasta + - reference +tools: + - minimap2: + description: | + A versatile pairwise aligner for genomic and spliced nucleotide sequences. + homepage: https://github.com/lh3/minimap2 + documentation: https://github.com/lh3/minimap2#uguide +input: + - fasta: + type: file + description: | + Reference database in FASTA format. +output: + - mmi: + type: file + description: Minimap2 fasta index. + pattern: "*.mmi" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/software/mosdepth/functions.nf b/software/mosdepth/functions.nf index d25eea86..da9da093 100644 --- a/software/mosdepth/functions.nf +++ b/software/mosdepth/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/mosdepth/main.nf b/software/mosdepth/main.nf index f41927ef..618efd79 100644 --- a/software/mosdepth/main.nf +++ b/software/mosdepth/main.nf @@ -9,7 +9,7 @@ process MOSDEPTH { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::mosdepth=0.3.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/msisensor/msi/functions.nf b/software/msisensor/msi/functions.nf index f177f0c8..da9da093 100644 --- a/software/msisensor/msi/functions.nf +++ b/software/msisensor/msi/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/msisensor/msi/main.nf b/software/msisensor/msi/main.nf index d89624a7..b4a0eb3c 100644 --- a/software/msisensor/msi/main.nf +++ b/software/msisensor/msi/main.nf @@ -9,7 +9,7 @@ process MSISENSOR_MSI { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::msisensor=0.5" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/msisensor/scan/functions.nf b/software/msisensor/scan/functions.nf index f177f0c8..da9da093 100644 --- a/software/msisensor/scan/functions.nf +++ b/software/msisensor/scan/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/msisensor/scan/main.nf b/software/msisensor/scan/main.nf index 3030560b..57ebeb28 100644 --- a/software/msisensor/scan/main.nf +++ b/software/msisensor/scan/main.nf @@ -9,7 +9,7 @@ process MSISENSOR_SCAN { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::msisensor=0.5" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/multiqc/functions.nf b/software/multiqc/functions.nf index d25eea86..da9da093 100644 --- a/software/multiqc/functions.nf +++ b/software/multiqc/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/multiqc/main.nf b/software/multiqc/main.nf index a92e533a..da780800 100644 --- a/software/multiqc/main.nf +++ b/software/multiqc/main.nf @@ -8,13 +8,13 @@ process MULTIQC { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename: filename, options: params.options, publish_dir: getSoftwareName(task.process), publish_id: '') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? "bioconda::multiqc=1.9" : null) + conda (params.enable_conda ? "bioconda::multiqc=1.10.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" + container "https://depot.galaxyproject.org/singularity/multiqc:1.10.1--py_0" } else { - container "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0" + container "quay.io/biocontainers/multiqc:1.10.1--py_0" } input: diff --git a/software/muscle/functions.nf b/software/muscle/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/muscle/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/muscle/main.nf b/software/muscle/main.nf new file mode 100644 index 00000000..9f4747a4 --- /dev/null +++ b/software/muscle/main.nf @@ -0,0 +1,60 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process MUSCLE { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::muscle=3.8.1551" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/muscle:3.8.1551--h7d875b9_6" + } else { + container "quay.io/biocontainers/muscle:3.8.1551--h7d875b9_6" + } + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.afa") , optional: true, emit: aligned_fasta + tuple val(meta), path("*.phyi"), optional: true, emit: phyi + tuple val(meta), path("*.phys"), optional: true, emit: phys + tuple val(meta), path("*.clw") , optional: true, emit: clustalw + tuple val(meta), path("*.html"), optional: true, emit: html + tuple val(meta), path("*.msf") , optional: true, emit: msf + tuple val(meta), path("*.tree"), optional: true, emit: tree + path "*.log" , emit: log + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def fasta_out = options.args.contains('-fasta') ? "-fastaout ${prefix}_muscle_msa.afa" : '' + def clw_out = options.args.contains('-clw') ? "-clwout ${prefix}_muscle_msa.clw" : '' + def msf_out = options.args.contains('-msf') ? "-msfout ${prefix}_muscle_msa.msf" : '' + def phys_out = options.args.contains('-phys') ? "-physout ${prefix}_muscle_msa.phys" : '' + def phyi_out = options.args.contains('-phyi') ? "-phyiout ${prefix}_muscle_msa.phyi" : '' + def html_out = options.args.contains('-html') ? "-htmlout ${prefix}_muscle_msa.html" : '' + def tree_out = options.args.contains('-maketree') ? "-out ${prefix}_muscle_msa.tree" : '' + + """ + muscle \\ + $options.args \\ + -in $fasta \\ + $fasta_out \\ + $clw_out \\ + $msf_out \\ + $phys_out \\ + $phyi_out \\ + $html_out \\ + $tree_out \\ + -loga muscle_msa.log + muscle -version | sed 's/^MUSCLE v//; s/by.*\$//' > ${software}.version.txt + """ +} diff --git a/software/muscle/meta.yml b/software/muscle/meta.yml new file mode 100644 index 00000000..e0eb5289 --- /dev/null +++ b/software/muscle/meta.yml @@ -0,0 +1,56 @@ +name: muscle +description: MUSCLE is a program for creating multiple alignments of amino acid or nucleotide sequences. A range of options are provided that give you the choice of optimizing accuracy, speed, or some compromise between the two +keywords: + - msa + - multiple sequence alignment +tools: + - muscle: + description: MUSCLE is a multiple sequence alignment tool with high accuracy and throughput + homepage: https://www.drive5.com/muscle + documentation: http://www.drive5.com/muscle/muscle.html#_Toc81224840 + doi: "https://pubmed.ncbi.nlm.nih.gov/15034147/" + licence: ['http://www.drive5.com/muscle/manual/license.html'] +input: + - fasta: + type: file + description: Input sequences for alignment must be in FASTA format + pattern: "*.{fasta,fa,fna}" +output: + - aligned_fasta: + type: file + description: Multiple sequence alignment produced in FASTA format + pattern: "*.{afa}" + - msf: + type: file + description: GCG Multiple Sequence File (MSF) alignment format (similar to CLUSTALW) + pattern: "*.{msf}" + - clustalw: + type: file + description: Multiple sequence alignment produced in ClustalW format without base/residue numbering + pattern: "*.{clw}" + - phyi: + type: file + description: Multiple sequence alignment produced in PHYLIP interleaved format + pattern: "*.{phyi}" + - phys: + type: file + description: Multiple sequence alignment produced in PHYLIP sequential format + pattern: "*.{phys}" + - html: + type: file + description: Multiple sequence alignment produced in HTML format + pattern: "*.{html}" + - tree: + type: file + description: NJ or UPGMA tree in Newick format produced from a multiple sequence alignment + pattern: "*.{tree}" + - log: + type: file + description: Log file of MUSCLE run + pattern: "*{.log}" + - version: + type: file + description: File containing MUSCLE software version + pattern: "*.{version.txt}" +authors: + - "@MGordon" diff --git a/software/nanolyse/functions.nf b/software/nanolyse/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/nanolyse/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/nanolyse/main.nf b/software/nanolyse/main.nf new file mode 100644 index 00000000..0abad6cb --- /dev/null +++ b/software/nanolyse/main.nf @@ -0,0 +1,39 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process NANOLYSE { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::nanolyse=1.2.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/nanolyse:1.2.0--py_0" + } else { + container "quay.io/biocontainers/nanolyse:1.2.0--py_0" + } + + input: + tuple val(meta), path(fastq) + path fasta + + output: + tuple val(meta), path("*.fastq.gz"), emit: fastq + path "*.log" , emit: log + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + gunzip -c $fastq | NanoLyse -r $fasta | gzip > ${prefix}.fastq.gz + mv NanoLyse.log ${prefix}.nanolyse.log + + echo \$(NanoLyse --version 2>&1) | sed -e "s/NanoLyse //g" > ${software}.version.txt + """ +} diff --git a/software/nanolyse/meta.yml b/software/nanolyse/meta.yml new file mode 100644 index 00000000..aae299da --- /dev/null +++ b/software/nanolyse/meta.yml @@ -0,0 +1,46 @@ +name: nanolyse +description: DNA contaminant removal using NanoLyse +keywords: + - contaminant_removal +tools: + - nanolyse: + description: | + DNA contaminant removal using NanoLyse + homepage: https://github.com/wdecoster/nanolyse + documentation: https://github.com/wdecoster/nanolyse#nanolyse +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: | + Basecalled reads in FASTQ.GZ format + pattern: "*.fastq.gz" + - fasta: + type: file + description: | + A reference fasta file against which to filter. + pattern: "*.fasta" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: Reads with contaminants removed in FASTQ format + pattern: "*.fastq.gz" + - log: + type: file + description: Log of the Nanolyse run. + pattern: "*.log" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" diff --git a/software/nanoplot/functions.nf b/software/nanoplot/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/nanoplot/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/nanoplot/main.nf b/software/nanoplot/main.nf new file mode 100644 index 00000000..af080dc8 --- /dev/null +++ b/software/nanoplot/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process NANOPLOT { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::nanoplot=1.36.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/nanoplot:1.36.1--pyhdfd78af_0" + } else { + container "quay.io/biocontainers/nanoplot:1.36.1--pyhdfd78af_0" + } + + input: + tuple val(meta), path(ontfile) + + output: + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.png") , emit: png + tuple val(meta), path("*.txt") , emit: txt + tuple val(meta), path("*.log") , emit: log + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def input_file = ("$ontfile".endsWith(".fastq.gz")) ? "--fastq ${ontfile}" : + ("$ontfile".endsWith(".txt")) ? "--summary ${ontfile}" : '' + """ + NanoPlot \\ + $options.args \\ + -t $task.cpus \\ + $input_file + echo \$(NanoPlot --version 2>&1) | sed 's/^.*NanoPlot //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/nanoplot/meta.yml b/software/nanoplot/meta.yml new file mode 100644 index 00000000..f1d94312 --- /dev/null +++ b/software/nanoplot/meta.yml @@ -0,0 +1,58 @@ +name: nanoplot +description: Run NanoPlot on nanopore-sequenced reads +keywords: + - quality control + - qc + - fastq + - sequencing summary + - nanopore +tools: + - nanoplot: + description: | + NanoPlot is a tool for ploting long-read sequencing data and + alignment. + homepage: http://nanoplot.bioinf.be + documentation: https://github.com/wdecoster/NanoPlot +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: | + List of input basecalled-FastQ files. + - summary_txt: + type: file + description: | + List of sequencing_summary.txt files from running basecalling. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: NanoPlot report + pattern: "*{.html}" + - png: + type: file + description: Plots generated by NanoPlot + pattern: "*{.png}" + - txt: + type: file + description: Stats from NanoPlot + pattern: "*{.txt}" + - log: + type: file + description: log file of NanoPlot run + pattern: "*{.log}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@yuukiiwa" diff --git a/software/nextclade/functions.nf b/software/nextclade/functions.nf new file mode 100755 index 00000000..da9da093 --- /dev/null +++ b/software/nextclade/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/nextclade/main.nf b/software/nextclade/main.nf new file mode 100755 index 00000000..24ca7309 --- /dev/null +++ b/software/nextclade/main.nf @@ -0,0 +1,55 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process NEXTCLADE { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::nextclade_js=0.14.4" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/nextclade_js:0.14.4--h9ee0642_0" + } else { + container "quay.io/biocontainers/nextclade_js:0.14.4--h9ee0642_0" + } + + input: + tuple val(meta), path(fasta) + val output_format + + output: + tuple val(meta), path("${prefix}.csv") , optional:true, emit: csv + tuple val(meta), path("${prefix}.json") , optional:true, emit: json + tuple val(meta), path("${prefix}.tree.json") , optional:true, emit: json_tree + tuple val(meta), path("${prefix}.tsv") , optional:true, emit: tsv + tuple val(meta), path("${prefix}.clades.tsv"), optional:true, emit: tsv_clades + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def format = output_format + if (!(format in ['json', 'csv', 'tsv', 'tree', 'tsv-clades-only'])) { + format = 'json' + } + def extension = format + if (format in ['tsv-clades-only']) { + extension = '.clades.tsv' + } else if (format in ['tree']) { + extension = 'tree.json' + } + """ + nextclade \\ + $options.args \\ + --jobs $task.cpus \\ + --input-fasta $fasta \\ + --output-${format} ${prefix}.${extension} + + echo \$(nextclade --version 2>&1) > ${software}.version.txt + """ +} diff --git a/software/nextclade/meta.yml b/software/nextclade/meta.yml new file mode 100755 index 00000000..8e0eabd7 --- /dev/null +++ b/software/nextclade/meta.yml @@ -0,0 +1,64 @@ +name: nextclade +description: SARS-CoV-2 genome clade assignment, mutation calling, and sequence quality checks (Javascript implementation) +keywords: + - nextclade + - variant + - consensus +tools: + - nextclade: + description: SARS-CoV-2 genome clade assignment, mutation calling, and sequence quality checks (Javascript implementation) + homepage: https://clades.nextstrain.org + documentation: None + tool_dev_url: https://github.com/nextstrain/nextclade + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA file containing one or more consensus sequences + pattern: "*.{fasta,fa}" + - output_format: + type: string + description: | + String for output format supported by nextclade + i.e one of 'json', 'csv', 'tsv', 'tree', 'tsv-clades-only' + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - csv: + type: file + description: CSV file containing nextclade results + pattern: "*.{csv}" + - json: + type: file + description: JSON file containing nextclade results + pattern: "*.{json}" + - json_tree: + type: file + description: Auspice JSON V2 containing nextclade results + pattern: "*.{tree.json}" + - tsv: + type: file + description: TSV file containing nextclade results + pattern: "*.{tsv}" + - tsv_clades: + type: file + description: TSV file containing nextclade results for clades only + pattern: "*.{clades.tsv}" + +authors: + - "@drpatelh" diff --git a/software/optitype/functions.nf b/software/optitype/functions.nf index f177f0c8..da9da093 100644 --- a/software/optitype/functions.nf +++ b/software/optitype/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/optitype/main.nf b/software/optitype/main.nf index 75cf54b5..15e26c95 100644 --- a/software/optitype/main.nf +++ b/software/optitype/main.nf @@ -9,7 +9,7 @@ process OPTITYPE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::optitype=1.3.5" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/pairix/functions.nf b/software/pairix/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairix/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairix/main.nf b/software/pairix/main.nf new file mode 100644 index 00000000..ff1b8520 --- /dev/null +++ b/software/pairix/main.nf @@ -0,0 +1,37 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRIX { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairix=0.3.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairix:0.3.7--py36h30a8e3e_3" + } else { + container "quay.io/biocontainers/pairix:0.3.7--py36h30a8e3e_3" + } + + input: + tuple val(meta), path(pair) + + output: + tuple val(meta), path(pair), path("*.px2"), emit: index + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + pairix \\ + $options.args \\ + $pair + + echo \$(pairix --help 2>&1) | sed 's/^.*Version: //; s/Usage.*\$//' > ${software}.version.txt + """ +} diff --git a/software/pairix/meta.yml b/software/pairix/meta.yml new file mode 100644 index 00000000..b0ac1b15 --- /dev/null +++ b/software/pairix/meta.yml @@ -0,0 +1,42 @@ +name: pairix +description: | + a tool for indexing and querying on a block-compressed text file + containing pairs of genomic coordinates +keywords: + - index +tools: + - pairix: + description: 2D indexing on bgzipped text files of paired genomic coordinates + homepage: "https://github.com/4dn-dcic/pairix" + documentation: "https://github.com/4dn-dcic/pairix" + tool_dev_url: "https://github.com/4dn-dcic/pairix" + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pair: + type: file + description: pair file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - index: + type: file + description: pair index file + pattern: "*.px2" + +authors: + - "@jianhong" diff --git a/software/pairtools/dedup/functions.nf b/software/pairtools/dedup/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/dedup/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/dedup/main.nf b/software/pairtools/dedup/main.nf new file mode 100644 index 00000000..07c81c6c --- /dev/null +++ b/software/pairtools/dedup/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_DEDUP { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.pairs.gz") , emit: pairs + tuple val(meta), path("*.pairs.stat"), emit: stat + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + pairtools dedup \\ + $options.args \\ + -o ${prefix}.pairs.gz \\ + --output-stats ${prefix}.pairs.stat \\ + $input + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/dedup/meta.yml b/software/pairtools/dedup/meta.yml new file mode 100644 index 00000000..888a52ff --- /dev/null +++ b/software/pairtools/dedup/meta.yml @@ -0,0 +1,44 @@ +name: pairtools_dedup +description: Find and remove PCR/optical duplicates +keywords: + - dedup +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: pair file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - pairs: + type: file + description: Duplicates removed pairs + pattern: "*.{pairs.gz}" + - stat: + type: file + description: stats of the pairs + pattern: "*.{pairs.stat}" + +authors: + - "@jianhong" diff --git a/software/pairtools/flip/functions.nf b/software/pairtools/flip/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/flip/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/flip/main.nf b/software/pairtools/flip/main.nf new file mode 100644 index 00000000..efde6f55 --- /dev/null +++ b/software/pairtools/flip/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_FLIP { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(sam) + path chromsizes + + output: + tuple val(meta), path("*.flip.gz"), emit: flip + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + pairtools \\ + flip \\ + -c $chromsizes \\ + $options.args \\ + -o ${prefix}.flip.gz \\ + $sam + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/flip/meta.yml b/software/pairtools/flip/meta.yml new file mode 100644 index 00000000..50badc23 --- /dev/null +++ b/software/pairtools/flip/meta.yml @@ -0,0 +1,43 @@ +name: pairtools_flip +description: Flip pairs to get an upper-triangular matrix +keywords: + - flip +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sam: + type: file + description: pair file + - chromsizes: + type: file + description: chromosome size file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - flip: + type: file + description: output file of flip + pattern: "*.{flip.gz}" + +authors: + - "@jianhong" diff --git a/software/pairtools/parse/functions.nf b/software/pairtools/parse/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/parse/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/parse/main.nf b/software/pairtools/parse/main.nf new file mode 100644 index 00000000..ad3169e1 --- /dev/null +++ b/software/pairtools/parse/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_PARSE { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(bam) + path chromsizes + + output: + tuple val(meta), path("*.pairsam.gz") , emit: pairsam + tuple val(meta), path("*.pairsam.stat"), emit: stat + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + pairtools \\ + parse \\ + -c $chromsizes \\ + $options.args \\ + --output-stats ${prefix}.pairsam.stat \\ + -o ${prefix}.pairsam.gz \\ + $bam + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/parse/meta.yml b/software/pairtools/parse/meta.yml new file mode 100644 index 00000000..311aa0ec --- /dev/null +++ b/software/pairtools/parse/meta.yml @@ -0,0 +1,48 @@ +name: pairtools_parse +description: Find ligation junctions in .sam, make .pairs +keywords: + - parse +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - chromsizes: + type: file + description: chromosome size file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - pairsam: + type: file + description: parsed pair file + pattern: "*.{pairsam.gz}" + - stat: + type: file + description: stats of the pairs + pattern: "*.{pairsam.stat}" + +authors: + - "@jianhong" diff --git a/software/pairtools/restrict/functions.nf b/software/pairtools/restrict/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/restrict/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/restrict/main.nf b/software/pairtools/restrict/main.nf new file mode 100644 index 00000000..b9d7c7c7 --- /dev/null +++ b/software/pairtools/restrict/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_RESTRICT { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(pairs) + path frag + + output: + tuple val(meta), path("*.pairs.gz"), emit: restrict + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + pairtools \\ + restrict \\ + -f $frag \\ + $options.args \\ + -o ${prefix}.pairs.gz \\ + $pairs + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/restrict/meta.yml b/software/pairtools/restrict/meta.yml new file mode 100644 index 00000000..28b8eabc --- /dev/null +++ b/software/pairtools/restrict/meta.yml @@ -0,0 +1,46 @@ +name: pairtools_restrict +description: Assign restriction fragments to pairs +keywords: + - sort +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pairs: + type: file + description: pairs file + - frag: + type: file + description: | + a tab-separated BED file with the positions of restriction fragments + (chrom, start, end). + Can be generated using cooler digest. + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - restrict: + type: file + description: Filtered pairs file + pattern: "*.{pairs.gz}" + +authors: + - "@jianhong" diff --git a/software/pairtools/select/functions.nf b/software/pairtools/select/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/select/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/select/main.nf b/software/pairtools/select/main.nf new file mode 100644 index 00000000..680ad555 --- /dev/null +++ b/software/pairtools/select/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_SELECT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.selected.pairs.gz") , emit: selected + tuple val(meta), path("*.unselected.pairs.gz"), emit: unselected + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + pairtools select \\ + "$options.args" \\ + -o ${prefix}.selected.pairs.gz \\ + --output-rest ${prefix}.unselected.pairs.gz \\ + ${input} + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/select/meta.yml b/software/pairtools/select/meta.yml new file mode 100644 index 00000000..cf256de2 --- /dev/null +++ b/software/pairtools/select/meta.yml @@ -0,0 +1,44 @@ +name: pairtools_select +description: Select pairs according to given condition by options.args +keywords: + - select +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: pairs file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - selected: + type: file + description: Selected pairs file + pattern: "*.{selected.pairs.gz}" + - unselected: + type: file + description: Rest pairs file. + pattern: "*.{unselected.pairs.gz}" + +authors: + - "@jianhong" diff --git a/software/pairtools/sort/functions.nf b/software/pairtools/sort/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pairtools/sort/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pairtools/sort/main.nf b/software/pairtools/sort/main.nf new file mode 100644 index 00000000..d169d354 --- /dev/null +++ b/software/pairtools/sort/main.nf @@ -0,0 +1,43 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PAIRTOOLS_SORT { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::pairtools=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pairtools:0.3.0--py37hb9c2fc3_5" + } else { + container "quay.io/biocontainers/pairtools:0.3.0--py37hb9c2fc3_5" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.pairs.gz"), emit: sorted + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def mem = task.memory.toString().replaceAll(/(\s|\.|B)+/, '') + """ + pairtools \\ + sort \\ + $options.args \\ + --nproc $task.cpus \\ + --memory "$mem" \\ + -o ${prefix}.pairs.gz \\ + $input + + echo \$(pairtools --version 2>&1) | sed 's/pairtools.*version //' > ${software}.version.txt + """ +} diff --git a/software/pairtools/sort/meta.yml b/software/pairtools/sort/meta.yml new file mode 100644 index 00000000..565961bc --- /dev/null +++ b/software/pairtools/sort/meta.yml @@ -0,0 +1,40 @@ +name: pairtools_sort +description: Sort a .pairs/.pairsam file +keywords: + - sort +tools: + - pairtools: + description: CLI tools to process mapped Hi-C data + homepage: http://pairtools.readthedocs.io/ + documentation: http://pairtools.readthedocs.io/ + tool_dev_url: https://github.com/mirnylab/pairtools + doi: "" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: A pairs file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - sorted: + type: file + description: Sorted pairs file + pattern: "*.{pairs.gz}" + +authors: + - "@jianhong" diff --git a/software/pangolin/functions.nf b/software/pangolin/functions.nf index d25eea86..da9da093 100644 --- a/software/pangolin/functions.nf +++ b/software/pangolin/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/pangolin/main.nf b/software/pangolin/main.nf index dfc06ef3..7be9311c 100644 --- a/software/pangolin/main.nf +++ b/software/pangolin/main.nf @@ -9,13 +9,13 @@ process PANGOLIN { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::pangolin=2.3.8' : null) + conda (params.enable_conda ? 'bioconda::pangolin=3.0.5' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container 'https://depot.galaxyproject.org/singularity/pangolin:2.3.8--py_0' + container 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' } else { - container 'quay.io/biocontainers/pangolin:2.3.8--py_0' + container 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' } input: @@ -27,7 +27,7 @@ process PANGOLIN { script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ pangolin \\ $fasta\\ @@ -35,6 +35,6 @@ process PANGOLIN { --threads $task.cpus \\ $options.args - pangolin --version | sed "s/pangolin //g" > ${software}.version.txt + echo \$(pangolin --version) | sed "s/pangolin //g" > ${software}.version.txt """ } diff --git a/software/phantompeakqualtools/functions.nf b/software/phantompeakqualtools/functions.nf index d25eea86..da9da093 100644 --- a/software/phantompeakqualtools/functions.nf +++ b/software/phantompeakqualtools/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/phantompeakqualtools/main.nf b/software/phantompeakqualtools/main.nf index addff05b..7656420f 100644 --- a/software/phantompeakqualtools/main.nf +++ b/software/phantompeakqualtools/main.nf @@ -11,7 +11,7 @@ process PHANTOMPEAKQUALTOOLS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::phantompeakqualtools=1.2.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/picard/collectmultiplemetrics/functions.nf b/software/picard/collectmultiplemetrics/functions.nf index d25eea86..da9da093 100644 --- a/software/picard/collectmultiplemetrics/functions.nf +++ b/software/picard/collectmultiplemetrics/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/picard/collectmultiplemetrics/main.nf b/software/picard/collectmultiplemetrics/main.nf index 2ab53207..c0059a40 100644 --- a/software/picard/collectmultiplemetrics/main.nf +++ b/software/picard/collectmultiplemetrics/main.nf @@ -9,7 +9,7 @@ process PICARD_COLLECTMULTIPLEMETRICS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::picard=2.23.9" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/picard/collectwgsmetrics/functions.nf b/software/picard/collectwgsmetrics/functions.nf index f177f0c8..da9da093 100644 --- a/software/picard/collectwgsmetrics/functions.nf +++ b/software/picard/collectwgsmetrics/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/picard/collectwgsmetrics/main.nf b/software/picard/collectwgsmetrics/main.nf index 9469d7e1..f1c69d28 100644 --- a/software/picard/collectwgsmetrics/main.nf +++ b/software/picard/collectwgsmetrics/main.nf @@ -9,7 +9,7 @@ process PICARD_COLLECTWGSMETRICS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::picard=2.25.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/picard/markduplicates/functions.nf b/software/picard/markduplicates/functions.nf index d25eea86..da9da093 100644 --- a/software/picard/markduplicates/functions.nf +++ b/software/picard/markduplicates/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/picard/markduplicates/main.nf b/software/picard/markduplicates/main.nf index da4853e1..d7647414 100644 --- a/software/picard/markduplicates/main.nf +++ b/software/picard/markduplicates/main.nf @@ -9,7 +9,7 @@ process PICARD_MARKDUPLICATES { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::picard=2.23.9" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/picard/mergesamfiles/functions.nf b/software/picard/mergesamfiles/functions.nf index d25eea86..da9da093 100644 --- a/software/picard/mergesamfiles/functions.nf +++ b/software/picard/mergesamfiles/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/picard/mergesamfiles/main.nf b/software/picard/mergesamfiles/main.nf index bfd5d3ab..abbfae8f 100644 --- a/software/picard/mergesamfiles/main.nf +++ b/software/picard/mergesamfiles/main.nf @@ -9,7 +9,7 @@ process PICARD_MERGESAMFILES { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::picard=2.23.9" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/plasmidid/functions.nf b/software/plasmidid/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/plasmidid/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/plasmidid/main.nf b/software/plasmidid/main.nf new file mode 100644 index 00000000..986b6451 --- /dev/null +++ b/software/plasmidid/main.nf @@ -0,0 +1,50 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PLASMIDID { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? 'bioconda::plasmidid=1.6.5' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container 'https://depot.galaxyproject.org/singularity/plasmidid:1.6.5--hdfd78af_0' + } else { + container 'quay.io/biocontainers/plasmidid:1.6.5--hdfd78af_0' + } + + input: + tuple val(meta), path(scaffold) + path fasta + + output: + tuple val(meta), path("${prefix}/*final_results.html"), emit: html + tuple val(meta), path("${prefix}/*final_results.tab") , emit: tab + tuple val(meta), path("${prefix}/images/") , emit: images + tuple val(meta), path("${prefix}/logs/") , emit: logs + tuple val(meta), path("${prefix}/data/") , emit: data + tuple val(meta), path("${prefix}/database/") , emit: database + tuple val(meta), path("${prefix}/fasta_files/") , emit: fasta_files + tuple val(meta), path("${prefix}/kmer/") , emit: kmer + path '*.version.txt' , emit: version + + script: + def software = getSoftwareName(task.process) + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + plasmidID \\ + -d $fasta \\ + -s $prefix \\ + -c $scaffold \\ + $options.args \\ + -o . + + mv NO_GROUP/$prefix ./$prefix + echo \$(plasmidID --version 2>&1) > ${software}.version.txt + """ +} diff --git a/software/plasmidid/meta.yml b/software/plasmidid/meta.yml new file mode 100644 index 00000000..b7b188f8 --- /dev/null +++ b/software/plasmidid/meta.yml @@ -0,0 +1,76 @@ +name: plasmidid +description: assembles bacterial plasmids +keywords: + - assembly + - plasmid + - bacterial +tools: + - plasmidid: + description: Pipeline for plasmid identification and reconstruction + homepage: https://github.com/BU-ISCIII/plasmidID/wiki + documentation: https://github.com/BU-ISCIII/plasmidID#readme + tool_dev_url: https://github.com/BU-ISCIII/plasmidID + doi: "" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - scaffold: + type: file + description: | + Fasta file containing scaffold + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: html file with results rendered + pattern: "*.{html}" + - tab: + type: file + description: Results in a tabular file + pattern: "*.{tab}" + - images: + type: directory + description: Directory containing the images produced by plasmidid + pattern: "images" + - logs: + type: directory + description: Directory containing the logs produced by plasmidid + pattern: "logs" + - data: + type: directory + description: Directory containing the data produced by plasmidid + pattern: "data" + - database: + type: directory + description: Directory containing the database produced by plasmidid + pattern: "database" + - fasta_files: + type: directory + description: Directory containing the fasta files produced by plasmidid + pattern: "fasta_files" + - kmer: + type: directory + description: Directory containing the kmer files produced by plasmidid + pattern: "database" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/preseq/lcextrap/functions.nf b/software/preseq/lcextrap/functions.nf index d25eea86..da9da093 100644 --- a/software/preseq/lcextrap/functions.nf +++ b/software/preseq/lcextrap/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/preseq/lcextrap/main.nf b/software/preseq/lcextrap/main.nf index 601e5375..2f601e4f 100644 --- a/software/preseq/lcextrap/main.nf +++ b/software/preseq/lcextrap/main.nf @@ -10,13 +10,13 @@ process PRESEQ_LCEXTRAP { label 'error_ignore' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::preseq=2.0.3" : null) + conda (params.enable_conda ? "bioconda::preseq=3.1.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/preseq:2.0.3--hf53bd2b_3" + container "https://depot.galaxyproject.org/singularity/preseq:3.1.2--h06ef8b0_1" } else { - container "quay.io/biocontainers/preseq:2.0.3--hf53bd2b_3" + container "quay.io/biocontainers/preseq:3.1.2--h06ef8b0_1" } input: diff --git a/software/preseq/lcextrap/meta.yml b/software/preseq/lcextrap/meta.yml new file mode 100755 index 00000000..d1716231 --- /dev/null +++ b/software/preseq/lcextrap/meta.yml @@ -0,0 +1,47 @@ +name: preseq_lcextrap +description: Software for predicting library complexity and genome coverage in high-throughput sequencing +keywords: + - preseq + - library + - complexity +tools: + - preseq: + description: Software for predicting library complexity and genome coverage in high-throughput sequencing + homepage: http://smithlabresearch.org/software/preseq/ + documentation: None + tool_dev_url: None + doi: "" + licence: ['GPL'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - ccurve: + type: file + description: File containing output of Preseq lcextrap + pattern: "*.{ccurve.txt}" + - log: + type: file + description: Log file containing stderr produced by Preseq + pattern: "*.{log}" + +authors: + - "@drpatelh" diff --git a/software/prodigal/functions.nf b/software/prodigal/functions.nf index f177f0c8..da9da093 100644 --- a/software/prodigal/functions.nf +++ b/software/prodigal/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/prodigal/main.nf b/software/prodigal/main.nf index 207aecbe..5b73d6f1 100644 --- a/software/prodigal/main.nf +++ b/software/prodigal/main.nf @@ -9,7 +9,7 @@ process PRODIGAL { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::prodigal=2.6.3" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/prokka/functions.nf b/software/prokka/functions.nf index f177f0c8..da9da093 100644 --- a/software/prokka/functions.nf +++ b/software/prokka/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/prokka/main.nf b/software/prokka/main.nf index 24efd32d..1fa3f3d9 100644 --- a/software/prokka/main.nf +++ b/software/prokka/main.nf @@ -8,7 +8,7 @@ process PROKKA { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::prokka=1.14.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/pycoqc/functions.nf b/software/pycoqc/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/pycoqc/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/pycoqc/main.nf b/software/pycoqc/main.nf new file mode 100644 index 00000000..3f010247 --- /dev/null +++ b/software/pycoqc/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PYCOQC { + tag "$summary" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::pycoqc=2.5.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/pycoqc:2.5.2--py_0" + } else { + container "quay.io/biocontainers/pycoqc:2.5.2--py_0" + } + + input: + path summary + + output: + path "*.html" , emit: html + path "*.json" , emit: json + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + pycoQC \\ + $options.args \\ + -f $summary \\ + -o pycoqc.html \\ + -j pycoqc.json + + echo \$(pycoQC --version 2>&1) | sed 's/^.*pycoQC v//; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/pycoqc/meta.yml b/software/pycoqc/meta.yml new file mode 100644 index 00000000..059b2f15 --- /dev/null +++ b/software/pycoqc/meta.yml @@ -0,0 +1,48 @@ +name: pycoqc +description: write your description here +keywords: + - qc + - quality control + - sequencing + - nanopore +tools: + - pycoqc: + description: PycoQC computes metrics and generates interactive QC plots for Oxford Nanopore technologies sequencing data + homepage: https://github.com/tleonardi/pycoQC + documentation: https://tleonardi.github.io/pycoQC/ + tool_dev_url: https://github.com/tleonardi/pycoQC + doi: "10.21105/joss.01236" + licence: ['GNU General Public v3 (GPL v3)'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - summary: + type: file + description: sequencing summary file + pattern: "*.{txt}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: Results in HTML format + - json: + type: file + description: Results in JSON format + pattern: "*.{json}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/software/qcat/functions.nf b/software/qcat/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/qcat/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/qcat/main.nf b/software/qcat/main.nf new file mode 100644 index 00000000..8fc0814a --- /dev/null +++ b/software/qcat/main.nf @@ -0,0 +1,52 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process QCAT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::qcat=1.1.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/qcat:1.1.0--py_0" + } else { + container "quay.io/biocontainers/qcat:1.1.0--py_0" + } + + input: + tuple val(meta), path(reads) + val barcode_kit + + output: + tuple val(meta), path("fastq/*.fastq.gz"), emit: reads + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + ## Unzip fastq file + ## qcat doesn't support zipped files yet + FILE=$reads + if [[ \$FILE == *.gz ]] + then + zcat $reads > unzipped.fastq + FILE=unzipped.fastq + fi + + qcat \\ + -f \$FILE \\ + -b ./fastq \\ + --kit $barcode_kit + + ## Zip fastq files + gzip fastq/* + + echo \$(qcat --version 2>&1) | sed 's/^.*qcat //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/qcat/meta.yml b/software/qcat/meta.yml new file mode 100644 index 00000000..3280f26e --- /dev/null +++ b/software/qcat/meta.yml @@ -0,0 +1,39 @@ +name: qcat +description: Demultiplexer for Nanopore samples +keywords: + - demultiplex + +tools: + - qcat: + description: | + A demultiplexer for Nanopore samples + homepage: https://github.com/nanoporetech/qcat + documentation: https://github.com/nanoporetech/qcat#qcat +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + Non-demultiplexed fastq files + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Demultiplexed fastq samples + pattern: "*.fastq.gz" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/software/qualimap/bamqc/functions.nf b/software/qualimap/bamqc/functions.nf index d25eea86..da9da093 100644 --- a/software/qualimap/bamqc/functions.nf +++ b/software/qualimap/bamqc/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/qualimap/bamqc/main.nf b/software/qualimap/bamqc/main.nf index 4a9a8355..463cde4c 100644 --- a/software/qualimap/bamqc/main.nf +++ b/software/qualimap/bamqc/main.nf @@ -9,7 +9,7 @@ process QUALIMAP_BAMQC { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::qualimap=2.2.2d" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/qualimap/rnaseq/functions.nf b/software/qualimap/rnaseq/functions.nf index d25eea86..da9da093 100644 --- a/software/qualimap/rnaseq/functions.nf +++ b/software/qualimap/rnaseq/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/qualimap/rnaseq/main.nf b/software/qualimap/rnaseq/main.nf index c2487486..96fe2cd4 100644 --- a/software/qualimap/rnaseq/main.nf +++ b/software/qualimap/rnaseq/main.nf @@ -9,7 +9,7 @@ process QUALIMAP_RNASEQ { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::qualimap=2.2.2d" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/quast/functions.nf b/software/quast/functions.nf index d25eea86..da9da093 100644 --- a/software/quast/functions.nf +++ b/software/quast/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/quast/main.nf b/software/quast/main.nf index aa8d7d90..0b94c410 100644 --- a/software/quast/main.nf +++ b/software/quast/main.nf @@ -8,7 +8,7 @@ process QUAST { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? 'bioconda::quast=5.0.2' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rapidnj/functions.nf b/software/rapidnj/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/rapidnj/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/rapidnj/main.nf b/software/rapidnj/main.nf new file mode 100644 index 00000000..78ed7693 --- /dev/null +++ b/software/rapidnj/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process RAPIDNJ { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::rapidnj=2.3.2 conda-forge::biopython=1.78" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-805c6e0f138f952f9c61cdd57c632a1a263ea990:3c52e4c8da6b3e4d69b9ca83fa4d366168898179-0" + } else { + container "quay.io/biocontainers/mulled-v2-805c6e0f138f952f9c61cdd57c632a1a263ea990:3c52e4c8da6b3e4d69b9ca83fa4d366168898179-0" + } + + input: + path alignment + + output: + path "*.sth" , emit: stockholm_alignment + path "*.tre" , emit: phylogeny + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + python \\ + -c 'from Bio import SeqIO; SeqIO.convert("$alignment", "fasta", "alignment.sth", "stockholm")' + + rapidnj \\ + alignment.sth \\ + $options.args \\ + -i sth \\ + -c $task.cpus \\ + -x rapidnj_phylogeny.tre + + # Doesn't appear to be a way of getting the version number + echo 2.3.2 > ${software}.version.txt + """ +} diff --git a/software/rapidnj/meta.yml b/software/rapidnj/meta.yml new file mode 100644 index 00000000..cf2c61fc --- /dev/null +++ b/software/rapidnj/meta.yml @@ -0,0 +1,37 @@ +name: rapidnj +description: Produces a Newick format phylogeny from a multiple sequence alignment using a Neighbour-Joining algorithm. Capable of bacterial genome size alignments. +keywords: + - phylogeny + - newick + - neighbour-joining +tools: + - rapidnj: + description: RapidNJ is an algorithmic engineered implementation of canonical neighbour-joining. It uses an efficient search heuristic to speed-up the core computations of the neighbour-joining method that enables RapidNJ to outperform other state-of-the-art neighbour-joining implementations. + homepage: https://birc.au.dk/software/rapidnj + documentation: https://birc.au.dk/software/rapidnj + tool_dev_url: https://github.com/somme89/rapidNJ + doi: "doi:10.1007/978-3-540-87361-7_10" + licence: ['GPL v2'] + +input: + - alignment: + type: file + description: A FASTA format multiple sequence alignment file + pattern: "*.{fasta,fas,fa,mfa}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - phylogeny: + type: file + description: A phylogeny in Newick format + pattern: "*.{tre}" + - stockholm_alignment: + type: file + description: An alignment in Stockholm format + pattern: "*.{sth}" +authors: + - "@aunderwo" + - "@avantonder" diff --git a/software/rasusa/functions.nf b/software/rasusa/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/rasusa/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/rasusa/main.nf b/software/rasusa/main.nf new file mode 100644 index 00000000..f895e1a2 --- /dev/null +++ b/software/rasusa/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process RASUSA { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::rasusa=0.3.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/rasusa:0.3.0--h779adbc_1" + } else { + container "quay.io/biocontainers/rasusa:0.3.0--h779adbc_1" + } + + input: + tuple val(meta), path(reads), val(genome_size) + val depth_cutoff + + output: + tuple val(meta), path('*.fastq.gz'), emit: reads + path '*.version.txt' , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def output = meta.single_end ? "--output ${prefix}.fastq.gz" : "--output ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz" + """ + rasusa \\ + $options.args \\ + --coverage $depth_cutoff \\ + --genome-size $genome_size \\ + --input $reads \\ + $output + echo \$(rasusa --version 2>&1) | sed -e "s/rasusa //g" > ${software}.version.txt + """ +} diff --git a/software/rasusa/meta.yml b/software/rasusa/meta.yml new file mode 100644 index 00000000..074ab2f0 --- /dev/null +++ b/software/rasusa/meta.yml @@ -0,0 +1,48 @@ +name: rasusa +description: Randomly subsample sequencing reads to a specified coverage +keywords: + - coverage + - depth + - subsampling +tools: + - rasusa: + description: Randomly subsample sequencing reads to a specified coverage + homepage: https://github.com/mbhall88/rasusa + documentation: https://github.com/mbhall88/rasusa/blob/master/README.md + tool_dev_url: https://github.com/mbhall88/rasusa + doi: "10.5281/zenodo.3731394" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: List of input paired-end FastQ files + - genome_size: + type: string + description: Genome size of the species + - depth_cutoff: + type: integer + description: Depth of coverage cutoff + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - reads: + type: file + description: Reads with subsampled coverage + pattern: "*.fastq.gz" + +authors: + - "@thanhleviet" diff --git a/software/raxmlng/functions.nf b/software/raxmlng/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/raxmlng/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/raxmlng/main.nf b/software/raxmlng/main.nf new file mode 100644 index 00000000..02c01927 --- /dev/null +++ b/software/raxmlng/main.nf @@ -0,0 +1,39 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process RAXMLNG { + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::raxml-ng=1.0.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/raxml-ng:1.0.2--h7447c1b_0" + } else { + container "quay.io/biocontainers/raxml-ng:1.0.2--h7447c1b_0" + } + + input: + path alignment + + output: + path "*.raxml.bestTree", emit: phylogeny + path "*.raxml.support" , optional:true, emit: phylogeny_bootstrapped + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + raxml-ng \\ + $options.args \\ + --msa $alignment \\ + --threads $task.cpus \\ + --prefix output + + echo \$(raxml-ng --version 2>&1) | sed 's/^.*RAxML-NG v. //; s/released.*\$//' > ${software}.version.txt + """ +} diff --git a/software/raxmlng/meta.yml b/software/raxmlng/meta.yml new file mode 100644 index 00000000..1df98148 --- /dev/null +++ b/software/raxmlng/meta.yml @@ -0,0 +1,38 @@ +name: raxmlng +description: RAxML-NG is a phylogenetic tree inference tool which uses maximum-likelihood (ML) optimality criterion. +keywords: + - phylogeny + - newick + - maximum likelihood +tools: + - raxmlng: + description: RAxML-NG is a phylogenetic tree inference tool which uses maximum-likelihood (ML) optimality criterion. + homepage: https://github.com/amkozlov/raxml-ng + documentation: https://github.com/amkozlov/raxml-ng/wiki + tool_dev_url: https://github.com/amkozlov/raxml-ng + doi: doi.org/10.1093/bioinformatics/btz305 + licence: ['GPL v2-or-later'] + +input: + - alignment: + type: file + description: A FASTA format multiple sequence alignment file + pattern: "*.{fasta,fas,fa,mfa}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - phylogeny: + type: file + description: A phylogeny in Newick format + pattern: "*.{raxml.bestTree}" + - phylogeny_bootstrapped: + type: file + description: A phylogeny in Newick format with bootstrap values + pattern: "*.{raxml.support}" + +authors: + - "@avantonder" + - "@aunderwo" diff --git a/software/rsem/calculateexpression/functions.nf b/software/rsem/calculateexpression/functions.nf index d25eea86..da9da093 100644 --- a/software/rsem/calculateexpression/functions.nf +++ b/software/rsem/calculateexpression/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rsem/calculateexpression/main.nf b/software/rsem/calculateexpression/main.nf index 79ba2bd3..1f9ab854 100644 --- a/software/rsem/calculateexpression/main.nf +++ b/software/rsem/calculateexpression/main.nf @@ -9,7 +9,7 @@ process RSEM_CALCULATEEXPRESSION { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rsem=1.3.3 bioconda::star=2.7.6a" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rsem/calculateexpression/meta.yml b/software/rsem/calculateexpression/meta.yml new file mode 100644 index 00000000..f8577085 --- /dev/null +++ b/software/rsem/calculateexpression/meta.yml @@ -0,0 +1,63 @@ +name: rsem_calculateexpression +description: Calculate expression with RSEM +keywords: + - rsem + - expression + - quantification +tools: + - rseqc: + description: | + RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome + homepage: https://github.com/deweylab/RSEM + documentation: https://github.com/deweylab/RSEM + doi: https://doi.org/10.1186/1471-2105-12-323 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Input reads for quantification + pattern: "*.fastq.gz"# + - index: + type: file + description: RSEM index + pattern: "rsem/*" +output: + - counts_gene: + type: file + description: Expression counts on gene level + pattern: "*.genes.results" + - counts_transctips: + type: file + description: Expression counts on transcript level + pattern: "*.isoforms.results" + - stat: + type: file + description: RSEM statistics + pattern: "*.stat" + - logs: + type: file + description: RSEM logs + pattern: "*.log" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bam_star: + type: file + description: BAM file generated by STAR (optional) + pattern: "*.STAR.genome.bam" + - bam_genome: + type: file + description: Genome BAM file (optional) + pattern: "*.genome.bam" + - bam_transcript: + type: file + description: Transcript BAM file (optional) + pattern: "*.transcript.bam" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rsem/preparereference/functions.nf b/software/rsem/preparereference/functions.nf index d25eea86..da9da093 100644 --- a/software/rsem/preparereference/functions.nf +++ b/software/rsem/preparereference/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rsem/preparereference/main.nf b/software/rsem/preparereference/main.nf index 6d76515f..a378eb6b 100644 --- a/software/rsem/preparereference/main.nf +++ b/software/rsem/preparereference/main.nf @@ -9,7 +9,7 @@ process RSEM_PREPAREREFERENCE { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::rsem=1.3.3 bioconda::star=2.7.6a" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rsem/preparereference/meta.yml b/software/rsem/preparereference/meta.yml new file mode 100644 index 00000000..d7c02154 --- /dev/null +++ b/software/rsem/preparereference/meta.yml @@ -0,0 +1,37 @@ +name: rsem_preparereference +description: Prepare a reference genome for RSEM +keywords: + - rsem + - reference +tools: + - rseqc: + description: | + RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome + homepage: https://github.com/deweylab/RSEM + documentation: https://github.com/deweylab/RSEM + doi: https://doi.org/10.1186/1471-2105-12-323 +input: + - fasta: + type: file + description: The Fasta file of the reference genome + pattern: "*.{fasta,fa}" + - gtf: + type: file + description: The GTF file of the reference genome + pattern: "*.gtf" +output: + - rsem: + type: directory + description: RSEM index directory + pattern: "rsem" + - transcript_fasta: + type: file + description: Fasta file of transcripts + pattern: "rsem/*transcripts.fa" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/bamstat/functions.nf b/software/rseqc/bamstat/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/bamstat/functions.nf +++ b/software/rseqc/bamstat/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/bamstat/main.nf b/software/rseqc/bamstat/main.nf index 9b5df52f..ac80b6d0 100644 --- a/software/rseqc/bamstat/main.nf +++ b/software/rseqc/bamstat/main.nf @@ -9,7 +9,7 @@ process RSEQC_BAMSTAT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/bamstat/meta.yml b/software/rseqc/bamstat/meta.yml new file mode 100644 index 00000000..ff00d8c9 --- /dev/null +++ b/software/rseqc/bamstat/meta.yml @@ -0,0 +1,36 @@ +name: rseqc_bamstat +description: Generate statistics from a bam file +keywords: + - bam + - qc + - bamstat +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the bam file to calculate statistics of + pattern: "*.{bam}" +output: + - txt: + type: file + description: bam statistics report + pattern: "*.bam_stat.txt" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/inferexperiment/functions.nf b/software/rseqc/inferexperiment/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/inferexperiment/functions.nf +++ b/software/rseqc/inferexperiment/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/inferexperiment/main.nf b/software/rseqc/inferexperiment/main.nf index fb9bf76f..da0958d4 100644 --- a/software/rseqc/inferexperiment/main.nf +++ b/software/rseqc/inferexperiment/main.nf @@ -9,7 +9,7 @@ process RSEQC_INFEREXPERIMENT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/inferexperiment/meta.yml b/software/rseqc/inferexperiment/meta.yml new file mode 100644 index 00000000..366c3e33 --- /dev/null +++ b/software/rseqc/inferexperiment/meta.yml @@ -0,0 +1,39 @@ +name: rseqc_inferexperiment +description: Infer strandedness from sequencing reads +keywords: + - rnaseq + - experiment +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the bam file to calculate statistics of + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - txt: + type: file + description: infer_experiment results report + pattern: "*.infer_experiment.txt" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/innerdistance/functions.nf b/software/rseqc/innerdistance/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/innerdistance/functions.nf +++ b/software/rseqc/innerdistance/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/innerdistance/main.nf b/software/rseqc/innerdistance/main.nf index e7966694..2688fca6 100644 --- a/software/rseqc/innerdistance/main.nf +++ b/software/rseqc/innerdistance/main.nf @@ -9,7 +9,7 @@ process RSEQC_INNERDISTANCE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/innerdistance/meta.yml b/software/rseqc/innerdistance/meta.yml new file mode 100644 index 00000000..ed72c51c --- /dev/null +++ b/software/rseqc/innerdistance/meta.yml @@ -0,0 +1,55 @@ +name: rseqc_innerdistance +description: Calculate inner distance between read pairs. +keywords: + - fragment_size + - inner_distance +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the alignment in bam format + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - distance: + type: file + description: the inner distances + pattern: "*.inner_distance.txt" + - freq: + type: file + description: frequencies of different insert sizes + pattern: "*.inner_distance_freq.txt" + - mean: + type: file + description: mean/median values of inner distances + pattern: "*.inner_distance_mean.txt" + - pdf: + type: file + description: distribution plot of inner distances + pattern: "*.inner_distance_plot.pdf" + - rscript: + type: file + description: script to reproduce the plot + pattern: "*.inner_distance_plot.R" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/junctionannotation/functions.nf b/software/rseqc/junctionannotation/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/junctionannotation/functions.nf +++ b/software/rseqc/junctionannotation/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/junctionannotation/main.nf b/software/rseqc/junctionannotation/main.nf index 4c50d774..909ee9ae 100644 --- a/software/rseqc/junctionannotation/main.nf +++ b/software/rseqc/junctionannotation/main.nf @@ -9,7 +9,7 @@ process RSEQC_JUNCTIONANNOTATION { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -23,13 +23,13 @@ process RSEQC_JUNCTIONANNOTATION { path bed output: - tuple val(meta), path("*.junction.bed"), emit: bed - tuple val(meta), path("*.Interact.bed"), emit: interact_bed tuple val(meta), path("*.xls") , emit: xls - tuple val(meta), path("*junction.pdf") , emit: pdf - tuple val(meta), path("*events.pdf") , emit: events_pdf tuple val(meta), path("*.r") , emit: rscript tuple val(meta), path("*.log") , emit: log + tuple val(meta), path("*.junction.bed"), optional:true, emit: bed + tuple val(meta), path("*.interact.bed"), optional:true, emit: interact_bed + tuple val(meta), path("*junction.pdf") , optional:true, emit: pdf + tuple val(meta), path("*events.pdf") , optional:true, emit: events_pdf path "*.version.txt" , emit: version script: diff --git a/software/rseqc/junctionannotation/meta.yml b/software/rseqc/junctionannotation/meta.yml new file mode 100644 index 00000000..64926ce0 --- /dev/null +++ b/software/rseqc/junctionannotation/meta.yml @@ -0,0 +1,61 @@ +name: rseqc_junctionannotation +description: compare detected splice junctions to reference gene model +keywords: + - junctions + - splicing + - rnaseq +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the alignment in bam format + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - bed: + type: file + description: bed file of annotated junctions + pattern: "*.junction.bed" + - interact_bed: + type: file + description: Interact bed file + pattern: "*.Interact.bed" + - xls: + type: file + description: xls file with junction information + pattern: "*.xls" + - pdf: + type: file + description: junction plot + pattern: "*.junction.pdf" + - events_pdf: + type: file + description: events plot + pattern: "*.events.pdf" + - rscript: + type: file + description: Rscript to reproduce the plots + pattern: "*.r" + - log: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/junctionsaturation/functions.nf b/software/rseqc/junctionsaturation/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/junctionsaturation/functions.nf +++ b/software/rseqc/junctionsaturation/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/junctionsaturation/main.nf b/software/rseqc/junctionsaturation/main.nf index d119cdd9..e6e21638 100644 --- a/software/rseqc/junctionsaturation/main.nf +++ b/software/rseqc/junctionsaturation/main.nf @@ -9,7 +9,7 @@ process RSEQC_JUNCTIONSATURATION { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/junctionsaturation/meta.yml b/software/rseqc/junctionsaturation/meta.yml new file mode 100644 index 00000000..38008577 --- /dev/null +++ b/software/rseqc/junctionsaturation/meta.yml @@ -0,0 +1,44 @@ +name: rseqc_junctionsaturation +description: compare detected splice junctions to reference gene model +keywords: + - junctions + - splicing + - rnaseq +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the alignment in bam format + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - pdf: + type: file + description: Junction saturation report + pattern: "*.pdf" + - rscript: + type: file + description: Junction saturation R-script + pattern: "*.r" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/readdistribution/functions.nf b/software/rseqc/readdistribution/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/readdistribution/functions.nf +++ b/software/rseqc/readdistribution/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/readdistribution/main.nf b/software/rseqc/readdistribution/main.nf index c715dbcf..a6ed6c9f 100644 --- a/software/rseqc/readdistribution/main.nf +++ b/software/rseqc/readdistribution/main.nf @@ -9,7 +9,7 @@ process RSEQC_READDISTRIBUTION { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/readdistribution/meta.yml b/software/rseqc/readdistribution/meta.yml new file mode 100644 index 00000000..ce2b0f5a --- /dev/null +++ b/software/rseqc/readdistribution/meta.yml @@ -0,0 +1,40 @@ +name: rseqc_readdistribution +description: Calculate how mapped reads are distributed over genomic features +keywords: + - read distribution + - genomics + - rnaseq +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the alignment in bam format + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - txt: + type: file + description: the read distribution report + pattern: "*.read_distribution.txt" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/rseqc/readduplication/functions.nf b/software/rseqc/readduplication/functions.nf index d25eea86..da9da093 100644 --- a/software/rseqc/readduplication/functions.nf +++ b/software/rseqc/readduplication/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/rseqc/readduplication/main.nf b/software/rseqc/readduplication/main.nf index 32ed2fcc..6fb06f63 100644 --- a/software/rseqc/readduplication/main.nf +++ b/software/rseqc/readduplication/main.nf @@ -9,7 +9,7 @@ process RSEQC_READDUPLICATION { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::rseqc=3.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/rseqc/readduplication/meta.yml b/software/rseqc/readduplication/meta.yml new file mode 100644 index 00000000..c43ea688 --- /dev/null +++ b/software/rseqc/readduplication/meta.yml @@ -0,0 +1,51 @@ +name: rseqc_readduplication +description: Calculate read duplication rate +keywords: + - rnaseq + - duplication +tools: + - rseqc: + description: | + RSeQC package provides a number of useful modules that can comprehensively evaluate + high throughput sequence data especially RNA-seq data. + homepage: http://rseqc.sourceforge.net/ + documentation: http://rseqc.sourceforge.net/ + doi: 10.1093/bioinformatics/bts356 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: the alignment in bam format + pattern: "*.{bam}" + - bed: + type: file + description: a bed file for the reference gene model + pattern: "*.{bed}" +output: + - seq_xls: + type: file + description: Read duplication rate determined from mapping position of read + pattern: "*seq.DupRate.xls" + - pos_xls: + type: file + description: Read duplication rate determined from sequence of read + pattern: "*pos.DupRate.xls" + - pdf: + type: file + description: plot of duplication rate + pattern: "*.pdf" + - rscript: + type: file + description: script to reproduce the plot + pattern: "*.R" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@kevinmenden" diff --git a/software/salmon/index/functions.nf b/software/salmon/index/functions.nf index d25eea86..da9da093 100644 --- a/software/salmon/index/functions.nf +++ b/software/salmon/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/salmon/index/main.nf b/software/salmon/index/main.nf index a0433c58..17d5bc06 100644 --- a/software/salmon/index/main.nf +++ b/software/salmon/index/main.nf @@ -9,7 +9,7 @@ process SALMON_INDEX { label "process_medium" publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::salmon=1.4.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/salmon/quant/functions.nf b/software/salmon/quant/functions.nf index d25eea86..da9da093 100644 --- a/software/salmon/quant/functions.nf +++ b/software/salmon/quant/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/salmon/quant/main.nf b/software/salmon/quant/main.nf index cbb1734c..093137de 100644 --- a/software/salmon/quant/main.nf +++ b/software/salmon/quant/main.nf @@ -9,7 +9,7 @@ process SALMON_QUANT { label "process_medium" publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::salmon=1.4.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -24,6 +24,7 @@ process SALMON_QUANT { path gtf path transcript_fasta val alignment_mode + val lib_type output: tuple val(meta), path("${prefix}"), emit: results @@ -40,11 +41,26 @@ process SALMON_QUANT { input_reads = "-a $reads" } - def strandedness = meta.single_end ? 'U' : 'IU' - if (meta.strandedness == 'forward') { - strandedness = meta.single_end ? 'SF' : 'ISF' - } else if (meta.strandedness == 'reverse') { - strandedness = meta.single_end ? 'SR' : 'ISR' + def strandedness_opts = [ + 'A', 'U', 'SF', 'SR', + 'IS', 'IU' , 'ISF', 'ISR', + 'OS', 'OU' , 'OSF', 'OSR', + 'MS', 'MU' , 'MSF', 'MSR' + ] + def strandedness = 'A' + if (lib_type) { + if (strandedness_opts.contains(lib_type)) { + strandedness = lib_type + } else { + log.info "[Salmon Quant] Invalid library type specified '--libType=${lib_type}', defaulting to auto-detection with '--libType=A'." + } + } else { + strandedness = meta.single_end ? 'U' : 'IU' + if (meta.strandedness == 'forward') { + strandedness = meta.single_end ? 'SF' : 'ISF' + } else if (meta.strandedness == 'reverse') { + strandedness = meta.single_end ? 'SR' : 'ISR' + } } """ salmon quant \\ diff --git a/software/salmon/quant/meta.yml b/software/salmon/quant/meta.yml index fa39aaf9..f37c9884 100644 --- a/software/salmon/quant/meta.yml +++ b/software/salmon/quant/meta.yml @@ -35,6 +35,10 @@ input: - alignment_mode: type: boolean description: whether to run salmon in alignment mode + - lib_type: + type: string + description: | + Override library type inferred based on strandedness defined in meta object output: - sample_output: diff --git a/software/samtools/faidx/functions.nf b/software/samtools/faidx/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/faidx/functions.nf +++ b/software/samtools/faidx/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/faidx/main.nf b/software/samtools/faidx/main.nf index 340c1d12..6c023f1c 100644 --- a/software/samtools/faidx/main.nf +++ b/software/samtools/faidx/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_FAIDX { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/fastq/functions.nf b/software/samtools/fastq/functions.nf index f177f0c8..da9da093 100644 --- a/software/samtools/fastq/functions.nf +++ b/software/samtools/fastq/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/fastq/main.nf b/software/samtools/fastq/main.nf index e5aeddad..48b3a43f 100644 --- a/software/samtools/fastq/main.nf +++ b/software/samtools/fastq/main.nf @@ -9,7 +9,7 @@ process SAMTOOLS_FASTQ { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/samtools/flagstat/functions.nf b/software/samtools/flagstat/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/flagstat/functions.nf +++ b/software/samtools/flagstat/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/flagstat/main.nf b/software/samtools/flagstat/main.nf index bb3663f6..a66ea56d 100644 --- a/software/samtools/flagstat/main.nf +++ b/software/samtools/flagstat/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_FLAGSTAT { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/idxstats/functions.nf b/software/samtools/idxstats/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/idxstats/functions.nf +++ b/software/samtools/idxstats/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/idxstats/main.nf b/software/samtools/idxstats/main.nf index 80f97630..ff3cd9a6 100644 --- a/software/samtools/idxstats/main.nf +++ b/software/samtools/idxstats/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_IDXSTATS { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/index/functions.nf b/software/samtools/index/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/index/functions.nf +++ b/software/samtools/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/index/main.nf b/software/samtools/index/main.nf index 86114fc7..778e9384 100644 --- a/software/samtools/index/main.nf +++ b/software/samtools/index/main.nf @@ -9,26 +9,27 @@ process SAMTOOLS_INDEX { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: tuple val(meta), path(bam) output: - tuple val(meta), path("*.bai"), emit: bai + tuple val(meta), path("*.bai"), optional:true, emit: bai + tuple val(meta), path("*.csi"), optional:true, emit: csi path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) """ - samtools index $bam + samtools index $options.args $bam echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt """ } diff --git a/software/samtools/index/meta.yml b/software/samtools/index/meta.yml index 03936e59..5d076e3b 100644 --- a/software/samtools/index/meta.yml +++ b/software/samtools/index/meta.yml @@ -34,6 +34,10 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" + - csi: + type: file + description: CSI index file + pattern: "*.{csi}" - version: type: file description: File containing software version diff --git a/software/samtools/merge/functions.nf b/software/samtools/merge/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/merge/functions.nf +++ b/software/samtools/merge/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/merge/main.nf b/software/samtools/merge/main.nf index 68300024..81b2828c 100644 --- a/software/samtools/merge/main.nf +++ b/software/samtools/merge/main.nf @@ -9,17 +9,17 @@ process SAMTOOLS_MERGE { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: - tuple val(meta),path(bams) + tuple val(meta), path(bams) output: tuple val(meta), path("*merged.bam"), emit: merged_bam diff --git a/software/samtools/merge/meta.yml b/software/samtools/merge/meta.yml new file mode 100644 index 00000000..9092f22e --- /dev/null +++ b/software/samtools/merge/meta.yml @@ -0,0 +1,44 @@ +name: samtools_merge +description: Merge BAM file +keywords: + - merge + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - merged_bam: + type: file + description: BAM file + pattern: "*.{bam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" diff --git a/software/samtools/mpileup/functions.nf b/software/samtools/mpileup/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/mpileup/functions.nf +++ b/software/samtools/mpileup/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/mpileup/main.nf b/software/samtools/mpileup/main.nf index ca83f498..8f2cebd1 100644 --- a/software/samtools/mpileup/main.nf +++ b/software/samtools/mpileup/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_MPILEUP { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/sort/functions.nf b/software/samtools/sort/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/sort/functions.nf +++ b/software/samtools/sort/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/sort/main.nf b/software/samtools/sort/main.nf index 9bb4e21e..240e8e9f 100644 --- a/software/samtools/sort/main.nf +++ b/software/samtools/sort/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_SORT { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/stats/functions.nf b/software/samtools/stats/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/stats/functions.nf +++ b/software/samtools/stats/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/stats/main.nf b/software/samtools/stats/main.nf index f5302d08..6bb0a4c7 100644 --- a/software/samtools/stats/main.nf +++ b/software/samtools/stats/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_STATS { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/samtools/view/functions.nf b/software/samtools/view/functions.nf index d25eea86..da9da093 100644 --- a/software/samtools/view/functions.nf +++ b/software/samtools/view/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/samtools/view/main.nf b/software/samtools/view/main.nf index 2ec29a42..ec6c747f 100644 --- a/software/samtools/view/main.nf +++ b/software/samtools/view/main.nf @@ -9,13 +9,13 @@ process SAMTOOLS_VIEW { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" } input: diff --git a/software/seacr/callpeak/functions.nf b/software/seacr/callpeak/functions.nf index d25eea86..da9da093 100644 --- a/software/seacr/callpeak/functions.nf +++ b/software/seacr/callpeak/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/seacr/callpeak/main.nf b/software/seacr/callpeak/main.nf index 977702f3..429c45cf 100644 --- a/software/seacr/callpeak/main.nf +++ b/software/seacr/callpeak/main.nf @@ -11,7 +11,7 @@ process SEACR_CALLPEAK { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/seqkit/split2/functions.nf b/software/seqkit/split2/functions.nf index d25eea86..da9da093 100644 --- a/software/seqkit/split2/functions.nf +++ b/software/seqkit/split2/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/seqkit/split2/main.nf b/software/seqkit/split2/main.nf index 31c154c6..ec7057f7 100644 --- a/software/seqkit/split2/main.nf +++ b/software/seqkit/split2/main.nf @@ -10,7 +10,7 @@ process SEQKIT_SPLIT2 { publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::seqkit=0.15.0" : null) diff --git a/software/seqtk/sample/functions.nf b/software/seqtk/sample/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/seqtk/sample/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/seqtk/sample/main.nf b/software/seqtk/sample/main.nf new file mode 100644 index 00000000..b50a5a2a --- /dev/null +++ b/software/seqtk/sample/main.nf @@ -0,0 +1,65 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SEQTK_SAMPLE { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::seqtk=1.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/seqtk:1.3--h5bf99c6_3" + } else { + container "quay.io/biocontainers/seqtk:1.3--h5bf99c6_3" + } + + input: + tuple val(meta), path(reads) + val sample_size + + output: + tuple val(meta), path("*.fastq.gz"), emit: reads + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + if (meta.single_end) { + """ + seqtk \\ + sample \\ + $options.args \\ + $reads \\ + $sample_size \\ + | gzip --no-name > ${prefix}.fastq.gz \\ + + echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//' > ${software}.version.txt + """ + } else { + if (!(options.args ==~ /.*-s[0-9]+.*/)) { + options.args = options.args + " -s100" + } + """ + seqtk \\ + sample \\ + $options.args \\ + ${reads[0]} \\ + $sample_size \\ + | gzip --no-name > ${prefix}_1.fastq.gz \\ + + seqtk \\ + sample \\ + $options.args \\ + ${reads[1]} \\ + $sample_size \\ + | gzip --no-name > ${prefix}_2.fastq.gz \\ + + echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//' > ${software}.version.txt + """ + } +} diff --git a/software/seqtk/sample/meta.yml b/software/seqtk/sample/meta.yml new file mode 100644 index 00000000..f9122936 --- /dev/null +++ b/software/seqtk/sample/meta.yml @@ -0,0 +1,44 @@ +name: seqtk_sample +description: Subsample reads from FASTQ files +keywords: + - sample +tools: + - seqtk: + description: Seqtk is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format. Seqtk sample command subsamples sequences. + homepage: https://github.com/lh3/seqtk + documentation: https://docs.csc.fi/apps/seqtk/ + tool_dev_url: https://github.com/lh3/seqtk + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: List of input FastQ files of size 1 and 2 for single-end and paired-end data,respectively. + pattern: "*.{fastq.gz}" + - sample_size: + type: value + description: Number of reads to sample. + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - reads: + type: file + description: Subsampled FastQ files, 1 for single-end data or 2 for paired-end data. + pattern: "*.{fastq.gz}" + +authors: + - "@kaurravneet4123" + - "@sidorov-si" diff --git a/software/seqtk/subseq/functions.nf b/software/seqtk/subseq/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/seqtk/subseq/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/seqtk/subseq/main.nf b/software/seqtk/subseq/main.nf new file mode 100644 index 00000000..810a8a48 --- /dev/null +++ b/software/seqtk/subseq/main.nf @@ -0,0 +1,46 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SEQTK_SUBSEQ { + tag '$sequences' + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::seqtk=1.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/seqtk:1.3--h5bf99c6_3" + } else { + container "quay.io/biocontainers/seqtk:1.3--h5bf99c6_3" + } + + input: + path sequences + path filter_list + + output: + path "*.gz" , emit: sequences + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ?: '' + def ext = "fa" + if ("$sequences" ==~ /.+\.fq|.+\.fq.gz|.+\.fastq|.+\.fastq.gz/) { + ext = "fq" + } + """ + seqtk \\ + subseq \\ + $options.args \\ + $sequences \\ + $filter_list | \\ + gzip --no-name > ${sequences}${prefix}.${ext}.gz + + echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/software/seqtk/subseq/meta.yml b/software/seqtk/subseq/meta.yml new file mode 100644 index 00000000..0676229d --- /dev/null +++ b/software/seqtk/subseq/meta.yml @@ -0,0 +1,34 @@ +name: seqtk_subseq +description: Select only sequences that match the filtering condition +keywords: + - filtering,selection +tools: + - seqtk: + description: Seqtk is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format + homepage: https://github.com/lh3/seqtk + documentation: https://docs.csc.fi/apps/seqtk/ + tool_dev_url: https://github.com/lh3/seqtk + licence: ['MIT'] + +input: + - sequences: + type: file + description: FASTQ/FASTA file + pattern: "*.{fq,fq.gz,fa,fa.gz}" + - filter_list: + type: file + description: BED file or a text file with a list of sequence names + pattern: "*.{bed,lst}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - sequences: + type: file + description: FASTQ/FASTA file + pattern: "*.{fq.gz,fa.gz}" + +authors: + - "@sidorov-si" diff --git a/software/sequenzautils/bam2seqz/functions.nf b/software/sequenzautils/bam2seqz/functions.nf index f177f0c8..da9da093 100755 --- a/software/sequenzautils/bam2seqz/functions.nf +++ b/software/sequenzautils/bam2seqz/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/sequenzautils/bam2seqz/main.nf b/software/sequenzautils/bam2seqz/main.nf index 8702fd3e..aec19725 100644 --- a/software/sequenzautils/bam2seqz/main.nf +++ b/software/sequenzautils/bam2seqz/main.nf @@ -9,7 +9,7 @@ process SEQUENZAUTILS_BAM2SEQZ { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::sequenza-utils=3.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/sequenzautils/gcwiggle/functions.nf b/software/sequenzautils/gcwiggle/functions.nf index f177f0c8..da9da093 100755 --- a/software/sequenzautils/gcwiggle/functions.nf +++ b/software/sequenzautils/gcwiggle/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/sequenzautils/gcwiggle/main.nf b/software/sequenzautils/gcwiggle/main.nf index e9b67384..fd200b6b 100644 --- a/software/sequenzautils/gcwiggle/main.nf +++ b/software/sequenzautils/gcwiggle/main.nf @@ -9,7 +9,7 @@ process SEQUENZAUTILS_GCWIGGLE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::sequenza-utils=3.0.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/seqwish/induce/functions.nf b/software/seqwish/induce/functions.nf index d25eea86..da9da093 100644 --- a/software/seqwish/induce/functions.nf +++ b/software/seqwish/induce/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/seqwish/induce/main.nf b/software/seqwish/induce/main.nf index 99d6fd9f..64ecd595 100644 --- a/software/seqwish/induce/main.nf +++ b/software/seqwish/induce/main.nf @@ -10,7 +10,7 @@ process SEQWISH_INDUCE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::seqwish=0.4.1" : null) diff --git a/software/shovill/functions.nf b/software/shovill/functions.nf index f177f0c8..da9da093 100644 --- a/software/shovill/functions.nf +++ b/software/shovill/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/shovill/main.nf b/software/shovill/main.nf index fc472ea9..e751b2a8 100644 --- a/software/shovill/main.nf +++ b/software/shovill/main.nf @@ -9,7 +9,7 @@ process SHOVILL { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::shovill=1.1.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/snpeff/Dockerfile b/software/snpeff/Dockerfile new file mode 100644 index 00000000..608716a4 --- /dev/null +++ b/software/snpeff/Dockerfile @@ -0,0 +1,22 @@ +FROM nfcore/base:1.14 +LABEL \ + author="Maxime Garcia" \ + description="snpEff image for nf-core pipelines" \ + maintainer="maxime.garcia@scilifelab.se" + +# Install the conda environment +COPY environment.yml / +RUN conda env create -f /environment.yml && conda clean -a + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-snpeff-5.0/bin:$PATH + +# Setup default ARG variables +ARG GENOME=GRCh38 +ARG SNPEFF_CACHE_VERSION=99 + +# Download Genome +RUN snpEff download -v ${GENOME}.${SNPEFF_CACHE_VERSION} + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-snpeff-5.0 > nf-core-snpeff-5.0.yml diff --git a/software/snpeff/build.sh b/software/snpeff/build.sh new file mode 100755 index 00000000..b94ffd69 --- /dev/null +++ b/software/snpeff/build.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build and push all containers + +build_push() { + GENOME=$1 + SNPEFF_CACHE_VERSION=$2 + SNPEFF_TAG=$3 + + docker build \ + -t nfcore/snpeff:${SNPEFF_TAG}.${GENOME} \ + software/snpeff/. \ + --build-arg GENOME=${GENOME} \ + --build-arg SNPEFF_CACHE_VERSION=${SNPEFF_CACHE_VERSION} + + docker push nfcore/snpeff:${SNPEFF_TAG}.${GENOME} +} + +build_push "GRCh37" "75" "5.0" +build_push "GRCh38" "99" "5.0" +build_push "GRCm38" "99" "5.0" +build_push "CanFam3.1" "99" "5.0" +build_push "WBcel235" "99" "5.0" diff --git a/software/snpeff/environment.yml b/software/snpeff/environment.yml new file mode 100644 index 00000000..ad0523fb --- /dev/null +++ b/software/snpeff/environment.yml @@ -0,0 +1,10 @@ +# You can use this file to create a conda environment for this module: +# conda env create -f environment.yml +name: nf-core-snpeff-5.0 +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - bioconda::snpeff=5.0 diff --git a/software/snpeff/functions.nf b/software/snpeff/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/snpeff/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/snpeff/main.nf b/software/snpeff/main.nf new file mode 100644 index 00000000..af0fd816 --- /dev/null +++ b/software/snpeff/main.nf @@ -0,0 +1,57 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) +params.use_cache = false +params.snpeff_tag = "" + +process SNPEFF { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::snpeff=5.0" : null) + if (params.use_cache) { + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/snpeff:5.0--hdfd78af_1" + } else { + container "quay.io/biocontainers/snpeff:5.0--hdfd78af_1" + } + } else { + container "nfcore/snpeff:${params.snpeff_tag}" + } + + input: + tuple val(meta), path(vcf) + val db + path cache + + output: + tuple val(meta), path("*.ann.vcf"), emit: vcf + path "*.csv" , emit: report + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def avail_mem = 6 + if (!task.memory) { + log.info '[snpEff] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + cache = params.use_cache ? "-dataDir \${PWD}/${snpeff_cache}" : "" + """ + snpEff -Xmx${avail_mem}g \\ + $db \\ + $options.args \\ + -csvStats ${prefix}.csv \\ + $cache \\ + $vcf \\ + > ${prefix}.ann.vcf + + echo \$(snpEff -version 2>&1) > ${software}.version.txt + """ +} diff --git a/software/snpeff/meta.yml b/software/snpeff/meta.yml new file mode 100644 index 00000000..7ba62cde --- /dev/null +++ b/software/snpeff/meta.yml @@ -0,0 +1,57 @@ +name: snpEff +description: Genetic variant annotation and functional effect prediction toolbox +keywords: + - annotation +tools: + - snpeff: + description: | + SnpEff is a variant annotation and effect prediction tool. + It annotates and predicts the effects of genetic variants on genes and proteins (such as amino acid changes). + homepage: https://pcingola.github.io/SnpEff/ + documentation: https://pcingola.github.io/SnpEff/se_introduction/ +params: + - use_cache: + type: boolean + description: | + boolean to enable the usage of containers with cache + Enable the usage of containers with cache + Does not work with conda + - snpeff_tag: + type: value + description: | + Specify the tag for the container + https://hub.docker.com/r/nfcore/snpeff/tags +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - db: + type: value + description: | + which db to annotate with + - cache: + type: file + description: | + path to snpEff cache (optional) +output: + - vcf: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - report: + type: file + description: snpEff report file + pattern: "*.html" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@maxulysse" diff --git a/software/snpsites/functions.nf b/software/snpsites/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/snpsites/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/snpsites/main.nf b/software/snpsites/main.nf new file mode 100644 index 00000000..5104572e --- /dev/null +++ b/software/snpsites/main.nf @@ -0,0 +1,43 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SNPSITES { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::snp-sites=2.5.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/snp-sites:2.5.1--hed695b0_0" + } else { + container "quay.io/biocontainers/snp-sites:2.5.1--hed695b0_0" + } + + input: + path alignment + + output: + path "*.fas" , emit: fasta + path "*.sites.txt" , emit: constant_sites + path "*.version.txt", emit: version + env CONSTANT_SITES, emit: constant_sites_string + + script: + def software = getSoftwareName(task.process) + """ + snp-sites \\ + $alignment \\ + $options.args \\ + > filtered_alignment.fas + + echo \$(snp-sites -C $alignment) > constant.sites.txt + + CONSTANT_SITES=\$(cat constant.sites.txt) + + echo \$(snp-sites -V 2>&1) | sed 's/snp-sites //' > ${software}.version.txt + """ +} diff --git a/software/snpsites/meta.yml b/software/snpsites/meta.yml new file mode 100644 index 00000000..0a22b879 --- /dev/null +++ b/software/snpsites/meta.yml @@ -0,0 +1,31 @@ +name: snpsites +description: Rapidly extracts SNPs from a multi-FASTA alignment. +keywords: + - SNPs + - invariant + - constant +tools: + - snpsites: + description: Rapidly extracts SNPs from a multi-FASTA alignment. + homepage: https://www.sanger.ac.uk/tool/snp-sites/ + documentation: https://github.com/sanger-pathogens/snp-sites +input: + - alignment: + type: file + description: fasta alignment file + pattern: "*.{fasta,fas,fa,aln}" +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - fasta: + type: file + description: Variant fasta file + pattern: "*.{fas}" + - constant_sites: + type: file + description: Text file containing counts of constant sites + pattern: "*.{sites.txt}" +authors: + - "@avantonder" diff --git a/software/sortmerna/functions.nf b/software/sortmerna/functions.nf index d25eea86..da9da093 100644 --- a/software/sortmerna/functions.nf +++ b/software/sortmerna/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/sortmerna/main.nf b/software/sortmerna/main.nf index 7ce96d4a..32ca4ca9 100644 --- a/software/sortmerna/main.nf +++ b/software/sortmerna/main.nf @@ -9,7 +9,7 @@ process SORTMERNA { label "process_high" publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::sortmerna=4.2.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/spades/functions.nf b/software/spades/functions.nf index f177f0c8..da9da093 100644 --- a/software/spades/functions.nf +++ b/software/spades/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/spades/main.nf b/software/spades/main.nf index c9e1e142..c6208053 100644 --- a/software/spades/main.nf +++ b/software/spades/main.nf @@ -9,7 +9,7 @@ process SPADES { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::spades=3.15.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/star/align/functions.nf b/software/star/align/functions.nf index d25eea86..da9da093 100644 --- a/software/star/align/functions.nf +++ b/software/star/align/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/star/align/main.nf b/software/star/align/main.nf index b885a48d..e85ddb79 100644 --- a/software/star/align/main.nf +++ b/software/star/align/main.nf @@ -9,7 +9,7 @@ process STAR_ALIGN { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } // Note: 2.7X indices incompatible with AWS iGenomes. conda (params.enable_conda ? 'bioconda::star=2.6.1d' : null) diff --git a/software/star/genomegenerate/functions.nf b/software/star/genomegenerate/functions.nf index d25eea86..da9da093 100644 --- a/software/star/genomegenerate/functions.nf +++ b/software/star/genomegenerate/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/star/genomegenerate/main.nf b/software/star/genomegenerate/main.nf index f1e3bba4..b440b415 100644 --- a/software/star/genomegenerate/main.nf +++ b/software/star/genomegenerate/main.nf @@ -9,14 +9,14 @@ process STAR_GENOMEGENERATE { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } // Note: 2.7X indices incompatible with AWS iGenomes. - conda (params.enable_conda ? "bioconda::star=2.6.1d" : null) + conda (params.enable_conda ? "bioconda::star=2.6.1d bioconda::samtools=1.10 conda-forge::gawk=5.1.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/star:2.6.1d--0" + container "https://depot.galaxyproject.org/singularity/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:59cdd445419f14abac76b31dd0d71217994cbcc9-0" } else { - container "quay.io/biocontainers/star:2.6.1d--0" + container "quay.io/biocontainers/mulled-v2-1fa26d1ce03c295fe2fdcf85831a92fbcbd7e8c2:59cdd445419f14abac76b31dd0d71217994cbcc9-0" } input: @@ -28,19 +28,40 @@ process STAR_GENOMEGENERATE { path "*.version.txt", emit: version script: - def software = getSoftwareName(task.process) - def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' - """ - mkdir star - STAR \\ - --runMode genomeGenerate \\ - --genomeDir star/ \\ - --genomeFastaFiles $fasta \\ - --sjdbGTFfile $gtf \\ - --runThreadN $task.cpus \\ - $memory \\ - $options.args + def software = getSoftwareName(task.process) + def memory = task.memory ? "--limitGenomeGenerateRAM ${task.memory.toBytes() - 100000000}" : '' + def args = options.args.tokenize() + if (args.contains('--genomeSAindexNbases')) { + """ + mkdir star + STAR \\ + --runMode genomeGenerate \\ + --genomeDir star/ \\ + --genomeFastaFiles $fasta \\ + --sjdbGTFfile $gtf \\ + --runThreadN $task.cpus \\ + $memory \\ + $options.args - STAR --version | sed -e "s/STAR_//g" > ${software}.version.txt - """ + STAR --version | sed -e "s/STAR_//g" > ${software}.version.txt + """ + } else { + """ + samtools faidx $fasta + NUM_BASES=`gawk '{sum = sum + \$2}END{if ((log(sum)/log(2))/2 - 1 > 14) {printf "%.0f", 14} else {printf "%.0f", (log(sum)/log(2))/2 - 1}}' ${fasta}.fai` + + mkdir star + STAR \\ + --runMode genomeGenerate \\ + --genomeDir star/ \\ + --genomeFastaFiles $fasta \\ + --sjdbGTFfile $gtf \\ + --runThreadN $task.cpus \\ + --genomeSAindexNbases \$NUM_BASES \\ + $memory \\ + $options.args + + STAR --version | sed -e "s/STAR_//g" > ${software}.version.txt + """ + } } diff --git a/software/strelka/germline/functions.nf b/software/strelka/germline/functions.nf index 779feec6..da9da093 100644 --- a/software/strelka/germline/functions.nf +++ b/software/strelka/germline/functions.nf @@ -1,50 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/strelka/germline/main.nf b/software/strelka/germline/main.nf index f326bc5a..48f795b0 100644 --- a/software/strelka/germline/main.nf +++ b/software/strelka/germline/main.nf @@ -9,7 +9,7 @@ process STRELKA_GERMLINE { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::strelka=2.9.10" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -25,30 +25,29 @@ process STRELKA_GERMLINE { path target_bed output: - tuple val(meta), path("*_variants.vcf.gz") , emit: vcf - tuple val(meta), path("*_variants.vcf.gz.tbi"), emit: vcf_tbi - tuple val(meta), path("*_genome.vcf.gz") , emit: genome_vcf - tuple val(meta), path("*_genome.vcf.gz.tbi") , emit: genome_vcf_tbi - path "*.version.txt" , emit: version + tuple val(meta), path("*variants.vcf.gz") , emit: vcf + tuple val(meta), path("*variants.vcf.gz.tbi"), emit: vcf_tbi + tuple val(meta), path("*genome.vcf.gz") , emit: genome_vcf + tuple val(meta), path("*genome.vcf.gz.tbi") , emit: genome_vcf_tbi + path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) - def ioptions = initOptions(options) - def prefix = ioptions.suffix ? "strelka_${meta.id}${ioptions.suffix}" : "strelka_${meta.id}" - def options_strelka = params.target_bed ? "--exome --callRegions ${target_bed}" : "" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def regions = params.target_bed ? "--exome --callRegions ${target_bed}" : "" """ configureStrelkaGermlineWorkflow.py \\ --bam $bam \\ --referenceFasta $fasta \\ - $options_strelka \\ + $regions \\ $options.args \\ --runDir strelka python strelka/runWorkflow.py -m local -j $task.cpus - mv strelka/results/variants/genome.*.vcf.gz ${prefix}_genome.vcf.gz - mv strelka/results/variants/genome.*.vcf.gz.tbi ${prefix}_genome.vcf.gz.tbi - mv strelka/results/variants/variants.vcf.gz ${prefix}_variants.vcf.gz - mv strelka/results/variants/variants.vcf.gz.tbi ${prefix}_variants.vcf.gz.tbi + mv strelka/results/variants/genome.*.vcf.gz ${prefix}.genome.vcf.gz + mv strelka/results/variants/genome.*.vcf.gz.tbi ${prefix}.genome.vcf.gz.tbi + mv strelka/results/variants/variants.vcf.gz ${prefix}.variants.vcf.gz + mv strelka/results/variants/variants.vcf.gz.tbi ${prefix}.variants.vcf.gz.tbi echo configureStrelkaGermlineWorkflow.py --version &> ${software}.version.txt #2>&1 """ diff --git a/software/stringtie/functions.nf b/software/stringtie/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/software/stringtie/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/software/stringtie/merge/functions.nf b/software/stringtie/merge/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/stringtie/merge/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/stringtie/merge/main.nf b/software/stringtie/merge/main.nf new file mode 100644 index 00000000..3c88d494 --- /dev/null +++ b/software/stringtie/merge/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process STRINGTIE_MERGE { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + // Note: 2.7X indices incompatible with AWS iGenomes. + conda (params.enable_conda ? "bioconda::stringtie=2.1.4" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/stringtie:2.1.4--h7e0af3c_0" + } else { + container "quay.io/biocontainers/stringtie:2.1.4--h7e0af3c_0" + } + + input: + path stringtie_gtf + path annotation_gtf + + output: + path "stringtie.merged.gtf", emit: gtf + + script: + """ + stringtie \\ + --merge $stringtie_gtf \\ + -G $annotation_gtf \\ + -o stringtie.merged.gtf + """ +} diff --git a/software/stringtie/merge/meta.yml b/software/stringtie/merge/meta.yml new file mode 100644 index 00000000..5752c0a9 --- /dev/null +++ b/software/stringtie/merge/meta.yml @@ -0,0 +1,31 @@ +name: stringtie_merge +description: Merges the annotation gtf file and the stringtie output gtf files +keywords: + - merge + - gtf + - reference +tools: + - stringtie2: + description: | + Transcript assembly and quantification for RNA-Seq + homepage: https://ccb.jhu.edu/software/stringtie/index.shtml + documentation: https://ccb.jhu.edu/software/stringtie/index.shtml?t=manual +input: + - stringtie_gtf: + type: file + description: | + Stringtie transcript gtf output(s). + pattern: "*.gtf" + - annotation_gtf: + type: file + description: | + Annotation gtf file. + pattern: "*.gtf" +output: + - merged_gtf: + type: map + description: | + Merged gtf from annotation and stringtie output gtfs. + pattern: "*.gtf" +authors: + - "@yuukiiwa" diff --git a/software/stringtie/stringtie/functions.nf b/software/stringtie/stringtie/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/stringtie/stringtie/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/stringtie/main.nf b/software/stringtie/stringtie/main.nf similarity index 94% rename from software/stringtie/main.nf rename to software/stringtie/stringtie/main.nf index 6870ef42..eb751321 100644 --- a/software/stringtie/main.nf +++ b/software/stringtie/stringtie/main.nf @@ -9,7 +9,7 @@ process STRINGTIE { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::stringtie=2.1.4" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/stringtie/stringtie/meta.yml b/software/stringtie/stringtie/meta.yml new file mode 100644 index 00000000..52ec899d --- /dev/null +++ b/software/stringtie/stringtie/meta.yml @@ -0,0 +1,56 @@ +name: stringtie +description: Transcript assembly and quantification for RNA-Se +keywords: + - transcript + - assembly + - quantification + - gtf + +tools: + - stringtie2: + description: | + Transcript assembly and quantification for RNA-Seq + homepage: https://ccb.jhu.edu/software/stringtie/index.shtml + documentation: https://ccb.jhu.edu/software/stringtie/index.shtml?t=manual +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: | + Stringtie transcript gtf output(s). + - gtf: + type: file + description: | + Annotation gtf file. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - transcript_gtf: + type: file + description: transcript gtf + pattern: "*.{transcripts.gtf}" + - coverage_gtf: + type: file + description: coverage gtf + pattern: "*.{coverage.gtf}" + - abudance: + type: file + description: abudance + pattern: "*.{abudance.txt}" + - ballgown: + type: file + description: for running ballgown + pattern: "*.{ballgown}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/software/subread/featurecounts/functions.nf b/software/subread/featurecounts/functions.nf index d25eea86..da9da093 100644 --- a/software/subread/featurecounts/functions.nf +++ b/software/subread/featurecounts/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/subread/featurecounts/main.nf b/software/subread/featurecounts/main.nf index 053cb68b..cde14a74 100644 --- a/software/subread/featurecounts/main.nf +++ b/software/subread/featurecounts/main.nf @@ -9,7 +9,7 @@ process SUBREAD_FEATURECOUNTS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::subread=2.0.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/tabix/bgzip/functions.nf b/software/tabix/bgzip/functions.nf index 6f3b4b29..da9da093 100644 --- a/software/tabix/bgzip/functions.nf +++ b/software/tabix/bgzip/functions.nf @@ -1,49 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/tabix/bgzip/main.nf b/software/tabix/bgzip/main.nf index 4285c40c..56a351db 100644 --- a/software/tabix/bgzip/main.nf +++ b/software/tabix/bgzip/main.nf @@ -9,7 +9,7 @@ process TABIX_BGZIP { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::tabix=0.2.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/tabix/bgziptabix/functions.nf b/software/tabix/bgziptabix/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/software/tabix/bgziptabix/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/tabix/bgziptabix/main.nf b/software/tabix/bgziptabix/main.nf new file mode 100644 index 00000000..866a8bf8 --- /dev/null +++ b/software/tabix/bgziptabix/main.nf @@ -0,0 +1,37 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process TABIX_BGZIPTABIX { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::tabix=0.2.6" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/tabix:0.2.6--ha92aebf_0" + } else { + container "quay.io/biocontainers/tabix:0.2.6--ha92aebf_0" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.gz"), path("*.tbi"), emit: tbi + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bgzip -c $options.args $input > ${prefix}.gz + tabix $options.args2 ${prefix}.gz + + echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/(.*\$//' > ${software}.version.txt + """ +} diff --git a/software/tabix/bgziptabix/meta.yml b/software/tabix/bgziptabix/meta.yml new file mode 100644 index 00000000..5bef2350 --- /dev/null +++ b/software/tabix/bgziptabix/meta.yml @@ -0,0 +1,44 @@ +name: tabix_bgziptabix +description: bgzip a sorted tab-delimited genome file and then create tabix index +keywords: + - bgzip + - compress + - index + - tabix + - vcf +tools: + - tabix: + description: Generic indexer for TAB-delimited genome position files. + homepage: https://www.htslib.org/doc/tabix.html + documentation: https://www.htslib.org/doc/tabix.1.html + doi: 10.1093/bioinformatics/btq671 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file + pattern: "*.{bed,gff,sam,vcf}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gz: + type: file + description: Output compressed file + pattern: "*.{gz}" + - tbi: + type: file + description: tabix index file + pattern: "*.{gz.tbi}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@maxulysse" diff --git a/software/tabix/tabix/functions.nf b/software/tabix/tabix/functions.nf index d25eea86..da9da093 100644 --- a/software/tabix/tabix/functions.nf +++ b/software/tabix/tabix/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/tabix/tabix/main.nf b/software/tabix/tabix/main.nf index 65381562..da23f535 100644 --- a/software/tabix/tabix/main.nf +++ b/software/tabix/tabix/main.nf @@ -9,7 +9,7 @@ process TABIX_TABIX { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::tabix=0.2.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/tiddit/sv/functions.nf b/software/tiddit/sv/functions.nf index d25eea86..da9da093 100644 --- a/software/tiddit/sv/functions.nf +++ b/software/tiddit/sv/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/tiddit/sv/main.nf b/software/tiddit/sv/main.nf index 417b5561..bd42f7d1 100644 --- a/software/tiddit/sv/main.nf +++ b/software/tiddit/sv/main.nf @@ -9,7 +9,7 @@ process TIDDIT_SV { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::tiddit=2.12.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -20,25 +20,25 @@ process TIDDIT_SV { input: tuple val(meta), path(bam) - path fasta - path fai + path fasta + path fai output: - tuple val(meta), path("*.vcf"), emit: vcf - tuple val(meta), path("*.ploidy.tab"), emit: ploidy + tuple val(meta), path("*.vcf") , emit: vcf + tuple val(meta), path("*.ploidy.tab") , emit: ploidy tuple val(meta), path("*.signals.tab"), emit: signals - path "*.version.txt", emit: version + path "*.version.txt" , emit: version script: - def software = getSoftwareName(task.process) - def output = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def reference = fasta == "dummy_file.txt" ? "--ref $fasta" : "" """ tiddit \\ --sv $options.args \\ --bam $bam \\ $reference \\ - -o $output + -o $prefix echo \$(tiddit -h 2>&1) | sed 's/^.*Version: //; s/(.*\$//' > ${software}.version.txt """ diff --git a/software/trimgalore/functions.nf b/software/trimgalore/functions.nf index d25eea86..da9da093 100644 --- a/software/trimgalore/functions.nf +++ b/software/trimgalore/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/trimgalore/main.nf b/software/trimgalore/main.nf index 0fc163f3..44b36e71 100644 --- a/software/trimgalore/main.nf +++ b/software/trimgalore/main.nf @@ -9,7 +9,7 @@ process TRIMGALORE { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::trim-galore=0.6.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/ucsc/bed12tobigbed/functions.nf b/software/ucsc/bed12tobigbed/functions.nf index d25eea86..da9da093 100644 --- a/software/ucsc/bed12tobigbed/functions.nf +++ b/software/ucsc/bed12tobigbed/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/ucsc/bed12tobigbed/main.nf b/software/ucsc/bed12tobigbed/main.nf index 3b7a35bb..407379fd 100644 --- a/software/ucsc/bed12tobigbed/main.nf +++ b/software/ucsc/bed12tobigbed/main.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) def VERSION = '377' @@ -11,7 +11,7 @@ process UCSC_BED12TOBIGBED { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ucsc-bedtobigbed=377" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -36,6 +36,7 @@ process UCSC_BED12TOBIGBED { $bed \\ $sizes \\ ${prefix}.bigBed + echo $VERSION > ${software}.version.txt """ } diff --git a/software/ucsc/bed12tobigbed/meta.yml b/software/ucsc/bed12tobigbed/meta.yml new file mode 100755 index 00000000..7541eb2d --- /dev/null +++ b/software/ucsc/bed12tobigbed/meta.yml @@ -0,0 +1,46 @@ +name: ucsc_bed12tobigbed +description: Convert file from bed12 to bigBed format +keywords: + - bed12 + - bigbed +tools: + - ucsc: + description: Convert file from bed12 to bigBed format + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ["varies; see http://genome.ucsc.edu/license"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: bed12 file + pattern: "*.{bed,bed12}" + - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bigbed: + type: file + description: bigBed file + pattern: "*.{bigBed}" + +authors: + - "@drpatelh" diff --git a/software/ucsc/bedclip/functions.nf b/software/ucsc/bedclip/functions.nf new file mode 100755 index 00000000..da9da093 --- /dev/null +++ b/software/ucsc/bedclip/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/ucsc/bedclip/main.nf b/software/ucsc/bedclip/main.nf new file mode 100755 index 00000000..d1a47554 --- /dev/null +++ b/software/ucsc/bedclip/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +def VERSION = '377' + +process UCSC_BEDCLIP { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::ucsc-bedclip=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-bedclip:377--h0b8a92a_2" + } else { + container "quay.io/biocontainers/ucsc-bedclip:377--h0b8a92a_2" + } + + input: + tuple val(meta), path(bedgraph) + path sizes + + output: + tuple val(meta), path("*.bedGraph"), emit: bedgraph + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedClip \\ + $bedgraph \\ + $sizes \\ + ${prefix}.bedGraph + + echo $VERSION > ${software}.version.txt + """ +} diff --git a/software/ucsc/bedclip/meta.yml b/software/ucsc/bedclip/meta.yml new file mode 100755 index 00000000..f20b4617 --- /dev/null +++ b/software/ucsc/bedclip/meta.yml @@ -0,0 +1,41 @@ +name: ucsc_bedclip +description: See http://hgdownload.cse.ucsc.edu/admin/exe/ +keywords: + - sort +tools: + - ucsc: + description: Remove lines from bed file that refer to off-chromosome locations. + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedgraph}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedgraph}" + +authors: + - "@drpatelh" diff --git a/software/ucsc/bedgraphtobigwig/functions.nf b/software/ucsc/bedgraphtobigwig/functions.nf index d25eea86..da9da093 100644 --- a/software/ucsc/bedgraphtobigwig/functions.nf +++ b/software/ucsc/bedgraphtobigwig/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/ucsc/bedgraphtobigwig/main.nf b/software/ucsc/bedgraphtobigwig/main.nf index 8936362b..e5fe3b7f 100644 --- a/software/ucsc/bedgraphtobigwig/main.nf +++ b/software/ucsc/bedgraphtobigwig/main.nf @@ -11,7 +11,7 @@ process UCSC_BEDGRAPHTOBIGWIG { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ucsc-bedgraphtobigwig=377" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/ucsc/bedgraphtobigwig/meta.yml b/software/ucsc/bedgraphtobigwig/meta.yml new file mode 100755 index 00000000..31365f48 --- /dev/null +++ b/software/ucsc/bedgraphtobigwig/meta.yml @@ -0,0 +1,46 @@ +name: ucsc_bedgraphtobigwig +description: Convert a bedGraph file to bigWig format. +keywords: + - bedgraph + - bigwig +tools: + - ucsc: + description: Convert a bedGraph file to bigWig format. + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ["varies; see http://genome.ucsc.edu/license"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedGraph}" + - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bigwig: + type: file + description: bigWig file + pattern: "*.{bigWig}" + +authors: + - "@drpatelh" diff --git a/software/ucsc/bigwigaverageoverbed/functions.nf b/software/ucsc/bigwigaverageoverbed/functions.nf new file mode 100755 index 00000000..da9da093 --- /dev/null +++ b/software/ucsc/bigwigaverageoverbed/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/ucsc/bigwigaverageoverbed/main.nf b/software/ucsc/bigwigaverageoverbed/main.nf new file mode 100644 index 00000000..0aef3fca --- /dev/null +++ b/software/ucsc/bigwigaverageoverbed/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process UCSC_BIGWIGAVERAGEOVERBED { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::ucsc-bigwigaverageoverbed=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-bigwigaverageoverbed:377--h0b8a92a_2" + } else { + container "quay.io/biocontainers/ucsc-bigwigaverageoverbed:377--h0b8a92a_2" + } + + input: + tuple val(meta), path(bed) + path bigwig + + output: + tuple val(meta), path("*.tab") , emit: tab + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + # there is a bug that bigWigAverageOverBed can not handle ensembl seqlevels style. + bigWigAverageOverBed ${options.args} $bigwig $bed ${bed.getSimpleName()}.tab + + echo \$(bigWigAverageOverBed 2>&1) | sed 's/bigWigAverageOverBed v//; s/ - Compute.*\$//' > ${software}.version.txt + """ +} diff --git a/software/ucsc/bigwigaverageoverbed/meta.yml b/software/ucsc/bigwigaverageoverbed/meta.yml new file mode 100644 index 00000000..1f007f42 --- /dev/null +++ b/software/ucsc/bigwigaverageoverbed/meta.yml @@ -0,0 +1,46 @@ +name: ucsc_bigwigaverageoverbed +description: compute average score of bigwig over bed file +keywords: + - bigwig + - bedGraph +tools: + - ucsc: + description: Compute average score of big wig over each bed, which may have introns. + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: bed file + pattern: "*.{bed}" + - bigwig: + type: file + description: bigwig file + pattern: "*.{bigwig,bw}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - tab: + type: file + description: tab file + pattern: "*.{tab}" + +authors: + - "@jianhong" diff --git a/software/ucsc/wigtobigwig/functions.nf b/software/ucsc/wigtobigwig/functions.nf new file mode 100755 index 00000000..da9da093 --- /dev/null +++ b/software/ucsc/wigtobigwig/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/software/ucsc/wigtobigwig/main.nf b/software/ucsc/wigtobigwig/main.nf new file mode 100644 index 00000000..dee2d0bd --- /dev/null +++ b/software/ucsc/wigtobigwig/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process UCSC_WIGTOBIGWIG { + tag '$wig' + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:377--h0b8a92a_2" + } else { + container "quay.io/biocontainers/ucsc-wigtobigwig:377--h0b8a92a_2" + } + + input: + path wig + path chromsizes + + output: + path "*.bw" , emit: bw + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + + """ + wigToBigWig \\ + $options.args \\ + $wig \\ + $chromsizes \\ + ${wig.getSimpleName()}.bw + + echo \$(wigToBigWig 2>&1) | sed 's/wigToBigWig v //; s/ - Convert.*\$//' > ${software}.version.txt + """ +} diff --git a/software/ucsc/wigtobigwig/meta.yml b/software/ucsc/wigtobigwig/meta.yml new file mode 100644 index 00000000..6ed4b026 --- /dev/null +++ b/software/ucsc/wigtobigwig/meta.yml @@ -0,0 +1,37 @@ +name: ucsc_wigtobigwig +description: Convert ascii format wig file to binary big wig format +keywords: + - wig + - bigwig +tools: + - ucsc: + description: | + Convert ascii format wig file (in fixedStep, variableStep + or bedGraph format) to binary big wig format + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - wig: + type: file + description: wig file + pattern: "*.{wig}" + - chromsizes: + type: file + description: chromosome sizes file + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bw: + type: file + description: bigwig file + pattern: "*.{bw}" + +authors: + - "@jianhong" diff --git a/software/umitools/dedup/functions.nf b/software/umitools/dedup/functions.nf index d25eea86..da9da093 100644 --- a/software/umitools/dedup/functions.nf +++ b/software/umitools/dedup/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/umitools/dedup/main.nf b/software/umitools/dedup/main.nf index f4ec3e2c..93ea6d45 100644 --- a/software/umitools/dedup/main.nf +++ b/software/umitools/dedup/main.nf @@ -9,7 +9,7 @@ process UMITOOLS_DEDUP { label "process_medium" publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::umi_tools=1.1.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/umitools/extract/functions.nf b/software/umitools/extract/functions.nf index d25eea86..da9da093 100644 --- a/software/umitools/extract/functions.nf +++ b/software/umitools/extract/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/umitools/extract/main.nf b/software/umitools/extract/main.nf index 0fe02711..581f41c3 100644 --- a/software/umitools/extract/main.nf +++ b/software/umitools/extract/main.nf @@ -9,7 +9,7 @@ process UMITOOLS_EXTRACT { label "process_low" publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::umi_tools=1.1.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/unicycler/functions.nf b/software/unicycler/functions.nf index f177f0c8..da9da093 100644 --- a/software/unicycler/functions.nf +++ b/software/unicycler/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/unicycler/main.nf b/software/unicycler/main.nf index 4841074c..320c0f29 100644 --- a/software/unicycler/main.nf +++ b/software/unicycler/main.nf @@ -9,7 +9,7 @@ process UNICYCLER { label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::unicycler=0.4.8' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/untar/functions.nf b/software/untar/functions.nf index d25eea86..da9da093 100644 --- a/software/untar/functions.nf +++ b/software/untar/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/untar/main.nf b/software/untar/main.nf index b0fc0cd9..fc6d7ec5 100644 --- a/software/untar/main.nf +++ b/software/untar/main.nf @@ -9,7 +9,7 @@ process UNTAR { label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/vcftools/functions.nf b/software/vcftools/functions.nf index d0720191..da9da093 100644 --- a/software/vcftools/functions.nf +++ b/software/vcftools/functions.nf @@ -1,50 +1,57 @@ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/vcftools/main.nf b/software/vcftools/main.nf index 8b5b9969..a0d8cd5a 100644 --- a/software/vcftools/main.nf +++ b/software/vcftools/main.nf @@ -9,7 +9,7 @@ process VCFTOOLS { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::vcftools=0.1.16" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/yara/index/functions.nf b/software/yara/index/functions.nf index f177f0c8..da9da093 100644 --- a/software/yara/index/functions.nf +++ b/software/yara/index/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/yara/index/main.nf b/software/yara/index/main.nf index 05559eaf..f1fe13a5 100644 --- a/software/yara/index/main.nf +++ b/software/yara/index/main.nf @@ -9,7 +9,7 @@ process YARA_INDEX { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::yara=1.0.2" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/software/yara/mapper/functions.nf b/software/yara/mapper/functions.nf index f177f0c8..da9da093 100644 --- a/software/yara/mapper/functions.nf +++ b/software/yara/mapper/functions.nf @@ -1,49 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/software/yara/mapper/main.nf b/software/yara/mapper/main.nf index 3938cadd..f888ae14 100644 --- a/software/yara/mapper/main.nf +++ b/software/yara/mapper/main.nf @@ -9,7 +9,7 @@ process YARA_MAPPER { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::yara=1.0.2 bioconda::samtools=1.12" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/tests/config/nextflow.config b/tests/config/nextflow.config index 83f9506e..cd22dde8 100644 --- a/tests/config/nextflow.config +++ b/tests/config/nextflow.config @@ -8,7 +8,7 @@ params { process { cpus = 2 memory = 3.GB - time = 48.h + time = 2.h } if ("$PROFILE" == "singularity") { @@ -18,12 +18,15 @@ if ("$PROFILE" == "singularity") { params.enable_conda = true } else { docker.enabled = true - docker.runOptions = '-u \$(id -u):\$(id -g)' + docker.userEmulation = true } +// Increase time available to build Conda environment +conda { createTimeout = "120 min" } + // Load test_data.config containing paths to test data includeConfig 'test_data.config' manifest { - nextflowVersion = '!>=20.11.0-edge' + nextflowVersion = '!>=21.04.0' } diff --git a/tests/config/pytest_software.yml b/tests/config/pytest_software.yml index 4150faf4..83f69481 100644 --- a/tests/config/pytest_software.yml +++ b/tests/config/pytest_software.yml @@ -1,3 +1,7 @@ +abacas: + - software/abacas/** + - tests/software/abacas/** + adapterremoval: - software/adapterremoval/** - tests/software/adapterremoval/** @@ -6,85 +10,101 @@ allelecounter: - software/allelecounter/** - tests/software/allelecounter/** -bandage_image: +artic/guppyplex: + - software/artic/guppyplex/** + - tests/software/artic/guppyplex/** + +artic/minion: + - software/artic/minion/** + - tests/software/artic/minion/** + +bandage/image: - software/bandage/image/** - tests/software/bandage/image/** -bcftools_consensus: +bbmap/bbduk: + - software/bbmap/bbduk/** + - tests/software/bbmap/bbduk/** + +bcftools/consensus: - software/bcftools/consensus/** - tests/software/bcftools/consensus/** -bcftools_filter: +bcftools/filter: - software/bcftools/filter/** - tests/software/bcftools/filter/** -bcftools_isec: +bcftools/isec: - software/bcftools/isec/** - tests/software/bcftools/isec/** -bcftools_merge: +bcftools/merge: - software/bcftools/merge/** - tests/software/bcftools/merge/** -bcftools_mpileup: +bcftools/mpileup: - software/bcftools/mpileup/** - tests/software/bcftools/mpileup/** -bcftools_stats: +bcftools/stats: - software/bcftools/stats/** - tests/software/bcftools/stats/** -bedtools_complement: +bedtools/bamtobed: + - software/bedtools/bamtobed/** + - tests/software/bedtools/bamtobed/** + +bedtools/complement: - software/bedtools/complement/** - tests/software/bedtools/complement/** -bedtools_genomecov: +bedtools/genomecov: - software/bedtools/genomecov/** - tests/software/bedtools/genomecov/** -bedtools_getfasta: +bedtools/getfasta: - software/bedtools/getfasta/** - tests/software/bedtools/getfasta/** -bedtools_intersect: +bedtools/intersect: - software/bedtools/intersect/** - tests/software/bedtools/intersect/** -bedtools_maskfasta: +bedtools/maskfasta: - software/bedtools/maskfasta/** - tests/software/bedtools/maskfasta/** -bedtools_merge: +bedtools/merge: - software/bedtools/merge/** - tests/software/bedtools/merge/** -bedtools_slop: +bedtools/slop: - software/bedtools/slop/** - tests/software/bedtools/slop/** -bedtools_sort: +bedtools/sort: - software/bedtools/sort/** - tests/software/bedtools/sort/** -bismark_align: +bismark/align: - software/bismark/align/** - software/bismark/genomepreparation/** - tests/software/bismark/align/** -bismark_deduplicate: +bismark/deduplicate: - software/bismark/deduplicate/** - tests/software/bismark/deduplicate/** -bismark_genomepreparation: +bismark/genomepreparation: - software/bismark/genomepreparation/** - tests/software/bismark/genomepreparation/** -bismark_methylationextractor: +bismark/methylationextractor: - software/bismark/methylationextractor/** - software/bismark/genomepreparation/** - tests/software/bismark/methylationextractor/** -bismark_report: +bismark/report: - software/bismark/genomepreparation/** - software/bismark/align/** - software/bismark/deduplicate/** @@ -92,7 +112,7 @@ bismark_report: - software/bismark/report/** - tests/software/bismark/report/** -bismark_summary: +bismark/summary: - software/bismark/genomepreparation/** - software/bismark/align/** - software/bismark/deduplicate/** @@ -100,57 +120,57 @@ bismark_summary: - software/bismark/summary/** - tests/software/bismark/summary/** -blast_blastn: +blast/blastn: - software/blast/blastn/** - tests/software/blast/blastn/** -blast_makeblastdb: +blast/makeblastdb: - software/blast/makeblastdb/** - tests/software/blast/makeblastdb/** -bowtie2_align: - - software/bowtie2/align/** - - software/bowtie2/build/** - - tests/software/bowtie2/align/** - -bowtie2_build: - - software/bowtie2/build/** - - tests/software/bowtie2/build_test/** - -bowtie_align: +bowtie/align: - software/bowtie/align/** - software/bowtie/build/** - tests/software/bowtie/align/** -bowtie_build: +bowtie/build: - software/bowtie/build/** - tests/software/bowtie/build_test/** -bwa_index: +bowtie2/align: + - software/bowtie2/align/** + - software/bowtie2/build/** + - tests/software/bowtie2/align/** + +bowtie2/build: + - software/bowtie2/build/** + - tests/software/bowtie2/build_test/** + +bwa/index: - software/bwa/index/** - tests/software/bwa/index/** -bwa_mem: +bwa/mem: - software/bwa/mem/** - tests/software/bwa/mem/** -bwamem2_index: +bwamem2/index: - software/bwamem2/index/** - tests/software/bwamem2/index/** -bwamem2_mem: +bwamem2/mem: - software/bwamem2/mem/** - tests/software/bwamem2/mem/** -bwameth_align: +bwameth/align: - software/bwameth/align/** - tests/software/bwameth/align/** -bwameth_index: +bwameth/index: - software/bwameth/index/** - tests/software/bwameth/index/** -cat_fastq: +cat/fastq: - software/cat/fastq/** - tests/software/cat/fastq/** @@ -158,17 +178,61 @@ cnvkit: - software/cnvkit/** - tests/software/cnvkit/** +cooler/digest: + - software/cooler/digest/** + - tests/software/cooler/digest/** + +cooler/dump: + - software/cooler/dump/** + - tests/software/cooler/dump/** + cutadapt: - software/cutadapt/** - tests/software/cutadapt/** -dsh_filterbed: - - software/dsh/filterbed/** - - tests/software/dsh/filterbed/** +damageprofiler: + - software/damageprofiler/** + - tests/software/damageprofiler/** -dsh_splitbed: - - software/dsh/splitbed/** - - tests/software/dsh/splitbed/** +deeptools/computematrix: + - software/deeptools/computematrix/** + - tests/software/deeptools/computematrix/** + +deeptools/plotfingerprint: + - software/deeptools/plotfingerprint/** + - tests/software/deeptools/plotfingerprint/** + +deeptools/plotheatmap: + - software/deeptools/plotheatmap/** + - tests/software/deeptools/plotheatmap/** + +deeptools/plotprofile: + - software/deeptools/plotprofile/** + - tests/software/deeptools/plotprofile/** + +delly/call: + - software/delly/call/** + - tests/software/delly/call/** + +dshbio/filterbed: + - software/dshbio/filterbed/** + - tests/software/dshbio/filterbed/** + +dshbio/filtergff3: + - software/dshbio/filtergff3/** + - tests/software/dshbio/filtergff3/** + +dshbio/splitbed: + - software/dshbio/splitbed/** + - tests/software/dshbio/splitbed/** + +dshbio/splitgff3: + - software/dshbio/splitgff3/** + - tests/software/dshbio/splitgff3/** + +ensemblvep: + - software/ensemblvep/** + - tests/software/ensemblvep/** fastp: - software/fastp/** @@ -178,11 +242,15 @@ fastqc: - software/fastqc/** - tests/software/fastqc/** -fgbio_callmolecularconsensusreads: +fasttree: + - software/fasttree/** + - tests/software/fasttree/** + +fgbio/callmolecularconsensusreads: - software/fgbio/callmolecularconsensusreads/** - tests/software/fgbio/callmolecularconsensusreads/** -fgbio_sortbam: +fgbio/sortbam: - software/fgbio/sortbam/** - tests/software/fgbio/sortbam/** @@ -190,62 +258,82 @@ flash: - software/flash/** - tests/software/flash/** -gatk4_applybqsr: +gatk4/applybqsr: - software/gatk4/applybqsr/** - tests/software/gatk4/applybqsr/** -gatk4_baserecalibrator: +gatk4/baserecalibrator: - software/gatk4/baserecalibrator/** - tests/software/gatk4/baserecalibrator/** -gatk4_bedtointervallist: +gatk4/bedtointervallist: - software/gatk4/bedtointervallist/** - tests/software/gatk4/bedtointervallist/** -gatk4_createsequencedictionary: +gatk4/createsequencedictionary: - software/gatk4/createsequencedictionary/** - tests/software/gatk4/createsequencedictionary/** -gatk4_fastqtosam: +gatk4/fastqtosam: - software/gatk4/fastqtosam/** - tests/software/gatk4/fastqtosam/** -gatk4_haplotypecaller: +gatk4/haplotypecaller: - software/gatk4/haplotypecaller/** - tests/software/gatk4/haplotypecaller/** -gatk4_markduplicates: +gatk4/intervallisttools: + - software/gatk4/intervallisttools/** + - tests/software/gatk4/intervallisttools/** + +gatk4/markduplicates: - software/gatk4/markduplicates/** - tests/software/gatk4/markduplicates/** -gatk4_mergebamalignment: +gatk4/mergebamalignment: - software/gatk4/mergebamalignment/** - tests/software/gatk4/mergebamalignment/** -gatk4_mergevcfs: +gatk4/mergevcfs: - software/gatk4/mergevcfs/** - tests/software/gatk4/mergevcfs/** -gatk4_revertsam: +gatk4/revertsam: - software/gatk4/revertsam/** - tests/software/gatk4/revertsam/** -gatk4_samtofastq: +gatk4/samtofastq: - software/gatk4/samtofastq/** - tests/software/gatk4/samtofastq/** -gatk4_splitncigarreads: +gatk4/splitncigarreads: - software/gatk4/splitncigarreads/** - tests/software/gatk4/splitncigarreads/** -gatk4_variantfiltration: +gatk4/variantfiltration: - software/gatk4/variantfiltration/** - tests/software/gatk4/variantfiltration/** +genmap/index: + - software/genmap/index/** + - tests/software/genmap/index/** + +genmap/mappability: + - software/genmap/mappability/** + - tests/software/genmap/mappability/** + gffread: - software/gffread/** - tests/software/gffread/** +graphmap2/align: + - software/graphmap2/align/** + - tests/software/graphmap2/align/** + +graphmap2/index: + - software/graphmap2/index/** + - tests/software/graphmap2/index/** + gubbins: - software/gubbins/** - tests/software/gubbins/** @@ -254,50 +342,123 @@ gunzip: - software/gunzip/** - tests/software/gunzip/** -hisat2_align: +hisat2/align: - software/hisat2/align/** - software/hisat2/build/** - software/hisat2/extractsplicesites/** - tests/software/hisat2/align/** -hisat2_build: +hisat2/build: - software/hisat2/build/** - software/hisat2/extractsplicesites/** - tests/software/hisat2/build_test/** -hisat2_extractsplicesites: +hisat2/extractsplicesites: - software/hisat2/extractsplicesites/** - tests/software/hisat2/extractsplicesites/** -homer_annotatepeaks: +hmmer/hmmalign: + - software/hmmer/hmmalign/** + - tests/software/hmmer/hmmalign/** + +homer/annotatepeaks: - software/homer/annotatepeaks/** - tests/software/homer/annotatepeaks/** -ivar_consensus: +iqtree: + - software/iqtree/** + - tests/software/iqtree/** + +ivar/consensus: - software/ivar/consensus/** - tests/software/ivar/consensus/** -ivar_trim: +ivar/trim: - software/ivar/trim/** - tests/software/ivar/trim/** -ivar_variants: +ivar/variants: - software/ivar/variants/** - tests/software/ivar/variants/** -kallisto_index: +kallisto/index: - software/kallisto/index/** - tests/software/kallisto/index/** -kraken2_run: - - software/kraken2/run/** - - tests/software/kraken2/run/** +kallistobustools/count: + - software/kallistobustools/count/** + - tests/software/kallistobustools/count/** -methyldackel_extract: +kallistobustools/ref: + - software/kallistobustools/ref/** + - tests/software/kallistobustools/ref/** + +kraken2/kraken2: + - software/kraken2/kraken2/** + - software/untar/** + - tests/software/kraken2/kraken2/** + +last/dotplot: + - software/last/dotplot/** + - tests/software/last/dotplot/** + +last/lastal: + - software/last/lastal/** + - tests/software/last/lastal/** + +last/lastdb: + - software/last/lastdb/** + - tests/software/last/lastdb/** + +last/mafconvert: + - software/last/mafconvert/** + - tests/software/last/mafconvert/** + +last/mafswap: + - software/last/mafswap/** + - tests/software/last/mafswap/** + +last/postmask: + - software/last/postmask/** + - tests/software/last/postmask/** + +last/split: + - software/last/split/** + - tests/software/last/split/** + +last/train: + - software/last/train/** + - tests/software/last/train/** + +lofreq/call: + - software/lofreq/call/** + - tests/software/lofreq/call/** + +lofreq/callparallel: + - software/lofreq/callparallel/** + - tests/software/lofreq/callparallel/** + +lofreq/filter: + - software/lofreq/filter/** + - tests/software/lofreq/filter/** + +lofreq/indelqual: + - software/lofreq/indelqual/** + - tests/software/lofreq/indelqual/** + +mash/sketch: + - software/mash/sketch/** + - tests/software/mash/sketch/** + +metaphlan3: + - software/metaphlan3/** + - tests/software/metaphlan3/** + +methyldackel/extract: - software/methyldackel/extract/** - tests/software/methyldackel/extract/** -methyldackel_mbias: +methyldackel/mbias: - software/methyldackel/mbias/** - tests/software/methyldackel/mbias/** @@ -305,19 +466,23 @@ minia: - software/minia/** - tests/software/minia/** -minimap2_align: +minimap2/align: - software/minimap2/align/** - tests/software/minimap2/align/** +minimap2/index: + - software/minimap2/index/** + - tests/software/minimap2/index/** + mosdepth: - software/mosdepth/** - tests/software/mosdepth/** -msisensor_msi: +msisensor/msi: - software/msisensor/msi/** - tests/software/msisensor/msi/** -msisensor_scan: +msisensor/scan: - software/msisensor/scan/** - tests/software/msisensor/scan/** @@ -326,31 +491,79 @@ multiqc: - software/multiqc/** - tests/software/multiqc/** +muscle: + - software/muscle/** + - tests/software/muscle/** + +nanolyse: + - software/nanolyse/** + - tests/software/nanolyse/** + +nanoplot: + - software/nanoplot/** + - tests/software/nanoplot/** + +nextclade: + - software/nextclade/** + - tests/software/nextclade/** + optitype: - software/optitype/** - tests/software/optitype/** +pairix: + - software/pairix/** + - tests/software/pairix/** + +pairtools/dedup: + - software/pairtools/dedup/** + - tests/software/pairtools/dedup/** + +pairtools/flip: + - software/pairtools/flip/** + - tests/software/pairtools/flip/** + +pairtools/parse: + - software/pairtools/parse/** + - tests/software/pairtools/parse/** + +pairtools/restrict: + - software/pairtools/restrict/** + - tests/software/pairtools/restrict/** + +pairtools/select: + - software/pairtools/select/** + - tests/software/pairtools/select/** + +pairtools/sort: + - software/pairtools/sort/** + - tests/software/pairtools/sort/** + pangolin: - software/pangolin/** - tests/software/pangolin/** -picard_collectmultiplemetrics: +picard/collectmultiplemetrics: - software/picard/collectmultiplemetrics/** - tests/software/picard/collectmultiplemetrics/** -picard_collectwgsmetrics: +picard/collectwgsmetrics: - software/picard/collectwgsmetrics/** - tests/software/picard/collectwgsmetrics/** -picard_markduplicates: +picard/markduplicates: - software/picard/markduplicates/** - tests/software/picard/markduplicates/** -picard_mergesamfiles: +picard/mergesamfiles: - software/picard/mergesamfiles/** - tests/software/picard/mergesamfiles/** -preseq_lcextrap: +plasmidid: + - software/plasmidid/** + - tests/software/plasmidid/** + +preseq/lcextrap: - software/preseq/lcextrap/** - tests/software/preseq/lcextrap/** @@ -362,7 +575,15 @@ prokka: - software/prokka/** - tests/software/prokka/** -qualimap_bamqc: +pycoqc: + - software/pycoqc/** + - tests/software/pycoqc/** + +qcat: + - software/qcat/** + - tests/software/qcat/** + +qualimap/bamqc: - software/qualimap/bamqc/** - tests/software/qualimap/bamqc/** @@ -370,79 +591,127 @@ quast: - software/quast/** - tests/software/quast/** -salmon_index: +rapidnj: + - software/rapidnj/** + - tests/software/rapidnj/** + +rasusa: + - software/rasusa/** + - tests/software/rasusa/** + +raxmlng: + - software/raxmlng/** + - tests/software/raxmlng/** + +rsem/calculateexpression: + - software/rsem/calculateexpression/** + - tests/software/rsem/calculateexpression/** + +rsem/preparereference: + - software/rsem/preparereference/** + - tests/software/rsem/preparereference/** + +rseqc/bamstat: + - software/rseqc/bamstat/** + - tests/software/rseqc/bamstat/** + +rseqc/inferexperiment: + - software/rseqc/inferexperiment/** + - tests/software/rseqc/inferexperiment/** + +rseqc/innerdistance: + - software/rseqc/innerdistance/** + - tests/software/rseqc/innerdistance/** + +rseqc/junctionannotation: + - software/rseqc/junctionannotation/** + - tests/software/rseqc/junctionannotation/** + +rseqc/junctionsaturation: + - software/rseqc/junctionsaturation/** + - tests/software/rseqc/junctionsaturation/** + +rseqc/readdistribution: + - software/rseqc/readdistribution/** + - tests/software/rseqc/readdistribution/** + +rseqc/readduplication: + - software/rseqc/readduplication/** + - tests/software/rseqc/readduplication/** + +salmon/index: - software/salmon/index/** - tests/software/salmon/index/** -salmon_quant: +salmon/quant: - software/salmon/quant/** - tests/software/salmon/quant/** -samtools_faidx: +samtools/faidx: - software/samtools/faidx/** - tests/software/samtools/faidx/** -samtools_fastq: +samtools/fastq: - software/samtools/fastq/** - tests/software/samtools/fastq/** -samtools_flagstat: +samtools/flagstat: - software/samtools/flagstat/** - tests/software/samtools/flagstat/** -samtools_idxstats: +samtools/idxstats: - software/samtools/idxstats/** - tests/software/samtools/idxstats/** -samtools_index: +samtools/index: - software/samtools/index/** - tests/software/samtools/index/** -samtools_merge: +samtools/merge: - software/samtools/merge/** - tests/software/samtools/merge/** -samtools_mpileup: +samtools/mpileup: - software/samtools/mpileup/** - tests/software/samtools/mpileup/** -samtools_sort: +samtools/sort: - software/samtools/sort/** - tests/software/samtools/sort/** -samtools_stats: +samtools/stats: - software/samtools/stats/** - tests/software/samtools/stats/** -samtools_view: +samtools/view: - software/samtools/view/** - tests/software/samtools/view/** -seacr_callpeak: +seacr/callpeak: - software/seacr/callpeak/** - tests/software/seacr/callpeak/** -seqkit_split2: +seqkit/split2: - software/seqkit/split2/** - tests/software/seqkit/split2/** -sequenza_bam2seqz: - - software/sequenza/bam2seqz/** - - tests/software/sequenza/bam2seqz/** +seqtk/sample: + - software/seqtk/sample/** + - tests/software/seqtk/sample/** -sequenza_wiggle: - - software/sequenza/wiggle/** - - tests/software/sequenza/wiggle/** +seqtk/subseq: + - software/seqtk/subseq/** + - tests/software/seqtk/subseq/** -sequenzautils_bam2seqz: +sequenzautils/bam2seqz: - software/sequenzautils/bam2seqz/** - tests/software/sequenzautils/bam2seqz/** -sequenzautils_gcwiggle: +sequenzautils/gcwiggle: - software/sequenzautils/gcwiggle/** - tests/software/sequenzautils/gcwiggle/** -seqwish_induce: +seqwish/induce: - software/seqwish/induce/** - tests/software/seqwish/induce/** @@ -450,39 +719,55 @@ shovill: - software/shovill/** - tests/software/shovill/** +snpeff: + - software/snpeff/** + - tests/software/snpeff/** + +snpsites: + - software/snpsites/** + - tests/software/snpsites/** + spades: - software/spades/** - tests/software/spades/** -star_align: +star/align: - software/star/align/** - tests/software/star/align/** -star_genomegenerate: +star/genomegenerate: - software/star/genomegenerate/** - tests/software/star/genomegenerate/** -strelka_germline: +strelka/germline: - software/strelka/germline/** - tests/software/strelka/germline/** -stringtie: - - software/stringtie/** - - tests/software/stringtie/** +stringtie/merge: + - software/stringtie/merge/** + - tests/software/stringtie/merge/** -subread_featurecounts: +stringtie/stringtie: + - software/stringtie/stringtie/** + - tests/software/stringtie/stringtie/** + +subread/featurecounts: - software/subread/featurecounts/** - tests/software/subread/featurecounts/** -tabix_bgzip: +tabix/bgzip: - software/tabix/bgzip/** - tests/software/tabix/bgzip/** -tabix_tabix: +tabix/bgziptabix: + - software/tabix/bgziptabix/** + - tests/software/tabix/bgziptabix/** + +tabix/tabix: - software/tabix/tabix/** - tests/software/tabix/tabix/** -tiddit_sv: +tiddit/sv: - software/tiddit/sv/** - tests/software/tiddit/sv/** @@ -490,14 +775,26 @@ trimgalore: - software/trimgalore/** - tests/software/trimgalore/** -ucsc_bed12tobigbed: +ucsc/bed12tobigbed: - software/ucsc/bed12tobigbed/** - tests/software/ucsc/bed12tobigbed/** -ucsc_bedgraphtobigwig: +ucsc/bedclip: + - software/ucsc/bedclip/** + - tests/software/ucsc/bedclip/** + +ucsc/bedgraphtobigwig: - software/ucsc/bedgraphtobigwig/** - tests/software/ucsc/bedgraphtobigwig/** +ucsc/bigwigaverageoverbed: + - software/ucsc/bigwigaverageoverbed/** + - tests/software/ucsc/bigwigaverageoverbed/** + +ucsc/wigtobigwig: + - software/ucsc/wigtobigwig/** + - tests/software/ucsc/wigtobigwig/** + unicycler: - software/unicycler/** - tests/software/unicycler/** @@ -510,10 +807,10 @@ vcftools: - software/vcftools/** - tests/software/vcftools/** -yara: - - software/yara/mapper/** - - tests/software/yara/mapper/** - -yara_index: +yara/index: - software/yara/index/** - tests/software/yara/index/** + +yara/mapper: + - software/yara/mapper/** + - tests/software/yara/mapper/** diff --git a/tests/config/test_data.config b/tests/config/test_data.config index d2b9a5bb..314a2329 100644 --- a/tests/config/test_data.config +++ b/tests/config/test_data.config @@ -1,74 +1,163 @@ // Base directory for test data -def test_data_dir = "${launchDir}/tests/data/" +def test_data_dir = "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data" params { test_data { 'sarscov2' { 'genome' { - genome_fasta = "${test_data_dir}/genomics/sarscov2/genome/genome.fasta" - genome_fasta_fai = "${test_data_dir}/genomics/sarscov2/genome/genome.fasta.fai" - genome_dict = "${test_data_dir}/genomics/sarscov2/genome/genome.dict" - genome_gff3 = "${test_data_dir}/genomics/sarscov2/genome/genome.gff3" - genome_gff3_gz = "${test_data_dir}/genomics/sarscov2/genome/genome.gff3.gz" - genome_gtf = "${test_data_dir}/genomics/sarscov2/genome/genome.gtf" - genome_sizes = "${test_data_dir}/genomics/sarscov2/genome/genome.sizes" - transcriptome_fasta = "${test_data_dir}/genomics/sarscov2/genome/transcriptome.fasta" - transcriptome_paf = "${test_data_dir}/genomics/sarscov2/genome/transcriptome.paf" + genome_fasta = "${test_data_dir}/genomics/sarscov2/genome/genome.fasta" + genome_fasta_fai = "${test_data_dir}/genomics/sarscov2/genome/genome.fasta.fai" + genome_dict = "${test_data_dir}/genomics/sarscov2/genome/genome.dict" + genome_gff3 = "${test_data_dir}/genomics/sarscov2/genome/genome.gff3" + genome_gff3_gz = "${test_data_dir}/genomics/sarscov2/genome/genome.gff3.gz" + genome_gtf = "${test_data_dir}/genomics/sarscov2/genome/genome.gtf" + genome_sizes = "${test_data_dir}/genomics/sarscov2/genome/genome.sizes" + transcriptome_fasta = "${test_data_dir}/genomics/sarscov2/genome/transcriptome.fasta" + transcriptome_paf = "${test_data_dir}/genomics/sarscov2/genome/transcriptome.paf" - test_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed" - test_bed_gz = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed.gz" - test2_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/test2.bed" - test_bed12 = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed12" - baits_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/baits.bed" + test_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed" + test_bed_gz = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed.gz" + test2_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/test2.bed" + test_bed12 = "${test_data_dir}/genomics/sarscov2/genome/bed/test.bed12" + baits_bed = "${test_data_dir}/genomics/sarscov2/genome/bed/baits.bed" - kraken2 = "${test_data_dir}/genomics/sarscov2/genome/db/kraken2" - kraken2_tar_gz = "${test_data_dir}/genomics/sarscov2/genome/db/kraken2.tar.gz" - - test_wig_gz = "${test_data_dir}/genomics/sarscov2/genome/gcwiggle/test.wig.gz" + kraken2 = "${test_data_dir}/genomics/sarscov2/genome/db/kraken2" + kraken2_tar_gz = "${test_data_dir}/genomics/sarscov2/genome/db/kraken2.tar.gz" - test_fas = "${test_data_dir}/genomics/sarscov2/genome/alignment/test.fas" + all_sites_fas = "${test_data_dir}/genomics/sarscov2/genome/alignment/all_sites.fas" + informative_sites_fas = "${test_data_dir}/genomics/sarscov2/genome/alignment/informative_sites.fas" + + contigs_genome_maf_gz = "${test_data_dir}/genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz" + contigs_genome_par = "${test_data_dir}/genomics/sarscov2/genome/alignment/last/contigs.genome.par" + lastdb_tar_gz = "${test_data_dir}/genomics/sarscov2/genome/alignment/last/lastdb.tar.gz" } 'illumina' { - test_single_end_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_single_end.bam" - test_single_end_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam" - test_single_end_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam.bai" - test_paired_end_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_paired_end.bam" - test_paired_end_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam" - test_paired_end_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai" - test_methylated_paired_end_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_methylated_paired_end.bam" - test_methylated_paired_end_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam" - test_methylated_paired_end_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam.bai" - test_unaligned_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test_unaligned.bam" + test_single_end_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.single_end.bam" + test_single_end_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.single_end.sorted.bam" + test_single_end_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai" + test_paired_end_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.bam" + test_paired_end_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam" + test_paired_end_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai" + test_paired_end_methylated_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.methylated.bam" + test_paired_end_methylated_sorted_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam" + test_paired_end_methylated_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai" + test_unaligned_bam = "${test_data_dir}/genomics/sarscov2/illumina/bam/test.unaligned.bam" - test_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_1.fastq.gz" - test_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_2.fastq.gz" - test2_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz" - test2_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz" - test_methylated_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_methylated_1.fastq.gz" - test_methylated_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_methylated_2.fastq.gz" + test_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_1.fastq.gz" + test_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test_2.fastq.gz" + test2_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz" + test2_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz" + test_methylated_1_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test.methylated_1.fastq.gz" + test_methylated_2_fastq_gz = "${test_data_dir}/genomics/sarscov2/illumina/fastq/test.methylated_2.fastq.gz" - test_baserecalibrator_table = "${test_data_dir}/genomics/sarscov2/illumina/gatk/test.baserecalibrator.table" + test_bedgraph = "${test_data_dir}/genomics/sarscov2/illumina/bedgraph/test.bedgraph" - test_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf" - test_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf.gz" - test_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi" - test2_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf" - test2_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf.gz" - test2_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi" - test3_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf" - test3_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf.gz" - test3_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi" + test_bigwig = "${test_data_dir}/genomics/sarscov2/illumina/bigwig/test.bigwig" + + test_wig_gz = "${test_data_dir}/genomics/sarscov2/illumina/wig/test.wig.gz" + + test_baserecalibrator_table = "${test_data_dir}/genomics/sarscov2/illumina/gatk/test.baserecalibrator.table" + + test_computematrix_mat_gz = "${test_data_dir}/genomics/sarscov2/illumina/deeptools/test.computeMatrix.mat.gz" + + test_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf" + test_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf.gz" + test_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi" + test2_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf" + test2_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf.gz" + test2_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi" + test3_vcf = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf" + test3_vcf_gz = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf.gz" + test3_vcf_gz_tbi = "${test_data_dir}/genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi" + + contigs_fasta = "${test_data_dir}/genomics/sarscov2/illumina/fasta/contigs.fasta" + scaffolds_fasta = "${test_data_dir}/genomics/sarscov2/illumina/fasta/scaffolds.fasta" + + assembly_gfa = "${test_data_dir}/genomics/sarscov2/illumina/gfa/assembly.gfa" } 'nanopore' { - test_sorted_bam = "${test_data_dir}/genomics/sarscov2/nanopore/bam/test.sorted.bam" - test_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/nanopore/bam/test.sorted.bam.bai" + test_sorted_bam = "${test_data_dir}/genomics/sarscov2/nanopore/bam/test.sorted.bam" + test_sorted_bam_bai = "${test_data_dir}/genomics/sarscov2/nanopore/bam/test.sorted.bam.bai" - test_fastq_gz = "${test_data_dir}/genomics/sarscov2/nanopore/fastq/test.fastq.gz" + fast5_tar_gz = "${test_data_dir}/genomics/sarscov2/nanopore/fast5/fast5.tar.gz" + + test_fastq_gz = "${test_data_dir}/genomics/sarscov2/nanopore/fastq/test.fastq.gz" + + test_sequencing_summary = "${test_data_dir}/genomics/sarscov2/nanopore/sequencing_summary/test.sequencing_summary.txt" } } 'homo_sapiens' { + 'genome' { + genome_fasta = "${test_data_dir}/genomics/homo_sapiens/genome/genome.fasta" + genome_fasta_fai = "${test_data_dir}/genomics/homo_sapiens/genome/genome.fasta.fai" + genome_dict = "${test_data_dir}/genomics/homo_sapiens/genome/genome.dict" + genome_gff3 = "${test_data_dir}/genomics/homo_sapiens/genome/genome.gff3" + genome_gtf = "${test_data_dir}/genomics/homo_sapiens/genome/genome.gtf" + genome_sizes = "${test_data_dir}/genomics/homo_sapiens/genome/genome.sizes" + genome_bed = "${test_data_dir}/genomics/homo_sapiens/genome/genome.bed" + transcriptome_fasta = "${test_data_dir}/genomics/homo_sapiens/genome/transcriptome.fasta" + + dbsnp_146_hg38_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz" + dbsnp_146_hg38_vcf_gz_tbi = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz.tbi" + gnomad_r2_1_1_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1.vcf.gz" + gnomad_r2_1_1_vcf_gz_tbi = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1.vcf.gz.tbi" + mills_and_1000g_indels_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/mills_and_1000G.indels.vcf.gz" + mills_and_1000g_indels_vcf_gz_tbi = "${test_data_dir}/genomics/homo_sapiens/genome/vcf/mills_and_1000G.indels.vcf.gz.tbi" + index_salmon = "${test_data_dir}/genomics/homo_sapiens/genome/index/salmon" + } 'illumina' { - test_paired_end_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test_paired_end.bam" + test_paired_end_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam" + test_paired_end_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai" + test_paired_end_markduplicates_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam" + test_paired_end_markduplicates_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.markduplicates.sorted.bam.bai" + test_paired_end_recalibrated_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam" + test_paired_end_recalibrated_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai" + test_paired_end_umi_consensus_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_consensus.bam" + test_paired_end_umi_converted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_converted.bam" + test_paired_end_umi_grouped_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_grouped.bam" + test_paired_end_umi_histogram_txt = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_histogram.txt" + test_paired_end_umi_unsorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.umi_unsorted.bam" + test_paired_end_umi_unsorted_tagged_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test.paired_end.unsorted_tagged.bam" + + test2_paired_end_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam" + test2_paired_end_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai" + test2_paired_end_markduplicates_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.markduplicates.sorted.bam" + test2_paired_end_markduplicates_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.markduplicates.sorted.bam.bai" + test2_paired_end_recalibrated_sorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam" + test2_paired_end_recalibrated_sorted_bam_bai = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai" + test2_paired_end_umi_consensus_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.umi_consensus.bam" + test2_paired_end_umi_converted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.umi_converted.bam" + test2_paired_end_umi_grouped_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.umi_grouped.bam" + test2_paired_end_umi_histogram_txt = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.umi_histogram.txt" + test2_paired_end_umi_unsorted_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.umi_unsorted.bam" + test2_paired_end_umi_unsorted_tagged_bam = "${test_data_dir}/genomics/homo_sapiens/illumina/bam/umi/test2.paired_end.unsorted_tagged.bam" + + test_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz" + test_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz" + test_umi_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test.umi_1.fastq.gz" + test_umi_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test.umi_2.fastq.gz" + test2_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test2_1.fastq.gz" + test2_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test2_2.fastq.gz" + test2_umi_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test2.umi_1.fastq.gz" + test2_umi_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test2.umi_2.fastq.gz" + test_rnaseq_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test.rnaseq_1.fastq.gz" + test_rnaseq_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/fastq/test.rnaseq_2.fastq.gz" + + test_baserecalibrator_table = "${test_data_dir}/genomics/homo_sapiens/illumina/gatk/test.baserecalibrator.table" + test2_baserecalibrator_table = "${test_data_dir}/genomics/homo_sapiens/illumina/gatk/test2.baserecalibrator.table" + + test_genome_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test.genome.vcf" + test_genome_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz" + test_genome_vcf_gz_tbi = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi" + test_genome_vcf_idx = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx" + + test2_genome_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf" + test2_genome_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz" + test2_genome_vcf_gz_tbi = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi" + test2_genome_vcf_idx = "${test_data_dir}/genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.idx" + + test_10x_1_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/10xgenomics/test.10x_1.fastq.gz" + test_10x_2_fastq_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/10xgenomics/test.10x_2.fastq.gz" } } } diff --git a/tests/data/.gitignore b/tests/data/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/data/README.md b/tests/data/README.md deleted file mode 100644 index 707505d6..00000000 --- a/tests/data/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Modules Test Data - -This directory contains all data used for the individual module tests. It is currently organised in `genomics` and `generic`. The former contains all typical data required for genomics modules, such as fasta, fastq and bam files. Every folder in `genomics` corresponds to a single organisms. Any other data is stored in `generic`. This contains files that currently cannot be associated to a genomics category, but also depreciated files which will be removed in the future and exchanged by files in `genomics`. - -When adding a new module, please check carefully whether the data necessary for the tests exists already in `tests/data/genomics`. If you can't find the data, please ask about it in the slack #modules channel. - -## Data Description - -### genomics - -* sarscov2 - * bam: - * 'test_{,methylated}_paired_end.bam': sarscov2 sequencing reads aligned against test_genomic.fasta using minimap2 - * 'test_{,methylated}_paired_end.sorted.bam': sorted version of the above bam file - * 'test_{,methylated}_paired_end.bam.sorted.bam.bai': bam index for the sorted bam file - * 'test_single_end.bam': alignment (unsorted) of the 'test_1.fastq.gz' reads against test_genomic.fasta using minimap2 - * 'test_unaligned.bam': unmapped BAM file created from 'test_1.fastq.gz' using GATK4 SamToFastq - * bed - * 'test.bed': exemplary bed file for the MT192765.1 genome (fasta/test_genomic.fasta) - * 'test.2.bed': slightly modified copy of the above file - * 'test.bed.gz': gzipped version - * 'test.genome.sizes': genome size for the MT192765.1 genome - * fasta - * 'test_genomic.fasta': MT192765.1 genomem including (GCA_011545545.1_ASM1154554v1) - * 'test_genomic.dict': GATK dict for 'test_genomic.fasta' - * 'test_genomic.fasta.fai': fasta index for 'test_genomic.fasta' - * 'test_cds_from_genomic.fasta': coding sequencing from MT192765.1 genome (transcripts) - * fastq - * 'test_{1,2}.fastq.gz' sarscov2 paired-end sequencing reads - * 'test_{1,2}.2.fastq.gz‘: copies of the above reads - * 'test_methylated_{1,2}.fastq.gz' sarscov2 paired-end bisulfite sequencing reads (generated with [Sherman](https://github.com/FelixKrueger/Sherman)) - * gtf - * 'test_genomic.gtf': GTF for MT192765.1 genome - * 'test_genomic.gff3': GFF for MT192765.1 genome - * 'test_genomic.gff3.gz': bgzipped-version - * paf - * 'test_cds_from_genomic.paf': PAF file for MT192765.1 genome - * table: - * 'test.table': Recalibration table generated with gatk4 BaseRecalibrator from 'test_paired_end.sorted.bam', using 'test.vcf.gz' as known sites. - * vcf - * 'test.vcf', 'test2.vcf': generated from 'test_paired_end.sorted.bam' using bcftools mpileup, call and filter - * 'test3.vcf': generated from 'test_single_end.sorted.bam' using bcftools mpileup, call and filter - * '*.gz': generated from VCF files using bgzip - * '.tbi': generated from '.vcf.gz' files using `tabix -p vcf -f ` - -### generic - -* 'a.gff3.gz': bgzipped gff3 file currently necessary for TABIX test -* bedgraph: bedgraph files for seacr -* fasta: additional fasta file currently necessary for STAR -* fastq: additional fastq files currently necessary for STAR -* gtf: additional gtf file for STAR -* vcf: several VCF files for tools using those, will be removed in the future -* 'test.txt.gar.gz' exemplary tar file for the untar module diff --git a/tests/data/delete_me/bedgraph/IgG_1_to_chr20.bedgraph b/tests/data/delete_me/bedgraph/IgG_1_to_chr20.bedgraph deleted file mode 100644 index c218e58d..00000000 --- a/tests/data/delete_me/bedgraph/IgG_1_to_chr20.bedgraph +++ /dev/null @@ -1,10234 +0,0 @@ -chr20 61169 61234 1 -chr20 61234 61241 2 -chr20 61241 61291 1 -chr20 91459 91776 1 -chr20 111083 111672 1 -chr20 115355 115835 1 -chr20 116122 116229 1 -chr20 169276 169660 1 -chr20 183381 183607 1 -chr20 215589 215870 1 -chr20 227155 227381 1 -chr20 249156 249188 1 -chr20 272596 272792 1 -chr20 274953 275011 1 -chr20 279370 279547 1 -chr20 297815 298154 1 -chr20 304317 304389 1 -chr20 325405 325817 1 -chr20 327080 327457 1 -chr20 343001 343306 1 -chr20 345213 345635 1 -chr20 360607 360686 1 -chr20 367436 367639 1 -chr20 371524 371742 1 -chr20 373703 373794 1 -chr20 375927 375973 1 -chr20 380764 380940 1 -chr20 388374 388785 1 -chr20 396831 397019 1 -chr20 405580 405692 1 -chr20 408027 408063 1 -chr20 461486 461676 1 -chr20 462658 462897 1 -chr20 479183 479594 1 -chr20 490605 490654 1 -chr20 503916 503980 1 -chr20 524515 524597 1 -chr20 560799 561027 1 -chr20 563350 563682 1 -chr20 563791 563998 1 -chr20 566830 566904 1 -chr20 584300 584345 1 -chr20 592144 592411 1 -chr20 605089 605119 1 -chr20 611178 611747 1 -chr20 634926 635134 1 -chr20 639721 639786 1 -chr20 642096 642595 1 -chr20 652089 652322 1 -chr20 655423 655916 1 -chr20 656686 657406 1 -chr20 665289 665534 1 -chr20 681237 681452 1 -chr20 683810 683982 1 -chr20 684830 685069 1 -chr20 686850 687042 1 -chr20 689468 689638 1 -chr20 690845 690993 1 -chr20 715787 716038 1 -chr20 729754 729795 1 -chr20 754016 754249 1 -chr20 763236 763632 1 -chr20 772284 772501 1 -chr20 782131 782185 1 -chr20 789563 789805 1 -chr20 793774 793975 1 -chr20 806531 806730 1 -chr20 809141 809301 1 -chr20 816201 816416 1 -chr20 817125 817266 1 -chr20 818691 818748 1 -chr20 831131 831209 1 -chr20 844482 844609 1 -chr20 847151 847464 1 -chr20 851932 852297 1 -chr20 853994 854362 1 -chr20 857420 857882 1 -chr20 863621 863710 1 -chr20 868403 868674 1 -chr20 876291 876624 1 -chr20 881681 881907 1 -chr20 890362 890562 1 -chr20 890769 891217 1 -chr20 899336 899390 1 -chr20 900163 900236 1 -chr20 906767 907192 1 -chr20 908214 908661 1 -chr20 911716 911752 1 -chr20 920599 920839 1 -chr20 940988 941113 1 -chr20 941466 941698 1 -chr20 955084 955361 1 -chr20 978135 978762 1 -chr20 979671 979859 1 -chr20 980548 980616 1 -chr20 982128 982318 1 -chr20 984456 984837 1 -chr20 984904 984935 1 -chr20 984939 985018 1 -chr20 988594 988652 1 -chr20 996833 997135 1 -chr20 998310 998632 1 -chr20 1002596 1002809 1 -chr20 1003080 1003294 1 -chr20 1012975 1013178 1 -chr20 1013413 1013556 1 -chr20 1016910 1017077 1 -chr20 1026610 1026704 1 -chr20 1033728 1034199 1 -chr20 1040126 1040346 1 -chr20 1043549 1043866 1 -chr20 1045507 1045762 1 -chr20 1047828 1047893 1 -chr20 1063827 1063980 1 -chr20 1085354 1085518 1 -chr20 1095203 1095402 1 -chr20 1102883 1102964 1 -chr20 1104105 1104586 1 -chr20 1107883 1107986 1 -chr20 1108623 1108875 1 -chr20 1115440 1115785 1 -chr20 1118527 1118674 1 -chr20 1118881 1119075 1 -chr20 1149355 1149674 1 -chr20 1155144 1155555 1 -chr20 1167021 1167240 1 -chr20 1168585 1168800 1 -chr20 1170071 1170509 1 -chr20 1179796 1180113 1 -chr20 1193018 1193071 1 -chr20 1226041 1226217 1 -chr20 1235253 1235509 1 -chr20 1247187 1247589 1 -chr20 1284435 1284666 1 -chr20 1294853 1294892 1 -chr20 1295450 1295633 1 -chr20 1309405 1309757 1 -chr20 1310421 1310597 1 -chr20 1323909 1324022 1 -chr20 1324697 1324913 1 -chr20 1330080 1330545 1 -chr20 1342326 1342745 1 -chr20 1350398 1350544 1 -chr20 1370798 1370974 1 -chr20 1377241 1377447 1 -chr20 1378758 1378890 1 -chr20 1391778 1392250 1 -chr20 1395685 1396348 1 -chr20 1397199 1397486 1 -chr20 1401652 1402073 1 -chr20 1427781 1428318 1 -chr20 1457772 1458356 1 -chr20 1472101 1472492 1 -chr20 1476410 1476710 1 -chr20 1497498 1497571 1 -chr20 1498187 1498381 1 -chr20 1505871 1506245 1 -chr20 1515811 1516030 1 -chr20 1519860 1520093 1 -chr20 1573593 1573748 1 -chr20 1625770 1626432 1 -chr20 1627589 1627810 1 -chr20 1636703 1636773 1 -chr20 1636773 1636782 2 -chr20 1636782 1636836 1 -chr20 1643137 1643399 1 -chr20 1646403 1646587 1 -chr20 1646782 1646885 1 -chr20 1660431 1661372 1 -chr20 1673451 1673656 1 -chr20 1678459 1678981 1 -chr20 1679688 1679887 1 -chr20 1694819 1695005 1 -chr20 1700660 1701297 1 -chr20 1706593 1706988 1 -chr20 1709685 1710281 1 -chr20 1711841 1712182 1 -chr20 1716181 1716276 1 -chr20 1719909 1720171 1 -chr20 1725395 1725634 1 -chr20 1728674 1728725 1 -chr20 1737969 1738142 1 -chr20 1754571 1754749 1 -chr20 1755884 1756112 1 -chr20 1761686 1761965 1 -chr20 1767634 1767772 1 -chr20 1778353 1778550 1 -chr20 1783793 1784028 1 -chr20 1785035 1785102 1 -chr20 1795095 1795318 1 -chr20 1800123 1800501 1 -chr20 1803740 1804006 1 -chr20 1811408 1811583 1 -chr20 1812822 1812878 1 -chr20 1814110 1814406 1 -chr20 1821470 1822031 1 -chr20 1846529 1846599 1 -chr20 1851639 1852234 1 -chr20 1856290 1856739 1 -chr20 1866168 1866774 1 -chr20 1875778 1876287 1 -chr20 1880970 1881189 1 -chr20 1892107 1892336 1 -chr20 1893393 1893794 1 -chr20 1895980 1896181 1 -chr20 1898776 1899148 1 -chr20 1902387 1902786 1 -chr20 1907548 1907758 1 -chr20 1924420 1924646 1 -chr20 1926327 1926665 1 -chr20 1939556 1939728 1 -chr20 1941318 1941692 1 -chr20 1942481 1942762 1 -chr20 1947968 1948190 1 -chr20 1953197 1953307 1 -chr20 1954251 1954367 1 -chr20 1957021 1957307 1 -chr20 1971090 1971163 1 -chr20 1979063 1979352 1 -chr20 1985193 1985442 1 -chr20 1991487 1991937 1 -chr20 1991937 1991954 2 -chr20 1991954 1992571 1 -chr20 1994216 1994528 1 -chr20 1997651 1997939 1 -chr20 2004624 2004861 1 -chr20 2009798 2010179 1 -chr20 2022201 2022454 1 -chr20 2023983 2024391 1 -chr20 2033829 2034262 1 -chr20 2048953 2049352 1 -chr20 2052558 2052707 1 -chr20 2056793 2056933 1 -chr20 2081677 2081864 1 -chr20 2092243 2092536 1 -chr20 2105803 2106193 1 -chr20 2121400 2121647 1 -chr20 2135968 2136549 1 -chr20 2137462 2137690 1 -chr20 2140852 2141187 1 -chr20 2150316 2150703 1 -chr20 2150805 2151408 1 -chr20 2157840 2158040 1 -chr20 2163539 2163954 1 -chr20 2173914 2174143 1 -chr20 2178465 2178678 1 -chr20 2178678 2178699 2 -chr20 2178699 2179218 1 -chr20 2184654 2184989 1 -chr20 2194392 2194489 1 -chr20 2198019 2198328 1 -chr20 2213224 2213389 1 -chr20 2227110 2227350 1 -chr20 2231800 2232008 1 -chr20 2245360 2245848 1 -chr20 2255277 2255496 1 -chr20 2255496 2255505 2 -chr20 2255505 2255879 1 -chr20 2271784 2271974 1 -chr20 2282823 2282897 1 -chr20 2283733 2283851 1 -chr20 2292300 2292386 1 -chr20 2292593 2292950 1 -chr20 2294763 2295338 1 -chr20 2300539 2300737 1 -chr20 2301296 2301619 1 -chr20 2304273 2304390 1 -chr20 2305442 2305653 1 -chr20 2313286 2313674 1 -chr20 2318735 2319226 1 -chr20 2320934 2321170 1 -chr20 2333664 2333911 1 -chr20 2340797 2341021 1 -chr20 2347209 2347315 1 -chr20 2358517 2358704 1 -chr20 2363279 2363718 1 -chr20 2364100 2364488 1 -chr20 2384265 2384524 1 -chr20 2389760 2390114 1 -chr20 2395435 2395812 1 -chr20 2404775 2404841 1 -chr20 2415914 2416384 1 -chr20 2434639 2434884 1 -chr20 2442479 2442568 1 -chr20 2443331 2443639 1 -chr20 2468309 2468651 1 -chr20 2498961 2499103 1 -chr20 2502652 2502715 1 -chr20 2508079 2508331 1 -chr20 2513629 2513850 1 -chr20 2527534 2527850 1 -chr20 2538858 2539065 1 -chr20 2546474 2546531 1 -chr20 2555667 2555891 1 -chr20 2568397 2568618 1 -chr20 2595160 2595381 1 -chr20 2596450 2596556 1 -chr20 2606529 2606729 1 -chr20 2607031 2607328 1 -chr20 2611047 2611580 1 -chr20 2611702 2611868 1 -chr20 2632613 2632642 1 -chr20 2632774 2632860 1 -chr20 2648807 2648871 1 -chr20 2658054 2658229 1 -chr20 2659870 2660263 1 -chr20 2672241 2672529 1 -chr20 2672972 2673036 1 -chr20 2680890 2681268 1 -chr20 2698626 2699410 1 -chr20 2700168 2700596 1 -chr20 2709616 2709912 1 -chr20 2740451 2740822 1 -chr20 2744200 2744240 1 -chr20 2750315 2750583 1 -chr20 2758300 2758525 1 -chr20 2758809 2759094 1 -chr20 2810162 2810249 1 -chr20 2819126 2819379 1 -chr20 2824058 2824096 1 -chr20 2824506 2824556 1 -chr20 2847068 2847429 1 -chr20 2847553 2847619 1 -chr20 2851932 2851961 1 -chr20 2861486 2861992 1 -chr20 2867814 2867996 1 -chr20 2872855 2873104 1 -chr20 2877876 2877938 1 -chr20 2885030 2885072 1 -chr20 2888621 2888861 1 -chr20 2895133 2895171 1 -chr20 2920156 2920754 1 -chr20 2925779 2925806 1 -chr20 2954211 2954277 1 -chr20 2956110 2956375 1 -chr20 2964028 2964253 1 -chr20 2965357 2965524 1 -chr20 2984235 2984444 1 -chr20 3000427 3000683 1 -chr20 3001133 3001346 1 -chr20 3027563 3028164 1 -chr20 3032993 3033462 1 -chr20 3038955 3039720 1 -chr20 3041070 3041142 1 -chr20 3043075 3043459 1 -chr20 3045286 3045688 1 -chr20 3065052 3065229 1 -chr20 3069928 3070000 1 -chr20 3073554 3073647 1 -chr20 3076814 3077083 1 -chr20 3083967 3084188 1 -chr20 3094909 3095343 1 -chr20 3097070 3097123 1 -chr20 3098919 3098973 1 -chr20 3100951 3101195 1 -chr20 3103048 3103319 1 -chr20 3104416 3104514 1 -chr20 3111562 3111754 1 -chr20 3114806 3114890 1 -chr20 3125267 3125310 1 -chr20 3125329 3125344 1 -chr20 3125344 3125359 2 -chr20 3125359 3125401 1 -chr20 3141913 3141996 1 -chr20 3146034 3146089 1 -chr20 3147570 3147935 1 -chr20 3163392 3163652 1 -chr20 3163973 3164202 1 -chr20 3165432 3165631 1 -chr20 3166868 3167292 1 -chr20 3168071 3168356 1 -chr20 3168392 3168841 1 -chr20 3173312 3173735 1 -chr20 3174389 3174589 1 -chr20 3185820 3185876 1 -chr20 3201051 3201076 1 -chr20 3206321 3206356 1 -chr20 3230296 3230854 1 -chr20 3244669 3244757 1 -chr20 3245015 3245189 1 -chr20 3262450 3262535 1 -chr20 3274328 3274414 1 -chr20 3276875 3277118 1 -chr20 3297709 3298299 1 -chr20 3300889 3301049 1 -chr20 3307225 3307443 1 -chr20 3311483 3311546 1 -chr20 3319527 3319877 1 -chr20 3340127 3340507 1 -chr20 3354691 3354922 1 -chr20 3361886 3362048 1 -chr20 3397045 3397116 1 -chr20 3419751 3419785 1 -chr20 3424626 3424697 1 -chr20 3430626 3430827 1 -chr20 3438167 3438241 1 -chr20 3441437 3441468 1 -chr20 3445072 3445160 1 -chr20 3456605 3456954 1 -chr20 3457181 3457388 1 -chr20 3472974 3473347 1 -chr20 3486466 3486497 1 -chr20 3496186 3496247 1 -chr20 3507183 3507212 1 -chr20 3509300 3509482 1 -chr20 3513716 3513785 1 -chr20 3515240 3515445 1 -chr20 3517828 3518072 1 -chr20 3520004 3520430 1 -chr20 3532963 3533017 1 -chr20 3548851 3549327 1 -chr20 3549506 3549705 1 -chr20 3564065 3564171 1 -chr20 3577052 3577449 1 -chr20 3577639 3577918 1 -chr20 3578884 3579104 1 -chr20 3584911 3585177 1 -chr20 3598599 3598712 1 -chr20 3641573 3641738 1 -chr20 3643248 3643420 1 -chr20 3646979 3647188 1 -chr20 3648807 3649652 1 -chr20 3658975 3659501 1 -chr20 3662777 3663004 1 -chr20 3669589 3670163 1 -chr20 3673310 3673737 1 -chr20 3681783 3682216 1 -chr20 3688562 3688787 1 -chr20 3701650 3701990 1 -chr20 3710928 3711328 1 -chr20 3716404 3716590 1 -chr20 3724537 3724565 1 -chr20 3736285 3736480 1 -chr20 3740531 3740942 1 -chr20 3741710 3741906 1 -chr20 3743246 3743312 1 -chr20 3747602 3747835 1 -chr20 3748209 3748435 1 -chr20 3749710 3749886 1 -chr20 3759955 3760328 1 -chr20 3764265 3764444 1 -chr20 3766122 3766399 1 -chr20 3804832 3805072 1 -chr20 3809031 3809108 1 -chr20 3814607 3814672 1 -chr20 3814826 3814917 1 -chr20 3818322 3818547 1 -chr20 3821594 3821645 1 -chr20 3822728 3823228 1 -chr20 3825483 3825798 1 -chr20 3834788 3834860 1 -chr20 3849196 3849308 1 -chr20 3866839 3867141 1 -chr20 3875964 3876263 1 -chr20 3877999 3878070 1 -chr20 3883184 3883225 1 -chr20 3897745 3897841 1 -chr20 3909214 3909278 1 -chr20 3914051 3914355 1 -chr20 3927086 3927141 1 -chr20 3930684 3930872 1 -chr20 3932948 3933349 1 -chr20 3943005 3943071 1 -chr20 3984273 3984615 1 -chr20 3986526 3986700 1 -chr20 3988529 3988575 1 -chr20 4001007 4001074 1 -chr20 4003238 4003677 1 -chr20 4003857 4003916 1 -chr20 4028234 4028398 1 -chr20 4046768 4047235 1 -chr20 4048248 4048586 1 -chr20 4055934 4055996 1 -chr20 4059148 4059234 1 -chr20 4074896 4075083 1 -chr20 4079576 4079745 1 -chr20 4080595 4080719 1 -chr20 4088186 4088448 1 -chr20 4091211 4091335 1 -chr20 4093845 4093909 1 -chr20 4097268 4097332 1 -chr20 4101942 4102108 1 -chr20 4124994 4125023 1 -chr20 4131454 4131709 1 -chr20 4134143 4134338 1 -chr20 4144478 4144531 1 -chr20 4155460 4155717 1 -chr20 4156318 4156495 1 -chr20 4163139 4163724 1 -chr20 4169666 4169975 1 -chr20 4181054 4181610 1 -chr20 4188943 4189067 1 -chr20 4193841 4194362 1 -chr20 4205765 4205853 1 -chr20 4212568 4212623 1 -chr20 4213220 4213425 1 -chr20 4221542 4222170 1 -chr20 4222599 4222878 1 -chr20 4225143 4225202 1 -chr20 4225821 4226210 1 -chr20 4227978 4228594 1 -chr20 4228903 4229106 1 -chr20 4238719 4238970 1 -chr20 4245784 4246170 1 -chr20 4249465 4249670 1 -chr20 4258908 4259216 1 -chr20 4267212 4267293 1 -chr20 4267293 4267302 2 -chr20 4267302 4267609 1 -chr20 4281709 4282301 1 -chr20 4294815 4295176 1 -chr20 4304148 4304326 1 -chr20 4315708 4315858 1 -chr20 4319989 4320099 1 -chr20 4328662 4328963 1 -chr20 4330069 4330381 1 -chr20 4342837 4343205 1 -chr20 4349063 4349268 1 -chr20 4359824 4360025 1 -chr20 4366798 4367490 1 -chr20 4369138 4369322 1 -chr20 4380226 4380624 1 -chr20 4381306 4381703 1 -chr20 4381770 4381895 1 -chr20 4384459 4384890 1 -chr20 4427309 4427357 1 -chr20 4427943 4428137 1 -chr20 4431464 4431822 1 -chr20 4437814 4437924 1 -chr20 4445487 4445983 1 -chr20 4452732 4453539 1 -chr20 4468006 4468420 1 -chr20 4488431 4488637 1 -chr20 4489573 4489780 1 -chr20 4495327 4495734 1 -chr20 4509411 4510009 1 -chr20 4516443 4516478 1 -chr20 4517120 4517664 1 -chr20 4518731 4519006 1 -chr20 4519309 4519681 1 -chr20 4541604 4542105 1 -chr20 4548224 4548433 1 -chr20 4550912 4551106 1 -chr20 4568865 4569248 1 -chr20 4569714 4569920 1 -chr20 4573645 4573868 1 -chr20 4574582 4574860 1 -chr20 4575204 4575267 1 -chr20 4582669 4583081 1 -chr20 4600146 4600357 1 -chr20 4611774 4612359 1 -chr20 4618400 4618641 1 -chr20 4621986 4622079 1 -chr20 4637454 4637651 1 -chr20 4639301 4639377 1 -chr20 4658318 4658550 1 -chr20 4673930 4674178 1 -chr20 4684417 4685044 1 -chr20 4699380 4699630 1 -chr20 4712038 4712150 1 -chr20 4726679 4726870 1 -chr20 4729171 4729420 1 -chr20 4730666 4731167 1 -chr20 4761913 4762106 1 -chr20 4766267 4766337 1 -chr20 4773947 4774371 1 -chr20 4776535 4776872 1 -chr20 4792340 4792544 1 -chr20 4795598 4795807 1 -chr20 4807220 4807416 1 -chr20 4810082 4810417 1 -chr20 4811229 4811317 1 -chr20 4813021 4813216 1 -chr20 4836403 4836623 1 -chr20 4856168 4856425 1 -chr20 4861314 4861690 1 -chr20 4863581 4863858 1 -chr20 4866148 4866271 1 -chr20 4876080 4876673 1 -chr20 4880339 4880453 1 -chr20 4892442 4892481 1 -chr20 4895414 4895667 1 -chr20 4905230 4905397 1 -chr20 4908237 4908281 1 -chr20 4912122 4912385 1 -chr20 4916032 4916414 1 -chr20 4924361 4924666 1 -chr20 4925328 4925693 1 -chr20 4931988 4932183 1 -chr20 4936994 4937173 1 -chr20 4938286 4938370 1 -chr20 4943007 4943438 1 -chr20 4953642 4953691 1 -chr20 4964721 4964756 1 -chr20 4976564 4976661 1 -chr20 4981963 4982037 1 -chr20 5020867 5021313 1 -chr20 5028536 5028600 1 -chr20 5029876 5029910 1 -chr20 5030490 5030688 1 -chr20 5043494 5043734 1 -chr20 5054031 5054227 1 -chr20 5054604 5054677 1 -chr20 5069803 5069918 1 -chr20 5094226 5094255 1 -chr20 5095420 5095967 1 -chr20 5096137 5096508 1 -chr20 5120044 5120258 1 -chr20 5122607 5123049 1 -chr20 5126706 5126945 1 -chr20 5128546 5128574 1 -chr20 5128629 5128845 1 -chr20 5141366 5141737 1 -chr20 5148377 5148634 1 -chr20 5170426 5170520 1 -chr20 5181333 5181490 1 -chr20 5188051 5188080 1 -chr20 5197353 5197644 1 -chr20 5212914 5213211 1 -chr20 5223790 5224276 1 -chr20 5253981 5254171 1 -chr20 5261015 5261544 1 -chr20 5262035 5262220 1 -chr20 5269271 5269735 1 -chr20 5271309 5271363 1 -chr20 5271963 5272091 1 -chr20 5279474 5279691 1 -chr20 5310894 5311109 1 -chr20 5320739 5320945 1 -chr20 5323204 5324050 1 -chr20 5370684 5370810 1 -chr20 5376305 5376523 1 -chr20 5377645 5377901 1 -chr20 5380089 5380153 1 -chr20 5380469 5380542 1 -chr20 5399460 5400010 1 -chr20 5400010 5400019 2 -chr20 5400019 5400117 1 -chr20 5401771 5402063 1 -chr20 5404722 5405026 1 -chr20 5409176 5409229 1 -chr20 5414661 5414827 1 -chr20 5427944 5428231 1 -chr20 5428559 5428938 1 -chr20 5430280 5430369 1 -chr20 5432438 5432667 1 -chr20 5435872 5436321 1 -chr20 5438061 5438103 1 -chr20 5453250 5453284 1 -chr20 5456874 5456925 1 -chr20 5458349 5458438 1 -chr20 5466947 5467049 1 -chr20 5467049 5467058 2 -chr20 5467058 5467377 1 -chr20 5484081 5484517 1 -chr20 5485440 5485764 1 -chr20 5491377 5491594 1 -chr20 5516200 5516269 1 -chr20 5522431 5522646 1 -chr20 5532878 5533015 1 -chr20 5534854 5535073 1 -chr20 5537464 5537489 1 -chr20 5558412 5558716 1 -chr20 5567846 5568034 1 -chr20 5575216 5575567 1 -chr20 5578145 5578757 1 -chr20 5590574 5590822 1 -chr20 5591497 5591890 1 -chr20 5593385 5593586 1 -chr20 5603853 5603901 1 -chr20 5604922 5605164 1 -chr20 5607332 5607403 1 -chr20 5613412 5613457 1 -chr20 5626580 5626645 1 -chr20 5629324 5629369 1 -chr20 5641812 5641923 1 -chr20 5658414 5658535 1 -chr20 5658596 5658787 1 -chr20 5672142 5672212 1 -chr20 5693390 5693466 1 -chr20 5696822 5697057 1 -chr20 5698845 5699034 1 -chr20 5701987 5702016 1 -chr20 5721915 5721999 1 -chr20 5732324 5732598 1 -chr20 5749324 5749383 1 -chr20 5750329 5750645 1 -chr20 5758703 5758888 1 -chr20 5765960 5766164 1 -chr20 5766819 5766882 1 -chr20 5771212 5771407 1 -chr20 5777709 5778146 1 -chr20 5817748 5817967 1 -chr20 5823209 5823360 1 -chr20 5827466 5827715 1 -chr20 5835163 5835486 1 -chr20 5837915 5838326 1 -chr20 5880697 5880905 1 -chr20 5888313 5888547 1 -chr20 5923404 5923988 1 -chr20 5929574 5929932 1 -chr20 5931447 5931685 1 -chr20 5939382 5939434 1 -chr20 5945378 5946075 1 -chr20 5949245 5949327 1 -chr20 5950652 5950969 1 -chr20 5968744 5969170 1 -chr20 5973271 5973586 1 -chr20 5985191 5985275 1 -chr20 5998479 5998759 1 -chr20 6002504 6002665 1 -chr20 6003096 6003315 1 -chr20 6026322 6026348 1 -chr20 6029081 6029417 1 -chr20 6033281 6033339 1 -chr20 6052871 6053189 1 -chr20 6078061 6078289 1 -chr20 6104012 6104079 1 -chr20 6113738 6114096 1 -chr20 6117316 6117367 1 -chr20 6165118 6165421 1 -chr20 6170867 6171509 1 -chr20 6175865 6176120 1 -chr20 6178046 6178480 1 -chr20 6208106 6208325 1 -chr20 6210744 6210815 1 -chr20 6220728 6220981 1 -chr20 6242190 6242398 1 -chr20 6242648 6242929 1 -chr20 6252648 6252888 1 -chr20 6253828 6253976 1 -chr20 6277740 6277927 1 -chr20 6283287 6283343 1 -chr20 6291288 6291558 1 -chr20 6342803 6342972 1 -chr20 6362792 6362909 1 -chr20 6371163 6371590 1 -chr20 6384999 6385119 1 -chr20 6385630 6385855 1 -chr20 6387748 6388352 1 -chr20 6398128 6398362 1 -chr20 6405662 6406057 1 -chr20 6413287 6413601 1 -chr20 6423252 6423672 1 -chr20 6425559 6425828 1 -chr20 6427928 6427956 1 -chr20 6429692 6430136 1 -chr20 6430881 6431044 1 -chr20 6434607 6435048 1 -chr20 6442075 6442660 1 -chr20 6464573 6465003 1 -chr20 6481101 6481425 1 -chr20 6485786 6486133 1 -chr20 6486363 6486635 1 -chr20 6489585 6489779 1 -chr20 6527248 6527284 1 -chr20 6537505 6537587 1 -chr20 6545531 6545642 1 -chr20 6555692 6555877 1 -chr20 6556475 6556799 1 -chr20 6575132 6575440 1 -chr20 6575731 6576280 1 -chr20 6578816 6579082 1 -chr20 6598358 6598539 1 -chr20 6601063 6601390 1 -chr20 6613826 6614102 1 -chr20 6618699 6618784 1 -chr20 6620971 6621207 1 -chr20 6627675 6628585 1 -chr20 6636049 6636278 1 -chr20 6641705 6642095 1 -chr20 6685445 6685601 1 -chr20 6692069 6692256 1 -chr20 6692460 6693283 1 -chr20 6710868 6710996 1 -chr20 6717235 6717401 1 -chr20 6762144 6762359 1 -chr20 6768144 6768354 1 -chr20 6769384 6769588 1 -chr20 6772380 6772616 1 -chr20 6796722 6796898 1 -chr20 6819534 6820020 1 -chr20 6844763 6844820 1 -chr20 6845642 6846271 1 -chr20 6850814 6850861 1 -chr20 6852288 6852463 1 -chr20 6857065 6857154 1 -chr20 6863394 6863584 1 -chr20 6866778 6866944 1 -chr20 6876793 6876970 1 -chr20 6926993 6927058 1 -chr20 6928264 6928429 1 -chr20 6997118 6997368 1 -chr20 7031708 7031802 1 -chr20 7045878 7046286 1 -chr20 7091878 7092516 1 -chr20 7142825 7143098 1 -chr20 7144276 7144489 1 -chr20 7155656 7155845 1 -chr20 7162655 7162816 1 -chr20 7198982 7199131 1 -chr20 7208798 7208971 1 -chr20 7209033 7209557 1 -chr20 7215684 7216297 1 -chr20 7218627 7218682 1 -chr20 7247530 7247640 1 -chr20 7280091 7280308 1 -chr20 7287412 7287631 1 -chr20 7317673 7318099 1 -chr20 7323664 7324021 1 -chr20 7350721 7351115 1 -chr20 7359116 7359349 1 -chr20 7366822 7367201 1 -chr20 7371758 7371945 1 -chr20 7438464 7438818 1 -chr20 7454173 7454475 1 -chr20 7481479 7481524 1 -chr20 7504261 7504700 1 -chr20 7510598 7510745 1 -chr20 7519445 7519674 1 -chr20 7522358 7522559 1 -chr20 7528428 7528510 1 -chr20 7531533 7531746 1 -chr20 7551277 7551505 1 -chr20 7572630 7573252 1 -chr20 7581708 7582046 1 -chr20 7589132 7589536 1 -chr20 7604817 7604886 1 -chr20 7649299 7649502 1 -chr20 7665592 7665803 1 -chr20 7706285 7706683 1 -chr20 7707713 7707910 1 -chr20 7717596 7717669 1 -chr20 7742081 7742344 1 -chr20 7743160 7743667 1 -chr20 7756167 7756378 1 -chr20 7760955 7761031 1 -chr20 7767283 7767521 1 -chr20 7801049 7801256 1 -chr20 7813761 7813869 1 -chr20 7833365 7833433 1 -chr20 7840895 7841152 1 -chr20 7854836 7854964 1 -chr20 7886987 7887317 1 -chr20 7903036 7903432 1 -chr20 7903858 7903902 1 -chr20 7922481 7922613 1 -chr20 7925596 7926211 1 -chr20 7928627 7928970 1 -chr20 7931123 7931667 1 -chr20 7937598 7937893 1 -chr20 7948223 7948433 1 -chr20 7965670 7965788 1 -chr20 7980276 7980478 1 -chr20 7981521 7981684 1 -chr20 7997172 7997635 1 -chr20 8001071 8001330 1 -chr20 8006171 8006508 1 -chr20 8017050 8017347 1 -chr20 8023269 8023638 1 -chr20 8043462 8043824 1 -chr20 8090601 8090676 1 -chr20 8108136 8108333 1 -chr20 8121373 8121583 1 -chr20 8121957 8122456 1 -chr20 8124880 8125149 1 -chr20 8135610 8135975 1 -chr20 8147923 8147988 1 -chr20 8162838 8163235 1 -chr20 8214307 8214564 1 -chr20 8224896 8225094 1 -chr20 8242320 8242486 1 -chr20 8261440 8261685 1 -chr20 8299406 8299711 1 -chr20 8301007 8301174 1 -chr20 8333068 8333309 1 -chr20 8341340 8341857 1 -chr20 8347548 8347905 1 -chr20 8354530 8354877 1 -chr20 8377410 8377649 1 -chr20 8377857 8378062 1 -chr20 8417389 8417734 1 -chr20 8435888 8436066 1 -chr20 8447744 8448099 1 -chr20 8451391 8451568 1 -chr20 8483552 8483771 1 -chr20 8488308 8488390 1 -chr20 8489278 8489607 1 -chr20 8503668 8503897 1 -chr20 8517335 8517646 1 -chr20 8546108 8546182 1 -chr20 8559819 8560138 1 -chr20 8614782 8615359 1 -chr20 8629049 8629634 1 -chr20 8642757 8642917 1 -chr20 8714104 8714292 1 -chr20 8729391 8729563 1 -chr20 8737238 8737720 1 -chr20 8738896 8738957 1 -chr20 8767279 8767540 1 -chr20 8776159 8776378 1 -chr20 8788283 8788776 1 -chr20 8808193 8808417 1 -chr20 8838029 8838219 1 -chr20 8877175 8877322 1 -chr20 8896384 8896596 1 -chr20 8898704 8899083 1 -chr20 8912851 8912991 1 -chr20 8915321 8915541 1 -chr20 8917208 8917445 1 -chr20 8935710 8935863 1 -chr20 8940027 8940580 1 -chr20 8947223 8947537 1 -chr20 8947737 8948258 1 -chr20 8954403 8954569 1 -chr20 8957991 8958340 1 -chr20 8964852 8965223 1 -chr20 8965427 8965633 1 -chr20 8982091 8982374 1 -chr20 8983990 8984223 1 -chr20 9004345 9004580 1 -chr20 9018830 9019080 1 -chr20 9050409 9050784 1 -chr20 9063558 9063995 1 -chr20 9067047 9067101 1 -chr20 9076719 9076944 1 -chr20 9088541 9089123 1 -chr20 9089761 9089954 1 -chr20 9100546 9100737 1 -chr20 9108559 9108743 1 -chr20 9114685 9115273 1 -chr20 9119582 9120358 1 -chr20 9127324 9127687 1 -chr20 9136951 9137381 1 -chr20 9147318 9147924 1 -chr20 9148472 9148683 1 -chr20 9155805 9156004 1 -chr20 9157343 9157448 1 -chr20 9166466 9166641 1 -chr20 9177420 9177763 1 -chr20 9181825 9181917 1 -chr20 9185729 9185967 1 -chr20 9188404 9188524 1 -chr20 9201759 9201985 1 -chr20 9228038 9228367 1 -chr20 9230706 9231319 1 -chr20 9238756 9239147 1 -chr20 9264735 9265158 1 -chr20 9269932 9270131 1 -chr20 9274377 9274898 1 -chr20 9282010 9282250 1 -chr20 9284426 9284671 1 -chr20 9295725 9295806 1 -chr20 9302495 9302692 1 -chr20 9308216 9308410 1 -chr20 9310517 9310579 1 -chr20 9314546 9314656 1 -chr20 9329417 9329608 1 -chr20 9332996 9333449 1 -chr20 9362919 9363129 1 -chr20 9367203 9367441 1 -chr20 9402121 9402328 1 -chr20 9407013 9407218 1 -chr20 9412086 9412604 1 -chr20 9421529 9421748 1 -chr20 9430849 9431037 1 -chr20 9438562 9438757 1 -chr20 9464281 9464353 1 -chr20 9488380 9488689 1 -chr20 9498171 9498206 1 -chr20 9501783 9501968 1 -chr20 9519065 9519399 1 -chr20 9530043 9530462 1 -chr20 9532662 9532994 1 -chr20 9538294 9538707 1 -chr20 9545105 9545781 1 -chr20 9566305 9566486 1 -chr20 9567005 9567204 1 -chr20 9575415 9576024 1 -chr20 9583175 9583915 1 -chr20 9608252 9608448 1 -chr20 9616980 9617216 1 -chr20 9619169 9619209 1 -chr20 9668360 9668572 1 -chr20 9707678 9708054 1 -chr20 9710577 9710779 1 -chr20 9722176 9722368 1 -chr20 9725215 9725550 1 -chr20 9727250 9727727 1 -chr20 9753250 9753851 1 -chr20 9773384 9773429 1 -chr20 9773459 9773690 1 -chr20 9786717 9787000 1 -chr20 9794972 9795247 1 -chr20 9797314 9797346 1 -chr20 9805013 9805196 1 -chr20 9806415 9806685 1 -chr20 9811984 9812206 1 -chr20 9819374 9819815 1 -chr20 9835524 9835703 1 -chr20 9835703 9835712 2 -chr20 9835712 9836011 1 -chr20 9843997 9844517 1 -chr20 9882652 9882925 1 -chr20 9901026 9901212 1 -chr20 9917540 9917749 1 -chr20 9917931 9918156 1 -chr20 9918156 9918165 2 -chr20 9918165 9918342 1 -chr20 9942146 9942388 1 -chr20 9956733 9957000 1 -chr20 9968234 9969029 1 -chr20 9971221 9971396 1 -chr20 9981671 9981935 1 -chr20 9983445 9983835 1 -chr20 9986851 9987539 1 -chr20 9988000 9988366 1 -chr20 9996504 9996886 1 -chr20 10002417 10002501 1 -chr20 10004001 10004370 1 -chr20 10011146 10011230 1 -chr20 10036825 10036889 1 -chr20 10037420 10037625 1 -chr20 10039495 10039671 1 -chr20 10040226 10040774 1 -chr20 10043168 10043380 1 -chr20 10063342 10063566 1 -chr20 10084489 10084689 1 -chr20 10112202 10112472 1 -chr20 10113309 10113849 1 -chr20 10132626 10132789 1 -chr20 10134469 10135354 1 -chr20 10162424 10162493 1 -chr20 10191540 10191567 1 -chr20 10200408 10200596 1 -chr20 10231584 10232416 1 -chr20 10242659 10242867 1 -chr20 10247503 10247796 1 -chr20 10263442 10264007 1 -chr20 10269181 10269237 1 -chr20 10287282 10287349 1 -chr20 10291345 10291371 1 -chr20 10293519 10294330 1 -chr20 10310244 10310514 1 -chr20 10317701 10317850 1 -chr20 10320856 10321057 1 -chr20 10321641 10321823 1 -chr20 10341220 10341446 1 -chr20 10345707 10345912 1 -chr20 10352583 10352797 1 -chr20 10383198 10383450 1 -chr20 10419347 10419566 1 -chr20 10422762 10422804 1 -chr20 10431874 10432307 1 -chr20 10444512 10444538 1 -chr20 10445902 10446097 1 -chr20 10450814 10450840 1 -chr20 10451785 10451867 1 -chr20 10462575 10462843 1 -chr20 10468136 10468482 1 -chr20 10484523 10484760 1 -chr20 10505163 10505642 1 -chr20 10510236 10510482 1 -chr20 10511396 10511635 1 -chr20 10513301 10513574 1 -chr20 10526874 10526906 1 -chr20 10538677 10538735 1 -chr20 10556853 10557089 1 -chr20 10559759 10559963 1 -chr20 10564560 10564965 1 -chr20 10594035 10594371 1 -chr20 10610939 10611238 1 -chr20 10613947 10614078 1 -chr20 10616166 10616711 1 -chr20 10637096 10637517 1 -chr20 10676675 10676892 1 -chr20 10680288 10680661 1 -chr20 10682143 10682380 1 -chr20 10682380 10682389 2 -chr20 10682389 10682877 1 -chr20 10693087 10693527 1 -chr20 10723064 10723281 1 -chr20 10761127 10761334 1 -chr20 10763847 10764370 1 -chr20 10777456 10777959 1 -chr20 10780822 10781032 1 -chr20 10787311 10787602 1 -chr20 10795043 10795455 1 -chr20 10843360 10843570 1 -chr20 10888492 10888682 1 -chr20 10895312 10895418 1 -chr20 10897330 10897600 1 -chr20 10905104 10905337 1 -chr20 10952596 10952836 1 -chr20 10952836 10952845 2 -chr20 10952845 10953044 1 -chr20 10974230 10974675 1 -chr20 10977076 10977322 1 -chr20 10987108 10987354 1 -chr20 10991707 10992016 1 -chr20 11016968 11017252 1 -chr20 11020054 11020460 1 -chr20 11026875 11027106 1 -chr20 11047409 11048153 1 -chr20 11059102 11059290 1 -chr20 11064654 11065296 1 -chr20 11068270 11068881 1 -chr20 11073192 11073504 1 -chr20 11073588 11073978 1 -chr20 11074441 11074857 1 -chr20 11093776 11094045 1 -chr20 11094812 11095170 1 -chr20 11103654 11103781 1 -chr20 11114446 11114632 1 -chr20 11142340 11142607 1 -chr20 11168978 11169328 1 -chr20 11176261 11176596 1 -chr20 11183971 11184560 1 -chr20 11194953 11195149 1 -chr20 11213941 11214005 1 -chr20 11217050 11217570 1 -chr20 11233883 11234123 1 -chr20 11241387 11241414 1 -chr20 11242525 11243318 1 -chr20 11258581 11258939 1 -chr20 11261439 11261617 1 -chr20 11283104 11283296 1 -chr20 11304793 11305219 1 -chr20 11308240 11308374 1 -chr20 11311865 11312082 1 -chr20 11361378 11361552 1 -chr20 11368595 11368803 1 -chr20 11370807 11370880 1 -chr20 11378397 11378524 1 -chr20 11408486 11408675 1 -chr20 11442871 11443189 1 -chr20 11455322 11455717 1 -chr20 11460565 11460825 1 -chr20 11465399 11465484 1 -chr20 11479167 11479396 1 -chr20 11486756 11487093 1 -chr20 11490021 11490393 1 -chr20 11518429 11518837 1 -chr20 11535888 11536171 1 -chr20 11572533 11572640 1 -chr20 11588740 11589002 1 -chr20 11596873 11597055 1 -chr20 11606419 11606479 1 -chr20 11607126 11607501 1 -chr20 11610721 11611111 1 -chr20 11611111 11611114 2 -chr20 11611114 11611273 1 -chr20 11615504 11615682 1 -chr20 11617938 11618090 1 -chr20 11618466 11618716 1 -chr20 11643100 11643295 1 -chr20 11659971 11660161 1 -chr20 11664946 11665202 1 -chr20 11673189 11673392 1 -chr20 11689763 11689941 1 -chr20 11702915 11703205 1 -chr20 11708838 11709054 1 -chr20 11730698 11730952 1 -chr20 11734465 11734715 1 -chr20 11754552 11754752 1 -chr20 11769707 11769879 1 -chr20 11789590 11789835 1 -chr20 11802501 11802804 1 -chr20 11807642 11808321 1 -chr20 11826462 11826577 1 -chr20 11830057 11830228 1 -chr20 11836452 11836805 1 -chr20 11844754 11844949 1 -chr20 11866545 11866755 1 -chr20 11868309 11868341 1 -chr20 11873356 11874109 1 -chr20 11879186 11879382 1 -chr20 11923611 11923935 1 -chr20 11936287 11936485 1 -chr20 11971541 11971667 1 -chr20 11979192 11979709 1 -chr20 11991030 11991231 1 -chr20 11992170 11992359 1 -chr20 11995147 11995467 1 -chr20 12010592 12010638 1 -chr20 12031652 12031875 1 -chr20 12056453 12056756 1 -chr20 12083391 12083955 1 -chr20 12084958 12085279 1 -chr20 12097147 12097472 1 -chr20 12116249 12116412 1 -chr20 12116412 12116421 2 -chr20 12116421 12116735 1 -chr20 12153353 12153895 1 -chr20 12161597 12161776 1 -chr20 12163447 12164085 1 -chr20 12194015 12194266 1 -chr20 12197633 12197881 1 -chr20 12197956 12198151 1 -chr20 12199588 12199859 1 -chr20 12203199 12203515 1 -chr20 12214377 12214758 1 -chr20 12224112 12224591 1 -chr20 12238558 12238621 1 -chr20 12242357 12242589 1 -chr20 12251695 12251781 1 -chr20 12329054 12329235 1 -chr20 12340683 12340849 1 -chr20 12347601 12347760 1 -chr20 12352984 12353103 1 -chr20 12358080 12358420 1 -chr20 12358456 12358622 1 -chr20 12371442 12371592 1 -chr20 12377410 12377668 1 -chr20 12380516 12380961 1 -chr20 12385207 12385414 1 -chr20 12417333 12417500 1 -chr20 12418295 12418538 1 -chr20 12449020 12449094 1 -chr20 12454291 12454633 1 -chr20 12468636 12468904 1 -chr20 12512365 12512600 1 -chr20 12523308 12523518 1 -chr20 12526149 12526327 1 -chr20 12543725 12543789 1 -chr20 12546382 12546447 1 -chr20 12575895 12576108 1 -chr20 12598484 12598715 1 -chr20 12645039 12645227 1 -chr20 12647381 12647621 1 -chr20 12650785 12651001 1 -chr20 12658136 12658638 1 -chr20 12663474 12663560 1 -chr20 12666260 12666323 1 -chr20 12684206 12684485 1 -chr20 12687830 12688089 1 -chr20 12692132 12692330 1 -chr20 12692330 12692339 2 -chr20 12692339 12692892 1 -chr20 12692941 12693516 1 -chr20 12696916 12697528 1 -chr20 12707801 12708438 1 -chr20 12728690 12728866 1 -chr20 12749708 12750133 1 -chr20 12754001 12754082 1 -chr20 12775181 12775334 1 -chr20 12782859 12783011 1 -chr20 12790327 12790464 1 -chr20 12791857 12791886 1 -chr20 12804054 12804115 1 -chr20 12812564 12812630 1 -chr20 12817599 12817893 1 -chr20 12824881 12825431 1 -chr20 12827890 12828103 1 -chr20 12830063 12830120 1 -chr20 12838997 12839468 1 -chr20 12844822 12845740 1 -chr20 12845882 12846304 1 -chr20 12863408 12863760 1 -chr20 12863801 12863977 1 -chr20 12877956 12878063 1 -chr20 12886316 12886394 1 -chr20 12899340 12899543 1 -chr20 12902438 12902823 1 -chr20 12915580 12915626 1 -chr20 12920467 12920881 1 -chr20 12936694 12936872 1 -chr20 12941002 12941187 1 -chr20 12950499 12950823 1 -chr20 12960709 12961417 1 -chr20 12967465 12967749 1 -chr20 13000144 13000403 1 -chr20 13002897 13003124 1 -chr20 13007352 13008123 1 -chr20 13016970 13017475 1 -chr20 13020497 13020990 1 -chr20 13022068 13022331 1 -chr20 13025428 13025656 1 -chr20 13025975 13026171 1 -chr20 13037912 13038137 1 -chr20 13044439 13044706 1 -chr20 13050951 13051186 1 -chr20 13068240 13068471 1 -chr20 13078776 13079421 1 -chr20 13097968 13098320 1 -chr20 13100921 13101041 1 -chr20 13127530 13127670 1 -chr20 13128052 13128648 1 -chr20 13144812 13144877 1 -chr20 13145433 13145689 1 -chr20 13146516 13146752 1 -chr20 13182085 13182323 1 -chr20 13194832 13195492 1 -chr20 13197317 13197488 1 -chr20 13208921 13209058 1 -chr20 13217375 13217597 1 -chr20 13220883 13221155 1 -chr20 13238497 13238723 1 -chr20 13242972 13243410 1 -chr20 13243556 13243866 1 -chr20 13246130 13246195 1 -chr20 13249034 13249234 1 -chr20 13255823 13256024 1 -chr20 13257687 13257938 1 -chr20 13261280 13261340 1 -chr20 13262496 13262622 1 -chr20 13266871 13267018 1 -chr20 13267338 13267436 1 -chr20 13275853 13276034 1 -chr20 13286242 13286349 1 -chr20 13290640 13290893 1 -chr20 13294675 13294992 1 -chr20 13301643 13302193 1 -chr20 13304141 13304539 1 -chr20 13304539 13304548 2 -chr20 13304548 13304949 1 -chr20 13325180 13325892 1 -chr20 13343074 13343252 1 -chr20 13348543 13349022 1 -chr20 13350552 13350721 1 -chr20 13355583 13355926 1 -chr20 13365279 13365830 1 -chr20 13374386 13374414 1 -chr20 13375792 13375901 1 -chr20 13381867 13381983 1 -chr20 13394066 13394151 1 -chr20 13396367 13396474 1 -chr20 13421160 13421273 1 -chr20 13424274 13424490 1 -chr20 13429239 13429446 1 -chr20 13436490 13436990 1 -chr20 13455638 13455989 1 -chr20 13487310 13487714 1 -chr20 13493407 13493531 1 -chr20 13528118 13528187 1 -chr20 13533390 13533696 1 -chr20 13555154 13555186 1 -chr20 13577723 13577883 1 -chr20 13577938 13578157 1 -chr20 13583058 13583258 1 -chr20 13604227 13604410 1 -chr20 13617346 13617559 1 -chr20 13624583 13625218 1 -chr20 13627483 13627539 1 -chr20 13646126 13646189 1 -chr20 13650089 13650141 1 -chr20 13664547 13664842 1 -chr20 13665726 13666109 1 -chr20 13683486 13683739 1 -chr20 13683795 13684264 1 -chr20 13697640 13697889 1 -chr20 13743987 13744256 1 -chr20 13748428 13748461 1 -chr20 13752708 13753127 1 -chr20 13770857 13771138 1 -chr20 13840176 13840356 1 -chr20 13848703 13848878 1 -chr20 13850548 13850829 1 -chr20 13854236 13854420 1 -chr20 13861310 13861494 1 -chr20 13889672 13889700 1 -chr20 13893783 13894123 1 -chr20 13896237 13896301 1 -chr20 13906075 13906137 1 -chr20 13912372 13912533 1 -chr20 13929543 13929644 1 -chr20 13934394 13934422 1 -chr20 13935108 13935309 1 -chr20 13938240 13938281 1 -chr20 13941195 13941752 1 -chr20 13942152 13942567 1 -chr20 13951226 13951268 1 -chr20 13981385 13981547 1 -chr20 14002445 14002759 1 -chr20 14015362 14015399 1 -chr20 14019614 14019805 1 -chr20 14025144 14025381 1 -chr20 14035926 14036030 1 -chr20 14043277 14043414 1 -chr20 14069972 14070223 1 -chr20 14071504 14071545 1 -chr20 14073854 14074078 1 -chr20 14074319 14074755 1 -chr20 14082268 14082321 1 -chr20 14105117 14105283 1 -chr20 14107081 14107434 1 -chr20 14148495 14148935 1 -chr20 14161388 14161471 1 -chr20 14176120 14176392 1 -chr20 14203750 14203978 1 -chr20 14209514 14209770 1 -chr20 14215194 14215219 1 -chr20 14216185 14216267 1 -chr20 14245103 14245157 1 -chr20 14250620 14250862 1 -chr20 14259828 14260025 1 -chr20 14309994 14310310 1 -chr20 14312169 14312220 1 -chr20 14326611 14326988 1 -chr20 14331037 14331905 1 -chr20 14341770 14342215 1 -chr20 14347032 14347264 1 -chr20 14353208 14353362 1 -chr20 14353433 14353614 1 -chr20 14402544 14402940 1 -chr20 14404451 14404512 1 -chr20 14405528 14405767 1 -chr20 14415256 14415456 1 -chr20 14434940 14435248 1 -chr20 14458149 14458410 1 -chr20 14479094 14479252 1 -chr20 14504015 14504376 1 -chr20 14504608 14505182 1 -chr20 14505988 14506218 1 -chr20 14511652 14511906 1 -chr20 14514212 14514499 1 -chr20 14522553 14522785 1 -chr20 14535122 14535258 1 -chr20 14546327 14546718 1 -chr20 14582163 14582736 1 -chr20 14583976 14584225 1 -chr20 14585660 14585975 1 -chr20 14592638 14593191 1 -chr20 14595274 14595372 1 -chr20 14597920 14598036 1 -chr20 14608924 14609178 1 -chr20 14619499 14619543 1 -chr20 14640227 14640732 1 -chr20 14651239 14651637 1 -chr20 14662667 14662793 1 -chr20 14670676 14671111 1 -chr20 14677381 14677576 1 -chr20 14721073 14721160 1 -chr20 14755419 14755493 1 -chr20 14756434 14756652 1 -chr20 14757738 14757937 1 -chr20 14762199 14762535 1 -chr20 14768709 14768747 1 -chr20 14797711 14798057 1 -chr20 14807011 14807075 1 -chr20 14873282 14873438 1 -chr20 14875371 14875546 1 -chr20 14878292 14878772 1 -chr20 14883858 14884332 1 -chr20 14884721 14884955 1 -chr20 14887490 14887521 1 -chr20 14889229 14889423 1 -chr20 14889702 14889927 1 -chr20 14894820 14895416 1 -chr20 14905143 14905804 1 -chr20 14925678 14925867 1 -chr20 14946844 14947022 1 -chr20 14948672 14948952 1 -chr20 14951936 14952330 1 -chr20 14970257 14970734 1 -chr20 14990557 14990642 1 -chr20 14998498 14998677 1 -chr20 15015962 15016276 1 -chr20 15045675 15045997 1 -chr20 15046371 15046825 1 -chr20 15067860 15067967 1 -chr20 15081808 15082034 1 -chr20 15083770 15083998 1 -chr20 15091037 15091407 1 -chr20 15097459 15097735 1 -chr20 15098285 15098447 1 -chr20 15099101 15099531 1 -chr20 15106626 15106785 1 -chr20 15129777 15130115 1 -chr20 15130339 15130692 1 -chr20 15152403 15152449 1 -chr20 15167348 15167772 1 -chr20 15172271 15172475 1 -chr20 15173314 15173680 1 -chr20 15175003 15175088 1 -chr20 15196436 15197015 1 -chr20 15199975 15200264 1 -chr20 15204631 15205065 1 -chr20 15208482 15208795 1 -chr20 15213405 15213560 1 -chr20 15250143 15250636 1 -chr20 15258321 15258447 1 -chr20 15267581 15267821 1 -chr20 15274052 15274504 1 -chr20 15275912 15276131 1 -chr20 15294071 15294099 1 -chr20 15299263 15299672 1 -chr20 15300522 15301320 1 -chr20 15303424 15303851 1 -chr20 15332578 15333001 1 -chr20 15333739 15334078 1 -chr20 15334663 15335068 1 -chr20 15336524 15337239 1 -chr20 15347373 15347840 1 -chr20 15354663 15355132 1 -chr20 15367211 15367304 1 -chr20 15415463 15415721 1 -chr20 15421877 15422128 1 -chr20 15426087 15426151 1 -chr20 15437716 15437807 1 -chr20 15456051 15456304 1 -chr20 15474450 15474626 1 -chr20 15488147 15488516 1 -chr20 15494031 15494425 1 -chr20 15510091 15510335 1 -chr20 15516192 15516406 1 -chr20 15535258 15535518 1 -chr20 15541475 15542105 1 -chr20 15547906 15548084 1 -chr20 15584867 15585081 1 -chr20 15608013 15608540 1 -chr20 15616523 15617051 1 -chr20 15617520 15618198 1 -chr20 15626729 15626818 1 -chr20 15630112 15630295 1 -chr20 15637205 15637435 1 -chr20 15642907 15643082 1 -chr20 15651414 15651702 1 -chr20 15653574 15653752 1 -chr20 15659927 15660499 1 -chr20 15662033 15662211 1 -chr20 15664987 15665401 1 -chr20 15691679 15692063 1 -chr20 15700643 15700839 1 -chr20 15701319 15701409 1 -chr20 15712386 15712694 1 -chr20 15732033 15732432 1 -chr20 15740510 15740791 1 -chr20 15764454 15764726 1 -chr20 15767712 15767787 1 -chr20 15777935 15778149 1 -chr20 15793018 15793375 1 -chr20 15794352 15794613 1 -chr20 15795697 15796046 1 -chr20 15799207 15799432 1 -chr20 15800617 15800695 1 -chr20 15807257 15807343 1 -chr20 15830719 15831639 1 -chr20 15838948 15839173 1 -chr20 15839309 15839497 1 -chr20 15849784 15849991 1 -chr20 15850652 15850739 1 -chr20 15896973 15897587 1 -chr20 15906676 15907069 1 -chr20 15911020 15911193 1 -chr20 15933025 15933179 1 -chr20 15933423 15933632 1 -chr20 15947306 15947372 1 -chr20 15956055 15956268 1 -chr20 15959586 15959637 1 -chr20 15961109 15961783 1 -chr20 15966650 15966734 1 -chr20 15979134 15979556 1 -chr20 15982855 15982956 1 -chr20 16003355 16003645 1 -chr20 16010498 16010855 1 -chr20 16022519 16022917 1 -chr20 16027454 16027933 1 -chr20 16046798 16046874 1 -chr20 16052498 16052888 1 -chr20 16065705 16066048 1 -chr20 16069111 16069359 1 -chr20 16070552 16070635 1 -chr20 16073065 16073313 1 -chr20 16079382 16079640 1 -chr20 16082064 16082285 1 -chr20 16083549 16083695 1 -chr20 16096261 16096603 1 -chr20 16099301 16099672 1 -chr20 16154933 16155245 1 -chr20 16166202 16166427 1 -chr20 16182981 16183218 1 -chr20 16187663 16187843 1 -chr20 16188383 16188739 1 -chr20 16200185 16200550 1 -chr20 16225007 16225223 1 -chr20 16227216 16227245 1 -chr20 16229323 16229376 1 -chr20 16244483 16244531 1 -chr20 16246945 16247291 1 -chr20 16282835 16283340 1 -chr20 16292671 16293245 1 -chr20 16293569 16293876 1 -chr20 16294881 16295274 1 -chr20 16310220 16310829 1 -chr20 16313747 16313977 1 -chr20 16314553 16314885 1 -chr20 16318466 16318961 1 -chr20 16329757 16330363 1 -chr20 16346732 16347266 1 -chr20 16353808 16354073 1 -chr20 16364025 16364560 1 -chr20 16375989 16376248 1 -chr20 16385005 16385053 1 -chr20 16395479 16395803 1 -chr20 16408101 16408288 1 -chr20 16423459 16423770 1 -chr20 16467505 16467820 1 -chr20 16469377 16469457 1 -chr20 16471450 16471732 1 -chr20 16477944 16478332 1 -chr20 16482437 16483092 1 -chr20 16488750 16489432 1 -chr20 16521067 16521152 1 -chr20 16531481 16531893 1 -chr20 16537032 16537240 1 -chr20 16552173 16552452 1 -chr20 16573145 16573401 1 -chr20 16599476 16599884 1 -chr20 16604152 16604321 1 -chr20 16605177 16605537 1 -chr20 16613364 16614002 1 -chr20 16622299 16622510 1 -chr20 16626188 16626629 1 -chr20 16631487 16631525 1 -chr20 16631525 16631529 2 -chr20 16631529 16631554 1 -chr20 16656458 16656806 1 -chr20 16671383 16671630 1 -chr20 16673424 16673639 1 -chr20 16690040 16690269 1 -chr20 16697461 16697782 1 -chr20 16701881 16701924 1 -chr20 16709888 16709939 1 -chr20 16735748 16736229 1 -chr20 16747654 16748047 1 -chr20 16757692 16757797 1 -chr20 16759373 16760044 1 -chr20 16760168 16760361 1 -chr20 16763134 16763460 1 -chr20 16803246 16803449 1 -chr20 16812129 16812496 1 -chr20 16821294 16821637 1 -chr20 16830795 16830931 1 -chr20 16855430 16855600 1 -chr20 16874045 16874070 1 -chr20 16888682 16889232 1 -chr20 16909793 16909867 1 -chr20 16916553 16917080 1 -chr20 16924395 16924722 1 -chr20 16925522 16925592 1 -chr20 16927975 16927994 1 -chr20 16927994 16928005 2 -chr20 16928005 16928019 1 -chr20 16928096 16928327 1 -chr20 16942164 16942573 1 -chr20 16953668 16954080 1 -chr20 16956552 16957007 1 -chr20 16959146 16959387 1 -chr20 16996332 16996632 1 -chr20 17014212 17014400 1 -chr20 17034405 17034636 1 -chr20 17047424 17047601 1 -chr20 17048486 17048718 1 -chr20 17083234 17083620 1 -chr20 17092067 17092610 1 -chr20 17096074 17096718 1 -chr20 17101149 17101388 1 -chr20 17102880 17103063 1 -chr20 17106323 17106416 1 -chr20 17108866 17109137 1 -chr20 17113231 17113541 1 -chr20 17115691 17115750 1 -chr20 17143852 17144012 1 -chr20 17148875 17149359 1 -chr20 17162322 17162725 1 -chr20 17170118 17170321 1 -chr20 17178791 17178951 1 -chr20 17179726 17179886 1 -chr20 17188210 17188404 1 -chr20 17189835 17190028 1 -chr20 17195646 17196200 1 -chr20 17196200 17196209 2 -chr20 17196209 17196479 1 -chr20 17199931 17200144 1 -chr20 17208997 17209256 1 -chr20 17216192 17216961 1 -chr20 17234352 17234781 1 -chr20 17255091 17255288 1 -chr20 17283890 17284147 1 -chr20 17330787 17330989 1 -chr20 17339887 17340087 1 -chr20 17342932 17343296 1 -chr20 17343997 17344148 1 -chr20 17355071 17355265 1 -chr20 17356470 17356760 1 -chr20 17364970 17365283 1 -chr20 17374993 17375424 1 -chr20 17381338 17381917 1 -chr20 17382038 17382799 1 -chr20 17391559 17391773 1 -chr20 17411755 17411853 1 -chr20 17423128 17423264 1 -chr20 17433843 17433874 1 -chr20 17435988 17436232 1 -chr20 17451962 17452074 1 -chr20 17454083 17454323 1 -chr20 17456420 17456625 1 -chr20 17460716 17460923 1 -chr20 17467562 17467792 1 -chr20 17468652 17468846 1 -chr20 17471888 17472117 1 -chr20 17480404 17480479 1 -chr20 17482752 17483001 1 -chr20 17487089 17487294 1 -chr20 17491439 17491795 1 -chr20 17500392 17500555 1 -chr20 17503808 17504152 1 -chr20 17514200 17514425 1 -chr20 17537161 17537377 1 -chr20 17542122 17542322 1 -chr20 17552447 17552808 1 -chr20 17562348 17562427 1 -chr20 17568871 17569076 1 -chr20 17569830 17570089 1 -chr20 17571925 17572061 1 -chr20 17585641 17585666 1 -chr20 17605151 17605602 1 -chr20 17609853 17610022 1 -chr20 17610390 17610677 1 -chr20 17619625 17619809 1 -chr20 17621690 17621863 1 -chr20 17628675 17628738 1 -chr20 17643491 17643732 1 -chr20 17647160 17647360 1 -chr20 17647853 17648224 1 -chr20 17652079 17652252 1 -chr20 17656637 17657117 1 -chr20 17658554 17658941 1 -chr20 17663425 17663671 1 -chr20 17665446 17665514 1 -chr20 17667673 17668484 1 -chr20 17674509 17674731 1 -chr20 17675554 17675605 1 -chr20 17687027 17687441 1 -chr20 17690304 17691010 1 -chr20 17693456 17693527 1 -chr20 17697027 17697225 1 -chr20 17698972 17699379 1 -chr20 17699842 17700045 1 -chr20 17702710 17703074 1 -chr20 17703332 17703516 1 -chr20 17709531 17709730 1 -chr20 17709731 17709987 1 -chr20 17729942 17730167 1 -chr20 17735411 17735840 1 -chr20 17768182 17768574 1 -chr20 17777544 17778254 1 -chr20 17778949 17779055 1 -chr20 17779223 17779301 1 -chr20 17782241 17782484 1 -chr20 17783271 17783469 1 -chr20 17795260 17795514 1 -chr20 17797615 17797838 1 -chr20 17807528 17807932 1 -chr20 17823477 17823871 1 -chr20 17825408 17825733 1 -chr20 17834918 17835051 1 -chr20 17836182 17836380 1 -chr20 17839216 17839519 1 -chr20 17840730 17840927 1 -chr20 17851092 17851154 1 -chr20 17854223 17854422 1 -chr20 17855170 17855223 1 -chr20 17859530 17859872 1 -chr20 17862166 17862491 1 -chr20 17864238 17864365 1 -chr20 17882810 17882877 1 -chr20 17886631 17886842 1 -chr20 17893488 17893608 1 -chr20 17900562 17900649 1 -chr20 17901015 17901445 1 -chr20 17911063 17911295 1 -chr20 17915525 17915576 1 -chr20 17934919 17935103 1 -chr20 17955214 17955476 1 -chr20 17955894 17955941 1 -chr20 17964770 17964928 1 -chr20 17969267 17969479 1 -chr20 17975520 17975748 1 -chr20 17983601 17983770 1 -chr20 17984994 17985028 1 -chr20 17987156 17987395 1 -chr20 17990385 17990572 1 -chr20 17997418 17997523 1 -chr20 18003335 18003437 1 -chr20 18013323 18013528 1 -chr20 18020653 18021037 1 -chr20 18033039 18033301 1 -chr20 18037565 18037988 1 -chr20 18037988 18038000 2 -chr20 18038000 18038615 1 -chr20 18039010 18039279 1 -chr20 18049187 18049571 1 -chr20 18049859 18050367 1 -chr20 18052881 18053348 1 -chr20 18072296 18072342 1 -chr20 18072436 18072465 1 -chr20 18075201 18075258 1 -chr20 18075657 18075704 1 -chr20 18075910 18076260 1 -chr20 18087661 18087855 1 -chr20 18116436 18116465 1 -chr20 18125299 18125370 1 -chr20 18126914 18126997 1 -chr20 18128106 18128168 1 -chr20 18150666 18150999 1 -chr20 18151308 18151340 1 -chr20 18151891 18151945 1 -chr20 18172700 18172903 1 -chr20 18185634 18186153 1 -chr20 18186618 18186940 1 -chr20 18196802 18196901 1 -chr20 18198099 18198140 1 -chr20 18209437 18209649 1 -chr20 18213338 18213592 1 -chr20 18252589 18253405 1 -chr20 18255548 18255824 1 -chr20 18263913 18264160 1 -chr20 18271027 18271584 1 -chr20 18274895 18275173 1 -chr20 18275428 18275678 1 -chr20 18276747 18276932 1 -chr20 18282549 18283173 1 -chr20 18284876 18285061 1 -chr20 18285882 18285982 1 -chr20 18302269 18302369 1 -chr20 18305600 18305814 1 -chr20 18309265 18309850 1 -chr20 18314309 18314541 1 -chr20 18326754 18327165 1 -chr20 18329873 18329900 1 -chr20 18353810 18353883 1 -chr20 18358185 18358546 1 -chr20 18366197 18366541 1 -chr20 18375763 18375792 1 -chr20 18379634 18379700 1 -chr20 18386311 18386504 1 -chr20 18395564 18396071 1 -chr20 18397123 18397422 1 -chr20 18397422 18397431 2 -chr20 18397431 18397650 1 -chr20 18399291 18399516 1 -chr20 18418404 18418993 1 -chr20 18423198 18423405 1 -chr20 18429823 18430184 1 -chr20 18434660 18434866 1 -chr20 18439781 18439960 1 -chr20 18443805 18444167 1 -chr20 18449901 18449943 1 -chr20 18460602 18460695 1 -chr20 18467714 18467991 1 -chr20 18477687 18477912 1 -chr20 18480088 18480432 1 -chr20 18480551 18480721 1 -chr20 18496999 18497166 1 -chr20 18524468 18524653 1 -chr20 18528042 18528381 1 -chr20 18529379 18529585 1 -chr20 18540959 18541138 1 -chr20 18544770 18544950 1 -chr20 18552622 18552650 1 -chr20 18561531 18561575 1 -chr20 18566142 18566363 1 -chr20 18570046 18570210 1 -chr20 18573320 18573522 1 -chr20 18579812 18579986 1 -chr20 18580233 18580409 1 -chr20 18583363 18583478 1 -chr20 18621920 18621987 1 -chr20 18623931 18624667 1 -chr20 18625867 18626497 1 -chr20 18632431 18632642 1 -chr20 18632808 18632843 1 -chr20 18634717 18634906 1 -chr20 18635166 18635510 1 -chr20 18642389 18642820 1 -chr20 18654573 18654929 1 -chr20 18665928 18666148 1 -chr20 18686661 18686687 1 -chr20 18695576 18695602 1 -chr20 18704108 18704136 1 -chr20 18712159 18712321 1 -chr20 18713251 18713482 1 -chr20 18715298 18715612 1 -chr20 18719615 18719856 1 -chr20 18720221 18720433 1 -chr20 18731912 18732070 1 -chr20 18733411 18733606 1 -chr20 18737700 18738038 1 -chr20 18739343 18739514 1 -chr20 18739514 18739529 2 -chr20 18739529 18740256 1 -chr20 18744137 18744343 1 -chr20 18751934 18752267 1 -chr20 18753924 18754099 1 -chr20 18764269 18764777 1 -chr20 18767389 18767655 1 -chr20 18783836 18784013 1 -chr20 18784017 18784237 1 -chr20 18784795 18784961 1 -chr20 18809839 18810176 1 -chr20 18810428 18810558 1 -chr20 18811164 18811655 1 -chr20 18813810 18814475 1 -chr20 18814612 18815041 1 -chr20 18819457 18819575 1 -chr20 18839285 18839895 1 -chr20 18846441 18846528 1 -chr20 18855875 18856474 1 -chr20 18867491 18867584 1 -chr20 18870192 18870404 1 -chr20 18875994 18876161 1 -chr20 18896115 18896353 1 -chr20 18899740 18900042 1 -chr20 18906168 18906501 1 -chr20 18957288 18957495 1 -chr20 18970595 18971118 1 -chr20 18974743 18974960 1 -chr20 18979077 18979228 1 -chr20 18980797 18980891 1 -chr20 18986149 18986202 1 -chr20 18999561 18999758 1 -chr20 19011202 19011654 1 -chr20 19016162 19016290 1 -chr20 19016505 19016975 1 -chr20 19021228 19021444 1 -chr20 19023948 19024023 1 -chr20 19024028 19024093 1 -chr20 19024774 19025377 1 -chr20 19028013 19028273 1 -chr20 19031193 19031463 1 -chr20 19036593 19036689 1 -chr20 19039607 19039679 1 -chr20 19050980 19051353 1 -chr20 19075441 19075865 1 -chr20 19081601 19081784 1 -chr20 19103948 19104295 1 -chr20 19122036 19122142 1 -chr20 19123989 19124070 1 -chr20 19124291 19124828 1 -chr20 19125843 19125869 1 -chr20 19129112 19129564 1 -chr20 19134004 19134205 1 -chr20 19136539 19136903 1 -chr20 19149744 19149862 1 -chr20 19172052 19172094 1 -chr20 19183982 19184269 1 -chr20 19208274 19208568 1 -chr20 19213470 19213686 1 -chr20 19227940 19228247 1 -chr20 19230743 19230996 1 -chr20 19235609 19235823 1 -chr20 19239661 19239918 1 -chr20 19241025 19241221 1 -chr20 19244323 19244510 1 -chr20 19257510 19257672 1 -chr20 19274441 19274828 1 -chr20 19276667 19276722 1 -chr20 19276793 19276822 1 -chr20 19277426 19277811 1 -chr20 19283931 19284116 1 -chr20 19288548 19288655 1 -chr20 19292826 19293204 1 -chr20 19295522 19295594 1 -chr20 19305585 19305723 1 -chr20 19305785 19305909 1 -chr20 19317599 19317821 1 -chr20 19334742 19335262 1 -chr20 19338287 19338469 1 -chr20 19347464 19347745 1 -chr20 19349329 19349525 1 -chr20 19349907 19350046 1 -chr20 19352141 19352405 1 -chr20 19401957 19402736 1 -chr20 19412890 19413288 1 -chr20 19426361 19426668 1 -chr20 19427907 19428111 1 -chr20 19432163 19432628 1 -chr20 19458874 19459272 1 -chr20 19462322 19462370 1 -chr20 19462577 19462883 1 -chr20 19503635 19504292 1 -chr20 19511538 19511605 1 -chr20 19516432 19516752 1 -chr20 19519160 19519637 1 -chr20 19543523 19543946 1 -chr20 19545412 19545599 1 -chr20 19553032 19553074 1 -chr20 19564991 19565056 1 -chr20 19574187 19574376 1 -chr20 19577836 19578516 1 -chr20 19586814 19587456 1 -chr20 19588496 19589187 1 -chr20 19591096 19591213 1 -chr20 19592075 19592381 1 -chr20 19592622 19592707 1 -chr20 19599233 19599566 1 -chr20 19603185 19603606 1 -chr20 19607340 19607597 1 -chr20 19609717 19610163 1 -chr20 19612128 19612248 1 -chr20 19625090 19625314 1 -chr20 19631809 19632107 1 -chr20 19632797 19633253 1 -chr20 19641483 19641869 1 -chr20 19643192 19643545 1 -chr20 19644548 19644695 1 -chr20 19647752 19648163 1 -chr20 19650196 19651020 1 -chr20 19651845 19652022 1 -chr20 19652825 19653037 1 -chr20 19673839 19674077 1 -chr20 19678480 19678517 1 -chr20 19678517 19678518 2 -chr20 19678518 19678548 1 -chr20 19685209 19685491 1 -chr20 19699202 19699339 1 -chr20 19703222 19703572 1 -chr20 19712310 19712549 1 -chr20 19714293 19714359 1 -chr20 19715193 19715367 1 -chr20 19739259 19739675 1 -chr20 19742652 19742828 1 -chr20 19749844 19749993 1 -chr20 19760450 19760629 1 -chr20 19762814 19762880 1 -chr20 19765104 19765154 1 -chr20 19783991 19784208 1 -chr20 19800053 19800680 1 -chr20 19801371 19801449 1 -chr20 19808378 19808712 1 -chr20 19808936 19809030 1 -chr20 19809332 19809509 1 -chr20 19810287 19810318 1 -chr20 19815466 19815621 1 -chr20 19815901 19816243 1 -chr20 19821361 19821811 1 -chr20 19852070 19852524 1 -chr20 19891036 19891340 1 -chr20 19895791 19895985 1 -chr20 19899531 19899800 1 -chr20 19914206 19914646 1 -chr20 19914675 19914904 1 -chr20 19947963 19948117 1 -chr20 19954551 19954917 1 -chr20 19965023 19965355 1 -chr20 19976714 19977147 1 -chr20 20005810 20006255 1 -chr20 20009002 20009388 1 -chr20 20022688 20022760 1 -chr20 20034726 20035016 1 -chr20 20037154 20037561 1 -chr20 20039511 20040187 1 -chr20 20055166 20055787 1 -chr20 20076788 20077210 1 -chr20 20081847 20081967 1 -chr20 20095945 20096359 1 -chr20 20099610 20099771 1 -chr20 20114672 20114864 1 -chr20 20126338 20126537 1 -chr20 20138020 20138212 1 -chr20 20142512 20142730 1 -chr20 20149657 20149876 1 -chr20 20174123 20174584 1 -chr20 20194750 20194791 1 -chr20 20211466 20211898 1 -chr20 20214428 20214614 1 -chr20 20214966 20215310 1 -chr20 20235252 20235912 1 -chr20 20238779 20239058 1 -chr20 20253400 20253461 1 -chr20 20254459 20254605 1 -chr20 20257393 20257481 1 -chr20 20288956 20289888 1 -chr20 20290309 20290464 1 -chr20 20296117 20296147 1 -chr20 20314607 20314659 1 -chr20 20329304 20329530 1 -chr20 20337287 20337333 1 -chr20 20339174 20339401 1 -chr20 20355567 20355859 1 -chr20 20357973 20358155 1 -chr20 20358260 20358755 1 -chr20 20361609 20361784 1 -chr20 20370192 20370545 1 -chr20 20371159 20371400 1 -chr20 20378357 20378452 1 -chr20 20378897 20379639 1 -chr20 20383011 20383402 1 -chr20 20393187 20393792 1 -chr20 20394497 20394522 1 -chr20 20399775 20400202 1 -chr20 20401858 20402599 1 -chr20 20402599 20402608 2 -chr20 20402608 20402772 1 -chr20 20402995 20403859 1 -chr20 20407542 20407817 1 -chr20 20410247 20410501 1 -chr20 20418099 20418725 1 -chr20 20418786 20418846 1 -chr20 20423063 20423135 1 -chr20 20427343 20427691 1 -chr20 20430122 20430323 1 -chr20 20433760 20433984 1 -chr20 20443466 20443896 1 -chr20 20457800 20458198 1 -chr20 20460310 20460820 1 -chr20 20460939 20461157 1 -chr20 20464266 20464474 1 -chr20 20467636 20467825 1 -chr20 20478082 20478418 1 -chr20 20479842 20480264 1 -chr20 20507729 20507933 1 -chr20 20518937 20519379 1 -chr20 20524884 20525074 1 -chr20 20525724 20525929 1 -chr20 20527302 20527544 1 -chr20 20532360 20532561 1 -chr20 20536466 20537000 1 -chr20 20556114 20556475 1 -chr20 20557041 20557080 1 -chr20 20561912 20562126 1 -chr20 20574065 20574276 1 -chr20 20583147 20583486 1 -chr20 20584144 20584363 1 -chr20 20585408 20585627 1 -chr20 20602065 20602257 1 -chr20 20605097 20605419 1 -chr20 20607887 20608415 1 -chr20 20627956 20628433 1 -chr20 20628994 20629247 1 -chr20 20631272 20631474 1 -chr20 20640387 20641126 1 -chr20 20648642 20649136 1 -chr20 20662719 20662854 1 -chr20 20665240 20665532 1 -chr20 20666311 20666598 1 -chr20 20667185 20667426 1 -chr20 20678590 20678797 1 -chr20 20679439 20680173 1 -chr20 20681535 20681785 1 -chr20 20682193 20682286 1 -chr20 20692536 20692948 1 -chr20 20696102 20696524 1 -chr20 20699673 20699742 1 -chr20 20703106 20703369 1 -chr20 20703628 20704065 1 -chr20 20713085 20713279 1 -chr20 20728662 20729017 1 -chr20 20744839 20745110 1 -chr20 20745326 20745480 1 -chr20 20772543 20773041 1 -chr20 20776439 20776577 1 -chr20 20777041 20777501 1 -chr20 20778854 20779214 1 -chr20 20792206 20792413 1 -chr20 20792444 20792700 1 -chr20 20792995 20793046 1 -chr20 20793442 20793809 1 -chr20 20805756 20805932 1 -chr20 20810066 20810233 1 -chr20 20813537 20813579 1 -chr20 20821390 20822133 1 -chr20 20827876 20828171 1 -chr20 20846640 20846863 1 -chr20 20851857 20852044 1 -chr20 20856375 20856629 1 -chr20 20860413 20860978 1 -chr20 20861208 20861858 1 -chr20 20870429 20870824 1 -chr20 20895131 20895194 1 -chr20 20916288 20916770 1 -chr20 20924315 20924372 1 -chr20 20926697 20927003 1 -chr20 20948313 20948449 1 -chr20 20956305 20956548 1 -chr20 20957717 20957929 1 -chr20 20972939 20973028 1 -chr20 20974700 20974875 1 -chr20 20979134 20979713 1 -chr20 20980422 20980706 1 -chr20 20991147 20991306 1 -chr20 20991579 20991784 1 -chr20 21002636 21003384 1 -chr20 21031270 21031353 1 -chr20 21091044 21091071 1 -chr20 21094064 21094187 1 -chr20 21095563 21095747 1 -chr20 21097183 21097445 1 -chr20 21100297 21100634 1 -chr20 21111998 21112214 1 -chr20 21113573 21113952 1 -chr20 21115661 21116053 1 -chr20 21117679 21118263 1 -chr20 21120090 21120268 1 -chr20 21127212 21127815 1 -chr20 21134197 21134364 1 -chr20 21136687 21136759 1 -chr20 21139164 21139321 1 -chr20 21145501 21145731 1 -chr20 21149188 21149405 1 -chr20 21166918 21167281 1 -chr20 21185498 21185552 1 -chr20 21202867 21203167 1 -chr20 21215893 21216392 1 -chr20 21219931 21220223 1 -chr20 21228040 21228437 1 -chr20 21229032 21229447 1 -chr20 21265493 21265692 1 -chr20 21271919 21272488 1 -chr20 21274430 21274729 1 -chr20 21308391 21308790 1 -chr20 21310952 21311022 1 -chr20 21322447 21322792 1 -chr20 21324019 21324425 1 -chr20 21337915 21338282 1 -chr20 21338505 21339272 1 -chr20 21343057 21343204 1 -chr20 21387005 21387583 1 -chr20 21420576 21420957 1 -chr20 21428505 21428570 1 -chr20 21432265 21432657 1 -chr20 21456864 21456962 1 -chr20 21458544 21458783 1 -chr20 21460471 21460653 1 -chr20 21470578 21470768 1 -chr20 21477653 21477737 1 -chr20 21478664 21478756 1 -chr20 21488602 21488754 1 -chr20 21488822 21489036 1 -chr20 21489725 21490215 1 -chr20 21511153 21511413 1 -chr20 21518024 21518180 1 -chr20 21520831 21520986 1 -chr20 21537584 21537612 1 -chr20 21553812 21553970 1 -chr20 21567529 21568176 1 -chr20 21578403 21578694 1 -chr20 21606847 21607084 1 -chr20 21607454 21607789 1 -chr20 21628514 21628856 1 -chr20 21635095 21635240 1 -chr20 21639289 21639541 1 -chr20 21653766 21653911 1 -chr20 21670968 21671128 1 -chr20 21680459 21680524 1 -chr20 21684019 21684213 1 -chr20 21685915 21686172 1 -chr20 21690209 21690324 1 -chr20 21699313 21699542 1 -chr20 21702767 21702967 1 -chr20 21704147 21704438 1 -chr20 21710477 21710737 1 -chr20 21715014 21715295 1 -chr20 21725200 21725588 1 -chr20 21748309 21748397 1 -chr20 21754091 21754447 1 -chr20 21757444 21757509 1 -chr20 21765839 21766252 1 -chr20 21766429 21766620 1 -chr20 21767640 21767820 1 -chr20 21769744 21769817 1 -chr20 21779713 21780476 1 -chr20 21784358 21784626 1 -chr20 21788818 21789225 1 -chr20 21795656 21795936 1 -chr20 21807325 21807557 1 -chr20 21813912 21814244 1 -chr20 21840325 21840501 1 -chr20 21840856 21840977 1 -chr20 21851365 21851510 1 -chr20 21855896 21855992 1 -chr20 21869830 21870131 1 -chr20 21884716 21884955 1 -chr20 21890178 21890244 1 -chr20 21938831 21939592 1 -chr20 21948886 21949412 1 -chr20 21951787 21951952 1 -chr20 21957496 21957876 1 -chr20 21960366 21960438 1 -chr20 21962296 21962348 1 -chr20 21996097 21996292 1 -chr20 22003142 22003184 1 -chr20 22004276 22004558 1 -chr20 22006026 22006189 1 -chr20 22012744 22012863 1 -chr20 22018563 22018893 1 -chr20 22023711 22023877 1 -chr20 22029226 22029429 1 -chr20 22037149 22037228 1 -chr20 22049082 22049171 1 -chr20 22076881 22077016 1 -chr20 22085406 22085584 1 -chr20 22099204 22099310 1 -chr20 22138682 22138923 1 -chr20 22143795 22143964 1 -chr20 22154244 22154439 1 -chr20 22158883 22159132 1 -chr20 22160427 22160487 1 -chr20 22169109 22169281 1 -chr20 22188408 22188577 1 -chr20 22191053 22191467 1 -chr20 22230802 22230863 1 -chr20 22231804 22231973 1 -chr20 22237567 22237752 1 -chr20 22246666 22247341 1 -chr20 22255991 22256075 1 -chr20 22272745 22272934 1 -chr20 22278840 22278982 1 -chr20 22300783 22300936 1 -chr20 22312945 22313555 1 -chr20 22315227 22315444 1 -chr20 22324616 22324886 1 -chr20 22344331 22344542 1 -chr20 22348219 22348665 1 -chr20 22352130 22352357 1 -chr20 22359178 22359429 1 -chr20 22373794 22374487 1 -chr20 22393027 22393234 1 -chr20 22400828 22401028 1 -chr20 22415875 22415938 1 -chr20 22416598 22417422 1 -chr20 22418784 22419020 1 -chr20 22421632 22421916 1 -chr20 22433487 22433594 1 -chr20 22434569 22434806 1 -chr20 22441073 22441143 1 -chr20 22467957 22468011 1 -chr20 22472029 22472777 1 -chr20 22474323 22474610 1 -chr20 22497047 22497260 1 -chr20 22509268 22509612 1 -chr20 22512105 22512284 1 -chr20 22513253 22513283 1 -chr20 22538876 22538905 1 -chr20 22550962 22551306 1 -chr20 22562373 22562773 1 -chr20 22576553 22576949 1 -chr20 22579928 22579980 1 -chr20 22587421 22587867 1 -chr20 22590816 22591194 1 -chr20 22601834 22602092 1 -chr20 22609879 22609986 1 -chr20 22610966 22611334 1 -chr20 22617299 22617503 1 -chr20 22650034 22650127 1 -chr20 22668593 22668811 1 -chr20 22684400 22684763 1 -chr20 22687727 22687952 1 -chr20 22694832 22695001 1 -chr20 22703293 22703596 1 -chr20 22712303 22712558 1 -chr20 22729601 22729779 1 -chr20 22733789 22734074 1 -chr20 22742477 22742607 1 -chr20 22749413 22749629 1 -chr20 22750169 22750372 1 -chr20 22750962 22751509 1 -chr20 22752609 22753111 1 -chr20 22755663 22755915 1 -chr20 22755915 22755929 2 -chr20 22755929 22756226 1 -chr20 22771902 22772148 1 -chr20 22772673 22772922 1 -chr20 22776136 22776336 1 -chr20 22787845 22788172 1 -chr20 22789051 22789205 1 -chr20 22800765 22800977 1 -chr20 22802131 22802357 1 -chr20 22803922 22804292 1 -chr20 22819570 22819973 1 -chr20 22821238 22821574 1 -chr20 22823595 22824015 1 -chr20 22830975 22831101 1 -chr20 22833850 22834091 1 -chr20 22841416 22842130 1 -chr20 22846317 22846492 1 -chr20 22847493 22847704 1 -chr20 22852678 22852744 1 -chr20 22885818 22885972 1 -chr20 22890964 22891255 1 -chr20 22899873 22900187 1 -chr20 22903169 22903426 1 -chr20 22906444 22906847 1 -chr20 22908760 22909007 1 -chr20 22909247 22909391 1 -chr20 22918768 22918946 1 -chr20 22929047 22929205 1 -chr20 22931368 22931562 1 -chr20 22941518 22941743 1 -chr20 22956451 22956640 1 -chr20 22963949 22964041 1 -chr20 22964298 22964583 1 -chr20 22977174 22977361 1 -chr20 22985412 22985623 1 -chr20 22998967 22999135 1 -chr20 23026697 23027428 1 -chr20 23027428 23027438 2 -chr20 23027438 23028032 1 -chr20 23032628 23032918 1 -chr20 23038869 23038966 1 -chr20 23038966 23038975 2 -chr20 23038975 23039543 1 -chr20 23040564 23040768 1 -chr20 23045882 23046246 1 -chr20 23049773 23050176 1 -chr20 23051633 23052039 1 -chr20 23062844 23063051 1 -chr20 23072870 23073086 1 -chr20 23080177 23080373 1 -chr20 23081296 23081529 1 -chr20 23085054 23085251 1 -chr20 23089244 23089440 1 -chr20 23090127 23090380 1 -chr20 23098917 23099137 1 -chr20 23100215 23100782 1 -chr20 23108643 23108879 1 -chr20 23119212 23119469 1 -chr20 23122429 23122612 1 -chr20 23123171 23123422 1 -chr20 23128130 23128486 1 -chr20 23129057 23129728 1 -chr20 23130549 23130771 1 -chr20 23133074 23133148 1 -chr20 23135803 23135983 1 -chr20 23137977 23138206 1 -chr20 23142084 23142303 1 -chr20 23148119 23148297 1 -chr20 23150186 23150331 1 -chr20 23152556 23152682 1 -chr20 23156002 23156230 1 -chr20 23162696 23163102 1 -chr20 23165361 23165632 1 -chr20 23169652 23169894 1 -chr20 23178627 23178820 1 -chr20 23189685 23190020 1 -chr20 23192870 23193066 1 -chr20 23193364 23193761 1 -chr20 23203084 23203320 1 -chr20 23227347 23227649 1 -chr20 23252939 23253218 1 -chr20 23254911 23255095 1 -chr20 23260274 23260549 1 -chr20 23264721 23264937 1 -chr20 23274503 23275034 1 -chr20 23289219 23289545 1 -chr20 23291530 23291767 1 -chr20 23299769 23300117 1 -chr20 23302842 23303110 1 -chr20 23304021 23304145 1 -chr20 23310485 23310689 1 -chr20 23315539 23315755 1 -chr20 23316035 23316198 1 -chr20 23324192 23324293 1 -chr20 23326744 23326988 1 -chr20 23327348 23327443 1 -chr20 23331610 23331684 1 -chr20 23346954 23347245 1 -chr20 23353956 23354398 1 -chr20 23356317 23356817 1 -chr20 23357733 23358201 1 -chr20 23361443 23361664 1 -chr20 23368881 23369353 1 -chr20 23393035 23393264 1 -chr20 23393587 23394328 1 -chr20 23404600 23404895 1 -chr20 23414049 23414189 1 -chr20 23419038 23419343 1 -chr20 23435000 23435166 1 -chr20 23436678 23436945 1 -chr20 23438529 23438978 1 -chr20 23443654 23443866 1 -chr20 23449561 23449817 1 -chr20 23450577 23450800 1 -chr20 23452057 23452258 1 -chr20 23452387 23452650 1 -chr20 23452770 23452992 1 -chr20 23453907 23454115 1 -chr20 23455007 23455594 1 -chr20 23468605 23468739 1 -chr20 23468823 23469100 1 -chr20 23487720 23487925 1 -chr20 23493429 23493646 1 -chr20 23503061 23503395 1 -chr20 23507360 23507699 1 -chr20 23508580 23508771 1 -chr20 23509729 23510139 1 -chr20 23510171 23510445 1 -chr20 23518947 23519391 1 -chr20 23526672 23526848 1 -chr20 23542751 23543543 1 -chr20 23560857 23561201 1 -chr20 23561877 23562326 1 -chr20 23565049 23565125 1 -chr20 23578410 23578620 1 -chr20 23584362 23584630 1 -chr20 23588115 23588274 1 -chr20 23588416 23588705 1 -chr20 23597572 23597789 1 -chr20 23603055 23603218 1 -chr20 23609206 23609393 1 -chr20 23616911 23616990 1 -chr20 23629315 23629616 1 -chr20 23630525 23630707 1 -chr20 23634527 23634838 1 -chr20 23634891 23635110 1 -chr20 23636923 23637035 1 -chr20 23638812 23639408 1 -chr20 23667989 23668554 1 -chr20 23671882 23672262 1 -chr20 23674065 23674433 1 -chr20 23679772 23680101 1 -chr20 23680398 23680656 1 -chr20 23693938 23694115 1 -chr20 23696674 23696771 1 -chr20 23710308 23710846 1 -chr20 23712995 23713263 1 -chr20 23734461 23734636 1 -chr20 23739178 23739274 1 -chr20 23740751 23740951 1 -chr20 23744768 23744968 1 -chr20 23748015 23748180 1 -chr20 23759618 23759815 1 -chr20 23765657 23765876 1 -chr20 23770494 23770638 1 -chr20 23771540 23771778 1 -chr20 23776061 23776267 1 -chr20 23781611 23781994 1 -chr20 23783395 23783528 1 -chr20 23784539 23784833 1 -chr20 23788971 23789100 1 -chr20 23821781 23821978 1 -chr20 23822238 23822569 1 -chr20 23822907 23823004 1 -chr20 23826347 23826609 1 -chr20 23827709 23827988 1 -chr20 23828532 23828707 1 -chr20 23851065 23851327 1 -chr20 23851327 23851336 2 -chr20 23851336 23851670 1 -chr20 23851859 23852297 1 -chr20 23855441 23855652 1 -chr20 23855652 23855661 2 -chr20 23855661 23855858 1 -chr20 23862832 23863094 1 -chr20 23864843 23865015 1 -chr20 23881296 23881745 1 -chr20 23887615 23887928 1 -chr20 23890930 23891131 1 -chr20 23916074 23916172 1 -chr20 23922002 23922465 1 -chr20 23932060 23932266 1 -chr20 23944525 23945121 1 -chr20 23945201 23945315 1 -chr20 23946381 23946707 1 -chr20 23954813 23955124 1 -chr20 23956667 23957106 1 -chr20 23957499 23958031 1 -chr20 23959710 23959914 1 -chr20 23970159 23970284 1 -chr20 23978889 23979088 1 -chr20 23984425 23984531 1 -chr20 23984531 23984552 2 -chr20 23984552 23984739 1 -chr20 23993429 23993485 1 -chr20 24003068 24003104 1 -chr20 24011519 24011821 1 -chr20 24028282 24028671 1 -chr20 24028956 24029209 1 -chr20 24045610 24045697 1 -chr20 24052659 24053021 1 -chr20 24076705 24077125 1 -chr20 24077579 24077794 1 -chr20 24080538 24080712 1 -chr20 24097656 24098269 1 -chr20 24105436 24105731 1 -chr20 24118733 24118952 1 -chr20 24119735 24120132 1 -chr20 24131192 24131391 1 -chr20 24145545 24146151 1 -chr20 24148379 24148626 1 -chr20 24157232 24157455 1 -chr20 24162057 24162592 1 -chr20 24165630 24165703 1 -chr20 24169699 24169890 1 -chr20 24173780 24174196 1 -chr20 24178112 24178210 1 -chr20 24198139 24198232 1 -chr20 24203208 24203446 1 -chr20 24210486 24210714 1 -chr20 24212107 24212372 1 -chr20 24217507 24217823 1 -chr20 24220564 24220596 1 -chr20 24229085 24229412 1 -chr20 24232795 24233428 1 -chr20 24238704 24239112 1 -chr20 24240617 24240924 1 -chr20 24251561 24251900 1 -chr20 24258030 24258337 1 -chr20 24268777 24268861 1 -chr20 24271558 24271733 1 -chr20 24282896 24283097 1 -chr20 24285099 24285322 1 -chr20 24290260 24290469 1 -chr20 24301708 24301915 1 -chr20 24306016 24306241 1 -chr20 24307831 24308331 1 -chr20 24317034 24317337 1 -chr20 24323962 24324225 1 -chr20 24329485 24329526 1 -chr20 24330106 24330355 1 -chr20 24334963 24334992 1 -chr20 24349575 24350051 1 -chr20 24350771 24350996 1 -chr20 24358358 24358650 1 -chr20 24366655 24366995 1 -chr20 24371493 24371708 1 -chr20 24373588 24373760 1 -chr20 24378194 24378365 1 -chr20 24380193 24380429 1 -chr20 24389194 24389555 1 -chr20 24397204 24397269 1 -chr20 24409609 24409845 1 -chr20 24413530 24413895 1 -chr20 24418166 24418510 1 -chr20 24418867 24419119 1 -chr20 24422606 24422721 1 -chr20 24431478 24431509 1 -chr20 24437662 24438061 1 -chr20 24439796 24440073 1 -chr20 24444457 24444786 1 -chr20 24457145 24457516 1 -chr20 24462737 24463138 1 -chr20 24466965 24467026 1 -chr20 24467126 24467203 1 -chr20 24469634 24469798 1 -chr20 24484712 24484883 1 -chr20 24485817 24486248 1 -chr20 24487705 24487935 1 -chr20 24493425 24493854 1 -chr20 24497038 24497240 1 -chr20 24501332 24501901 1 -chr20 24510765 24511165 1 -chr20 24518191 24518748 1 -chr20 24524226 24524386 1 -chr20 24524904 24525153 1 -chr20 24527990 24528451 1 -chr20 24530094 24530296 1 -chr20 24530842 24530876 1 -chr20 24532232 24532375 1 -chr20 24534922 24535352 1 -chr20 24541127 24541316 1 -chr20 24541513 24541824 1 -chr20 24545064 24545187 1 -chr20 24563627 24563674 1 -chr20 24572619 24572972 1 -chr20 24579104 24579542 1 -chr20 24610196 24610425 1 -chr20 24610727 24611045 1 -chr20 24617215 24617394 1 -chr20 24617757 24618177 1 -chr20 24630462 24630630 1 -chr20 24633913 24634163 1 -chr20 24635151 24635818 1 -chr20 24660359 24660639 1 -chr20 24665883 24666173 1 -chr20 24683316 24683493 1 -chr20 24685705 24685948 1 -chr20 24694991 24695353 1 -chr20 24695706 24695774 1 -chr20 24701506 24701710 1 -chr20 24701871 24702080 1 -chr20 24724852 24725163 1 -chr20 24725240 24725647 1 -chr20 24725738 24726254 1 -chr20 24729683 24729757 1 -chr20 24734262 24734442 1 -chr20 24736260 24736730 1 -chr20 24748344 24749006 1 -chr20 24754064 24754256 1 -chr20 24756104 24756414 1 -chr20 24758616 24758710 1 -chr20 24761766 24761946 1 -chr20 24764180 24764279 1 -chr20 24766067 24766512 1 -chr20 24781026 24781576 1 -chr20 24782859 24783028 1 -chr20 24787618 24787824 1 -chr20 24789114 24789313 1 -chr20 24794127 24794309 1 -chr20 24794543 24794630 1 -chr20 24799726 24800316 1 -chr20 24801724 24801941 1 -chr20 24804770 24804965 1 -chr20 24808801 24808976 1 -chr20 24809182 24809387 1 -chr20 24812062 24812325 1 -chr20 24815438 24816057 1 -chr20 24816092 24816241 1 -chr20 24816477 24816922 1 -chr20 24819963 24820188 1 -chr20 24824023 24824181 1 -chr20 24825944 24826162 1 -chr20 24834003 24834200 1 -chr20 24839734 24839944 1 -chr20 24848808 24848872 1 -chr20 24856161 24856962 1 -chr20 24860874 24860903 1 -chr20 24862249 24862441 1 -chr20 24862790 24863231 1 -chr20 24870636 24870833 1 -chr20 24870924 24871171 1 -chr20 24875065 24875368 1 -chr20 24877309 24877538 1 -chr20 24890594 24891196 1 -chr20 24897783 24897947 1 -chr20 24908842 24909058 1 -chr20 24922237 24922289 1 -chr20 24927289 24927370 1 -chr20 24931708 24932427 1 -chr20 24933792 24934315 1 -chr20 24936869 24937166 1 -chr20 24943176 24943414 1 -chr20 24949674 24949886 1 -chr20 24950026 24950490 1 -chr20 24952263 24952585 1 -chr20 24960827 24961456 1 -chr20 24967492 24967632 1 -chr20 24978592 24978762 1 -chr20 24982112 24982418 1 -chr20 24992270 24992492 1 -chr20 24996015 24996350 1 -chr20 24998744 24998969 1 -chr20 24999119 24999313 1 -chr20 24999853 25000308 1 -chr20 25006751 25006978 1 -chr20 25011131 25011399 1 -chr20 25039610 25039816 1 -chr20 25043232 25043400 1 -chr20 25044933 25045199 1 -chr20 25046794 25046940 1 -chr20 25054096 25054418 1 -chr20 25058057 25058312 1 -chr20 25058516 25058849 1 -chr20 25069723 25069997 1 -chr20 25099892 25100406 1 -chr20 25121414 25121814 1 -chr20 25132151 25132359 1 -chr20 25133106 25133403 1 -chr20 25136957 25137041 1 -chr20 25149773 25150184 1 -chr20 25152317 25152527 1 -chr20 25177883 25178353 1 -chr20 25183702 25183833 1 -chr20 25196017 25196390 1 -chr20 25198006 25198202 1 -chr20 25199545 25199801 1 -chr20 25205862 25206672 1 -chr20 25209208 25209268 1 -chr20 25215357 25215762 1 -chr20 25223387 25223621 1 -chr20 25240955 25241051 1 -chr20 25251561 25252029 1 -chr20 25254837 25255213 1 -chr20 25271845 25271992 1 -chr20 25272109 25272306 1 -chr20 25278070 25278221 1 -chr20 25281667 25282137 1 -chr20 25286695 25286971 1 -chr20 25296111 25296379 1 -chr20 25301310 25301547 1 -chr20 25302764 25303144 1 -chr20 25304048 25304225 1 -chr20 25310305 25310958 1 -chr20 25315345 25315705 1 -chr20 25316727 25316900 1 -chr20 25333128 25333254 1 -chr20 25338550 25338905 1 -chr20 25359167 25359207 1 -chr20 25380724 25381057 1 -chr20 25385194 25385210 1 -chr20 25385210 25385229 2 -chr20 25385229 25385303 1 -chr20 25395705 25395921 1 -chr20 25396099 25396303 1 -chr20 25407667 25408382 1 -chr20 25408382 25408391 2 -chr20 25408391 25408620 1 -chr20 25424383 25424617 1 -chr20 25468526 25468796 1 -chr20 25489178 25489620 1 -chr20 25499323 25499606 1 -chr20 25506245 25506658 1 -chr20 25506815 25507428 1 -chr20 25510049 25510267 1 -chr20 25517616 25517773 1 -chr20 25517980 25518344 1 -chr20 25520660 25521109 1 -chr20 25526077 25526575 1 -chr20 25529206 25529259 1 -chr20 25533274 25533762 1 -chr20 25543492 25543620 1 -chr20 25550551 25550666 1 -chr20 25563667 25564102 1 -chr20 25588654 25588771 1 -chr20 25609213 25609239 1 -chr20 25618880 25619252 1 -chr20 25623740 25623977 1 -chr20 25633391 25633661 1 -chr20 25650678 25650713 1 -chr20 25673585 25673739 1 -chr20 25676496 25676882 1 -chr20 25683293 25683492 1 -chr20 25693465 25693707 1 -chr20 25693867 25694024 1 -chr20 25701227 25701310 1 -chr20 25734063 25734304 1 -chr20 25753831 25754057 1 -chr20 25756628 25756857 1 -chr20 25759498 25759702 1 -chr20 25761195 25761389 1 -chr20 25761980 25762007 1 -chr20 25772313 25772568 1 -chr20 25774947 25775198 1 -chr20 25780051 25780357 1 -chr20 25784833 25785090 1 -chr20 25785514 25785844 1 -chr20 25787291 25787487 1 -chr20 25787526 25787712 1 -chr20 25788332 25788813 1 -chr20 25789087 25789158 1 -chr20 25791341 25791591 1 -chr20 25793670 25794102 1 -chr20 25794833 25795269 1 -chr20 25798977 25799096 1 -chr20 25801125 25801282 1 -chr20 25814358 25814433 1 -chr20 25816608 25816978 1 -chr20 25817098 25817288 1 -chr20 25817820 25818258 1 -chr20 25829582 25829687 1 -chr20 25830155 25830395 1 -chr20 25832410 25832659 1 -chr20 25834259 25834323 1 -chr20 25840709 25840741 1 -chr20 25841023 25841110 1 -chr20 25843345 25843572 1 -chr20 25845391 25845584 1 -chr20 25845729 25846234 1 -chr20 25848911 25849160 1 -chr20 25849495 25849681 1 -chr20 25850502 25850679 1 -chr20 25859732 25859891 1 -chr20 25861219 25861414 1 -chr20 25862329 25862790 1 -chr20 25865735 25866107 1 -chr20 25866186 25866412 1 -chr20 25867547 25867676 1 -chr20 25872545 25872806 1 -chr20 25878300 25878727 1 -chr20 25891542 25892003 1 -chr20 25896274 25896496 1 -chr20 25897103 25897323 1 -chr20 25899094 25899432 1 -chr20 25900703 25900916 1 -chr20 25912206 25912497 1 -chr20 25917304 25917544 1 -chr20 25923266 25923379 1 -chr20 25926604 25926778 1 -chr20 25930750 25931014 1 -chr20 25937316 25937711 1 -chr20 25938303 25938656 1 -chr20 25942044 25942356 1 -chr20 25942890 25943104 1 -chr20 25945131 25945335 1 -chr20 25945876 25946102 1 -chr20 25946370 25946625 1 -chr20 25947301 25947534 1 -chr20 25948803 25949046 1 -chr20 25951553 25951750 1 -chr20 25959225 25959283 1 -chr20 25963068 25963145 1 -chr20 25963387 25963575 1 -chr20 25970994 25971600 1 -chr20 25981284 25981552 1 -chr20 25986557 25987019 1 -chr20 25987125 25987194 1 -chr20 25987572 25987760 1 -chr20 25996532 25996788 1 -chr20 25997950 25998224 1 -chr20 26008630 26009104 1 -chr20 26011112 26011377 1 -chr20 26012278 26012490 1 -chr20 26019131 26019343 1 -chr20 26024706 26024802 1 -chr20 26025223 26025411 1 -chr20 26027779 26028123 1 -chr20 26028951 26029317 1 -chr20 26033266 26033496 1 -chr20 26038618 26038808 1 -chr20 26041473 26041548 1 -chr20 26050074 26050332 1 -chr20 26059592 26059843 1 -chr20 26060635 26061071 1 -chr20 26061284 26061430 1 -chr20 26062656 26063081 1 -chr20 26063081 26063090 2 -chr20 26063090 26063184 1 -chr20 26063824 26064074 1 -chr20 26067194 26067371 1 -chr20 26070091 26070333 1 -chr20 26071287 26071436 1 -chr20 26072376 26072516 1 -chr20 26075046 26075282 1 -chr20 26075378 26075633 1 -chr20 26075688 26076102 1 -chr20 26077226 26077539 1 -chr20 26078893 26079089 1 -chr20 26086012 26086257 1 -chr20 26086810 26086975 1 -chr20 26091730 26091934 1 -chr20 26092025 26092282 1 -chr20 26092694 26093332 1 -chr20 26094367 26094763 1 -chr20 26100108 26100242 1 -chr20 26102997 26103444 1 -chr20 26109412 26109586 1 -chr20 26120619 26120886 1 -chr20 26121661 26121969 1 -chr20 26141009 26141196 1 -chr20 26141501 26141779 1 -chr20 26149462 26149493 1 -chr20 26151783 26151977 1 -chr20 26153880 26154054 1 -chr20 26160199 26160561 1 -chr20 26167418 26167598 1 -chr20 26168601 26168652 1 -chr20 26178088 26178744 1 -chr20 26184934 26185366 1 -chr20 26188469 26188586 1 -chr20 26190881 26190998 1 -chr20 26196466 26196671 1 -chr20 26197136 26197324 1 -chr20 26199275 26199466 1 -chr20 26201891 26202078 1 -chr20 26206077 26206511 1 -chr20 26211412 26211632 1 -chr20 26212963 26213389 1 -chr20 26220158 26220357 1 -chr20 26221473 26221777 1 -chr20 26230764 26231071 1 -chr20 26241521 26241755 1 -chr20 26248083 26248178 1 -chr20 26248462 26249054 1 -chr20 26263633 26263808 1 -chr20 26265929 26266136 1 -chr20 26280385 26280430 1 -chr20 26281750 26281847 1 -chr20 26282938 26283285 1 -chr20 26286017 26286109 1 -chr20 26286611 26286667 1 -chr20 26291140 26291218 1 -chr20 26291219 26291258 1 -chr20 26293485 26293764 1 -chr20 26295499 26295724 1 -chr20 26300900 26300965 1 -chr20 26303483 26303587 1 -chr20 26305745 26305771 1 -chr20 26307524 26307562 1 -chr20 26307698 26307798 1 -chr20 26321738 26321795 1 -chr20 26321875 26322182 1 -chr20 26322365 26322462 1 -chr20 26323787 26323879 1 -chr20 26324275 26324429 1 -chr20 26329651 26329804 1 -chr20 26329804 26329809 2 -chr20 26329809 26329979 1 -chr20 26348633 26348901 1 -chr20 26355214 26355389 1 -chr20 26362020 26362069 1 -chr20 26367190 26367342 1 -chr20 26368134 26368311 1 -chr20 26370246 26370341 1 -chr20 26372055 26372088 1 -chr20 26383781 26383833 1 -chr20 26437572 26437779 1 -chr20 26440694 26440813 1 -chr20 26441686 26441764 1 -chr20 26448882 26449096 1 -chr20 26450595 26450728 1 -chr20 26450765 26451112 1 -chr20 26452032 26452227 1 -chr20 26452576 26452866 1 -chr20 26455506 26455792 1 -chr20 26457398 26457531 1 -chr20 26464367 26464510 1 -chr20 26465332 26465434 1 -chr20 26466548 26466720 1 -chr20 26470549 26470749 1 -chr20 26473086 26473527 1 -chr20 26479945 26480198 1 -chr20 26480290 26480346 1 -chr20 26480971 26481050 1 -chr20 26481405 26481529 1 -chr20 26482065 26482300 1 -chr20 26484661 26484867 1 -chr20 26489106 26489357 1 -chr20 26490002 26490174 1 -chr20 26490493 26490813 1 -chr20 26493208 26493477 1 -chr20 26494999 26495198 1 -chr20 26498644 26498936 1 -chr20 26500534 26500859 1 -chr20 26502144 26502400 1 -chr20 26504271 26504699 1 -chr20 26507122 26507376 1 -chr20 26508425 26508712 1 -chr20 26509503 26509754 1 -chr20 26511321 26511455 1 -chr20 26513345 26513588 1 -chr20 26518203 26518528 1 -chr20 26519722 26520000 1 -chr20 26520355 26520400 1 -chr20 26525168 26525358 1 -chr20 26525822 26526095 1 -chr20 26531327 26531820 1 -chr20 26531941 26532025 1 -chr20 26532973 26533242 1 -chr20 26533356 26533681 1 -chr20 26537245 26537690 1 -chr20 26539083 26539375 1 -chr20 26539703 26539736 1 -chr20 26542537 26542783 1 -chr20 26543881 26544074 1 -chr20 26555114 26555294 1 -chr20 26561746 26562038 1 -chr20 26564930 26565078 1 -chr20 26568462 26568667 1 -chr20 26570241 26570614 1 -chr20 26570719 26571040 1 -chr20 26577502 26577542 1 -chr20 26577619 26577819 1 -chr20 26578144 26578359 1 -chr20 26582314 26582772 1 -chr20 26583489 26583972 1 -chr20 26585172 26585313 1 -chr20 26585313 26585327 2 -chr20 26585327 26585500 1 -chr20 26587710 26587998 1 -chr20 26588760 26588967 1 -chr20 26590513 26590596 1 -chr20 26598742 26598895 1 -chr20 26600175 26600265 1 -chr20 26602044 26602197 1 -chr20 26604501 26604677 1 -chr20 26606124 26606266 1 -chr20 26613761 26614148 1 -chr20 26619905 26619959 1 -chr20 26621403 26621593 1 -chr20 26622514 26622639 1 -chr20 26625764 26626042 1 -chr20 26627588 26627789 1 -chr20 26629931 26630136 1 -chr20 26636466 26636668 1 -chr20 26647185 26647306 1 -chr20 26653793 26653997 1 -chr20 26659198 26659540 1 -chr20 26665253 26665508 1 -chr20 26665692 26665748 1 -chr20 26670284 26670495 1 -chr20 26671333 26671616 1 -chr20 26675132 26675399 1 -chr20 26679691 26679867 1 -chr20 26698001 26698247 1 -chr20 26698371 26698824 1 -chr20 26704158 26704552 1 -chr20 26704954 26705415 1 -chr20 26706842 26707105 1 -chr20 26710440 26710835 1 -chr20 26716143 26716387 1 -chr20 26716506 26716863 1 -chr20 26719204 26719627 1 -chr20 26719887 26720131 1 -chr20 26722337 26722784 1 -chr20 26726044 26726261 1 -chr20 26726837 26727084 1 -chr20 26730583 26730773 1 -chr20 26731106 26731309 1 -chr20 26731560 26731791 1 -chr20 26745205 26745370 1 -chr20 26752193 26752414 1 -chr20 26758531 26758735 1 -chr20 26777394 26777645 1 -chr20 26782758 26782882 1 -chr20 26783292 26783343 1 -chr20 26783345 26783581 1 -chr20 26784704 26784907 1 -chr20 26791084 26791459 1 -chr20 26791585 26791790 1 -chr20 26794158 26794420 1 -chr20 26795317 26795514 1 -chr20 26798507 26798839 1 -chr20 26802886 26803043 1 -chr20 26803982 26804039 1 -chr20 26805099 26805420 1 -chr20 26806436 26806465 1 -chr20 26806719 26806860 1 -chr20 26808457 26808597 1 -chr20 26811422 26811486 1 -chr20 26811703 26811908 1 -chr20 26813427 26813723 1 -chr20 26815219 26815409 1 -chr20 26818959 26819167 1 -chr20 26825072 26825313 1 -chr20 26826255 26826463 1 -chr20 26826620 26826685 1 -chr20 26837603 26837706 1 -chr20 26840283 26840559 1 -chr20 26842273 26842427 1 -chr20 26843971 26844069 1 -chr20 26844287 26844465 1 -chr20 26845507 26845645 1 -chr20 26847680 26847865 1 -chr20 26855354 26855423 1 -chr20 26855793 26856025 1 -chr20 26856025 26856041 2 -chr20 26856041 26856191 1 -chr20 26856710 26856986 1 -chr20 26863161 26863511 1 -chr20 26866147 26866489 1 -chr20 26866596 26866776 1 -chr20 26871685 26872154 1 -chr20 26873034 26873243 1 -chr20 26876125 26876502 1 -chr20 26876527 26876754 1 -chr20 26876754 26876775 2 -chr20 26876775 26877179 1 -chr20 26877976 26878187 1 -chr20 26879013 26879380 1 -chr20 26883600 26883731 1 -chr20 26888597 26888661 1 -chr20 26890128 26890174 1 -chr20 26891383 26891794 1 -chr20 26897832 26898154 1 -chr20 26904338 26904698 1 -chr20 26906716 26906960 1 -chr20 26909750 26910108 1 -chr20 26915205 26915474 1 -chr20 26916097 26916530 1 -chr20 26917394 26917603 1 -chr20 26917959 26917989 1 -chr20 26918236 26918476 1 -chr20 26919095 26919439 1 -chr20 26920548 26920765 1 -chr20 26925949 26926403 1 -chr20 26931347 26931558 1 -chr20 26932673 26932797 1 -chr20 26942195 26942383 1 -chr20 26948141 26948248 1 -chr20 26948455 26948653 1 -chr20 26957946 26958429 1 -chr20 26962081 26962482 1 -chr20 26966401 26966679 1 -chr20 26973822 26974059 1 -chr20 26979291 26979384 1 -chr20 26979639 26979922 1 -chr20 26980723 26981050 1 -chr20 26981151 26981337 1 -chr20 26983430 26983619 1 -chr20 26984219 26984422 1 -chr20 26988747 26988891 1 -chr20 26991725 26992161 1 -chr20 26992260 26992492 1 -chr20 26994725 26995196 1 -chr20 26998061 26998415 1 -chr20 26999040 26999119 1 -chr20 26999772 27000170 1 -chr20 27001857 27002045 1 -chr20 27003396 27003851 1 -chr20 27009578 27009781 1 -chr20 27010636 27010884 1 -chr20 27011607 27011866 1 -chr20 27014441 27014601 1 -chr20 27019992 27020320 1 -chr20 27029916 27030277 1 -chr20 27035008 27035252 1 -chr20 27037578 27037799 1 -chr20 27038754 27038906 1 -chr20 27044133 27044466 1 -chr20 27047938 27048347 1 -chr20 27048588 27048833 1 -chr20 27056816 27057021 1 -chr20 27057431 27057928 1 -chr20 27058046 27058301 1 -chr20 27061884 27061981 1 -chr20 27063074 27063150 1 -chr20 27065481 27065731 1 -chr20 27070528 27070669 1 -chr20 27071939 27072350 1 -chr20 27075689 27075885 1 -chr20 27077080 27077394 1 -chr20 27082938 27083040 1 -chr20 27083646 27083709 1 -chr20 27085205 27085239 1 -chr20 27086322 27086466 1 -chr20 27088811 27089159 1 -chr20 27094165 27094398 1 -chr20 27095888 27096051 1 -chr20 27097234 27097277 1 -chr20 27097588 27097911 1 -chr20 27098954 27099340 1 -chr20 27101424 27101603 1 -chr20 27116593 27116899 1 -chr20 27128516 27128613 1 -chr20 27135882 27136079 1 -chr20 27136139 27136417 1 -chr20 27139228 27139626 1 -chr20 27150138 27150344 1 -chr20 27152883 27153149 1 -chr20 27159987 27160020 1 -chr20 27161330 27161416 1 -chr20 27164172 27164411 1 -chr20 27166221 27166409 1 -chr20 27166415 27166595 1 -chr20 27167436 27167467 1 -chr20 27168202 27168341 1 -chr20 27169964 27170406 1 -chr20 27172436 27172778 1 -chr20 27175972 27176037 1 -chr20 27177777 27177901 1 -chr20 27187377 27187574 1 -chr20 27189035 27189281 1 -chr20 27191541 27191924 1 -chr20 27192077 27192507 1 -chr20 27196970 27197386 1 -chr20 27201614 27201860 1 -chr20 27205761 27205939 1 -chr20 27206297 27206733 1 -chr20 27206871 27207087 1 -chr20 27209397 27209780 1 -chr20 27211204 27211434 1 -chr20 27216209 27216434 1 -chr20 27218233 27218658 1 -chr20 27220856 27221340 1 -chr20 27227461 27227785 1 -chr20 27231008 27231358 1 -chr20 27233265 27233445 1 -chr20 27238774 27238953 1 -chr20 27240484 27240742 1 -chr20 27241479 27241815 1 -chr20 27241853 27242088 1 -chr20 27243910 27244069 1 -chr20 27256024 27256270 1 -chr20 27257169 27257531 1 -chr20 27257853 27258211 1 -chr20 27260084 27260571 1 -chr20 27261057 27261300 1 -chr20 27268193 27268337 1 -chr20 27272520 27272779 1 -chr20 27274347 27274556 1 -chr20 27274864 27275115 1 -chr20 27278292 27278553 1 -chr20 27280796 27280964 1 -chr20 27281222 27281499 1 -chr20 27281807 27281987 1 -chr20 27282344 27282663 1 -chr20 27283555 27283859 1 -chr20 27286803 27287202 1 -chr20 27288680 27288860 1 -chr20 27292862 27292984 1 -chr20 27297004 27297182 1 -chr20 27297965 27298168 1 -chr20 27298500 27298579 1 -chr20 27299287 27299453 1 -chr20 27307472 27307704 1 -chr20 27309322 27309420 1 -chr20 27314161 27314372 1 -chr20 27315287 27315769 1 -chr20 27316638 27316714 1 -chr20 27324853 27325125 1 -chr20 27326082 27326531 1 -chr20 27327202 27327397 1 -chr20 27328067 27328352 1 -chr20 27330792 27331037 1 -chr20 27332494 27332546 1 -chr20 27333039 27333155 1 -chr20 27334257 27334686 1 -chr20 27335912 27336144 1 -chr20 27345202 27345404 1 -chr20 27348420 27348646 1 -chr20 27350090 27350446 1 -chr20 27353765 27353984 1 -chr20 27354392 27354523 1 -chr20 27355267 27355437 1 -chr20 27361538 27361774 1 -chr20 27368114 27368321 1 -chr20 27368803 27369045 1 -chr20 27374711 27374909 1 -chr20 27376126 27376264 1 -chr20 27381467 27381824 1 -chr20 27388007 27388142 1 -chr20 27396226 27396392 1 -chr20 27400627 27400935 1 -chr20 27401766 27401890 1 -chr20 27406444 27406710 1 -chr20 27409763 27409796 1 -chr20 27413684 27413873 1 -chr20 27413901 27414068 1 -chr20 27415824 27416074 1 -chr20 27426124 27426535 1 -chr20 27428263 27428349 1 -chr20 27429620 27429878 1 -chr20 27437259 27437598 1 -chr20 27439199 27439666 1 -chr20 27445096 27445462 1 -chr20 27448273 27448458 1 -chr20 27455348 27455541 1 -chr20 27458300 27458632 1 -chr20 27467147 27467354 1 -chr20 27468846 27469053 1 -chr20 27470708 27470926 1 -chr20 27473259 27473487 1 -chr20 27473584 27473795 1 -chr20 27473836 27474314 1 -chr20 27475026 27475194 1 -chr20 27475955 27476225 1 -chr20 27479039 27479267 1 -chr20 27480045 27480204 1 -chr20 27484589 27484795 1 -chr20 27488949 27489304 1 -chr20 27494170 27494515 1 -chr20 27494672 27495005 1 -chr20 27503156 27503475 1 -chr20 27507122 27507228 1 -chr20 27507270 27507621 1 -chr20 27512025 27512399 1 -chr20 27513070 27513354 1 -chr20 27515658 27516054 1 -chr20 27519539 27519598 1 -chr20 27519759 27520026 1 -chr20 27521933 27522320 1 -chr20 27523464 27523561 1 -chr20 27524388 27524694 1 -chr20 27530654 27530908 1 -chr20 27532264 27532679 1 -chr20 27534044 27534162 1 -chr20 27538184 27538372 1 -chr20 27540594 27540965 1 -chr20 27541992 27542061 1 -chr20 27543826 27544024 1 -chr20 27544741 27545170 1 -chr20 27551383 27551809 1 -chr20 27552534 27552673 1 -chr20 27552913 27553080 1 -chr20 27554721 27554802 1 -chr20 27555588 27555955 1 -chr20 27559687 27559998 1 -chr20 27561930 27562275 1 -chr20 27564177 27564413 1 -chr20 27566974 27567211 1 -chr20 27573997 27574428 1 -chr20 27574825 27575107 1 -chr20 27575332 27575746 1 -chr20 27576671 27576809 1 -chr20 27577846 27578039 1 -chr20 27580024 27580168 1 -chr20 27581174 27581359 1 -chr20 27582870 27582916 1 -chr20 27583380 27583495 1 -chr20 27583516 27583828 1 -chr20 27584507 27584699 1 -chr20 27588876 27589054 1 -chr20 27589357 27589761 1 -chr20 27591460 27591789 1 -chr20 27604693 27605078 1 -chr20 27605304 27605757 1 -chr20 27614318 27614580 1 -chr20 27614739 27614966 1 -chr20 27617683 27617976 1 -chr20 27618674 27618987 1 -chr20 27619247 27619350 1 -chr20 27620615 27620745 1 -chr20 27639196 27639260 1 -chr20 27641388 27641555 1 -chr20 27642266 27642660 1 -chr20 27643815 27643946 1 -chr20 27645066 27645292 1 -chr20 27646152 27646385 1 -chr20 27649076 27649249 1 -chr20 27654213 27654383 1 -chr20 27659821 27660257 1 -chr20 27660478 27660777 1 -chr20 27661499 27661769 1 -chr20 27666685 27666864 1 -chr20 27669461 27669637 1 -chr20 27676122 27676423 1 -chr20 27677664 27677909 1 -chr20 27681734 27682190 1 -chr20 27684715 27685153 1 -chr20 27690190 27690580 1 -chr20 27691431 27691790 1 -chr20 27692389 27692670 1 -chr20 27695292 27695690 1 -chr20 27701457 27701580 1 -chr20 27702794 27703118 1 -chr20 27709569 27709946 1 -chr20 27710617 27710894 1 -chr20 27710907 27711095 1 -chr20 27717161 27717281 1 -chr20 27719961 27720247 1 -chr20 27723983 27724224 1 -chr20 27728533 27728638 1 -chr20 27739468 27739829 1 -chr20 27740185 27740467 1 -chr20 27742575 27743024 1 -chr20 27744664 27744894 1 -chr20 27746106 27746260 1 -chr20 27747129 27747334 1 -chr20 27749210 27749475 1 -chr20 27755517 27755646 1 -chr20 27759578 27760020 1 -chr20 27762160 27762452 1 -chr20 27762734 27763028 1 -chr20 27767607 27768067 1 -chr20 27771628 27771994 1 -chr20 27776666 27776834 1 -chr20 27778481 27778752 1 -chr20 27781123 27781209 1 -chr20 27782529 27782826 1 -chr20 27785849 27785939 1 -chr20 27786764 27787021 1 -chr20 27791828 27792004 1 -chr20 27793016 27793047 1 -chr20 27793639 27793759 1 -chr20 27795046 27795476 1 -chr20 27796740 27797021 1 -chr20 27805406 27805820 1 -chr20 27806547 27806729 1 -chr20 27807489 27807721 1 -chr20 27809947 27810442 1 -chr20 27812542 27812691 1 -chr20 27813525 27813722 1 -chr20 27816925 27817137 1 -chr20 27819221 27819409 1 -chr20 27825690 27825851 1 -chr20 27827327 27827373 1 -chr20 27828327 27828588 1 -chr20 27830486 27830846 1 -chr20 27831288 27831481 1 -chr20 27835548 27835747 1 -chr20 27836690 27836933 1 -chr20 27840389 27840574 1 -chr20 27840574 27840595 2 -chr20 27840595 27840940 1 -chr20 27841793 27841993 1 -chr20 27842664 27842891 1 -chr20 27845952 27846178 1 -chr20 27847948 27848375 1 -chr20 27848375 27848388 2 -chr20 27848388 27848581 1 -chr20 27855099 27855204 1 -chr20 27859122 27859331 1 -chr20 27860315 27860523 1 -chr20 27861240 27861485 1 -chr20 27861874 27862064 1 -chr20 27863183 27863363 1 -chr20 27863576 27863771 1 -chr20 27866482 27866660 1 -chr20 27868021 27868224 1 -chr20 27868310 27868687 1 -chr20 27872082 27872469 1 -chr20 27873629 27873740 1 -chr20 27874625 27874822 1 -chr20 27875313 27875810 1 -chr20 27878672 27879120 1 -chr20 27879596 27879721 1 -chr20 27884818 27885038 1 -chr20 27885921 27886235 1 -chr20 27892892 27892922 1 -chr20 27893321 27893749 1 -chr20 27897198 27897628 1 -chr20 27902530 27902688 1 -chr20 27904764 27904967 1 -chr20 27907317 27907675 1 -chr20 27910739 27911174 1 -chr20 27914913 27915341 1 -chr20 27915945 27916339 1 -chr20 27917148 27917304 1 -chr20 27917304 27917327 2 -chr20 27917327 27917642 1 -chr20 27930947 27931303 1 -chr20 27933455 27933614 1 -chr20 27934393 27934644 1 -chr20 27938193 27938398 1 -chr20 27939320 27939769 1 -chr20 27940528 27940760 1 -chr20 27940837 27941143 1 -chr20 27956031 27956199 1 -chr20 27957654 27957853 1 -chr20 27958963 27959315 1 -chr20 27963232 27963325 1 -chr20 27964399 27964625 1 -chr20 27969651 27969809 1 -chr20 27970603 27971011 1 -chr20 27972530 27972919 1 -chr20 27973546 27973720 1 -chr20 27974169 27974448 1 -chr20 27975691 27976106 1 -chr20 27976550 27976689 1 -chr20 27983590 27984075 1 -chr20 27984408 27984603 1 -chr20 27987818 27988054 1 -chr20 27990958 27991295 1 -chr20 27993661 27993793 1 -chr20 27994652 27995094 1 -chr20 27997176 27997428 1 -chr20 28000046 28000244 1 -chr20 28000286 28000478 1 -chr20 28004485 28004664 1 -chr20 28007715 28007881 1 -chr20 28009361 28009568 1 -chr20 28014239 28014732 1 -chr20 28017106 28017141 1 -chr20 28020945 28021167 1 -chr20 28022342 28022736 1 -chr20 28022770 28022995 1 -chr20 28024428 28024895 1 -chr20 28027369 28027722 1 -chr20 28027773 28028035 1 -chr20 28030164 28030444 1 -chr20 28034260 28034492 1 -chr20 28035889 28036079 1 -chr20 28041196 28041686 1 -chr20 28044270 28044503 1 -chr20 28044653 28044691 1 -chr20 28045245 28045454 1 -chr20 28050034 28050122 1 -chr20 28051587 28051789 1 -chr20 28055261 28055440 1 -chr20 28057471 28057900 1 -chr20 28063987 28064381 1 -chr20 28077719 28078051 1 -chr20 28079670 28080063 1 -chr20 28080465 28080521 1 -chr20 28080849 28081118 1 -chr20 28082043 28082395 1 -chr20 28082556 28082811 1 -chr20 28087234 28087470 1 -chr20 28097091 28097181 1 -chr20 28101792 28102024 1 -chr20 28104097 28104229 1 -chr20 28105822 28106066 1 -chr20 28106446 28106911 1 -chr20 28108032 28108369 1 -chr20 28109287 28109469 1 -chr20 28112222 28112565 1 -chr20 28113078 28113240 1 -chr20 28118571 28119012 1 -chr20 28125260 28125570 1 -chr20 28133986 28134194 1 -chr20 28134377 28134788 1 -chr20 28136990 28137218 1 -chr20 28152154 28152427 1 -chr20 28153844 28154074 1 -chr20 28154613 28155073 1 -chr20 28156226 28156475 1 -chr20 28156938 28157193 1 -chr20 28160168 28160545 1 -chr20 28165745 28165943 1 -chr20 28167147 28167387 1 -chr20 28172446 28172692 1 -chr20 28176096 28176275 1 -chr20 28182707 28183134 1 -chr20 28187546 28187712 1 -chr20 28191250 28191436 1 -chr20 28193474 28193585 1 -chr20 28195124 28195363 1 -chr20 28196529 28196990 1 -chr20 28199091 28199331 1 -chr20 28203616 28203823 1 -chr20 28207137 28207530 1 -chr20 28212189 28212628 1 -chr20 28213147 28213480 1 -chr20 28214058 28214165 1 -chr20 28214205 28214397 1 -chr20 28215537 28215853 1 -chr20 28218060 28218242 1 -chr20 28232794 28233065 1 -chr20 28237341 28237473 1 -chr20 28237843 28238201 1 -chr20 28242263 28242650 1 -chr20 28243206 28243579 1 -chr20 28246740 28246968 1 -chr20 28249459 28249588 1 -chr20 28250703 28250940 1 -chr20 28252140 28252348 1 -chr20 28258464 28258906 1 -chr20 28262931 28263140 1 -chr20 28265400 28265559 1 -chr20 28274264 28274457 1 -chr20 28275807 28276143 1 -chr20 28276849 28277304 1 -chr20 28277870 28278184 1 -chr20 28278185 28278412 1 -chr20 28283430 28283612 1 -chr20 28284164 28284516 1 -chr20 28285757 28286179 1 -chr20 28287691 28287861 1 -chr20 28299647 28299786 1 -chr20 28304160 28304348 1 -chr20 28308150 28308330 1 -chr20 28308950 28309329 1 -chr20 28312208 28312521 1 -chr20 28313679 28314031 1 -chr20 28315534 28315885 1 -chr20 28326916 28327403 1 -chr20 28330548 28330724 1 -chr20 28333426 28333777 1 -chr20 28337108 28337285 1 -chr20 28338484 28338686 1 -chr20 28339246 28339369 1 -chr20 28341554 28341749 1 -chr20 28342108 28342343 1 -chr20 28348080 28348422 1 -chr20 28352918 28353238 1 -chr20 28359167 28359407 1 -chr20 28361060 28361398 1 -chr20 28365815 28366180 1 -chr20 28377736 28378219 1 -chr20 28378602 28378791 1 -chr20 28378799 28379232 1 -chr20 28380416 28380721 1 -chr20 28385393 28385586 1 -chr20 28386777 28387040 1 -chr20 28387918 28388020 1 -chr20 28402118 28402325 1 -chr20 28402921 28403120 1 -chr20 28405855 28406035 1 -chr20 28406311 28406489 1 -chr20 28406834 28407267 1 -chr20 28407655 28408100 1 -chr20 28408732 28408970 1 -chr20 28409812 28410186 1 -chr20 28418550 28418820 1 -chr20 28420304 28420702 1 -chr20 28425609 28425777 1 -chr20 28427663 28427835 1 -chr20 28438091 28438378 1 -chr20 28438506 28438626 1 -chr20 28440104 28440594 1 -chr20 28441084 28441418 1 -chr20 28452107 28452336 1 -chr20 28453287 28453486 1 -chr20 28455921 28456009 1 -chr20 28456014 28456194 1 -chr20 28456917 28457362 1 -chr20 28457777 28458034 1 -chr20 28459906 28460252 1 -chr20 28467035 28467479 1 -chr20 28468656 28468776 1 -chr20 28472064 28472261 1 -chr20 28473116 28473219 1 -chr20 28474335 28474739 1 -chr20 28475391 28475550 1 -chr20 28489053 28489340 1 -chr20 28492322 28492696 1 -chr20 28499110 28499143 1 -chr20 28505760 28506027 1 -chr20 28511235 28511424 1 -chr20 28512142 28512390 1 -chr20 28514456 28514619 1 -chr20 28514622 28514687 1 -chr20 28514863 28514927 1 -chr20 28514959 28515024 1 -chr20 28516840 28517046 1 -chr20 28518719 28518926 1 -chr20 28523761 28524028 1 -chr20 28524180 28524369 1 -chr20 28525412 28525596 1 -chr20 28526096 28526448 1 -chr20 28526601 28526792 1 -chr20 28530932 28531028 1 -chr20 28531046 28531259 1 -chr20 28532494 28532928 1 -chr20 28534543 28534905 1 -chr20 28543384 28543632 1 -chr20 28545587 28545673 1 -chr20 28546543 28546749 1 -chr20 28552410 28552504 1 -chr20 28553355 28553724 1 -chr20 28555233 28555543 1 -chr20 28555942 28556152 1 -chr20 28556433 28556636 1 -chr20 28560346 28560554 1 -chr20 28560791 28560837 1 -chr20 28560959 28560996 1 -chr20 28561542 28561673 1 -chr20 28569262 28569504 1 -chr20 28571061 28571266 1 -chr20 28575354 28575633 1 -chr20 28578347 28578565 1 -chr20 28579734 28580136 1 -chr20 28583986 28584323 1 -chr20 28584598 28584969 1 -chr20 28592715 28592932 1 -chr20 28593357 28593550 1 -chr20 28601850 28601931 1 -chr20 28605949 28606148 1 -chr20 28607614 28607921 1 -chr20 28608730 28609002 1 -chr20 28613582 28613807 1 -chr20 28629816 28630059 1 -chr20 28640162 28640531 1 -chr20 28640547 28640749 1 -chr20 28641242 28641444 1 -chr20 28642832 28643058 1 -chr20 28644165 28644239 1 -chr20 28644465 28644857 1 -chr20 28645845 28646015 1 -chr20 28647583 28647944 1 -chr20 28668146 28668368 1 -chr20 28671894 28672116 1 -chr20 28682980 28683405 1 -chr20 28690698 28691023 1 -chr20 28695098 28695464 1 -chr20 28702638 28702751 1 -chr20 28713080 28713232 1 -chr20 28730314 28730420 1 -chr20 28731230 28731620 1 -chr20 28735090 28735178 1 -chr20 28736304 28736652 1 -chr20 28739897 28739989 1 -chr20 28744942 28745183 1 -chr20 28753032 28753135 1 -chr20 28753320 28753517 1 -chr20 28755423 28755596 1 -chr20 28756600 28756642 1 -chr20 28759479 28759817 1 -chr20 28764045 28764114 1 -chr20 28767219 28767285 1 -chr20 28769063 28769328 1 -chr20 28772437 28772503 1 -chr20 28781057 28781324 1 -chr20 28782164 28782330 1 -chr20 28783112 28783365 1 -chr20 28796306 28796365 1 -chr20 28799471 28799844 1 -chr20 28800570 28800816 1 -chr20 28805650 28806140 1 -chr20 28807636 28807834 1 -chr20 28811391 28811429 1 -chr20 28812912 28812958 1 -chr20 28815403 28815443 1 -chr20 28816458 28816713 1 -chr20 28818156 28818187 1 -chr20 28823676 28823795 1 -chr20 28827570 28827748 1 -chr20 28829385 28829597 1 -chr20 28834616 28834826 1 -chr20 28835441 28835811 1 -chr20 28838270 28838326 1 -chr20 28839045 28839295 1 -chr20 28863577 28863830 1 -chr20 28863834 28863968 1 -chr20 28877137 28877184 1 -chr20 28881266 28881331 1 -chr20 28883656 28883693 1 -chr20 28884170 28884375 1 -chr20 28887609 28887792 1 -chr20 28898068 28898107 1 -chr20 28899403 28899514 1 -chr20 28903522 28903873 1 -chr20 28903893 28903946 1 -chr20 28907092 28907279 1 -chr20 28909901 28910105 1 -chr20 28916378 28916745 1 -chr20 28919290 28919518 1 -chr20 28920553 28920758 1 -chr20 28923999 28924089 1 -chr20 28931903 28932370 1 -chr20 28933892 28934207 1 -chr20 28937440 28937477 1 -chr20 28937882 28938071 1 -chr20 28938173 28938233 1 -chr20 28940777 28940816 1 -chr20 28940922 28940962 1 -chr20 28941061 28941210 1 -chr20 28943992 28944079 1 -chr20 28944978 28945101 1 -chr20 28948246 28948546 1 -chr20 28948695 28948951 1 -chr20 28949954 28949991 1 -chr20 28951661 28951924 1 -chr20 28966001 28966229 1 -chr20 28973443 28973491 1 -chr20 28985062 28985328 1 -chr20 29001529 29001704 1 -chr20 29004262 29004587 1 -chr20 29005257 29005370 1 -chr20 29012009 29012086 1 -chr20 29024580 29024663 1 -chr20 29028856 29029081 1 -chr20 29030236 29030571 1 -chr20 29032520 29032756 1 -chr20 29034596 29034786 1 -chr20 29036525 29036779 1 -chr20 29046941 29047159 1 -chr20 29047204 29047460 1 -chr20 29051309 29051500 1 -chr20 29058269 29058486 1 -chr20 29062649 29062773 1 -chr20 29065148 29065360 1 -chr20 29068425 29068605 1 -chr20 29079667 29080038 1 -chr20 29081127 29081208 1 -chr20 29082912 29083167 1 -chr20 29084515 29084722 1 -chr20 29085505 29085718 1 -chr20 29085858 29086158 1 -chr20 29087017 29087230 1 -chr20 29092409 29092802 1 -chr20 29101529 29102022 1 -chr20 29102093 29102260 1 -chr20 29105718 29105818 1 -chr20 29113062 29113298 1 -chr20 29113639 29113715 1 -chr20 29122494 29122531 1 -chr20 29124763 29125021 1 -chr20 29125124 29125349 1 -chr20 29130448 29130665 1 -chr20 29130884 29131110 1 -chr20 29133057 29133417 1 -chr20 29139245 29139728 1 -chr20 29148710 29149085 1 -chr20 29157269 29157307 1 -chr20 29161296 29161498 1 -chr20 29164297 29164557 1 -chr20 29168321 29168743 1 -chr20 29192370 29192545 1 -chr20 29193214 29193399 1 -chr20 29203190 29203421 1 -chr20 29203514 29203611 1 -chr20 29206272 29206299 1 -chr20 29206375 29206471 1 -chr20 29215015 29215112 1 -chr20 29217281 29217741 1 -chr20 29218685 29218717 1 -chr20 29222814 29222984 1 -chr20 29223581 29224000 1 -chr20 29225893 29226006 1 -chr20 29227788 29228157 1 -chr20 29230459 29230549 1 -chr20 29230573 29230903 1 -chr20 29231108 29231196 1 -chr20 29240589 29240795 1 -chr20 29242772 29242802 1 -chr20 29244425 29244601 1 -chr20 29247918 29247982 1 -chr20 29256379 29256434 1 -chr20 29256965 29257314 1 -chr20 29260861 29261036 1 -chr20 29262303 29262783 1 -chr20 29266632 29266793 1 -chr20 29267032 29267193 1 -chr20 29269492 29269524 1 -chr20 29277562 29277641 1 -chr20 29286838 29286900 1 -chr20 29287326 29287731 1 -chr20 29288243 29288310 1 -chr20 29291283 29291569 1 -chr20 29304108 29304172 1 -chr20 29306819 29307203 1 -chr20 29308499 29308526 1 -chr20 29314430 29314661 1 -chr20 29317464 29317700 1 -chr20 29321695 29321964 1 -chr20 29323441 29323614 1 -chr20 29324087 29324240 1 -chr20 29325210 29325396 1 -chr20 29329150 29329318 1 -chr20 29332561 29332696 1 -chr20 29351938 29352200 1 -chr20 29359216 29359307 1 -chr20 29365330 29365553 1 -chr20 29373804 29374089 1 -chr20 29376710 29377064 1 -chr20 29384751 29384863 1 -chr20 29386792 29387083 1 -chr20 29387265 29387501 1 -chr20 29390542 29390898 1 -chr20 29391270 29391657 1 -chr20 29391990 29392201 1 -chr20 29392731 29393075 1 -chr20 29393075 29393079 2 -chr20 29393079 29393319 1 -chr20 29402937 29403152 1 -chr20 29408266 29408430 1 -chr20 29409696 29409845 1 -chr20 29414851 29415050 1 -chr20 29422549 29422854 1 -chr20 29422925 29423253 1 -chr20 29431419 29431676 1 -chr20 29432296 29432355 1 -chr20 29436961 29437153 1 -chr20 29439184 29439420 1 -chr20 29464036 29464143 1 -chr20 29464148 29464369 1 -chr20 29473390 29473747 1 -chr20 29477787 29478002 1 -chr20 29478536 29478842 1 -chr20 29478883 29479048 1 -chr20 29480647 29480814 1 -chr20 29483551 29483771 1 -chr20 29485559 29485879 1 -chr20 29487099 29487457 1 -chr20 29487948 29488307 1 -chr20 29490894 29491243 1 -chr20 29496141 29496561 1 -chr20 29497823 29498109 1 -chr20 29498109 29498126 2 -chr20 29498126 29498492 1 -chr20 29502577 29502873 1 -chr20 29506545 29506730 1 -chr20 29518212 29518519 1 -chr20 29522595 29523019 1 -chr20 29526966 29527134 1 -chr20 29532640 29533000 1 -chr20 29534635 29535312 1 -chr20 29536363 29536447 1 -chr20 29538190 29538244 1 -chr20 29543859 29544028 1 -chr20 29548100 29548219 1 -chr20 29550468 29550857 1 -chr20 29556812 29557054 1 -chr20 29567200 29567395 1 -chr20 29568362 29568565 1 -chr20 29569977 29570324 1 -chr20 29571546 29571826 1 -chr20 29582428 29582593 1 -chr20 29597185 29597262 1 -chr20 29599034 29599241 1 -chr20 29605052 29605274 1 -chr20 29608605 29608806 1 -chr20 29612805 29613038 1 -chr20 29613717 29613973 1 -chr20 29614448 29614719 1 -chr20 29621960 29622307 1 -chr20 29622575 29622976 1 -chr20 29623296 29623392 1 -chr20 29630207 29630658 1 -chr20 29632534 29632660 1 -chr20 29634729 29635171 1 -chr20 29641063 29641211 1 -chr20 29644186 29644408 1 -chr20 29660531 29660634 1 -chr20 29663856 29664076 1 -chr20 29664416 29664617 1 -chr20 29664748 29665215 1 -chr20 29675985 29676340 1 -chr20 29678926 29679132 1 -chr20 29680247 29680490 1 -chr20 29684680 29684904 1 -chr20 29688950 29689378 1 -chr20 29689776 29690004 1 -chr20 29698642 29698727 1 -chr20 29698824 29698863 1 -chr20 29704665 29704911 1 -chr20 29709611 29709714 1 -chr20 29713677 29714027 1 -chr20 29718329 29718468 1 -chr20 29719254 29719289 1 -chr20 29730435 29730498 1 -chr20 29733085 29733271 1 -chr20 29737526 29737599 1 -chr20 29737894 29738026 1 -chr20 29739402 29739771 1 -chr20 29743729 29743944 1 -chr20 29747672 29748062 1 -chr20 29752474 29752733 1 -chr20 29756509 29756726 1 -chr20 29764678 29764904 1 -chr20 29764904 29764909 2 -chr20 29764909 29765133 1 -chr20 29766960 29767192 1 -chr20 29767192 29767204 2 -chr20 29767204 29767498 1 -chr20 29777165 29777282 1 -chr20 29783939 29784236 1 -chr20 29786175 29786392 1 -chr20 29799181 29799596 1 -chr20 29801063 29801329 1 -chr20 29801511 29801578 1 -chr20 29806976 29807256 1 -chr20 29808294 29808472 1 -chr20 29814799 29814835 1 -chr20 29817875 29818111 1 -chr20 29820432 29820506 1 -chr20 29820520 29820702 1 -chr20 29820878 29821069 1 -chr20 29821174 29821236 1 -chr20 29827133 29827335 1 -chr20 29831571 29832020 1 -chr20 29834887 29835212 1 -chr20 29836044 29836267 1 -chr20 29836344 29836604 1 -chr20 29836951 29836983 1 -chr20 29838089 29838152 1 -chr20 29839666 29839892 1 -chr20 29842032 29842089 1 -chr20 29844568 29844685 1 -chr20 29844893 29845231 1 -chr20 29849911 29849943 1 -chr20 29856632 29856719 1 -chr20 29857767 29858123 1 -chr20 29862251 29862289 1 -chr20 29863755 29863787 1 -chr20 29864342 29864577 1 -chr20 29866965 29867240 1 -chr20 29868470 29868656 1 -chr20 29872078 29872396 1 -chr20 29876167 29876489 1 -chr20 29877627 29877950 1 -chr20 29883394 29883585 1 -chr20 29883944 29883985 1 -chr20 29885504 29885675 1 -chr20 29892690 29892774 1 -chr20 29894243 29894323 1 -chr20 29903535 29903885 1 -chr20 29904830 29904918 1 -chr20 29905025 29905068 1 -chr20 29906400 29906663 1 -chr20 29909970 29910284 1 -chr20 29920022 29920516 1 -chr20 29925632 29925976 1 -chr20 29931020 29931357 1 -chr20 29937469 29937613 1 -chr20 29952410 29952441 1 -chr20 29953193 29953519 1 -chr20 29961734 29962178 1 -chr20 29966247 29966300 1 -chr20 29975590 29975767 1 -chr20 29976571 29976812 1 -chr20 29976840 29976972 1 -chr20 29980006 29980095 1 -chr20 29982621 29982658 1 -chr20 29992166 29992321 1 -chr20 29996420 29996778 1 -chr20 29997360 29997667 1 -chr20 30000161 30000290 1 -chr20 30006241 30006350 1 -chr20 30020114 30020202 1 -chr20 30023372 30023727 1 -chr20 30026440 30026546 1 -chr20 30029097 30029234 1 -chr20 30030009 30030291 1 -chr20 30030683 30030867 1 -chr20 30031716 30031803 1 -chr20 30037733 30038229 1 -chr20 30088457 30088855 1 -chr20 30089291 30089633 1 -chr20 30090904 30091050 1 -chr20 30091050 30091064 2 -chr20 30091064 30091098 1 -chr20 30100740 30100902 1 -chr20 30106806 30107034 1 -chr20 30113134 30113373 1 -chr20 30126935 30127163 1 -chr20 30129427 30129831 1 -chr20 30131805 30131997 1 -chr20 30137284 30137720 1 -chr20 30138038 30138081 1 -chr20 30141738 30141915 1 -chr20 30146074 30146171 1 -chr20 30146246 30146342 1 -chr20 30153002 30153113 1 -chr20 30153570 30153626 1 -chr20 30155010 30155144 1 -chr20 30161263 30161335 1 -chr20 30165274 30165311 1 -chr20 30166673 30166882 1 -chr20 30177324 30177533 1 -chr20 30178405 30178602 1 -chr20 30183065 30183282 1 -chr20 30197098 30197344 1 -chr20 30210469 30210666 1 -chr20 30218736 30218872 1 -chr20 30234888 30235057 1 -chr20 30252974 30253180 1 -chr20 30259226 30259303 1 -chr20 30263436 30263530 1 -chr20 30269832 30269949 1 -chr20 30270988 30271424 1 -chr20 30271428 30271545 1 -chr20 30281118 30281537 1 -chr20 30281775 30282003 1 -chr20 30282613 30282789 1 -chr20 30285133 30285537 1 -chr20 30288543 30288722 1 -chr20 30294309 30294498 1 -chr20 30295602 30295683 1 -chr20 30300289 30300449 1 -chr20 30300565 30300768 1 -chr20 30306063 30306198 1 -chr20 30308306 30308351 1 -chr20 30313518 30313952 1 -chr20 30314029 30314285 1 -chr20 30315461 30315679 1 -chr20 30316669 30316959 1 -chr20 30322130 30322469 1 -chr20 30325427 30325645 1 -chr20 30329805 30330045 1 -chr20 30332976 30333184 1 -chr20 30333698 30333878 1 -chr20 30335070 30335338 1 -chr20 30346193 30346470 1 -chr20 30347761 30347948 1 -chr20 30349018 30349193 1 -chr20 30349206 30349385 1 -chr20 30361161 30361582 1 -chr20 30361637 30362033 1 -chr20 30370021 30370438 1 -chr20 30374719 30375141 1 -chr20 30375141 30375150 2 -chr20 30375150 30375536 1 -chr20 30378182 30378484 1 -chr20 30379089 30379219 1 -chr20 30379809 30380036 1 -chr20 30388688 30388895 1 -chr20 30390946 30391417 1 -chr20 30392320 30392780 1 -chr20 30411415 30411517 1 -chr20 30412102 30412316 1 -chr20 30421672 30421880 1 -chr20 30456218 30456275 1 -chr20 30461540 30461765 1 -chr20 30470570 30470690 1 -chr20 30470884 30471285 1 -chr20 30474040 30474131 1 -chr20 30475833 30476008 1 -chr20 30476008 30476024 2 -chr20 30476024 30476099 1 -chr20 30480416 30480515 1 -chr20 30480621 30480807 1 -chr20 30503009 30503050 1 -chr20 30507462 30507662 1 -chr20 30512807 30512869 1 -chr20 30514798 30514839 1 -chr20 30518389 30518470 1 -chr20 30521749 30521920 1 -chr20 30522017 30522192 1 -chr20 30529547 30530123 1 -chr20 30532936 30533117 1 -chr20 30537993 30538181 1 -chr20 30538534 30538594 1 -chr20 30539204 30539423 1 -chr20 30540563 30541124 1 -chr20 30543186 30543604 1 -chr20 30552283 30552668 1 -chr20 30559202 30559551 1 -chr20 30562403 30562580 1 -chr20 30562757 30563022 1 -chr20 30564775 30565001 1 -chr20 30565893 30566131 1 -chr20 30567397 30567554 1 -chr20 30570135 30570688 1 -chr20 30573515 30573600 1 -chr20 30577662 30578036 1 -chr20 30583362 30583466 1 -chr20 30595167 30595549 1 -chr20 30597659 30597778 1 -chr20 30600076 30600315 1 -chr20 30610946 30611242 1 -chr20 30612611 30612788 1 -chr20 30635984 30636165 1 -chr20 30638604 30638832 1 -chr20 30643965 30644007 1 -chr20 30657147 30657389 1 -chr20 30660495 30660647 1 -chr20 30663825 30663981 1 -chr20 30675254 30675468 1 -chr20 30680579 30680709 1 -chr20 30682824 30683120 1 -chr20 30688155 30688444 1 -chr20 30688582 30688747 1 -chr20 30695870 30696074 1 -chr20 30697041 30697146 1 -chr20 30702721 30703184 1 -chr20 30706158 30706285 1 -chr20 30706687 30707113 1 -chr20 30717689 30717878 1 -chr20 30721110 30721491 1 -chr20 30723450 30723619 1 -chr20 30729075 30729446 1 -chr20 30729703 30729937 1 -chr20 30734780 30734883 1 -chr20 30736531 30736855 1 -chr20 30745678 30745842 1 -chr20 30745842 30745866 2 -chr20 30745866 30746083 1 -chr20 30746107 30746300 1 -chr20 30757613 30757838 1 -chr20 30819162 30819588 1 -chr20 30821061 30821363 1 -chr20 30822383 30822799 1 -chr20 30824863 30825071 1 -chr20 30839383 30839573 1 -chr20 30842328 30842353 1 -chr20 30843775 30843976 1 -chr20 30845401 30845710 1 -chr20 30847120 30847223 1 -chr20 30848532 30848747 1 -chr20 30855554 30855793 1 -chr20 30861240 30861414 1 -chr20 30863661 30863968 1 -chr20 30865621 30865798 1 -chr20 30869094 30869293 1 -chr20 30869668 30869885 1 -chr20 30873194 30873587 1 -chr20 30885468 30885653 1 -chr20 30893277 30893522 1 -chr20 30895526 30895833 1 -chr20 30899158 30899559 1 -chr20 30900472 30900718 1 -chr20 30901176 30901343 1 -chr20 30901520 30901869 1 -chr20 30913316 30913365 1 -chr20 30913366 30913438 1 -chr20 30921916 30922255 1 -chr20 30923341 30923534 1 -chr20 30926137 30926202 1 -chr20 30926356 30926405 1 -chr20 30927339 30927811 1 -chr20 30928740 30928807 1 -chr20 30931283 30931341 1 -chr20 30935429 30935666 1 -chr20 30941318 30941387 1 -chr20 30952049 30952371 1 -chr20 30954154 30954215 1 -chr20 30955217 30955285 1 -chr20 30955810 30955931 1 -chr20 30956281 30956556 1 -chr20 30957415 30957541 1 -chr20 30963169 30963546 1 -chr20 30965069 30965161 1 -chr20 30969529 30969574 1 -chr20 30974851 30974934 1 -chr20 30980979 30981019 1 -chr20 30984606 30984702 1 -chr20 30985747 30985812 1 -chr20 30988667 30988743 1 -chr20 30994505 30994550 1 -chr20 30996938 30997130 1 -chr20 31052380 31052407 1 -chr20 31057542 31057575 1 -chr20 31062469 31062494 1 -chr20 31063104 31063138 1 -chr20 31064456 31064513 1 -chr20 31066911 31066940 1 -chr20 31068375 31068436 1 -chr20 31080031 31080170 1 -chr20 31080318 31080353 1 -chr20 31081419 31081486 1 -chr20 31084755 31084786 1 -chr20 31085748 31085808 1 -chr20 31085808 31085832 2 -chr20 31085832 31085841 1 -chr20 31088789 31088950 1 -chr20 31089679 31089968 1 -chr20 31090103 31090186 1 -chr20 31092548 31092577 1 -chr20 31092955 31093044 1 -chr20 31094273 31094472 1 -chr20 31097252 31097335 1 -chr20 31099762 31099791 1 -chr20 31101111 31101365 1 -chr20 31102394 31102539 1 -chr20 31158266 31158295 1 -chr20 31158943 31158977 1 -chr20 31161833 31161921 1 -chr20 31162727 31162831 1 -chr20 31164218 31164437 1 -chr20 31169420 31169459 1 -chr20 31180811 31180842 1 -chr20 31181066 31181150 1 -chr20 31181813 31181840 1 -chr20 31182306 31182340 1 -chr20 31185399 31185426 1 -chr20 31186259 31186290 1 -chr20 31189476 31189502 1 -chr20 31194509 31194538 1 -chr20 31196753 31196784 1 -chr20 31203856 31203911 1 -chr20 31207382 31207416 1 -chr20 31210283 31210312 1 -chr20 31213692 31213726 1 -chr20 31215862 31215890 1 -chr20 31216302 31216333 1 -chr20 31218512 31218568 1 -chr20 31225186 31225240 1 -chr20 31225549 31225576 1 -chr20 31226777 31226811 1 -chr20 31227806 31227837 1 -chr20 31230684 31230738 1 -chr20 31231334 31231590 1 -chr20 31234291 31234356 1 -chr20 31238339 31238409 1 -chr20 31242957 31242986 1 -chr20 31257308 31257674 1 -chr20 31260342 31260686 1 -chr20 31272614 31272964 1 -chr20 31274451 31275031 1 -chr20 31277934 31278196 1 -chr20 31282944 31283021 1 -chr20 31288654 31288831 1 -chr20 31302552 31302771 1 -chr20 31308234 31308815 1 -chr20 31338886 31339065 1 -chr20 31367149 31367219 1 -chr20 31368111 31368546 1 -chr20 31377897 31378094 1 -chr20 31384877 31384960 1 -chr20 31388428 31388652 1 -chr20 31389877 31390148 1 -chr20 31390403 31390639 1 -chr20 31400281 31400321 1 -chr20 31406833 31406928 1 -chr20 31421585 31421812 1 -chr20 31423211 31423416 1 -chr20 31427411 31427456 1 -chr20 31428197 31428288 1 -chr20 31429265 31429316 1 -chr20 31430738 31431112 1 -chr20 31450828 31451153 1 -chr20 31456621 31456805 1 -chr20 31471050 31471107 1 -chr20 31471508 31471536 1 -chr20 31471615 31471652 1 -chr20 31476507 31476802 1 -chr20 31477094 31477328 1 -chr20 31477888 31478090 1 -chr20 31484699 31485231 1 -chr20 31502871 31503380 1 -chr20 31514711 31514971 1 -chr20 31517230 31517527 1 -chr20 31522010 31522213 1 -chr20 31522706 31523095 1 -chr20 31523601 31523771 1 -chr20 31529871 31529924 1 -chr20 31530030 31530439 1 -chr20 31542774 31542982 1 -chr20 31549205 31549591 1 -chr20 31552234 31552542 1 -chr20 31559692 31560212 1 -chr20 31565407 31565452 1 -chr20 31572932 31573241 1 -chr20 31577837 31578068 1 -chr20 31580546 31580712 1 -chr20 31587893 31588502 1 -chr20 31588664 31588697 1 -chr20 31594396 31594641 1 -chr20 31600550 31600578 1 -chr20 31601759 31601805 1 -chr20 31619467 31619733 1 -chr20 31631535 31631830 1 -chr20 31638261 31638447 1 -chr20 31664365 31664535 1 -chr20 31671918 31671948 1 -chr20 31675622 31675912 1 -chr20 31676641 31676836 1 -chr20 31699803 31699983 1 -chr20 31704919 31705270 1 -chr20 31710726 31710898 1 -chr20 31720950 31721650 1 -chr20 31727315 31727621 1 -chr20 31728971 31729051 1 -chr20 31733303 31733369 1 -chr20 31739735 31740237 1 -chr20 31761432 31761478 1 -chr20 31762735 31763053 1 -chr20 31765669 31765764 1 -chr20 31777468 31777703 1 -chr20 31779279 31780006 1 -chr20 31792524 31792606 1 -chr20 31822114 31822538 1 -chr20 31824879 31825056 1 -chr20 31832518 31832612 1 -chr20 31832627 31832706 1 -chr20 31833506 31833695 1 -chr20 31834057 31834133 1 -chr20 31834250 31834460 1 -chr20 31836167 31836346 1 -chr20 31842873 31843377 1 -chr20 31843940 31844089 1 -chr20 31848697 31848973 1 -chr20 31849721 31849927 1 -chr20 31861422 31861898 1 -chr20 31863348 31863578 1 -chr20 31869252 31869415 1 -chr20 31869546 31869684 1 -chr20 31871732 31872094 1 -chr20 31874924 31875161 1 -chr20 31876187 31876272 1 -chr20 31877710 31878167 1 -chr20 31879798 31880009 1 -chr20 31882035 31882113 1 -chr20 31886153 31886360 1 -chr20 31886889 31887137 1 -chr20 31901422 31901743 1 -chr20 31906756 31906800 1 -chr20 31914033 31914237 1 -chr20 31924627 31924795 1 -chr20 31935789 31935917 1 -chr20 31937432 31937626 1 -chr20 31943950 31944259 1 -chr20 31947786 31947832 1 -chr20 31955837 31955863 1 -chr20 31956777 31957000 1 -chr20 31962083 31962491 1 -chr20 31963946 31964000 1 -chr20 31964006 31964055 1 -chr20 31966204 31966867 1 -chr20 31974972 31975179 1 -chr20 31983849 31983890 1 -chr20 31986784 31986809 1 -chr20 31988620 31988988 1 -chr20 31988988 31988997 2 -chr20 31988997 31989195 1 -chr20 31991926 31992012 1 -chr20 31995677 31996041 1 -chr20 31996716 31997141 1 -chr20 31998355 31998563 1 -chr20 31998650 31999137 1 -chr20 32003270 32003651 1 -chr20 32018811 32019006 1 -chr20 32021840 32022047 1 -chr20 32024589 32024644 1 -chr20 32025626 32025849 1 -chr20 32036707 32036909 1 -chr20 32047025 32047052 1 -chr20 32050839 32051292 1 -chr20 32051379 32051546 1 -chr20 32063358 32063498 1 -chr20 32079632 32079848 1 -chr20 32082761 32083114 1 -chr20 32090365 32090743 1 -chr20 32123421 32123799 1 -chr20 32132736 32132891 1 -chr20 32133326 32133458 1 -chr20 32138422 32138524 1 -chr20 32143600 32143866 1 -chr20 32159206 32159446 1 -chr20 32159482 32159675 1 -chr20 32159815 32160122 1 -chr20 32176451 32176480 1 -chr20 32184978 32185109 1 -chr20 32185125 32185308 1 -chr20 32191407 32191694 1 -chr20 32191764 32191927 1 -chr20 32192756 32192998 1 -chr20 32202070 32202249 1 -chr20 32203218 32203475 1 -chr20 32221051 32221291 1 -chr20 32231486 32232000 1 -chr20 32232482 32232649 1 -chr20 32246283 32246328 1 -chr20 32249255 32249522 1 -chr20 32257849 32257918 1 -chr20 32267974 32268026 1 -chr20 32272173 32272392 1 -chr20 32272569 32272809 1 -chr20 32276846 32276911 1 -chr20 32279530 32279608 1 -chr20 32284186 32284551 1 -chr20 32285226 32285429 1 -chr20 32294323 32294531 1 -chr20 32296572 32296663 1 -chr20 32303303 32303338 1 -chr20 32304958 32305043 1 -chr20 32310744 32311268 1 -chr20 32314320 32314347 1 -chr20 32320109 32320141 1 -chr20 32332085 32332280 1 -chr20 32352355 32352603 1 -chr20 32354416 32354851 1 -chr20 32366058 32366582 1 -chr20 32384293 32384474 1 -chr20 32393619 32393672 1 -chr20 32398296 32398644 1 -chr20 32402647 32402827 1 -chr20 32412152 32412304 1 -chr20 32413193 32413309 1 -chr20 32414507 32414696 1 -chr20 32439739 32440208 1 -chr20 32442584 32442758 1 -chr20 32446015 32446204 1 -chr20 32454377 32455105 1 -chr20 32469570 32469670 1 -chr20 32472534 32472894 1 -chr20 32474518 32474733 1 -chr20 32479621 32479856 1 -chr20 32482307 32482571 1 -chr20 32487242 32487418 1 -chr20 32488064 32488128 1 -chr20 32498746 32498934 1 -chr20 32500955 32501387 1 -chr20 32502332 32502393 1 -chr20 32521969 32522142 1 -chr20 32528608 32528843 1 -chr20 32541146 32541550 1 -chr20 32556630 32557203 1 -chr20 32558937 32559135 1 -chr20 32559709 32560102 1 -chr20 32560933 32561170 1 -chr20 32578757 32578966 1 -chr20 32581165 32581339 1 -chr20 32581507 32581724 1 -chr20 32582151 32582360 1 -chr20 32582452 32582526 1 -chr20 32583748 32584174 1 -chr20 32585075 32585337 1 -chr20 32589042 32589248 1 -chr20 32600791 32600998 1 -chr20 32602840 32603035 1 -chr20 32604128 32604469 1 -chr20 32606386 32606751 1 -chr20 32614274 32614430 1 -chr20 32621266 32621292 1 -chr20 32623448 32623660 1 -chr20 32624682 32624870 1 -chr20 32624877 32625323 1 -chr20 32625743 32625770 1 -chr20 32626831 32627094 1 -chr20 32642931 32643202 1 -chr20 32650093 32650289 1 -chr20 32652100 32652174 1 -chr20 32663011 32663107 1 -chr20 32663882 32664211 1 -chr20 32666677 32666716 1 -chr20 32670868 32671002 1 -chr20 32672739 32673110 1 -chr20 32678802 32678860 1 -chr20 32685089 32685252 1 -chr20 32686026 32686286 1 -chr20 32689041 32689448 1 -chr20 32689601 32689780 1 -chr20 32718046 32718159 1 -chr20 32733768 32733926 1 -chr20 32745399 32745476 1 -chr20 32747740 32748018 1 -chr20 32755430 32755512 1 -chr20 32756792 32756846 1 -chr20 32758307 32758439 1 -chr20 32763829 32764066 1 -chr20 32764376 32764625 1 -chr20 32770755 32770830 1 -chr20 32780024 32780406 1 -chr20 32782504 32782724 1 -chr20 32784053 32784135 1 -chr20 32788894 32789139 1 -chr20 32796824 32797013 1 -chr20 32800948 32801237 1 -chr20 32803454 32803690 1 -chr20 32806420 32806664 1 -chr20 32811482 32811546 1 -chr20 32813437 32813477 1 -chr20 32814680 32814754 1 -chr20 32817515 32817559 1 -chr20 32818819 32818862 1 -chr20 32827483 32827583 1 -chr20 32834034 32834237 1 -chr20 32848782 32849007 1 -chr20 32852817 32852951 1 -chr20 32863300 32863471 1 -chr20 32885357 32885537 1 -chr20 32885998 32886156 1 -chr20 32893831 32894100 1 -chr20 32902847 32903211 1 -chr20 32907234 32907713 1 -chr20 32911109 32911408 1 -chr20 32911711 32911889 1 -chr20 32912212 32912457 1 -chr20 32917052 32917389 1 -chr20 32918797 32919000 1 -chr20 32932290 32932324 1 -chr20 32943099 32943301 1 -chr20 32951359 32951703 1 -chr20 32954693 32954989 1 -chr20 32958657 32958745 1 -chr20 32969708 32969920 1 -chr20 32977909 32978194 1 -chr20 32991199 32991428 1 -chr20 32992542 32993071 1 -chr20 32998432 32998700 1 -chr20 33000018 33000243 1 -chr20 33004514 33004670 1 -chr20 33019349 33019447 1 -chr20 33019757 33020055 1 -chr20 33020876 33021325 1 -chr20 33021353 33021431 1 -chr20 33021460 33021688 1 -chr20 33023815 33023978 1 -chr20 33024105 33024367 1 -chr20 33026413 33026915 1 -chr20 33026991 33027259 1 -chr20 33028077 33028151 1 -chr20 33030071 33030407 1 -chr20 33033867 33034063 1 -chr20 33038795 33038996 1 -chr20 33051360 33051556 1 -chr20 33051639 33052172 1 -chr20 33057277 33057331 1 -chr20 33064936 33065131 1 -chr20 33068661 33068877 1 -chr20 33083227 33083473 1 -chr20 33083690 33083984 1 -chr20 33084553 33084953 1 -chr20 33089274 33089527 1 -chr20 33089580 33089780 1 -chr20 33096426 33096498 1 -chr20 33099192 33099348 1 -chr20 33112697 33112887 1 -chr20 33119062 33119135 1 -chr20 33133041 33133246 1 -chr20 33136895 33137323 1 -chr20 33139003 33139204 1 -chr20 33149680 33149866 1 -chr20 33150396 33150600 1 -chr20 33151188 33151484 1 -chr20 33153821 33153846 1 -chr20 33155754 33156203 1 -chr20 33166519 33166887 1 -chr20 33176600 33176768 1 -chr20 33177732 33177958 1 -chr20 33181635 33181886 1 -chr20 33182596 33182636 1 -chr20 33191276 33191507 1 -chr20 33192813 33193093 1 -chr20 33200517 33200693 1 -chr20 33217157 33217883 1 -chr20 33222812 33223277 1 -chr20 33223597 33223914 1 -chr20 33225197 33225776 1 -chr20 33226762 33227147 1 -chr20 33238445 33238960 1 -chr20 33240558 33240587 1 -chr20 33244776 33245095 1 -chr20 33251609 33251889 1 -chr20 33255181 33255699 1 -chr20 33262867 33263161 1 -chr20 33272093 33272564 1 -chr20 33280111 33280659 1 -chr20 33289345 33289373 1 -chr20 33298356 33298504 1 -chr20 33298876 33299293 1 -chr20 33310879 33311074 1 -chr20 33313448 33313554 1 -chr20 33313920 33314058 1 -chr20 33314887 33315215 1 -chr20 33315731 33316007 1 -chr20 33332194 33332556 1 -chr20 33333470 33333688 1 -chr20 33334537 33334735 1 -chr20 33336829 33337045 1 -chr20 33343339 33343397 1 -chr20 33347993 33348336 1 -chr20 33348336 33348337 2 -chr20 33348337 33348560 1 -chr20 33362235 33362877 1 -chr20 33364708 33364772 1 -chr20 33373718 33374200 1 -chr20 33384932 33385270 1 -chr20 33388641 33388719 1 -chr20 33392630 33392772 1 -chr20 33396730 33397074 1 -chr20 33401090 33401257 1 -chr20 33407077 33407125 1 -chr20 33410976 33411180 1 -chr20 33421597 33421703 1 -chr20 33449771 33449812 1 -chr20 33452128 33452164 1 -chr20 33468048 33468151 1 -chr20 33479392 33479446 1 -chr20 33490647 33490961 1 -chr20 33494746 33494820 1 -chr20 33514272 33514477 1 -chr20 33532749 33532965 1 -chr20 33536866 33536948 1 -chr20 33551438 33551494 1 -chr20 33566941 33567166 1 -chr20 33581616 33582118 1 -chr20 33584027 33584091 1 -chr20 33587752 33588224 1 -chr20 33606307 33606825 1 -chr20 33611175 33611380 1 -chr20 33628753 33628985 1 -chr20 33629545 33629724 1 -chr20 33632910 33632984 1 -chr20 33646904 33647127 1 -chr20 33649710 33650086 1 -chr20 33653901 33654339 1 -chr20 33656289 33656528 1 -chr20 33672699 33672859 1 -chr20 33682824 33683021 1 -chr20 33684317 33684839 1 -chr20 33684839 33684846 2 -chr20 33684846 33685018 1 -chr20 33685828 33686322 1 -chr20 33688434 33688784 1 -chr20 33693634 33694109 1 -chr20 33708724 33708762 1 -chr20 33732529 33732986 1 -chr20 33733774 33733965 1 -chr20 33735929 33736320 1 -chr20 33746019 33746051 1 -chr20 33752470 33752687 1 -chr20 33754083 33754221 1 -chr20 33764099 33764153 1 -chr20 33784273 33784425 1 -chr20 33788787 33788896 1 -chr20 33790685 33790950 1 -chr20 33791303 33791477 1 -chr20 33796628 33796960 1 -chr20 33797720 33797822 1 -chr20 33807052 33807119 1 -chr20 33817490 33818103 1 -chr20 33824466 33824656 1 -chr20 33847416 33847640 1 -chr20 33852718 33853081 1 -chr20 33862683 33862913 1 -chr20 33864004 33864130 1 -chr20 33864409 33864826 1 -chr20 33875312 33875610 1 -chr20 33899357 33899792 1 -chr20 33902912 33903099 1 -chr20 33912265 33912500 1 -chr20 33913275 33913661 1 -chr20 33915552 33915762 1 -chr20 33926467 33926689 1 -chr20 33929754 33929977 1 -chr20 33931843 33932380 1 -chr20 33933796 33934036 1 -chr20 33943661 33943876 1 -chr20 33947956 33948081 1 -chr20 33951138 33951323 1 -chr20 33952623 33952991 1 -chr20 33955015 33955174 1 -chr20 33957887 33957930 1 -chr20 33959542 33959625 1 -chr20 33961566 33961604 1 -chr20 33978649 33978816 1 -chr20 33979768 33980177 1 -chr20 33984788 33985144 1 -chr20 33987632 33987684 1 -chr20 33994871 33995181 1 -chr20 33996399 33996598 1 -chr20 34002245 34002400 1 -chr20 34017053 34017342 1 -chr20 34018595 34018748 1 -chr20 34020207 34020435 1 -chr20 34026998 34027570 1 -chr20 34034908 34034968 1 -chr20 34063524 34064109 1 -chr20 34069273 34069526 1 -chr20 34074451 34074661 1 -chr20 34082979 34083283 1 -chr20 34086272 34086754 1 -chr20 34087458 34087599 1 -chr20 34092542 34092591 1 -chr20 34127326 34127394 1 -chr20 34129233 34129312 1 -chr20 34140040 34140197 1 -chr20 34143843 34143897 1 -chr20 34155937 34156165 1 -chr20 34161356 34161522 1 -chr20 34171542 34171656 1 -chr20 34185950 34186120 1 -chr20 34190746 34191011 1 -chr20 34195185 34195606 1 -chr20 34208398 34208483 1 -chr20 34215077 34215132 1 -chr20 34222745 34222838 1 -chr20 34225171 34225249 1 -chr20 34230560 34230661 1 -chr20 34238655 34238868 1 -chr20 34240476 34240686 1 -chr20 34273368 34273748 1 -chr20 34282967 34283344 1 -chr20 34289217 34289247 1 -chr20 34290577 34290875 1 -chr20 34291478 34291664 1 -chr20 34306415 34306512 1 -chr20 34311027 34311081 1 -chr20 34317792 34318019 1 -chr20 34324421 34324783 1 -chr20 34332918 34332949 1 -chr20 34340971 34341017 1 -chr20 34341685 34341966 1 -chr20 34345546 34345753 1 -chr20 34349103 34349266 1 -chr20 34371553 34371584 1 -chr20 34385077 34385135 1 -chr20 34385206 34385281 1 -chr20 34398254 34398294 1 -chr20 34401251 34401457 1 -chr20 34401933 34402142 1 -chr20 34403099 34403338 1 -chr20 34423298 34423604 1 -chr20 34439406 34439983 1 -chr20 34452430 34452655 1 -chr20 34454963 34455014 1 -chr20 34455093 34455502 1 -chr20 34455613 34455671 1 -chr20 34458612 34458879 1 -chr20 34475631 34475692 1 -chr20 34482957 34483125 1 -chr20 34491741 34491866 1 -chr20 34509289 34509505 1 -chr20 34514711 34515482 1 -chr20 34520733 34520925 1 -chr20 34524776 34524852 1 -chr20 34525350 34525753 1 -chr20 34538172 34538224 1 -chr20 34549389 34549866 1 -chr20 34558497 34558844 1 -chr20 34569724 34569863 1 -chr20 34580269 34580639 1 -chr20 34580733 34580963 1 -chr20 34584311 34584504 1 -chr20 34587055 34587322 1 -chr20 34602182 34602235 1 -chr20 34609579 34609620 1 -chr20 34630119 34630291 1 -chr20 34648777 34648834 1 -chr20 34657496 34657730 1 -chr20 34658456 34658481 1 -chr20 34661914 34662016 1 -chr20 34665594 34665965 1 -chr20 34676699 34677034 1 -chr20 34684672 34685035 1 -chr20 34706850 34707239 1 -chr20 34713842 34714041 1 -chr20 34727781 34727938 1 -chr20 34739444 34739653 1 -chr20 34741815 34742017 1 -chr20 34743093 34743739 1 -chr20 34747056 34747344 1 -chr20 34754543 34754760 1 -chr20 34762189 34762374 1 -chr20 34777013 34777059 1 -chr20 34791429 34791845 1 -chr20 34810057 34810368 1 -chr20 34816906 34817005 1 -chr20 34824669 34825010 1 -chr20 34825253 34825441 1 -chr20 34825441 34825442 2 -chr20 34825442 34825704 1 -chr20 34833313 34833471 1 -chr20 34835553 34835599 1 -chr20 34836445 34836763 1 -chr20 34845119 34845128 1 -chr20 34845128 34845150 2 -chr20 34845150 34845153 1 -chr20 34846085 34846114 1 -chr20 34851571 34851941 1 -chr20 34871309 34871799 1 -chr20 34874103 34874265 1 -chr20 34874545 34874916 1 -chr20 34878221 34878418 1 -chr20 34904797 34905001 1 -chr20 34911864 34911961 1 -chr20 34913101 34913606 1 -chr20 34933339 34933760 1 -chr20 34940610 34940985 1 -chr20 34958600 34958664 1 -chr20 34964176 34964491 1 -chr20 34969749 34969831 1 -chr20 34972208 34972614 1 -chr20 34977869 34978247 1 -chr20 34979998 34980175 1 -chr20 34980464 34980511 1 -chr20 34986338 34986712 1 -chr20 34993274 34993496 1 -chr20 34998738 34999327 1 -chr20 35004904 35005006 1 -chr20 35005918 35006110 1 -chr20 35019856 35020071 1 -chr20 35022181 35022228 1 -chr20 35032941 35033064 1 -chr20 35038159 35038361 1 -chr20 35039977 35040214 1 -chr20 35051683 35051893 1 -chr20 35052860 35053310 1 -chr20 35066161 35066332 1 -chr20 35072374 35072437 1 -chr20 35086911 35086985 1 -chr20 35087208 35087269 1 -chr20 35091108 35091261 1 -chr20 35092916 35093162 1 -chr20 35118471 35118593 1 -chr20 35125563 35125594 1 -chr20 35143169 35143400 1 -chr20 35144625 35145145 1 -chr20 35147459 35147648 1 -chr20 35154140 35154185 1 -chr20 35162998 35163059 1 -chr20 35165931 35165956 1 -chr20 35167292 35167380 1 -chr20 35168405 35168458 1 -chr20 35173662 35173715 1 -chr20 35174759 35174962 1 -chr20 35198038 35198085 1 -chr20 35201419 35201510 1 -chr20 35219317 35219342 1 -chr20 35223955 35224223 1 -chr20 35231433 35231783 1 -chr20 35237849 35238020 1 -chr20 35242241 35242305 1 -chr20 35252493 35252730 1 -chr20 35257860 35258028 1 -chr20 35260814 35260895 1 -chr20 35265328 35265366 1 -chr20 35267239 35267566 1 -chr20 35275381 35275506 1 -chr20 35277792 35278290 1 -chr20 35280108 35280283 1 -chr20 35285203 35285663 1 -chr20 35290267 35290486 1 -chr20 35296673 35296935 1 -chr20 35302533 35302846 1 -chr20 35313877 35314017 1 -chr20 35319956 35320134 1 -chr20 35335362 35335675 1 -chr20 35339509 35339794 1 -chr20 35339951 35340148 1 -chr20 35349143 35349809 1 -chr20 35354509 35354555 1 -chr20 35365513 35365599 1 -chr20 35380061 35380235 1 -chr20 35382171 35382226 1 -chr20 35392370 35392775 1 -chr20 35394516 35395053 1 -chr20 35407195 35407235 1 -chr20 35412892 35412935 1 -chr20 35450617 35450766 1 -chr20 35464383 35464531 1 -chr20 35465674 35466055 1 -chr20 35472964 35473153 1 -chr20 35474441 35475017 1 -chr20 35475572 35475804 1 -chr20 35480738 35480801 1 -chr20 35482794 35483095 1 -chr20 35489451 35489909 1 -chr20 35499680 35500321 1 -chr20 35502527 35502890 1 -chr20 35515219 35515373 1 -chr20 35517057 35517421 1 -chr20 35517631 35517680 1 -chr20 35522015 35522456 1 -chr20 35522911 35523161 1 -chr20 35528660 35529089 1 -chr20 35532483 35532515 1 -chr20 35535701 35535766 1 -chr20 35535828 35536271 1 -chr20 35542350 35542542 1 -chr20 35549846 35549900 1 -chr20 35553874 35554152 1 -chr20 35563724 35563892 1 -chr20 35564337 35564503 1 -chr20 35565077 35565252 1 -chr20 35568410 35568576 1 -chr20 35572769 35572871 1 -chr20 35576263 35576592 1 -chr20 35582089 35582302 1 -chr20 35586262 35586391 1 -chr20 35586710 35586757 1 -chr20 35591768 35592093 1 -chr20 35597568 35597821 1 -chr20 35598516 35598701 1 -chr20 35601922 35602152 1 -chr20 35604018 35604369 1 -chr20 35618877 35619140 1 -chr20 35625853 35626247 1 -chr20 35626718 35626928 1 -chr20 35632266 35632414 1 -chr20 35638225 35638455 1 -chr20 35640303 35640595 1 -chr20 35641660 35641846 1 -chr20 35643551 35643618 1 -chr20 35647993 35648048 1 -chr20 35651280 35651448 1 -chr20 35654848 35655041 1 -chr20 35660515 35660785 1 -chr20 35684568 35684632 1 -chr20 35699858 35700282 1 -chr20 35700948 35701189 1 -chr20 35711555 35711775 1 -chr20 35722879 35722922 1 -chr20 35757500 35757809 1 -chr20 35763504 35763549 1 -chr20 35765300 35765346 1 -chr20 35768478 35768802 1 -chr20 35769936 35770030 1 -chr20 35770206 35770299 1 -chr20 35772432 35772845 1 -chr20 35790463 35790872 1 -chr20 35791664 35791995 1 -chr20 35810621 35810799 1 -chr20 35826501 35826773 1 -chr20 35831454 35831607 1 -chr20 35853186 35853306 1 -chr20 35854229 35854756 1 -chr20 35878966 35879321 1 -chr20 35885448 35885782 1 -chr20 35897901 35897959 1 -chr20 35900123 35900450 1 -chr20 35901746 35902246 1 -chr20 35938982 35939559 1 -chr20 35942449 35942633 1 -chr20 35944365 35944534 1 -chr20 35945394 35945627 1 -chr20 35948513 35948920 1 -chr20 35974294 35974594 1 -chr20 35980605 35980708 1 -chr20 35983553 35983959 1 -chr20 35984337 35984411 1 -chr20 35986670 35986952 1 -chr20 35992414 35992581 1 -chr20 36001689 36001733 1 -chr20 36002398 36002428 1 -chr20 36009326 36009388 1 -chr20 36011418 36011526 1 -chr20 36017594 36017917 1 -chr20 36026340 36026580 1 -chr20 36028010 36028481 1 -chr20 36031335 36031682 1 -chr20 36043190 36043236 1 -chr20 36046203 36046427 1 -chr20 36049830 36050244 1 -chr20 36050513 36050686 1 -chr20 36050864 36051011 1 -chr20 36065787 36066021 1 -chr20 36073750 36073801 1 -chr20 36080580 36080640 1 -chr20 36092762 36093026 1 -chr20 36099042 36099135 1 -chr20 36099605 36099777 1 -chr20 36116122 36116334 1 -chr20 36119725 36120020 1 -chr20 36135615 36135992 1 -chr20 36138871 36139114 1 -chr20 36153045 36153483 1 -chr20 36155041 36155169 1 -chr20 36156964 36156997 1 -chr20 36168257 36168457 1 -chr20 36171670 36171998 1 -chr20 36173175 36173452 1 -chr20 36182906 36183113 1 -chr20 36187431 36187789 1 -chr20 36188222 36188397 1 -chr20 36190457 36190580 1 -chr20 36194324 36194576 1 -chr20 36199784 36199899 1 -chr20 36206562 36206676 1 -chr20 36208528 36208666 1 -chr20 36209389 36209577 1 -chr20 36213520 36213718 1 -chr20 36217568 36217867 1 -chr20 36218322 36218710 1 -chr20 36222167 36222451 1 -chr20 36225235 36225390 1 -chr20 36235407 36235440 1 -chr20 36237013 36237193 1 -chr20 36242465 36242551 1 -chr20 36266894 36267256 1 -chr20 36273981 36274393 1 -chr20 36281498 36281665 1 -chr20 36286615 36286662 1 -chr20 36297272 36297543 1 -chr20 36298367 36298724 1 -chr20 36300308 36300472 1 -chr20 36300806 36301028 1 -chr20 36309415 36309834 1 -chr20 36311737 36312256 1 -chr20 36314077 36314267 1 -chr20 36314871 36314947 1 -chr20 36319780 36319976 1 -chr20 36331055 36331234 1 -chr20 36341195 36341362 1 -chr20 36345116 36345592 1 -chr20 36351634 36351835 1 -chr20 36357335 36357876 1 -chr20 36367320 36367632 1 -chr20 36372034 36372295 1 -chr20 36376842 36377040 1 -chr20 36392630 36392668 1 -chr20 36400825 36401151 1 -chr20 36403366 36403583 1 -chr20 36405562 36405784 1 -chr20 36406342 36406369 1 -chr20 36411913 36412544 1 -chr20 36413043 36413087 1 -chr20 36414745 36414947 1 -chr20 36417043 36417408 1 -chr20 36426298 36426332 1 -chr20 36429719 36430217 1 -chr20 36432822 36433314 1 -chr20 36435652 36435895 1 -chr20 36438054 36438149 1 -chr20 36439754 36439952 1 -chr20 36442610 36442976 1 -chr20 36446510 36446773 1 -chr20 36456081 36456356 1 -chr20 36456388 36456566 1 -chr20 36465501 36465965 1 -chr20 36466976 36467015 1 -chr20 36483437 36483686 1 -chr20 36487344 36487512 1 -chr20 36489186 36489385 1 -chr20 36498646 36498829 1 -chr20 36499731 36499947 1 -chr20 36511283 36511331 1 -chr20 36517489 36517532 1 -chr20 36518453 36518637 1 -chr20 36533834 36533916 1 -chr20 36541935 36542358 1 -chr20 36548350 36548850 1 -chr20 36550866 36551177 1 -chr20 36556590 36556851 1 -chr20 36579685 36579934 1 -chr20 36588735 36589013 1 -chr20 36590147 36590252 1 -chr20 36597153 36597332 1 -chr20 36605551 36605754 1 -chr20 36610732 36610846 1 -chr20 36613036 36613087 1 -chr20 36615649 36615874 1 -chr20 36628085 36628243 1 -chr20 36630907 36631124 1 -chr20 36632187 36632733 1 -chr20 36645896 36646133 1 -chr20 36648592 36648688 1 -chr20 36653053 36653302 1 -chr20 36654609 36654805 1 -chr20 36655293 36655863 1 -chr20 36658405 36658528 1 -chr20 36676146 36676508 1 -chr20 36676990 36677295 1 -chr20 36689315 36689685 1 -chr20 36708800 36708933 1 -chr20 36711908 36711975 1 -chr20 36724086 36724436 1 -chr20 36734334 36734876 1 -chr20 36742419 36742676 1 -chr20 36746627 36746817 1 -chr20 36785199 36785786 1 -chr20 36797562 36797895 1 -chr20 36804221 36804450 1 -chr20 36815601 36816003 1 -chr20 36831366 36831565 1 -chr20 36836803 36837091 1 -chr20 36848491 36848830 1 -chr20 36859291 36859672 1 -chr20 36862195 36862630 1 -chr20 36863830 36864029 1 -chr20 36865882 36866026 1 -chr20 36873494 36873826 1 -chr20 36891042 36891281 1 -chr20 36893584 36893832 1 -chr20 36900950 36901093 1 -chr20 36903298 36903342 1 -chr20 36903346 36903384 1 -chr20 36918175 36918229 1 -chr20 36935645 36935706 1 -chr20 36938662 36938706 1 -chr20 36939616 36939767 1 -chr20 36975883 36975980 1 -chr20 36977357 36977413 1 -chr20 36982765 36982959 1 -chr20 36986232 36986452 1 -chr20 36999577 36999730 1 -chr20 37005655 37005930 1 -chr20 37012326 37012352 1 -chr20 37012743 37012801 1 -chr20 37028706 37028816 1 -chr20 37038510 37038577 1 -chr20 37055935 37056020 1 -chr20 37087068 37087121 1 -chr20 37106457 37106511 1 -chr20 37116622 37116855 1 -chr20 37126118 37126195 1 -chr20 37126205 37126249 1 -chr20 37137824 37138012 1 -chr20 37142574 37142645 1 -chr20 37148413 37148453 1 -chr20 37150262 37150293 1 -chr20 37150826 37150886 1 -chr20 37166762 37166822 1 -chr20 37178667 37178766 1 -chr20 37178767 37178854 1 -chr20 37184853 37185067 1 -chr20 37235185 37235387 1 -chr20 37245202 37245506 1 -chr20 37274954 37275209 1 -chr20 37276066 37276141 1 -chr20 37278797 37278881 1 -chr20 37285722 37285921 1 -chr20 37317037 37317211 1 -chr20 37333818 37334239 1 -chr20 37334264 37334306 1 -chr20 37337578 37337765 1 -chr20 37343062 37343242 1 -chr20 37347714 37347799 1 -chr20 37355967 37356194 1 -chr20 37356500 37356707 1 -chr20 37358531 37358811 1 -chr20 37358934 37359137 1 -chr20 37374600 37374627 1 -chr20 37378900 37379294 1 -chr20 37385939 37386572 1 -chr20 37386780 37387007 1 -chr20 37388769 37388960 1 -chr20 37389191 37389581 1 -chr20 37394456 37394774 1 -chr20 37396119 37396323 1 -chr20 37400200 37400529 1 -chr20 37405021 37405214 1 -chr20 37408358 37408383 1 -chr20 37409016 37409547 1 -chr20 37420383 37420669 1 -chr20 37422142 37422169 1 -chr20 37425489 37425697 1 -chr20 37430319 37430351 1 -chr20 37433017 37433201 1 -chr20 37435224 37435934 1 -chr20 37437943 37438400 1 -chr20 37440166 37440531 1 -chr20 37446341 37446628 1 -chr20 37446968 37447424 1 -chr20 37450503 37450531 1 -chr20 37454252 37454450 1 -chr20 37458847 37459005 1 -chr20 37469959 37470235 1 -chr20 37470563 37470617 1 -chr20 37490634 37491112 1 -chr20 37491447 37491740 1 -chr20 37505120 37505527 1 -chr20 37512440 37512848 1 -chr20 37515562 37515926 1 -chr20 37516918 37517318 1 -chr20 37517456 37517760 1 -chr20 37527200 37527801 1 -chr20 37527900 37528123 1 -chr20 37528352 37528589 1 -chr20 37529174 37529423 1 -chr20 37556562 37556931 1 -chr20 37562202 37562246 1 -chr20 37565490 37565534 1 -chr20 37573189 37573221 1 -chr20 37574471 37574769 1 -chr20 37575681 37576158 1 -chr20 37590779 37591177 1 -chr20 37593149 37593457 1 -chr20 37597964 37598369 1 -chr20 37601926 37602344 1 -chr20 37605252 37605446 1 -chr20 37613701 37614167 1 -chr20 37614277 37614547 1 -chr20 37623649 37623821 1 -chr20 37630837 37631228 1 -chr20 37635668 37635827 1 -chr20 37647378 37647405 1 -chr20 37647593 37647658 1 -chr20 37648199 37648409 1 -chr20 37656551 37656998 1 -chr20 37667100 37667400 1 -chr20 37672523 37672679 1 -chr20 37672679 37672688 2 -chr20 37672688 37672864 1 -chr20 37677476 37677871 1 -chr20 37693913 37694087 1 -chr20 37697304 37697682 1 -chr20 37703858 37703893 1 -chr20 37705839 37706041 1 -chr20 37711652 37711878 1 -chr20 37714128 37714312 1 -chr20 37717991 37718136 1 -chr20 37718252 37718291 1 -chr20 37718409 37718529 1 -chr20 37730266 37730370 1 -chr20 37731449 37731506 1 -chr20 37784027 37784317 1 -chr20 37803511 37804201 1 -chr20 37806170 37806524 1 -chr20 37806807 37807071 1 -chr20 37817885 37818253 1 -chr20 37825176 37825241 1 -chr20 37831428 37831476 1 -chr20 37833193 37833446 1 -chr20 37838210 37838418 1 -chr20 37848732 37849216 1 -chr20 37861167 37861398 1 -chr20 37862955 37863174 1 -chr20 37867144 37867355 1 -chr20 37868814 37869058 1 -chr20 37871404 37871678 1 -chr20 37874645 37874844 1 -chr20 37877904 37878140 1 -chr20 37884810 37885175 1 -chr20 37886047 37886303 1 -chr20 37887117 37887167 1 -chr20 37893838 37893875 1 -chr20 37898093 37898382 1 -chr20 37905315 37905377 1 -chr20 37908131 37908430 1 -chr20 37909054 37909594 1 -chr20 37913418 37913710 1 -chr20 37920916 37921029 1 -chr20 37921314 37921706 1 -chr20 37925047 37925109 1 -chr20 37931150 37931537 1 -chr20 37933382 37933862 1 -chr20 37972883 37973163 1 -chr20 37976369 37976604 1 -chr20 37978922 37979189 1 -chr20 37984027 37984448 1 -chr20 37985645 37985688 1 -chr20 38001212 38001430 1 -chr20 38003608 38003694 1 -chr20 38007814 38008401 1 -chr20 38014316 38014671 1 -chr20 38024584 38024980 1 -chr20 38039077 38039303 1 -chr20 38041837 38042007 1 -chr20 38044966 38045179 1 -chr20 38054081 38054251 1 -chr20 38059623 38059813 1 -chr20 38062109 38062400 1 -chr20 38077163 38077195 1 -chr20 38079492 38079581 1 -chr20 38081703 38081878 1 -chr20 38085311 38085631 1 -chr20 38088099 38088238 1 -chr20 38091433 38091643 1 -chr20 38092579 38092898 1 -chr20 38108447 38108857 1 -chr20 38119555 38119944 1 -chr20 38121576 38121604 1 -chr20 38129390 38129568 1 -chr20 38131988 38132256 1 -chr20 38134365 38134597 1 -chr20 38140465 38140690 1 -chr20 38141576 38141891 1 -chr20 38143556 38143837 1 -chr20 38148518 38148630 1 -chr20 38148718 38148983 1 -chr20 38154018 38154059 1 -chr20 38162819 38162935 1 -chr20 38162935 38162944 2 -chr20 38162944 38163401 1 -chr20 38165549 38165675 1 -chr20 38166471 38166646 1 -chr20 38166893 38166962 1 -chr20 38172782 38173049 1 -chr20 38184535 38184591 1 -chr20 38194575 38194609 1 -chr20 38199670 38199835 1 -chr20 38202658 38202863 1 -chr20 38209784 38210087 1 -chr20 38214852 38215144 1 -chr20 38222877 38223113 1 -chr20 38228368 38228914 1 -chr20 38231117 38231383 1 -chr20 38231766 38231984 1 -chr20 38234407 38234797 1 -chr20 38243026 38243408 1 -chr20 38244253 38244688 1 -chr20 38260401 38260745 1 -chr20 38263449 38263633 1 -chr20 38264214 38264421 1 -chr20 38268341 38268510 1 -chr20 38277588 38277867 1 -chr20 38283762 38283867 1 -chr20 38292854 38293260 1 -chr20 38294763 38295080 1 -chr20 38296418 38296667 1 -chr20 38297584 38297610 1 -chr20 38307479 38307652 1 -chr20 38309284 38309802 1 -chr20 38310417 38310710 1 -chr20 38311936 38312257 1 -chr20 38316489 38316708 1 -chr20 38317136 38317502 1 -chr20 38322886 38323146 1 -chr20 38323229 38323515 1 -chr20 38323674 38323812 1 -chr20 38325043 38325146 1 -chr20 38331017 38331153 1 -chr20 38332678 38332879 1 -chr20 38335338 38335494 1 -chr20 38342035 38342456 1 -chr20 38346739 38347253 1 -chr20 38353721 38353958 1 -chr20 38354266 38354512 1 -chr20 38356990 38357050 1 -chr20 38361050 38361115 1 -chr20 38364367 38364510 1 -chr20 38372069 38372252 1 -chr20 38372253 38372836 1 -chr20 38378776 38378873 1 -chr20 38394810 38394839 1 -chr20 38407484 38407537 1 -chr20 38407713 38407800 1 -chr20 38411202 38411507 1 -chr20 38417337 38417512 1 -chr20 38421143 38421337 1 -chr20 38424648 38424826 1 -chr20 38435861 38435944 1 -chr20 38467390 38467446 1 -chr20 38470119 38470619 1 -chr20 38475886 38476536 1 -chr20 38481701 38481927 1 -chr20 38487454 38487635 1 -chr20 38488431 38489076 1 -chr20 38494077 38494243 1 -chr20 38498047 38498152 1 -chr20 38508171 38508429 1 -chr20 38513828 38514051 1 -chr20 38517394 38517830 1 -chr20 38539666 38539889 1 -chr20 38546072 38546427 1 -chr20 38547064 38547427 1 -chr20 38561402 38561646 1 -chr20 38562140 38562613 1 -chr20 38564066 38564773 1 -chr20 38576936 38577309 1 -chr20 38578125 38578352 1 -chr20 38597630 38597702 1 -chr20 38597970 38598158 1 -chr20 38599239 38599471 1 -chr20 38607705 38607992 1 -chr20 38617063 38617444 1 -chr20 38621030 38621638 1 -chr20 38650225 38650437 1 -chr20 38654900 38655124 1 -chr20 38662190 38662306 1 -chr20 38671496 38671704 1 -chr20 38671705 38671879 1 -chr20 38673905 38674099 1 -chr20 38674414 38674476 1 -chr20 38677714 38677907 1 -chr20 38686071 38686257 1 -chr20 38690683 38691021 1 -chr20 38692714 38692953 1 -chr20 38708067 38708320 1 -chr20 38714213 38714432 1 -chr20 38718388 38718427 1 -chr20 38718735 38718939 1 -chr20 38723639 38724026 1 -chr20 38726595 38726834 1 -chr20 38727466 38727623 1 -chr20 38733585 38733908 1 -chr20 38741122 38741400 1 -chr20 38744989 38745219 1 -chr20 38747064 38747139 1 -chr20 38748517 38748775 1 -chr20 38756294 38756488 1 -chr20 38757194 38757756 1 -chr20 38764073 38764262 1 -chr20 38765813 38766072 1 -chr20 38767792 38768071 1 -chr20 38771523 38771882 1 -chr20 38791863 38791888 1 -chr20 38793685 38794032 1 -chr20 38810108 38810351 1 -chr20 38811812 38812059 1 -chr20 38856437 38856538 1 -chr20 38857702 38858213 1 -chr20 38858311 38858740 1 -chr20 38870123 38870201 1 -chr20 38873812 38873858 1 -chr20 38884731 38884760 1 -chr20 38887961 38888147 1 -chr20 38888976 38889166 1 -chr20 38890346 38890612 1 -chr20 38914379 38914593 1 -chr20 38932943 38933188 1 -chr20 38941971 38942224 1 -chr20 38957073 38957324 1 -chr20 38963663 38963900 1 -chr20 38975254 38975456 1 -chr20 38979301 38979814 1 -chr20 38993654 38993893 1 -chr20 38994024 38994559 1 -chr20 38999998 39000084 1 -chr20 39003646 39003954 1 -chr20 39006955 39007360 1 -chr20 39018250 39018577 1 -chr20 39027080 39027336 1 -chr20 39027886 39028385 1 -chr20 39034872 39034978 1 -chr20 39040261 39040400 1 -chr20 39050024 39050233 1 -chr20 39050277 39050495 1 -chr20 39052178 39052526 1 -chr20 39070266 39070465 1 -chr20 39074056 39074183 1 -chr20 39082611 39082813 1 -chr20 39083529 39083918 1 -chr20 39102543 39102716 1 -chr20 39104586 39105128 1 -chr20 39105240 39105293 1 -chr20 39108191 39108540 1 -chr20 39110246 39110277 1 -chr20 39118475 39118671 1 -chr20 39120235 39120552 1 -chr20 39121333 39121771 1 -chr20 39122634 39122718 1 -chr20 39124965 39125049 1 -chr20 39141338 39141736 1 -chr20 39151700 39151873 1 -chr20 39156824 39157050 1 -chr20 39159950 39160619 1 -chr20 39165781 39166406 1 -chr20 39167342 39168097 1 -chr20 39169904 39170114 1 -chr20 39170768 39171202 1 -chr20 39174432 39174721 1 -chr20 39174999 39175266 1 -chr20 39189182 39189400 1 -chr20 39190768 39191002 1 -chr20 39199406 39199679 1 -chr20 39199785 39200100 1 -chr20 39200442 39200972 1 -chr20 39203089 39203311 1 -chr20 39212183 39212339 1 -chr20 39217723 39218058 1 -chr20 39225664 39225762 1 -chr20 39226070 39226412 1 -chr20 39230080 39230194 1 -chr20 39234532 39234786 1 -chr20 39245374 39245588 1 -chr20 39252385 39252579 1 -chr20 39268690 39269109 1 -chr20 39289536 39289787 1 -chr20 39292108 39292470 1 -chr20 39293861 39294028 1 -chr20 39295098 39295364 1 -chr20 39295772 39295888 1 -chr20 39299889 39300017 1 -chr20 39303747 39303960 1 -chr20 39305005 39305327 1 -chr20 39306501 39306712 1 -chr20 39316006 39316243 1 -chr20 39316596 39317228 1 -chr20 39323777 39324125 1 -chr20 39331102 39331231 1 -chr20 39342233 39342282 1 -chr20 39357875 39358143 1 -chr20 39358656 39358876 1 -chr20 39376312 39376593 1 -chr20 39393717 39394319 1 -chr20 39394710 39395109 1 -chr20 39395389 39395921 1 -chr20 39395921 39395931 2 -chr20 39395931 39396355 1 -chr20 39419380 39419756 1 -chr20 39430562 39430780 1 -chr20 39440584 39440776 1 -chr20 39451128 39451165 1 -chr20 39456680 39456967 1 -chr20 39458840 39459104 1 -chr20 39459170 39459265 1 -chr20 39462389 39462742 1 -chr20 39472156 39472521 1 -chr20 39474961 39475290 1 -chr20 39475971 39476160 1 -chr20 39488312 39488438 1 -chr20 39491429 39492163 1 -chr20 39495545 39495697 1 -chr20 39503954 39504616 1 -chr20 39512509 39512591 1 -chr20 39527405 39527708 1 -chr20 39529985 39530109 1 -chr20 39531897 39532639 1 -chr20 39533604 39534235 1 -chr20 39535654 39535865 1 -chr20 39552687 39553048 1 -chr20 39553510 39553925 1 -chr20 39554538 39554760 1 -chr20 39557254 39557495 1 -chr20 39563335 39563691 1 -chr20 39569425 39569740 1 -chr20 39572744 39573066 1 -chr20 39574206 39574564 1 -chr20 39577825 39578011 1 -chr20 39578862 39579607 1 -chr20 39585608 39585674 1 -chr20 39603266 39603518 1 -chr20 39607441 39607899 1 -chr20 39621962 39622325 1 -chr20 39626767 39627222 1 -chr20 39640020 39640188 1 -chr20 39641249 39641555 1 -chr20 39643467 39644107 1 -chr20 39647207 39647441 1 -chr20 39654481 39654671 1 -chr20 39659878 39660117 1 -chr20 39675067 39675573 1 -chr20 39677158 39677739 1 -chr20 39683330 39683707 1 -chr20 39692642 39693006 1 -chr20 39694569 39695015 1 -chr20 39695779 39695990 1 -chr20 39699457 39699858 1 -chr20 39727312 39727497 1 -chr20 39734747 39734934 1 -chr20 39742777 39742881 1 -chr20 39753171 39753394 1 -chr20 39764888 39764945 1 -chr20 39779309 39779448 1 -chr20 39782113 39782182 1 -chr20 39785706 39785970 1 -chr20 39789537 39789716 1 -chr20 39792614 39792907 1 -chr20 39794280 39794624 1 -chr20 39813242 39814062 1 -chr20 39826097 39826307 1 -chr20 39829382 39829780 1 -chr20 39839475 39839531 1 -chr20 39839726 39839969 1 -chr20 39840431 39840952 1 -chr20 39853026 39853445 1 -chr20 39855587 39855920 1 -chr20 39866108 39866335 1 -chr20 39868494 39869062 1 -chr20 39875721 39876135 1 -chr20 39886459 39886731 1 -chr20 39888760 39889015 1 -chr20 39896697 39896908 1 -chr20 39907830 39907865 1 -chr20 39913778 39914162 1 -chr20 39937148 39937371 1 -chr20 39941111 39941319 1 -chr20 39942563 39942762 1 -chr20 39948085 39948299 1 -chr20 39973138 39973217 1 -chr20 39983229 39983870 1 -chr20 39984436 39984461 1 -chr20 39996035 39996257 1 -chr20 40008010 40008351 1 -chr20 40008535 40009167 1 -chr20 40021406 40021789 1 -chr20 40025065 40025165 1 -chr20 40029655 40029730 1 -chr20 40034865 40035031 1 -chr20 40046664 40046814 1 -chr20 40049092 40049436 1 -chr20 40067219 40067462 1 -chr20 40082664 40082823 1 -chr20 40105188 40105386 1 -chr20 40110677 40111540 1 -chr20 40122759 40123337 1 -chr20 40125686 40126096 1 -chr20 40127193 40127581 1 -chr20 40143768 40143980 1 -chr20 40152930 40153323 1 -chr20 40155606 40155972 1 -chr20 40164821 40165353 1 -chr20 40166931 40167053 1 -chr20 40182223 40182489 1 -chr20 40229230 40229401 1 -chr20 40230858 40230891 1 -chr20 40230957 40231348 1 -chr20 40233558 40233706 1 -chr20 40233893 40234330 1 -chr20 40240202 40240429 1 -chr20 40246079 40246445 1 -chr20 40264916 40265306 1 -chr20 40268331 40268517 1 -chr20 40270098 40270137 1 -chr20 40282481 40282685 1 -chr20 40285352 40285578 1 -chr20 40285885 40286094 1 -chr20 40287465 40287634 1 -chr20 40288362 40288649 1 -chr20 40290016 40290230 1 -chr20 40305786 40306016 1 -chr20 40309861 40310018 1 -chr20 40311481 40311847 1 -chr20 40322889 40323161 1 -chr20 40325157 40325343 1 -chr20 40328232 40328434 1 -chr20 40328942 40329216 1 -chr20 40330953 40331115 1 -chr20 40332293 40332411 1 -chr20 40336220 40336346 1 -chr20 40346163 40346404 1 -chr20 40346714 40347042 1 -chr20 40353482 40353752 1 -chr20 40357341 40357910 1 -chr20 40362345 40362654 1 -chr20 40368538 40368766 1 -chr20 40375106 40375708 1 -chr20 40379673 40379741 1 -chr20 40395818 40396301 1 -chr20 40423801 40424391 1 -chr20 40425907 40425976 1 -chr20 40432743 40432945 1 -chr20 40443311 40443513 1 -chr20 40446441 40446659 1 -chr20 40447977 40448153 1 -chr20 40448979 40449183 1 -chr20 40449967 40450357 1 -chr20 40452441 40452614 1 -chr20 40465377 40465547 1 -chr20 40466785 40467277 1 -chr20 40475770 40475990 1 -chr20 40476860 40477084 1 -chr20 40481315 40481446 1 -chr20 40494675 40494846 1 -chr20 40501146 40501333 1 -chr20 40501486 40501742 1 -chr20 40503161 40503359 1 -chr20 40507212 40507605 1 -chr20 40514155 40514504 1 -chr20 40520594 40520802 1 -chr20 40533126 40533707 1 -chr20 40534475 40534955 1 -chr20 40540391 40540595 1 -chr20 40542086 40543051 1 -chr20 40547604 40547788 1 -chr20 40547788 40547797 2 -chr20 40547797 40548340 1 -chr20 40548717 40548912 1 -chr20 40551035 40551258 1 -chr20 40551477 40551631 1 -chr20 40555727 40555933 1 -chr20 40561921 40562057 1 -chr20 40562220 40562701 1 -chr20 40564861 40565026 1 -chr20 40569874 40569929 1 -chr20 40571230 40571712 1 -chr20 40573991 40574186 1 -chr20 40575922 40576158 1 -chr20 40582893 40583059 1 -chr20 40595519 40595853 1 -chr20 40605644 40605741 1 -chr20 40626478 40626932 1 -chr20 40629818 40629991 1 -chr20 40631672 40631859 1 -chr20 40640256 40640774 1 -chr20 40661596 40662039 1 -chr20 40666464 40666760 1 -chr20 40669055 40669419 1 -chr20 40671712 40671926 1 -chr20 40681740 40681941 1 -chr20 40686739 40687084 1 -chr20 40688434 40688460 1 -chr20 40692689 40693032 1 -chr20 40694201 40694416 1 -chr20 40699458 40700013 1 -chr20 40707427 40707677 1 -chr20 40707692 40707719 1 -chr20 40711936 40712625 1 -chr20 40715364 40715480 1 -chr20 40716463 40717050 1 -chr20 40720997 40721225 1 -chr20 40722566 40723176 1 -chr20 40740172 40740364 1 -chr20 40741035 40741290 1 -chr20 40741290 40741314 2 -chr20 40741314 40741704 1 -chr20 40741971 40742064 1 -chr20 40743036 40743251 1 -chr20 40743812 40743966 1 -chr20 40745487 40745668 1 -chr20 40749853 40750028 1 -chr20 40752364 40752461 1 -chr20 40764081 40764483 1 -chr20 40769279 40769612 1 -chr20 40770467 40770772 1 -chr20 40772558 40772826 1 -chr20 40777544 40777688 1 -chr20 40786437 40786650 1 -chr20 40789453 40789642 1 -chr20 40796543 40796753 1 -chr20 40797772 40798086 1 -chr20 40798086 40798089 2 -chr20 40798089 40798301 1 -chr20 40814949 40815037 1 -chr20 40815924 40816081 1 -chr20 40818858 40819055 1 -chr20 40823863 40824591 1 -chr20 40831952 40832201 1 -chr20 40833129 40833391 1 -chr20 40840288 40840533 1 -chr20 40844492 40844714 1 -chr20 40846277 40846672 1 -chr20 40850360 40850590 1 -chr20 40857115 40857215 1 -chr20 40859899 40860083 1 -chr20 40862535 40863206 1 -chr20 40865288 40865505 1 -chr20 40869752 40870095 1 -chr20 40871403 40871835 1 -chr20 40873949 40874456 1 -chr20 40881641 40882105 1 -chr20 40883335 40883585 1 -chr20 40884242 40884846 1 -chr20 40884993 40885350 1 -chr20 40893580 40894343 1 -chr20 40897097 40897414 1 -chr20 40899568 40899718 1 -chr20 40902017 40902108 1 -chr20 40902483 40903034 1 -chr20 40907268 40907760 1 -chr20 40910321 40910375 1 -chr20 40931055 40931277 1 -chr20 40931600 40931755 1 -chr20 40932155 40932534 1 -chr20 40933158 40933194 1 -chr20 40936544 40936905 1 -chr20 40939529 40939702 1 -chr20 40942579 40942775 1 -chr20 40944269 40944445 1 -chr20 40953162 40953229 1 -chr20 40954480 40954695 1 -chr20 40957074 40957149 1 -chr20 40957201 40957696 1 -chr20 40960575 40960821 1 -chr20 40962705 40962840 1 -chr20 40966388 40966992 1 -chr20 40970270 40970488 1 -chr20 40977415 40977660 1 -chr20 40985441 40985567 1 -chr20 40989450 40989573 1 -chr20 40992238 40992679 1 -chr20 41003325 41003917 1 -chr20 41009082 41009111 1 -chr20 41016842 41016869 1 -chr20 41036489 41036788 1 -chr20 41040846 41041161 1 -chr20 41050394 41050601 1 -chr20 41050826 41051236 1 -chr20 41073545 41073750 1 -chr20 41074531 41074775 1 -chr20 41086043 41086080 1 -chr20 41086656 41086731 1 -chr20 41116681 41116900 1 -chr20 41139945 41140372 1 -chr20 41142957 41143562 1 -chr20 41150367 41150796 1 -chr20 41154481 41154672 1 -chr20 41159717 41160094 1 -chr20 41162925 41163298 1 -chr20 41165419 41165723 1 -chr20 41165990 41166424 1 -chr20 41167173 41167229 1 -chr20 41169990 41170342 1 -chr20 41172277 41172878 1 -chr20 41173064 41173267 1 -chr20 41174265 41174459 1 -chr20 41177506 41178113 1 -chr20 41188529 41188555 1 -chr20 41188615 41188678 1 -chr20 41190991 41191271 1 -chr20 41195702 41196080 1 -chr20 41206747 41206830 1 -chr20 41218605 41218890 1 -chr20 41221563 41221705 1 -chr20 41233134 41233305 1 -chr20 41238258 41238451 1 -chr20 41241235 41241396 1 -chr20 41245082 41245621 1 -chr20 41254737 41254968 1 -chr20 41257761 41257844 1 -chr20 41259074 41259446 1 -chr20 41260250 41260453 1 -chr20 41261447 41261657 1 -chr20 41263437 41263482 1 -chr20 41264363 41264429 1 -chr20 41284899 41285125 1 -chr20 41291404 41291606 1 -chr20 41309441 41310086 1 -chr20 41317305 41317356 1 -chr20 41318689 41318848 1 -chr20 41321345 41321398 1 -chr20 41325969 41326018 1 -chr20 41329062 41329616 1 -chr20 41340183 41340646 1 -chr20 41346818 41347498 1 -chr20 41354733 41354934 1 -chr20 41355726 41355994 1 -chr20 41357374 41357560 1 -chr20 41361207 41361423 1 -chr20 41367329 41367488 1 -chr20 41374067 41374501 1 -chr20 41375154 41375388 1 -chr20 41377434 41377715 1 -chr20 41403577 41404031 1 -chr20 41408305 41408678 1 -chr20 41408874 41409127 1 -chr20 41410801 41411176 1 -chr20 41414825 41415033 1 -chr20 41415528 41416020 1 -chr20 41432818 41433120 1 -chr20 41441748 41442103 1 -chr20 41445560 41445791 1 -chr20 41445890 41446469 1 -chr20 41446967 41447144 1 -chr20 41447791 41448062 1 -chr20 41451591 41452249 1 -chr20 41458560 41458589 1 -chr20 41463684 41463934 1 -chr20 41465970 41466030 1 -chr20 41475941 41476668 1 -chr20 41483966 41484317 1 -chr20 41493759 41493957 1 -chr20 41494594 41495027 1 -chr20 41508055 41508509 1 -chr20 41513680 41514046 1 -chr20 41521523 41521876 1 -chr20 41531416 41531652 1 -chr20 41531790 41532034 1 -chr20 41534499 41534765 1 -chr20 41540716 41541019 1 -chr20 41543671 41543962 1 -chr20 41547424 41547592 1 -chr20 41547816 41548182 1 -chr20 41548194 41548245 1 -chr20 41563845 41563949 1 -chr20 41564700 41564787 1 -chr20 41567063 41567359 1 -chr20 41570118 41570419 1 -chr20 41571132 41571341 1 -chr20 41571946 41572620 1 -chr20 41577189 41577490 1 -chr20 41579026 41579083 1 -chr20 41579740 41580068 1 -chr20 41599139 41599523 1 -chr20 41608569 41608874 1 -chr20 41615247 41615614 1 -chr20 41618618 41618687 1 -chr20 41622310 41622669 1 -chr20 41623693 41624212 1 -chr20 41631643 41631712 1 -chr20 41633864 41634098 1 -chr20 41639844 41640195 1 -chr20 41648185 41648914 1 -chr20 41656605 41656801 1 -chr20 41656906 41657213 1 -chr20 41662486 41662661 1 -chr20 41663638 41663950 1 -chr20 41669906 41670144 1 -chr20 41670298 41670444 1 -chr20 41693803 41694029 1 -chr20 41696213 41696590 1 -chr20 41705183 41705390 1 -chr20 41706146 41706266 1 -chr20 41712666 41712894 1 -chr20 41716179 41716365 1 -chr20 41718242 41718478 1 -chr20 41722357 41722656 1 -chr20 41727611 41727636 1 -chr20 41728191 41728687 1 -chr20 41735982 41736432 1 -chr20 41737860 41738209 1 -chr20 41748567 41748815 1 -chr20 41748818 41749300 1 -chr20 41750158 41750267 1 -chr20 41756121 41756420 1 -chr20 41760471 41760679 1 -chr20 41765953 41766029 1 -chr20 41768061 41768395 1 -chr20 41772916 41773257 1 -chr20 41775199 41775345 1 -chr20 41776541 41776608 1 -chr20 41778604 41779132 1 -chr20 41791459 41791754 1 -chr20 41792530 41793161 1 -chr20 41799194 41799368 1 -chr20 41810379 41810597 1 -chr20 41810842 41811616 1 -chr20 41812447 41812690 1 -chr20 41812959 41813212 1 -chr20 41819966 41820359 1 -chr20 41821102 41821516 1 -chr20 41823524 41823798 1 -chr20 41833026 41833239 1 -chr20 41837201 41837549 1 -chr20 41837607 41837831 1 -chr20 41837871 41838282 1 -chr20 41841366 41841393 1 -chr20 41853402 41853701 1 -chr20 41853701 41853710 2 -chr20 41853710 41854013 1 -chr20 41855052 41855482 1 -chr20 41856221 41856380 1 -chr20 41864794 41865398 1 -chr20 41866355 41866565 1 -chr20 41868962 41869393 1 -chr20 41878765 41878942 1 -chr20 41882016 41882310 1 -chr20 41883182 41883373 1 -chr20 41883736 41883941 1 -chr20 41886710 41886774 1 -chr20 41890973 41891001 1 -chr20 41892561 41892784 1 -chr20 41892827 41893247 1 -chr20 41893828 41893894 1 -chr20 41896429 41896730 1 -chr20 41899618 41899805 1 -chr20 41904783 41905243 1 -chr20 41909114 41909479 1 -chr20 41914656 41914937 1 -chr20 41916463 41916865 1 -chr20 41917866 41917904 1 -chr20 41920355 41920524 1 -chr20 41923782 41923981 1 -chr20 41932232 41932589 1 -chr20 41935625 41936077 1 -chr20 41936412 41936656 1 -chr20 41940340 41940551 1 -chr20 41941210 41941566 1 -chr20 41947382 41947585 1 -chr20 41955111 41955338 1 -chr20 41971984 41972186 1 -chr20 41980040 41980751 1 -chr20 41986963 41987223 1 -chr20 41997666 41998028 1 -chr20 41998403 41998568 1 -chr20 41998568 41998577 2 -chr20 41998577 41998634 1 -chr20 42005514 42005719 1 -chr20 42008542 42008604 1 -chr20 42011655 42012039 1 -chr20 42014597 42014917 1 -chr20 42019350 42019873 1 -chr20 42028623 42029092 1 -chr20 42041394 42041663 1 -chr20 42047019 42047132 1 -chr20 42047313 42047791 1 -chr20 42048026 42048328 1 -chr20 42052173 42052570 1 -chr20 42052584 42052779 1 -chr20 42056087 42056611 1 -chr20 42056701 42057080 1 -chr20 42058995 42059311 1 -chr20 42066241 42066286 1 -chr20 42072222 42072721 1 -chr20 42073432 42073644 1 -chr20 42073977 42074172 1 -chr20 42075023 42075767 1 -chr20 42077130 42077326 1 -chr20 42085231 42085842 1 -chr20 42091516 42091783 1 -chr20 42092208 42092474 1 -chr20 42097570 42097937 1 -chr20 42103006 42103191 1 -chr20 42104999 42105235 1 -chr20 42108300 42108589 1 -chr20 42111403 42111741 1 -chr20 42112359 42112626 1 -chr20 42114672 42114869 1 -chr20 42117165 42117634 1 -chr20 42120180 42120720 1 -chr20 42136031 42136208 1 -chr20 42138866 42139233 1 -chr20 42140354 42140759 1 -chr20 42148457 42148660 1 -chr20 42150149 42150559 1 -chr20 42152817 42153245 1 -chr20 42154471 42154660 1 -chr20 42168654 42169150 1 -chr20 42178397 42178814 1 -chr20 42179153 42179250 1 -chr20 42181130 42181482 1 -chr20 42182008 42182419 1 -chr20 42186873 42187242 1 -chr20 42191954 42192253 1 -chr20 42198745 42199319 1 -chr20 42202677 42203054 1 -chr20 42210018 42210172 1 -chr20 42218162 42218759 1 -chr20 42224075 42224436 1 -chr20 42226769 42227069 1 -chr20 42230780 42230963 1 -chr20 42235528 42235558 1 -chr20 42240260 42240437 1 -chr20 42244458 42244886 1 -chr20 42248081 42248431 1 -chr20 42259471 42259659 1 -chr20 42263923 42264457 1 -chr20 42267396 42267638 1 -chr20 42267891 42268088 1 -chr20 42268158 42268396 1 -chr20 42268908 42269155 1 -chr20 42272316 42272534 1 -chr20 42274011 42274154 1 -chr20 42274550 42274575 1 -chr20 42277882 42277917 1 -chr20 42292661 42293334 1 -chr20 42301790 42302134 1 -chr20 42304370 42304498 1 -chr20 42306131 42306372 1 -chr20 42308814 42309420 1 -chr20 42317475 42318074 1 -chr20 42319076 42319256 1 -chr20 42338752 42339231 1 -chr20 42341840 42342022 1 -chr20 42346743 42346930 1 -chr20 42347511 42347574 1 -chr20 42350717 42350980 1 -chr20 42353136 42353524 1 -chr20 42354578 42355017 1 -chr20 42358808 42359071 1 -chr20 42360608 42360993 1 -chr20 42365275 42365557 1 -chr20 42365631 42365891 1 -chr20 42366298 42366465 1 -chr20 42370838 42371173 1 -chr20 42372418 42372503 1 -chr20 42377699 42377931 1 -chr20 42388006 42388079 1 -chr20 42391009 42391267 1 -chr20 42400364 42400859 1 -chr20 42401993 42402331 1 -chr20 42404256 42404634 1 -chr20 42405696 42405758 1 -chr20 42409090 42409215 1 -chr20 42413495 42413692 1 -chr20 42429955 42430261 1 -chr20 42430967 42431468 1 -chr20 42431633 42431882 1 -chr20 42438098 42438357 1 -chr20 42441345 42441653 1 -chr20 42447059 42447168 1 -chr20 42452087 42452204 1 -chr20 42456379 42456679 1 -chr20 42459376 42459546 1 -chr20 42465143 42465471 1 -chr20 42465860 42465963 1 -chr20 42475831 42476055 1 -chr20 42478372 42478593 1 -chr20 42481797 42482208 1 -chr20 42482673 42482757 1 -chr20 42508616 42508874 1 -chr20 42509574 42509883 1 -chr20 42533667 42534036 1 -chr20 42535961 42536271 1 -chr20 42545138 42545367 1 -chr20 42549851 42550578 1 -chr20 42551550 42551779 1 -chr20 42561630 42561829 1 -chr20 42565405 42565574 1 -chr20 42569938 42570182 1 -chr20 42570335 42570524 1 -chr20 42579390 42579485 1 -chr20 42581054 42581281 1 -chr20 42582464 42582713 1 -chr20 42587633 42588108 1 -chr20 42588991 42589214 1 -chr20 42594873 42595086 1 -chr20 42602281 42602979 1 -chr20 42608374 42608594 1 -chr20 42628721 42629084 1 -chr20 42629084 42629093 2 -chr20 42629093 42629506 1 -chr20 42633526 42633777 1 -chr20 42635947 42636355 1 -chr20 42638197 42638575 1 -chr20 42642017 42642639 1 -chr20 42645325 42645551 1 -chr20 42646498 42646721 1 -chr20 42649986 42650221 1 -chr20 42657278 42657808 1 -chr20 42692203 42692324 1 -chr20 42700306 42700734 1 -chr20 42704254 42704515 1 -chr20 42721850 42722218 1 -chr20 42725006 42725035 1 -chr20 42734481 42734914 1 -chr20 42736291 42736520 1 -chr20 42737215 42737361 1 -chr20 42737546 42737591 1 -chr20 42742623 42743024 1 -chr20 42744081 42744269 1 -chr20 42750567 42751024 1 -chr20 42756021 42756229 1 -chr20 42758073 42758350 1 -chr20 42769860 42770175 1 -chr20 42771342 42771977 1 -chr20 42773443 42773647 1 -chr20 42777300 42777474 1 -chr20 42783701 42783941 1 -chr20 42785109 42785302 1 -chr20 42794113 42794418 1 -chr20 42795688 42795947 1 -chr20 42795998 42796318 1 -chr20 42796319 42796678 1 -chr20 42797090 42797257 1 -chr20 42797408 42797803 1 -chr20 42801543 42801765 1 -chr20 42802035 42802437 1 -chr20 42804888 42805380 1 -chr20 42805501 42805623 1 -chr20 42834562 42834951 1 -chr20 42836317 42836453 1 -chr20 42837567 42837806 1 -chr20 42839703 42839979 1 -chr20 42840604 42840631 1 -chr20 42858629 42858918 1 -chr20 42863233 42863445 1 -chr20 42864316 42864502 1 -chr20 42865018 42865335 1 -chr20 42865736 42865953 1 -chr20 42866667 42867236 1 -chr20 42868949 42869484 1 -chr20 42879125 42879300 1 -chr20 42880103 42880502 1 -chr20 42884654 42884918 1 -chr20 42894735 42894989 1 -chr20 42896845 42897449 1 -chr20 42899325 42899709 1 -chr20 42900691 42900741 1 -chr20 42907023 42907318 1 -chr20 42910135 42910321 1 -chr20 42917956 42918218 1 -chr20 42924101 42924342 1 -chr20 42953110 42953322 1 -chr20 42955239 42955468 1 -chr20 42962195 42962427 1 -chr20 42965590 42965920 1 -chr20 42969141 42969559 1 -chr20 42982832 42983093 1 -chr20 42985809 42986039 1 -chr20 42988709 42989377 1 -chr20 43016892 43017211 1 -chr20 43017763 43017959 1 -chr20 43021667 43021847 1 -chr20 43022655 43022841 1 -chr20 43028914 43029564 1 -chr20 43030665 43031038 1 -chr20 43040538 43040844 1 -chr20 43043467 43044058 1 -chr20 43044090 43044326 1 -chr20 43050054 43050488 1 -chr20 43053214 43053458 1 -chr20 43056729 43056957 1 -chr20 43058237 43058569 1 -chr20 43061577 43061784 1 -chr20 43064968 43065258 1 -chr20 43065337 43065576 1 -chr20 43065640 43065848 1 -chr20 43068080 43068111 1 -chr20 43068572 43068796 1 -chr20 43074815 43075209 1 -chr20 43077446 43077622 1 -chr20 43079370 43079457 1 -chr20 43089726 43090176 1 -chr20 43097535 43097635 1 -chr20 43100310 43100543 1 -chr20 43103749 43103930 1 -chr20 43108073 43108258 1 -chr20 43114959 43115412 1 -chr20 43115596 43115795 1 -chr20 43135313 43135623 1 -chr20 43142896 43143092 1 -chr20 43147065 43147411 1 -chr20 43166630 43167182 1 -chr20 43169363 43170022 1 -chr20 43170384 43170625 1 -chr20 43173566 43173788 1 -chr20 43175255 43175495 1 -chr20 43178213 43178883 1 -chr20 43182659 43182761 1 -chr20 43186476 43186707 1 -chr20 43187954 43188159 1 -chr20 43192229 43192463 1 -chr20 43197284 43197660 1 -chr20 43202654 43202969 1 -chr20 43208355 43208620 1 -chr20 43213464 43213628 1 -chr20 43220778 43221016 1 -chr20 43221215 43221785 1 -chr20 43229248 43229293 1 -chr20 43232563 43232884 1 -chr20 43234732 43234804 1 -chr20 43235868 43236024 1 -chr20 43241565 43241797 1 -chr20 43258844 43258955 1 -chr20 43271674 43271976 1 -chr20 43275711 43276134 1 -chr20 43279342 43279874 1 -chr20 43284928 43285125 1 -chr20 43285843 43286003 1 -chr20 43287682 43288041 1 -chr20 43302321 43302496 1 -chr20 43308395 43308630 1 -chr20 43316530 43316663 1 -chr20 43319466 43319810 1 -chr20 43320364 43320946 1 -chr20 43323609 43323740 1 -chr20 43323833 43323925 1 -chr20 43325936 43326114 1 -chr20 43343316 43343568 1 -chr20 43349615 43349791 1 -chr20 43363984 43364177 1 -chr20 43365744 43365933 1 -chr20 43366256 43366638 1 -chr20 43368129 43368290 1 -chr20 43373737 43374183 1 -chr20 43381114 43381284 1 -chr20 43408895 43409185 1 -chr20 43411693 43411745 1 -chr20 43415931 43416194 1 -chr20 43420512 43420930 1 -chr20 43433935 43434043 1 -chr20 43444747 43445104 1 -chr20 43453994 43454161 1 -chr20 43456571 43456780 1 -chr20 43460063 43460216 1 -chr20 43462513 43462930 1 -chr20 43463490 43463625 1 -chr20 43468571 43468722 1 -chr20 43469341 43469437 1 -chr20 43477719 43477821 1 -chr20 43478327 43478520 1 -chr20 43478520 43478543 2 -chr20 43478543 43478718 1 -chr20 43479536 43479643 1 -chr20 43480845 43480899 1 -chr20 43504589 43504907 1 -chr20 43509207 43509232 1 -chr20 43510245 43510271 1 -chr20 43513613 43513688 1 -chr20 43525007 43525178 1 -chr20 43529214 43529573 1 -chr20 43529658 43530122 1 -chr20 43533743 43533973 1 -chr20 43540974 43541344 1 -chr20 43550551 43550828 1 -chr20 43552505 43552598 1 -chr20 43563603 43563958 1 -chr20 43577998 43578206 1 -chr20 43594356 43594758 1 -chr20 43603296 43603788 1 -chr20 43605608 43605806 1 -chr20 43611848 43611902 1 -chr20 43615722 43615802 1 -chr20 43628078 43628117 1 -chr20 43636427 43636623 1 -chr20 43643470 43643847 1 -chr20 43645965 43646093 1 -chr20 43651093 43651354 1 -chr20 43651836 43651901 1 -chr20 43658050 43658237 1 -chr20 43661469 43661643 1 -chr20 43667406 43667679 1 -chr20 43674016 43674108 1 -chr20 43675242 43675360 1 -chr20 43682923 43683216 1 -chr20 43685020 43685224 1 -chr20 43685224 43685228 2 -chr20 43685228 43685307 1 -chr20 43686722 43687034 1 -chr20 43689680 43689877 1 -chr20 43699569 43699966 1 -chr20 43701015 43701751 1 -chr20 43702256 43702571 1 -chr20 43706606 43706772 1 -chr20 43713251 43713440 1 -chr20 43720226 43720658 1 -chr20 43723094 43723331 1 -chr20 43725764 43726034 1 -chr20 43744377 43744458 1 -chr20 43747351 43747603 1 -chr20 43756180 43756452 1 -chr20 43773097 43773591 1 -chr20 43781400 43781679 1 -chr20 43791030 43791173 1 -chr20 43824017 43824223 1 -chr20 43831586 43831947 1 -chr20 43831958 43832304 1 -chr20 43832595 43832782 1 -chr20 43844277 43844483 1 -chr20 43845434 43845608 1 -chr20 43858235 43858587 1 -chr20 43865704 43865875 1 -chr20 43866196 43866404 1 -chr20 43890728 43891191 1 -chr20 43897914 43898010 1 -chr20 43900631 43901093 1 -chr20 43908797 43909420 1 -chr20 43909467 43909824 1 -chr20 43909824 43909833 2 -chr20 43909833 43910101 1 -chr20 43914513 43914781 1 -chr20 43917522 43918187 1 -chr20 43919985 43920242 1 -chr20 43930567 43930883 1 -chr20 43931503 43932037 1 -chr20 43937510 43937685 1 -chr20 43938547 43938944 1 -chr20 43945550 43945817 1 -chr20 43947352 43947999 1 -chr20 43949587 43949874 1 -chr20 43951373 43951452 1 -chr20 43953898 43954169 1 -chr20 43958108 43958285 1 -chr20 43959397 43960007 1 -chr20 43964979 43965175 1 -chr20 43965679 43965995 1 -chr20 43967099 43967587 1 -chr20 43973768 43973985 1 -chr20 43975513 43975796 1 -chr20 43983627 43983920 1 -chr20 43987171 43987406 1 -chr20 43987428 43987792 1 -chr20 43990555 43990748 1 -chr20 43990962 43991331 1 -chr20 43993199 43993339 1 -chr20 43994569 43994850 1 -chr20 44000684 44000911 1 -chr20 44004296 44004551 1 -chr20 44015882 44016154 1 -chr20 44018114 44018444 1 -chr20 44018823 44019468 1 -chr20 44020958 44021031 1 -chr20 44025760 44025984 1 -chr20 44026690 44026984 1 -chr20 44037352 44037434 1 -chr20 44040258 44040481 1 -chr20 44040749 44040984 1 -chr20 44042616 44042914 1 -chr20 44043355 44043511 1 -chr20 44053127 44053251 1 -chr20 44054174 44054451 1 -chr20 44064877 44064992 1 -chr20 44068227 44068475 1 -chr20 44071690 44071896 1 -chr20 44079914 44080318 1 -chr20 44087571 44087766 1 -chr20 44088228 44088272 1 -chr20 44098339 44098549 1 -chr20 44107565 44107965 1 -chr20 44114248 44114486 1 -chr20 44119925 44120185 1 -chr20 44127975 44128254 1 -chr20 44129030 44129180 1 -chr20 44130395 44130580 1 -chr20 44131111 44131414 1 -chr20 44139542 44139790 1 -chr20 44143226 44143938 1 -chr20 44144109 44144350 1 -chr20 44147034 44147701 1 -chr20 44163568 44164105 1 -chr20 44166912 44167474 1 -chr20 44174893 44174995 1 -chr20 44182591 44183044 1 -chr20 44183926 44183969 1 -chr20 44187417 44187635 1 -chr20 44202114 44202150 1 -chr20 44208911 44209045 1 -chr20 44209795 44210011 1 -chr20 44217537 44217773 1 -chr20 44218937 44219187 1 -chr20 44220870 44220998 1 -chr20 44233225 44233400 1 -chr20 44236270 44236420 1 -chr20 44239934 44240101 1 -chr20 44246443 44246534 1 -chr20 44264376 44264554 1 -chr20 44279424 44279769 1 -chr20 44282186 44282383 1 -chr20 44292396 44292424 1 -chr20 44298803 44298878 1 -chr20 44305330 44305483 1 -chr20 44319931 44320334 1 -chr20 44336160 44336564 1 -chr20 44338285 44338656 1 -chr20 44351425 44351544 1 -chr20 44354751 44355146 1 -chr20 44358683 44358897 1 -chr20 44361660 44361836 1 -chr20 44362213 44362317 1 -chr20 44363355 44363556 1 -chr20 44373879 44373921 1 -chr20 44376592 44376948 1 -chr20 44389229 44389545 1 -chr20 44390677 44391033 1 -chr20 44393916 44394182 1 -chr20 44397177 44397383 1 -chr20 44405741 44406090 1 -chr20 44407897 44408255 1 -chr20 44411388 44411633 1 -chr20 44412556 44413041 1 -chr20 44413299 44413605 1 -chr20 44415109 44415162 1 -chr20 44416344 44416556 1 -chr20 44416985 44417190 1 -chr20 44417842 44417911 1 -chr20 44419207 44419501 1 -chr20 44428028 44428652 1 -chr20 44431177 44431323 1 -chr20 44432049 44432206 1 -chr20 44440093 44440132 1 -chr20 44446000 44446088 1 -chr20 44447438 44447726 1 -chr20 44458585 44458611 1 -chr20 44459269 44459481 1 -chr20 44465580 44466002 1 -chr20 44466580 44467171 1 -chr20 44468470 44468942 1 -chr20 44472103 44472394 1 -chr20 44478297 44478518 1 -chr20 44484250 44484722 1 -chr20 44491856 44492091 1 -chr20 44496564 44496606 1 -chr20 44516583 44516610 1 -chr20 44533306 44533563 1 -chr20 44542550 44542639 1 -chr20 44552945 44553177 1 -chr20 44559325 44559530 1 -chr20 44565403 44565589 1 -chr20 44577526 44577763 1 -chr20 44583251 44583520 1 -chr20 44603942 44604405 1 -chr20 44619675 44619815 1 -chr20 44623265 44623441 1 -chr20 44623791 44623893 1 -chr20 44631303 44631815 1 -chr20 44631868 44632085 1 -chr20 44636843 44636902 1 -chr20 44637798 44638020 1 -chr20 44643486 44643886 1 -chr20 44650072 44650147 1 -chr20 44651680 44651884 1 -chr20 44656584 44656904 1 -chr20 44674557 44674702 1 -chr20 44678045 44678103 1 -chr20 44683573 44683830 1 -chr20 44684960 44685334 1 -chr20 44693904 44694527 1 -chr20 44697826 44697870 1 -chr20 44698450 44698613 1 -chr20 44703561 44703772 1 -chr20 44710590 44710808 1 -chr20 44712352 44712674 1 -chr20 44716448 44716799 1 -chr20 44718657 44719148 1 -chr20 44724144 44724380 1 -chr20 44737409 44737671 1 -chr20 44738627 44738807 1 -chr20 44741295 44741325 1 -chr20 44742467 44742734 1 -chr20 44745071 44745156 1 -chr20 44745519 44745544 1 -chr20 44746635 44747278 1 -chr20 44749250 44749492 1 -chr20 44751848 44752074 1 -chr20 44752586 44752870 1 -chr20 44754831 44755099 1 -chr20 44759506 44759537 1 -chr20 44764620 44764877 1 -chr20 44768560 44768638 1 -chr20 44769463 44769532 1 -chr20 44771486 44771711 1 -chr20 44787059 44787374 1 -chr20 44787374 44787383 2 -chr20 44787383 44787681 1 -chr20 44789446 44789506 1 -chr20 44791539 44791735 1 -chr20 44798519 44798706 1 -chr20 44801330 44801775 1 -chr20 44803465 44803754 1 -chr20 44805508 44806157 1 -chr20 44806157 44806166 2 -chr20 44806166 44806326 1 -chr20 44807729 44807844 1 -chr20 44809092 44809373 1 -chr20 44813970 44814279 1 -chr20 44819839 44820022 1 -chr20 44830587 44830789 1 -chr20 44833360 44833594 1 -chr20 44833615 44833808 1 -chr20 44834309 44834680 1 -chr20 44835319 44835765 1 -chr20 44836714 44837100 1 -chr20 44837769 44838207 1 -chr20 44838519 44838710 1 -chr20 44839654 44839720 1 -chr20 44850237 44850415 1 -chr20 44854856 44854941 1 -chr20 44855264 44855556 1 -chr20 44888224 44888586 1 -chr20 44894446 44894830 1 -chr20 44898730 44898772 1 -chr20 44900882 44900968 1 -chr20 44925704 44926081 1 -chr20 44936997 44937403 1 -chr20 44942223 44942902 1 -chr20 44944081 44944413 1 -chr20 44948916 44949047 1 -chr20 44950894 44951412 1 -chr20 44954650 44954877 1 -chr20 44956227 44956747 1 -chr20 44966536 44966686 1 -chr20 44978094 44978632 1 -chr20 44981198 44981298 1 -chr20 44983026 44983252 1 -chr20 45009499 45009698 1 -chr20 45028943 45029234 1 -chr20 45029234 45029243 2 -chr20 45029243 45029608 1 -chr20 45053013 45053392 1 -chr20 45054302 45054430 1 -chr20 45055328 45055456 1 -chr20 45056415 45056604 1 -chr20 45073221 45073625 1 -chr20 45075583 45075732 1 -chr20 45077452 45077506 1 -chr20 45080024 45080167 1 -chr20 45081155 45081500 1 -chr20 45083703 45083942 1 -chr20 45085694 45086077 1 -chr20 45086752 45086940 1 -chr20 45094155 45094439 1 -chr20 45095263 45095575 1 -chr20 45101283 45101489 1 -chr20 45106236 45106648 1 -chr20 45108839 45108923 1 -chr20 45115566 45115784 1 -chr20 45117659 45117832 1 -chr20 45123774 45124077 1 -chr20 45124077 45124094 2 -chr20 45124094 45124315 1 -chr20 45124333 45124460 1 -chr20 45125744 45126126 1 -chr20 45126127 45126309 1 -chr20 45128044 45128283 1 -chr20 45132726 45133180 1 -chr20 45135607 45135727 1 -chr20 45138186 45138546 1 -chr20 45171481 45171748 1 -chr20 45180959 45181189 1 -chr20 45185203 45185490 1 -chr20 45193570 45193981 1 -chr20 45205701 45206067 1 -chr20 45230625 45230731 1 -chr20 45230801 45231055 1 -chr20 45231382 45231590 1 -chr20 45272268 45272754 1 -chr20 45273663 45273920 1 -chr20 45288403 45288937 1 -chr20 45289012 45289259 1 -chr20 45296218 45296249 1 -chr20 45298890 45299103 1 -chr20 45300523 45300964 1 -chr20 45303385 45303620 1 -chr20 45304226 45304423 1 -chr20 45304923 45305111 1 -chr20 45306446 45306632 1 -chr20 45306738 45306928 1 -chr20 45312124 45312401 1 -chr20 45338414 45338738 1 -chr20 45341973 45342053 1 -chr20 45343617 45344014 1 -chr20 45346270 45346607 1 -chr20 45348372 45348506 1 -chr20 45349701 45349954 1 -chr20 45353846 45354050 1 -chr20 45368636 45369324 1 -chr20 45370420 45370789 1 -chr20 45371264 45371510 1 -chr20 45371510 45371519 2 -chr20 45371519 45371772 1 -chr20 45377683 45377809 1 -chr20 45403315 45403600 1 -chr20 45407858 45408029 1 -chr20 45411453 45411495 1 -chr20 45412140 45412322 1 -chr20 45418053 45418664 1 -chr20 45418815 45419312 1 -chr20 45425876 45426187 1 -chr20 45462739 45462850 1 -chr20 45467400 45467555 1 -chr20 45470692 45471105 1 -chr20 45482074 45482176 1 -chr20 45494322 45494549 1 -chr20 45506559 45506904 1 -chr20 45507245 45507403 1 -chr20 45507403 45507412 2 -chr20 45507412 45507562 1 -chr20 45509117 45509436 1 -chr20 45515354 45515689 1 -chr20 45526305 45526564 1 -chr20 45529255 45529591 1 -chr20 45534671 45534932 1 -chr20 45541782 45541958 1 -chr20 45546293 45546461 1 -chr20 45548045 45548318 1 -chr20 45558097 45558487 1 -chr20 45562313 45562452 1 -chr20 45571933 45572096 1 -chr20 45575722 45576144 1 -chr20 45580962 45581282 1 -chr20 45598107 45598491 1 -chr20 45613815 45614029 1 -chr20 45614468 45614655 1 -chr20 45621860 45622078 1 -chr20 45628989 45629681 1 -chr20 45631530 45632355 1 -chr20 45632355 45632360 2 -chr20 45632360 45632543 1 -chr20 45641109 45641308 1 -chr20 45645863 45645958 1 -chr20 45646307 45646332 1 -chr20 45651768 45651819 1 -chr20 45655036 45655211 1 -chr20 45673609 45673806 1 -chr20 45681182 45681264 1 -chr20 45685401 45685538 1 -chr20 45690475 45690541 1 -chr20 45702755 45703176 1 -chr20 45707733 45707934 1 -chr20 45725864 45726217 1 -chr20 45757620 45757690 1 -chr20 45769237 45769308 1 -chr20 45771917 45772256 1 -chr20 45774055 45774525 1 -chr20 45783600 45783942 1 -chr20 45793664 45793691 1 -chr20 45799386 45799640 1 -chr20 45800603 45800647 1 -chr20 45812833 45813208 1 -chr20 45821602 45821636 1 -chr20 45824740 45824960 1 -chr20 45829692 45829738 1 -chr20 45831587 45831786 1 -chr20 45835507 45836025 1 -chr20 45841037 45841321 1 -chr20 45843649 45843862 1 -chr20 45854517 45855240 1 -chr20 45862414 45862534 1 -chr20 45863858 45863895 1 -chr20 45869857 45869941 1 -chr20 45872379 45872631 1 -chr20 45887323 45887871 1 -chr20 45890448 45890953 1 -chr20 45891246 45891563 1 -chr20 45893316 45893368 1 -chr20 45897804 45898117 1 -chr20 45900134 45900248 1 -chr20 45907314 45907607 1 -chr20 45909319 45909494 1 -chr20 45916894 45916936 1 -chr20 45925844 45926051 1 -chr20 45946485 45946730 1 -chr20 45947027 45947184 1 -chr20 45951420 45951638 1 -chr20 45954239 45954520 1 -chr20 45957192 45957440 1 -chr20 45957562 45957949 1 -chr20 45958406 45958950 1 -chr20 45972901 45973068 1 -chr20 45984389 45984473 1 -chr20 45989825 45989940 1 -chr20 45993298 45993362 1 -chr20 46009214 46009464 1 -chr20 46014341 46014444 1 -chr20 46019052 46019274 1 -chr20 46021839 46022016 1 -chr20 46028321 46028595 1 -chr20 46029975 46030206 1 -chr20 46030632 46030855 1 -chr20 46032619 46032889 1 -chr20 46033333 46033639 1 -chr20 46036108 46036370 1 -chr20 46046891 46047100 1 -chr20 46055092 46055262 1 -chr20 46057672 46057776 1 -chr20 46058155 46058309 1 -chr20 46061069 46061323 1 -chr20 46066941 46067157 1 -chr20 46102042 46102238 1 -chr20 46119123 46119292 1 -chr20 46121823 46122475 1 -chr20 46147490 46147757 1 -chr20 46155821 46156164 1 -chr20 46158070 46158622 1 -chr20 46159752 46160462 1 -chr20 46161281 46161470 1 -chr20 46162437 46162887 1 -chr20 46168824 46169395 1 -chr20 46177989 46178049 1 -chr20 46179469 46179882 1 -chr20 46190525 46190928 1 -chr20 46200763 46200951 1 -chr20 46201238 46201419 1 -chr20 46211340 46211564 1 -chr20 46217022 46217195 1 -chr20 46218479 46218659 1 -chr20 46220864 46220927 1 -chr20 46230485 46230651 1 -chr20 46239920 46240448 1 -chr20 46251474 46251890 1 -chr20 46252178 46252504 1 -chr20 46253583 46254052 1 -chr20 46257901 46258086 1 -chr20 46262793 46263007 1 -chr20 46268157 46268343 1 -chr20 46278065 46278091 1 -chr20 46279038 46279339 1 -chr20 46279677 46280038 1 -chr20 46280653 46280834 1 -chr20 46291421 46291753 1 -chr20 46296561 46296881 1 -chr20 46298152 46298360 1 -chr20 46305013 46305385 1 -chr20 46306807 46307180 1 -chr20 46308502 46308773 1 -chr20 46308950 46309154 1 -chr20 46311628 46311815 1 -chr20 46312856 46312948 1 -chr20 46317168 46317987 1 -chr20 46319930 46320364 1 -chr20 46328525 46328623 1 -chr20 46334372 46334685 1 -chr20 46335120 46335322 1 -chr20 46341561 46341901 1 -chr20 46343725 46344080 1 -chr20 46344907 46344937 1 -chr20 46364327 46364957 1 -chr20 46365022 46365655 1 -chr20 46370884 46371151 1 -chr20 46376627 46376851 1 -chr20 46384294 46384665 1 -chr20 46385952 46386185 1 -chr20 46403260 46403493 1 -chr20 46406050 46406257 1 -chr20 46422658 46422779 1 -chr20 46432426 46432863 1 -chr20 46440282 46440750 1 -chr20 46444502 46444669 1 -chr20 46453485 46453849 1 -chr20 46464616 46464729 1 -chr20 46466698 46466762 1 -chr20 46470620 46470760 1 -chr20 46471167 46471440 1 -chr20 46486003 46486188 1 -chr20 46504445 46504621 1 -chr20 46522520 46522760 1 -chr20 46523455 46523851 1 -chr20 46539642 46540069 1 -chr20 46549908 46550107 1 -chr20 46550478 46550683 1 -chr20 46551804 46552152 1 -chr20 46568670 46568875 1 -chr20 46570028 46570082 1 -chr20 46574688 46574871 1 -chr20 46576572 46577061 1 -chr20 46582577 46583076 1 -chr20 46587401 46587637 1 -chr20 46588007 46588219 1 -chr20 46594404 46594627 1 -chr20 46597538 46597580 1 -chr20 46604943 46605337 1 -chr20 46608141 46608805 1 -chr20 46610806 46611377 1 -chr20 46613986 46614643 1 -chr20 46619783 46619985 1 -chr20 46626219 46626477 1 -chr20 46632351 46632523 1 -chr20 46641699 46641918 1 -chr20 46642098 46642578 1 -chr20 46656408 46656600 1 -chr20 46671616 46671882 1 -chr20 46671941 46672163 1 -chr20 46673380 46674092 1 -chr20 46692426 46692799 1 -chr20 46705510 46706057 1 -chr20 46709838 46710036 1 -chr20 46716896 46717006 1 -chr20 46735712 46735991 1 -chr20 46737564 46737809 1 -chr20 46756772 46757067 1 -chr20 46762327 46762879 1 -chr20 46763929 46764097 1 -chr20 46782934 46782982 1 -chr20 46784731 46785060 1 -chr20 46786976 46787017 1 -chr20 46788899 46788943 1 -chr20 46797578 46797852 1 -chr20 46802392 46802835 1 -chr20 46807066 46807192 1 -chr20 46808220 46808442 1 -chr20 46814628 46814836 1 -chr20 46820591 46820806 1 -chr20 46822481 46822699 1 -chr20 46830579 46830850 1 -chr20 46832350 46832896 1 -chr20 46834416 46834663 1 -chr20 46837414 46837626 1 -chr20 46840933 46841125 1 -chr20 46843893 46844042 1 -chr20 46849689 46849929 1 -chr20 46852460 46852684 1 -chr20 46855790 46855968 1 -chr20 46868106 46868397 1 -chr20 46868658 46868920 1 -chr20 46873947 46873993 1 -chr20 46879854 46880186 1 -chr20 46881208 46881577 1 -chr20 46892072 46892098 1 -chr20 46895351 46895563 1 -chr20 46902786 46903123 1 -chr20 46916964 46917089 1 -chr20 46919801 46920102 1 -chr20 46922011 46922235 1 -chr20 46925900 46926253 1 -chr20 46929359 46929495 1 -chr20 46934625 46935095 1 -chr20 46954724 46955059 1 -chr20 46962998 46963167 1 -chr20 46967745 46968274 1 -chr20 46974809 46975027 1 -chr20 46988203 46988422 1 -chr20 46994143 46994963 1 -chr20 47000107 47000314 1 -chr20 47008508 47008842 1 -chr20 47015492 47016018 1 -chr20 47017899 47018105 1 -chr20 47019114 47019449 1 -chr20 47025917 47026176 1 -chr20 47034759 47035152 1 -chr20 47043264 47043920 1 -chr20 47049112 47049310 1 -chr20 47050051 47050337 1 -chr20 47064398 47064551 1 -chr20 47069820 47069849 1 -chr20 47069909 47070339 1 -chr20 47072011 47072203 1 -chr20 47072375 47072793 1 -chr20 47072793 47072801 2 -chr20 47072801 47073376 1 -chr20 47074887 47075054 1 -chr20 47081603 47081661 1 -chr20 47090580 47090799 1 -chr20 47094369 47094636 1 -chr20 47106652 47106895 1 -chr20 47113719 47114142 1 -chr20 47117343 47117567 1 -chr20 47123956 47124224 1 -chr20 47125453 47125812 1 -chr20 47129462 47129717 1 -chr20 47134061 47134241 1 -chr20 47138303 47138563 1 -chr20 47142801 47143399 1 -chr20 47145707 47145784 1 -chr20 47152887 47153028 1 -chr20 47184655 47185092 1 -chr20 47196257 47196583 1 -chr20 47213416 47213629 1 -chr20 47217076 47217256 1 -chr20 47217445 47218158 1 -chr20 47242368 47242551 1 -chr20 47249002 47249212 1 -chr20 47269287 47269642 1 -chr20 47276196 47276437 1 -chr20 47280958 47281215 1 -chr20 47302638 47302710 1 -chr20 47302752 47303112 1 -chr20 47313607 47313679 1 -chr20 47314279 47314477 1 -chr20 47334211 47334411 1 -chr20 47337663 47337750 1 -chr20 47350484 47350632 1 -chr20 47354026 47354191 1 -chr20 47354267 47355232 1 -chr20 47366094 47366261 1 -chr20 47366864 47367032 1 -chr20 47369327 47369699 1 -chr20 47380675 47380818 1 -chr20 47389596 47389677 1 -chr20 47389963 47390234 1 -chr20 47395728 47395804 1 -chr20 47401245 47401389 1 -chr20 47415994 47416025 1 -chr20 47416039 47416069 1 -chr20 47417099 47417187 1 -chr20 47419739 47419849 1 -chr20 47420129 47420311 1 -chr20 47427600 47427662 1 -chr20 47434184 47434421 1 -chr20 47435569 47435996 1 -chr20 47444267 47444295 1 -chr20 47446338 47446410 1 -chr20 47448322 47448403 1 -chr20 47451254 47451588 1 -chr20 47452770 47453127 1 -chr20 47462202 47462278 1 -chr20 47462588 47462887 1 -chr20 47464343 47464667 1 -chr20 47469823 47470066 1 -chr20 47475451 47475518 1 -chr20 47481517 47481580 1 -chr20 47482382 47482435 1 -chr20 47487381 47487905 1 -chr20 47500869 47501052 1 -chr20 47501157 47501365 1 -chr20 47501793 47501965 1 -chr20 47504717 47504763 1 -chr20 47515843 47516043 1 -chr20 47520447 47520612 1 -chr20 47520737 47520841 1 -chr20 47524027 47524288 1 -chr20 47529036 47529248 1 -chr20 47532902 47532989 1 -chr20 47536084 47536219 1 -chr20 47546437 47546604 1 -chr20 47563938 47564027 1 -chr20 47570983 47571009 1 -chr20 47586532 47586750 1 -chr20 47588443 47588657 1 -chr20 47591384 47591613 1 -chr20 47592267 47592331 1 -chr20 47599376 47599709 1 -chr20 47600923 47601291 1 -chr20 47602831 47603229 1 -chr20 47605697 47606066 1 -chr20 47618429 47618483 1 -chr20 47619858 47619924 1 -chr20 47624906 47624986 1 -chr20 47658481 47659040 1 -chr20 47662138 47662590 1 -chr20 47665757 47665988 1 -chr20 47666781 47666992 1 -chr20 47669136 47669335 1 -chr20 47671332 47671492 1 -chr20 47671542 47671774 1 -chr20 47673636 47674246 1 -chr20 47675272 47675643 1 -chr20 47699117 47699427 1 -chr20 47699427 47699433 2 -chr20 47699433 47699633 1 -chr20 47713025 47713111 1 -chr20 47730494 47730549 1 -chr20 47732739 47732792 1 -chr20 47735854 47736259 1 -chr20 47738132 47738205 1 -chr20 47739243 47739471 1 -chr20 47746171 47746521 1 -chr20 47747225 47747675 1 -chr20 47758238 47758297 1 -chr20 47758529 47758821 1 -chr20 47759649 47759683 1 -chr20 47760457 47760985 1 -chr20 47761115 47761348 1 -chr20 47768156 47768598 1 -chr20 47775904 47776123 1 -chr20 47781784 47782230 1 -chr20 47784079 47784438 1 -chr20 47791839 47792198 1 -chr20 47794742 47794935 1 -chr20 47797416 47797548 1 -chr20 47805451 47805960 1 -chr20 47814734 47815131 1 -chr20 47816811 47817160 1 -chr20 47819654 47820157 1 -chr20 47830690 47831110 1 -chr20 47831360 47831873 1 -chr20 47835031 47835269 1 -chr20 47839592 47839898 1 -chr20 47848490 47848592 1 -chr20 47852092 47852542 1 -chr20 47854884 47854956 1 -chr20 47856273 47856444 1 -chr20 47859622 47860122 1 -chr20 47869325 47869492 1 -chr20 47871302 47871518 1 -chr20 47871804 47871981 1 -chr20 47872245 47872321 1 -chr20 47876596 47876883 1 -chr20 47879697 47879840 1 -chr20 47887384 47887802 1 -chr20 47889964 47890289 1 -chr20 47893306 47893615 1 -chr20 47893727 47893875 1 -chr20 47894795 47894916 1 -chr20 47897733 47897941 1 -chr20 47898308 47898424 1 -chr20 47903181 47903379 1 -chr20 47903903 47904287 1 -chr20 47904867 47905255 1 -chr20 47913223 47913581 1 -chr20 47927303 47927574 1 -chr20 47930217 47930506 1 -chr20 47939024 47939233 1 -chr20 47941963 47942156 1 -chr20 47942222 47942380 1 -chr20 47945075 47945336 1 -chr20 47946829 47947060 1 -chr20 47949763 47950042 1 -chr20 47950260 47950522 1 -chr20 47950563 47951038 1 -chr20 47952758 47952938 1 -chr20 47952979 47953074 1 -chr20 47954548 47954738 1 -chr20 47956680 47956843 1 -chr20 47962801 47963418 1 -chr20 47965530 47966030 1 -chr20 47970709 47970839 1 -chr20 47978730 47979020 1 -chr20 47988872 47989051 1 -chr20 47991391 47991723 1 -chr20 47993031 47993129 1 -chr20 48003072 48003495 1 -chr20 48004928 48005317 1 -chr20 48005499 48005725 1 -chr20 48012814 48012901 1 -chr20 48016427 48016496 1 -chr20 48018530 48018744 1 -chr20 48025080 48025442 1 -chr20 48026662 48026881 1 -chr20 48034711 48034753 1 -chr20 48046364 48046528 1 -chr20 48053845 48054042 1 -chr20 48057100 48057337 1 -chr20 48060483 48060869 1 -chr20 48066929 48067205 1 -chr20 48077246 48077342 1 -chr20 48087881 48088289 1 -chr20 48088870 48089212 1 -chr20 48094002 48094275 1 -chr20 48096037 48096166 1 -chr20 48111303 48111553 1 -chr20 48119985 48120241 1 -chr20 48120920 48121442 1 -chr20 48124267 48124560 1 -chr20 48124903 48125310 1 -chr20 48125327 48125474 1 -chr20 48128888 48129271 1 -chr20 48136232 48136400 1 -chr20 48152990 48153662 1 -chr20 48157406 48157535 1 -chr20 48159160 48159334 1 -chr20 48162779 48162955 1 -chr20 48164677 48164929 1 -chr20 48165262 48165451 1 -chr20 48168502 48168688 1 -chr20 48168776 48169066 1 -chr20 48173438 48173536 1 -chr20 48182373 48182621 1 -chr20 48183464 48183660 1 -chr20 48186920 48187084 1 -chr20 48190670 48190873 1 -chr20 48198916 48199749 1 -chr20 48199749 48199758 2 -chr20 48199758 48200074 1 -chr20 48201851 48202068 1 -chr20 48203790 48204212 1 -chr20 48206646 48206956 1 -chr20 48208236 48208630 1 -chr20 48218729 48218894 1 -chr20 48219521 48219966 1 -chr20 48225766 48226216 1 -chr20 48226278 48226498 1 -chr20 48231044 48231572 1 -chr20 48231642 48232065 1 -chr20 48238440 48238626 1 -chr20 48246449 48246577 1 -chr20 48251792 48252423 1 -chr20 48253726 48254038 1 -chr20 48254585 48254773 1 -chr20 48254773 48254782 2 -chr20 48254782 48255030 1 -chr20 48257001 48257200 1 -chr20 48257846 48258050 1 -chr20 48259923 48260196 1 -chr20 48262659 48262861 1 -chr20 48268916 48269123 1 -chr20 48272061 48272302 1 -chr20 48272398 48272628 1 -chr20 48275299 48275708 1 -chr20 48286739 48286971 1 -chr20 48287680 48288023 1 -chr20 48291798 48292247 1 -chr20 48301792 48301956 1 -chr20 48302068 48302310 1 -chr20 48310575 48310739 1 -chr20 48311539 48311633 1 -chr20 48324141 48324408 1 -chr20 48331080 48331639 1 -chr20 48334542 48334729 1 -chr20 48342597 48342784 1 -chr20 48345497 48345623 1 -chr20 48345623 48345632 2 -chr20 48345632 48345953 1 -chr20 48352908 48353113 1 -chr20 48359291 48359641 1 -chr20 48369540 48369714 1 -chr20 48371201 48371656 1 -chr20 48374069 48374547 1 -chr20 48375546 48376080 1 -chr20 48376126 48376661 1 -chr20 48377638 48378072 1 -chr20 48380585 48381354 1 -chr20 48385850 48385877 1 -chr20 48386995 48387326 1 -chr20 48388611 48388896 1 -chr20 48389192 48389403 1 -chr20 48394224 48394791 1 -chr20 48394907 48395124 1 -chr20 48401585 48401751 1 -chr20 48404560 48404627 1 -chr20 48405776 48406041 1 -chr20 48408084 48408151 1 -chr20 48413694 48413841 1 -chr20 48429135 48429545 1 -chr20 48436735 48436916 1 -chr20 48447640 48447919 1 -chr20 48448502 48449075 1 -chr20 48451200 48451264 1 -chr20 48457531 48457640 1 -chr20 48458084 48458589 1 -chr20 48459492 48459663 1 -chr20 48460533 48460678 1 -chr20 48465084 48465272 1 -chr20 48465545 48465927 1 -chr20 48471255 48471473 1 -chr20 48472566 48472780 1 -chr20 48479170 48479327 1 -chr20 48479327 48479336 2 -chr20 48479336 48479501 1 -chr20 48481755 48481821 1 -chr20 48482963 48483191 1 -chr20 48487473 48487639 1 -chr20 48489279 48489484 1 -chr20 48490999 48491477 1 -chr20 48491876 48492268 1 -chr20 48498050 48498286 1 -chr20 48505133 48505480 1 -chr20 48507101 48507583 1 -chr20 48510216 48510699 1 -chr20 48511200 48511239 1 -chr20 48514064 48514292 1 -chr20 48514950 48515057 1 -chr20 48517373 48517519 1 -chr20 48517568 48517842 1 -chr20 48517842 48517851 2 -chr20 48517851 48518076 1 -chr20 48524460 48524637 1 -chr20 48528783 48528948 1 -chr20 48533086 48533356 1 -chr20 48535229 48535295 1 -chr20 48536416 48536669 1 -chr20 48543116 48543746 1 -chr20 48544681 48545188 1 -chr20 48545230 48545493 1 -chr20 48554058 48554411 1 -chr20 48557746 48558049 1 -chr20 48559055 48559218 1 -chr20 48565993 48566232 1 -chr20 48570499 48570931 1 -chr20 48580871 48581286 1 -chr20 48587893 48587954 1 -chr20 48592821 48593013 1 -chr20 48595251 48595547 1 -chr20 48595697 48595844 1 -chr20 48603605 48603928 1 -chr20 48604208 48604457 1 -chr20 48606972 48607211 1 -chr20 48607320 48607703 1 -chr20 48609569 48609990 1 -chr20 48612649 48613067 1 -chr20 48614230 48614436 1 -chr20 48614436 48614453 2 -chr20 48614453 48615013 1 -chr20 48620377 48620635 1 -chr20 48622277 48622453 1 -chr20 48626158 48626549 1 -chr20 48627466 48627894 1 -chr20 48627894 48627903 2 -chr20 48627903 48628174 1 -chr20 48628334 48628515 1 -chr20 48634864 48635250 1 -chr20 48635643 48636372 1 -chr20 48638755 48638952 1 -chr20 48656268 48656536 1 -chr20 48657928 48658105 1 -chr20 48671336 48671633 1 -chr20 48672846 48673090 1 -chr20 48675840 48675904 1 -chr20 48675925 48675977 1 -chr20 48687697 48687932 1 -chr20 48688818 48689052 1 -chr20 48692729 48692948 1 -chr20 48700807 48700915 1 -chr20 48715457 48715811 1 -chr20 48719740 48719956 1 -chr20 48720215 48720677 1 -chr20 48720787 48721184 1 -chr20 48722285 48722452 1 -chr20 48728609 48728874 1 -chr20 48734634 48735221 1 -chr20 48735266 48735488 1 -chr20 48745645 48745789 1 -chr20 48747901 48748292 1 -chr20 48748960 48749136 1 -chr20 48751042 48751558 1 -chr20 48752214 48752433 1 -chr20 48763920 48764195 1 -chr20 48773083 48773235 1 -chr20 48776964 48777458 1 -chr20 48779831 48780064 1 -chr20 48784672 48784855 1 -chr20 48797800 48797991 1 -chr20 48798435 48798687 1 -chr20 48807387 48807748 1 -chr20 48813299 48813791 1 -chr20 48814281 48814908 1 -chr20 48818596 48818964 1 -chr20 48819432 48819687 1 -chr20 48829216 48829424 1 -chr20 48831727 48831951 1 -chr20 48838370 48838613 1 -chr20 48856318 48856602 1 -chr20 48861988 48862037 1 -chr20 48889148 48889379 1 -chr20 48893166 48893405 1 -chr20 48898917 48899246 1 -chr20 48929382 48929611 1 -chr20 48930641 48930824 1 -chr20 48932831 48933073 1 -chr20 48936007 48936034 1 -chr20 48941064 48941368 1 -chr20 48946619 48946834 1 -chr20 48947840 48948349 1 -chr20 48948876 48949468 1 -chr20 48959727 48959753 1 -chr20 48969389 48969581 1 -chr20 48984134 48984378 1 -chr20 48991879 48992392 1 -chr20 48993678 48993812 1 -chr20 49005029 49005427 1 -chr20 49018782 49019356 1 -chr20 49037443 49037687 1 -chr20 49040846 49040995 1 -chr20 49046251 49046680 1 -chr20 49046796 49046961 1 -chr20 49050514 49050609 1 -chr20 49054092 49054474 1 -chr20 49055315 49055464 1 -chr20 49056531 49056800 1 -chr20 49067841 49067875 1 -chr20 49067875 49067881 2 -chr20 49067881 49068205 1 -chr20 49068508 49068568 1 -chr20 49068751 49069264 1 -chr20 49075875 49075927 1 -chr20 49085178 49085418 1 -chr20 49088056 49088238 1 -chr20 49089505 49089600 1 -chr20 49098749 49099248 1 -chr20 49112916 49113122 1 -chr20 49114875 49115246 1 -chr20 49120188 49120770 1 -chr20 49121229 49121355 1 -chr20 49134590 49134696 1 -chr20 49135628 49135864 1 -chr20 49137754 49137808 1 -chr20 49141680 49141722 1 -chr20 49154838 49154892 1 -chr20 49175693 49175720 1 -chr20 49184242 49184444 1 -chr20 49188526 49188788 1 -chr20 49189107 49189169 1 -chr20 49199694 49199773 1 -chr20 49209865 49209916 1 -chr20 49210279 49210509 1 -chr20 49229727 49229901 1 -chr20 49240526 49240570 1 -chr20 49243085 49243247 1 -chr20 49254216 49254245 1 -chr20 49270314 49270955 1 -chr20 49276451 49276737 1 -chr20 49278785 49279070 1 -chr20 49288488 49288517 1 -chr20 49289002 49289297 1 -chr20 49308793 49309095 1 -chr20 49310614 49311216 1 -chr20 49324119 49324298 1 -chr20 49328831 49329037 1 -chr20 49339604 49339668 1 -chr20 49344851 49345049 1 -chr20 49351458 49351879 1 -chr20 49367050 49367387 1 -chr20 49383731 49384136 1 -chr20 49384469 49384835 1 -chr20 49386196 49386383 1 -chr20 49387113 49387352 1 -chr20 49399285 49399332 1 -chr20 49409011 49409233 1 -chr20 49413360 49413494 1 -chr20 49417911 49418186 1 -chr20 49420283 49420665 1 -chr20 49424914 49425163 1 -chr20 49427193 49427311 1 -chr20 49430442 49430533 1 -chr20 49434739 49434995 1 -chr20 49435047 49435314 1 -chr20 49437122 49437422 1 -chr20 49440692 49440889 1 -chr20 49445135 49445511 1 -chr20 49445876 49445920 1 -chr20 49464324 49464464 1 -chr20 49464982 49465351 1 -chr20 49470339 49470541 1 -chr20 49470979 49471100 1 -chr20 49471100 49471116 2 -chr20 49471116 49471288 1 -chr20 49474524 49475028 1 -chr20 49487679 49488117 1 -chr20 49489568 49489839 1 -chr20 49499535 49499961 1 -chr20 49500561 49500693 1 -chr20 49502396 49502463 1 -chr20 49503159 49503367 1 -chr20 49507603 49507777 1 -chr20 49511842 49511895 1 -chr20 49512158 49512364 1 -chr20 49515210 49515434 1 -chr20 49517873 49518068 1 -chr20 49543632 49544173 1 -chr20 49545204 49545311 1 -chr20 49563695 49563876 1 -chr20 49575856 49576331 1 -chr20 49585232 49585670 1 -chr20 49588261 49588763 1 -chr20 49599605 49599947 1 -chr20 49601202 49601567 1 -chr20 49602891 49603109 1 -chr20 49607959 49607984 1 -chr20 49612664 49612743 1 -chr20 49623754 49623853 1 -chr20 49642275 49642649 1 -chr20 49650007 49650310 1 -chr20 49653275 49653837 1 -chr20 49666057 49666385 1 -chr20 49667300 49667395 1 -chr20 49668577 49668896 1 -chr20 49675609 49675841 1 -chr20 49693427 49693863 1 -chr20 49695701 49696189 1 -chr20 49697393 49697631 1 -chr20 49699737 49700003 1 -chr20 49709164 49709325 1 -chr20 49715684 49715916 1 -chr20 49728242 49728329 1 -chr20 49742423 49742627 1 -chr20 49750823 49751205 1 -chr20 49753062 49753305 1 -chr20 49765056 49765267 1 -chr20 49769739 49770078 1 -chr20 49771214 49771408 1 -chr20 49777830 49778101 1 -chr20 49779880 49779988 1 -chr20 49780175 49780408 1 -chr20 49781938 49782195 1 -chr20 49782745 49782988 1 -chr20 49792066 49792228 1 -chr20 49801625 49801659 1 -chr20 49804883 49804959 1 -chr20 49812031 49812085 1 -chr20 49812412 49812830 1 -chr20 49812915 49813308 1 -chr20 49816511 49816675 1 -chr20 49819026 49819296 1 -chr20 49833195 49833622 1 -chr20 49834528 49835058 1 -chr20 49840132 49840335 1 -chr20 49842443 49843107 1 -chr20 49864868 49865479 1 -chr20 49868786 49868968 1 -chr20 49880841 49881094 1 -chr20 49886300 49886509 1 -chr20 49888699 49889028 1 -chr20 49891902 49891966 1 -chr20 49892128 49892203 1 -chr20 49902090 49902163 1 -chr20 49909140 49909217 1 -chr20 49910307 49910494 1 -chr20 49918834 49919038 1 -chr20 49922565 49922594 1 -chr20 49923857 49923929 1 -chr20 49928593 49928789 1 -chr20 49929980 49930278 1 -chr20 49938405 49939034 1 -chr20 49939250 49939697 1 -chr20 49941222 49942059 1 -chr20 49947835 49947888 1 -chr20 49964999 49965617 1 -chr20 49980216 49980263 1 -chr20 49980862 49981062 1 -chr20 49987575 49987720 1 -chr20 49987720 49987730 2 -chr20 49987730 49988054 1 -chr20 49989125 49989244 1 -chr20 49993084 49993220 1 -chr20 49997445 49997473 1 -chr20 49997869 49998088 1 -chr20 50016142 50016387 1 -chr20 50019081 50019305 1 -chr20 50032249 50032590 1 -chr20 50033723 50034149 1 -chr20 50037239 50037538 1 -chr20 50044957 50045187 1 -chr20 50048355 50048874 1 -chr20 50058748 50058928 1 -chr20 50064480 50064540 1 -chr20 50067382 50067763 1 -chr20 50073450 50073744 1 -chr20 50079616 50079705 1 -chr20 50081203 50081423 1 -chr20 50089624 50089906 1 -chr20 50089906 50089915 2 -chr20 50089915 50089974 1 -chr20 50102763 50102991 1 -chr20 50110280 50110625 1 -chr20 50112723 50113081 1 -chr20 50115666 50116031 1 -chr20 50138469 50138703 1 -chr20 50141234 50141680 1 -chr20 50143981 50144240 1 -chr20 50149554 50149743 1 -chr20 50151159 50151459 1 -chr20 50152922 50153149 1 -chr20 50153717 50153932 1 -chr20 50158789 50158815 1 -chr20 50160288 50160663 1 -chr20 50175676 50175763 1 -chr20 50191001 50191256 1 -chr20 50205087 50205323 1 -chr20 50224933 50225418 1 -chr20 50230148 50230331 1 -chr20 50248868 50249195 1 -chr20 50258493 50258522 1 -chr20 50265888 50266319 1 -chr20 50267917 50268095 1 -chr20 50270781 50271095 1 -chr20 50271311 50271647 1 -chr20 50276127 50276312 1 -chr20 50276961 50277010 1 -chr20 50280116 50280528 1 -chr20 50281616 50282136 1 -chr20 50283304 50283353 1 -chr20 50291907 50292353 1 -chr20 50294387 50294556 1 -chr20 50295471 50295804 1 -chr20 50299233 50299424 1 -chr20 50311319 50311505 1 -chr20 50312412 50312625 1 -chr20 50312729 50312952 1 -chr20 50312952 50312961 2 -chr20 50312961 50313322 1 -chr20 50319866 50320090 1 -chr20 50321285 50321497 1 -chr20 50325031 50325462 1 -chr20 50325462 50325471 2 -chr20 50325471 50325733 1 -chr20 50329199 50329345 1 -chr20 50332109 50332346 1 -chr20 50338452 50338668 1 -chr20 50339020 50339254 1 -chr20 50343256 50343656 1 -chr20 50349240 50349575 1 -chr20 50355124 50355342 1 -chr20 50357349 50357763 1 -chr20 50361300 50361521 1 -chr20 50363608 50363663 1 -chr20 50368034 50368143 1 -chr20 50368143 50368164 2 -chr20 50368164 50368359 1 -chr20 50368776 50369075 1 -chr20 50369239 50369436 1 -chr20 50371872 50372190 1 -chr20 50376570 50376924 1 -chr20 50377284 50377560 1 -chr20 50379327 50379576 1 -chr20 50381767 50382466 1 -chr20 50386922 50387273 1 -chr20 50400460 50400633 1 -chr20 50400952 50401113 1 -chr20 50403777 50404061 1 -chr20 50405376 50405596 1 -chr20 50408117 50408145 1 -chr20 50414071 50414115 1 -chr20 50422577 50422891 1 -chr20 50439573 50440109 1 -chr20 50440325 50440404 1 -chr20 50449750 50449965 1 -chr20 50462421 50462801 1 -chr20 50475222 50475251 1 -chr20 50482101 50482310 1 -chr20 50513027 50513111 1 -chr20 50514831 50515163 1 -chr20 50521772 50522520 1 -chr20 50545485 50545648 1 -chr20 50550466 50550671 1 -chr20 50556693 50556749 1 -chr20 50558603 50558824 1 -chr20 50566103 50566464 1 -chr20 50571524 50571705 1 -chr20 50577895 50578245 1 -chr20 50579608 50579905 1 -chr20 50581679 50581991 1 -chr20 50582126 50582490 1 -chr20 50589816 50590032 1 -chr20 50590459 50590665 1 -chr20 50602054 50602292 1 -chr20 50610658 50610996 1 -chr20 50620989 50621223 1 -chr20 50625680 50626048 1 -chr20 50627484 50627580 1 -chr20 50628049 50628406 1 -chr20 50629438 50629515 1 -chr20 50631101 50631402 1 -chr20 50634841 50634898 1 -chr20 50635840 50636097 1 -chr20 50636562 50636781 1 -chr20 50637957 50638185 1 -chr20 50642581 50642820 1 -chr20 50657165 50657194 1 -chr20 50668912 50669088 1 -chr20 50670638 50670912 1 -chr20 50671924 50671950 1 -chr20 50672559 50672723 1 -chr20 50692317 50692781 1 -chr20 50695656 50695969 1 -chr20 50704367 50704404 1 -chr20 50708587 50708644 1 -chr20 50710869 50711085 1 -chr20 50717074 50717126 1 -chr20 50724889 50725174 1 -chr20 50729219 50729614 1 -chr20 50730970 50731195 1 -chr20 50731720 50731908 1 -chr20 50732704 50732944 1 -chr20 50733731 50734283 1 -chr20 50739624 50739845 1 -chr20 50748724 50749079 1 -chr20 50750094 50750323 1 -chr20 50758989 50759254 1 -chr20 50764546 50764601 1 -chr20 50765143 50765207 1 -chr20 50767801 50767905 1 -chr20 50770589 50770773 1 -chr20 50770964 50771157 1 -chr20 50776362 50776789 1 -chr20 50783729 50783773 1 -chr20 50790130 50790261 1 -chr20 50793483 50793547 1 -chr20 50796021 50796079 1 -chr20 50821909 50822308 1 -chr20 50828280 50828514 1 -chr20 50841965 50842050 1 -chr20 50845373 50845868 1 -chr20 50847363 50847729 1 -chr20 50854734 50855469 1 -chr20 50866738 50866944 1 -chr20 50868679 50869040 1 -chr20 50869430 50869588 1 -chr20 50885621 50885927 1 -chr20 50889252 50889503 1 -chr20 50891349 50891537 1 -chr20 50900189 50900361 1 -chr20 50903260 50903485 1 -chr20 50907867 50908127 1 -chr20 50908513 50908539 1 -chr20 50909524 50909811 1 -chr20 50914618 50914843 1 -chr20 50917719 50917871 1 -chr20 50918619 50918776 1 -chr20 50920638 50921481 1 -chr20 50931827 50932094 1 -chr20 50935774 50936407 1 -chr20 50946116 50946457 1 -chr20 50948174 50948737 1 -chr20 50957376 50957772 1 -chr20 50960132 50960467 1 -chr20 50961941 50962182 1 -chr20 50972202 50972429 1 -chr20 50977421 50977986 1 -chr20 50985247 50985293 1 -chr20 51004880 51005062 1 -chr20 51009372 51009735 1 -chr20 51010067 51010224 1 -chr20 51017578 51017943 1 -chr20 51018885 51019140 1 -chr20 51023818 51023984 1 -chr20 51037009 51037182 1 -chr20 51063328 51063586 1 -chr20 51072908 51073172 1 -chr20 51078698 51078888 1 -chr20 51083741 51084230 1 -chr20 51085291 51085526 1 -chr20 51089379 51089712 1 -chr20 51092477 51092698 1 -chr20 51098556 51098766 1 -chr20 51099541 51099973 1 -chr20 51114774 51114827 1 -chr20 51119846 51120263 1 -chr20 51120687 51120857 1 -chr20 51126482 51126693 1 -chr20 51128021 51128430 1 -chr20 51132864 51133059 1 -chr20 51155498 51155729 1 -chr20 51164295 51164744 1 -chr20 51173127 51173515 1 -chr20 51186146 51186359 1 -chr20 51186607 51186825 1 -chr20 51190399 51190618 1 -chr20 51200292 51200505 1 -chr20 51203081 51203313 1 -chr20 51207811 51208021 1 -chr20 51209009 51209616 1 -chr20 51214277 51214435 1 -chr20 51223023 51223331 1 -chr20 51236914 51237580 1 -chr20 51243074 51243288 1 -chr20 51244471 51244802 1 -chr20 51276092 51276481 1 -chr20 51282317 51282642 1 -chr20 51285414 51285843 1 -chr20 51286567 51286992 1 -chr20 51292665 51292884 1 -chr20 51293818 51293909 1 -chr20 51301655 51302064 1 -chr20 51308478 51308661 1 -chr20 51308661 51308680 2 -chr20 51308680 51308931 1 -chr20 51315988 51316075 1 -chr20 51316389 51316473 1 -chr20 51318287 51318465 1 -chr20 51333936 51334156 1 -chr20 51334863 51335172 1 -chr20 51337831 51338224 1 -chr20 51340111 51340761 1 -chr20 51346008 51346343 1 -chr20 51348611 51348766 1 -chr20 51351034 51351303 1 -chr20 51355087 51355457 1 -chr20 51356722 51356748 1 -chr20 51357939 51357969 1 -chr20 51360507 51360801 1 -chr20 51364048 51364478 1 -chr20 51377449 51377624 1 -chr20 51388608 51389160 1 -chr20 51389772 51390125 1 -chr20 51392084 51392333 1 -chr20 51394093 51394335 1 -chr20 51397972 51398232 1 -chr20 51399775 51400338 1 -chr20 51402395 51402849 1 -chr20 51415759 51415996 1 -chr20 51422186 51422653 1 -chr20 51430173 51430357 1 -chr20 51432711 51432795 1 -chr20 51433490 51433692 1 -chr20 51434117 51434338 1 -chr20 51443642 51443823 1 -chr20 51449732 51450318 1 -chr20 51456037 51456067 1 -chr20 51456593 51456769 1 -chr20 51462428 51463026 1 -chr20 51463152 51463319 1 -chr20 51471402 51471912 1 -chr20 51477645 51477833 1 -chr20 51480616 51480808 1 -chr20 51484705 51485069 1 -chr20 51486694 51486899 1 -chr20 51490855 51491046 1 -chr20 51497200 51497406 1 -chr20 51500827 51501107 1 -chr20 51507551 51507802 1 -chr20 51533377 51533730 1 -chr20 51538066 51538253 1 -chr20 51542175 51542228 1 -chr20 51542433 51542670 1 -chr20 51549150 51549324 1 -chr20 51551005 51551326 1 -chr20 51557738 51558015 1 -chr20 51559487 51559665 1 -chr20 51570918 51571096 1 -chr20 51573544 51573747 1 -chr20 51583403 51583848 1 -chr20 51585015 51585243 1 -chr20 51588438 51588859 1 -chr20 51593869 51594408 1 -chr20 51600551 51600779 1 -chr20 51601180 51601372 1 -chr20 51603382 51603727 1 -chr20 51610296 51610492 1 -chr20 51612450 51612576 1 -chr20 51612936 51613214 1 -chr20 51613219 51613375 1 -chr20 51615136 51615401 1 -chr20 51617156 51617236 1 -chr20 51623661 51623724 1 -chr20 51624163 51624401 1 -chr20 51631237 51631624 1 -chr20 51633227 51633443 1 -chr20 51638101 51638337 1 -chr20 51643950 51644022 1 -chr20 51654137 51654618 1 -chr20 51663892 51664050 1 -chr20 51664102 51664173 1 -chr20 51665334 51665521 1 -chr20 51665897 51666065 1 -chr20 51668950 51669578 1 -chr20 51682958 51683015 1 -chr20 51683298 51683332 1 -chr20 51687981 51688042 1 -chr20 51689294 51689580 1 -chr20 51689699 51689865 1 -chr20 51696542 51696650 1 -chr20 51696797 51697068 1 -chr20 51702116 51702187 1 -chr20 51708543 51708605 1 -chr20 51713345 51713481 1 -chr20 51725508 51725709 1 -chr20 51733579 51733651 1 -chr20 51734720 51734907 1 -chr20 51741437 51741519 1 -chr20 51742974 51743237 1 -chr20 51750827 51751296 1 -chr20 51753801 51753911 1 -chr20 51756955 51757129 1 -chr20 51758907 51759202 1 -chr20 51765524 51765704 1 -chr20 51770318 51770494 1 -chr20 51780300 51780335 1 -chr20 51781000 51781221 1 -chr20 51782670 51782856 1 -chr20 51789684 51790211 1 -chr20 51793125 51793304 1 -chr20 51808627 51808699 1 -chr20 51823613 51823810 1 -chr20 51828656 51829006 1 -chr20 51839218 51839663 1 -chr20 51840038 51840117 1 -chr20 51850702 51850780 1 -chr20 51859541 51859584 1 -chr20 51859933 51860247 1 -chr20 51868717 51868963 1 -chr20 51877219 51877435 1 -chr20 51898976 51899432 1 -chr20 51914008 51914292 1 -chr20 51919376 51919427 1 -chr20 51921984 51922465 1 -chr20 51937465 51937532 1 -chr20 51945026 51945165 1 -chr20 51949080 51949336 1 -chr20 51964235 51964459 1 -chr20 51970283 51970376 1 -chr20 51972843 51972952 1 -chr20 51976924 51976983 1 -chr20 51979369 51979994 1 -chr20 51993126 51993322 1 -chr20 52008342 52008428 1 -chr20 52015621 52015912 1 -chr20 52026599 52026654 1 -chr20 52031732 52032140 1 -chr20 52034358 52034444 1 -chr20 52055501 52055727 1 -chr20 52065570 52065757 1 -chr20 52089805 52090013 1 -chr20 52093324 52093363 1 -chr20 52104783 52105127 1 -chr20 52107221 52107463 1 -chr20 52121615 52121682 1 -chr20 52124900 52125323 1 -chr20 52133847 52133952 1 -chr20 52135053 52135095 1 -chr20 52142625 52142657 1 -chr20 52147753 52147804 1 -chr20 52151081 52151493 1 -chr20 52167500 52167525 1 -chr20 52169374 52169600 1 -chr20 52176942 52177525 1 -chr20 52183659 52183826 1 -chr20 52185313 52185554 1 -chr20 52186151 52186357 1 -chr20 52214658 52214696 1 -chr20 52217086 52217535 1 -chr20 52241283 52241621 1 -chr20 52245463 52245826 1 -chr20 52246264 52246575 1 -chr20 52246623 52246976 1 -chr20 52254467 52255005 1 -chr20 52277957 52277997 1 -chr20 52321388 52321955 1 -chr20 52322655 52323307 1 -chr20 52354773 52354801 1 -chr20 52363378 52363823 1 -chr20 52366549 52367355 1 -chr20 52371855 52371976 1 -chr20 52373223 52373647 1 -chr20 52383984 52384074 1 -chr20 52397548 52397773 1 -chr20 52419977 52420187 1 -chr20 52427911 52428507 1 -chr20 52445374 52445962 1 -chr20 52453163 52453253 1 -chr20 52463721 52464619 1 -chr20 52466499 52466641 1 -chr20 52468692 52468737 1 -chr20 52473417 52473620 1 -chr20 52476241 52476962 1 -chr20 52492870 52493142 1 -chr20 52497356 52497663 1 -chr20 52522656 52522866 1 -chr20 52527206 52527483 1 -chr20 52545245 52545341 1 -chr20 52560271 52560858 1 -chr20 52568495 52568702 1 -chr20 52578353 52578743 1 -chr20 52580449 52580757 1 -chr20 52608650 52608876 1 -chr20 52609774 52609957 1 -chr20 52617970 52618577 1 -chr20 52621357 52621421 1 -chr20 52637495 52637649 1 -chr20 52640741 52640831 1 -chr20 52641479 52642043 1 -chr20 52644125 52644342 1 -chr20 52647307 52647718 1 -chr20 52661856 52662151 1 -chr20 52678789 52679480 1 -chr20 52692879 52693284 1 -chr20 52695044 52695405 1 -chr20 52704517 52704749 1 -chr20 52705292 52705321 1 -chr20 52723965 52724245 1 -chr20 52726888 52727008 1 -chr20 52742906 52743117 1 -chr20 52745992 52746367 1 -chr20 52749291 52749454 1 -chr20 52750707 52750746 1 -chr20 52752857 52753051 1 -chr20 52755728 52755970 1 -chr20 52768765 52769251 1 -chr20 52775613 52775809 1 -chr20 52778661 52778865 1 -chr20 52784708 52785271 1 -chr20 52811540 52811918 1 -chr20 52817818 52817951 1 -chr20 52819123 52819577 1 -chr20 52823168 52823319 1 -chr20 52839606 52840356 1 -chr20 52845775 52845962 1 -chr20 52859349 52859803 1 -chr20 52860107 52860474 1 -chr20 52871623 52872018 1 -chr20 52880225 52880362 1 -chr20 52885936 52886787 1 -chr20 52887491 52887669 1 -chr20 52892736 52893066 1 -chr20 52917628 52917978 1 -chr20 52921975 52922020 1 -chr20 52925802 52926612 1 -chr20 52932459 52932767 1 -chr20 52939641 52940231 1 -chr20 52948999 52949608 1 -chr20 52961259 52961670 1 -chr20 52963201 52963609 1 -chr20 52973782 52973960 1 -chr20 52977493 52977679 1 -chr20 52980867 52981491 1 -chr20 52989302 52989602 1 -chr20 52990151 52990618 1 -chr20 52990939 52991158 1 -chr20 52996685 52996919 1 -chr20 52997608 52998196 1 -chr20 53001625 53001851 1 -chr20 53011697 53012180 1 -chr20 53014874 53015045 1 -chr20 53015681 53015892 1 -chr20 53016747 53016978 1 -chr20 53020875 53021155 1 -chr20 53028169 53028412 1 -chr20 53034785 53034980 1 -chr20 53037137 53037972 1 -chr20 53039833 53039862 1 -chr20 53048148 53048637 1 -chr20 53050293 53050614 1 -chr20 53054265 53054487 1 -chr20 53061093 53061898 1 -chr20 53067011 53067272 1 -chr20 53071903 53072699 1 -chr20 53083141 53083289 1 -chr20 53099964 53100332 1 -chr20 53106980 53107502 1 -chr20 53124386 53124714 1 -chr20 53133466 53134142 1 -chr20 53138742 53139404 1 -chr20 53140414 53140463 1 -chr20 53146927 53147448 1 -chr20 53153207 53153378 1 -chr20 53159449 53159860 1 -chr20 53163884 53164101 1 -chr20 53164310 53164512 1 -chr20 53169134 53169281 1 -chr20 53172136 53172556 1 -chr20 53172775 53172900 1 -chr20 53182097 53182164 1 -chr20 53190781 53191106 1 -chr20 53197117 53197366 1 -chr20 53203900 53204220 1 -chr20 53204583 53204756 1 -chr20 53210153 53210290 1 -chr20 53211376 53211578 1 -chr20 53217383 53217623 1 -chr20 53221457 53221654 1 -chr20 53223957 53224061 1 -chr20 53236104 53236299 1 -chr20 53236635 53236709 1 -chr20 53245082 53245272 1 -chr20 53248558 53248781 1 -chr20 53253739 53253983 1 -chr20 53262146 53262371 1 -chr20 53264418 53264673 1 -chr20 53274976 53275341 1 -chr20 53276063 53276238 1 -chr20 53277999 53278310 1 -chr20 53288301 53288346 1 -chr20 53295324 53295561 1 -chr20 53298686 53298868 1 -chr20 53309965 53310326 1 -chr20 53313657 53313940 1 -chr20 53316512 53316765 1 -chr20 53317417 53317747 1 -chr20 53320343 53320646 1 -chr20 53323342 53323608 1 -chr20 53332781 53333115 1 -chr20 53337966 53338041 1 -chr20 53338148 53338367 1 -chr20 53338963 53339199 1 -chr20 53343603 53344242 1 -chr20 53346031 53346404 1 -chr20 53352140 53352230 1 -chr20 53371194 53371621 1 -chr20 53373016 53373457 1 -chr20 53374335 53374504 1 -chr20 53385470 53385978 1 -chr20 53386846 53387073 1 -chr20 53405885 53405980 1 -chr20 53408293 53408710 1 -chr20 53416351 53416594 1 -chr20 53421740 53421803 1 -chr20 53421949 53422254 1 -chr20 53422281 53422493 1 -chr20 53427361 53427925 1 -chr20 53430391 53430477 1 -chr20 53439190 53439377 1 -chr20 53443339 53443699 1 -chr20 53444244 53444454 1 -chr20 53453798 53454179 1 -chr20 53455221 53455442 1 -chr20 53458194 53458260 1 -chr20 53480521 53480558 1 -chr20 53487020 53487249 1 -chr20 53490833 53490995 1 -chr20 53511504 53511577 1 -chr20 53516954 53517287 1 -chr20 53522094 53522325 1 -chr20 53523620 53523691 1 -chr20 53524974 53525636 1 -chr20 53531791 53532026 1 -chr20 53545250 53545659 1 -chr20 53570370 53570564 1 -chr20 53580015 53580221 1 -chr20 53581006 53581648 1 -chr20 53585855 53586055 1 -chr20 53589412 53589588 1 -chr20 53594381 53594631 1 -chr20 53598577 53599219 1 -chr20 53602634 53602828 1 -chr20 53603293 53603360 1 -chr20 53603838 53604010 1 -chr20 53612381 53612460 1 -chr20 53621665 53621850 1 -chr20 53629338 53629402 1 -chr20 53642739 53643424 1 -chr20 53648883 53648955 1 -chr20 53652952 53653298 1 -chr20 53665791 53665840 1 -chr20 53668055 53668114 1 -chr20 53680776 53680959 1 -chr20 53682433 53682619 1 -chr20 53721965 53722039 1 -chr20 53725116 53725451 1 -chr20 53733185 53733255 1 -chr20 53735333 53735370 1 -chr20 53737869 53738715 1 -chr20 53741470 53741821 1 -chr20 53743662 53743992 1 -chr20 53744088 53744119 1 -chr20 53749628 53749879 1 -chr20 53751915 53752171 1 -chr20 53754697 53755258 1 -chr20 53759733 53759760 1 -chr20 53762048 53762270 1 -chr20 53773807 53774028 1 -chr20 53805022 53805319 1 -chr20 53823552 53823779 1 -chr20 53824150 53824214 1 -chr20 53824220 53824262 1 -chr20 53828425 53828738 1 -chr20 53834995 53835077 1 -chr20 53845018 53845125 1 -chr20 53858532 53858599 1 -chr20 53865534 53865793 1 -chr20 53866962 53867169 1 -chr20 53877019 53877234 1 -chr20 53879894 53879925 1 -chr20 53881669 53881997 1 -chr20 53897420 53897564 1 -chr20 53915964 53916206 1 -chr20 53918768 53918858 1 -chr20 53920559 53920604 1 -chr20 53928831 53928882 1 -chr20 53935748 53936011 1 -chr20 53946348 53946581 1 -chr20 53948246 53948498 1 -chr20 53958390 53958710 1 -chr20 53964581 53965153 1 -chr20 53978426 53978679 1 -chr20 53987500 53987681 1 -chr20 53992651 53993264 1 -chr20 53997321 53997578 1 -chr20 54006567 54006632 1 -chr20 54012397 54012597 1 -chr20 54020558 54021057 1 -chr20 54022837 54023038 1 -chr20 54029419 54030329 1 -chr20 54030445 54030675 1 -chr20 54045462 54045730 1 -chr20 54054578 54054876 1 -chr20 54094702 54095088 1 -chr20 54099697 54099919 1 -chr20 54104133 54104367 1 -chr20 54112530 54112784 1 -chr20 54120038 54120197 1 -chr20 54130608 54130810 1 -chr20 54134858 54135038 1 -chr20 54135949 54136285 1 -chr20 54140121 54140429 1 -chr20 54159580 54159608 1 -chr20 54161345 54161511 1 -chr20 54161918 54162522 1 -chr20 54168365 54168583 1 -chr20 54169990 54170712 1 -chr20 54171815 54172040 1 -chr20 54172138 54172687 1 -chr20 54182583 54182776 1 -chr20 54187963 54188331 1 -chr20 54188758 54189512 1 -chr20 54196774 54196998 1 -chr20 54200630 54201048 1 -chr20 54203952 54204131 1 -chr20 54204628 54204862 1 -chr20 54206211 54206533 1 -chr20 54212536 54212785 1 -chr20 54225627 54225946 1 -chr20 54228987 54229470 1 -chr20 54231538 54231895 1 -chr20 54257131 54257308 1 -chr20 54272385 54272603 1 -chr20 54274172 54274255 1 -chr20 54291265 54291488 1 -chr20 54293585 54293784 1 -chr20 54296704 54296945 1 -chr20 54308200 54308648 1 -chr20 54316116 54316337 1 -chr20 54328611 54328872 1 -chr20 54338419 54338631 1 -chr20 54343571 54343810 1 -chr20 54345024 54345358 1 -chr20 54346396 54346638 1 -chr20 54351910 54352104 1 -chr20 54368115 54368484 1 -chr20 54373416 54374100 1 -chr20 54382583 54382812 1 -chr20 54386712 54387220 1 -chr20 54390801 54391209 1 -chr20 54400223 54400437 1 -chr20 54401384 54401578 1 -chr20 54429035 54429222 1 -chr20 54429468 54429817 1 -chr20 54430741 54430904 1 -chr20 54439513 54439605 1 -chr20 54447057 54447641 1 -chr20 54451531 54451788 1 -chr20 54456851 54457020 1 -chr20 54459130 54459291 1 -chr20 54464695 54465052 1 -chr20 54466772 54467156 1 -chr20 54473414 54473474 1 -chr20 54479772 54480027 1 -chr20 54481038 54481116 1 -chr20 54487756 54488147 1 -chr20 54515222 54515280 1 -chr20 54515289 54515474 1 -chr20 54515813 54516548 1 -chr20 54521203 54521565 1 -chr20 54536053 54536280 1 -chr20 54536301 54536592 1 -chr20 54540019 54540356 1 -chr20 54549556 54549875 1 -chr20 54554549 54555263 1 -chr20 54582417 54582651 1 -chr20 54586657 54587212 1 -chr20 54589727 54590076 1 -chr20 54592557 54592643 1 -chr20 54609735 54610045 1 -chr20 54633046 54633587 1 -chr20 54635582 54635801 1 -chr20 54656866 54656918 1 -chr20 54667234 54667682 1 -chr20 54674947 54675072 1 -chr20 54677468 54677718 1 -chr20 54679063 54679285 1 -chr20 54679724 54679779 1 -chr20 54688302 54688523 1 -chr20 54696935 54697089 1 -chr20 54700099 54700728 1 -chr20 54701543 54701659 1 -chr20 54702585 54702752 1 -chr20 54718165 54718427 1 -chr20 54721708 54721855 1 -chr20 54722943 54723118 1 -chr20 54726698 54726818 1 -chr20 54729441 54729717 1 -chr20 54735019 54735448 1 -chr20 54740685 54740861 1 -chr20 54759200 54759406 1 -chr20 54759520 54759712 1 -chr20 54763080 54763105 1 -chr20 54765313 54765537 1 -chr20 54779037 54779440 1 -chr20 54780683 54780827 1 -chr20 54806419 54806750 1 -chr20 54809169 54809377 1 -chr20 54831252 54831476 1 -chr20 54842309 54842508 1 -chr20 54859741 54860163 1 -chr20 54866833 54867018 1 -chr20 54868572 54868778 1 -chr20 54879975 54880439 1 -chr20 54887768 54888378 1 -chr20 54915883 54916284 1 -chr20 54931254 54931593 1 -chr20 54933168 54933521 1 -chr20 54941509 54942218 1 -chr20 54959926 54960143 1 -chr20 54965724 54966338 1 -chr20 54969732 54970165 1 -chr20 54972324 54972599 1 -chr20 54990656 54991278 1 -chr20 54992929 54993247 1 -chr20 54997149 54997424 1 -chr20 54997424 54997433 2 -chr20 54997433 54997709 1 -chr20 55004052 55004529 1 -chr20 55009944 55010385 1 -chr20 55013750 55013978 1 -chr20 55015656 55015918 1 -chr20 55026486 55027187 1 -chr20 55027251 55027401 1 -chr20 55035031 55035376 1 -chr20 55041249 55041428 1 -chr20 55045521 55046049 1 -chr20 55049483 55049801 1 -chr20 55069622 55069955 1 -chr20 55075011 55075173 1 -chr20 55075652 55075842 1 -chr20 55078797 55078987 1 -chr20 55105996 55106025 1 -chr20 55111087 55111347 1 -chr20 55126978 55127555 1 -chr20 55131226 55131309 1 -chr20 55131328 55131356 1 -chr20 55135305 55135804 1 -chr20 55155551 55155724 1 -chr20 55175994 55176180 1 -chr20 55182132 55182267 1 -chr20 55184032 55184763 1 -chr20 55185138 55185182 1 -chr20 55213843 55214136 1 -chr20 55215952 55216176 1 -chr20 55229110 55229261 1 -chr20 55246568 55246652 1 -chr20 55254099 55254423 1 -chr20 55275171 55275254 1 -chr20 55276298 55276361 1 -chr20 55291054 55291246 1 -chr20 55306471 55306627 1 -chr20 55313809 55314155 1 -chr20 55314155 55314164 2 -chr20 55314164 55314446 1 -chr20 55314786 55315276 1 -chr20 55318384 55318465 1 -chr20 55326668 55327091 1 -chr20 55328219 55328506 1 -chr20 55328633 55329057 1 -chr20 55330008 55330181 1 -chr20 55333750 55333992 1 -chr20 55340156 55340579 1 -chr20 55351763 55351941 1 -chr20 55352390 55352450 1 -chr20 55373645 55373901 1 -chr20 55435843 55436210 1 -chr20 55438062 55438256 1 -chr20 55444260 55444698 1 -chr20 55444721 55444958 1 -chr20 55448817 55449008 1 -chr20 55453462 55453869 1 -chr20 55457576 55457796 1 -chr20 55470210 55470417 1 -chr20 55472693 55472756 1 -chr20 55488623 55489193 1 -chr20 55498917 55499080 1 -chr20 55504377 55504622 1 -chr20 55511696 55512067 1 -chr20 55531755 55532104 1 -chr20 55538759 55539043 1 -chr20 55539752 55540475 1 -chr20 55547506 55547954 1 -chr20 55548903 55549289 1 -chr20 55549921 55550662 1 -chr20 55551086 55551292 1 -chr20 55552645 55552990 1 -chr20 55556299 55556465 1 -chr20 55582637 55583011 1 -chr20 55592804 55592987 1 -chr20 55595063 55595308 1 -chr20 55626162 55626522 1 -chr20 55629761 55629916 1 -chr20 55633828 55634180 1 -chr20 55646876 55647163 1 -chr20 55650745 55651052 1 -chr20 55660971 55661220 1 -chr20 55661775 55662049 1 -chr20 55670680 55670773 1 -chr20 55675715 55675973 1 -chr20 55699551 55699750 1 -chr20 55701598 55701755 1 -chr20 55728267 55728540 1 -chr20 55748998 55749087 1 -chr20 55758564 55758934 1 -chr20 55769662 55769770 1 -chr20 55771007 55771375 1 -chr20 55772090 55772380 1 -chr20 55785165 55785393 1 -chr20 55785914 55786250 1 -chr20 55799717 55800091 1 -chr20 55801321 55801822 1 -chr20 55803375 55803625 1 -chr20 55805826 55806013 1 -chr20 55815339 55815415 1 -chr20 55818578 55819146 1 -chr20 55832396 55832617 1 -chr20 55845961 55846358 1 -chr20 55854616 55854706 1 -chr20 55865487 55865698 1 -chr20 55893575 55893728 1 -chr20 55893995 55894148 1 -chr20 55901119 55901296 1 -chr20 55907449 55907694 1 -chr20 55913757 55913912 1 -chr20 55918161 55918456 1 -chr20 55925894 55926130 1 -chr20 55945715 55946003 1 -chr20 55946996 55947099 1 -chr20 55948473 55948902 1 -chr20 55958416 55958779 1 -chr20 55963630 55963684 1 -chr20 55964884 55965239 1 -chr20 55969742 55970005 1 -chr20 55980405 55980891 1 -chr20 55980912 55981209 1 -chr20 55987168 55987656 1 -chr20 55988885 55989140 1 -chr20 55989867 55990105 1 -chr20 55990942 55991385 1 -chr20 55996490 55996749 1 -chr20 55997824 55998140 1 -chr20 56011988 56012306 1 -chr20 56032086 56032348 1 -chr20 56038082 56038328 1 -chr20 56040207 56040495 1 -chr20 56043253 56043424 1 -chr20 56061122 56061347 1 -chr20 56073329 56073810 1 -chr20 56080325 56080575 1 -chr20 56084627 56084781 1 -chr20 56088864 56089078 1 -chr20 56091711 56091997 1 -chr20 56099881 56100034 1 -chr20 56112661 56112991 1 -chr20 56117455 56117911 1 -chr20 56121596 56121783 1 -chr20 56124989 56125186 1 -chr20 56130182 56130370 1 -chr20 56136442 56136630 1 -chr20 56145798 56145874 1 -chr20 56147206 56147400 1 -chr20 56151180 56151572 1 -chr20 56163069 56163405 1 -chr20 56176431 56176623 1 -chr20 56176832 56177033 1 -chr20 56181360 56181403 1 -chr20 56186041 56186084 1 -chr20 56190362 56190442 1 -chr20 56195362 56195476 1 -chr20 56196721 56196911 1 -chr20 56200098 56200274 1 -chr20 56201498 56201679 1 -chr20 56210854 56211011 1 -chr20 56216816 56217036 1 -chr20 56226860 56227121 1 -chr20 56228014 56228179 1 -chr20 56230394 56230481 1 -chr20 56233649 56234000 1 -chr20 56248183 56248659 1 -chr20 56256755 56256895 1 -chr20 56256928 56257158 1 -chr20 56260159 56260405 1 -chr20 56267464 56267592 1 -chr20 56271657 56272227 1 -chr20 56281622 56281805 1 -chr20 56289845 56290085 1 -chr20 56303323 56303539 1 -chr20 56322883 56323468 1 -chr20 56323783 56324060 1 -chr20 56325635 56325741 1 -chr20 56345979 56346144 1 -chr20 56346775 56347023 1 -chr20 56350539 56350770 1 -chr20 56360219 56360596 1 -chr20 56363134 56363566 1 -chr20 56363766 56364053 1 -chr20 56369670 56369977 1 -chr20 56370221 56370386 1 -chr20 56373681 56373855 1 -chr20 56383452 56383703 1 -chr20 56384900 56385014 1 -chr20 56387228 56387430 1 -chr20 56399237 56399625 1 -chr20 56404797 56404880 1 -chr20 56407271 56407682 1 -chr20 56444075 56444161 1 -chr20 56445449 56445846 1 -chr20 56450521 56450717 1 -chr20 56456060 56456184 1 -chr20 56465151 56465187 1 -chr20 56478523 56478723 1 -chr20 56478829 56478996 1 -chr20 56512326 56512683 1 -chr20 56524579 56524795 1 -chr20 56530518 56530652 1 -chr20 56549816 56549893 1 -chr20 56550432 56550733 1 -chr20 56552830 56552895 1 -chr20 56553035 56553312 1 -chr20 56563994 56564412 1 -chr20 56575220 56575411 1 -chr20 56577516 56577714 1 -chr20 56579252 56579435 1 -chr20 56579507 56579906 1 -chr20 56584507 56584727 1 -chr20 56588758 56588938 1 -chr20 56613009 56613640 1 -chr20 56631492 56631765 1 -chr20 56633533 56633821 1 -chr20 56637890 56637972 1 -chr20 56639939 56640002 1 -chr20 56643571 56643983 1 -chr20 56648917 56649082 1 -chr20 56649762 56649834 1 -chr20 56650386 56650476 1 -chr20 56650890 56650950 1 -chr20 56652418 56652458 1 -chr20 56663960 56664155 1 -chr20 56686325 56686557 1 -chr20 56694063 56694283 1 -chr20 56698012 56698540 1 -chr20 56699201 56699355 1 -chr20 56703740 56703803 1 -chr20 56707048 56707636 1 -chr20 56716378 56716586 1 -chr20 56717642 56717790 1 -chr20 56721330 56721405 1 -chr20 56721570 56721654 1 -chr20 56729888 56730100 1 -chr20 56733376 56733623 1 -chr20 56734640 56734702 1 -chr20 56739417 56739838 1 -chr20 56744851 56744880 1 -chr20 56762443 56762628 1 -chr20 56763303 56763472 1 -chr20 56769866 56770118 1 -chr20 56770738 56770945 1 -chr20 56771817 56772088 1 -chr20 56778504 56778931 1 -chr20 56780023 56780457 1 -chr20 56783474 56783674 1 -chr20 56786421 56786632 1 -chr20 56790773 56790946 1 -chr20 56790946 56790955 2 -chr20 56790955 56791789 1 -chr20 56796541 56796901 1 -chr20 56799141 56799441 1 -chr20 56813143 56813350 1 -chr20 56814012 56814075 1 -chr20 56816923 56817108 1 -chr20 56819200 56819367 1 -chr20 56819386 56819583 1 -chr20 56828775 56828945 1 -chr20 56843753 56844067 1 -chr20 56855628 56856080 1 -chr20 56859779 56859978 1 -chr20 56871169 56871476 1 -chr20 56871786 56871953 1 -chr20 56874279 56874609 1 -chr20 56874985 56875223 1 -chr20 56880658 56880996 1 -chr20 56892404 56892874 1 -chr20 56908615 56908860 1 -chr20 56910194 56910403 1 -chr20 56912289 56912511 1 -chr20 56913708 56913957 1 -chr20 56918844 56918916 1 -chr20 56926167 56926500 1 -chr20 56928258 56928481 1 -chr20 56930338 56930679 1 -chr20 56939894 56940115 1 -chr20 56947309 56947396 1 -chr20 56950324 56950512 1 -chr20 56954208 56954487 1 -chr20 56970711 56971070 1 -chr20 56971461 56971716 1 -chr20 56974433 56974508 1 -chr20 56977685 56978002 1 -chr20 56988528 56988878 1 -chr20 56989345 56989723 1 -chr20 57004534 57004747 1 -chr20 57008191 57008399 1 -chr20 57012528 57012971 1 -chr20 57013628 57013990 1 -chr20 57019302 57019374 1 -chr20 57022354 57022550 1 -chr20 57022822 57023123 1 -chr20 57023757 57024035 1 -chr20 57031340 57031559 1 -chr20 57040988 57041480 1 -chr20 57047449 57047964 1 -chr20 57050008 57050235 1 -chr20 57052264 57052480 1 -chr20 57052579 57052727 1 -chr20 57053112 57053523 1 -chr20 57060119 57060286 1 -chr20 57061436 57061650 1 -chr20 57066337 57066498 1 -chr20 57066734 57066994 1 -chr20 57075950 57076120 1 -chr20 57077653 57078077 1 -chr20 57081060 57081371 1 -chr20 57087078 57087251 1 -chr20 57091694 57091954 1 -chr20 57094296 57094496 1 -chr20 57107643 57108037 1 -chr20 57115760 57115814 1 -chr20 57116831 57116937 1 -chr20 57124529 57124745 1 -chr20 57143418 57143744 1 -chr20 57145687 57145921 1 -chr20 57160091 57160470 1 -chr20 57167141 57167725 1 -chr20 57178778 57179022 1 -chr20 57179313 57179700 1 -chr20 57179700 57179709 2 -chr20 57179709 57179903 1 -chr20 57181615 57181822 1 -chr20 57189318 57189971 1 -chr20 57191483 57191525 1 -chr20 57195125 57195298 1 -chr20 57195384 57195547 1 -chr20 57195547 57195571 2 -chr20 57195571 57195792 1 -chr20 57195978 57196600 1 -chr20 57203666 57203914 1 -chr20 57205569 57206428 1 -chr20 57207924 57207967 1 -chr20 57210341 57210548 1 -chr20 57210647 57210824 1 -chr20 57212673 57212863 1 -chr20 57216073 57216256 1 -chr20 57218109 57218443 1 -chr20 57219976 57220279 1 -chr20 57230100 57230368 1 -chr20 57231002 57231175 1 -chr20 57233813 57234316 1 -chr20 57251877 57252111 1 -chr20 57255047 57255256 1 -chr20 57257745 57258007 1 -chr20 57263884 57264287 1 -chr20 57266776 57266868 1 -chr20 57269722 57269889 1 -chr20 57270274 57270461 1 -chr20 57271954 57272436 1 -chr20 57274353 57274542 1 -chr20 57274755 57274882 1 -chr20 57276029 57276264 1 -chr20 57287345 57287963 1 -chr20 57288965 57289212 1 -chr20 57302790 57303062 1 -chr20 57303062 57303071 2 -chr20 57303071 57303278 1 -chr20 57306361 57306410 1 -chr20 57307698 57308008 1 -chr20 57314400 57314581 1 -chr20 57325762 57325790 1 -chr20 57328006 57328208 1 -chr20 57336424 57336718 1 -chr20 57340531 57340571 1 -chr20 57344759 57345023 1 -chr20 57346106 57346682 1 -chr20 57352443 57353182 1 -chr20 57363651 57364020 1 -chr20 57369373 57369571 1 -chr20 57387155 57387191 1 -chr20 57389264 57389649 1 -chr20 57390079 57390293 1 -chr20 57392092 57392599 1 -chr20 57397336 57397555 1 -chr20 57407633 57407993 1 -chr20 57408035 57408300 1 -chr20 57409486 57409755 1 -chr20 57412591 57413330 1 -chr20 57414656 57415089 1 -chr20 57422383 57422680 1 -chr20 57433366 57433600 1 -chr20 57434687 57435023 1 -chr20 57442239 57442447 1 -chr20 57442709 57443144 1 -chr20 57443173 57443372 1 -chr20 57451841 57452086 1 -chr20 57454870 57455067 1 -chr20 57461803 57461969 1 -chr20 57465714 57466034 1 -chr20 57467785 57468021 1 -chr20 57474889 57475125 1 -chr20 57475830 57475908 1 -chr20 57482410 57482605 1 -chr20 57486080 57486304 1 -chr20 57509509 57509541 1 -chr20 57525859 57526103 1 -chr20 57542277 57542807 1 -chr20 57545130 57545412 1 -chr20 57557528 57557778 1 -chr20 57558692 57558924 1 -chr20 57564821 57565402 1 -chr20 57566632 57567027 1 -chr20 57568482 57568825 1 -chr20 57573651 57574059 1 -chr20 57575517 57575708 1 -chr20 57575930 57576344 1 -chr20 57578784 57579016 1 -chr20 57582960 57583327 1 -chr20 57584230 57584587 1 -chr20 57587087 57587562 1 -chr20 57590528 57590768 1 -chr20 57590852 57590909 1 -chr20 57592974 57593297 1 -chr20 57596122 57596417 1 -chr20 57600991 57601147 1 -chr20 57602656 57602892 1 -chr20 57608485 57608923 1 -chr20 57616008 57616371 1 -chr20 57627493 57627797 1 -chr20 57629399 57629486 1 -chr20 57646406 57646875 1 -chr20 57655253 57655413 1 -chr20 57657269 57657592 1 -chr20 57659142 57659352 1 -chr20 57659842 57660296 1 -chr20 57660542 57660642 1 -chr20 57661046 57661291 1 -chr20 57663704 57663933 1 -chr20 57664235 57664530 1 -chr20 57668745 57669011 1 -chr20 57681447 57681651 1 -chr20 57683894 57684210 1 -chr20 57686968 57687386 1 -chr20 57687510 57687796 1 -chr20 57688156 57688505 1 -chr20 57688745 57689068 1 -chr20 57689693 57689898 1 -chr20 57694293 57694588 1 -chr20 57697327 57697549 1 -chr20 57700956 57700999 1 -chr20 57701326 57701622 1 -chr20 57702748 57702975 1 -chr20 57707536 57708115 1 -chr20 57708553 57708732 1 -chr20 57712946 57713108 1 -chr20 57713340 57713734 1 -chr20 57714064 57714271 1 -chr20 57714723 57715097 1 -chr20 57716007 57716088 1 -chr20 57717658 57717754 1 -chr20 57718646 57718834 1 -chr20 57737355 57737644 1 -chr20 57739777 57740142 1 -chr20 57741493 57741983 1 -chr20 57743852 57744312 1 -chr20 57746565 57746910 1 -chr20 57748102 57748527 1 -chr20 57755496 57755551 1 -chr20 57757121 57757276 1 -chr20 57757495 57757712 1 -chr20 57758719 57758955 1 -chr20 57770331 57770526 1 -chr20 57772628 57772839 1 -chr20 57780153 57780425 1 -chr20 57782635 57782803 1 -chr20 57784196 57784457 1 -chr20 57793022 57793392 1 -chr20 57793622 57793812 1 -chr20 57794169 57794394 1 -chr20 57798443 57798778 1 -chr20 57801137 57801323 1 -chr20 57808349 57808787 1 -chr20 57813470 57813799 1 -chr20 57816984 57817069 1 -chr20 57820087 57820273 1 -chr20 57821808 57822062 1 -chr20 57828837 57828994 1 -chr20 57829111 57829140 1 -chr20 57830162 57830450 1 -chr20 57832193 57832563 1 -chr20 57837399 57837927 1 -chr20 57843876 57844218 1 -chr20 57844326 57844537 1 -chr20 57845056 57845275 1 -chr20 57851070 57851301 1 -chr20 57851398 57851651 1 -chr20 57872855 57873180 1 -chr20 57875651 57875892 1 -chr20 57883237 57883598 1 -chr20 57884839 57885089 1 -chr20 57886411 57886437 1 -chr20 57893007 57893343 1 -chr20 57894604 57894786 1 -chr20 57896243 57896287 1 -chr20 57906067 57906544 1 -chr20 57909249 57909465 1 -chr20 57910730 57910951 1 -chr20 57915490 57916204 1 -chr20 57918942 57919138 1 -chr20 57923706 57923932 1 -chr20 57927815 57928192 1 -chr20 57928611 57928637 1 -chr20 57929228 57929436 1 -chr20 57930839 57930990 1 -chr20 57931244 57931680 1 -chr20 57932569 57932715 1 -chr20 57934490 57934679 1 -chr20 57934807 57935163 1 -chr20 57939194 57939576 1 -chr20 57940229 57940596 1 -chr20 57949649 57949714 1 -chr20 57959101 57959318 1 -chr20 57968560 57968863 1 -chr20 57969602 57969735 1 -chr20 57971882 57971924 1 -chr20 57977075 57977511 1 -chr20 57980188 57980458 1 -chr20 57988339 57988771 1 -chr20 57997922 57998333 1 -chr20 57998334 57998525 1 -chr20 58008264 58008740 1 -chr20 58008740 58008749 2 -chr20 58008749 58008920 1 -chr20 58013165 58013629 1 -chr20 58016459 58016627 1 -chr20 58019524 58019966 1 -chr20 58021883 58022771 1 -chr20 58024959 58025175 1 -chr20 58026732 58027139 1 -chr20 58028978 58029086 1 -chr20 58029763 58030146 1 -chr20 58030598 58031151 1 -chr20 58053320 58054002 1 -chr20 58055547 58055778 1 -chr20 58056699 58056812 1 -chr20 58088756 58089134 1 -chr20 58089509 58089611 1 -chr20 58092115 58092327 1 -chr20 58094990 58095567 1 -chr20 58098100 58098354 1 -chr20 58098949 58099187 1 -chr20 58099924 58100176 1 -chr20 58100600 58100971 1 -chr20 58103480 58103730 1 -chr20 58107105 58107279 1 -chr20 58107279 58107297 2 -chr20 58107297 58107377 1 -chr20 58113358 58113534 1 -chr20 58115887 58116572 1 -chr20 58122512 58122668 1 -chr20 58128833 58129453 1 -chr20 58133289 58133701 1 -chr20 58138058 58138537 1 -chr20 58141617 58142218 1 -chr20 58144604 58144823 1 -chr20 58146955 58147168 1 -chr20 58149968 58150634 1 -chr20 58155937 58156267 1 -chr20 58157492 58157656 1 -chr20 58158840 58159029 1 -chr20 58160690 58161259 1 -chr20 58162242 58162408 1 -chr20 58169427 58169589 1 -chr20 58171905 58172396 1 -chr20 58174626 58174927 1 -chr20 58182057 58182431 1 -chr20 58185618 58186155 1 -chr20 58191984 58192214 1 -chr20 58194611 58194847 1 -chr20 58195286 58195455 1 -chr20 58199089 58199615 1 -chr20 58199615 58199624 2 -chr20 58199624 58199793 1 -chr20 58215928 58216658 1 -chr20 58219287 58219576 1 -chr20 58219733 58220261 1 -chr20 58224231 58224418 1 -chr20 58234468 58234534 1 -chr20 58235662 58235949 1 -chr20 58245658 58245752 1 -chr20 58262364 58262890 1 -chr20 58265014 58265337 1 -chr20 58268962 58269339 1 -chr20 58277750 58277937 1 -chr20 58287011 58287136 1 -chr20 58287590 58287793 1 -chr20 58291227 58291391 1 -chr20 58293337 58293736 1 -chr20 58302306 58302501 1 -chr20 58307789 58307879 1 -chr20 58321324 58321746 1 -chr20 58333103 58333181 1 -chr20 58343253 58343692 1 -chr20 58375449 58375838 1 -chr20 58380417 58380647 1 -chr20 58384363 58384537 1 -chr20 58389398 58389485 1 -chr20 58392756 58393013 1 -chr20 58399285 58399466 1 -chr20 58408244 58408480 1 -chr20 58413818 58413881 1 -chr20 58415359 58415799 1 -chr20 58421565 58421807 1 -chr20 58433069 58433615 1 -chr20 58434101 58434336 1 -chr20 58437825 58438092 1 -chr20 58453099 58453339 1 -chr20 58458542 58458749 1 -chr20 58460356 58460701 1 -chr20 58474577 58474640 1 -chr20 58480195 58480433 1 -chr20 58480801 58481104 1 -chr20 58501019 58501295 1 -chr20 58509507 58509569 1 -chr20 58511013 58511333 1 -chr20 58511794 58512023 1 -chr20 58519071 58519369 1 -chr20 58522821 58523205 1 -chr20 58523794 58523946 1 -chr20 58524439 58524501 1 -chr20 58524540 58524789 1 -chr20 58527524 58527745 1 -chr20 58538464 58538676 1 -chr20 58543053 58543280 1 -chr20 58548320 58548582 1 -chr20 58552897 58553148 1 -chr20 58558936 58559203 1 -chr20 58561000 58561434 1 -chr20 58573460 58573830 1 -chr20 58577198 58577314 1 -chr20 58577774 58578565 1 -chr20 58582134 58582612 1 -chr20 58585572 58585921 1 -chr20 58586216 58586625 1 -chr20 58595801 58596269 1 -chr20 58600174 58600472 1 -chr20 58610878 58611093 1 -chr20 58616754 58617054 1 -chr20 58619646 58619974 1 -chr20 58620198 58620303 1 -chr20 58623260 58623412 1 -chr20 58631991 58632184 1 -chr20 58637027 58637247 1 -chr20 58645830 58646041 1 -chr20 58648484 58648630 1 -chr20 58650309 58650536 1 -chr20 58657401 58657664 1 -chr20 58659588 58659868 1 -chr20 58669189 58669387 1 -chr20 58681531 58681604 1 -chr20 58693205 58693559 1 -chr20 58696309 58696462 1 -chr20 58709588 58709966 1 -chr20 58711262 58711574 1 -chr20 58711676 58712099 1 -chr20 58719008 58719449 1 -chr20 58720552 58721188 1 -chr20 58722208 58722393 1 -chr20 58723631 58723802 1 -chr20 58732367 58732831 1 -chr20 58739738 58740042 1 -chr20 58744015 58744048 1 -chr20 58744926 58745164 1 -chr20 58754016 58754189 1 -chr20 58765600 58766023 1 -chr20 58770524 58770827 1 -chr20 58770827 58770842 2 -chr20 58770842 58771375 1 -chr20 58774083 58774307 1 -chr20 58777852 58777928 1 -chr20 58780645 58781178 1 -chr20 58788173 58788380 1 -chr20 58795428 58795999 1 -chr20 58796327 58796556 1 -chr20 58797782 58798317 1 -chr20 58804966 58805402 1 -chr20 58808155 58808426 1 -chr20 58817027 58817466 1 -chr20 58818049 58818336 1 -chr20 58819617 58819830 1 -chr20 58822977 58823388 1 -chr20 58824688 58824965 1 -chr20 58826418 58826621 1 -chr20 58830550 58830590 1 -chr20 58833723 58834345 1 -chr20 58836470 58836951 1 -chr20 58842195 58842462 1 -chr20 58845628 58845821 1 -chr20 58848870 58849158 1 -chr20 58855377 58855692 1 -chr20 58863946 58864045 1 -chr20 58877388 58877897 1 -chr20 58880718 58880923 1 -chr20 58889328 58889457 1 -chr20 58889508 58889924 1 -chr20 58908022 58908421 1 -chr20 58909636 58910094 1 -chr20 58912278 58912490 1 -chr20 58918336 58918485 1 -chr20 58922132 58922452 1 -chr20 58924039 58924367 1 -chr20 58931060 58931490 1 -chr20 58949231 58949365 1 -chr20 58953256 58954035 1 -chr20 58955096 58955561 1 -chr20 58971424 58971775 1 -chr20 58972127 58972168 1 -chr20 58981273 58981513 1 -chr20 58997424 58997673 1 -chr20 59002784 59003298 1 -chr20 59005539 59005598 1 -chr20 59025290 59025530 1 -chr20 59031481 59031889 1 -chr20 59032386 59032428 1 -chr20 59042806 59043023 1 -chr20 59054423 59054706 1 -chr20 59059026 59059433 1 -chr20 59061337 59061695 1 -chr20 59063587 59063815 1 -chr20 59065224 59065382 1 -chr20 59069587 59069769 1 -chr20 59083210 59083840 1 -chr20 59092243 59092437 1 -chr20 59103011 59103287 1 -chr20 59104516 59104940 1 -chr20 59106265 59106390 1 -chr20 59106861 59107133 1 -chr20 59117067 59117440 1 -chr20 59121191 59121805 1 -chr20 59122045 59122246 1 -chr20 59122246 59122255 2 -chr20 59122255 59122468 1 -chr20 59122468 59122477 2 -chr20 59122477 59122729 1 -chr20 59122738 59123406 1 -chr20 59125331 59125506 1 -chr20 59128384 59128574 1 -chr20 59130246 59130472 1 -chr20 59131725 59132219 1 -chr20 59133202 59134029 1 -chr20 59134239 59134682 1 -chr20 59139238 59139631 1 -chr20 59143516 59143854 1 -chr20 59151906 59152161 1 -chr20 59158303 59158505 1 -chr20 59169685 59169731 1 -chr20 59170925 59171144 1 -chr20 59183653 59183788 1 -chr20 59186197 59186705 1 -chr20 59187181 59187307 1 -chr20 59193110 59193288 1 -chr20 59195006 59195538 1 -chr20 59197729 59197922 1 -chr20 59215288 59215642 1 -chr20 59235317 59235463 1 -chr20 59247779 59248060 1 -chr20 59250253 59250708 1 -chr20 59254493 59254956 1 -chr20 59265344 59265662 1 -chr20 59269640 59269953 1 -chr20 59274190 59274396 1 -chr20 59277798 59278013 1 -chr20 59289305 59289534 1 -chr20 59292231 59292421 1 -chr20 59294413 59294690 1 -chr20 59298503 59298700 1 -chr20 59298774 59298941 1 -chr20 59300808 59301407 1 -chr20 59303905 59304091 1 -chr20 59312672 59312822 1 -chr20 59317703 59317959 1 -chr20 59325559 59325914 1 -chr20 59332600 59332674 1 -chr20 59341432 59341633 1 -chr20 59342276 59342630 1 -chr20 59349940 59350332 1 -chr20 59353447 59353727 1 -chr20 59358047 59358479 1 -chr20 59364667 59365337 1 -chr20 59368023 59368260 1 -chr20 59372316 59372608 1 -chr20 59386196 59386819 1 -chr20 59393899 59394054 1 -chr20 59395986 59396283 1 -chr20 59403117 59403558 1 -chr20 59405424 59405781 1 -chr20 59407948 59408157 1 -chr20 59415288 59415781 1 -chr20 59416705 59416940 1 -chr20 59422602 59422821 1 -chr20 59425634 59425817 1 -chr20 59426466 59426863 1 -chr20 59429382 59429614 1 -chr20 59453959 59454380 1 -chr20 59457889 59458189 1 -chr20 59464754 59465044 1 -chr20 59467152 59467413 1 -chr20 59478548 59478796 1 -chr20 59481284 59481535 1 -chr20 59491808 59492193 1 -chr20 59495855 59496111 1 -chr20 59503526 59504006 1 -chr20 59515633 59515819 1 -chr20 59526457 59527043 1 -chr20 59545134 59545693 1 -chr20 59546139 59546345 1 -chr20 59559704 59560082 1 -chr20 59563269 59563421 1 -chr20 59563884 59564544 1 -chr20 59566060 59566303 1 -chr20 59568725 59568940 1 -chr20 59575446 59575697 1 -chr20 59579859 59580056 1 -chr20 59580315 59580706 1 -chr20 59584435 59584609 1 -chr20 59593202 59593617 1 -chr20 59598244 59598797 1 -chr20 59600012 59600448 1 -chr20 59600484 59600573 1 -chr20 59606520 59606631 1 -chr20 59614140 59614532 1 -chr20 59614596 59615120 1 -chr20 59616063 59616272 1 -chr20 59620127 59620398 1 -chr20 59628795 59629151 1 -chr20 59632326 59632607 1 -chr20 59638477 59638772 1 -chr20 59652434 59652469 1 -chr20 59661523 59661876 1 -chr20 59669001 59669026 1 -chr20 59672275 59672583 1 -chr20 59684568 59684820 1 -chr20 59690333 59690551 1 -chr20 59693606 59693889 1 -chr20 59697305 59697645 1 -chr20 59707706 59707751 1 -chr20 59709774 59710271 1 -chr20 59720061 59720232 1 -chr20 59725118 59725285 1 -chr20 59732374 59732879 1 -chr20 59735185 59735538 1 -chr20 59736950 59737223 1 -chr20 59742309 59742571 1 -chr20 59742935 59743190 1 -chr20 59745661 59745868 1 -chr20 59746244 59746441 1 -chr20 59749105 59749243 1 -chr20 59761297 59761506 1 -chr20 59761736 59762039 1 -chr20 59765871 59766150 1 -chr20 59766402 59766601 1 -chr20 59769005 59769180 1 -chr20 59769557 59770338 1 -chr20 59771713 59772254 1 -chr20 59781181 59781736 1 -chr20 59783106 59783441 1 -chr20 59784574 59784791 1 -chr20 59790382 59790613 1 -chr20 59807582 59807831 1 -chr20 59809269 59809562 1 -chr20 59810240 59810425 1 -chr20 59812816 59813052 1 -chr20 59814977 59815049 1 -chr20 59815499 59815583 1 -chr20 59819884 59820087 1 -chr20 59823345 59823606 1 -chr20 59826339 59826670 1 -chr20 59828867 59829024 1 -chr20 59829900 59830114 1 -chr20 59834237 59834639 1 -chr20 59835269 59835386 1 -chr20 59859877 59860161 1 -chr20 59861777 59862172 1 -chr20 59862251 59862574 1 -chr20 59891896 59892308 1 -chr20 59907397 59907605 1 -chr20 59909046 59909587 1 -chr20 59938141 59938516 1 -chr20 59940564 59940753 1 -chr20 59940976 59941593 1 -chr20 59944482 59944850 1 -chr20 59960202 59960416 1 -chr20 59965841 59966033 1 -chr20 59969975 59970175 1 -chr20 59971338 59971832 1 -chr20 59981826 59982291 1 -chr20 60000529 60000766 1 -chr20 60005879 60006271 1 -chr20 60006666 60006842 1 -chr20 60008696 60008816 1 -chr20 60012293 60012606 1 -chr20 60025325 60025761 1 -chr20 60037987 60038445 1 -chr20 60040635 60040710 1 -chr20 60047322 60047922 1 -chr20 60051829 60052265 1 -chr20 60052872 60053225 1 -chr20 60057801 60058344 1 -chr20 60059476 60060148 1 -chr20 60061429 60062081 1 -chr20 60062160 60062348 1 -chr20 60085311 60085758 1 -chr20 60085916 60086491 1 -chr20 60087069 60087477 1 -chr20 60087579 60088533 1 -chr20 60088915 60089030 1 -chr20 60095616 60095798 1 -chr20 60099719 60099871 1 -chr20 60111725 60111934 1 -chr20 60113050 60113279 1 -chr20 60113872 60114098 1 -chr20 60116583 60116609 1 -chr20 60116623 60116649 1 -chr20 60116663 60116720 1 -chr20 60121295 60121439 1 -chr20 60121623 60121708 1 -chr20 60125442 60125822 1 -chr20 60126724 60127004 1 -chr20 60135999 60136069 1 -chr20 60141582 60141945 1 -chr20 60144186 60144382 1 -chr20 60145072 60145250 1 -chr20 60147901 60148259 1 -chr20 60150883 60151272 1 -chr20 60161574 60161753 1 -chr20 60162979 60163204 1 -chr20 60165252 60165574 1 -chr20 60167059 60167336 1 -chr20 60172023 60172439 1 -chr20 60179818 60180278 1 -chr20 60180322 60180366 1 -chr20 60192591 60192827 1 -chr20 60201612 60202279 1 -chr20 60215636 60216228 1 -chr20 60221306 60221616 1 -chr20 60233579 60233787 1 -chr20 60237217 60237703 1 -chr20 60240163 60240643 1 -chr20 60250926 60251290 1 -chr20 60254588 60254640 1 -chr20 60260904 60261324 1 -chr20 60265980 60266255 1 -chr20 60266702 60267467 1 -chr20 60269302 60270074 1 -chr20 60279194 60279491 1 -chr20 60286571 60286783 1 -chr20 60303363 60304015 1 -chr20 60305016 60305185 1 -chr20 60311375 60311584 1 -chr20 60327926 60328380 1 -chr20 60331014 60331283 1 -chr20 60337338 60337645 1 -chr20 60346275 60346503 1 -chr20 60352031 60352257 1 -chr20 60354256 60354470 1 -chr20 60354847 60355194 1 -chr20 60365544 60366387 1 -chr20 60388328 60388402 1 -chr20 60398021 60398597 1 -chr20 60399163 60399219 1 -chr20 60402570 60402794 1 -chr20 60402806 60403143 1 -chr20 60412348 60412696 1 -chr20 60425367 60425716 1 -chr20 60434765 60435012 1 -chr20 60446767 60447154 1 -chr20 60447547 60447738 1 -chr20 60449643 60450001 1 -chr20 60451362 60451837 1 -chr20 60463485 60463832 1 -chr20 60469259 60469483 1 -chr20 60470472 60470668 1 -chr20 60470838 60471017 1 -chr20 60471591 60471811 1 -chr20 60474282 60474510 1 -chr20 60479764 60479906 1 -chr20 60490102 60490473 1 -chr20 60492403 60493054 1 -chr20 60496831 60497204 1 -chr20 60504438 60504749 1 -chr20 60510659 60510914 1 -chr20 60512329 60512641 1 -chr20 60514821 60514890 1 -chr20 60519367 60520161 1 -chr20 60520161 60520170 2 -chr20 60520170 60520316 1 -chr20 60525360 60525468 1 -chr20 60528844 60529287 1 -chr20 60531071 60531372 1 -chr20 60536614 60536678 1 -chr20 60541056 60541700 1 -chr20 60548028 60548253 1 -chr20 60551624 60551794 1 -chr20 60559346 60559539 1 -chr20 60564899 60565122 1 -chr20 60568270 60568858 1 -chr20 60570994 60571589 1 -chr20 60572490 60572806 1 -chr20 60581622 60581923 1 -chr20 60582058 60582244 1 -chr20 60603222 60603449 1 -chr20 60603797 60604274 1 -chr20 60607255 60607399 1 -chr20 60610664 60610742 1 -chr20 60622268 60622473 1 -chr20 60636081 60636472 1 -chr20 60638386 60638695 1 -chr20 60639469 60639652 1 -chr20 60640054 60640222 1 -chr20 60642187 60642362 1 -chr20 60642876 60643205 1 -chr20 60643823 60644189 1 -chr20 60646285 60646495 1 -chr20 60647080 60647407 1 -chr20 60670559 60670657 1 -chr20 60674223 60674436 1 -chr20 60674972 60675059 1 -chr20 60675357 60675531 1 -chr20 60681940 60682239 1 -chr20 60687864 60688110 1 -chr20 60688385 60688591 1 -chr20 60688777 60688968 1 -chr20 60695034 60695213 1 -chr20 60717273 60717466 1 -chr20 60718665 60718891 1 -chr20 60720285 60720516 1 -chr20 60735241 60735470 1 -chr20 60736892 60737135 1 -chr20 60744047 60744100 1 -chr20 60753857 60754180 1 -chr20 60761087 60761243 1 -chr20 60763462 60763637 1 -chr20 60769330 60769800 1 -chr20 60771134 60771303 1 -chr20 60777535 60777907 1 -chr20 60778333 60778737 1 -chr20 60779081 60779530 1 -chr20 60783168 60783431 1 -chr20 60790948 60791148 1 -chr20 60795513 60795993 1 -chr20 60802312 60802858 1 -chr20 60803304 60803486 1 -chr20 60805047 60805255 1 -chr20 60806038 60806594 1 -chr20 60806594 60806603 2 -chr20 60806603 60806917 1 -chr20 60813067 60813457 1 -chr20 60832136 60832313 1 -chr20 60833328 60833591 1 -chr20 60842437 60842666 1 -chr20 60850325 60850551 1 -chr20 60859442 60859837 1 -chr20 60879441 60879644 1 -chr20 60882891 60883324 1 -chr20 60885069 60885438 1 -chr20 60885718 60885928 1 -chr20 60888932 60889525 1 -chr20 60889560 60889793 1 -chr20 60899896 60900060 1 -chr20 60903163 60903464 1 -chr20 60903597 60903919 1 -chr20 60928303 60928690 1 -chr20 60933349 60933723 1 -chr20 60933913 60934110 1 -chr20 60936599 60936802 1 -chr20 60944173 60944609 1 -chr20 60948910 60949316 1 -chr20 60953634 60953836 1 -chr20 60953884 60954163 1 -chr20 60955009 60955135 1 -chr20 60968229 60968683 1 -chr20 60973460 60973637 1 -chr20 60973749 60973806 1 -chr20 60977010 60977473 1 -chr20 60987201 60987372 1 -chr20 60987372 60987376 2 -chr20 60987376 60987549 1 -chr20 60990145 60990432 1 -chr20 60999397 60999821 1 -chr20 61008752 61008998 1 -chr20 61011188 61011619 1 -chr20 61014106 61014312 1 -chr20 61016931 61017207 1 -chr20 61020241 61020338 1 -chr20 61023179 61023733 1 -chr20 61028125 61028321 1 -chr20 61032106 61032282 1 -chr20 61051610 61051964 1 -chr20 61053771 61054215 1 -chr20 61054215 61054236 2 -chr20 61054236 61054340 1 -chr20 61056409 61056687 1 -chr20 61058096 61058440 1 -chr20 61064204 61064281 1 -chr20 61070625 61070974 1 -chr20 61071144 61071323 1 -chr20 61073554 61073781 1 -chr20 61073797 61073981 1 -chr20 61081465 61082059 1 -chr20 61092855 61093194 1 -chr20 61098407 61098538 1 -chr20 61100778 61101261 1 -chr20 61101644 61101975 1 -chr20 61107373 61107571 1 -chr20 61118185 61118836 1 -chr20 61119591 61119845 1 -chr20 61121272 61121485 1 -chr20 61123266 61123625 1 -chr20 61126530 61126821 1 -chr20 61129835 61130045 1 -chr20 61132808 61132995 1 -chr20 61134887 61135314 1 -chr20 61136840 61137048 1 -chr20 61142433 61142691 1 -chr20 61151511 61151932 1 -chr20 61152973 61153337 1 -chr20 61160412 61160474 1 -chr20 61162318 61162402 1 -chr20 61162898 61163198 1 -chr20 61163734 61164277 1 -chr20 61166497 61166810 1 -chr20 61166888 61167092 1 -chr20 61170811 61170968 1 -chr20 61175067 61175397 1 -chr20 61179152 61179252 1 -chr20 61186132 61186432 1 -chr20 61186958 61187130 1 -chr20 61192265 61192493 1 -chr20 61198069 61198259 1 -chr20 61203363 61203713 1 -chr20 61216222 61216436 1 -chr20 61217478 61217794 1 -chr20 61217915 61218062 1 -chr20 61218929 61219417 1 -chr20 61220351 61220515 1 -chr20 61230348 61230560 1 -chr20 61231787 61231988 1 -chr20 61232403 61232910 1 -chr20 61238021 61238256 1 -chr20 61247648 61247997 1 -chr20 61249964 61250277 1 -chr20 61253507 61253893 1 -chr20 61254387 61254656 1 -chr20 61257056 61257477 1 -chr20 61260564 61260967 1 -chr20 61265328 61265507 1 -chr20 61269682 61269809 1 -chr20 61274505 61274613 1 -chr20 61275668 61275882 1 -chr20 61276471 61276783 1 -chr20 61277309 61277564 1 -chr20 61289923 61290188 1 -chr20 61290899 61291301 1 -chr20 61292956 61293137 1 -chr20 61293561 61293864 1 -chr20 61297417 61297578 1 -chr20 61299290 61299920 1 -chr20 61302667 61302982 1 -chr20 61307263 61307517 1 -chr20 61309007 61309146 1 -chr20 61309329 61309775 1 -chr20 61310906 61311159 1 -chr20 61312076 61312211 1 -chr20 61317860 61318344 1 -chr20 61318706 61319020 1 -chr20 61331590 61331633 1 -chr20 61332686 61332883 1 -chr20 61333462 61333703 1 -chr20 61334574 61334957 1 -chr20 61344655 61345361 1 -chr20 61345842 61346089 1 -chr20 61349690 61349878 1 -chr20 61350276 61350362 1 -chr20 61351293 61351674 1 -chr20 61354133 61354308 1 -chr20 61355376 61355597 1 -chr20 61358814 61359005 1 -chr20 61359369 61359749 1 -chr20 61361178 61361320 1 -chr20 61361466 61361651 1 -chr20 61362300 61362474 1 -chr20 61363435 61363582 1 -chr20 61370804 61371201 1 -chr20 61380857 61381621 1 -chr20 61381868 61381994 1 -chr20 61387828 61388107 1 -chr20 61389957 61390366 1 -chr20 61392531 61393165 1 -chr20 61394052 61394239 1 -chr20 61397186 61397549 1 -chr20 61410435 61410470 1 -chr20 61410913 61411159 1 -chr20 61417356 61417617 1 -chr20 61424419 61424752 1 -chr20 61431738 61431893 1 -chr20 61434655 61434834 1 -chr20 61434846 61435086 1 -chr20 61435204 61435356 1 -chr20 61435629 61435877 1 -chr20 61436194 61436594 1 -chr20 61438635 61438952 1 -chr20 61441195 61441428 1 -chr20 61445344 61445468 1 -chr20 61447463 61448082 1 -chr20 61451146 61451840 1 -chr20 61458630 61458658 1 -chr20 61463878 61464024 1 -chr20 61474861 61475118 1 -chr20 61478074 61478291 1 -chr20 61482848 61482951 1 -chr20 61483406 61483579 1 -chr20 61488922 61489091 1 -chr20 61497246 61497520 1 -chr20 61502079 61502494 1 -chr20 61503993 61504174 1 -chr20 61505309 61505604 1 -chr20 61508896 61509059 1 -chr20 61511827 61512041 1 -chr20 61512641 61512865 1 -chr20 61513287 61513890 1 -chr20 61523106 61523631 1 -chr20 61526033 61526270 1 -chr20 61526777 61526998 1 -chr20 61528680 61528807 1 -chr20 61529542 61529819 1 -chr20 61533706 61534172 1 -chr20 61534912 61534984 1 -chr20 61537148 61537334 1 -chr20 61550138 61550529 1 -chr20 61557107 61557299 1 -chr20 61560651 61560815 1 -chr20 61560815 61560824 2 -chr20 61560824 61561037 1 -chr20 61562500 61562673 1 -chr20 61564005 61564431 1 -chr20 61565175 61565343 1 -chr20 61565717 61566175 1 -chr20 61566818 61567038 1 -chr20 61571116 61571337 1 -chr20 61576585 61576831 1 -chr20 61576914 61577134 1 -chr20 61577310 61577510 1 -chr20 61582457 61582819 1 -chr20 61585979 61586008 1 -chr20 61590678 61590856 1 -chr20 61592484 61592748 1 -chr20 61598903 61599254 1 -chr20 61611540 61611735 1 -chr20 61612512 61612850 1 -chr20 61614638 61614845 1 -chr20 61615721 61615941 1 -chr20 61620159 61620181 1 -chr20 61620181 61620189 2 -chr20 61620189 61620209 1 -chr20 61621022 61621137 1 -chr20 61623947 61624067 1 -chr20 61624587 61624811 1 -chr20 61627674 61627833 1 -chr20 61632041 61632653 1 -chr20 61635860 61636075 1 -chr20 61640906 61641147 1 -chr20 61641317 61641516 1 -chr20 61646134 61646535 1 -chr20 61648361 61648642 1 -chr20 61648910 61649099 1 -chr20 61651395 61651627 1 -chr20 61651928 61652333 1 -chr20 61659223 61659617 1 -chr20 61661496 61662029 1 -chr20 61662029 61662031 2 -chr20 61662031 61662516 1 -chr20 61664353 61664633 1 -chr20 61673965 61674518 1 -chr20 61675481 61675525 1 -chr20 61679371 61679565 1 -chr20 61680809 61681078 1 -chr20 61689367 61689412 1 -chr20 61693007 61693381 1 -chr20 61694232 61694564 1 -chr20 61698471 61698834 1 -chr20 61706053 61706492 1 -chr20 61706492 61706501 2 -chr20 61706501 61706738 1 -chr20 61710275 61710477 1 -chr20 61711732 61711946 1 -chr20 61718411 61718578 1 -chr20 61722325 61722514 1 -chr20 61733889 61734080 1 -chr20 61738190 61738465 1 -chr20 61739080 61739321 1 -chr20 61739428 61739906 1 -chr20 61748541 61748973 1 -chr20 61750757 61751013 1 -chr20 61758434 61758670 1 -chr20 61761691 61761890 1 -chr20 61766521 61766695 1 -chr20 61767755 61767952 1 -chr20 61769069 61769274 1 -chr20 61777427 61777798 1 -chr20 61779330 61780134 1 -chr20 61783579 61783983 1 -chr20 61789073 61789230 1 -chr20 61790439 61790469 1 -chr20 61791862 61792184 1 -chr20 61799840 61800078 1 -chr20 61804474 61804638 1 -chr20 61806041 61806159 1 -chr20 61815208 61815475 1 -chr20 61816800 61816855 1 -chr20 61821397 61821823 1 -chr20 61824128 61824318 1 -chr20 61826508 61826695 1 -chr20 61828419 61828667 1 -chr20 61829935 61829987 1 -chr20 61830114 61830380 1 -chr20 61835261 61835312 1 -chr20 61841628 61841745 1 -chr20 61843838 61844452 1 -chr20 61848805 61849017 1 -chr20 61851750 61851990 1 -chr20 61857938 61857971 1 -chr20 61860334 61860452 1 -chr20 61860715 61861070 1 -chr20 61861848 61862050 1 -chr20 61868101 61868325 1 -chr20 61879587 61880258 1 -chr20 61880479 61880636 1 -chr20 61886431 61886747 1 -chr20 61886973 61887378 1 -chr20 61887455 61887698 1 -chr20 61889502 61889529 1 -chr20 61890898 61891287 1 -chr20 61891797 61892021 1 -chr20 61895432 61895681 1 -chr20 61896923 61897361 1 -chr20 61901221 61901249 1 -chr20 61905427 61905768 1 -chr20 61906583 61907044 1 -chr20 61910673 61910948 1 -chr20 61912262 61912631 1 -chr20 61912961 61913053 1 -chr20 61913753 61913964 1 -chr20 61914724 61915147 1 -chr20 61915256 61915369 1 -chr20 61915971 61916167 1 -chr20 61916696 61916880 1 -chr20 61917361 61917541 1 -chr20 61919938 61919970 1 -chr20 61923559 61923729 1 -chr20 61927694 61927737 1 -chr20 61931804 61932061 1 -chr20 61945987 61946098 1 -chr20 61948020 61948131 1 -chr20 61949102 61949570 1 -chr20 61950480 61950792 1 -chr20 61959199 61959704 1 -chr20 61964711 61965263 1 -chr20 61968614 61969080 1 -chr20 61975210 61975566 1 -chr20 61977340 61978061 1 -chr20 61978664 61978990 1 -chr20 61979775 61980161 1 -chr20 61992875 61993321 1 -chr20 62000183 62000986 1 -chr20 62011281 62011691 1 -chr20 62013453 62013670 1 -chr20 62014381 62014577 1 -chr20 62019645 62019740 1 -chr20 62027347 62027551 1 -chr20 62044882 62045058 1 -chr20 62045134 62045347 1 -chr20 62052152 62052377 1 -chr20 62055140 62055440 1 -chr20 62057309 62057640 1 -chr20 62059649 62060214 1 -chr20 62062477 62062668 1 -chr20 62097543 62097854 1 -chr20 62098874 62099034 1 -chr20 62099535 62099760 1 -chr20 62101903 62102093 1 -chr20 62105756 62105785 1 -chr20 62112669 62112993 1 -chr20 62114460 62114525 1 -chr20 62116420 62116534 1 -chr20 62132899 62133162 1 -chr20 62133945 62134266 1 -chr20 62136027 62136240 1 -chr20 62141575 62141796 1 -chr20 62142641 62143111 1 -chr20 62143347 62143408 1 -chr20 62160292 62160334 1 -chr20 62160799 62161112 1 -chr20 62164477 62164717 1 -chr20 62168662 62168725 1 -chr20 62179204 62179400 1 -chr20 62186849 62187034 1 -chr20 62200648 62200978 1 -chr20 62208681 62209270 1 -chr20 62211750 62212138 1 -chr20 62224262 62224410 1 -chr20 62224425 62224662 1 -chr20 62225326 62225551 1 -chr20 62225901 62226499 1 -chr20 62228657 62228916 1 -chr20 62228916 62228935 2 -chr20 62228935 62229082 1 -chr20 62232117 62232315 1 -chr20 62238287 62238413 1 -chr20 62243378 62244066 1 -chr20 62252602 62253012 1 -chr20 62257862 62257937 1 -chr20 62258707 62258856 1 -chr20 62261363 62261533 1 -chr20 62265112 62265506 1 -chr20 62266601 62266979 1 -chr20 62278259 62278422 1 -chr20 62278580 62278649 1 -chr20 62285233 62285413 1 -chr20 62285936 62286181 1 -chr20 62287735 62287973 1 -chr20 62291380 62291599 1 -chr20 62297263 62297417 1 -chr20 62302220 62302532 1 -chr20 62302553 62302852 1 -chr20 62303522 62303719 1 -chr20 62304092 62304416 1 -chr20 62304997 62305538 1 -chr20 62308303 62308511 1 -chr20 62311326 62311521 1 -chr20 62312716 62313195 1 -chr20 62313813 62314164 1 -chr20 62324632 62324903 1 -chr20 62330533 62330731 1 -chr20 62330886 62331293 1 -chr20 62332381 62332809 1 -chr20 62336482 62336847 1 -chr20 62346657 62346881 1 -chr20 62349756 62349820 1 -chr20 62351161 62351483 1 -chr20 62352126 62352345 1 -chr20 62355182 62355372 1 -chr20 62367707 62368036 1 -chr20 62371174 62371486 1 -chr20 62376299 62376487 1 -chr20 62380697 62380940 1 -chr20 62382257 62382830 1 -chr20 62394623 62395155 1 -chr20 62416907 62417292 1 -chr20 62418932 62419344 1 -chr20 62421764 62421849 1 -chr20 62439822 62440063 1 -chr20 62440765 62440971 1 -chr20 62441701 62442002 1 -chr20 62442870 62443125 1 -chr20 62447177 62447816 1 -chr20 62451107 62451381 1 -chr20 62452153 62452272 1 -chr20 62452791 62453012 1 -chr20 62453444 62453908 1 -chr20 62456120 62456421 1 -chr20 62457801 62457909 1 -chr20 62459480 62459669 1 -chr20 62461191 62461460 1 -chr20 62461719 62462056 1 -chr20 62463562 62463848 1 -chr20 62465700 62466052 1 -chr20 62466196 62466421 1 -chr20 62468939 62469124 1 -chr20 62475170 62475532 1 -chr20 62479659 62480141 1 -chr20 62483652 62483883 1 -chr20 62484572 62484635 1 -chr20 62486131 62486440 1 -chr20 62487968 62488282 1 -chr20 62494501 62494656 1 -chr20 62497732 62497763 1 -chr20 62500995 62501443 1 -chr20 62503893 62504187 1 -chr20 62505301 62505839 1 -chr20 62508615 62508703 1 -chr20 62509727 62509775 1 -chr20 62509775 62509778 2 -chr20 62509778 62509955 1 -chr20 62510511 62510873 1 -chr20 62513960 62514271 1 -chr20 62516420 62516658 1 -chr20 62518486 62518739 1 -chr20 62520938 62521028 1 -chr20 62522365 62522494 1 -chr20 62525378 62525808 1 -chr20 62528543 62528718 1 -chr20 62529601 62529766 1 -chr20 62532713 62533134 1 -chr20 62540850 62541460 1 -chr20 62541884 62541990 1 -chr20 62543233 62543451 1 -chr20 62545488 62545691 1 -chr20 62548280 62548651 1 -chr20 62551495 62551732 1 -chr20 62559752 62560149 1 -chr20 62560907 62561115 1 -chr20 62564993 62565125 1 -chr20 62565512 62565919 1 -chr20 62567122 62567381 1 -chr20 62567432 62567848 1 -chr20 62567865 62568069 1 -chr20 62568823 62569041 1 -chr20 62569275 62569544 1 -chr20 62569669 62570205 1 -chr20 62573601 62573823 1 -chr20 62575111 62575498 1 -chr20 62577144 62577348 1 -chr20 62581669 62582160 1 -chr20 62582673 62582918 1 -chr20 62587661 62587789 1 -chr20 62591063 62591471 1 -chr20 62595673 62595970 1 -chr20 62596148 62596519 1 -chr20 62598302 62598532 1 -chr20 62601233 62601440 1 -chr20 62601765 62602398 1 -chr20 62602573 62602849 1 -chr20 62605479 62605787 1 -chr20 62619854 62619900 1 -chr20 62623103 62623577 1 -chr20 62624037 62624511 1 -chr20 62631398 62631460 1 -chr20 62634742 62634932 1 -chr20 62636774 62637026 1 -chr20 62637953 62638206 1 -chr20 62639034 62639190 1 -chr20 62645461 62645684 1 -chr20 62646194 62646423 1 -chr20 62648750 62649354 1 -chr20 62649681 62649985 1 -chr20 62650069 62650391 1 -chr20 62650975 62651327 1 -chr20 62651443 62651892 1 -chr20 62655273 62655858 1 -chr20 62655948 62656290 1 -chr20 62659266 62659420 1 -chr20 62664240 62664640 1 -chr20 62665656 62665971 1 -chr20 62668642 62669375 1 -chr20 62670036 62670240 1 -chr20 62676936 62677405 1 -chr20 62695808 62696304 1 -chr20 62696512 62696855 1 -chr20 62699692 62699832 1 -chr20 62700255 62700542 1 -chr20 62702368 62702596 1 -chr20 62705459 62705590 1 -chr20 62708387 62708824 1 -chr20 62709136 62709559 1 -chr20 62712281 62712442 1 -chr20 62716688 62716924 1 -chr20 62717485 62717698 1 -chr20 62717698 62717707 2 -chr20 62717707 62718252 1 -chr20 62718555 62718801 1 -chr20 62723479 62723715 1 -chr20 62734378 62734638 1 -chr20 62734700 62734908 1 -chr20 62740480 62740872 1 -chr20 62756376 62756662 1 -chr20 62762184 62762631 1 -chr20 62765442 62765691 1 -chr20 62768752 62769001 1 -chr20 62776047 62776323 1 -chr20 62776603 62777082 1 -chr20 62777362 62777672 1 -chr20 62786311 62786635 1 -chr20 62789920 62790123 1 -chr20 62799367 62799645 1 -chr20 62800587 62801222 1 -chr20 62803341 62803554 1 -chr20 62804014 62804443 1 -chr20 62813483 62813763 1 -chr20 62816328 62816565 1 -chr20 62819341 62819767 1 -chr20 62822008 62822214 1 -chr20 62825150 62825219 1 -chr20 62827086 62827519 1 -chr20 62828021 62828399 1 -chr20 62829223 62829374 1 -chr20 62829565 62829730 1 -chr20 62830154 62830352 1 -chr20 62831549 62831923 1 -chr20 62836731 62836999 1 -chr20 62838324 62838586 1 -chr20 62838586 62838595 2 -chr20 62838595 62838791 1 -chr20 62841467 62841933 1 -chr20 62841958 62842364 1 -chr20 62845219 62845250 1 -chr20 62850242 62850435 1 -chr20 62852857 62853167 1 -chr20 62863902 62863934 1 -chr20 62878597 62878974 1 -chr20 62879566 62879964 1 -chr20 62879964 62879974 2 -chr20 62879974 62880259 1 -chr20 62884830 62885008 1 -chr20 62885751 62885970 1 -chr20 62887927 62888180 1 -chr20 62889935 62890297 1 -chr20 62893649 62893866 1 -chr20 62895035 62895170 1 -chr20 62897922 62898165 1 -chr20 62898674 62899400 1 -chr20 62905565 62905833 1 -chr20 62916753 62917156 1 -chr20 62919945 62920426 1 -chr20 62926657 62927085 1 -chr20 62942065 62942238 1 -chr20 62943373 62943765 1 -chr20 62953011 62953185 1 -chr20 62957396 62957586 1 -chr20 62960827 62961149 1 -chr20 62961149 62961158 2 -chr20 62961158 62961515 1 -chr20 62964165 62964394 1 -chr20 62966176 62966462 1 -chr20 62969788 62969867 1 -chr20 62971974 62972064 1 -chr20 62972689 62972965 1 -chr20 62973023 62973211 1 -chr20 62979154 62979215 1 -chr20 62982095 62982212 1 -chr20 62984283 62984826 1 -chr20 62991124 62991423 1 -chr20 62993708 62993896 1 -chr20 62993910 62994376 1 -chr20 62995956 62996092 1 -chr20 62999692 63000184 1 -chr20 63016603 63017128 1 -chr20 63018191 63018738 1 -chr20 63024025 63024193 1 -chr20 63028606 63028997 1 -chr20 63030050 63030281 1 -chr20 63031521 63031650 1 -chr20 63032089 63032390 1 -chr20 63033928 63034142 1 -chr20 63034431 63034801 1 -chr20 63043297 63043644 1 -chr20 63047878 63047959 1 -chr20 63048564 63049065 1 -chr20 63049378 63049716 1 -chr20 63050796 63050991 1 -chr20 63053687 63054230 1 -chr20 63054499 63054808 1 -chr20 63065827 63066030 1 -chr20 63082538 63083094 1 -chr20 63086958 63087348 1 -chr20 63087499 63087688 1 -chr20 63087941 63088315 1 -chr20 63092339 63092843 1 -chr20 63106410 63106605 1 -chr20 63115531 63115880 1 -chr20 63125361 63125538 1 -chr20 63134712 63134800 1 -chr20 63135623 63135820 1 -chr20 63140816 63141067 1 -chr20 63144901 63145195 1 -chr20 63146365 63146505 1 -chr20 63146850 63147071 1 -chr20 63150815 63151040 1 -chr20 63155275 63155489 1 -chr20 63162405 63162606 1 -chr20 63165831 63166214 1 -chr20 63167522 63167533 1 -chr20 63167533 63167553 2 -chr20 63167553 63167577 1 -chr20 63167712 63168118 1 -chr20 63169945 63170231 1 -chr20 63184857 63185187 1 -chr20 63187591 63187770 1 -chr20 63192739 63192969 1 -chr20 63200989 63201018 1 -chr20 63204356 63204763 1 -chr20 63205882 63206527 1 -chr20 63211448 63211684 1 -chr20 63220800 63221320 1 -chr20 63223281 63223485 1 -chr20 63227643 63227827 1 -chr20 63235831 63236243 1 -chr20 63237414 63237635 1 -chr20 63241354 63241736 1 -chr20 63245156 63245510 1 -chr20 63247994 63248359 1 -chr20 63250212 63250429 1 -chr20 63251155 63251183 1 -chr20 63257541 63257822 1 -chr20 63257873 63258236 1 -chr20 63265775 63266059 1 -chr20 63266841 63266871 1 -chr20 63270857 63270912 1 -chr20 63273016 63273267 1 -chr20 63274911 63275113 1 -chr20 63283611 63284063 1 -chr20 63284654 63284931 1 -chr20 63285267 63285600 1 -chr20 63286551 63286844 1 -chr20 63290629 63290750 1 -chr20 63304642 63305123 1 -chr20 63306493 63306677 1 -chr20 63312509 63312694 1 -chr20 63314936 63315123 1 -chr20 63319933 63319999 1 -chr20 63329866 63330079 1 -chr20 63334801 63335092 1 -chr20 63349451 63349638 1 -chr20 63350509 63350848 1 -chr20 63353009 63353229 1 -chr20 63359356 63359877 1 -chr20 63362221 63362571 1 -chr20 63362657 63362915 1 -chr20 63367352 63367907 1 -chr20 63370328 63370515 1 -chr20 63377655 63377904 1 -chr20 63378567 63379064 1 -chr20 63383118 63383206 1 -chr20 63383383 63383624 1 -chr20 63394983 63395362 1 -chr20 63395752 63396078 1 -chr20 63397849 63398074 1 -chr20 63398324 63398386 1 -chr20 63399063 63399407 1 -chr20 63402486 63402831 1 -chr20 63407877 63407982 1 -chr20 63408895 63409205 1 -chr20 63409813 63410120 1 -chr20 63412646 63412848 1 -chr20 63412848 63412863 2 -chr20 63412863 63413241 1 -chr20 63417056 63417494 1 -chr20 63419113 63419508 1 -chr20 63429631 63429961 1 -chr20 63431231 63431594 1 -chr20 63432200 63432699 1 -chr20 63441433 63441839 1 -chr20 63442889 63442915 1 -chr20 63443348 63443373 1 -chr20 63446931 63447097 1 -chr20 63450318 63450543 1 -chr20 63452316 63452511 1 -chr20 63459467 63459627 1 -chr20 63462376 63462993 1 -chr20 63469343 63469834 1 -chr20 63474847 63475149 1 -chr20 63479013 63479387 1 -chr20 63483295 63483520 1 -chr20 63485026 63485295 1 -chr20 63485345 63485606 1 -chr20 63487454 63487662 1 -chr20 63490840 63491197 1 -chr20 63501573 63501848 1 -chr20 63517592 63517782 1 -chr20 63522560 63522646 1 -chr20 63524456 63524560 1 -chr20 63526423 63526478 1 -chr20 63529299 63529507 1 -chr20 63531503 63531537 1 -chr20 63535908 63536027 1 -chr20 63538168 63538218 1 -chr20 63539442 63539543 1 -chr20 63543554 63543740 1 -chr20 63544818 63544981 1 -chr20 63545543 63545854 1 -chr20 63551456 63551526 1 -chr20 63553100 63553279 1 -chr20 63553370 63553536 1 -chr20 63553543 63553895 1 -chr20 63554611 63555351 1 -chr20 63573700 63574024 1 -chr20 63583139 63583501 1 -chr20 63585618 63585804 1 -chr20 63594531 63594738 1 -chr20 63594821 63594877 1 -chr20 63597669 63597841 1 -chr20 63602033 63602210 1 -chr20 63602294 63602673 1 -chr20 63606709 63607096 1 -chr20 63619354 63619785 1 -chr20 63622280 63622608 1 -chr20 63626842 63627212 1 -chr20 63646848 63646947 1 -chr20 63653376 63653441 1 -chr20 63653604 63653631 1 -chr20 63654275 63654769 1 -chr20 63654899 63655273 1 -chr20 63657268 63657791 1 -chr20 63659814 63659997 1 -chr20 63661350 63661660 1 -chr20 63664667 63665112 1 -chr20 63665370 63665723 1 -chr20 63681503 63681929 1 -chr20 63683512 63683873 1 -chr20 63693692 63693720 1 -chr20 63695441 63695785 1 -chr20 63702088 63702257 1 -chr20 63704506 63705058 1 -chr20 63707218 63707412 1 -chr20 63708476 63708730 1 -chr20 63711353 63711525 1 -chr20 63713860 63714243 1 -chr20 63721607 63721763 1 -chr20 63725119 63725194 1 -chr20 63739381 63739618 1 -chr20 63739762 63739806 1 -chr20 63747682 63748228 1 -chr20 63749470 63749536 1 -chr20 63752743 63752908 1 -chr20 63755606 63755881 1 -chr20 63757946 63757986 1 -chr20 63758049 63758280 1 -chr20 63762393 63762601 1 -chr20 63768626 63768861 1 -chr20 63769374 63769736 1 -chr20 63779523 63779622 1 -chr20 63785444 63785471 1 -chr20 63788220 63788507 1 -chr20 63791671 63791781 1 -chr20 63793164 63793351 1 -chr20 63802435 63802733 1 -chr20 63806210 63806290 1 -chr20 63808369 63808629 1 -chr20 63820183 63820237 1 -chr20 63829133 63829678 1 -chr20 63829846 63830059 1 -chr20 63835736 63835904 1 -chr20 63850891 63851095 1 -chr20 63854231 63854286 1 -chr20 63855613 63855768 1 -chr20 63858835 63859016 1 -chr20 63862943 63863138 1 -chr20 63865160 63865398 1 -chr20 63869037 63869516 1 -chr20 63870101 63870363 1 -chr20 63879039 63879447 1 -chr20 63884330 63884625 1 -chr20 63889263 63889473 1 -chr20 63896118 63896460 1 -chr20 63897198 63897259 1 -chr20 63907126 63907321 1 -chr20 63912333 63912497 1 -chr20 63914206 63914349 1 -chr20 63915224 63915678 1 -chr20 63916332 63916469 1 -chr20 63929109 63929780 1 -chr20 63942613 63943129 1 -chr20 63943149 63943539 1 -chr20 63944677 63944877 1 -chr20 63951422 63951708 1 -chr20 63951778 63952216 1 -chr20 63956592 63956802 1 -chr20 63957313 63957356 1 -chr20 63957710 63957976 1 -chr20 63961901 63962493 1 -chr20 63966624 63966861 1 -chr20 63969972 63970023 1 -chr20 63970082 63970434 1 -chr20 63971902 63971955 1 -chr20 63972109 63972652 1 -chr20 63986914 63987032 1 -chr20 63987325 63987404 1 -chr20 63996720 63996812 1 -chr20 64020018 64020155 1 -chr20 64023598 64023975 1 -chr20 64024951 64025170 1 -chr20 64028061 64028391 1 -chr20 64034950 64035299 1 -chr20 64042218 64042425 1 -chr20 64045353 64045566 1 -chr20 64050656 64051217 1 -chr20 64071829 64072086 1 -chr20 64074087 64074539 1 -chr20 64079543 64079870 1 -chr20 64080866 64081096 1 -chr20 64082812 64082839 1 -chr20 64083583 64083727 1 -chr20 64085558 64085679 1 -chr20 64087830 64088240 1 -chr20 64088862 64088962 1 -chr20 64089544 64089830 1 -chr20 64091566 64091929 1 -chr20 64092252 64092415 1 -chr20 64093882 64094220 1 -chr20 64099971 64100147 1 -chr20 64104022 64104504 1 -chr20 64104520 64104730 1 -chr20 64104730 64104754 2 -chr20 64104754 64105007 1 -chr20 64105104 64105450 1 -chr20 64109646 64110018 1 -chr20 64110514 64110739 1 -chr20 64117099 64117382 1 -chr20 64118743 64118956 1 -chr20 64119746 64120125 1 -chr20 64123654 64123988 1 -chr20 64131374 64131685 1 -chr20 64132317 64132388 1 -chr20 64133447 64133923 1 -chr20 64142227 64142496 1 -chr20 64142790 64143161 1 -chr20 64144399 64144791 1 -chr20 64145592 64145975 1 -chr20 64154493 64154570 1 -chr20 64160236 64160446 1 -chr20 64161689 64162096 1 -chr20 64164550 64164728 1 -chr20 64171600 64171978 1 -chr20 64172004 64172536 1 -chr20 64174617 64175033 1 -chr20 64175617 64175736 1 -chr20 64177933 64178123 1 -chr20 64181071 64181517 1 -chr20 64181517 64181536 2 -chr20 64181536 64181943 1 -chr20 64181997 64182468 1 -chr20 64185148 64185335 1 -chr20 64188740 64188805 1 -chr20 64189140 64189700 1 -chr20 64202047 64202379 1 -chr20 64206172 64206436 1 -chr20 64207447 64207666 1 -chr20 64212606 64212808 1 -chr20 64212808 64212817 2 -chr20 64212817 64213039 1 -chr20 64215326 64215523 1 -chr20 64230626 64231112 1 -chr20 64233310 64233337 1 -chr20 64234725 64234775 1 -chr20 64235884 64236078 1 -chr20 64236340 64236414 1 -chr20 64240536 64241018 1 -chr20 64248374 64248648 1 -chr20 64255635 64256119 1 -chr20 64261516 64261551 1 -chr20 64270300 64270468 1 -chr20 64270904 64270994 1 -chr20 64271120 64271156 1 -chr20 64271174 64271210 1 -chr20 64279789 64279914 1 -chr20 64286762 64286789 1 -chr20 64289922 64289984 1 -chr20 64293047 64293110 1 -chr20 64293539 64293662 1 -chr20 64294854 64295093 1 -chr20 64303705 64303929 1 -chr20 64310580 64310639 1 -chr20 64310792 64311023 1 -chr20 64311713 64311937 1 -chr20 64312070 64312405 1 -chr20 64314937 64315096 1 -chr20 64321140 64321281 1 -chr20 64328271 64328586 1 -chr20 64333842 64333867 1 diff --git a/tests/data/delete_me/bedgraph/K27me3_1_to_chr20.bedgraph b/tests/data/delete_me/bedgraph/K27me3_1_to_chr20.bedgraph deleted file mode 100644 index ce50d2fa..00000000 --- a/tests/data/delete_me/bedgraph/K27me3_1_to_chr20.bedgraph +++ /dev/null @@ -1,12451 +0,0 @@ -chr20 60304 60373 1 -chr20 62171 62353 1 -chr20 64517 64548 1 -chr20 66136 66165 1 -chr20 66486 66540 1 -chr20 66996 67145 1 -chr20 71392 71573 1 -chr20 72695 72735 1 -chr20 73729 73772 1 -chr20 74725 74984 1 -chr20 82221 82307 1 -chr20 85191 85387 1 -chr20 87543 87833 1 -chr20 92450 92521 1 -chr20 95601 95774 1 -chr20 105426 105628 1 -chr20 109025 109240 1 -chr20 115050 115462 1 -chr20 125115 125427 1 -chr20 132051 132232 1 -chr20 132838 132905 1 -chr20 140477 140542 1 -chr20 148020 148251 1 -chr20 148548 148746 1 -chr20 149012 149108 1 -chr20 149176 149418 1 -chr20 153426 153646 1 -chr20 154371 154532 1 -chr20 157020 157196 1 -chr20 157618 157828 1 -chr20 158268 158342 1 -chr20 160132 160301 1 -chr20 162210 162401 1 -chr20 168998 169035 1 -chr20 174114 174160 1 -chr20 179931 180099 1 -chr20 186206 186380 1 -chr20 189313 189517 1 -chr20 189871 189944 1 -chr20 189944 189953 2 -chr20 189953 190319 1 -chr20 202262 202479 1 -chr20 205207 205456 1 -chr20 210919 211155 1 -chr20 213551 213779 1 -chr20 215043 215108 1 -chr20 215681 216297 1 -chr20 216930 217340 1 -chr20 219501 219768 1 -chr20 226118 226181 1 -chr20 227329 227527 1 -chr20 229106 229326 1 -chr20 237599 237917 1 -chr20 242756 242933 1 -chr20 253573 253708 1 -chr20 263224 263480 1 -chr20 270486 270733 1 -chr20 306674 306723 1 -chr20 319512 319554 1 -chr20 333669 333697 1 -chr20 385274 385321 1 -chr20 411477 411521 1 -chr20 448678 448746 1 -chr20 452527 452570 1 -chr20 464864 464906 1 -chr20 468929 468986 1 -chr20 470573 470750 1 -chr20 471530 471827 1 -chr20 494234 494288 1 -chr20 497370 497395 1 -chr20 533464 533507 1 -chr20 557826 557866 1 -chr20 572558 572767 1 -chr20 591240 591636 1 -chr20 593323 593378 1 -chr20 615744 615973 1 -chr20 618359 618668 1 -chr20 619897 620099 1 -chr20 623752 623950 1 -chr20 632765 632951 1 -chr20 633002 633357 1 -chr20 634098 634281 1 -chr20 654907 654945 1 -chr20 687311 687490 1 -chr20 702701 702784 1 -chr20 717968 718206 1 -chr20 718776 718827 1 -chr20 722162 722202 1 -chr20 723725 724130 1 -chr20 740634 740822 1 -chr20 745130 745190 1 -chr20 753014 753046 1 -chr20 755836 755879 1 -chr20 758619 758814 1 -chr20 764150 764483 1 -chr20 765526 765699 1 -chr20 778237 778293 1 -chr20 783926 784079 1 -chr20 786940 787151 1 -chr20 789504 789698 1 -chr20 792523 792584 1 -chr20 793116 793201 1 -chr20 796728 796800 1 -chr20 797422 797620 1 -chr20 798994 799038 1 -chr20 801097 801329 1 -chr20 810219 810306 1 -chr20 830581 830643 1 -chr20 832639 832762 1 -chr20 864681 865114 1 -chr20 865600 865818 1 -chr20 866423 866614 1 -chr20 873112 873308 1 -chr20 873678 873878 1 -chr20 875673 875860 1 -chr20 888934 889348 1 -chr20 889829 890248 1 -chr20 891759 891948 1 -chr20 900326 900371 1 -chr20 902834 903208 1 -chr20 903832 904066 1 -chr20 905579 905777 1 -chr20 906039 906109 1 -chr20 908157 908197 1 -chr20 908434 908579 1 -chr20 908664 909166 1 -chr20 910794 911188 1 -chr20 911909 912097 1 -chr20 913092 913337 1 -chr20 913602 913787 1 -chr20 914290 914466 1 -chr20 916431 916486 1 -chr20 919802 920078 1 -chr20 921072 921281 1 -chr20 925226 925410 1 -chr20 938339 938675 1 -chr20 938784 938974 1 -chr20 939761 939806 1 -chr20 943771 944019 1 -chr20 953782 953984 1 -chr20 955413 955609 1 -chr20 956784 956989 1 -chr20 957060 957265 1 -chr20 958150 958517 1 -chr20 961501 961565 1 -chr20 962230 962451 1 -chr20 962516 962731 1 -chr20 962916 962988 1 -chr20 964746 964773 1 -chr20 966150 966342 1 -chr20 967888 968058 1 -chr20 969286 969812 1 -chr20 970056 970246 1 -chr20 974434 974671 1 -chr20 976323 976508 1 -chr20 977546 978124 1 -chr20 978818 979227 1 -chr20 983250 983686 1 -chr20 987025 987082 1 -chr20 987811 988045 1 -chr20 994840 995069 1 -chr20 997279 997488 1 -chr20 997734 997900 1 -chr20 998068 998133 1 -chr20 999283 999500 1 -chr20 1001651 1001891 1 -chr20 1007792 1007997 1 -chr20 1012181 1012412 1 -chr20 1019114 1019410 1 -chr20 1027994 1028084 1 -chr20 1028515 1028945 1 -chr20 1029112 1029308 1 -chr20 1029310 1029882 1 -chr20 1030297 1030517 1 -chr20 1035450 1035666 1 -chr20 1036063 1036104 1 -chr20 1039354 1039565 1 -chr20 1044002 1044201 1 -chr20 1050435 1050793 1 -chr20 1052256 1052637 1 -chr20 1055232 1055441 1 -chr20 1056342 1056547 1 -chr20 1065727 1065795 1 -chr20 1066946 1067162 1 -chr20 1068635 1068991 1 -chr20 1076419 1076475 1 -chr20 1079081 1079291 1 -chr20 1080557 1080808 1 -chr20 1150144 1150171 1 -chr20 1185439 1185591 1 -chr20 1191969 1192024 1 -chr20 1197256 1197335 1 -chr20 1218918 1218963 1 -chr20 1219373 1219424 1 -chr20 1281218 1281521 1 -chr20 1282687 1282895 1 -chr20 1284835 1285086 1 -chr20 1286440 1286841 1 -chr20 1286980 1287183 1 -chr20 1297985 1298125 1 -chr20 1343503 1343558 1 -chr20 1357453 1357499 1 -chr20 1359294 1359326 1 -chr20 1369777 1369973 1 -chr20 1402285 1402363 1 -chr20 1403599 1403773 1 -chr20 1404511 1404728 1 -chr20 1406830 1406921 1 -chr20 1406984 1407267 1 -chr20 1407340 1407923 1 -chr20 1414364 1414558 1 -chr20 1420248 1420464 1 -chr20 1425017 1425045 1 -chr20 1459777 1460220 1 -chr20 1470528 1470574 1 -chr20 1479115 1479315 1 -chr20 1482497 1482571 1 -chr20 1483823 1484023 1 -chr20 1486911 1487099 1 -chr20 1491235 1491415 1 -chr20 1491415 1491425 2 -chr20 1491425 1491666 1 -chr20 1491695 1491976 1 -chr20 1492329 1492723 1 -chr20 1492734 1492796 1 -chr20 1494384 1494812 1 -chr20 1501399 1501619 1 -chr20 1503808 1503863 1 -chr20 1505508 1505695 1 -chr20 1508243 1508446 1 -chr20 1509641 1509804 1 -chr20 1510015 1510233 1 -chr20 1515751 1516197 1 -chr20 1520581 1520825 1 -chr20 1520923 1521699 1 -chr20 1530919 1531188 1 -chr20 1533728 1533937 1 -chr20 1534375 1534583 1 -chr20 1535143 1535325 1 -chr20 1536961 1537378 1 -chr20 1537914 1538127 1 -chr20 1543100 1543142 1 -chr20 1544150 1544369 1 -chr20 1560694 1561062 1 -chr20 1566076 1566247 1 -chr20 1567632 1568014 1 -chr20 1572190 1572579 1 -chr20 1575097 1575303 1 -chr20 1608421 1608589 1 -chr20 1609073 1609294 1 -chr20 1610001 1610443 1 -chr20 1611162 1611324 1 -chr20 1619602 1620186 1 -chr20 1626460 1626689 1 -chr20 1628559 1628768 1 -chr20 1629306 1629481 1 -chr20 1629721 1630136 1 -chr20 1630144 1630498 1 -chr20 1635945 1636279 1 -chr20 1636279 1636301 2 -chr20 1636301 1636343 1 -chr20 1643558 1643620 1 -chr20 1645710 1645757 1 -chr20 1646784 1646850 1 -chr20 1659211 1659948 1 -chr20 1661618 1662037 1 -chr20 1664984 1665191 1 -chr20 1665990 1666225 1 -chr20 1673751 1673943 1 -chr20 1674312 1674493 1 -chr20 1674965 1675207 1 -chr20 1684010 1684063 1 -chr20 1691781 1691823 1 -chr20 1708076 1708289 1 -chr20 1710732 1711220 1 -chr20 1711489 1711886 1 -chr20 1716999 1717213 1 -chr20 1719811 1719978 1 -chr20 1734227 1734402 1 -chr20 1741740 1741944 1 -chr20 1744941 1744987 1 -chr20 1755656 1756076 1 -chr20 1776792 1777002 1 -chr20 1778566 1778760 1 -chr20 1779922 1780086 1 -chr20 1780738 1780953 1 -chr20 1780999 1781174 1 -chr20 1785473 1785670 1 -chr20 1785670 1785674 2 -chr20 1785674 1786256 1 -chr20 1786473 1786902 1 -chr20 1786975 1787219 1 -chr20 1788993 1789595 1 -chr20 1801071 1801266 1 -chr20 1801466 1801869 1 -chr20 1801882 1802068 1 -chr20 1803835 1804008 1 -chr20 1804198 1804366 1 -chr20 1807454 1807667 1 -chr20 1807860 1808017 1 -chr20 1809103 1809307 1 -chr20 1817535 1817782 1 -chr20 1817798 1817982 1 -chr20 1817982 1817988 2 -chr20 1817988 1818056 1 -chr20 1820668 1820837 1 -chr20 1827816 1828174 1 -chr20 1836716 1836771 1 -chr20 1837488 1837872 1 -chr20 1842367 1842556 1 -chr20 1842556 1842565 2 -chr20 1842565 1842767 1 -chr20 1843306 1843436 1 -chr20 1845899 1846089 1 -chr20 1855437 1855505 1 -chr20 1859589 1859757 1 -chr20 1879876 1880096 1 -chr20 1884760 1884932 1 -chr20 1888429 1888612 1 -chr20 1889200 1889263 1 -chr20 1890214 1890422 1 -chr20 1891442 1891803 1 -chr20 1893762 1893816 1 -chr20 1897548 1898039 1 -chr20 1899074 1899441 1 -chr20 1899628 1899690 1 -chr20 1903774 1903853 1 -chr20 1904276 1904456 1 -chr20 1904493 1904606 1 -chr20 1907997 1908207 1 -chr20 1908439 1908481 1 -chr20 1910436 1910600 1 -chr20 1911681 1911883 1 -chr20 1913611 1913679 1 -chr20 1914597 1914835 1 -chr20 1917046 1917283 1 -chr20 1919260 1919465 1 -chr20 1921018 1921415 1 -chr20 1921594 1921739 1 -chr20 1922732 1922924 1 -chr20 1923424 1923600 1 -chr20 1924214 1924439 1 -chr20 1924740 1924814 1 -chr20 1928716 1928771 1 -chr20 1929460 1929739 1 -chr20 1933234 1933445 1 -chr20 1933445 1933466 2 -chr20 1933466 1933507 1 -chr20 1935734 1935944 1 -chr20 1937413 1937459 1 -chr20 1940219 1940277 1 -chr20 1940337 1940525 1 -chr20 1942286 1942529 1 -chr20 1945832 1946045 1 -chr20 1946323 1946355 1 -chr20 1946889 1947145 1 -chr20 1950927 1950965 1 -chr20 1953386 1953632 1 -chr20 1955017 1955209 1 -chr20 1956085 1956274 1 -chr20 1962057 1962100 1 -chr20 1969038 1969081 1 -chr20 1973481 1973682 1 -chr20 1974081 1974292 1 -chr20 1974539 1974915 1 -chr20 1978392 1978636 1 -chr20 1980336 1980522 1 -chr20 1981015 1981266 1 -chr20 1982892 1983071 1 -chr20 1983452 1983824 1 -chr20 1987902 1988139 1 -chr20 1988461 1988628 1 -chr20 1991981 1992198 1 -chr20 1992387 1992593 1 -chr20 1992612 1992800 1 -chr20 1993205 1993394 1 -chr20 1993757 1993901 1 -chr20 1993901 1993916 2 -chr20 1993916 1993959 1 -chr20 1993990 1994187 1 -chr20 1994752 1994839 1 -chr20 1996768 1996793 1 -chr20 1996915 1997113 1 -chr20 2009259 2009437 1 -chr20 2020359 2020560 1 -chr20 2023088 2023287 1 -chr20 2023437 2023672 1 -chr20 2032465 2032665 1 -chr20 2034846 2035197 1 -chr20 2035668 2035858 1 -chr20 2039705 2039806 1 -chr20 2043235 2043456 1 -chr20 2045023 2045240 1 -chr20 2048294 2048471 1 -chr20 2048895 2049095 1 -chr20 2050317 2050353 1 -chr20 2050805 2051179 1 -chr20 2051195 2051394 1 -chr20 2066484 2066665 1 -chr20 2066859 2067031 1 -chr20 2067180 2067387 1 -chr20 2071792 2071989 1 -chr20 2072376 2072596 1 -chr20 2074677 2074769 1 -chr20 2077312 2077499 1 -chr20 2078716 2078900 1 -chr20 2081855 2082048 1 -chr20 2084546 2084728 1 -chr20 2089417 2089491 1 -chr20 2152519 2152745 1 -chr20 2153279 2153370 1 -chr20 2155647 2155876 1 -chr20 2155925 2156142 1 -chr20 2161045 2161255 1 -chr20 2162459 2162570 1 -chr20 2166856 2167052 1 -chr20 2167230 2167293 1 -chr20 2167344 2167503 1 -chr20 2167941 2167981 1 -chr20 2170373 2170430 1 -chr20 2171196 2171588 1 -chr20 2174111 2174356 1 -chr20 2180469 2180519 1 -chr20 2180549 2180714 1 -chr20 2182460 2182670 1 -chr20 2188567 2188926 1 -chr20 2191078 2191277 1 -chr20 2195736 2195799 1 -chr20 2196134 2196362 1 -chr20 2197851 2198115 1 -chr20 2198250 2198680 1 -chr20 2200418 2200479 1 -chr20 2200886 2200933 1 -chr20 2203068 2203116 1 -chr20 2204085 2204310 1 -chr20 2205461 2205497 1 -chr20 2205497 2205519 2 -chr20 2205519 2205728 1 -chr20 2207226 2207390 1 -chr20 2208957 2209188 1 -chr20 2209776 2209806 1 -chr20 2209860 2209890 1 -chr20 2211854 2212050 1 -chr20 2213176 2213389 1 -chr20 2215757 2215971 1 -chr20 2224089 2224299 1 -chr20 2224680 2224737 1 -chr20 2224755 2224903 1 -chr20 2230589 2230831 1 -chr20 2230903 2231068 1 -chr20 2231562 2231814 1 -chr20 2234668 2234731 1 -chr20 2234734 2234948 1 -chr20 2235035 2235243 1 -chr20 2235885 2236116 1 -chr20 2236116 2236121 2 -chr20 2236121 2236352 1 -chr20 2236352 2236364 2 -chr20 2236364 2236370 1 -chr20 2236370 2236385 2 -chr20 2236385 2236400 1 -chr20 2236400 2236412 2 -chr20 2236412 2236448 1 -chr20 2239348 2239600 1 -chr20 2242779 2242965 1 -chr20 2243438 2243463 1 -chr20 2243645 2243728 1 -chr20 2244485 2244707 1 -chr20 2246166 2246433 1 -chr20 2247811 2248041 1 -chr20 2248265 2248302 1 -chr20 2252927 2252969 1 -chr20 2257231 2257451 1 -chr20 2260205 2260373 1 -chr20 2267774 2267995 1 -chr20 2268254 2268294 1 -chr20 2271997 2272234 1 -chr20 2276131 2276204 1 -chr20 2280121 2280301 1 -chr20 2282857 2282897 1 -chr20 2284147 2284197 1 -chr20 2287808 2287852 1 -chr20 2289339 2289390 1 -chr20 2290782 2291185 1 -chr20 2298407 2298638 1 -chr20 2298908 2299259 1 -chr20 2299407 2299546 1 -chr20 2299574 2299797 1 -chr20 2300862 2301413 1 -chr20 2302108 2302539 1 -chr20 2304726 2304976 1 -chr20 2305624 2305808 1 -chr20 2306763 2306963 1 -chr20 2307582 2307948 1 -chr20 2310925 2311307 1 -chr20 2326171 2326345 1 -chr20 2329596 2329804 1 -chr20 2330068 2330114 1 -chr20 2331194 2331245 1 -chr20 2331333 2331397 1 -chr20 2333691 2333901 1 -chr20 2336115 2336518 1 -chr20 2345664 2345830 1 -chr20 2349260 2349287 1 -chr20 2365235 2365412 1 -chr20 2371912 2372361 1 -chr20 2374423 2374804 1 -chr20 2377917 2378145 1 -chr20 2378751 2378912 1 -chr20 2380791 2381003 1 -chr20 2382218 2382303 1 -chr20 2385262 2385459 1 -chr20 2385820 2386033 1 -chr20 2389764 2390159 1 -chr20 2390331 2390703 1 -chr20 2391283 2391464 1 -chr20 2392968 2393020 1 -chr20 2393036 2393081 1 -chr20 2394356 2394404 1 -chr20 2397416 2397472 1 -chr20 2399384 2399558 1 -chr20 2399559 2399736 1 -chr20 2401408 2401588 1 -chr20 2402336 2402543 1 -chr20 2403902 2404070 1 -chr20 2404070 2404087 2 -chr20 2404087 2404237 1 -chr20 2404775 2404839 1 -chr20 2407780 2407954 1 -chr20 2421813 2421858 1 -chr20 2421949 2422004 1 -chr20 2423287 2423339 1 -chr20 2423341 2423776 1 -chr20 2424519 2424735 1 -chr20 2425374 2425590 1 -chr20 2430574 2430735 1 -chr20 2432639 2432867 1 -chr20 2432936 2433181 1 -chr20 2439022 2439442 1 -chr20 2442840 2443026 1 -chr20 2443810 2443843 1 -chr20 2443983 2444148 1 -chr20 2451890 2452081 1 -chr20 2464760 2464824 1 -chr20 2484086 2484148 1 -chr20 2492184 2492264 1 -chr20 2504181 2504241 1 -chr20 2504951 2505170 1 -chr20 2506815 2506860 1 -chr20 2530733 2530769 1 -chr20 2534980 2535039 1 -chr20 2536103 2536239 1 -chr20 2537916 2537957 1 -chr20 2545301 2545466 1 -chr20 2546636 2546799 1 -chr20 2547700 2547914 1 -chr20 2554567 2554788 1 -chr20 2563437 2563610 1 -chr20 2567019 2567204 1 -chr20 2567204 2567208 2 -chr20 2567208 2567411 1 -chr20 2567984 2568432 1 -chr20 2573096 2573523 1 -chr20 2575371 2575589 1 -chr20 2580750 2581138 1 -chr20 2581243 2581654 1 -chr20 2583869 2584097 1 -chr20 2590167 2590227 1 -chr20 2595945 2596176 1 -chr20 2597122 2597489 1 -chr20 2601330 2601494 1 -chr20 2602691 2602942 1 -chr20 2611069 2611285 1 -chr20 2613439 2613645 1 -chr20 2613821 2613887 1 -chr20 2617359 2617505 1 -chr20 2618560 2618760 1 -chr20 2621220 2621292 1 -chr20 2621558 2621621 1 -chr20 2621917 2622142 1 -chr20 2623578 2623780 1 -chr20 2624415 2624634 1 -chr20 2625042 2625250 1 -chr20 2625592 2625656 1 -chr20 2627646 2627822 1 -chr20 2630318 2630513 1 -chr20 2630807 2630964 1 -chr20 2631559 2631786 1 -chr20 2631861 2632054 1 -chr20 2635132 2635206 1 -chr20 2635707 2635881 1 -chr20 2641436 2641664 1 -chr20 2661330 2661421 1 -chr20 2668860 2669044 1 -chr20 2672534 2672738 1 -chr20 2677344 2677610 1 -chr20 2678266 2678682 1 -chr20 2681086 2681268 1 -chr20 2682472 2682524 1 -chr20 2683875 2683971 1 -chr20 2683971 2683980 2 -chr20 2683980 2684154 1 -chr20 2684510 2684551 1 -chr20 2690379 2690607 1 -chr20 2692588 2692643 1 -chr20 2698604 2698824 1 -chr20 2699710 2699877 1 -chr20 2701774 2702012 1 -chr20 2705419 2705666 1 -chr20 2706962 2707187 1 -chr20 2711921 2712108 1 -chr20 2712242 2712463 1 -chr20 2712797 2713011 1 -chr20 2713808 2714257 1 -chr20 2714403 2714461 1 -chr20 2715602 2715808 1 -chr20 2717225 2717413 1 -chr20 2724073 2724272 1 -chr20 2725009 2725244 1 -chr20 2725436 2725623 1 -chr20 2728490 2728657 1 -chr20 2728666 2728817 1 -chr20 2729308 2729366 1 -chr20 2729366 2729375 2 -chr20 2729375 2729608 1 -chr20 2730726 2730796 1 -chr20 2731098 2731151 1 -chr20 2735146 2735590 1 -chr20 2743242 2743355 1 -chr20 2744638 2744681 1 -chr20 2745545 2745745 1 -chr20 2746352 2746538 1 -chr20 2747880 2747929 1 -chr20 2750290 2750490 1 -chr20 2750490 2750499 2 -chr20 2750499 2750667 1 -chr20 2751167 2751394 1 -chr20 2755216 2755463 1 -chr20 2757239 2757292 1 -chr20 2759442 2759598 1 -chr20 2761035 2761237 1 -chr20 2764141 2764296 1 -chr20 2767475 2767521 1 -chr20 2769527 2769566 1 -chr20 2778038 2778080 1 -chr20 2780970 2781170 1 -chr20 2781574 2781617 1 -chr20 2789227 2789438 1 -chr20 2791380 2791431 1 -chr20 2794859 2794901 1 -chr20 2795413 2795463 1 -chr20 2797907 2798236 1 -chr20 2799102 2799342 1 -chr20 2800196 2800523 1 -chr20 2801252 2801483 1 -chr20 2801519 2801736 1 -chr20 2802599 2802938 1 -chr20 2805633 2805883 1 -chr20 2807503 2807658 1 -chr20 2810772 2810811 1 -chr20 2819823 2819853 1 -chr20 2830625 2830654 1 -chr20 2839460 2839686 1 -chr20 2840478 2841093 1 -chr20 2854684 2854723 1 -chr20 2872009 2872363 1 -chr20 2881047 2881114 1 -chr20 2883414 2883463 1 -chr20 2884833 2884869 1 -chr20 2892578 2892664 1 -chr20 2924268 2924299 1 -chr20 2929610 2929762 1 -chr20 2950469 2950514 1 -chr20 2953298 2953331 1 -chr20 2953361 2953397 1 -chr20 2969438 2969478 1 -chr20 2971970 2972022 1 -chr20 2972763 2972826 1 -chr20 2982844 2982903 1 -chr20 3003576 3003617 1 -chr20 3010097 3010128 1 -chr20 3060334 3060375 1 -chr20 3065849 3065890 1 -chr20 3072766 3072955 1 -chr20 3075664 3075698 1 -chr20 3097385 3097480 1 -chr20 3099749 3099808 1 -chr20 3102837 3103103 1 -chr20 3152639 3152670 1 -chr20 3187032 3187063 1 -chr20 3187442 3187468 1 -chr20 3188609 3188654 1 -chr20 3201272 3201326 1 -chr20 3210924 3210973 1 -chr20 3226189 3226333 1 -chr20 3235985 3236171 1 -chr20 3238449 3238878 1 -chr20 3239629 3239816 1 -chr20 3242088 3242168 1 -chr20 3243438 3243474 1 -chr20 3244351 3244500 1 -chr20 3256103 3256299 1 -chr20 3257309 3257338 1 -chr20 3302124 3302152 1 -chr20 3330027 3330300 1 -chr20 3351307 3351349 1 -chr20 3351358 3351442 1 -chr20 3358659 3358742 1 -chr20 3371450 3371501 1 -chr20 3397412 3397457 1 -chr20 3435232 3435285 1 -chr20 3437790 3437827 1 -chr20 3460967 3461161 1 -chr20 3464087 3464146 1 -chr20 3479007 3479169 1 -chr20 3484028 3484070 1 -chr20 3496149 3496335 1 -chr20 3498523 3498575 1 -chr20 3498821 3499033 1 -chr20 3499462 3499665 1 -chr20 3500143 3500346 1 -chr20 3512726 3512814 1 -chr20 3513789 3513984 1 -chr20 3516920 3517101 1 -chr20 3526391 3526667 1 -chr20 3537599 3537648 1 -chr20 3538026 3538085 1 -chr20 3541219 3541287 1 -chr20 3566795 3566859 1 -chr20 3638224 3638300 1 -chr20 3651862 3652073 1 -chr20 3658269 3658359 1 -chr20 3659058 3659286 1 -chr20 3660602 3660684 1 -chr20 3662847 3663009 1 -chr20 3665786 3665849 1 -chr20 3668561 3669055 1 -chr20 3669607 3669863 1 -chr20 3670386 3670522 1 -chr20 3674954 3675358 1 -chr20 3680229 3680401 1 -chr20 3681221 3681437 1 -chr20 3684376 3684543 1 -chr20 3692325 3692710 1 -chr20 3692710 3692718 2 -chr20 3692718 3693119 1 -chr20 3694018 3694190 1 -chr20 3696572 3696739 1 -chr20 3697968 3698223 1 -chr20 3698987 3699031 1 -chr20 3700548 3700738 1 -chr20 3701536 3701768 1 -chr20 3704477 3704655 1 -chr20 3706458 3706664 1 -chr20 3708919 3708960 1 -chr20 3719121 3719341 1 -chr20 3724098 3724145 1 -chr20 3725039 3725217 1 -chr20 3729944 3729998 1 -chr20 3730137 3730450 1 -chr20 3730551 3731301 1 -chr20 3731924 3732142 1 -chr20 3732367 3732934 1 -chr20 3817221 3817262 1 -chr20 3833149 3833192 1 -chr20 3847302 3847695 1 -chr20 3852088 3852132 1 -chr20 3880736 3880780 1 -chr20 3882756 3882830 1 -chr20 3909830 3909870 1 -chr20 3941892 3941956 1 -chr20 3947865 3947928 1 -chr20 3977641 3977681 1 -chr20 3986470 3986528 1 -chr20 3995225 3995356 1 -chr20 4023749 4023940 1 -chr20 4023964 4024153 1 -chr20 4028629 4028670 1 -chr20 4033004 4033061 1 -chr20 4058209 4058251 1 -chr20 4100708 4101013 1 -chr20 4123502 4123552 1 -chr20 4143939 4144119 1 -chr20 4149645 4149826 1 -chr20 4154853 4155060 1 -chr20 4166398 4166491 1 -chr20 4190633 4190685 1 -chr20 4203380 4203462 1 -chr20 4203774 4203812 1 -chr20 4212996 4213197 1 -chr20 4213197 4213207 2 -chr20 4213207 4213559 1 -chr20 4225662 4225694 1 -chr20 4231398 4231627 1 -chr20 4232752 4232975 1 -chr20 4234304 4234686 1 -chr20 4236021 4236175 1 -chr20 4236189 4236375 1 -chr20 4237375 4237600 1 -chr20 4239167 4239366 1 -chr20 4239746 4239953 1 -chr20 4242909 4243086 1 -chr20 4243505 4243729 1 -chr20 4244837 4245446 1 -chr20 4251250 4251798 1 -chr20 4253938 4254168 1 -chr20 4256569 4256783 1 -chr20 4259069 4259209 1 -chr20 4259209 4259226 2 -chr20 4259226 4259645 1 -chr20 4261797 4262035 1 -chr20 4263725 4263777 1 -chr20 4267647 4267791 1 -chr20 4267818 4267890 1 -chr20 4275482 4275714 1 -chr20 4277861 4278041 1 -chr20 4279562 4279716 1 -chr20 4282025 4282205 1 -chr20 4283891 4283945 1 -chr20 4287744 4287817 1 -chr20 4296635 4296699 1 -chr20 4301561 4301773 1 -chr20 4303154 4303532 1 -chr20 4304148 4304222 1 -chr20 4304908 4305138 1 -chr20 4305475 4305705 1 -chr20 4316382 4316560 1 -chr20 4318464 4318683 1 -chr20 4318683 4318704 2 -chr20 4318704 4318865 1 -chr20 4321261 4321632 1 -chr20 4323369 4323751 1 -chr20 4325970 4326016 1 -chr20 4326815 4327213 1 -chr20 4327721 4327911 1 -chr20 4328087 4328440 1 -chr20 4329130 4329364 1 -chr20 4329938 4330135 1 -chr20 4331603 4331771 1 -chr20 4332792 4333420 1 -chr20 4333421 4333625 1 -chr20 4334896 4334937 1 -chr20 4336012 4336278 1 -chr20 4338902 4339068 1 -chr20 4340161 4340589 1 -chr20 4344630 4344820 1 -chr20 4356864 4357234 1 -chr20 4358392 4358589 1 -chr20 4358609 4358663 1 -chr20 4360080 4360277 1 -chr20 4372055 4372385 1 -chr20 4379537 4379593 1 -chr20 4381537 4381938 1 -chr20 4384322 4384393 1 -chr20 4391145 4391329 1 -chr20 4395206 4395428 1 -chr20 4401714 4401933 1 -chr20 4403256 4403478 1 -chr20 4403824 4404043 1 -chr20 4407713 4407935 1 -chr20 4415177 4415587 1 -chr20 4421902 4422098 1 -chr20 4422904 4423284 1 -chr20 4423604 4424051 1 -chr20 4424474 4424536 1 -chr20 4426284 4426678 1 -chr20 4428303 4428490 1 -chr20 4431751 4431812 1 -chr20 4432052 4432216 1 -chr20 4434460 4434657 1 -chr20 4437727 4437940 1 -chr20 4443185 4443258 1 -chr20 4444012 4444255 1 -chr20 4444882 4445496 1 -chr20 4445511 4445700 1 -chr20 4446043 4446219 1 -chr20 4450157 4450408 1 -chr20 4462662 4462891 1 -chr20 4465904 4466082 1 -chr20 4468889 4469538 1 -chr20 4471220 4471651 1 -chr20 4472986 4473211 1 -chr20 4477930 4478171 1 -chr20 4480358 4480545 1 -chr20 4482427 4482634 1 -chr20 4487151 4487401 1 -chr20 4487803 4488159 1 -chr20 4489124 4489552 1 -chr20 4489848 4490077 1 -chr20 4497365 4497451 1 -chr20 4497846 4497927 1 -chr20 4498089 4498254 1 -chr20 4500116 4500157 1 -chr20 4502754 4502913 1 -chr20 4516893 4517465 1 -chr20 4519199 4519379 1 -chr20 4537410 4537629 1 -chr20 4546994 4547226 1 -chr20 4573418 4573818 1 -chr20 4579301 4579466 1 -chr20 4580344 4580383 1 -chr20 4584176 4584215 1 -chr20 4584583 4584922 1 -chr20 4588348 4588525 1 -chr20 4591821 4592020 1 -chr20 4594083 4594455 1 -chr20 4595298 4595507 1 -chr20 4601566 4601960 1 -chr20 4602195 4602388 1 -chr20 4605279 4605488 1 -chr20 4606880 4606924 1 -chr20 4608484 4608712 1 -chr20 4610936 4611124 1 -chr20 4611564 4611762 1 -chr20 4611811 4612042 1 -chr20 4612271 4612440 1 -chr20 4612440 4612442 2 -chr20 4612442 4612877 1 -chr20 4616660 4617048 1 -chr20 4618665 4618720 1 -chr20 4620151 4620195 1 -chr20 4621127 4621310 1 -chr20 4624738 4624781 1 -chr20 4626095 4626291 1 -chr20 4629023 4629251 1 -chr20 4631478 4631900 1 -chr20 4637169 4637398 1 -chr20 4637940 4637980 1 -chr20 4640258 4640320 1 -chr20 4641414 4641839 1 -chr20 4643202 4643441 1 -chr20 4668341 4668387 1 -chr20 4676721 4676890 1 -chr20 4678304 4678717 1 -chr20 4703193 4703420 1 -chr20 4705151 4705330 1 -chr20 4706659 4706849 1 -chr20 4711660 4711881 1 -chr20 4713388 4713462 1 -chr20 4715555 4715756 1 -chr20 4716320 4716494 1 -chr20 4716606 4716781 1 -chr20 4717545 4717600 1 -chr20 4717762 4717837 1 -chr20 4717952 4718187 1 -chr20 4718858 4718922 1 -chr20 4719335 4719487 1 -chr20 4720884 4721121 1 -chr20 4721480 4721674 1 -chr20 4721698 4722092 1 -chr20 4723086 4723325 1 -chr20 4723450 4723633 1 -chr20 4724551 4724629 1 -chr20 4726861 4726926 1 -chr20 4728564 4728794 1 -chr20 4729457 4729640 1 -chr20 4730105 4730276 1 -chr20 4731243 4731447 1 -chr20 4731669 4731873 1 -chr20 4732086 4732297 1 -chr20 4735709 4736062 1 -chr20 4737664 4737711 1 -chr20 4743875 4744103 1 -chr20 4745790 4745941 1 -chr20 4747556 4747610 1 -chr20 4751791 4751985 1 -chr20 4754091 4754276 1 -chr20 4755626 4755687 1 -chr20 4756014 4756288 1 -chr20 4760727 4760944 1 -chr20 4761326 4761536 1 -chr20 4775219 4775419 1 -chr20 4778665 4778808 1 -chr20 4782456 4782671 1 -chr20 4785713 4785763 1 -chr20 4787363 4787489 1 -chr20 4790086 4790302 1 -chr20 4790439 4790487 1 -chr20 4792750 4792906 1 -chr20 4795330 4795493 1 -chr20 4796517 4796726 1 -chr20 4799385 4799519 1 -chr20 4800808 4800878 1 -chr20 4803399 4803449 1 -chr20 4809382 4809412 1 -chr20 4811491 4811665 1 -chr20 4811857 4812079 1 -chr20 4813688 4813737 1 -chr20 4816889 4816931 1 -chr20 4818408 4818467 1 -chr20 4820131 4820184 1 -chr20 4822887 4822933 1 -chr20 4823314 4823356 1 -chr20 4824299 4824521 1 -chr20 4827204 4827381 1 -chr20 4828677 4828829 1 -chr20 4829658 4829781 1 -chr20 4829781 4829800 2 -chr20 4829800 4829985 1 -chr20 4836359 4836591 1 -chr20 4837057 4837516 1 -chr20 4842816 4843168 1 -chr20 4846850 4846911 1 -chr20 4846958 4847138 1 -chr20 4851244 4851415 1 -chr20 4882731 4882932 1 -chr20 4896746 4897315 1 -chr20 4943027 4943244 1 -chr20 4957764 4957809 1 -chr20 4971691 4971729 1 -chr20 4986848 4987046 1 -chr20 4988637 4988683 1 -chr20 5004167 5004412 1 -chr20 5009236 5009442 1 -chr20 5009587 5009732 1 -chr20 5015399 5015427 1 -chr20 5018596 5018633 1 -chr20 5018864 5019037 1 -chr20 5032138 5032177 1 -chr20 5034264 5034304 1 -chr20 5045599 5045635 1 -chr20 5046318 5046491 1 -chr20 5050488 5050530 1 -chr20 5056482 5056532 1 -chr20 5059919 5059970 1 -chr20 5066545 5066578 1 -chr20 5077252 5077281 1 -chr20 5081114 5081230 1 -chr20 5085503 5085550 1 -chr20 5110429 5110479 1 -chr20 5130106 5130188 1 -chr20 5130696 5130761 1 -chr20 5130898 5130963 1 -chr20 5139081 5139126 1 -chr20 5140006 5140048 1 -chr20 5168288 5168338 1 -chr20 5200176 5200243 1 -chr20 5201351 5201536 1 -chr20 5201536 5201540 2 -chr20 5201540 5201785 1 -chr20 5202780 5202807 1 -chr20 5210893 5210933 1 -chr20 5215646 5215685 1 -chr20 5219698 5220102 1 -chr20 5220253 5220491 1 -chr20 5221276 5221325 1 -chr20 5224806 5224943 1 -chr20 5226004 5226055 1 -chr20 5226716 5227073 1 -chr20 5227507 5227562 1 -chr20 5227850 5227907 1 -chr20 5228248 5228464 1 -chr20 5237780 5237830 1 -chr20 5247102 5247330 1 -chr20 5249008 5249195 1 -chr20 5251531 5251733 1 -chr20 5259268 5259320 1 -chr20 5265498 5265689 1 -chr20 5269014 5269201 1 -chr20 5275215 5275433 1 -chr20 5281036 5281240 1 -chr20 5284317 5284507 1 -chr20 5288914 5289148 1 -chr20 5290908 5291122 1 -chr20 5292998 5293083 1 -chr20 5293684 5293862 1 -chr20 5294855 5295257 1 -chr20 5302485 5302896 1 -chr20 5303275 5303496 1 -chr20 5306117 5306313 1 -chr20 5312471 5312748 1 -chr20 5314312 5314470 1 -chr20 5316521 5316697 1 -chr20 5318261 5318311 1 -chr20 5323849 5324014 1 -chr20 5325330 5325873 1 -chr20 5326448 5326497 1 -chr20 5326763 5326994 1 -chr20 5329721 5329948 1 -chr20 5335236 5335318 1 -chr20 5348972 5349314 1 -chr20 5351202 5351394 1 -chr20 5351564 5351795 1 -chr20 5351825 5352149 1 -chr20 5354502 5354864 1 -chr20 5374119 5374300 1 -chr20 5374510 5374759 1 -chr20 5405785 5406200 1 -chr20 5410103 5410148 1 -chr20 5410149 5410181 1 -chr20 5418154 5418213 1 -chr20 5420319 5420713 1 -chr20 5433090 5433327 1 -chr20 5440079 5440512 1 -chr20 5443688 5444233 1 -chr20 5451216 5451278 1 -chr20 5459453 5459636 1 -chr20 5460439 5460501 1 -chr20 5462520 5462562 1 -chr20 5465950 5466149 1 -chr20 5470869 5471411 1 -chr20 5472012 5472177 1 -chr20 5473528 5473717 1 -chr20 5473763 5473998 1 -chr20 5475655 5475867 1 -chr20 5482293 5482357 1 -chr20 5484624 5484687 1 -chr20 5484947 5485042 1 -chr20 5486483 5486658 1 -chr20 5488269 5488506 1 -chr20 5488663 5489061 1 -chr20 5489312 5489496 1 -chr20 5496685 5496897 1 -chr20 5496897 5496906 2 -chr20 5496906 5497054 1 -chr20 5497299 5497539 1 -chr20 5497607 5497970 1 -chr20 5498705 5498884 1 -chr20 5499885 5499935 1 -chr20 5500255 5500435 1 -chr20 5502152 5502326 1 -chr20 5503751 5503805 1 -chr20 5512065 5512478 1 -chr20 5512919 5513134 1 -chr20 5514749 5514812 1 -chr20 5515403 5515658 1 -chr20 5515726 5515914 1 -chr20 5521233 5521619 1 -chr20 5521619 5521623 2 -chr20 5521623 5521821 1 -chr20 5522814 5522877 1 -chr20 5522971 5523163 1 -chr20 5525786 5525842 1 -chr20 5526294 5526339 1 -chr20 5528824 5529029 1 -chr20 5554621 5554812 1 -chr20 5580912 5581062 1 -chr20 5594424 5594494 1 -chr20 5625835 5625872 1 -chr20 5636313 5636347 1 -chr20 5637877 5638225 1 -chr20 5658321 5658397 1 -chr20 5664069 5664100 1 -chr20 5666784 5666835 1 -chr20 5670601 5670636 1 -chr20 5684517 5684546 1 -chr20 5686470 5686487 1 -chr20 5686487 5686510 2 -chr20 5686510 5686515 1 -chr20 5689226 5689266 1 -chr20 5696722 5696772 1 -chr20 5710322 5710362 1 -chr20 5725315 5725353 1 -chr20 5732282 5732501 1 -chr20 5742677 5742721 1 -chr20 5754333 5754374 1 -chr20 5754787 5754873 1 -chr20 5754942 5754998 1 -chr20 5756745 5756812 1 -chr20 5757755 5757811 1 -chr20 5765111 5765138 1 -chr20 5771429 5771590 1 -chr20 5784656 5784730 1 -chr20 5795513 5795553 1 -chr20 5800456 5800511 1 -chr20 5805210 5805300 1 -chr20 5817451 5817478 1 -chr20 5838497 5838549 1 -chr20 5849776 5849831 1 -chr20 5868617 5868838 1 -chr20 5870593 5870772 1 -chr20 5871725 5871957 1 -chr20 5877088 5877339 1 -chr20 5877895 5877925 1 -chr20 5879257 5879455 1 -chr20 5884667 5884848 1 -chr20 5886643 5886893 1 -chr20 5887019 5887095 1 -chr20 5887557 5887630 1 -chr20 5887949 5888004 1 -chr20 5890588 5890654 1 -chr20 5890764 5890962 1 -chr20 5896888 5897087 1 -chr20 5904581 5904771 1 -chr20 5909162 5909361 1 -chr20 5910605 5910816 1 -chr20 5911421 5911676 1 -chr20 5914873 5915051 1 -chr20 5915491 5915679 1 -chr20 5916434 5916528 1 -chr20 5919637 5919997 1 -chr20 5921479 5921655 1 -chr20 5921713 5921950 1 -chr20 5925944 5926008 1 -chr20 5926197 5926248 1 -chr20 5928783 5929218 1 -chr20 5931142 5931548 1 -chr20 5932852 5933269 1 -chr20 5939600 5939841 1 -chr20 5947922 5947961 1 -chr20 5949106 5949160 1 -chr20 5959846 5959888 1 -chr20 5959888 5959912 2 -chr20 5959912 5959947 1 -chr20 5994842 5994896 1 -chr20 6006631 6007144 1 -chr20 6053647 6053825 1 -chr20 6056083 6056159 1 -chr20 6058656 6058812 1 -chr20 6062965 6062993 1 -chr20 6063465 6063726 1 -chr20 6064514 6064691 1 -chr20 6079621 6079871 1 -chr20 6079939 6080091 1 -chr20 6081479 6081540 1 -chr20 6082916 6083114 1 -chr20 6084361 6084545 1 -chr20 6086608 6086644 1 -chr20 6086918 6087103 1 -chr20 6089322 6089501 1 -chr20 6091721 6091964 1 -chr20 6093177 6093403 1 -chr20 6094442 6094624 1 -chr20 6094854 6095065 1 -chr20 6095904 6096062 1 -chr20 6096971 6097154 1 -chr20 6101925 6102082 1 -chr20 6106431 6106701 1 -chr20 6108088 6108129 1 -chr20 6110465 6110678 1 -chr20 6120571 6120751 1 -chr20 6124261 6124289 1 -chr20 6139551 6139591 1 -chr20 6152148 6152330 1 -chr20 6186797 6186826 1 -chr20 6199689 6199877 1 -chr20 6212577 6212754 1 -chr20 6222455 6222630 1 -chr20 6223049 6223675 1 -chr20 6223915 6224074 1 -chr20 6224276 6224365 1 -chr20 6224981 6225009 1 -chr20 6235855 6235901 1 -chr20 6272286 6272356 1 -chr20 6278463 6278492 1 -chr20 6316716 6316911 1 -chr20 6317221 6317398 1 -chr20 6317873 6318085 1 -chr20 6325354 6325513 1 -chr20 6330658 6330717 1 -chr20 6343454 6343657 1 -chr20 6394309 6394830 1 -chr20 6454816 6454857 1 -chr20 6459469 6459659 1 -chr20 6481278 6481743 1 -chr20 6530092 6530318 1 -chr20 6569897 6569970 1 -chr20 6599007 6599054 1 -chr20 6606295 6606324 1 -chr20 6638152 6638194 1 -chr20 6638349 6638824 1 -chr20 6653616 6653657 1 -chr20 6689276 6689317 1 -chr20 6694615 6694822 1 -chr20 6720864 6720918 1 -chr20 6750357 6750397 1 -chr20 6751834 6751870 1 -chr20 6767311 6767554 1 -chr20 6768139 6768925 1 -chr20 6816740 6816929 1 -chr20 6834105 6834149 1 -chr20 6936731 6936770 1 -chr20 6970654 6970853 1 -chr20 7022139 7022183 1 -chr20 7066827 7066889 1 -chr20 7067275 7067319 1 -chr20 7089816 7089872 1 -chr20 7102101 7102261 1 -chr20 7117560 7117746 1 -chr20 7118500 7118678 1 -chr20 7119718 7119764 1 -chr20 7120071 7120114 1 -chr20 7121208 7121249 1 -chr20 7185251 7185292 1 -chr20 7194948 7195364 1 -chr20 7261870 7261998 1 -chr20 7268681 7268718 1 -chr20 7277069 7277249 1 -chr20 7277329 7277377 1 -chr20 7277947 7277989 1 -chr20 7296481 7296702 1 -chr20 7299431 7299594 1 -chr20 7320164 7320375 1 -chr20 7385403 7385594 1 -chr20 7474939 7475112 1 -chr20 7507277 7507330 1 -chr20 7507375 7507413 1 -chr20 7532543 7533042 1 -chr20 7541016 7541056 1 -chr20 7594859 7594919 1 -chr20 7598245 7598278 1 -chr20 7604637 7604875 1 -chr20 7606127 7606177 1 -chr20 7621292 7621353 1 -chr20 7635059 7635110 1 -chr20 7663280 7663322 1 -chr20 7670218 7670261 1 -chr20 7721172 7721217 1 -chr20 7732814 7732865 1 -chr20 7790730 7790758 1 -chr20 7805919 7806101 1 -chr20 7846429 7846485 1 -chr20 7858845 7859001 1 -chr20 7901051 7901105 1 -chr20 7902341 7902379 1 -chr20 7914857 7914911 1 -chr20 7942519 7942736 1 -chr20 7952234 7952485 1 -chr20 7953354 7953398 1 -chr20 7953434 7953666 1 -chr20 8025486 8025637 1 -chr20 8035790 8036381 1 -chr20 8036421 8036646 1 -chr20 8036843 8037265 1 -chr20 8037994 8038039 1 -chr20 8038334 8038760 1 -chr20 8039632 8039718 1 -chr20 8040322 8040707 1 -chr20 8048279 8048516 1 -chr20 8052068 8052246 1 -chr20 8053132 8053343 1 -chr20 8060097 8060341 1 -chr20 8072422 8072462 1 -chr20 8110937 8111021 1 -chr20 8111505 8111727 1 -chr20 8113071 8113114 1 -chr20 8129016 8129108 1 -chr20 8130164 8130228 1 -chr20 8134882 8135058 1 -chr20 8137619 8138001 1 -chr20 8139533 8139771 1 -chr20 8140006 8140220 1 -chr20 8141058 8141086 1 -chr20 8142243 8142439 1 -chr20 8158699 8158763 1 -chr20 8160176 8160258 1 -chr20 8179897 8179925 1 -chr20 8197993 8198189 1 -chr20 8216757 8217052 1 -chr20 8230368 8230587 1 -chr20 8268064 8268161 1 -chr20 8356690 8356865 1 -chr20 8380906 8381089 1 -chr20 8383911 8384105 1 -chr20 8384792 8384977 1 -chr20 8422238 8422743 1 -chr20 8445186 8445389 1 -chr20 8445610 8445807 1 -chr20 8446011 8446086 1 -chr20 8492471 8492860 1 -chr20 8506996 8507187 1 -chr20 8533638 8533871 1 -chr20 8596660 8596729 1 -chr20 8599861 8599903 1 -chr20 8601328 8601383 1 -chr20 8638110 8638171 1 -chr20 8643047 8643208 1 -chr20 8645069 8645132 1 -chr20 8688888 8689177 1 -chr20 8738912 8738957 1 -chr20 8757129 8757309 1 -chr20 8762328 8762551 1 -chr20 8774552 8774817 1 -chr20 8784550 8784652 1 -chr20 8790609 8790657 1 -chr20 8795377 8795798 1 -chr20 8796943 8797158 1 -chr20 8803596 8803846 1 -chr20 8805518 8805746 1 -chr20 8806843 8807061 1 -chr20 8811286 8811494 1 -chr20 8813560 8813618 1 -chr20 8815519 8816079 1 -chr20 8816688 8816729 1 -chr20 8821605 8821804 1 -chr20 8823975 8824321 1 -chr20 8825321 8825519 1 -chr20 8827914 8828311 1 -chr20 8830211 8830585 1 -chr20 8839489 8839705 1 -chr20 8841426 8841844 1 -chr20 8857027 8857180 1 -chr20 8903938 8904146 1 -chr20 8919617 8919781 1 -chr20 8922211 8922434 1 -chr20 8944881 8945471 1 -chr20 8946338 8946508 1 -chr20 8947180 8947451 1 -chr20 8947577 8947796 1 -chr20 8948587 8948819 1 -chr20 8958574 8958636 1 -chr20 8964718 8964750 1 -chr20 8977742 8977951 1 -chr20 9014432 9014771 1 -chr20 9038056 9038128 1 -chr20 9047623 9047826 1 -chr20 9061961 9062018 1 -chr20 9115579 9115629 1 -chr20 9140016 9140160 1 -chr20 9196687 9196926 1 -chr20 9238382 9238781 1 -chr20 9241873 9242452 1 -chr20 9250263 9250609 1 -chr20 9252817 9253370 1 -chr20 9263541 9263969 1 -chr20 9277010 9277234 1 -chr20 9277385 9277725 1 -chr20 9279513 9279743 1 -chr20 9291716 9291924 1 -chr20 9311022 9311366 1 -chr20 9329715 9329770 1 -chr20 9329887 9330083 1 -chr20 9338980 9339160 1 -chr20 9346219 9346451 1 -chr20 9355524 9355755 1 -chr20 9382313 9382577 1 -chr20 9383362 9383612 1 -chr20 9412970 9413161 1 -chr20 9415621 9415820 1 -chr20 9426442 9426521 1 -chr20 9462647 9462711 1 -chr20 9465164 9465216 1 -chr20 9476044 9476474 1 -chr20 9485204 9485252 1 -chr20 9485889 9486104 1 -chr20 9493082 9493470 1 -chr20 9505453 9505515 1 -chr20 9507548 9507611 1 -chr20 9509016 9509070 1 -chr20 9509875 9509910 1 -chr20 9510812 9510993 1 -chr20 9511568 9511929 1 -chr20 9514733 9514884 1 -chr20 9514965 9515142 1 -chr20 9525851 9526071 1 -chr20 9534153 9534207 1 -chr20 9552946 9552991 1 -chr20 9554765 9554964 1 -chr20 9571504 9571910 1 -chr20 9574319 9574485 1 -chr20 9576216 9576261 1 -chr20 9580581 9580788 1 -chr20 9597339 9597583 1 -chr20 9617817 9617845 1 -chr20 9640715 9640750 1 -chr20 9654125 9654179 1 -chr20 9670320 9670358 1 -chr20 9678307 9678337 1 -chr20 9706585 9706622 1 -chr20 9747106 9747346 1 -chr20 9747433 9747668 1 -chr20 9793558 9793722 1 -chr20 9797203 9797339 1 -chr20 9800574 9801079 1 -chr20 9858472 9858656 1 -chr20 9860313 9860366 1 -chr20 9882661 9882821 1 -chr20 9894193 9894248 1 -chr20 9894372 9894579 1 -chr20 9910094 9910247 1 -chr20 9934652 9934879 1 -chr20 9936347 9936450 1 -chr20 9937807 9938039 1 -chr20 9940650 9940972 1 -chr20 9960603 9960702 1 -chr20 9989985 9990053 1 -chr20 9991449 9991680 1 -chr20 10028148 10028196 1 -chr20 10036704 10036752 1 -chr20 10065095 10065316 1 -chr20 10092748 10092880 1 -chr20 10109674 10109852 1 -chr20 10129158 10129398 1 -chr20 10159910 10159956 1 -chr20 10160656 10160712 1 -chr20 10172852 10173053 1 -chr20 10182369 10182421 1 -chr20 10217456 10217847 1 -chr20 10244958 10245002 1 -chr20 10247841 10248034 1 -chr20 10255152 10255396 1 -chr20 10263449 10263501 1 -chr20 10263643 10263833 1 -chr20 10269951 10269993 1 -chr20 10281225 10281611 1 -chr20 10293140 10293266 1 -chr20 10320071 10320291 1 -chr20 10323657 10323997 1 -chr20 10324055 10324271 1 -chr20 10327345 10327550 1 -chr20 10334500 10334710 1 -chr20 10364319 10364671 1 -chr20 10369957 10369999 1 -chr20 10374505 10374682 1 -chr20 10375978 10376322 1 -chr20 10376433 10376611 1 -chr20 10378533 10378573 1 -chr20 10379513 10379651 1 -chr20 10379916 10380194 1 -chr20 10381296 10381337 1 -chr20 10386202 10386419 1 -chr20 10386834 10387010 1 -chr20 10387010 10387019 2 -chr20 10387019 10387187 1 -chr20 10391253 10391285 1 -chr20 10391635 10391677 1 -chr20 10395813 10396210 1 -chr20 10417122 10417174 1 -chr20 10422861 10422911 1 -chr20 10440334 10440408 1 -chr20 10520285 10520321 1 -chr20 10535464 10535514 1 -chr20 10578351 10578571 1 -chr20 10596451 10596479 1 -chr20 10632415 10632788 1 -chr20 10632918 10633074 1 -chr20 10633172 10633410 1 -chr20 10634378 10634588 1 -chr20 10635675 10635937 1 -chr20 10636879 10637148 1 -chr20 10637744 10637953 1 -chr20 10643052 10643454 1 -chr20 10643625 10643846 1 -chr20 10648906 10649070 1 -chr20 10649982 10650316 1 -chr20 10652977 10653036 1 -chr20 10654649 10654844 1 -chr20 10656571 10656964 1 -chr20 10657830 10657875 1 -chr20 10659034 10659209 1 -chr20 10663695 10663928 1 -chr20 10664441 10664611 1 -chr20 10665340 10665411 1 -chr20 10665411 10665432 2 -chr20 10665432 10665649 1 -chr20 10665771 10665839 1 -chr20 10667281 10667335 1 -chr20 10667911 10668075 1 -chr20 10668643 10668840 1 -chr20 10669299 10669493 1 -chr20 10672211 10672304 1 -chr20 10674643 10674796 1 -chr20 10676361 10676545 1 -chr20 10678563 10678786 1 -chr20 10678851 10679182 1 -chr20 10689517 10689712 1 -chr20 10706497 10706700 1 -chr20 10721284 10721497 1 -chr20 10724835 10725030 1 -chr20 10731131 10731401 1 -chr20 10735777 10735983 1 -chr20 10754392 10754592 1 -chr20 10758237 10758615 1 -chr20 10759615 10759656 1 -chr20 10761981 10762380 1 -chr20 10764984 10765034 1 -chr20 10777619 10777783 1 -chr20 10783892 10783947 1 -chr20 10812543 10812617 1 -chr20 10916777 10916845 1 -chr20 10933021 10933085 1 -chr20 10954804 10955112 1 -chr20 10955255 10955488 1 -chr20 10968898 10969070 1 -chr20 11037742 11037786 1 -chr20 11088339 11088524 1 -chr20 11132873 11132907 1 -chr20 11146804 11146859 1 -chr20 11148414 11148564 1 -chr20 11150310 11150386 1 -chr20 11187047 11187086 1 -chr20 11327271 11327342 1 -chr20 11358682 11358721 1 -chr20 11360725 11360907 1 -chr20 11361149 11361181 1 -chr20 11361563 11361729 1 -chr20 11363747 11364164 1 -chr20 11380700 11380908 1 -chr20 11382354 11382542 1 -chr20 11436461 11436685 1 -chr20 11485456 11485502 1 -chr20 11572487 11572636 1 -chr20 11596434 11596628 1 -chr20 11608454 11608632 1 -chr20 11612314 11612381 1 -chr20 11621162 11621341 1 -chr20 11633765 11633816 1 -chr20 11636297 11636453 1 -chr20 11638151 11638291 1 -chr20 11685777 11685813 1 -chr20 11717635 11717687 1 -chr20 11732074 11732136 1 -chr20 11764502 11764542 1 -chr20 11805982 11806021 1 -chr20 11831709 11831765 1 -chr20 11833947 11833976 1 -chr20 11854738 11854794 1 -chr20 11878859 11879095 1 -chr20 11907353 11907529 1 -chr20 11936180 11936366 1 -chr20 12004876 12005073 1 -chr20 12124607 12124787 1 -chr20 12128450 12128491 1 -chr20 12131570 12131935 1 -chr20 12134786 12135175 1 -chr20 12137683 12137731 1 -chr20 12169976 12170450 1 -chr20 12191940 12192107 1 -chr20 12273375 12273601 1 -chr20 12281516 12281570 1 -chr20 12304222 12304326 1 -chr20 12345826 12345873 1 -chr20 12360070 12360279 1 -chr20 12361064 12361134 1 -chr20 12361684 12362070 1 -chr20 12362266 12362415 1 -chr20 12380081 12380157 1 -chr20 12380516 12380727 1 -chr20 12423142 12423192 1 -chr20 12425400 12425462 1 -chr20 12426749 12426943 1 -chr20 12427104 12427158 1 -chr20 12444745 12444814 1 -chr20 12445808 12445868 1 -chr20 12480679 12480755 1 -chr20 12480755 12480764 2 -chr20 12480764 12480807 1 -chr20 12493885 12494110 1 -chr20 12495356 12495403 1 -chr20 12520041 12520068 1 -chr20 12537273 12537505 1 -chr20 12546280 12546438 1 -chr20 12582933 12582995 1 -chr20 12586840 12587073 1 -chr20 12587733 12587921 1 -chr20 12634021 12634233 1 -chr20 12634605 12634814 1 -chr20 12667744 12667794 1 -chr20 12667879 12668109 1 -chr20 12768268 12768330 1 -chr20 12769091 12769267 1 -chr20 12772800 12772956 1 -chr20 12802609 12802650 1 -chr20 12803295 12803524 1 -chr20 12803597 12803648 1 -chr20 12803856 12804031 1 -chr20 12814380 12814558 1 -chr20 12818285 12818468 1 -chr20 12830078 12830115 1 -chr20 12856735 12856936 1 -chr20 12922749 12922968 1 -chr20 12948650 12948704 1 -chr20 12952283 12952302 1 -chr20 12952302 12952325 2 -chr20 12952325 12952481 1 -chr20 12953149 12953198 1 -chr20 12953213 12953253 1 -chr20 12974042 12974099 1 -chr20 13008678 13009063 1 -chr20 13049895 13049962 1 -chr20 13050286 13050689 1 -chr20 13051630 13051795 1 -chr20 13144530 13144712 1 -chr20 13144999 13145040 1 -chr20 13155566 13155597 1 -chr20 13163996 13164042 1 -chr20 13172932 13172974 1 -chr20 13192275 13192339 1 -chr20 13220546 13220923 1 -chr20 13221908 13222095 1 -chr20 13222981 13223045 1 -chr20 13223090 13223116 1 -chr20 13223543 13223771 1 -chr20 13228167 13228201 1 -chr20 13234659 13234845 1 -chr20 13236347 13236529 1 -chr20 13248132 13248399 1 -chr20 13259105 13259155 1 -chr20 13262278 13262518 1 -chr20 13263470 13263720 1 -chr20 13267332 13267523 1 -chr20 13272518 13272715 1 -chr20 13274489 13274701 1 -chr20 13276923 13277126 1 -chr20 13277300 13277385 1 -chr20 13280778 13281200 1 -chr20 13282545 13282689 1 -chr20 13286486 13286868 1 -chr20 13288257 13288322 1 -chr20 13290788 13291018 1 -chr20 13293719 13293762 1 -chr20 13294288 13294674 1 -chr20 13295335 13295524 1 -chr20 13295807 13295998 1 -chr20 13297351 13297569 1 -chr20 13297618 13297833 1 -chr20 13298852 13299052 1 -chr20 13299264 13299335 1 -chr20 13300552 13300794 1 -chr20 13309183 13309358 1 -chr20 13321026 13321070 1 -chr20 13327819 13328058 1 -chr20 13342588 13343136 1 -chr20 13344793 13345001 1 -chr20 13346264 13346483 1 -chr20 13355883 13356095 1 -chr20 13362907 13362953 1 -chr20 13374455 13374486 1 -chr20 13377507 13377578 1 -chr20 13391713 13391756 1 -chr20 13391756 13391761 2 -chr20 13391761 13391791 1 -chr20 13406801 13406866 1 -chr20 13439586 13439631 1 -chr20 13451823 13451960 1 -chr20 13482253 13482477 1 -chr20 13520394 13520813 1 -chr20 13566736 13566911 1 -chr20 13569191 13569216 1 -chr20 13583940 13584002 1 -chr20 13598688 13599091 1 -chr20 13599511 13599561 1 -chr20 13616688 13616923 1 -chr20 13632110 13632150 1 -chr20 13634767 13634809 1 -chr20 13640942 13640980 1 -chr20 13642795 13642997 1 -chr20 13648603 13648829 1 -chr20 13648888 13649101 1 -chr20 13651662 13651703 1 -chr20 13652594 13652769 1 -chr20 13652874 13652939 1 -chr20 13654426 13654782 1 -chr20 13656433 13656681 1 -chr20 13656897 13656971 1 -chr20 13657149 13657354 1 -chr20 13661544 13661761 1 -chr20 13674688 13674856 1 -chr20 13676014 13676056 1 -chr20 13676607 13676797 1 -chr20 13680508 13680737 1 -chr20 13683964 13684216 1 -chr20 13694949 13695321 1 -chr20 13695423 13695474 1 -chr20 13695790 13696006 1 -chr20 13696060 13696131 1 -chr20 13696345 13697158 1 -chr20 13701741 13701795 1 -chr20 13706482 13706658 1 -chr20 13706860 13707071 1 -chr20 13716793 13716851 1 -chr20 13750448 13750489 1 -chr20 13757515 13757559 1 -chr20 13763057 13763086 1 -chr20 13799517 13799566 1 -chr20 13823830 13824137 1 -chr20 13825454 13825508 1 -chr20 13827177 13827383 1 -chr20 13836058 13836435 1 -chr20 13838882 13839139 1 -chr20 13840225 13840419 1 -chr20 13842576 13842758 1 -chr20 13844894 13845300 1 -chr20 13845649 13845689 1 -chr20 13848997 13849384 1 -chr20 13852235 13852414 1 -chr20 13858801 13859023 1 -chr20 13859139 13859561 1 -chr20 13865516 13865731 1 -chr20 13867233 13867475 1 -chr20 13868109 13868312 1 -chr20 13875294 13875336 1 -chr20 13875780 13875825 1 -chr20 13876902 13876944 1 -chr20 13878020 13878219 1 -chr20 13885215 13885417 1 -chr20 13887814 13888205 1 -chr20 13901172 13901213 1 -chr20 13939745 13939810 1 -chr20 13941268 13941700 1 -chr20 13951829 13951910 1 -chr20 13959591 13959636 1 -chr20 13976807 13977221 1 -chr20 13981018 13981065 1 -chr20 13998772 13998825 1 -chr20 14023581 14023805 1 -chr20 14050499 14050968 1 -chr20 14062280 14062462 1 -chr20 14073210 14073295 1 -chr20 14102732 14102879 1 -chr20 14108617 14108843 1 -chr20 14171763 14171828 1 -chr20 14174460 14174505 1 -chr20 14183394 14183579 1 -chr20 14215630 14215831 1 -chr20 14218399 14218453 1 -chr20 14218497 14218542 1 -chr20 14220263 14220338 1 -chr20 14237629 14237684 1 -chr20 14255192 14255248 1 -chr20 14275061 14275241 1 -chr20 14301062 14301217 1 -chr20 14349436 14349747 1 -chr20 14368324 14368354 1 -chr20 14462839 14462887 1 -chr20 14462887 14462896 2 -chr20 14462896 14463083 1 -chr20 14468290 14468426 1 -chr20 14515473 14515613 1 -chr20 14516372 14516426 1 -chr20 14517612 14517646 1 -chr20 14538152 14538673 1 -chr20 14550346 14550500 1 -chr20 14638689 14638743 1 -chr20 14638823 14638897 1 -chr20 14661055 14661345 1 -chr20 14663141 14663225 1 -chr20 14690992 14691032 1 -chr20 14767060 14767104 1 -chr20 14767982 14768213 1 -chr20 14811511 14811638 1 -chr20 14877078 14877506 1 -chr20 14890953 14891003 1 -chr20 14896035 14896081 1 -chr20 14930651 14930681 1 -chr20 14946031 14946096 1 -chr20 14981764 14981828 1 -chr20 14998769 14998976 1 -chr20 15017441 15017533 1 -chr20 15040132 15040182 1 -chr20 15065401 15065426 1 -chr20 15097036 15097089 1 -chr20 15135815 15136006 1 -chr20 15136381 15136659 1 -chr20 15137492 15137537 1 -chr20 15137630 15137686 1 -chr20 15216152 15216329 1 -chr20 15218955 15219017 1 -chr20 15262899 15262943 1 -chr20 15282061 15282242 1 -chr20 15353209 15353439 1 -chr20 15353615 15353798 1 -chr20 15368525 15368551 1 -chr20 15470179 15470249 1 -chr20 15518737 15518782 1 -chr20 15537663 15537705 1 -chr20 15548618 15548671 1 -chr20 15566424 15566466 1 -chr20 15587311 15587370 1 -chr20 15619123 15619313 1 -chr20 15647832 15647873 1 -chr20 15667115 15667331 1 -chr20 15694689 15694874 1 -chr20 15695610 15695654 1 -chr20 15697668 15697881 1 -chr20 15727148 15727334 1 -chr20 15729406 15729433 1 -chr20 15806929 15807138 1 -chr20 15809951 15810093 1 -chr20 15810303 15810347 1 -chr20 15898470 15898498 1 -chr20 15904233 15904295 1 -chr20 15939497 15939883 1 -chr20 15980293 15980365 1 -chr20 16034722 16034769 1 -chr20 16054109 16054174 1 -chr20 16141066 16141195 1 -chr20 16156467 16156519 1 -chr20 16158400 16158612 1 -chr20 16210781 16210982 1 -chr20 16215939 16216137 1 -chr20 16221048 16221243 1 -chr20 16226736 16226790 1 -chr20 16232849 16233034 1 -chr20 16236229 16236417 1 -chr20 16242016 16242243 1 -chr20 16243610 16243795 1 -chr20 16244856 16245090 1 -chr20 16246072 16246268 1 -chr20 16247435 16247624 1 -chr20 16252391 16252619 1 -chr20 16254977 16255021 1 -chr20 16358085 16358142 1 -chr20 16416532 16416649 1 -chr20 16425902 16425970 1 -chr20 16476958 16477010 1 -chr20 16479241 16479441 1 -chr20 16514704 16514758 1 -chr20 16521257 16521493 1 -chr20 16524457 16524499 1 -chr20 16549496 16549548 1 -chr20 16564296 16564368 1 -chr20 16577964 16578036 1 -chr20 16584072 16584230 1 -chr20 16584628 16584810 1 -chr20 16586501 16586700 1 -chr20 16588337 16588536 1 -chr20 16589795 16590227 1 -chr20 16594449 16594653 1 -chr20 16600294 16600502 1 -chr20 16600625 16600835 1 -chr20 16602837 16603092 1 -chr20 16608416 16608656 1 -chr20 16608729 16609066 1 -chr20 16609617 16609849 1 -chr20 16610713 16610901 1 -chr20 16612213 16612425 1 -chr20 16612764 16613141 1 -chr20 16613451 16613622 1 -chr20 16613854 16613902 1 -chr20 16615011 16615380 1 -chr20 16619717 16619929 1 -chr20 16620531 16620948 1 -chr20 16625544 16625738 1 -chr20 16631166 16631409 1 -chr20 16636445 16636625 1 -chr20 16638137 16638553 1 -chr20 16639726 16639970 1 -chr20 16642262 16642623 1 -chr20 16643081 16643271 1 -chr20 16648728 16649107 1 -chr20 16658399 16658619 1 -chr20 16669380 16669587 1 -chr20 16671920 16672192 1 -chr20 16675512 16675749 1 -chr20 16677176 16677375 1 -chr20 16680363 16680737 1 -chr20 16683969 16684168 1 -chr20 16685692 16685909 1 -chr20 16690995 16691380 1 -chr20 16691549 16691613 1 -chr20 16709264 16709490 1 -chr20 16710782 16710957 1 -chr20 16711316 16711528 1 -chr20 16713451 16713638 1 -chr20 16714126 16714302 1 -chr20 16718741 16718905 1 -chr20 16720496 16720697 1 -chr20 16722529 16722702 1 -chr20 16729883 16729955 1 -chr20 16745397 16745615 1 -chr20 16745814 16746239 1 -chr20 16764748 16764965 1 -chr20 16780080 16780140 1 -chr20 16782442 16782626 1 -chr20 16789542 16789765 1 -chr20 16825629 16825823 1 -chr20 16827169 16827386 1 -chr20 16854575 16854736 1 -chr20 16872888 16873023 1 -chr20 16893409 16893592 1 -chr20 16894706 16894863 1 -chr20 16907854 16907961 1 -chr20 16912249 16912308 1 -chr20 16933196 16933387 1 -chr20 16934046 16934286 1 -chr20 16960623 16960679 1 -chr20 17052528 17052779 1 -chr20 17074487 17074684 1 -chr20 17082952 17083026 1 -chr20 17111173 17111222 1 -chr20 17116885 17117253 1 -chr20 17117253 17117261 2 -chr20 17117261 17117314 1 -chr20 17117900 17117946 1 -chr20 17120789 17120842 1 -chr20 17122931 17122975 1 -chr20 17139829 17140047 1 -chr20 17183110 17183162 1 -chr20 17186648 17186724 1 -chr20 17207145 17207335 1 -chr20 17225710 17225975 1 -chr20 17226193 17226380 1 -chr20 17227744 17227916 1 -chr20 17310203 17310557 1 -chr20 17314464 17314671 1 -chr20 17315059 17315270 1 -chr20 17315729 17315784 1 -chr20 17316014 17316077 1 -chr20 17317239 17317447 1 -chr20 17327372 17327638 1 -chr20 17333565 17333794 1 -chr20 17341222 17341576 1 -chr20 17343503 17343699 1 -chr20 17365894 17366072 1 -chr20 17372987 17373254 1 -chr20 17386014 17386188 1 -chr20 17389383 17389554 1 -chr20 17405652 17405890 1 -chr20 17409005 17409227 1 -chr20 17410466 17410639 1 -chr20 17416135 17416312 1 -chr20 17427518 17427779 1 -chr20 17433464 17433813 1 -chr20 17437477 17437536 1 -chr20 17439391 17439976 1 -chr20 17444525 17444922 1 -chr20 17449232 17449439 1 -chr20 17452642 17452851 1 -chr20 17453878 17453919 1 -chr20 17454102 17454321 1 -chr20 17454950 17455037 1 -chr20 17465397 17465622 1 -chr20 17467076 17467129 1 -chr20 17468540 17468762 1 -chr20 17469453 17469670 1 -chr20 17471416 17471460 1 -chr20 17473563 17473758 1 -chr20 17474483 17474681 1 -chr20 17474681 17474691 2 -chr20 17474691 17474868 1 -chr20 17474923 17474965 1 -chr20 17479212 17479425 1 -chr20 17482604 17482851 1 -chr20 17483082 17483308 1 -chr20 17486153 17486362 1 -chr20 17487130 17487329 1 -chr20 17488602 17488745 1 -chr20 17488837 17489027 1 -chr20 17491180 17491223 1 -chr20 17492376 17492594 1 -chr20 17495183 17495373 1 -chr20 17499903 17500080 1 -chr20 17501902 17501949 1 -chr20 17505935 17506325 1 -chr20 17507377 17507575 1 -chr20 17508349 17508590 1 -chr20 17508967 17509178 1 -chr20 17510313 17510732 1 -chr20 17511941 17512331 1 -chr20 17512684 17512844 1 -chr20 17517703 17517920 1 -chr20 17518373 17518580 1 -chr20 17521759 17521983 1 -chr20 17521983 17521997 2 -chr20 17521997 17522153 1 -chr20 17523382 17523588 1 -chr20 17525401 17525805 1 -chr20 17527678 17527721 1 -chr20 17528306 17528523 1 -chr20 17529634 17530031 1 -chr20 17530820 17531629 1 -chr20 17531629 17531643 2 -chr20 17531643 17532073 1 -chr20 17532213 17532272 1 -chr20 17538853 17539062 1 -chr20 17540831 17541007 1 -chr20 17543616 17543957 1 -chr20 17545420 17545464 1 -chr20 17550544 17550608 1 -chr20 17551141 17551210 1 -chr20 17564955 17564984 1 -chr20 17590838 17590882 1 -chr20 17686311 17686478 1 -chr20 17687924 17688155 1 -chr20 17692822 17692867 1 -chr20 17693174 17693548 1 -chr20 17694867 17694893 1 -chr20 17694922 17695108 1 -chr20 17697360 17697561 1 -chr20 17698711 17699128 1 -chr20 17700144 17700324 1 -chr20 17701830 17702003 1 -chr20 17703385 17703590 1 -chr20 17703797 17703867 1 -chr20 17705718 17706301 1 -chr20 17706355 17706432 1 -chr20 17708598 17708837 1 -chr20 17709854 17710092 1 -chr20 17710278 17710466 1 -chr20 17715432 17715484 1 -chr20 17717786 17717975 1 -chr20 17718705 17718740 1 -chr20 17719403 17719579 1 -chr20 17719723 17719874 1 -chr20 17721198 17721426 1 -chr20 17721984 17722164 1 -chr20 17724145 17724344 1 -chr20 17732916 17733120 1 -chr20 17734182 17734377 1 -chr20 17734860 17734894 1 -chr20 17744992 17745188 1 -chr20 17745598 17745954 1 -chr20 17747604 17747845 1 -chr20 17749739 17749854 1 -chr20 17751826 17751869 1 -chr20 17752995 17753050 1 -chr20 17754551 17754602 1 -chr20 17755436 17755649 1 -chr20 17756889 17756946 1 -chr20 17758073 17758327 1 -chr20 17758465 17758852 1 -chr20 17765752 17765958 1 -chr20 17766615 17766804 1 -chr20 17768128 17768539 1 -chr20 17781023 17781065 1 -chr20 17782236 17782282 1 -chr20 17784103 17784168 1 -chr20 17784693 17784755 1 -chr20 17787266 17787316 1 -chr20 17787571 17787761 1 -chr20 17787761 17787770 2 -chr20 17787770 17787957 1 -chr20 17789614 17789775 1 -chr20 17792223 17792418 1 -chr20 17792430 17792647 1 -chr20 17792709 17792881 1 -chr20 17794112 17794159 1 -chr20 17794280 17794723 1 -chr20 17795337 17796209 1 -chr20 17797210 17797404 1 -chr20 17797576 17797823 1 -chr20 17798390 17798438 1 -chr20 17800471 17800874 1 -chr20 17801710 17801886 1 -chr20 17804140 17804317 1 -chr20 17804451 17804793 1 -chr20 17808534 17808590 1 -chr20 17809421 17809640 1 -chr20 17810037 17810203 1 -chr20 17810507 17810708 1 -chr20 17811272 17811336 1 -chr20 17812685 17812893 1 -chr20 17819742 17820013 1 -chr20 17820159 17820369 1 -chr20 17820656 17820704 1 -chr20 17821008 17821058 1 -chr20 17823938 17824142 1 -chr20 17825174 17825382 1 -chr20 17825495 17825542 1 -chr20 17826741 17826942 1 -chr20 17828124 17828357 1 -chr20 17830106 17830302 1 -chr20 17830302 17830311 2 -chr20 17830311 17830368 1 -chr20 17831656 17831817 1 -chr20 17833423 17833496 1 -chr20 17839689 17839743 1 -chr20 17843237 17843311 1 -chr20 17846007 17846059 1 -chr20 17846751 17846966 1 -chr20 17848711 17848939 1 -chr20 17849864 17850082 1 -chr20 17851092 17851134 1 -chr20 17854446 17854676 1 -chr20 17858556 17858703 1 -chr20 17859147 17859202 1 -chr20 17859998 17860035 1 -chr20 17860291 17860552 1 -chr20 17863514 17863551 1 -chr20 17864075 17864130 1 -chr20 17864727 17864799 1 -chr20 17867213 17867432 1 -chr20 17868938 17869009 1 -chr20 17870090 17870314 1 -chr20 17878002 17878055 1 -chr20 17883712 17883933 1 -chr20 17883933 17883947 2 -chr20 17883947 17884108 1 -chr20 17888179 17888708 1 -chr20 17895193 17895249 1 -chr20 17896142 17896393 1 -chr20 17903211 17903453 1 -chr20 17905469 17905539 1 -chr20 17906242 17906476 1 -chr20 17907581 17907612 1 -chr20 17915564 17915608 1 -chr20 17925520 17925853 1 -chr20 17927577 17927958 1 -chr20 17935252 17935436 1 -chr20 17963219 17963297 1 -chr20 17977427 17977500 1 -chr20 17985351 17985396 1 -chr20 17995792 17995846 1 -chr20 17997757 17997898 1 -chr20 17998065 17998254 1 -chr20 17999370 17999601 1 -chr20 18000865 18001025 1 -chr20 18001590 18001837 1 -chr20 18005195 18005376 1 -chr20 18005854 18006083 1 -chr20 18008284 18008443 1 -chr20 18012150 18012333 1 -chr20 18013323 18013536 1 -chr20 18016668 18016713 1 -chr20 18018213 18018368 1 -chr20 18019034 18019145 1 -chr20 18019260 18019316 1 -chr20 18020285 18020340 1 -chr20 18021468 18021534 1 -chr20 18022653 18022733 1 -chr20 18027801 18027835 1 -chr20 18030072 18030143 1 -chr20 18033280 18033438 1 -chr20 18034081 18034158 1 -chr20 18034374 18034414 1 -chr20 18044844 18045063 1 -chr20 18045381 18045595 1 -chr20 18046838 18047174 1 -chr20 18049814 18049889 1 -chr20 18051184 18051391 1 -chr20 18070637 18070694 1 -chr20 18070696 18070882 1 -chr20 18075352 18075399 1 -chr20 18078389 18078578 1 -chr20 18088016 18088069 1 -chr20 18091875 18091927 1 -chr20 18092413 18092527 1 -chr20 18094077 18094121 1 -chr20 18094485 18094690 1 -chr20 18098011 18098193 1 -chr20 18101885 18101943 1 -chr20 18102459 18102699 1 -chr20 18102842 18103046 1 -chr20 18106263 18106420 1 -chr20 18107044 18107116 1 -chr20 18117707 18117947 1 -chr20 18123628 18123888 1 -chr20 18125299 18125454 1 -chr20 18126723 18126856 1 -chr20 18143690 18143758 1 -chr20 18171794 18172142 1 -chr20 18173600 18173779 1 -chr20 18179943 18179971 1 -chr20 18180003 18180067 1 -chr20 18180427 18180653 1 -chr20 18180802 18180862 1 -chr20 18194697 18194726 1 -chr20 18196445 18196484 1 -chr20 18197517 18197562 1 -chr20 18198674 18198890 1 -chr20 18212036 18212239 1 -chr20 18212953 18213010 1 -chr20 18213537 18213768 1 -chr20 18215684 18215882 1 -chr20 18215882 18215904 2 -chr20 18215904 18216290 1 -chr20 18217846 18218025 1 -chr20 18219052 18219438 1 -chr20 18220071 18220239 1 -chr20 18221349 18221762 1 -chr20 18226108 18226280 1 -chr20 18230417 18230598 1 -chr20 18233038 18233130 1 -chr20 18234656 18234705 1 -chr20 18235409 18235524 1 -chr20 18238961 18239184 1 -chr20 18245471 18245669 1 -chr20 18248088 18248281 1 -chr20 18250614 18250663 1 -chr20 18251500 18251864 1 -chr20 18251904 18252648 1 -chr20 18254507 18254740 1 -chr20 18255225 18255713 1 -chr20 18260201 18260426 1 -chr20 18268459 18268654 1 -chr20 18268672 18269042 1 -chr20 18271334 18271561 1 -chr20 18274140 18274323 1 -chr20 18278402 18278650 1 -chr20 18282065 18282413 1 -chr20 18285258 18285607 1 -chr20 18298418 18298613 1 -chr20 18331769 18332007 1 -chr20 18334057 18334106 1 -chr20 18338007 18338193 1 -chr20 18356033 18356069 1 -chr20 18361082 18361269 1 -chr20 18364072 18364258 1 -chr20 18378652 18378788 1 -chr20 18378939 18379106 1 -chr20 18380918 18380985 1 -chr20 18382371 18382598 1 -chr20 18386062 18386250 1 -chr20 18392453 18392634 1 -chr20 18394502 18394545 1 -chr20 18399308 18399380 1 -chr20 18399815 18400045 1 -chr20 18400066 18400264 1 -chr20 18404178 18404395 1 -chr20 18409547 18409577 1 -chr20 18414304 18414466 1 -chr20 18418050 18418214 1 -chr20 18418406 18418584 1 -chr20 18421624 18421826 1 -chr20 18424892 18425102 1 -chr20 18426016 18426061 1 -chr20 18429594 18429737 1 -chr20 18431276 18431476 1 -chr20 18431543 18431727 1 -chr20 18432493 18432680 1 -chr20 18435022 18435199 1 -chr20 18438132 18438178 1 -chr20 18440248 18440417 1 -chr20 18440556 18440724 1 -chr20 18441829 18442074 1 -chr20 18443164 18443354 1 -chr20 18450721 18450943 1 -chr20 18452868 18453257 1 -chr20 18453354 18453909 1 -chr20 18454381 18454740 1 -chr20 18455607 18455808 1 -chr20 18457761 18457957 1 -chr20 18458344 18458741 1 -chr20 18483145 18483207 1 -chr20 18537276 18537335 1 -chr20 18539599 18539679 1 -chr20 18586624 18586667 1 -chr20 18598622 18598667 1 -chr20 18601546 18601598 1 -chr20 18614818 18614993 1 -chr20 18654215 18654367 1 -chr20 18679129 18679310 1 -chr20 18692937 18692966 1 -chr20 18696629 18696674 1 -chr20 18702243 18702290 1 -chr20 18702923 18703320 1 -chr20 18720796 18720831 1 -chr20 18742260 18742457 1 -chr20 18756116 18756321 1 -chr20 18756646 18756717 1 -chr20 18762747 18762965 1 -chr20 18764699 18765096 1 -chr20 18765676 18765832 1 -chr20 18766804 18767058 1 -chr20 18767919 18768268 1 -chr20 18778747 18778934 1 -chr20 18779634 18779966 1 -chr20 18781389 18781575 1 -chr20 18786655 18786865 1 -chr20 18795310 18795511 1 -chr20 18796418 18796981 1 -chr20 18799404 18799621 1 -chr20 18803097 18803150 1 -chr20 18807636 18807699 1 -chr20 18810997 18811439 1 -chr20 18813236 18813609 1 -chr20 18815241 18815459 1 -chr20 18820655 18820808 1 -chr20 18825939 18826147 1 -chr20 18827957 18828770 1 -chr20 18829612 18829839 1 -chr20 18830385 18830435 1 -chr20 18834358 18834587 1 -chr20 18840956 18841135 1 -chr20 18844241 18844642 1 -chr20 18851312 18851638 1 -chr20 18861829 18861994 1 -chr20 18865196 18865400 1 -chr20 18870192 18870406 1 -chr20 18870926 18870992 1 -chr20 18886596 18887052 1 -chr20 18890038 18890285 1 -chr20 18907962 18908094 1 -chr20 18915342 18915751 1 -chr20 18932581 18932642 1 -chr20 18945782 18945844 1 -chr20 18951465 18951540 1 -chr20 18953873 18953917 1 -chr20 18963361 18963536 1 -chr20 18963832 18964023 1 -chr20 18964804 18964954 1 -chr20 18988407 18988616 1 -chr20 18998702 18998882 1 -chr20 19000041 19000392 1 -chr20 19006523 19007084 1 -chr20 19021008 19021202 1 -chr20 19021879 19022052 1 -chr20 19024852 19025113 1 -chr20 19026801 19027203 1 -chr20 19034440 19034608 1 -chr20 19038889 19038932 1 -chr20 19041321 19041730 1 -chr20 19046477 19046643 1 -chr20 19083378 19083549 1 -chr20 19083643 19083827 1 -chr20 19085867 19086129 1 -chr20 19087498 19087716 1 -chr20 19091575 19091787 1 -chr20 19118801 19118910 1 -chr20 19130741 19130913 1 -chr20 19161688 19161747 1 -chr20 19162156 19162392 1 -chr20 19162826 19162952 1 -chr20 19187685 19187764 1 -chr20 19209206 19209779 1 -chr20 19210408 19210599 1 -chr20 19210885 19210949 1 -chr20 19211738 19212104 1 -chr20 19212233 19212331 1 -chr20 19217282 19217461 1 -chr20 19236531 19236573 1 -chr20 19237517 19237738 1 -chr20 19238054 19238230 1 -chr20 19241370 19241542 1 -chr20 19250106 19250349 1 -chr20 19251667 19251819 1 -chr20 19257459 19257822 1 -chr20 19260788 19260850 1 -chr20 19274245 19274810 1 -chr20 19275493 19275850 1 -chr20 19277511 19277768 1 -chr20 19277992 19278210 1 -chr20 19279555 19279604 1 -chr20 19280527 19280739 1 -chr20 19280891 19281109 1 -chr20 19290746 19291267 1 -chr20 19296343 19296521 1 -chr20 19307633 19307689 1 -chr20 19313671 19314088 1 -chr20 19316287 19316483 1 -chr20 19317010 19317249 1 -chr20 19319887 19320096 1 -chr20 19320161 19320523 1 -chr20 19320655 19320807 1 -chr20 19324015 19324211 1 -chr20 19325149 19325254 1 -chr20 19325720 19325748 1 -chr20 19333634 19333659 1 -chr20 19351252 19351710 1 -chr20 19361918 19361969 1 -chr20 19362501 19362747 1 -chr20 19372188 19372535 1 -chr20 19372657 19372851 1 -chr20 19416100 19416463 1 -chr20 19421238 19421462 1 -chr20 19422122 19422515 1 -chr20 19425809 19425992 1 -chr20 19426526 19426713 1 -chr20 19427908 19428361 1 -chr20 19453961 19454166 1 -chr20 19456703 19456897 1 -chr20 19462327 19462367 1 -chr20 19471298 19471513 1 -chr20 19472294 19472494 1 -chr20 19472851 19473050 1 -chr20 19473476 19473774 1 -chr20 19474070 19474243 1 -chr20 19477790 19477941 1 -chr20 19481536 19481742 1 -chr20 19491607 19491938 1 -chr20 19495059 19495256 1 -chr20 19511622 19512192 1 -chr20 19512192 19512201 2 -chr20 19512201 19512702 1 -chr20 19514031 19514964 1 -chr20 19518235 19518593 1 -chr20 19523633 19523871 1 -chr20 19541853 19542043 1 -chr20 19543316 19543540 1 -chr20 19543927 19544493 1 -chr20 19547436 19547625 1 -chr20 19551351 19551584 1 -chr20 19579084 19579484 1 -chr20 19582951 19583031 1 -chr20 19583031 19583049 2 -chr20 19583049 19583238 1 -chr20 19585028 19585202 1 -chr20 19589220 19589471 1 -chr20 19592944 19592989 1 -chr20 19593103 19593342 1 -chr20 19604782 19605170 1 -chr20 19611749 19612503 1 -chr20 19632301 19632659 1 -chr20 19634929 19635128 1 -chr20 19653018 19653388 1 -chr20 19653898 19654123 1 -chr20 19654163 19654411 1 -chr20 19654916 19655014 1 -chr20 19655215 19655390 1 -chr20 19656041 19656246 1 -chr20 19659526 19659740 1 -chr20 19662343 19662589 1 -chr20 19665812 19666211 1 -chr20 19668047 19668235 1 -chr20 19673913 19674068 1 -chr20 19674068 19674077 2 -chr20 19674077 19674428 1 -chr20 19680588 19681192 1 -chr20 19685071 19685252 1 -chr20 19688798 19688871 1 -chr20 19708631 19709100 1 -chr20 19716465 19716713 1 -chr20 19721789 19721957 1 -chr20 19722170 19722341 1 -chr20 19723942 19724128 1 -chr20 19724233 19724778 1 -chr20 19725295 19725492 1 -chr20 19732857 19733040 1 -chr20 19737987 19738179 1 -chr20 19738634 19738708 1 -chr20 19739268 19739461 1 -chr20 19739829 19740017 1 -chr20 19741551 19741974 1 -chr20 19741974 19741992 2 -chr20 19741992 19742145 1 -chr20 19742444 19742838 1 -chr20 19743758 19743991 1 -chr20 19760243 19760459 1 -chr20 19761086 19761285 1 -chr20 19764469 19764710 1 -chr20 19767907 19768244 1 -chr20 19768608 19768804 1 -chr20 19769296 19769345 1 -chr20 19769735 19769883 1 -chr20 19772652 19772832 1 -chr20 19773159 19773186 1 -chr20 19773186 19773203 2 -chr20 19773203 19773361 1 -chr20 19775055 19775257 1 -chr20 19783878 19784206 1 -chr20 19787955 19788156 1 -chr20 19795770 19795957 1 -chr20 19800053 19800314 1 -chr20 19800659 19801045 1 -chr20 19801830 19802043 1 -chr20 19804119 19804174 1 -chr20 19808583 19808778 1 -chr20 19809652 19809841 1 -chr20 19811085 19811521 1 -chr20 19814276 19814477 1 -chr20 19824490 19824658 1 -chr20 19824726 19824891 1 -chr20 19825169 19825349 1 -chr20 19828882 19829070 1 -chr20 19829621 19829854 1 -chr20 19830456 19830697 1 -chr20 19831170 19831318 1 -chr20 19833657 19833850 1 -chr20 19853321 19853395 1 -chr20 19854221 19854428 1 -chr20 19865279 19865339 1 -chr20 19869236 19869443 1 -chr20 19871739 19871947 1 -chr20 19877453 19877649 1 -chr20 19878749 19878989 1 -chr20 19885130 19885357 1 -chr20 19885989 19886036 1 -chr20 19886424 19886579 1 -chr20 19894054 19894474 1 -chr20 19897527 19897706 1 -chr20 19899690 19899922 1 -chr20 19900392 19900419 1 -chr20 19901377 19901574 1 -chr20 19903280 19903558 1 -chr20 19904384 19904764 1 -chr20 19905786 19905983 1 -chr20 19907383 19907780 1 -chr20 19908374 19908464 1 -chr20 19912755 19913017 1 -chr20 19913891 19914327 1 -chr20 19914395 19914624 1 -chr20 19915476 19915521 1 -chr20 19916364 19916407 1 -chr20 19916668 19916851 1 -chr20 19918376 19918568 1 -chr20 19920229 19920257 1 -chr20 19921074 19921240 1 -chr20 19923890 19924105 1 -chr20 19932492 19933054 1 -chr20 19933396 19933605 1 -chr20 19934895 19935057 1 -chr20 19935791 19935973 1 -chr20 19936373 19936553 1 -chr20 19937166 19937381 1 -chr20 19940248 19940453 1 -chr20 19940672 19940898 1 -chr20 19942172 19942408 1 -chr20 19943533 19943726 1 -chr20 19944461 19944656 1 -chr20 19945506 19945706 1 -chr20 19954022 19954410 1 -chr20 19956622 19956748 1 -chr20 19957702 19958054 1 -chr20 19958587 19958623 1 -chr20 19959237 19959444 1 -chr20 19959609 19959787 1 -chr20 19960364 19960417 1 -chr20 19960454 19960812 1 -chr20 19961093 19961494 1 -chr20 19963647 19963798 1 -chr20 19969065 19969394 1 -chr20 19969540 19969923 1 -chr20 19970159 19970385 1 -chr20 19970644 19970873 1 -chr20 19971266 19971331 1 -chr20 19972262 19972301 1 -chr20 19972398 19972605 1 -chr20 19975993 19976057 1 -chr20 19976697 19976760 1 -chr20 19979958 19979997 1 -chr20 19980153 19980381 1 -chr20 19982879 19982921 1 -chr20 19983203 19983765 1 -chr20 19983946 19983999 1 -chr20 19984869 19985076 1 -chr20 19986824 19986990 1 -chr20 19990932 19991254 1 -chr20 19993512 19993729 1 -chr20 19994034 19994259 1 -chr20 19994630 19994691 1 -chr20 19996456 19996513 1 -chr20 19998413 19998486 1 -chr20 19999497 19999655 1 -chr20 19999904 20000075 1 -chr20 20002809 20002866 1 -chr20 20003514 20003908 1 -chr20 20005147 20005208 1 -chr20 20005303 20005488 1 -chr20 20005884 20005929 1 -chr20 20007121 20007187 1 -chr20 20009056 20009224 1 -chr20 20010017 20010069 1 -chr20 20010592 20010757 1 -chr20 20011910 20011983 1 -chr20 20012362 20012546 1 -chr20 20023161 20023187 1 -chr20 20054609 20054794 1 -chr20 20056141 20056525 1 -chr20 20056666 20056870 1 -chr20 20057189 20057375 1 -chr20 20058343 20058707 1 -chr20 20059771 20059993 1 -chr20 20060921 20061079 1 -chr20 20062505 20062913 1 -chr20 20063879 20064088 1 -chr20 20064116 20064311 1 -chr20 20065522 20065566 1 -chr20 20066729 20066793 1 -chr20 20068157 20068344 1 -chr20 20069039 20069103 1 -chr20 20070757 20070996 1 -chr20 20072189 20072243 1 -chr20 20074874 20075070 1 -chr20 20078411 20078641 1 -chr20 20081158 20081354 1 -chr20 20086486 20086690 1 -chr20 20088586 20088643 1 -chr20 20089819 20090028 1 -chr20 20090028 20090030 2 -chr20 20090030 20090230 1 -chr20 20090498 20090560 1 -chr20 20090974 20091383 1 -chr20 20094835 20095229 1 -chr20 20095700 20096105 1 -chr20 20096436 20096640 1 -chr20 20098149 20098330 1 -chr20 20101295 20101512 1 -chr20 20102659 20102893 1 -chr20 20103757 20104165 1 -chr20 20108479 20109053 1 -chr20 20118474 20118534 1 -chr20 20122228 20122270 1 -chr20 20123209 20123350 1 -chr20 20123425 20123592 1 -chr20 20126541 20126625 1 -chr20 20126874 20127056 1 -chr20 20128313 20128419 1 -chr20 20141775 20142015 1 -chr20 20150865 20151060 1 -chr20 20151111 20151290 1 -chr20 20180856 20181034 1 -chr20 20192443 20192718 1 -chr20 20197589 20197979 1 -chr20 20198051 20198229 1 -chr20 20198612 20198756 1 -chr20 20201847 20202165 1 -chr20 20204457 20204666 1 -chr20 20205391 20205941 1 -chr20 20207118 20207173 1 -chr20 20207888 20208437 1 -chr20 20211849 20212084 1 -chr20 20212107 20212178 1 -chr20 20212188 20212260 1 -chr20 20212346 20212763 1 -chr20 20212822 20213057 1 -chr20 20214480 20214694 1 -chr20 20215065 20215118 1 -chr20 20229505 20229928 1 -chr20 20231682 20231741 1 -chr20 20233128 20233443 1 -chr20 20233570 20233741 1 -chr20 20235705 20236002 1 -chr20 20246599 20246661 1 -chr20 20247634 20247858 1 -chr20 20251105 20251322 1 -chr20 20259667 20260085 1 -chr20 20266690 20266918 1 -chr20 20268443 20268648 1 -chr20 20273150 20273415 1 -chr20 20275751 20275973 1 -chr20 20277921 20278168 1 -chr20 20278224 20278424 1 -chr20 20288978 20289405 1 -chr20 20290320 20290480 1 -chr20 20293795 20294182 1 -chr20 20297561 20297714 1 -chr20 20298733 20299136 1 -chr20 20300883 20301119 1 -chr20 20304209 20304259 1 -chr20 20306657 20306702 1 -chr20 20316222 20316440 1 -chr20 20317409 20317579 1 -chr20 20330414 20330452 1 -chr20 20334423 20334661 1 -chr20 20334830 20335073 1 -chr20 20340075 20340432 1 -chr20 20341076 20341140 1 -chr20 20342580 20342684 1 -chr20 20351934 20352355 1 -chr20 20355772 20355828 1 -chr20 20357624 20357819 1 -chr20 20359390 20359419 1 -chr20 20360515 20360560 1 -chr20 20361377 20361644 1 -chr20 20363961 20364008 1 -chr20 20366538 20366897 1 -chr20 20367150 20367256 1 -chr20 20371596 20371647 1 -chr20 20372143 20372323 1 -chr20 20372323 20372332 2 -chr20 20372332 20372733 1 -chr20 20374249 20374479 1 -chr20 20375528 20375981 1 -chr20 20379584 20379811 1 -chr20 20386098 20386332 1 -chr20 20386640 20386818 1 -chr20 20388631 20388685 1 -chr20 20390151 20390574 1 -chr20 20394997 20395339 1 -chr20 20395596 20395651 1 -chr20 20396027 20396073 1 -chr20 20397048 20397233 1 -chr20 20398880 20399044 1 -chr20 20400629 20400736 1 -chr20 20401524 20401779 1 -chr20 20402930 20403108 1 -chr20 20405421 20405633 1 -chr20 20409048 20409420 1 -chr20 20411762 20411997 1 -chr20 20412868 20413079 1 -chr20 20416639 20416803 1 -chr20 20416986 20417229 1 -chr20 20417401 20417441 1 -chr20 20417669 20417849 1 -chr20 20417943 20418147 1 -chr20 20419910 20420159 1 -chr20 20420255 20420299 1 -chr20 20423068 20423264 1 -chr20 20425816 20426021 1 -chr20 20430974 20431531 1 -chr20 20433938 20434280 1 -chr20 20436806 20437045 1 -chr20 20438541 20438610 1 -chr20 20439482 20439710 1 -chr20 20442217 20442406 1 -chr20 20442412 20443026 1 -chr20 20443778 20443828 1 -chr20 20453734 20454165 1 -chr20 20454601 20454810 1 -chr20 20461770 20462477 1 -chr20 20464046 20464290 1 -chr20 20464460 20464692 1 -chr20 20469527 20469935 1 -chr20 20485878 20485940 1 -chr20 20488843 20489194 1 -chr20 20492413 20492606 1 -chr20 20495844 20496262 1 -chr20 20498312 20498494 1 -chr20 20513643 20513711 1 -chr20 20513906 20514083 1 -chr20 20514542 20514609 1 -chr20 20518271 20518333 1 -chr20 20519225 20519398 1 -chr20 20527245 20527461 1 -chr20 20531069 20531301 1 -chr20 20532530 20532762 1 -chr20 20537804 20537976 1 -chr20 20538013 20538287 1 -chr20 20538347 20538543 1 -chr20 20539225 20539400 1 -chr20 20544410 20544506 1 -chr20 20546573 20546763 1 -chr20 20556144 20556348 1 -chr20 20557188 20557251 1 -chr20 20558528 20558801 1 -chr20 20561047 20561250 1 -chr20 20573083 20573281 1 -chr20 20596433 20596633 1 -chr20 20597217 20597425 1 -chr20 20597717 20597775 1 -chr20 20598504 20598726 1 -chr20 20601582 20601913 1 -chr20 20611929 20612009 1 -chr20 20614011 20614081 1 -chr20 20616993 20617058 1 -chr20 20621123 20621363 1 -chr20 20642115 20642146 1 -chr20 20649088 20649329 1 -chr20 20650577 20650733 1 -chr20 20655868 20656083 1 -chr20 20657828 20658047 1 -chr20 20659161 20659389 1 -chr20 20662998 20663249 1 -chr20 20664856 20665080 1 -chr20 20674458 20674656 1 -chr20 20677718 20677772 1 -chr20 20678258 20678443 1 -chr20 20679127 20679305 1 -chr20 20681365 20681433 1 -chr20 20682520 20682629 1 -chr20 20682629 20682652 2 -chr20 20682652 20682840 1 -chr20 20684490 20684556 1 -chr20 20687233 20687423 1 -chr20 20687518 20687742 1 -chr20 20689364 20689415 1 -chr20 20690836 20691095 1 -chr20 20691607 20691809 1 -chr20 20692002 20692239 1 -chr20 20694456 20694642 1 -chr20 20697876 20698117 1 -chr20 20702743 20702921 1 -chr20 20709455 20709650 1 -chr20 20721563 20721614 1 -chr20 20726021 20726247 1 -chr20 20727458 20727872 1 -chr20 20733977 20734189 1 -chr20 20735867 20736062 1 -chr20 20737171 20737386 1 -chr20 20737440 20737608 1 -chr20 20742039 20742253 1 -chr20 20745388 20745445 1 -chr20 20751255 20751496 1 -chr20 20752233 20752441 1 -chr20 20752693 20753055 1 -chr20 20759287 20759361 1 -chr20 20761307 20761523 1 -chr20 20771679 20771723 1 -chr20 20774535 20774727 1 -chr20 20780493 20780675 1 -chr20 20781020 20781207 1 -chr20 20782733 20782921 1 -chr20 20785481 20785840 1 -chr20 20786832 20787020 1 -chr20 20790533 20790728 1 -chr20 20792460 20792661 1 -chr20 20793777 20793950 1 -chr20 20795073 20795119 1 -chr20 20799446 20799865 1 -chr20 20800270 20800460 1 -chr20 20801128 20801311 1 -chr20 20803651 20803693 1 -chr20 20804724 20804900 1 -chr20 20805734 20805821 1 -chr20 20819156 20819205 1 -chr20 20820283 20820509 1 -chr20 20823920 20824074 1 -chr20 20827142 20827358 1 -chr20 20829070 20829124 1 -chr20 20832880 20833040 1 -chr20 20834226 20834270 1 -chr20 20836706 20836884 1 -chr20 20837263 20837418 1 -chr20 20837438 20837649 1 -chr20 20840767 20840947 1 -chr20 20842121 20842316 1 -chr20 20842408 20842595 1 -chr20 20842595 20842604 2 -chr20 20842604 20842826 1 -chr20 20843173 20843351 1 -chr20 20844330 20844507 1 -chr20 20845151 20845339 1 -chr20 20846134 20846295 1 -chr20 20846856 20847012 1 -chr20 20848186 20848350 1 -chr20 20852021 20852063 1 -chr20 20855619 20855753 1 -chr20 20871656 20871701 1 -chr20 20871778 20871960 1 -chr20 20873050 20873433 1 -chr20 20874866 20875121 1 -chr20 20875875 20876047 1 -chr20 20880052 20880095 1 -chr20 20884296 20884652 1 -chr20 20885192 20885346 1 -chr20 20888410 20888637 1 -chr20 20888638 20888812 1 -chr20 20895441 20895633 1 -chr20 20896317 20896398 1 -chr20 20897883 20898039 1 -chr20 20900425 20900980 1 -chr20 20902802 20902867 1 -chr20 20908944 20909130 1 -chr20 20912969 20913178 1 -chr20 20929680 20929898 1 -chr20 20930567 20930861 1 -chr20 20930917 20931113 1 -chr20 20931771 20931966 1 -chr20 20932155 20932210 1 -chr20 20932405 20932556 1 -chr20 20933007 20933196 1 -chr20 20933389 20933430 1 -chr20 20934858 20935295 1 -chr20 20936710 20936908 1 -chr20 20942958 20943178 1 -chr20 20947491 20947528 1 -chr20 20954335 20954463 1 -chr20 20955225 20955447 1 -chr20 20956264 20956491 1 -chr20 20956842 20956920 1 -chr20 20962439 20962684 1 -chr20 20963409 20963683 1 -chr20 20965690 20965874 1 -chr20 20967001 20967257 1 -chr20 20969904 20970006 1 -chr20 20971370 20971558 1 -chr20 20972119 20972183 1 -chr20 20972228 20972432 1 -chr20 20973745 20973978 1 -chr20 20976934 20977168 1 -chr20 20989415 20989631 1 -chr20 20989650 20989861 1 -chr20 20990326 20990514 1 -chr20 20992281 20992453 1 -chr20 20992927 20993127 1 -chr20 20993220 20993588 1 -chr20 20994269 20994445 1 -chr20 20995403 20995442 1 -chr20 20995677 20996083 1 -chr20 20999179 20999415 1 -chr20 20999497 20999670 1 -chr20 21000507 21000711 1 -chr20 21001482 21001697 1 -chr20 21003024 21003073 1 -chr20 21003905 21004079 1 -chr20 21010982 21011151 1 -chr20 21011676 21012323 1 -chr20 21013285 21014101 1 -chr20 21015424 21015814 1 -chr20 21016007 21016163 1 -chr20 21016314 21016999 1 -chr20 21018182 21018427 1 -chr20 21020993 21021157 1 -chr20 21021213 21021418 1 -chr20 21023549 21023776 1 -chr20 21024398 21024608 1 -chr20 21027244 21027424 1 -chr20 21029385 21029619 1 -chr20 21034321 21034539 1 -chr20 21034679 21034722 1 -chr20 21044203 21044405 1 -chr20 21044520 21044768 1 -chr20 21046053 21046195 1 -chr20 21048020 21048226 1 -chr20 21050799 21050967 1 -chr20 21052182 21052380 1 -chr20 21052697 21053262 1 -chr20 21055195 21055426 1 -chr20 21056049 21056283 1 -chr20 21056286 21056733 1 -chr20 21058348 21058504 1 -chr20 21060474 21060555 1 -chr20 21068203 21068559 1 -chr20 21072214 21072274 1 -chr20 21075027 21075215 1 -chr20 21078403 21078451 1 -chr20 21078566 21078944 1 -chr20 21078944 21078954 2 -chr20 21078954 21079121 1 -chr20 21083016 21083222 1 -chr20 21083617 21083643 1 -chr20 21087801 21088207 1 -chr20 21090874 21090944 1 -chr20 21092686 21092892 1 -chr20 21092990 21093226 1 -chr20 21094575 21094790 1 -chr20 21095682 21095890 1 -chr20 21099859 21100067 1 -chr20 21100284 21100472 1 -chr20 21100625 21100670 1 -chr20 21101864 21102069 1 -chr20 21105626 21105690 1 -chr20 21106830 21107045 1 -chr20 21109419 21109630 1 -chr20 21111154 21111322 1 -chr20 21113135 21113542 1 -chr20 21117971 21118408 1 -chr20 21128038 21128079 1 -chr20 21169268 21169452 1 -chr20 21204185 21204226 1 -chr20 21210189 21210241 1 -chr20 21237436 21237803 1 -chr20 21246957 21247064 1 -chr20 21249135 21249228 1 -chr20 21254126 21254290 1 -chr20 21263753 21263981 1 -chr20 21265214 21265389 1 -chr20 21268584 21268973 1 -chr20 21269297 21269544 1 -chr20 21272842 21273051 1 -chr20 21273612 21273672 1 -chr20 21274511 21274740 1 -chr20 21274978 21275156 1 -chr20 21280270 21280443 1 -chr20 21282235 21282315 1 -chr20 21282874 21283106 1 -chr20 21308070 21308137 1 -chr20 21377283 21377310 1 -chr20 21399287 21399526 1 -chr20 21400603 21400810 1 -chr20 21404466 21404714 1 -chr20 21415054 21415095 1 -chr20 21419432 21419452 1 -chr20 21419452 21419468 2 -chr20 21419468 21419607 1 -chr20 21419858 21420113 1 -chr20 21434569 21434606 1 -chr20 21436879 21437057 1 -chr20 21437973 21438195 1 -chr20 21442649 21442704 1 -chr20 21444821 21445016 1 -chr20 21446426 21446594 1 -chr20 21448405 21448473 1 -chr20 21450760 21450994 1 -chr20 21451679 21451887 1 -chr20 21451907 21452070 1 -chr20 21454632 21454855 1 -chr20 21456284 21456459 1 -chr20 21460203 21460391 1 -chr20 21460448 21460639 1 -chr20 21463275 21463494 1 -chr20 21471623 21471675 1 -chr20 21485017 21485058 1 -chr20 21486673 21486733 1 -chr20 21494496 21494665 1 -chr20 21495602 21495814 1 -chr20 21498744 21499077 1 -chr20 21499077 21499094 2 -chr20 21499094 21499311 1 -chr20 21500703 21500916 1 -chr20 21504176 21504405 1 -chr20 21504599 21504825 1 -chr20 21520048 21520234 1 -chr20 21520847 21521034 1 -chr20 21522026 21522204 1 -chr20 21522535 21522914 1 -chr20 21527419 21527641 1 -chr20 21532947 21533141 1 -chr20 21536811 21536852 1 -chr20 21550104 21550502 1 -chr20 21553785 21553819 1 -chr20 21555084 21555162 1 -chr20 21558111 21558280 1 -chr20 21563974 21564317 1 -chr20 21564427 21564481 1 -chr20 21578656 21578860 1 -chr20 21582394 21582750 1 -chr20 21584326 21584483 1 -chr20 21584767 21584840 1 -chr20 21586969 21587395 1 -chr20 21592299 21592712 1 -chr20 21600016 21600411 1 -chr20 21612552 21612732 1 -chr20 21613359 21613722 1 -chr20 21615696 21615847 1 -chr20 21616871 21617036 1 -chr20 21631694 21631733 1 -chr20 21632722 21633166 1 -chr20 21634823 21634980 1 -chr20 21648638 21648849 1 -chr20 21650166 21650342 1 -chr20 21650520 21650563 1 -chr20 21650631 21650827 1 -chr20 21650957 21651183 1 -chr20 21652610 21653020 1 -chr20 21653353 21653790 1 -chr20 21669241 21669421 1 -chr20 21673886 21674121 1 -chr20 21679645 21680055 1 -chr20 21681560 21681862 1 -chr20 21682109 21682355 1 -chr20 21687486 21687881 1 -chr20 21691508 21691765 1 -chr20 21694262 21694306 1 -chr20 21694646 21695064 1 -chr20 21698212 21698266 1 -chr20 21699474 21699684 1 -chr20 21704701 21704743 1 -chr20 21708628 21708813 1 -chr20 21711265 21711476 1 -chr20 21713134 21713217 1 -chr20 21716368 21716554 1 -chr20 21718605 21718746 1 -chr20 21729076 21729282 1 -chr20 21730782 21730992 1 -chr20 21735130 21735186 1 -chr20 21738504 21738725 1 -chr20 21747716 21747793 1 -chr20 21748758 21748832 1 -chr20 21797077 21797851 1 -chr20 21812111 21812300 1 -chr20 21825447 21825505 1 -chr20 21854350 21854517 1 -chr20 21859135 21859310 1 -chr20 21859735 21859799 1 -chr20 21877720 21877783 1 -chr20 21880712 21880777 1 -chr20 21888375 21888436 1 -chr20 21890832 21890991 1 -chr20 21892110 21892231 1 -chr20 21892415 21892461 1 -chr20 21902779 21902819 1 -chr20 21910887 21911131 1 -chr20 21912623 21912673 1 -chr20 21914548 21914603 1 -chr20 21916375 21916424 1 -chr20 21929481 21929525 1 -chr20 21930595 21930777 1 -chr20 21931643 21931688 1 -chr20 21931745 21931968 1 -chr20 21932747 21932907 1 -chr20 21975463 21975667 1 -chr20 21988015 21988216 1 -chr20 22012334 22012420 1 -chr20 22013303 22013522 1 -chr20 22013522 22013531 2 -chr20 22013531 22013713 1 -chr20 22014501 22014552 1 -chr20 22015551 22015645 1 -chr20 22021059 22021325 1 -chr20 22021406 22021607 1 -chr20 22023218 22023268 1 -chr20 22040526 22040566 1 -chr20 22042508 22042711 1 -chr20 22043107 22043283 1 -chr20 22105302 22105380 1 -chr20 22112408 22112576 1 -chr20 22113380 22113732 1 -chr20 22113968 22114187 1 -chr20 22117922 22117988 1 -chr20 22118826 22118956 1 -chr20 22120246 22120487 1 -chr20 22120780 22120934 1 -chr20 22132831 22133021 1 -chr20 22133909 22133949 1 -chr20 22134978 22135187 1 -chr20 22153782 22154004 1 -chr20 22161513 22161770 1 -chr20 22188327 22188521 1 -chr20 22193213 22193298 1 -chr20 22196246 22196292 1 -chr20 22197693 22197775 1 -chr20 22197917 22198109 1 -chr20 22199523 22199663 1 -chr20 22199951 22200038 1 -chr20 22200645 22200813 1 -chr20 22201788 22201941 1 -chr20 22202239 22202455 1 -chr20 22203267 22203309 1 -chr20 22209329 22209392 1 -chr20 22219229 22219453 1 -chr20 22223528 22223886 1 -chr20 22226845 22227043 1 -chr20 22235780 22235989 1 -chr20 22240589 22240952 1 -chr20 22244403 22244634 1 -chr20 22245497 22245692 1 -chr20 22260261 22260462 1 -chr20 22263673 22263913 1 -chr20 22264323 22264388 1 -chr20 22265552 22265770 1 -chr20 22273362 22273591 1 -chr20 22294432 22294632 1 -chr20 22296805 22296848 1 -chr20 22298996 22299196 1 -chr20 22304949 22305425 1 -chr20 22306408 22306828 1 -chr20 22310638 22311020 1 -chr20 22314005 22314143 1 -chr20 22315338 22315745 1 -chr20 22316691 22316912 1 -chr20 22317316 22317438 1 -chr20 22322040 22322336 1 -chr20 22330726 22330771 1 -chr20 22331475 22331520 1 -chr20 22331520 22331534 2 -chr20 22331534 22331765 1 -chr20 22332148 22332515 1 -chr20 22334274 22334318 1 -chr20 22335380 22335625 1 -chr20 22366092 22366297 1 -chr20 22367698 22368057 1 -chr20 22368622 22368821 1 -chr20 22370586 22370791 1 -chr20 22370792 22371055 1 -chr20 22374781 22375021 1 -chr20 22375871 22376040 1 -chr20 22379138 22379329 1 -chr20 22457635 22458314 1 -chr20 22460947 22461298 1 -chr20 22463304 22463537 1 -chr20 22464034 22464454 1 -chr20 22475347 22475399 1 -chr20 22484474 22484702 1 -chr20 22495482 22495639 1 -chr20 22501453 22501656 1 -chr20 22501782 22501984 1 -chr20 22502020 22502441 1 -chr20 22503510 22503673 1 -chr20 22504188 22504773 1 -chr20 22509074 22509303 1 -chr20 22512131 22512716 1 -chr20 22520400 22520621 1 -chr20 22522341 22522528 1 -chr20 22522686 22522902 1 -chr20 22523570 22523984 1 -chr20 22525781 22526005 1 -chr20 22526115 22526352 1 -chr20 22529128 22529339 1 -chr20 22531108 22531715 1 -chr20 22535368 22535746 1 -chr20 22536958 22537137 1 -chr20 22539955 22540358 1 -chr20 22541800 22542188 1 -chr20 22548776 22548935 1 -chr20 22550558 22550746 1 -chr20 22553130 22553356 1 -chr20 22556432 22556600 1 -chr20 22557801 22557884 1 -chr20 22561848 22562041 1 -chr20 22564208 22564452 1 -chr20 22564780 22565000 1 -chr20 22566476 22566695 1 -chr20 22567131 22567375 1 -chr20 22568376 22568438 1 -chr20 22571276 22571456 1 -chr20 22571559 22571802 1 -chr20 22571802 22571816 2 -chr20 22571816 22571851 1 -chr20 22572014 22572262 1 -chr20 22574900 22575148 1 -chr20 22575579 22575773 1 -chr20 22576864 22577227 1 -chr20 22577435 22577665 1 -chr20 22577843 22578038 1 -chr20 22585682 22585885 1 -chr20 22586004 22586213 1 -chr20 22589631 22589840 1 -chr20 22597252 22597513 1 -chr20 22601791 22602013 1 -chr20 22603153 22603708 1 -chr20 22606000 22606374 1 -chr20 22607531 22607749 1 -chr20 22608794 22608858 1 -chr20 22611706 22612128 1 -chr20 22612210 22612438 1 -chr20 22612999 22613262 1 -chr20 22620019 22620226 1 -chr20 22620551 22620939 1 -chr20 22621761 22621954 1 -chr20 22622710 22622964 1 -chr20 22623056 22623112 1 -chr20 22623132 22623329 1 -chr20 22629962 22630161 1 -chr20 22630915 22631479 1 -chr20 22641374 22641556 1 -chr20 22651685 22651878 1 -chr20 22652507 22652548 1 -chr20 22654973 22655186 1 -chr20 22657460 22657638 1 -chr20 22657951 22658146 1 -chr20 22659556 22659755 1 -chr20 22660415 22660603 1 -chr20 22662738 22662940 1 -chr20 22663692 22663913 1 -chr20 22664489 22664741 1 -chr20 22674132 22674515 1 -chr20 22675135 22675476 1 -chr20 22675815 22675872 1 -chr20 22676142 22676340 1 -chr20 22677197 22677424 1 -chr20 22678589 22678978 1 -chr20 22679287 22679462 1 -chr20 22679532 22679740 1 -chr20 22693802 22693848 1 -chr20 22697537 22697924 1 -chr20 22700939 22701350 1 -chr20 22713762 22713954 1 -chr20 22719038 22719230 1 -chr20 22719428 22719792 1 -chr20 22720268 22720473 1 -chr20 22721721 22721921 1 -chr20 22723255 22723459 1 -chr20 22732900 22733014 1 -chr20 22736349 22736432 1 -chr20 22740271 22740435 1 -chr20 22744011 22744250 1 -chr20 22746908 22747085 1 -chr20 22747220 22747408 1 -chr20 22750215 22750390 1 -chr20 22750465 22750696 1 -chr20 22751830 22752041 1 -chr20 22755656 22755885 1 -chr20 22764785 22765000 1 -chr20 22765784 22765940 1 -chr20 22766412 22766800 1 -chr20 22769518 22769895 1 -chr20 22770501 22770688 1 -chr20 22771103 22771278 1 -chr20 22771290 22771488 1 -chr20 22773509 22773731 1 -chr20 22774359 22774587 1 -chr20 22775056 22775233 1 -chr20 22776327 22776504 1 -chr20 22780227 22780634 1 -chr20 22781959 22782301 1 -chr20 22785183 22785359 1 -chr20 22791844 22792045 1 -chr20 22798601 22798642 1 -chr20 22798859 22799054 1 -chr20 22799420 22799661 1 -chr20 22799825 22800192 1 -chr20 22800197 22800257 1 -chr20 22800897 22801285 1 -chr20 22801550 22801760 1 -chr20 22801881 22802102 1 -chr20 22802358 22802584 1 -chr20 22803012 22803087 1 -chr20 22803790 22803853 1 -chr20 22804072 22804253 1 -chr20 22809470 22809705 1 -chr20 22810663 22811281 1 -chr20 22814398 22814629 1 -chr20 22814706 22814916 1 -chr20 22818040 22818236 1 -chr20 22819588 22819832 1 -chr20 22830647 22830850 1 -chr20 22834610 22834655 1 -chr20 22842025 22842451 1 -chr20 22854853 22855037 1 -chr20 22861051 22861106 1 -chr20 22861742 22861784 1 -chr20 22862092 22862330 1 -chr20 22862331 22862555 1 -chr20 22862900 22862948 1 -chr20 22863424 22863616 1 -chr20 22864412 22864653 1 -chr20 22864896 22865089 1 -chr20 22866602 22866856 1 -chr20 22866927 22867095 1 -chr20 22871004 22871180 1 -chr20 22879678 22879859 1 -chr20 22880640 22881090 1 -chr20 22881199 22881244 1 -chr20 22882985 22883033 1 -chr20 22887468 22887520 1 -chr20 22887520 22887529 2 -chr20 22887529 22887758 1 -chr20 22894187 22894423 1 -chr20 22907347 22907392 1 -chr20 22914819 22914973 1 -chr20 22915119 22915462 1 -chr20 22939743 22940127 1 -chr20 22941222 22941639 1 -chr20 22949942 22950685 1 -chr20 22951341 22951734 1 -chr20 22952260 22952545 1 -chr20 22954300 22954523 1 -chr20 22955839 22955880 1 -chr20 22956336 22957291 1 -chr20 22958450 22958506 1 -chr20 22958839 22959044 1 -chr20 22961280 22961492 1 -chr20 22963031 22963407 1 -chr20 22965945 22966130 1 -chr20 22967138 22967211 1 -chr20 22968845 22969094 1 -chr20 22970328 22970529 1 -chr20 22970713 22971106 1 -chr20 22972078 22972311 1 -chr20 22977960 22978372 1 -chr20 22978792 22978888 1 -chr20 22980144 22980201 1 -chr20 22980859 22981203 1 -chr20 22983747 22984187 1 -chr20 22984331 22984699 1 -chr20 22985118 22985207 1 -chr20 22985942 22985976 1 -chr20 22986230 22986400 1 -chr20 22992451 22992526 1 -chr20 22994005 22994412 1 -chr20 22995910 22996103 1 -chr20 22996203 22996372 1 -chr20 22997821 22998036 1 -chr20 22998519 22998979 1 -chr20 23001064 23001375 1 -chr20 23001539 23001741 1 -chr20 23001986 23002178 1 -chr20 23002292 23002526 1 -chr20 23002735 23002960 1 -chr20 23016991 23017199 1 -chr20 23019315 23019527 1 -chr20 23019563 23019802 1 -chr20 23031448 23031807 1 -chr20 23031807 23031830 2 -chr20 23031830 23031918 1 -chr20 23033644 23033858 1 -chr20 23036304 23036710 1 -chr20 23037162 23037560 1 -chr20 23037789 23037938 1 -chr20 23037947 23038000 1 -chr20 23040598 23040807 1 -chr20 23044822 23045060 1 -chr20 23054845 23054918 1 -chr20 23099099 23099127 1 -chr20 23132145 23132262 1 -chr20 23156555 23156678 1 -chr20 23172343 23172387 1 -chr20 23181782 23181966 1 -chr20 23182347 23182702 1 -chr20 23183227 23183414 1 -chr20 23195983 23196141 1 -chr20 23197024 23197077 1 -chr20 23218368 23218597 1 -chr20 23231204 23231600 1 -chr20 23237423 23237678 1 -chr20 23238434 23238641 1 -chr20 23239302 23239468 1 -chr20 23243131 23243236 1 -chr20 23243659 23243691 1 -chr20 23243691 23243704 2 -chr20 23243704 23243735 1 -chr20 23245183 23245407 1 -chr20 23246290 23246695 1 -chr20 23248380 23248573 1 -chr20 23248663 23248885 1 -chr20 23257839 23258012 1 -chr20 23258518 23258708 1 -chr20 23263385 23263438 1 -chr20 23265307 23265356 1 -chr20 23270387 23270600 1 -chr20 23273901 23274132 1 -chr20 23274148 23274358 1 -chr20 23274448 23274501 1 -chr20 23275192 23275268 1 -chr20 23278697 23279019 1 -chr20 23280595 23280868 1 -chr20 23283483 23283536 1 -chr20 23285340 23285735 1 -chr20 23285738 23286108 1 -chr20 23288443 23288491 1 -chr20 23289076 23289245 1 -chr20 23290374 23290412 1 -chr20 23293153 23293371 1 -chr20 23296113 23296157 1 -chr20 23305719 23305767 1 -chr20 23305767 23305784 2 -chr20 23305784 23306163 1 -chr20 23306420 23306469 1 -chr20 23309567 23309774 1 -chr20 23318577 23318792 1 -chr20 23324536 23324716 1 -chr20 23326085 23326135 1 -chr20 23326571 23326789 1 -chr20 23328587 23328804 1 -chr20 23341942 23342135 1 -chr20 23343070 23343289 1 -chr20 23373767 23373932 1 -chr20 23378182 23378247 1 -chr20 23398432 23398458 1 -chr20 23400373 23400408 1 -chr20 23401759 23401823 1 -chr20 23403516 23403562 1 -chr20 23424084 23424130 1 -chr20 23428877 23428947 1 -chr20 23430997 23431184 1 -chr20 23433079 23433463 1 -chr20 23434248 23434660 1 -chr20 23434660 23434684 2 -chr20 23434684 23434868 1 -chr20 23436339 23436775 1 -chr20 23437546 23437779 1 -chr20 23438856 23439066 1 -chr20 23447723 23447759 1 -chr20 23449893 23450086 1 -chr20 23450494 23450700 1 -chr20 23451758 23451967 1 -chr20 23453106 23453148 1 -chr20 23454363 23454531 1 -chr20 23455645 23455835 1 -chr20 23457917 23458290 1 -chr20 23458324 23458511 1 -chr20 23458692 23458941 1 -chr20 23462608 23462706 1 -chr20 23467007 23467048 1 -chr20 23468409 23468565 1 -chr20 23472001 23472068 1 -chr20 23472999 23473167 1 -chr20 23475507 23475746 1 -chr20 23475834 23476243 1 -chr20 23476281 23476531 1 -chr20 23476547 23476754 1 -chr20 23478211 23478414 1 -chr20 23481648 23481800 1 -chr20 23493732 23494001 1 -chr20 23495419 23495633 1 -chr20 23498454 23498702 1 -chr20 23499408 23499802 1 -chr20 23501185 23501231 1 -chr20 23501907 23501991 1 -chr20 23502189 23502346 1 -chr20 23502494 23502532 1 -chr20 23504211 23504263 1 -chr20 23505553 23505732 1 -chr20 23506335 23506742 1 -chr20 23506874 23506917 1 -chr20 23507455 23507551 1 -chr20 23507952 23508520 1 -chr20 23511006 23511224 1 -chr20 23513946 23513986 1 -chr20 23519255 23519310 1 -chr20 23519477 23519520 1 -chr20 23519772 23519955 1 -chr20 23520134 23520356 1 -chr20 23520563 23520777 1 -chr20 23523584 23523691 1 -chr20 23524021 23524194 1 -chr20 23524194 23524197 2 -chr20 23524197 23524411 1 -chr20 23524704 23525134 1 -chr20 23526697 23526904 1 -chr20 23529986 23530144 1 -chr20 23536682 23536822 1 -chr20 23546540 23547000 1 -chr20 23548765 23549009 1 -chr20 23549647 23549841 1 -chr20 23552645 23552903 1 -chr20 23556594 23556774 1 -chr20 23558371 23558593 1 -chr20 23560535 23560584 1 -chr20 23565894 23566075 1 -chr20 23568483 23568695 1 -chr20 23568805 23568871 1 -chr20 23569304 23569562 1 -chr20 23569817 23569894 1 -chr20 23570831 23570896 1 -chr20 23571058 23571260 1 -chr20 23575225 23575441 1 -chr20 23576072 23576136 1 -chr20 23577466 23577510 1 -chr20 23580730 23580777 1 -chr20 23581419 23581488 1 -chr20 23581641 23581710 1 -chr20 23585232 23585429 1 -chr20 23586143 23586541 1 -chr20 23587813 23588194 1 -chr20 23591981 23592159 1 -chr20 23593692 23593766 1 -chr20 23598833 23598988 1 -chr20 23602635 23602814 1 -chr20 23603512 23603722 1 -chr20 23605167 23605198 1 -chr20 23608057 23608557 1 -chr20 23608602 23609172 1 -chr20 23609568 23609779 1 -chr20 23610108 23610322 1 -chr20 23610898 23611291 1 -chr20 23612747 23612944 1 -chr20 23614271 23614321 1 -chr20 23617468 23617533 1 -chr20 23625887 23626255 1 -chr20 23643344 23643582 1 -chr20 23644666 23645037 1 -chr20 23648092 23648135 1 -chr20 23656329 23656522 1 -chr20 23666125 23666348 1 -chr20 23673101 23673339 1 -chr20 23674476 23674703 1 -chr20 23678141 23678478 1 -chr20 23678733 23678985 1 -chr20 23678985 23678991 2 -chr20 23678991 23679364 1 -chr20 23679763 23679973 1 -chr20 23683338 23683532 1 -chr20 23685112 23685285 1 -chr20 23685785 23686154 1 -chr20 23688118 23688352 1 -chr20 23690750 23691336 1 -chr20 23692721 23693062 1 -chr20 23696511 23696630 1 -chr20 23708925 23709093 1 -chr20 23711894 23711926 1 -chr20 23714567 23714759 1 -chr20 23716879 23717097 1 -chr20 23721413 23721757 1 -chr20 23739335 23739387 1 -chr20 23741940 23741979 1 -chr20 23744895 23745082 1 -chr20 23746482 23746684 1 -chr20 23751882 23752088 1 -chr20 23752452 23753044 1 -chr20 23757456 23757711 1 -chr20 23757749 23757791 1 -chr20 23758504 23758547 1 -chr20 23780336 23780526 1 -chr20 23787182 23787228 1 -chr20 23788209 23788261 1 -chr20 23791697 23791947 1 -chr20 23805519 23805564 1 -chr20 23811775 23811968 1 -chr20 23827973 23828390 1 -chr20 23828452 23828881 1 -chr20 23836617 23836865 1 -chr20 23837711 23837873 1 -chr20 23838891 23839132 1 -chr20 23840214 23840415 1 -chr20 23843237 23843428 1 -chr20 23847058 23847234 1 -chr20 23855019 23855505 1 -chr20 23861976 23862030 1 -chr20 23862893 23863085 1 -chr20 23863085 23863094 2 -chr20 23863094 23863464 1 -chr20 23869302 23869914 1 -chr20 23872285 23872516 1 -chr20 23875083 23875284 1 -chr20 23879259 23879654 1 -chr20 23883390 23883789 1 -chr20 23892437 23892663 1 -chr20 23895102 23895328 1 -chr20 23895446 23895667 1 -chr20 23896412 23896616 1 -chr20 23897287 23897507 1 -chr20 23897575 23897751 1 -chr20 23898629 23898987 1 -chr20 23914690 23914955 1 -chr20 23940216 23940401 1 -chr20 23973437 23974070 1 -chr20 23974183 23974324 1 -chr20 23979963 23980037 1 -chr20 23981628 23981680 1 -chr20 23984319 23984365 1 -chr20 23997127 23997328 1 -chr20 24005325 24005729 1 -chr20 24006458 24006697 1 -chr20 24007651 24007852 1 -chr20 24011856 24012047 1 -chr20 24012047 24012056 2 -chr20 24012056 24012284 1 -chr20 24013465 24013679 1 -chr20 24014113 24014312 1 -chr20 24016069 24016658 1 -chr20 24027647 24027875 1 -chr20 24043029 24043215 1 -chr20 24043535 24043947 1 -chr20 24044562 24044750 1 -chr20 24047047 24047246 1 -chr20 24048424 24048601 1 -chr20 24049103 24049336 1 -chr20 24049580 24049776 1 -chr20 24053382 24053849 1 -chr20 24060998 24061407 1 -chr20 24077681 24078057 1 -chr20 24096386 24096619 1 -chr20 24098743 24098946 1 -chr20 24102647 24102847 1 -chr20 24117387 24117613 1 -chr20 24117613 24117620 2 -chr20 24117620 24117851 1 -chr20 24117877 24118128 1 -chr20 24118664 24118913 1 -chr20 24123436 24123666 1 -chr20 24136058 24136276 1 -chr20 24138866 24139082 1 -chr20 24185567 24185769 1 -chr20 24199477 24199689 1 -chr20 24212107 24212489 1 -chr20 24231499 24231826 1 -chr20 24235168 24235533 1 -chr20 24235823 24236518 1 -chr20 24241756 24241983 1 -chr20 24242253 24242440 1 -chr20 24250692 24251040 1 -chr20 24257638 24257839 1 -chr20 24257839 24257843 2 -chr20 24257843 24258072 1 -chr20 24285465 24285687 1 -chr20 24287267 24287487 1 -chr20 24288046 24288074 1 -chr20 24288074 24288098 2 -chr20 24288098 24288131 1 -chr20 24294769 24294980 1 -chr20 24304863 24305077 1 -chr20 24312471 24312699 1 -chr20 24324003 24324237 1 -chr20 24339698 24340105 1 -chr20 24342259 24342847 1 -chr20 24353478 24353524 1 -chr20 24366004 24366213 1 -chr20 24366449 24366843 1 -chr20 24381185 24381598 1 -chr20 24393331 24393522 1 -chr20 24397003 24397086 1 -chr20 24407941 24408265 1 -chr20 24420565 24420739 1 -chr20 24422306 24422950 1 -chr20 24428048 24428087 1 -chr20 24433278 24433647 1 -chr20 24434566 24434622 1 -chr20 24439703 24439997 1 -chr20 24442056 24442416 1 -chr20 24445185 24445435 1 -chr20 24448135 24448324 1 -chr20 24452607 24452804 1 -chr20 24455240 24455427 1 -chr20 24460365 24460422 1 -chr20 24464037 24464240 1 -chr20 24464653 24464741 1 -chr20 24465143 24465210 1 -chr20 24466532 24466750 1 -chr20 24467786 24467836 1 -chr20 24467949 24468001 1 -chr20 24469398 24469438 1 -chr20 24471257 24471304 1 -chr20 24471850 24472052 1 -chr20 24472494 24472714 1 -chr20 24472921 24473269 1 -chr20 24473483 24473697 1 -chr20 24474012 24474234 1 -chr20 24475391 24475565 1 -chr20 24476793 24476998 1 -chr20 24479114 24479297 1 -chr20 24498870 24498928 1 -chr20 24501529 24501685 1 -chr20 24501786 24501958 1 -chr20 24503259 24503617 1 -chr20 24507338 24507571 1 -chr20 24509965 24510141 1 -chr20 24515148 24515201 1 -chr20 24530233 24530386 1 -chr20 24535111 24535511 1 -chr20 24535940 24536241 1 -chr20 24537358 24537418 1 -chr20 24542875 24542927 1 -chr20 24542927 24542936 2 -chr20 24542936 24543094 1 -chr20 24544345 24544589 1 -chr20 24547327 24547520 1 -chr20 24553841 24554013 1 -chr20 24554372 24554548 1 -chr20 24554991 24555045 1 -chr20 24576802 24576995 1 -chr20 24579533 24579737 1 -chr20 24579744 24580008 1 -chr20 24581403 24581618 1 -chr20 24585471 24585679 1 -chr20 24585790 24585985 1 -chr20 24586974 24587044 1 -chr20 24589432 24589608 1 -chr20 24589608 24589627 2 -chr20 24589627 24590072 1 -chr20 24594453 24594609 1 -chr20 24595436 24595633 1 -chr20 24604699 24604777 1 -chr20 24607485 24607530 1 -chr20 24607935 24608142 1 -chr20 24609498 24609686 1 -chr20 24609757 24609956 1 -chr20 24611148 24611516 1 -chr20 24613052 24613244 1 -chr20 24615363 24615573 1 -chr20 24615607 24616040 1 -chr20 24618028 24618182 1 -chr20 24627441 24627851 1 -chr20 24628314 24628587 1 -chr20 24628988 24629045 1 -chr20 24630936 24631124 1 -chr20 24631621 24631802 1 -chr20 24633047 24633444 1 -chr20 24637735 24638128 1 -chr20 24640748 24640913 1 -chr20 24641807 24641975 1 -chr20 24651358 24651740 1 -chr20 24652969 24653034 1 -chr20 24656326 24656563 1 -chr20 24657388 24657627 1 -chr20 24659501 24659716 1 -chr20 24663215 24663456 1 -chr20 24664030 24664246 1 -chr20 24664466 24664671 1 -chr20 24665003 24665214 1 -chr20 24665453 24665681 1 -chr20 24667410 24667466 1 -chr20 24667510 24667728 1 -chr20 24668385 24668624 1 -chr20 24673518 24674123 1 -chr20 24681092 24681145 1 -chr20 24681892 24682130 1 -chr20 24685884 24686093 1 -chr20 24694201 24694546 1 -chr20 24694546 24694558 2 -chr20 24694558 24694601 1 -chr20 24694991 24695210 1 -chr20 24695872 24696241 1 -chr20 24696325 24696494 1 -chr20 24698888 24699263 1 -chr20 24702606 24702794 1 -chr20 24703327 24703536 1 -chr20 24705160 24705336 1 -chr20 24713606 24713800 1 -chr20 24714461 24714508 1 -chr20 24714569 24714809 1 -chr20 24723834 24724007 1 -chr20 24729111 24729514 1 -chr20 24733067 24733252 1 -chr20 24734945 24735182 1 -chr20 24737024 24737410 1 -chr20 24737479 24737717 1 -chr20 24737828 24738220 1 -chr20 24738633 24738698 1 -chr20 24738980 24739353 1 -chr20 24741336 24741511 1 -chr20 24741557 24741765 1 -chr20 24742813 24743017 1 -chr20 24748181 24748348 1 -chr20 24764465 24764874 1 -chr20 24768906 24769152 1 -chr20 24773316 24773508 1 -chr20 24776517 24776738 1 -chr20 24782879 24782959 1 -chr20 24782978 24783185 1 -chr20 24783837 24784053 1 -chr20 24785279 24785494 1 -chr20 24789472 24789909 1 -chr20 24790344 24790509 1 -chr20 24792330 24792557 1 -chr20 24796073 24796308 1 -chr20 24796993 24797170 1 -chr20 24798039 24798837 1 -chr20 24800986 24801142 1 -chr20 24801748 24802326 1 -chr20 24802735 24802799 1 -chr20 24805823 24805987 1 -chr20 24806304 24806365 1 -chr20 24809436 24809496 1 -chr20 24810771 24811014 1 -chr20 24811583 24811905 1 -chr20 24816060 24816288 1 -chr20 24816431 24816637 1 -chr20 24818057 24818250 1 -chr20 24821486 24821642 1 -chr20 24824074 24824474 1 -chr20 24824481 24824876 1 -chr20 24835490 24836117 1 -chr20 24838086 24838354 1 -chr20 24838747 24839008 1 -chr20 24839532 24839717 1 -chr20 24840193 24840606 1 -chr20 24860878 24860909 1 -chr20 24864114 24864322 1 -chr20 24873040 24873248 1 -chr20 24875060 24875295 1 -chr20 24881110 24881309 1 -chr20 24881722 24881881 1 -chr20 24891503 24891726 1 -chr20 24892470 24892615 1 -chr20 24892738 24892851 1 -chr20 24894774 24895008 1 -chr20 24896568 24896765 1 -chr20 24899049 24899169 1 -chr20 24903383 24903578 1 -chr20 24904583 24904669 1 -chr20 24904917 24905150 1 -chr20 24905150 24905159 2 -chr20 24905159 24905225 1 -chr20 24910054 24910275 1 -chr20 24910471 24910703 1 -chr20 24910907 24910960 1 -chr20 24914610 24914820 1 -chr20 24915049 24915582 1 -chr20 24916487 24916753 1 -chr20 24917135 24917345 1 -chr20 24933406 24933801 1 -chr20 24944675 24944730 1 -chr20 24947980 24948185 1 -chr20 24950517 24950686 1 -chr20 24992275 24992696 1 -chr20 24998791 24999000 1 -chr20 24999138 24999391 1 -chr20 24999396 24999798 1 -chr20 24999798 24999807 2 -chr20 24999807 24999855 1 -chr20 25001831 25002030 1 -chr20 25005280 25005506 1 -chr20 25008541 25008725 1 -chr20 25008926 25009021 1 -chr20 25009940 25010002 1 -chr20 25010405 25010575 1 -chr20 25010649 25010715 1 -chr20 25013661 25013712 1 -chr20 25015897 25016049 1 -chr20 25016077 25016149 1 -chr20 25018384 25018588 1 -chr20 25023662 25023902 1 -chr20 25024071 25024313 1 -chr20 25024316 25024445 1 -chr20 25024632 25024848 1 -chr20 25025151 25025402 1 -chr20 25029988 25030055 1 -chr20 25030498 25030689 1 -chr20 25031782 25032024 1 -chr20 25032605 25032648 1 -chr20 25033608 25033817 1 -chr20 25037842 25038290 1 -chr20 25039037 25039313 1 -chr20 25039694 25039884 1 -chr20 25039920 25039968 1 -chr20 25040662 25040820 1 -chr20 25043452 25043621 1 -chr20 25043880 25044026 1 -chr20 25052279 25052478 1 -chr20 25055893 25056138 1 -chr20 25056249 25056612 1 -chr20 25057636 25057687 1 -chr20 25058549 25058613 1 -chr20 25061905 25062107 1 -chr20 25062297 25062745 1 -chr20 25062842 25063235 1 -chr20 25063583 25063625 1 -chr20 25071546 25071891 1 -chr20 25074348 25074731 1 -chr20 25076283 25076481 1 -chr20 25077817 25077861 1 -chr20 25078679 25078898 1 -chr20 25079475 25079637 1 -chr20 25081213 25081737 1 -chr20 25082592 25082660 1 -chr20 25083060 25083224 1 -chr20 25085057 25085127 1 -chr20 25086925 25086966 1 -chr20 25088883 25088969 1 -chr20 25089684 25089895 1 -chr20 25090622 25090808 1 -chr20 25091342 25091555 1 -chr20 25091665 25091876 1 -chr20 25091876 25091878 2 -chr20 25091878 25092104 1 -chr20 25100723 25100777 1 -chr20 25101168 25101565 1 -chr20 25104941 25105146 1 -chr20 25105694 25105752 1 -chr20 25108601 25108677 1 -chr20 25110296 25110514 1 -chr20 25115206 25115394 1 -chr20 25116543 25116939 1 -chr20 25116939 25116948 2 -chr20 25116948 25117225 1 -chr20 25120754 25120793 1 -chr20 25127940 25128172 1 -chr20 25133406 25133597 1 -chr20 25133605 25133766 1 -chr20 25134548 25134611 1 -chr20 25135863 25136024 1 -chr20 25136077 25136200 1 -chr20 25140092 25140293 1 -chr20 25141676 25141726 1 -chr20 25142176 25142227 1 -chr20 25144296 25144506 1 -chr20 25145845 25146053 1 -chr20 25157518 25157763 1 -chr20 25161049 25161141 1 -chr20 25175861 25176031 1 -chr20 25176124 25176380 1 -chr20 25176706 25176761 1 -chr20 25176829 25177032 1 -chr20 25181361 25181426 1 -chr20 25182495 25182530 1 -chr20 25188798 25189012 1 -chr20 25189058 25189221 1 -chr20 25240820 25241200 1 -chr20 25255827 25255871 1 -chr20 25262064 25262273 1 -chr20 25295814 25296114 1 -chr20 25301521 25301790 1 -chr20 25313655 25313701 1 -chr20 25316224 25316262 1 -chr20 25383924 25384014 1 -chr20 25394955 25395126 1 -chr20 25395760 25395963 1 -chr20 25399286 25399481 1 -chr20 25399690 25399753 1 -chr20 25402956 25403018 1 -chr20 25403443 25403810 1 -chr20 25419905 25419950 1 -chr20 25432601 25432675 1 -chr20 25449612 25449850 1 -chr20 25455725 25455780 1 -chr20 25462270 25462479 1 -chr20 25463258 25463427 1 -chr20 25468166 25468251 1 -chr20 25468516 25468577 1 -chr20 25468670 25468824 1 -chr20 25468936 25468975 1 -chr20 25469258 25469407 1 -chr20 25473060 25473120 1 -chr20 25473156 25473250 1 -chr20 25474016 25474423 1 -chr20 25481508 25481725 1 -chr20 25481904 25482110 1 -chr20 25487655 25487891 1 -chr20 25487893 25488072 1 -chr20 25490420 25490475 1 -chr20 25491795 25492174 1 -chr20 25493266 25493329 1 -chr20 25496393 25496589 1 -chr20 25500134 25500185 1 -chr20 25503633 25503841 1 -chr20 25503929 25504142 1 -chr20 25505565 25505765 1 -chr20 25507691 25507895 1 -chr20 25508824 25509021 1 -chr20 25509693 25510024 1 -chr20 25512832 25513057 1 -chr20 25513469 25513633 1 -chr20 25514487 25514701 1 -chr20 25514798 25514987 1 -chr20 25516867 25517098 1 -chr20 25518330 25518473 1 -chr20 25520027 25520218 1 -chr20 25521195 25521363 1 -chr20 25524125 25524328 1 -chr20 25532608 25532674 1 -chr20 25533027 25533079 1 -chr20 25533224 25533583 1 -chr20 25533583 25533592 2 -chr20 25533592 25533988 1 -chr20 25535401 25535622 1 -chr20 25537425 25537651 1 -chr20 25538090 25538159 1 -chr20 25539011 25539206 1 -chr20 25541458 25541791 1 -chr20 25541919 25542093 1 -chr20 25543912 25543961 1 -chr20 25544292 25544475 1 -chr20 25544994 25545189 1 -chr20 25545195 25545437 1 -chr20 25547154 25547341 1 -chr20 25548228 25548433 1 -chr20 25552612 25552676 1 -chr20 25558258 25558328 1 -chr20 25561619 25561648 1 -chr20 25563569 25563935 1 -chr20 25565849 25566056 1 -chr20 25571117 25571366 1 -chr20 25571980 25572570 1 -chr20 25575202 25575259 1 -chr20 25578533 25578594 1 -chr20 25579054 25579227 1 -chr20 25592857 25592921 1 -chr20 25594226 25594281 1 -chr20 25595351 25595503 1 -chr20 25596608 25596794 1 -chr20 25599956 25600145 1 -chr20 25600700 25600742 1 -chr20 25601755 25601983 1 -chr20 25604624 25604827 1 -chr20 25624134 25624191 1 -chr20 25627988 25628086 1 -chr20 25629234 25629356 1 -chr20 25629588 25630014 1 -chr20 25639782 25639829 1 -chr20 25642111 25642140 1 -chr20 25643015 25643227 1 -chr20 25649562 25649886 1 -chr20 25665112 25665179 1 -chr20 25696894 25697021 1 -chr20 25702738 25702838 1 -chr20 25704898 25705086 1 -chr20 25709710 25709904 1 -chr20 25710122 25710197 1 -chr20 25710919 25711083 1 -chr20 25711114 25711294 1 -chr20 25713868 25714116 1 -chr20 25714167 25714361 1 -chr20 25719351 25719446 1 -chr20 25721207 25721436 1 -chr20 25727652 25727886 1 -chr20 25728057 25728115 1 -chr20 25760146 25760190 1 -chr20 25763569 25763738 1 -chr20 25763799 25763947 1 -chr20 25764634 25764836 1 -chr20 25764998 25765192 1 -chr20 25765193 25765401 1 -chr20 25766243 25766296 1 -chr20 25771599 25771812 1 -chr20 25771965 25772065 1 -chr20 25774623 25774658 1 -chr20 25774975 25775028 1 -chr20 25776169 25776225 1 -chr20 25776424 25776500 1 -chr20 25778243 25778418 1 -chr20 25780441 25780694 1 -chr20 25782746 25782791 1 -chr20 25783213 25783411 1 -chr20 25784388 25784645 1 -chr20 25786160 25786335 1 -chr20 25787165 25787367 1 -chr20 25787872 25787946 1 -chr20 25788441 25788628 1 -chr20 25789476 25789516 1 -chr20 25789684 25789729 1 -chr20 25795362 25795590 1 -chr20 25795885 25795946 1 -chr20 25796917 25797157 1 -chr20 25798009 25798074 1 -chr20 25798088 25798125 1 -chr20 25799455 25799656 1 -chr20 25801979 25802220 1 -chr20 25803249 25803505 1 -chr20 25812207 25812406 1 -chr20 25813757 25813813 1 -chr20 25830570 25830757 1 -chr20 25833688 25833921 1 -chr20 25836533 25836768 1 -chr20 25844813 25845033 1 -chr20 25845489 25845832 1 -chr20 25848263 25848494 1 -chr20 25848560 25848611 1 -chr20 25852783 25852994 1 -chr20 25856382 25856567 1 -chr20 25857239 25857418 1 -chr20 25860428 25860490 1 -chr20 25861641 25861887 1 -chr20 25866289 25866351 1 -chr20 25879296 25879477 1 -chr20 25879944 25880145 1 -chr20 25880758 25881007 1 -chr20 25881221 25881407 1 -chr20 25883878 25884058 1 -chr20 25887903 25888122 1 -chr20 25901774 25901840 1 -chr20 25905580 25905790 1 -chr20 25908142 25908352 1 -chr20 25936413 25936644 1 -chr20 25949933 25950175 1 -chr20 25960031 25960258 1 -chr20 25964346 25964563 1 -chr20 25967244 25967589 1 -chr20 25979982 25980140 1 -chr20 25983759 25984050 1 -chr20 25986101 25986166 1 -chr20 25987621 25987752 1 -chr20 25993466 25993530 1 -chr20 25998110 25998296 1 -chr20 26006174 26006228 1 -chr20 26009855 26010247 1 -chr20 26010247 26010254 2 -chr20 26010254 26010451 1 -chr20 26010925 26011164 1 -chr20 26016328 26016483 1 -chr20 26016644 26016695 1 -chr20 26016987 26017059 1 -chr20 26020875 26020941 1 -chr20 26025155 26025201 1 -chr20 26025406 26025618 1 -chr20 26032869 26033242 1 -chr20 26034498 26034664 1 -chr20 26035230 26035298 1 -chr20 26039989 26040240 1 -chr20 26042018 26042420 1 -chr20 26042489 26042719 1 -chr20 26043496 26043543 1 -chr20 26044726 26044939 1 -chr20 26046482 26046649 1 -chr20 26052500 26052720 1 -chr20 26055019 26055323 1 -chr20 26058667 26058835 1 -chr20 26066640 26066815 1 -chr20 26067350 26067529 1 -chr20 26069243 26069317 1 -chr20 26070149 26070307 1 -chr20 26070363 26070756 1 -chr20 26071012 26071260 1 -chr20 26073113 26073158 1 -chr20 26074191 26074381 1 -chr20 26077323 26077539 1 -chr20 26083849 26084253 1 -chr20 26091113 26091321 1 -chr20 26092117 26092292 1 -chr20 26094372 26094571 1 -chr20 26106853 26106918 1 -chr20 26113216 26113559 1 -chr20 26120519 26120690 1 -chr20 26120976 26121141 1 -chr20 26137080 26137260 1 -chr20 26139768 26139971 1 -chr20 26149349 26149413 1 -chr20 26155440 26155670 1 -chr20 26159326 26159437 1 -chr20 26209803 26209854 1 -chr20 26237046 26237091 1 -chr20 26245044 26245096 1 -chr20 26247614 26247818 1 -chr20 26250560 26250597 1 -chr20 26254946 26255159 1 -chr20 26260736 26260800 1 -chr20 26263498 26263582 1 -chr20 26270502 26270714 1 -chr20 26272135 26272292 1 -chr20 26276656 26276712 1 -chr20 26284284 26284392 1 -chr20 26286533 26286924 1 -chr20 26288931 26289299 1 -chr20 26290901 26291263 1 -chr20 26301296 26301497 1 -chr20 26302893 26303144 1 -chr20 26304799 26304834 1 -chr20 26305921 26306129 1 -chr20 26306638 26306708 1 -chr20 26307091 26307487 1 -chr20 26314918 26315267 1 -chr20 26316490 26316550 1 -chr20 26316668 26316865 1 -chr20 26317072 26317297 1 -chr20 26317469 26317703 1 -chr20 26318419 26318474 1 -chr20 26320802 26321029 1 -chr20 26322134 26322353 1 -chr20 26322639 26322917 1 -chr20 26323609 26323957 1 -chr20 26324748 26324961 1 -chr20 26325234 26325414 1 -chr20 26326382 26326643 1 -chr20 26331602 26331892 1 -chr20 26333514 26333604 1 -chr20 26341003 26341225 1 -chr20 26342913 26342961 1 -chr20 26345445 26345615 1 -chr20 26348874 26348943 1 -chr20 26349073 26349147 1 -chr20 26353909 26354271 1 -chr20 26355094 26355491 1 -chr20 26356768 26356805 1 -chr20 26360059 26360279 1 -chr20 26363658 26363962 1 -chr20 26366547 26366783 1 -chr20 26368154 26368303 1 -chr20 26371672 26371709 1 -chr20 26375581 26375773 1 -chr20 26375896 26376105 1 -chr20 26376419 26376630 1 -chr20 26377950 26378118 1 -chr20 26378270 26378468 1 -chr20 26378468 26378491 2 -chr20 26378491 26378703 1 -chr20 26380231 26380548 1 -chr20 26382810 26383200 1 -chr20 26383374 26383440 1 -chr20 26437070 26437228 1 -chr20 26437539 26437625 1 -chr20 26441278 26441383 1 -chr20 26442128 26442503 1 -chr20 26443760 26444042 1 -chr20 26445109 26445283 1 -chr20 26445356 26445561 1 -chr20 26446052 26446373 1 -chr20 26446521 26446717 1 -chr20 26447588 26447811 1 -chr20 26448236 26448662 1 -chr20 26452769 26452981 1 -chr20 26454079 26454431 1 -chr20 26457009 26457212 1 -chr20 26458381 26458775 1 -chr20 26461899 26461944 1 -chr20 26465537 26465759 1 -chr20 26466314 26466725 1 -chr20 26467184 26467359 1 -chr20 26470239 26470438 1 -chr20 26472965 26473201 1 -chr20 26475870 26476212 1 -chr20 26477490 26477885 1 -chr20 26478591 26478671 1 -chr20 26480406 26480588 1 -chr20 26480846 26481013 1 -chr20 26481384 26481734 1 -chr20 26482987 26483376 1 -chr20 26485024 26485173 1 -chr20 26485550 26485777 1 -chr20 26486198 26486644 1 -chr20 26486706 26487076 1 -chr20 26487940 26488154 1 -chr20 26488764 26489087 1 -chr20 26493468 26493519 1 -chr20 26497289 26497471 1 -chr20 26498257 26498470 1 -chr20 26499174 26499377 1 -chr20 26501295 26501675 1 -chr20 26503154 26503387 1 -chr20 26504020 26504173 1 -chr20 26504404 26504659 1 -chr20 26506882 26507131 1 -chr20 26509188 26509416 1 -chr20 26509684 26509903 1 -chr20 26513190 26513590 1 -chr20 26515715 26516147 1 -chr20 26516748 26516976 1 -chr20 26522677 26522865 1 -chr20 26522946 26522990 1 -chr20 26524698 26525088 1 -chr20 26527814 26528143 1 -chr20 26530347 26530715 1 -chr20 26531010 26531094 1 -chr20 26531134 26531326 1 -chr20 26533684 26533952 1 -chr20 26535269 26535334 1 -chr20 26535967 26536191 1 -chr20 26540210 26540405 1 -chr20 26541426 26541627 1 -chr20 26542749 26542907 1 -chr20 26543652 26543854 1 -chr20 26546868 26547355 1 -chr20 26547577 26547752 1 -chr20 26551441 26551723 1 -chr20 26553688 26553909 1 -chr20 26554945 26555284 1 -chr20 26558270 26558450 1 -chr20 26558972 26559152 1 -chr20 26564220 26564393 1 -chr20 26564925 26564968 1 -chr20 26566586 26566827 1 -chr20 26571350 26571547 1 -chr20 26576148 26576336 1 -chr20 26579355 26579552 1 -chr20 26579928 26580135 1 -chr20 26582906 26583175 1 -chr20 26583819 26584001 1 -chr20 26587355 26587764 1 -chr20 26589857 26590214 1 -chr20 26598981 26599179 1 -chr20 26601575 26601765 1 -chr20 26602789 26602971 1 -chr20 26603975 26604158 1 -chr20 26610280 26610691 1 -chr20 26614437 26614523 1 -chr20 26622601 26622655 1 -chr20 26624917 26625384 1 -chr20 26635860 26636015 1 -chr20 26660128 26660432 1 -chr20 26671632 26671814 1 -chr20 26676737 26677228 1 -chr20 26677340 26677720 1 -chr20 26686379 26686587 1 -chr20 26695827 26696223 1 -chr20 26726036 26726252 1 -chr20 26736654 26736866 1 -chr20 26754966 26755196 1 -chr20 26767465 26767690 1 -chr20 26782276 26782332 1 -chr20 26806421 26806465 1 -chr20 26818984 26819211 1 -chr20 26829558 26829753 1 -chr20 26839374 26839611 1 -chr20 26844578 26845026 1 -chr20 26899046 26899195 1 -chr20 26912497 26912870 1 -chr20 26918610 26918752 1 -chr20 26959606 26959760 1 -chr20 26975163 26975516 1 -chr20 26985361 26985420 1 -chr20 26995410 26995794 1 -chr20 27014336 27014822 1 -chr20 27018747 27018996 1 -chr20 27037779 27037980 1 -chr20 27064991 27065138 1 -chr20 27082930 27083118 1 -chr20 27108494 27108527 1 -chr20 27166383 27166448 1 -chr20 27192424 27192457 1 -chr20 27205475 27205682 1 -chr20 27217182 27217219 1 -chr20 27227142 27227626 1 -chr20 27247740 27248109 1 -chr20 27250412 27250466 1 -chr20 27250692 27251072 1 -chr20 27254444 27254688 1 -chr20 27276221 27276335 1 -chr20 27295249 27295295 1 -chr20 27303913 27304119 1 -chr20 27332492 27332965 1 -chr20 27362688 27362929 1 -chr20 27367022 27367073 1 -chr20 27383656 27383853 1 -chr20 27390377 27390725 1 -chr20 27392319 27392517 1 -chr20 27405391 27405594 1 -chr20 27422022 27422249 1 -chr20 27428603 27428911 1 -chr20 27446793 27446959 1 -chr20 27455567 27455657 1 -chr20 27469844 27469973 1 -chr20 27479846 27480241 1 -chr20 27496618 27497002 1 -chr20 27508577 27508741 1 -chr20 27523596 27523639 1 -chr20 27537116 27537490 1 -chr20 27582995 27583444 1 -chr20 27599317 27599486 1 -chr20 27602479 27602524 1 -chr20 27661748 27662135 1 -chr20 27682174 27682540 1 -chr20 27695680 27695856 1 -chr20 27721048 27721257 1 -chr20 27731119 27731356 1 -chr20 27740825 27741031 1 -chr20 27741905 27742393 1 -chr20 27795445 27795619 1 -chr20 27806547 27806709 1 -chr20 27822047 27822265 1 -chr20 27843972 27844022 1 -chr20 27844994 27845408 1 -chr20 27850273 27850675 1 -chr20 27870788 27870983 1 -chr20 27881449 27881839 1 -chr20 27885811 27886039 1 -chr20 27916046 27916252 1 -chr20 27941722 27941945 1 -chr20 27964846 27965061 1 -chr20 27991758 27991814 1 -chr20 28000275 28000513 1 -chr20 28038804 28039205 1 -chr20 28044197 28044503 1 -chr20 28045758 28045820 1 -chr20 28049679 28050028 1 -chr20 28051429 28051598 1 -chr20 28053107 28053146 1 -chr20 28069954 28069989 1 -chr20 28086467 28086670 1 -chr20 28110135 28110368 1 -chr20 28115128 28115353 1 -chr20 28116142 28116347 1 -chr20 28180716 28180760 1 -chr20 28180760 28180769 2 -chr20 28180769 28180809 1 -chr20 28183154 28183259 1 -chr20 28200465 28200906 1 -chr20 28201143 28201346 1 -chr20 28213888 28214074 1 -chr20 28215496 28215741 1 -chr20 28216642 28216882 1 -chr20 28227568 28227953 1 -chr20 28279618 28279869 1 -chr20 28281127 28281307 1 -chr20 28318510 28318558 1 -chr20 28330347 28330724 1 -chr20 28342523 28342570 1 -chr20 28343783 28344175 1 -chr20 28385629 28385977 1 -chr20 28403139 28403367 1 -chr20 28455737 28456061 1 -chr20 28462340 28462762 1 -chr20 28494841 28494901 1 -chr20 28498117 28498322 1 -chr20 28505873 28506108 1 -chr20 28507013 28507198 1 -chr20 28507379 28507661 1 -chr20 28507776 28507970 1 -chr20 28509013 28509090 1 -chr20 28517824 28518100 1 -chr20 28521808 28521843 1 -chr20 28526865 28527222 1 -chr20 28530950 28531172 1 -chr20 28537263 28537467 1 -chr20 28538276 28538497 1 -chr20 28542490 28542854 1 -chr20 28545656 28545855 1 -chr20 28550832 28551030 1 -chr20 28553355 28553745 1 -chr20 28554355 28554749 1 -chr20 28561484 28561561 1 -chr20 28561627 28561940 1 -chr20 28562381 28562577 1 -chr20 28574399 28574459 1 -chr20 28574556 28574742 1 -chr20 28580011 28580154 1 -chr20 28581040 28581090 1 -chr20 28583902 28584124 1 -chr20 28585914 28586126 1 -chr20 28602933 28603432 1 -chr20 28604879 28605077 1 -chr20 28611681 28611870 1 -chr20 28621294 28621496 1 -chr20 28622546 28622602 1 -chr20 28623911 28624097 1 -chr20 28625691 28625728 1 -chr20 28626386 28626452 1 -chr20 28634966 28635170 1 -chr20 28636815 28636854 1 -chr20 28639463 28639700 1 -chr20 28640619 28640686 1 -chr20 28642452 28642511 1 -chr20 28642607 28642759 1 -chr20 28642866 28643083 1 -chr20 28703654 28703921 1 -chr20 28726069 28726432 1 -chr20 28731178 28731224 1 -chr20 28731268 28731353 1 -chr20 28737232 28737279 1 -chr20 28740425 28740678 1 -chr20 28776750 28776944 1 -chr20 28785737 28786167 1 -chr20 28789197 28789396 1 -chr20 28789943 28790332 1 -chr20 28814603 28814648 1 -chr20 28826426 28826617 1 -chr20 28827626 28827835 1 -chr20 28829066 28829287 1 -chr20 28865459 28865532 1 -chr20 28869612 28869812 1 -chr20 28874518 28874696 1 -chr20 28885500 28885571 1 -chr20 28900711 28900837 1 -chr20 28915309 28915486 1 -chr20 28930442 28930588 1 -chr20 28938187 28938222 1 -chr20 28942311 28942468 1 -chr20 28950010 28950310 1 -chr20 28950389 28950595 1 -chr20 28957219 28957248 1 -chr20 29013767 29014137 1 -chr20 29016303 29016358 1 -chr20 29016638 29016933 1 -chr20 29016933 29016953 2 -chr20 29016953 29017136 1 -chr20 29025910 29025999 1 -chr20 29026115 29026202 1 -chr20 29028372 29028571 1 -chr20 29029439 29029677 1 -chr20 29030622 29030890 1 -chr20 29032238 29032323 1 -chr20 29040326 29040512 1 -chr20 29043146 29043506 1 -chr20 29047204 29047689 1 -chr20 29048244 29048667 1 -chr20 29049073 29049271 1 -chr20 29051283 29051350 1 -chr20 29053944 29054154 1 -chr20 29057432 29057661 1 -chr20 29059364 29059441 1 -chr20 29060823 29060894 1 -chr20 29099165 29099224 1 -chr20 29099597 29100015 1 -chr20 29103527 29103724 1 -chr20 29104369 29104420 1 -chr20 29108838 29108990 1 -chr20 29110791 29111001 1 -chr20 29120862 29121046 1 -chr20 29122372 29122413 1 -chr20 29124356 29124540 1 -chr20 29124648 29124882 1 -chr20 29216361 29216489 1 -chr20 29216665 29216859 1 -chr20 29231081 29231260 1 -chr20 29236360 29236617 1 -chr20 29236617 29236626 2 -chr20 29236626 29236805 1 -chr20 29254711 29254909 1 -chr20 29265113 29265325 1 -chr20 29267481 29267680 1 -chr20 29299185 29299268 1 -chr20 29306040 29306279 1 -chr20 29308112 29308141 1 -chr20 29317839 29318023 1 -chr20 29321265 29321480 1 -chr20 29321480 29321489 2 -chr20 29321489 29321885 1 -chr20 29322291 29322455 1 -chr20 29326493 29326555 1 -chr20 29327723 29327848 1 -chr20 29327876 29328269 1 -chr20 29334556 29334803 1 -chr20 29344972 29345326 1 -chr20 29349417 29349512 1 -chr20 29350261 29350502 1 -chr20 29351885 29351913 1 -chr20 29363761 29363992 1 -chr20 29371063 29371235 1 -chr20 29371362 29371517 1 -chr20 29374884 29374918 1 -chr20 29374918 29374927 2 -chr20 29374927 29375098 1 -chr20 29375610 29375991 1 -chr20 29376501 29376684 1 -chr20 29390696 29391171 1 -chr20 29391930 29392199 1 -chr20 29401035 29401183 1 -chr20 29401183 29401202 2 -chr20 29401202 29401265 1 -chr20 29414277 29414322 1 -chr20 29415796 29415851 1 -chr20 29416352 29416388 1 -chr20 29416388 29416408 2 -chr20 29416408 29416533 1 -chr20 29417086 29417240 1 -chr20 29429099 29429251 1 -chr20 29429251 29429270 2 -chr20 29429270 29429457 1 -chr20 29430631 29430825 1 -chr20 29437036 29437211 1 -chr20 29438757 29439236 1 -chr20 29440518 29440747 1 -chr20 29445674 29445877 1 -chr20 29451861 29451906 1 -chr20 29452201 29452245 1 -chr20 29461221 29461408 1 -chr20 29461429 29461584 1 -chr20 29464176 29464356 1 -chr20 29468469 29468532 1 -chr20 29471612 29471669 1 -chr20 29478229 29478462 1 -chr20 29479114 29479287 1 -chr20 29480292 29480501 1 -chr20 29482592 29482766 1 -chr20 29483544 29483748 1 -chr20 29486259 29486304 1 -chr20 29486366 29486737 1 -chr20 29513485 29513672 1 -chr20 29514486 29514583 1 -chr20 29515080 29515256 1 -chr20 29529418 29529643 1 -chr20 29531220 29531423 1 -chr20 29536562 29536991 1 -chr20 29539435 29539644 1 -chr20 29541633 29541695 1 -chr20 29544253 29544625 1 -chr20 29552125 29552415 1 -chr20 29552415 29552424 2 -chr20 29552424 29552474 1 -chr20 29553071 29553270 1 -chr20 29554325 29554376 1 -chr20 29555523 29555751 1 -chr20 29555833 29556018 1 -chr20 29558585 29558764 1 -chr20 29561157 29561209 1 -chr20 29562016 29562228 1 -chr20 29564127 29564301 1 -chr20 29564301 29564318 2 -chr20 29564318 29564372 1 -chr20 29569644 29569683 1 -chr20 29572754 29572939 1 -chr20 29573365 29573539 1 -chr20 29573539 29573561 2 -chr20 29573561 29573784 1 -chr20 29573794 29573988 1 -chr20 29576527 29576580 1 -chr20 29579208 29579444 1 -chr20 29580088 29580303 1 -chr20 29625139 29625317 1 -chr20 29626504 29626695 1 -chr20 29637577 29637739 1 -chr20 29637824 29638037 1 -chr20 29646079 29646240 1 -chr20 29661792 29662031 1 -chr20 29663395 29663627 1 -chr20 29672201 29672559 1 -chr20 29677176 29677559 1 -chr20 29679731 29679932 1 -chr20 29681456 29681632 1 -chr20 29683619 29683794 1 -chr20 29689177 29689227 1 -chr20 29691688 29691901 1 -chr20 29692121 29692164 1 -chr20 29694848 29695174 1 -chr20 29700280 29700440 1 -chr20 29715278 29715686 1 -chr20 29716460 29716525 1 -chr20 29721069 29721125 1 -chr20 29722498 29722524 1 -chr20 29723038 29723080 1 -chr20 29723978 29724044 1 -chr20 29729035 29729492 1 -chr20 29735923 29735977 1 -chr20 29752822 29752905 1 -chr20 29755437 29755464 1 -chr20 29757118 29757837 1 -chr20 29759980 29760015 1 -chr20 29762175 29762211 1 -chr20 29763874 29764083 1 -chr20 29764338 29764523 1 -chr20 29765051 29765121 1 -chr20 29766062 29766426 1 -chr20 29768855 29769065 1 -chr20 29770677 29770731 1 -chr20 29771280 29771470 1 -chr20 29772003 29772202 1 -chr20 29777642 29778003 1 -chr20 29787483 29787868 1 -chr20 29793202 29793399 1 -chr20 29793676 29793875 1 -chr20 29795107 29795151 1 -chr20 29796807 29797041 1 -chr20 29803217 29803454 1 -chr20 29805454 29805671 1 -chr20 29807599 29807651 1 -chr20 29811808 29812179 1 -chr20 29814569 29814609 1 -chr20 29814876 29815060 1 -chr20 29815916 29816140 1 -chr20 29819707 29819962 1 -chr20 29820365 29820529 1 -chr20 29820798 29820841 1 -chr20 29821049 29821258 1 -chr20 29822538 29822939 1 -chr20 29823448 29823670 1 -chr20 29823729 29823981 1 -chr20 29824324 29824366 1 -chr20 29828705 29828928 1 -chr20 29829821 29830041 1 -chr20 29834789 29834896 1 -chr20 29837405 29837594 1 -chr20 29855911 29855992 1 -chr20 29864622 29864690 1 -chr20 29868059 29868472 1 -chr20 29868647 29868725 1 -chr20 29869338 29869392 1 -chr20 29870606 29870789 1 -chr20 29871841 29872005 1 -chr20 29874245 29874281 1 -chr20 29879722 29879793 1 -chr20 29881243 29881305 1 -chr20 29881322 29881474 1 -chr20 29883236 29883629 1 -chr20 29888160 29888189 1 -chr20 29898039 29898527 1 -chr20 29901289 29901464 1 -chr20 29901464 29901473 2 -chr20 29901473 29901856 1 -chr20 29906913 29906969 1 -chr20 29910167 29910518 1 -chr20 29921039 29921081 1 -chr20 29943967 29944318 1 -chr20 29956185 29956402 1 -chr20 29972604 29972655 1 -chr20 29977964 29978020 1 -chr20 29978128 29978341 1 -chr20 29980015 29980093 1 -chr20 29985077 29985495 1 -chr20 29985809 29985929 1 -chr20 30015974 30016337 1 -chr20 30028501 30028945 1 -chr20 30091045 30091097 1 -chr20 30121474 30121694 1 -chr20 30147350 30147395 1 -chr20 30149512 30149831 1 -chr20 30155486 30155720 1 -chr20 30156286 30156375 1 -chr20 30161661 30161701 1 -chr20 30166893 30166981 1 -chr20 30169221 30169554 1 -chr20 30170390 30170445 1 -chr20 30171997 30172061 1 -chr20 30174476 30174557 1 -chr20 30175950 30176161 1 -chr20 30177241 30177619 1 -chr20 30183452 30183602 1 -chr20 30193952 30194137 1 -chr20 30195396 30195629 1 -chr20 30204652 30204715 1 -chr20 30204975 30205171 1 -chr20 30236977 30237244 1 -chr20 30237808 30238044 1 -chr20 30241842 30242320 1 -chr20 30256390 30256527 1 -chr20 30269693 30269933 1 -chr20 30282335 30282533 1 -chr20 30286412 30286775 1 -chr20 30291694 30291750 1 -chr20 30295288 30295674 1 -chr20 30296091 30296172 1 -chr20 30297575 30297667 1 -chr20 30298059 30298227 1 -chr20 30303265 30303436 1 -chr20 30303596 30303758 1 -chr20 30304919 30305148 1 -chr20 30306454 30306665 1 -chr20 30306896 30307135 1 -chr20 30307152 30307407 1 -chr20 30308765 30308923 1 -chr20 30309827 30310229 1 -chr20 30312550 30312768 1 -chr20 30314015 30314218 1 -chr20 30315177 30315222 1 -chr20 30315249 30315289 1 -chr20 30332160 30332209 1 -chr20 30332512 30332555 1 -chr20 30333087 30333450 1 -chr20 30334092 30334262 1 -chr20 30337054 30337105 1 -chr20 30338315 30338455 1 -chr20 30344875 30345014 1 -chr20 30346436 30346598 1 -chr20 30347614 30347770 1 -chr20 30348155 30348334 1 -chr20 30352277 30352555 1 -chr20 30358757 30358992 1 -chr20 30374930 30375128 1 -chr20 30393889 30394071 1 -chr20 30398573 30398762 1 -chr20 30399325 30399519 1 -chr20 30399677 30399724 1 -chr20 30400115 30400307 1 -chr20 30404151 30404178 1 -chr20 30409027 30409224 1 -chr20 30409714 30409786 1 -chr20 30415789 30416039 1 -chr20 30419044 30419417 1 -chr20 30419668 30420048 1 -chr20 30420976 30421035 1 -chr20 30422437 30422766 1 -chr20 30473332 30473360 1 -chr20 30484163 30484355 1 -chr20 30484355 30484364 2 -chr20 30484364 30484568 1 -chr20 30485122 30485189 1 -chr20 30492575 30492615 1 -chr20 30498394 30498451 1 -chr20 30500934 30500972 1 -chr20 30501952 30501997 1 -chr20 30503417 30503476 1 -chr20 30506048 30506105 1 -chr20 30520880 30520927 1 -chr20 30523769 30523954 1 -chr20 30528754 30529541 1 -chr20 30532898 30533055 1 -chr20 30536942 30537106 1 -chr20 30537702 30537962 1 -chr20 30538962 30539172 1 -chr20 30548764 30548970 1 -chr20 30549682 30549889 1 -chr20 30550134 30550201 1 -chr20 30551094 30551306 1 -chr20 30551601 30551765 1 -chr20 30556645 30557110 1 -chr20 30576904 30576922 1 -chr20 30576922 30576938 2 -chr20 30576938 30576951 1 -chr20 30577733 30577811 1 -chr20 30581793 30581982 1 -chr20 30582059 30582272 1 -chr20 30582635 30583043 1 -chr20 30590042 30590217 1 -chr20 30591806 30591862 1 -chr20 30603665 30604062 1 -chr20 30610207 30610427 1 -chr20 30616696 30616881 1 -chr20 30617565 30617621 1 -chr20 30619354 30619520 1 -chr20 30622595 30622708 1 -chr20 30622778 30622942 1 -chr20 30632110 30632147 1 -chr20 30635019 30635160 1 -chr20 30637120 30637344 1 -chr20 30637487 30637522 1 -chr20 30639524 30639792 1 -chr20 30647673 30647835 1 -chr20 30648814 30649055 1 -chr20 30649806 30650032 1 -chr20 30653083 30653163 1 -chr20 30654227 30654855 1 -chr20 30656362 30656624 1 -chr20 30658235 30658403 1 -chr20 30658492 30658768 1 -chr20 30660865 30661070 1 -chr20 30672076 30672255 1 -chr20 30678127 30678341 1 -chr20 30680240 30680433 1 -chr20 30680576 30680780 1 -chr20 30688213 30688460 1 -chr20 30691219 30691395 1 -chr20 30694728 30695015 1 -chr20 30696629 30697136 1 -chr20 30697452 30697611 1 -chr20 30700218 30700312 1 -chr20 30707617 30707821 1 -chr20 30711003 30711207 1 -chr20 30712878 30713294 1 -chr20 30717661 30717889 1 -chr20 30718967 30719148 1 -chr20 30719956 30720059 1 -chr20 30723777 30723946 1 -chr20 30735768 30735985 1 -chr20 30736440 30736670 1 -chr20 30739551 30739740 1 -chr20 30743651 30743704 1 -chr20 30744362 30744388 1 -chr20 30745527 30745731 1 -chr20 30747507 30747535 1 -chr20 30749173 30749232 1 -chr20 30757882 30758119 1 -chr20 30816792 30817025 1 -chr20 30817235 30817468 1 -chr20 30821463 30821525 1 -chr20 30823653 30823862 1 -chr20 30825275 30825484 1 -chr20 30825612 30825812 1 -chr20 30826817 30827022 1 -chr20 30828599 30828643 1 -chr20 30829417 30829639 1 -chr20 30835333 30835378 1 -chr20 30835378 30835386 2 -chr20 30835386 30835572 1 -chr20 30840148 30840327 1 -chr20 30840986 30841227 1 -chr20 30851576 30851629 1 -chr20 30852938 30853338 1 -chr20 30855431 30855635 1 -chr20 30856381 30856718 1 -chr20 30857060 30857278 1 -chr20 30863969 30864019 1 -chr20 30865109 30865313 1 -chr20 30865711 30865968 1 -chr20 30883384 30883577 1 -chr20 30883577 30883591 2 -chr20 30883591 30883781 1 -chr20 30884345 30884582 1 -chr20 30884649 30884768 1 -chr20 30887050 30887223 1 -chr20 30887872 30887913 1 -chr20 30888507 30888572 1 -chr20 30891034 30891245 1 -chr20 30891945 30892150 1 -chr20 30895973 30896885 1 -chr20 30897117 30897281 1 -chr20 30897397 30897633 1 -chr20 30905190 30905578 1 -chr20 30906889 30907139 1 -chr20 30909492 30909544 1 -chr20 30913176 30913342 1 -chr20 30921758 30921972 1 -chr20 30944862 30945096 1 -chr20 30945170 30945362 1 -chr20 30946700 30946919 1 -chr20 30947110 30947286 1 -chr20 30948048 30948199 1 -chr20 30949856 30950028 1 -chr20 30954427 30954641 1 -chr20 30956856 30957079 1 -chr20 30965831 30965923 1 -chr20 30967905 30968090 1 -chr20 30977827 30977885 1 -chr20 30980841 30981069 1 -chr20 30981636 30981679 1 -chr20 30985492 30985735 1 -chr20 30989789 30990010 1 -chr20 30992434 30992621 1 -chr20 30993303 30993366 1 -chr20 30997059 30997151 1 -chr20 31052914 31053371 1 -chr20 31053993 31054282 1 -chr20 31054657 31054806 1 -chr20 31056107 31056486 1 -chr20 31060090 31060126 1 -chr20 31063254 31063698 1 -chr20 31063996 31064133 1 -chr20 31064498 31064578 1 -chr20 31065898 31065982 1 -chr20 31068150 31068425 1 -chr20 31068425 31068444 2 -chr20 31068444 31068653 1 -chr20 31071001 31071274 1 -chr20 31071934 31072213 1 -chr20 31072659 31073158 1 -chr20 31075382 31075476 1 -chr20 31090712 31090980 1 -chr20 31095737 31095946 1 -chr20 31157531 31157865 1 -chr20 31162617 31162841 1 -chr20 31167322 31167496 1 -chr20 31172536 31172850 1 -chr20 31173730 31173929 1 -chr20 31181121 31181230 1 -chr20 31182111 31182550 1 -chr20 31184878 31184919 1 -chr20 31185103 31185576 1 -chr20 31186491 31186645 1 -chr20 31188439 31188548 1 -chr20 31200622 31201114 1 -chr20 31203284 31203418 1 -chr20 31204507 31204741 1 -chr20 31204741 31204765 2 -chr20 31204765 31204985 1 -chr20 31210278 31210467 1 -chr20 31222288 31222727 1 -chr20 31224193 31224294 1 -chr20 31225624 31225691 1 -chr20 31265872 31266047 1 -chr20 31267828 31267872 1 -chr20 31268442 31268508 1 -chr20 31291035 31291231 1 -chr20 31292162 31292344 1 -chr20 31295270 31295640 1 -chr20 31313038 31313080 1 -chr20 31319884 31319946 1 -chr20 31329328 31329378 1 -chr20 31335698 31335874 1 -chr20 31337178 31337442 1 -chr20 31344746 31345139 1 -chr20 31348708 31348952 1 -chr20 31360702 31360939 1 -chr20 31362671 31363110 1 -chr20 31366457 31366659 1 -chr20 31368615 31368796 1 -chr20 31376480 31376890 1 -chr20 31377869 31378073 1 -chr20 31378243 31378292 1 -chr20 31380565 31380766 1 -chr20 31380931 31381148 1 -chr20 31381275 31381501 1 -chr20 31381992 31382196 1 -chr20 31387597 31387756 1 -chr20 31388697 31388897 1 -chr20 31389217 31389500 1 -chr20 31391949 31392042 1 -chr20 31393178 31393393 1 -chr20 31395188 31395355 1 -chr20 31400984 31401173 1 -chr20 31406047 31406234 1 -chr20 31415900 31416095 1 -chr20 31418425 31418557 1 -chr20 31418709 31419118 1 -chr20 31421265 31421642 1 -chr20 31424187 31424380 1 -chr20 31424837 31425061 1 -chr20 31425297 31425494 1 -chr20 31425503 31425553 1 -chr20 31427595 31427623 1 -chr20 31429100 31429164 1 -chr20 31432411 31432602 1 -chr20 31432801 31433014 1 -chr20 31433014 31433016 2 -chr20 31433016 31433180 1 -chr20 31433326 31433397 1 -chr20 31435063 31435108 1 -chr20 31437421 31437474 1 -chr20 31438897 31439114 1 -chr20 31440362 31440752 1 -chr20 31444556 31444886 1 -chr20 31458119 31458159 1 -chr20 31470672 31470766 1 -chr20 31474080 31474385 1 -chr20 31474385 31474402 2 -chr20 31474402 31474436 1 -chr20 31478597 31478672 1 -chr20 31479417 31479606 1 -chr20 31479606 31479618 2 -chr20 31479618 31479786 1 -chr20 31482377 31482564 1 -chr20 31484167 31484384 1 -chr20 31487079 31487282 1 -chr20 31487789 31488036 1 -chr20 31488814 31488973 1 -chr20 31488973 31488984 2 -chr20 31488984 31489050 1 -chr20 31489810 31489978 1 -chr20 31497023 31497412 1 -chr20 31498568 31498744 1 -chr20 31500014 31500055 1 -chr20 31501455 31501512 1 -chr20 31508849 31509052 1 -chr20 31530473 31530531 1 -chr20 31558977 31559022 1 -chr20 31561331 31561521 1 -chr20 31574600 31574630 1 -chr20 31593116 31593163 1 -chr20 31599605 31599670 1 -chr20 31609485 31609530 1 -chr20 31614770 31614805 1 -chr20 31619193 31619237 1 -chr20 31624261 31624318 1 -chr20 31625000 31625040 1 -chr20 31628406 31628471 1 -chr20 31638004 31638065 1 -chr20 31653564 31653604 1 -chr20 31658476 31658531 1 -chr20 31659619 31659645 1 -chr20 31673097 31673131 1 -chr20 31682595 31682663 1 -chr20 31693026 31693215 1 -chr20 31693580 31693749 1 -chr20 31733966 31734291 1 -chr20 31761425 31761461 1 -chr20 31762375 31762412 1 -chr20 31781118 31781147 1 -chr20 31783395 31783445 1 -chr20 31799631 31799692 1 -chr20 31802773 31802838 1 -chr20 31819568 31819801 1 -chr20 31824519 31824615 1 -chr20 31827631 31827687 1 -chr20 31839257 31839305 1 -chr20 31848959 31849122 1 -chr20 31851661 31851849 1 -chr20 31857675 31857874 1 -chr20 31858066 31858150 1 -chr20 31858209 31858430 1 -chr20 31858982 31859172 1 -chr20 31859192 31859390 1 -chr20 31859456 31859625 1 -chr20 31860110 31860280 1 -chr20 31861318 31861363 1 -chr20 31861695 31861760 1 -chr20 31862112 31862317 1 -chr20 31862625 31863001 1 -chr20 31863439 31863618 1 -chr20 31864959 31865178 1 -chr20 31866346 31866528 1 -chr20 31868359 31868428 1 -chr20 31872858 31872905 1 -chr20 31875135 31875375 1 -chr20 31876969 31877158 1 -chr20 31885833 31886062 1 -chr20 31886208 31886382 1 -chr20 31886399 31886473 1 -chr20 31890105 31890314 1 -chr20 31890527 31890732 1 -chr20 31890951 31891318 1 -chr20 31892827 31893015 1 -chr20 31897744 31897938 1 -chr20 31900208 31900394 1 -chr20 31900742 31900791 1 -chr20 31909328 31909383 1 -chr20 31914830 31914926 1 -chr20 31915968 31916105 1 -chr20 31921994 31922023 1 -chr20 31923457 31923846 1 -chr20 31925606 31925802 1 -chr20 31926355 31926586 1 -chr20 31929854 31929930 1 -chr20 31934402 31934575 1 -chr20 31934637 31934853 1 -chr20 31935178 31935444 1 -chr20 31953029 31953254 1 -chr20 31954490 31954517 1 -chr20 31958758 31958801 1 -chr20 31960209 31960410 1 -chr20 31960444 31960663 1 -chr20 31960983 31961231 1 -chr20 31961231 31961240 2 -chr20 31961240 31961444 1 -chr20 31961980 31962381 1 -chr20 31962404 31962491 1 -chr20 31962640 31962709 1 -chr20 31967492 31967658 1 -chr20 31972545 31972940 1 -chr20 31977553 31977758 1 -chr20 31980196 31980469 1 -chr20 31981758 31982002 1 -chr20 31982777 31982978 1 -chr20 31988942 31989023 1 -chr20 31994003 31994165 1 -chr20 32001650 32001905 1 -chr20 32004430 32005005 1 -chr20 32007848 32008033 1 -chr20 32008544 32008794 1 -chr20 32010262 32010318 1 -chr20 32010790 32011008 1 -chr20 32018340 32018530 1 -chr20 32026138 32026549 1 -chr20 32028467 32028660 1 -chr20 32028954 32029008 1 -chr20 32029011 32029164 1 -chr20 32031049 32031225 1 -chr20 32033217 32033259 1 -chr20 32033622 32033822 1 -chr20 32035344 32035510 1 -chr20 32037365 32037561 1 -chr20 32040316 32040391 1 -chr20 32040391 32040401 2 -chr20 32040401 32040584 1 -chr20 32042566 32042813 1 -chr20 32043763 32043977 1 -chr20 32045572 32045617 1 -chr20 32048148 32048190 1 -chr20 32050071 32050414 1 -chr20 32056932 32056999 1 -chr20 32062240 32062306 1 -chr20 32064313 32064387 1 -chr20 32066846 32066891 1 -chr20 32069709 32069976 1 -chr20 32072464 32072527 1 -chr20 32081388 32081564 1 -chr20 32081992 32082198 1 -chr20 32083212 32083262 1 -chr20 32085293 32085335 1 -chr20 32088110 32088308 1 -chr20 32088955 32089169 1 -chr20 32089537 32089753 1 -chr20 32090982 32091206 1 -chr20 32093975 32094003 1 -chr20 32099117 32099200 1 -chr20 32122556 32122586 1 -chr20 32148894 32148948 1 -chr20 32177407 32177452 1 -chr20 32186187 32186215 1 -chr20 32193398 32193925 1 -chr20 32196970 32197132 1 -chr20 32197437 32197606 1 -chr20 32207254 32207330 1 -chr20 32233921 32233952 1 -chr20 32245237 32245276 1 -chr20 32250931 32250980 1 -chr20 32251717 32251908 1 -chr20 32254698 32254725 1 -chr20 32259535 32259606 1 -chr20 32262238 32262463 1 -chr20 32270704 32270785 1 -chr20 32271112 32271212 1 -chr20 32279610 32279656 1 -chr20 32319849 32319881 1 -chr20 32325310 32325388 1 -chr20 32351984 32352065 1 -chr20 32359198 32359701 1 -chr20 32409017 32409057 1 -chr20 32504299 32504330 1 -chr20 32509375 32509415 1 -chr20 32511956 32511986 1 -chr20 32525790 32525820 1 -chr20 32525820 32525831 2 -chr20 32525831 32525893 1 -chr20 32543346 32543403 1 -chr20 32551853 32551896 1 -chr20 32606592 32606756 1 -chr20 32641957 32642072 1 -chr20 32654485 32654617 1 -chr20 32660387 32660533 1 -chr20 32689049 32689242 1 -chr20 32689782 32689990 1 -chr20 32690258 32690489 1 -chr20 32705597 32705651 1 -chr20 32711342 32711375 1 -chr20 32714881 32714952 1 -chr20 32719452 32719515 1 -chr20 32721871 32721923 1 -chr20 32722638 32722678 1 -chr20 32724462 32724498 1 -chr20 32726271 32726316 1 -chr20 32741600 32741645 1 -chr20 32745559 32745604 1 -chr20 32745930 32746048 1 -chr20 32764263 32764521 1 -chr20 32767333 32767384 1 -chr20 32778498 32778677 1 -chr20 32812376 32812662 1 -chr20 32826362 32826420 1 -chr20 32868364 32868563 1 -chr20 32877493 32877675 1 -chr20 32877954 32877998 1 -chr20 32884821 32884885 1 -chr20 32890738 32890782 1 -chr20 32892370 32892720 1 -chr20 32893624 32893783 1 -chr20 32894881 32894946 1 -chr20 32897260 32897325 1 -chr20 32902645 32902919 1 -chr20 32907382 32907485 1 -chr20 32907724 32907904 1 -chr20 32908073 32908108 1 -chr20 32908136 32908306 1 -chr20 32909133 32909375 1 -chr20 32909615 32909656 1 -chr20 32910774 32910821 1 -chr20 32911883 32912094 1 -chr20 32918626 32918863 1 -chr20 32922174 32922383 1 -chr20 32922499 32922691 1 -chr20 32923271 32923298 1 -chr20 32925858 32926122 1 -chr20 32926597 32926753 1 -chr20 32927885 32928057 1 -chr20 32928563 32928741 1 -chr20 32935651 32935714 1 -chr20 32946513 32946733 1 -chr20 32949163 32949317 1 -chr20 32950571 32950756 1 -chr20 32957759 32957812 1 -chr20 32959650 32959882 1 -chr20 32960235 32960465 1 -chr20 32960603 32960836 1 -chr20 32969546 32969920 1 -chr20 32981119 32981282 1 -chr20 32982045 32982090 1 -chr20 32982090 32982109 2 -chr20 32982109 32982138 1 -chr20 32982690 32983116 1 -chr20 32984391 32984613 1 -chr20 32987113 32987307 1 -chr20 32990795 32991024 1 -chr20 32991158 32991357 1 -chr20 32992542 32992937 1 -chr20 33002670 33002890 1 -chr20 33003405 33003774 1 -chr20 33012788 33012981 1 -chr20 33013811 33013961 1 -chr20 33014727 33014904 1 -chr20 33015699 33016612 1 -chr20 33018304 33018515 1 -chr20 33018888 33019095 1 -chr20 33020637 33021006 1 -chr20 33021460 33021792 1 -chr20 33037727 33038177 1 -chr20 33038192 33038238 1 -chr20 33040534 33040735 1 -chr20 33042333 33042510 1 -chr20 33042855 33043134 1 -chr20 33044182 33044388 1 -chr20 33045040 33045205 1 -chr20 33047423 33047591 1 -chr20 33048109 33048344 1 -chr20 33048742 33048767 1 -chr20 33048962 33049467 1 -chr20 33050639 33051025 1 -chr20 33054601 33054956 1 -chr20 33057766 33058038 1 -chr20 33060141 33060317 1 -chr20 33060916 33060965 1 -chr20 33062520 33062574 1 -chr20 33066985 33067188 1 -chr20 33068649 33068849 1 -chr20 33069565 33069797 1 -chr20 33070110 33070282 1 -chr20 33070469 33070655 1 -chr20 33070950 33071161 1 -chr20 33073802 33073853 1 -chr20 33077673 33077880 1 -chr20 33077934 33078171 1 -chr20 33085996 33086185 1 -chr20 33086933 33087125 1 -chr20 33089958 33090136 1 -chr20 33094618 33094657 1 -chr20 33099462 33099690 1 -chr20 33101092 33101328 1 -chr20 33103138 33103400 1 -chr20 33103944 33104129 1 -chr20 33104471 33104666 1 -chr20 33105469 33105652 1 -chr20 33105677 33105739 1 -chr20 33106363 33106406 1 -chr20 33112218 33112395 1 -chr20 33112800 33112989 1 -chr20 33113100 33113260 1 -chr20 33124036 33124107 1 -chr20 33125359 33125612 1 -chr20 33127980 33128199 1 -chr20 33131663 33131893 1 -chr20 33133657 33133850 1 -chr20 33138053 33138402 1 -chr20 33143166 33143400 1 -chr20 33146583 33146648 1 -chr20 33150569 33150816 1 -chr20 33151519 33151725 1 -chr20 33155560 33155741 1 -chr20 33155741 33155755 2 -chr20 33155755 33155899 1 -chr20 33156156 33156557 1 -chr20 33157207 33157483 1 -chr20 33158278 33158505 1 -chr20 33158859 33158948 1 -chr20 33159191 33159396 1 -chr20 33159903 33160321 1 -chr20 33161370 33161577 1 -chr20 33164483 33164664 1 -chr20 33171598 33171650 1 -chr20 33173726 33173769 1 -chr20 33175278 33175706 1 -chr20 33176624 33176666 1 -chr20 33180359 33180711 1 -chr20 33181993 33182171 1 -chr20 33185053 33185110 1 -chr20 33190145 33190300 1 -chr20 33190730 33190917 1 -chr20 33193126 33193524 1 -chr20 33195350 33195525 1 -chr20 33200854 33200894 1 -chr20 33201665 33201874 1 -chr20 33204321 33204486 1 -chr20 33206141 33206186 1 -chr20 33210783 33210847 1 -chr20 33215249 33215444 1 -chr20 33215444 33215453 2 -chr20 33215453 33215729 1 -chr20 33223522 33223590 1 -chr20 33224164 33224589 1 -chr20 33230242 33230615 1 -chr20 33234120 33234524 1 -chr20 33235083 33235322 1 -chr20 33235387 33235578 1 -chr20 33241174 33241798 1 -chr20 33258857 33258902 1 -chr20 33270642 33270839 1 -chr20 33271733 33271898 1 -chr20 33273520 33273571 1 -chr20 33276381 33276430 1 -chr20 33277164 33277291 1 -chr20 33279330 33279533 1 -chr20 33283626 33283794 1 -chr20 33287049 33287232 1 -chr20 33288020 33288603 1 -chr20 33288603 33288615 2 -chr20 33288615 33288812 1 -chr20 33290872 33291114 1 -chr20 33291411 33291635 1 -chr20 33292108 33292274 1 -chr20 33292558 33292618 1 -chr20 33293806 33294010 1 -chr20 33297723 33297793 1 -chr20 33298347 33298495 1 -chr20 33298495 33298497 2 -chr20 33298497 33298698 1 -chr20 33299075 33299271 1 -chr20 33302519 33302567 1 -chr20 33302984 33303399 1 -chr20 33303399 33303418 2 -chr20 33303418 33303455 1 -chr20 33305162 33305215 1 -chr20 33305548 33305588 1 -chr20 33305853 33306074 1 -chr20 33306123 33306382 1 -chr20 33306673 33306879 1 -chr20 33307804 33307856 1 -chr20 33309349 33309405 1 -chr20 33310422 33311020 1 -chr20 33313959 33314134 1 -chr20 33314283 33314795 1 -chr20 33314798 33314997 1 -chr20 33315498 33315692 1 -chr20 33316381 33316546 1 -chr20 33320371 33320454 1 -chr20 33323827 33323871 1 -chr20 33324590 33324633 1 -chr20 33327897 33327959 1 -chr20 33329045 33329096 1 -chr20 33331952 33332124 1 -chr20 33334417 33334463 1 -chr20 33357082 33357126 1 -chr20 33389672 33389703 1 -chr20 33402120 33402156 1 -chr20 33404700 33404742 1 -chr20 33413088 33413151 1 -chr20 33425100 33425143 1 -chr20 33455219 33455439 1 -chr20 33457789 33457838 1 -chr20 33468792 33468865 1 -chr20 33473927 33474140 1 -chr20 33476098 33476350 1 -chr20 33493524 33493551 1 -chr20 33504672 33504709 1 -chr20 33525736 33525802 1 -chr20 33574371 33574410 1 -chr20 33584060 33584093 1 -chr20 33595729 33595801 1 -chr20 33636192 33636232 1 -chr20 33638661 33638728 1 -chr20 33698974 33699017 1 -chr20 33714337 33714402 1 -chr20 33716071 33716115 1 -chr20 33729132 33729331 1 -chr20 33752360 33752446 1 -chr20 33753213 33753243 1 -chr20 33756500 33756566 1 -chr20 33796058 33796097 1 -chr20 33806016 33806070 1 -chr20 33860877 33861225 1 -chr20 33863956 33864099 1 -chr20 33864151 33864325 1 -chr20 33868952 33869003 1 -chr20 33873069 33873277 1 -chr20 33882049 33882115 1 -chr20 33882623 33882829 1 -chr20 33885902 33886006 1 -chr20 33886416 33886479 1 -chr20 33889556 33889743 1 -chr20 33891362 33891515 1 -chr20 33892805 33892875 1 -chr20 33906911 33906953 1 -chr20 33907995 33908079 1 -chr20 33908429 33908838 1 -chr20 33913572 33913766 1 -chr20 33914884 33915062 1 -chr20 33918133 33918330 1 -chr20 33923575 33923724 1 -chr20 33924665 33924711 1 -chr20 33924893 33925104 1 -chr20 33929836 33929881 1 -chr20 33931717 33931875 1 -chr20 33940659 33940855 1 -chr20 33943212 33943237 1 -chr20 33943826 33944088 1 -chr20 33953464 33953656 1 -chr20 33959618 33959665 1 -chr20 33964566 33964779 1 -chr20 33968387 33968435 1 -chr20 33968784 33969251 1 -chr20 33969693 33970061 1 -chr20 33971507 33971709 1 -chr20 33978937 33978983 1 -chr20 33979981 33980179 1 -chr20 33983415 33983599 1 -chr20 33983877 33984058 1 -chr20 33984951 33985169 1 -chr20 33986654 33986826 1 -chr20 33987615 33987670 1 -chr20 33993120 33993183 1 -chr20 34005383 34005419 1 -chr20 34064550 34064684 1 -chr20 34131302 34131371 1 -chr20 34133338 34133383 1 -chr20 34133497 34133517 1 -chr20 34133517 34133537 2 -chr20 34133537 34133584 1 -chr20 34134976 34135022 1 -chr20 34171569 34171646 1 -chr20 34183185 34183547 1 -chr20 34185870 34186128 1 -chr20 34186553 34186739 1 -chr20 34189234 34189285 1 -chr20 34191303 34191483 1 -chr20 34192575 34192759 1 -chr20 34195673 34195903 1 -chr20 34197389 34197546 1 -chr20 34197760 34198009 1 -chr20 34199238 34199659 1 -chr20 34201211 34201407 1 -chr20 34201416 34201653 1 -chr20 34207041 34207268 1 -chr20 34215123 34215458 1 -chr20 34215633 34215812 1 -chr20 34216019 34216173 1 -chr20 34216173 34216177 2 -chr20 34216177 34216580 1 -chr20 34217792 34217833 1 -chr20 34218244 34218621 1 -chr20 34219027 34219210 1 -chr20 34219601 34219822 1 -chr20 34220810 34220994 1 -chr20 34221362 34221563 1 -chr20 34223460 34223500 1 -chr20 34227453 34227505 1 -chr20 34228432 34228486 1 -chr20 34235180 34235257 1 -chr20 34239611 34239726 1 -chr20 34239821 34240025 1 -chr20 34242998 34243234 1 -chr20 34243923 34243960 1 -chr20 34280036 34280061 1 -chr20 34294362 34294888 1 -chr20 34301511 34301685 1 -chr20 34304768 34304845 1 -chr20 34314907 34314971 1 -chr20 34336418 34336459 1 -chr20 34353031 34353081 1 -chr20 34356318 34356382 1 -chr20 34361444 34361470 1 -chr20 34375275 34375319 1 -chr20 34376246 34376431 1 -chr20 34377166 34377205 1 -chr20 34379945 34379979 1 -chr20 34381357 34381418 1 -chr20 34387028 34387065 1 -chr20 34414039 34414135 1 -chr20 34461499 34461536 1 -chr20 34475700 34475727 1 -chr20 34480286 34480326 1 -chr20 34488925 34488969 1 -chr20 34521162 34521210 1 -chr20 34584098 34584413 1 -chr20 34607258 34607339 1 -chr20 34610898 34611123 1 -chr20 34611851 34612017 1 -chr20 34617925 34617980 1 -chr20 34653883 34653930 1 -chr20 34659305 34659338 1 -chr20 34673875 34673920 1 -chr20 34676462 34676684 1 -chr20 34694779 34694863 1 -chr20 34695438 34695481 1 -chr20 34709322 34709390 1 -chr20 34722808 34722949 1 -chr20 34730183 34730212 1 -chr20 34751930 34751983 1 -chr20 34766384 34766442 1 -chr20 34786139 34786183 1 -chr20 34786885 34787082 1 -chr20 34796201 34796255 1 -chr20 34796423 34796489 1 -chr20 34799554 34799744 1 -chr20 34803206 34803270 1 -chr20 34807881 34807929 1 -chr20 34826655 34826696 1 -chr20 34833584 34833773 1 -chr20 34838332 34838378 1 -chr20 34878979 34879007 1 -chr20 34887990 34888023 1 -chr20 34897573 34897655 1 -chr20 34928355 34928843 1 -chr20 34964176 34964502 1 -chr20 34967191 34967550 1 -chr20 34980472 34980529 1 -chr20 34981675 34981719 1 -chr20 35014348 35014389 1 -chr20 35033962 35034027 1 -chr20 35043476 35043525 1 -chr20 35046948 35047005 1 -chr20 35071460 35071537 1 -chr20 35071718 35071809 1 -chr20 35116833 35116862 1 -chr20 35122516 35122572 1 -chr20 35142972 35143027 1 -chr20 35152309 35152351 1 -chr20 35160299 35160362 1 -chr20 35163460 35163630 1 -chr20 35169365 35169404 1 -chr20 35184119 35184164 1 -chr20 35185075 35185288 1 -chr20 35202369 35202413 1 -chr20 35210960 35210991 1 -chr20 35211324 35211754 1 -chr20 35216957 35217121 1 -chr20 35224606 35224824 1 -chr20 35228170 35228786 1 -chr20 35229672 35230024 1 -chr20 35232859 35232932 1 -chr20 35236246 35236603 1 -chr20 35237827 35238037 1 -chr20 35242238 35242279 1 -chr20 35243208 35243324 1 -chr20 35248848 35249077 1 -chr20 35251778 35252190 1 -chr20 35252801 35252854 1 -chr20 35258548 35258761 1 -chr20 35260809 35260968 1 -chr20 35263448 35263617 1 -chr20 35263617 35263623 2 -chr20 35263623 35263804 1 -chr20 35278249 35278306 1 -chr20 35293710 35293770 1 -chr20 35297830 35298354 1 -chr20 35314084 35314116 1 -chr20 35324476 35324522 1 -chr20 35360153 35360249 1 -chr20 35362502 35362567 1 -chr20 35376931 35376978 1 -chr20 35388334 35388412 1 -chr20 35397399 35397425 1 -chr20 35397425 35397433 2 -chr20 35397433 35397469 1 -chr20 35417687 35417728 1 -chr20 35418200 35418355 1 -chr20 35428046 35428072 1 -chr20 35441299 35441354 1 -chr20 35469600 35469809 1 -chr20 35482375 35482459 1 -chr20 35499842 35500030 1 -chr20 35524840 35524897 1 -chr20 35527255 35527463 1 -chr20 35558711 35559348 1 -chr20 35559705 35560071 1 -chr20 35561192 35561604 1 -chr20 35564808 35565252 1 -chr20 35568395 35568449 1 -chr20 35578810 35578999 1 -chr20 35579032 35579243 1 -chr20 35582025 35582434 1 -chr20 35606633 35606732 1 -chr20 35610492 35610531 1 -chr20 35613570 35613634 1 -chr20 35639525 35639591 1 -chr20 35664260 35664532 1 -chr20 35692436 35692483 1 -chr20 35704320 35704510 1 -chr20 35722286 35722317 1 -chr20 35737755 35737803 1 -chr20 35751089 35751124 1 -chr20 35752545 35752579 1 -chr20 35763500 35763549 1 -chr20 35780300 35780328 1 -chr20 35790976 35791018 1 -chr20 35793736 35793767 1 -chr20 35797448 35797483 1 -chr20 35833976 35834022 1 -chr20 35865596 35865645 1 -chr20 35878643 35878798 1 -chr20 35912202 35912249 1 -chr20 35912705 35912754 1 -chr20 35942928 35942966 1 -chr20 35957367 35957400 1 -chr20 35968978 35969669 1 -chr20 35972376 35972597 1 -chr20 35979920 35980152 1 -chr20 35981980 35982189 1 -chr20 35983945 35984178 1 -chr20 35985258 35985384 1 -chr20 36006914 36006944 1 -chr20 36021606 36021789 1 -chr20 36033197 36033224 1 -chr20 36033998 36034037 1 -chr20 36042315 36042362 1 -chr20 36046418 36046652 1 -chr20 36048917 36049063 1 -chr20 36050165 36050389 1 -chr20 36066339 36066373 1 -chr20 36075784 36075854 1 -chr20 36080206 36080250 1 -chr20 36082999 36083040 1 -chr20 36090848 36090875 1 -chr20 36111859 36112027 1 -chr20 36112484 36113052 1 -chr20 36115818 36115883 1 -chr20 36127269 36127861 1 -chr20 36130874 36130924 1 -chr20 36142471 36142830 1 -chr20 36143344 36143520 1 -chr20 36145679 36145886 1 -chr20 36153804 36153959 1 -chr20 36157882 36158067 1 -chr20 36158229 36158418 1 -chr20 36158878 36159091 1 -chr20 36161193 36161393 1 -chr20 36163346 36163523 1 -chr20 36191427 36191650 1 -chr20 36193612 36193780 1 -chr20 36195001 36195040 1 -chr20 36197250 36197304 1 -chr20 36197466 36197667 1 -chr20 36198351 36198744 1 -chr20 36200599 36200978 1 -chr20 36203686 36203872 1 -chr20 36204225 36204382 1 -chr20 36207714 36207767 1 -chr20 36212031 36212248 1 -chr20 36212584 36212762 1 -chr20 36214406 36214638 1 -chr20 36215301 36215933 1 -chr20 36216574 36216623 1 -chr20 36216635 36216813 1 -chr20 36217952 36218168 1 -chr20 36219524 36219686 1 -chr20 36219899 36220093 1 -chr20 36221742 36221800 1 -chr20 36226600 36226638 1 -chr20 36227795 36227981 1 -chr20 36227995 36228192 1 -chr20 36228192 36228201 2 -chr20 36228201 36228433 1 -chr20 36229304 36229466 1 -chr20 36230810 36230853 1 -chr20 36231935 36232012 1 -chr20 36265045 36265236 1 -chr20 36266426 36266463 1 -chr20 36268587 36268700 1 -chr20 36273527 36273713 1 -chr20 36275320 36275371 1 -chr20 36279650 36279692 1 -chr20 36281762 36282005 1 -chr20 36283361 36283511 1 -chr20 36283763 36283793 1 -chr20 36286261 36286462 1 -chr20 36290265 36290307 1 -chr20 36299380 36299629 1 -chr20 36301842 36302064 1 -chr20 36303874 36304057 1 -chr20 36307997 36308166 1 -chr20 36317651 36317680 1 -chr20 36317847 36318011 1 -chr20 36319363 36319568 1 -chr20 36319568 36319584 2 -chr20 36319584 36319984 1 -chr20 36322098 36322319 1 -chr20 36322629 36322787 1 -chr20 36330128 36330360 1 -chr20 36331490 36331533 1 -chr20 36333973 36334148 1 -chr20 36339715 36339944 1 -chr20 36340967 36341040 1 -chr20 36342418 36342642 1 -chr20 36343232 36343443 1 -chr20 36346879 36347080 1 -chr20 36347834 36348407 1 -chr20 36351103 36351169 1 -chr20 36358984 36359062 1 -chr20 36360383 36360441 1 -chr20 36360441 36360442 2 -chr20 36360442 36360978 1 -chr20 36365530 36365572 1 -chr20 36365979 36366152 1 -chr20 36368709 36369062 1 -chr20 36370053 36370232 1 -chr20 36373029 36373249 1 -chr20 36373266 36373523 1 -chr20 36376517 36376573 1 -chr20 36379303 36379467 1 -chr20 36384131 36384185 1 -chr20 36384972 36385071 1 -chr20 36387786 36388025 1 -chr20 36390900 36390957 1 -chr20 36391033 36391501 1 -chr20 36391501 36391518 2 -chr20 36391518 36391715 1 -chr20 36394948 36395153 1 -chr20 36396315 36396342 1 -chr20 36402178 36402241 1 -chr20 36404644 36404905 1 -chr20 36405601 36405659 1 -chr20 36406675 36406851 1 -chr20 36409907 36409963 1 -chr20 36412409 36412619 1 -chr20 36413487 36413553 1 -chr20 36418550 36418600 1 -chr20 36423909 36423951 1 -chr20 36425562 36425617 1 -chr20 36426069 36426253 1 -chr20 36430989 36431215 1 -chr20 36432451 36432507 1 -chr20 36434469 36434615 1 -chr20 36434891 36435139 1 -chr20 36436592 36436726 1 -chr20 36438732 36438776 1 -chr20 36439584 36440317 1 -chr20 36443030 36443278 1 -chr20 36448295 36448543 1 -chr20 36450545 36450732 1 -chr20 36453192 36453264 1 -chr20 36454489 36454827 1 -chr20 36457847 36457911 1 -chr20 36461261 36461357 1 -chr20 36464738 36464792 1 -chr20 36471307 36471359 1 -chr20 36485238 36485278 1 -chr20 36546814 36546875 1 -chr20 36557789 36557843 1 -chr20 36559021 36559058 1 -chr20 36561420 36561481 1 -chr20 36569016 36569050 1 -chr20 36609472 36609525 1 -chr20 36634482 36634526 1 -chr20 36635269 36635835 1 -chr20 36636679 36636750 1 -chr20 36644278 36644692 1 -chr20 36645246 36645286 1 -chr20 36650968 36650999 1 -chr20 36658841 36658894 1 -chr20 36660667 36660706 1 -chr20 36665692 36665755 1 -chr20 36665807 36665847 1 -chr20 36672574 36672617 1 -chr20 36680365 36680404 1 -chr20 36682813 36682878 1 -chr20 36695239 36695417 1 -chr20 36714755 36714811 1 -chr20 36725114 36725164 1 -chr20 36726962 36727000 1 -chr20 36727474 36727519 1 -chr20 36732951 36733044 1 -chr20 36756130 36756195 1 -chr20 36760145 36760179 1 -chr20 36774683 36774722 1 -chr20 36810716 36810748 1 -chr20 36826071 36826135 1 -chr20 36826368 36826396 1 -chr20 36827389 36827431 1 -chr20 36858925 36858972 1 -chr20 36879029 36879255 1 -chr20 36883832 36883870 1 -chr20 36884659 36884705 1 -chr20 36886421 36886473 1 -chr20 36888800 36888838 1 -chr20 36908452 36908527 1 -chr20 36913477 36913526 1 -chr20 36914457 36914496 1 -chr20 36924126 36924170 1 -chr20 36973848 36973881 1 -chr20 36987187 36987227 1 -chr20 36990326 36990563 1 -chr20 36991945 36992033 1 -chr20 36998306 36998368 1 -chr20 37017637 37017690 1 -chr20 37033758 37033815 1 -chr20 37041390 37041434 1 -chr20 37055938 37055991 1 -chr20 37105290 37105433 1 -chr20 37117628 37117668 1 -chr20 37120677 37120888 1 -chr20 37123480 37123655 1 -chr20 37130484 37130731 1 -chr20 37143398 37143450 1 -chr20 37157429 37157497 1 -chr20 37168663 37168707 1 -chr20 37173539 37173716 1 -chr20 37176693 37176735 1 -chr20 37203017 37203053 1 -chr20 37233185 37233214 1 -chr20 37241009 37241313 1 -chr20 37246413 37246470 1 -chr20 37251407 37251818 1 -chr20 37251818 37251827 2 -chr20 37251827 37252030 1 -chr20 37252288 37252454 1 -chr20 37254500 37254688 1 -chr20 37254689 37254912 1 -chr20 37262663 37262845 1 -chr20 37262845 37262854 2 -chr20 37262854 37262924 1 -chr20 37265035 37265101 1 -chr20 37265908 37266107 1 -chr20 37266107 37266109 2 -chr20 37266109 37266333 1 -chr20 37279287 37279460 1 -chr20 37280060 37280251 1 -chr20 37331053 37331101 1 -chr20 37341112 37341152 1 -chr20 37342293 37342333 1 -chr20 37368687 37368753 1 -chr20 37375470 37375653 1 -chr20 37377169 37377666 1 -chr20 37407840 37407894 1 -chr20 37407954 37408016 1 -chr20 37409279 37409336 1 -chr20 37416377 37416423 1 -chr20 37420843 37420896 1 -chr20 37423622 37423678 1 -chr20 37431455 37431643 1 -chr20 37437468 37437901 1 -chr20 37438883 37438924 1 -chr20 37440244 37440693 1 -chr20 37443149 37443336 1 -chr20 37447750 37447979 1 -chr20 37448935 37448988 1 -chr20 37453511 37453886 1 -chr20 37457875 37458259 1 -chr20 37458694 37458885 1 -chr20 37463894 37463935 1 -chr20 37464878 37464923 1 -chr20 37466293 37466347 1 -chr20 37466805 37466973 1 -chr20 37467369 37467425 1 -chr20 37468031 37468250 1 -chr20 37471288 37471341 1 -chr20 37473566 37473615 1 -chr20 37476531 37476748 1 -chr20 37477522 37477727 1 -chr20 37481541 37481799 1 -chr20 37482030 37482394 1 -chr20 37482444 37482657 1 -chr20 37483077 37483239 1 -chr20 37485304 37485349 1 -chr20 37486363 37486405 1 -chr20 37486539 37486762 1 -chr20 37487952 37488137 1 -chr20 37488253 37488310 1 -chr20 37489242 37489421 1 -chr20 37490445 37490495 1 -chr20 37492342 37492578 1 -chr20 37493285 37493327 1 -chr20 37496332 37496497 1 -chr20 37505906 37505948 1 -chr20 37536921 37537125 1 -chr20 37544070 37544592 1 -chr20 37547045 37547242 1 -chr20 37550707 37550748 1 -chr20 37563647 37563831 1 -chr20 37566406 37566602 1 -chr20 37567006 37567243 1 -chr20 37569896 37570056 1 -chr20 37570962 37571138 1 -chr20 37571874 37572042 1 -chr20 37574136 37574348 1 -chr20 37575692 37575758 1 -chr20 37577416 37577610 1 -chr20 37578145 37578503 1 -chr20 37578542 37578572 1 -chr20 37578926 37579142 1 -chr20 37579206 37579416 1 -chr20 37580313 37580544 1 -chr20 37581463 37581636 1 -chr20 37587028 37587092 1 -chr20 37590990 37591200 1 -chr20 37595950 37595993 1 -chr20 37597236 37597463 1 -chr20 37600207 37600391 1 -chr20 37600391 37600415 2 -chr20 37600415 37600550 1 -chr20 37606953 37606993 1 -chr20 37607410 37607450 1 -chr20 37608479 37608708 1 -chr20 37609083 37609316 1 -chr20 37609892 37609980 1 -chr20 37610471 37610839 1 -chr20 37618426 37618504 1 -chr20 37619136 37619193 1 -chr20 37620825 37620879 1 -chr20 37626739 37627121 1 -chr20 37631292 37631420 1 -chr20 37633960 37634015 1 -chr20 37634180 37634363 1 -chr20 37635354 37635758 1 -chr20 37636015 37636366 1 -chr20 37636784 37636876 1 -chr20 37639525 37639757 1 -chr20 37641474 37641682 1 -chr20 37646020 37646213 1 -chr20 37648482 37648517 1 -chr20 37649418 37649653 1 -chr20 37650943 37651186 1 -chr20 37651639 37651920 1 -chr20 37652123 37652459 1 -chr20 37656057 37656086 1 -chr20 37660447 37660653 1 -chr20 37661109 37661145 1 -chr20 37662345 37662419 1 -chr20 37667225 37667456 1 -chr20 37676195 37676363 1 -chr20 37685151 37685314 1 -chr20 37686088 37686486 1 -chr20 37686754 37686952 1 -chr20 37695322 37695387 1 -chr20 37703919 37703946 1 -chr20 37720116 37720158 1 -chr20 37774010 37774056 1 -chr20 37785239 37785414 1 -chr20 37866291 37866518 1 -chr20 37877505 37877709 1 -chr20 37877871 37878035 1 -chr20 37878289 37878731 1 -chr20 37878800 37878990 1 -chr20 37880630 37880817 1 -chr20 37881127 37881192 1 -chr20 37881756 37881808 1 -chr20 37882185 37882231 1 -chr20 37886144 37886214 1 -chr20 37886518 37886681 1 -chr20 37887763 37888144 1 -chr20 37888144 37888160 2 -chr20 37888160 37888356 1 -chr20 37890183 37890257 1 -chr20 37890975 37891334 1 -chr20 37892790 37893167 1 -chr20 37896934 37897305 1 -chr20 37898814 37899005 1 -chr20 37899423 37899656 1 -chr20 37900161 37900417 1 -chr20 37903509 37903708 1 -chr20 37910580 37910634 1 -chr20 37912496 37912563 1 -chr20 37913011 37913065 1 -chr20 37914551 37914628 1 -chr20 37914753 37914806 1 -chr20 37920556 37920730 1 -chr20 37920950 37921128 1 -chr20 37922358 37922410 1 -chr20 37924706 37924961 1 -chr20 37927550 37927595 1 -chr20 37933479 37933522 1 -chr20 37935591 37935647 1 -chr20 37938435 37938654 1 -chr20 37939401 37939763 1 -chr20 37939790 37939995 1 -chr20 37940135 37940340 1 -chr20 37945446 37945492 1 -chr20 37946821 37946881 1 -chr20 37947612 37947808 1 -chr20 37949591 37949810 1 -chr20 37950653 37950883 1 -chr20 37955284 37955653 1 -chr20 37956447 37956657 1 -chr20 37963950 37964107 1 -chr20 37964590 37964786 1 -chr20 37967076 37967251 1 -chr20 38056185 38056258 1 -chr20 38080927 38081124 1 -chr20 38116168 38116210 1 -chr20 38155068 38155100 1 -chr20 38162871 38163076 1 -chr20 38174619 38174818 1 -chr20 38174818 38174828 2 -chr20 38174828 38175000 1 -chr20 38175696 38176244 1 -chr20 38179526 38179565 1 -chr20 38180141 38180185 1 -chr20 38182506 38182549 1 -chr20 38184068 38184291 1 -chr20 38185136 38185179 1 -chr20 38188001 38188144 1 -chr20 38189074 38189277 1 -chr20 38192433 38192586 1 -chr20 38192775 38192942 1 -chr20 38195972 38196367 1 -chr20 38201566 38201747 1 -chr20 38202144 38202287 1 -chr20 38202670 38203021 1 -chr20 38206204 38206581 1 -chr20 38208928 38209115 1 -chr20 38213421 38213648 1 -chr20 38214282 38214457 1 -chr20 38215030 38215262 1 -chr20 38215609 38215668 1 -chr20 38215714 38216161 1 -chr20 38216368 38216569 1 -chr20 38217770 38217957 1 -chr20 38217989 38218053 1 -chr20 38222071 38222951 1 -chr20 38223595 38223655 1 -chr20 38224012 38224206 1 -chr20 38229852 38229923 1 -chr20 38234244 38234643 1 -chr20 38236023 38236221 1 -chr20 38237261 38237839 1 -chr20 38247449 38247623 1 -chr20 38248773 38248814 1 -chr20 38249171 38249365 1 -chr20 38249543 38249921 1 -chr20 38252285 38252330 1 -chr20 38256085 38256266 1 -chr20 38258423 38258626 1 -chr20 38259198 38259253 1 -chr20 38259916 38259965 1 -chr20 38263504 38263652 1 -chr20 38265295 38265389 1 -chr20 38267389 38267625 1 -chr20 38270860 38271036 1 -chr20 38273200 38273424 1 -chr20 38275576 38275797 1 -chr20 38277578 38277831 1 -chr20 38278284 38278324 1 -chr20 38281019 38281171 1 -chr20 38286997 38287101 1 -chr20 38289829 38289999 1 -chr20 38298645 38298708 1 -chr20 38301931 38302126 1 -chr20 38303258 38303467 1 -chr20 38305710 38305756 1 -chr20 38306950 38307066 1 -chr20 38307489 38307708 1 -chr20 38307757 38308219 1 -chr20 38311657 38311697 1 -chr20 38318406 38318596 1 -chr20 38319513 38319709 1 -chr20 38319765 38319939 1 -chr20 38323137 38323347 1 -chr20 38323615 38323780 1 -chr20 38323874 38323923 1 -chr20 38324193 38324376 1 -chr20 38326226 38326472 1 -chr20 38327731 38327932 1 -chr20 38332320 38332536 1 -chr20 38332618 38332838 1 -chr20 38336361 38336563 1 -chr20 38337139 38337374 1 -chr20 38346276 38346463 1 -chr20 38360427 38360663 1 -chr20 38362980 38363045 1 -chr20 38363224 38363436 1 -chr20 38369622 38369786 1 -chr20 38370777 38371133 1 -chr20 38371472 38371869 1 -chr20 38372648 38372856 1 -chr20 38373982 38374051 1 -chr20 38376821 38376861 1 -chr20 38378902 38378942 1 -chr20 38379002 38379051 1 -chr20 38381408 38381460 1 -chr20 38381911 38381947 1 -chr20 38382550 38382794 1 -chr20 38383386 38383427 1 -chr20 38386127 38386226 1 -chr20 38388647 38388700 1 -chr20 38388924 38389181 1 -chr20 38391959 38392209 1 -chr20 38394497 38394708 1 -chr20 38396323 38396515 1 -chr20 38396890 38397106 1 -chr20 38408096 38408133 1 -chr20 38419419 38419450 1 -chr20 38422965 38423011 1 -chr20 38430523 38430574 1 -chr20 38438414 38438497 1 -chr20 38440536 38440911 1 -chr20 38450240 38450338 1 -chr20 38467229 38467441 1 -chr20 38513230 38513279 1 -chr20 38527023 38527084 1 -chr20 38528560 38528588 1 -chr20 38549935 38550143 1 -chr20 38557563 38557612 1 -chr20 38581023 38581125 1 -chr20 38581740 38581829 1 -chr20 38585524 38585593 1 -chr20 38586101 38586150 1 -chr20 38586978 38587226 1 -chr20 38591901 38592042 1 -chr20 38599693 38599755 1 -chr20 38603721 38603766 1 -chr20 38604790 38605004 1 -chr20 38605558 38605780 1 -chr20 38608193 38608385 1 -chr20 38611227 38611282 1 -chr20 38613368 38613504 1 -chr20 38622915 38622960 1 -chr20 38629468 38629672 1 -chr20 38633735 38633784 1 -chr20 38635937 38636113 1 -chr20 38638186 38638214 1 -chr20 38638408 38638621 1 -chr20 38639115 38639261 1 -chr20 38640467 38640693 1 -chr20 38641122 38641260 1 -chr20 38644722 38644892 1 -chr20 38646108 38646306 1 -chr20 38647139 38647350 1 -chr20 38647714 38647893 1 -chr20 38653694 38653841 1 -chr20 38654944 38655165 1 -chr20 38655852 38656059 1 -chr20 38656411 38656523 1 -chr20 38656708 38656873 1 -chr20 38656960 38657199 1 -chr20 38657225 38657376 1 -chr20 38677451 38677689 1 -chr20 38684666 38684861 1 -chr20 38692907 38693193 1 -chr20 38693193 38693205 2 -chr20 38693205 38693257 1 -chr20 38695388 38695619 1 -chr20 38703396 38703583 1 -chr20 38704929 38705132 1 -chr20 38705235 38705397 1 -chr20 38705597 38705755 1 -chr20 38708526 38708628 1 -chr20 38710537 38710718 1 -chr20 38712090 38712270 1 -chr20 38712386 38712560 1 -chr20 38714165 38714423 1 -chr20 38719174 38719415 1 -chr20 38720822 38720880 1 -chr20 38723439 38723487 1 -chr20 38727305 38727378 1 -chr20 38727384 38727595 1 -chr20 38727708 38727899 1 -chr20 38727973 38728163 1 -chr20 38728262 38728435 1 -chr20 38728941 38729114 1 -chr20 38729588 38729636 1 -chr20 38735964 38736142 1 -chr20 38737706 38737910 1 -chr20 38741895 38742095 1 -chr20 38751850 38752178 1 -chr20 38795939 38796145 1 -chr20 38796992 38797196 1 -chr20 38811923 38812126 1 -chr20 38812782 38812981 1 -chr20 38815507 38815928 1 -chr20 38816496 38817018 1 -chr20 38817113 38817293 1 -chr20 38817861 38817922 1 -chr20 38821491 38821567 1 -chr20 38833083 38833310 1 -chr20 38838138 38838336 1 -chr20 38841479 38841521 1 -chr20 38842749 38842971 1 -chr20 38845057 38845225 1 -chr20 38845525 38845722 1 -chr20 38845739 38845931 1 -chr20 38860237 38860315 1 -chr20 38871822 38872030 1 -chr20 38872158 38872358 1 -chr20 38873944 38873984 1 -chr20 38874300 38874512 1 -chr20 38875295 38875513 1 -chr20 38879078 38879291 1 -chr20 38879818 38880011 1 -chr20 38881630 38881911 1 -chr20 38882215 38882413 1 -chr20 38883497 38883572 1 -chr20 38891916 38892081 1 -chr20 38897185 38897280 1 -chr20 38900026 38900071 1 -chr20 38900136 38900316 1 -chr20 38900795 38900995 1 -chr20 38902858 38903020 1 -chr20 38907892 38908078 1 -chr20 38908162 38908435 1 -chr20 38917693 38917900 1 -chr20 38918167 38918336 1 -chr20 38922065 38922451 1 -chr20 38923461 38923507 1 -chr20 38977018 38977171 1 -chr20 38979602 38979742 1 -chr20 38988401 38988447 1 -chr20 39018213 39018391 1 -chr20 39034723 39034831 1 -chr20 39051923 39052097 1 -chr20 39055088 39055262 1 -chr20 39055262 39055271 2 -chr20 39055271 39055452 1 -chr20 39056027 39056238 1 -chr20 39059108 39059302 1 -chr20 39060543 39060583 1 -chr20 39061778 39062189 1 -chr20 39064236 39064441 1 -chr20 39065355 39065407 1 -chr20 39067190 39067385 1 -chr20 39068513 39068538 1 -chr20 39069098 39069149 1 -chr20 39072726 39072908 1 -chr20 39073660 39073824 1 -chr20 39073824 39073829 2 -chr20 39073829 39074028 1 -chr20 39074055 39074457 1 -chr20 39074457 39074460 2 -chr20 39074460 39074634 1 -chr20 39075498 39075561 1 -chr20 39079586 39079670 1 -chr20 39082751 39083341 1 -chr20 39084118 39084318 1 -chr20 39090124 39090301 1 -chr20 39091452 39091630 1 -chr20 39093737 39093781 1 -chr20 39098708 39099334 1 -chr20 39099967 39100158 1 -chr20 39102338 39102547 1 -chr20 39116010 39116215 1 -chr20 39121809 39122196 1 -chr20 39123061 39123263 1 -chr20 39124904 39125132 1 -chr20 39130561 39130750 1 -chr20 39132963 39133141 1 -chr20 39134816 39135013 1 -chr20 39138406 39138855 1 -chr20 39139884 39140108 1 -chr20 39141226 39141380 1 -chr20 39150453 39150657 1 -chr20 39153190 39153425 1 -chr20 39154626 39154788 1 -chr20 39157693 39157881 1 -chr20 39159943 39160461 1 -chr20 39168933 39169130 1 -chr20 39172707 39172739 1 -chr20 39183271 39183502 1 -chr20 39183575 39183746 1 -chr20 39208915 39208985 1 -chr20 39209340 39210119 1 -chr20 39215905 39216256 1 -chr20 39226395 39226581 1 -chr20 39247480 39247780 1 -chr20 39252336 39252523 1 -chr20 39259841 39260030 1 -chr20 39262858 39263026 1 -chr20 39288236 39288295 1 -chr20 39370189 39370235 1 -chr20 39372412 39372618 1 -chr20 39413780 39413835 1 -chr20 39418476 39418720 1 -chr20 39470270 39470395 1 -chr20 39482996 39483340 1 -chr20 39485516 39485657 1 -chr20 39486038 39486224 1 -chr20 39486224 39486228 2 -chr20 39486228 39486318 1 -chr20 39512499 39512548 1 -chr20 39562526 39562591 1 -chr20 39584962 39585134 1 -chr20 39585731 39585912 1 -chr20 39585918 39586087 1 -chr20 39609760 39609839 1 -chr20 39635180 39635246 1 -chr20 39642825 39642867 1 -chr20 39683434 39683499 1 -chr20 39802165 39802228 1 -chr20 39802539 39802590 1 -chr20 39802730 39802797 1 -chr20 39803088 39803279 1 -chr20 39803374 39803552 1 -chr20 39804330 39804551 1 -chr20 39920449 39920649 1 -chr20 39921630 39921682 1 -chr20 39925760 39925802 1 -chr20 39945563 39945619 1 -chr20 39971565 39971631 1 -chr20 39996957 39997190 1 -chr20 40079585 40079677 1 -chr20 40082884 40082992 1 -chr20 40193098 40193123 1 -chr20 40194895 40194957 1 -chr20 40225061 40225438 1 -chr20 40268513 40268899 1 -chr20 40292900 40293108 1 -chr20 40301789 40301832 1 -chr20 40320463 40320663 1 -chr20 40369987 40370158 1 -chr20 40405454 40405919 1 -chr20 40442918 40443125 1 -chr20 40444643 40445059 1 -chr20 40447220 40447385 1 -chr20 40461147 40461761 1 -chr20 40482051 40482248 1 -chr20 40489114 40489272 1 -chr20 40491776 40492196 1 -chr20 40501351 40501393 1 -chr20 40512170 40512397 1 -chr20 40512559 40512746 1 -chr20 40516694 40517125 1 -chr20 40550803 40551146 1 -chr20 40558016 40558368 1 -chr20 40579342 40579584 1 -chr20 40586758 40587159 1 -chr20 40593019 40593185 1 -chr20 40624273 40624467 1 -chr20 40628384 40628433 1 -chr20 40629112 40629295 1 -chr20 40629571 40629811 1 -chr20 40632682 40633105 1 -chr20 40640763 40641188 1 -chr20 40641280 40641460 1 -chr20 40643288 40643454 1 -chr20 40645282 40645515 1 -chr20 40654725 40654919 1 -chr20 40663224 40663589 1 -chr20 40665400 40665566 1 -chr20 40666741 40666938 1 -chr20 40667666 40667852 1 -chr20 40668705 40668917 1 -chr20 40680293 40680560 1 -chr20 40685027 40685088 1 -chr20 40687214 40687414 1 -chr20 40707328 40707719 1 -chr20 40708817 40709315 1 -chr20 40709374 40709619 1 -chr20 40714651 40714697 1 -chr20 40715183 40715348 1 -chr20 40718895 40719079 1 -chr20 40720264 40720494 1 -chr20 40720566 40720744 1 -chr20 40721618 40721842 1 -chr20 40721991 40722181 1 -chr20 40722181 40722185 2 -chr20 40722185 40722383 1 -chr20 40725043 40725265 1 -chr20 40725563 40725606 1 -chr20 40732258 40732349 1 -chr20 40735861 40736188 1 -chr20 40738113 40738289 1 -chr20 40740698 40741112 1 -chr20 40743302 40743520 1 -chr20 40743634 40744057 1 -chr20 40744057 40744062 2 -chr20 40744062 40744397 1 -chr20 40746146 40746198 1 -chr20 40746405 40746610 1 -chr20 40758842 40759062 1 -chr20 40762804 40763015 1 -chr20 40763348 40763401 1 -chr20 40764730 40764943 1 -chr20 40767754 40768360 1 -chr20 40769880 40770126 1 -chr20 40779220 40779443 1 -chr20 40781226 40781399 1 -chr20 40785333 40785494 1 -chr20 40785494 40785508 2 -chr20 40785508 40785698 1 -chr20 40786432 40786824 1 -chr20 40788448 40788793 1 -chr20 40789341 40789704 1 -chr20 40793794 40793863 1 -chr20 40801043 40801221 1 -chr20 40809637 40809837 1 -chr20 40813058 40813292 1 -chr20 40813661 40813842 1 -chr20 40823098 40823526 1 -chr20 40829270 40829454 1 -chr20 40835745 40835921 1 -chr20 40837197 40837558 1 -chr20 40846644 40846842 1 -chr20 40848264 40848674 1 -chr20 40849528 40849681 1 -chr20 40849687 40850099 1 -chr20 40851950 40852152 1 -chr20 40853395 40853581 1 -chr20 40853581 40853588 2 -chr20 40853588 40853883 1 -chr20 40854461 40854711 1 -chr20 40855476 40855530 1 -chr20 40856967 40857039 1 -chr20 40857173 40857386 1 -chr20 40857740 40857965 1 -chr20 40861134 40861325 1 -chr20 40861628 40861796 1 -chr20 40866444 40866664 1 -chr20 40867355 40867749 1 -chr20 40868092 40868277 1 -chr20 40872244 40872450 1 -chr20 40874117 40874318 1 -chr20 40885240 40885483 1 -chr20 40885668 40885843 1 -chr20 40886153 40886534 1 -chr20 40887183 40887552 1 -chr20 40888643 40888709 1 -chr20 40889061 40889229 1 -chr20 40892875 40892931 1 -chr20 40894044 40894473 1 -chr20 40897031 40897093 1 -chr20 40901001 40901043 1 -chr20 40903176 40903221 1 -chr20 40907112 40907314 1 -chr20 40909110 40909153 1 -chr20 40909438 40909493 1 -chr20 40911106 40911142 1 -chr20 40917375 40917453 1 -chr20 40936969 40937167 1 -chr20 40939021 40939231 1 -chr20 40940200 40940422 1 -chr20 40942559 40942783 1 -chr20 40944566 40944753 1 -chr20 40949080 40949606 1 -chr20 40950298 40950704 1 -chr20 40950733 40950942 1 -chr20 40951515 40951966 1 -chr20 40953684 40953835 1 -chr20 40954212 40954665 1 -chr20 40954722 40954935 1 -chr20 40955639 40955816 1 -chr20 40956645 40956838 1 -chr20 40958446 40958698 1 -chr20 40962408 40962840 1 -chr20 40966511 40966938 1 -chr20 40970587 40970660 1 -chr20 40975949 40975982 1 -chr20 40978038 40978270 1 -chr20 40978278 40978453 1 -chr20 40980873 40980950 1 -chr20 40981050 40981096 1 -chr20 40997591 40997645 1 -chr20 41001258 41001297 1 -chr20 41002602 41002649 1 -chr20 41011187 41011251 1 -chr20 41012462 41012488 1 -chr20 41032685 41032859 1 -chr20 41040694 41040748 1 -chr20 41071496 41071549 1 -chr20 41071549 41071558 2 -chr20 41071558 41071576 1 -chr20 41096208 41096252 1 -chr20 41128973 41129461 1 -chr20 41139876 41140102 1 -chr20 41153374 41153434 1 -chr20 41156250 41156793 1 -chr20 41232737 41232785 1 -chr20 41236242 41236444 1 -chr20 41237077 41237284 1 -chr20 41239058 41239086 1 -chr20 41313699 41313743 1 -chr20 41323875 41324046 1 -chr20 41327684 41327741 1 -chr20 41335563 41335731 1 -chr20 41336621 41337041 1 -chr20 41350709 41350973 1 -chr20 41361837 41361908 1 -chr20 41363679 41363856 1 -chr20 41368227 41368298 1 -chr20 41372591 41372640 1 -chr20 41373041 41373087 1 -chr20 41373453 41373681 1 -chr20 41374649 41374688 1 -chr20 41374791 41375190 1 -chr20 41379530 41379722 1 -chr20 41383358 41383392 1 -chr20 41384003 41384193 1 -chr20 41390044 41390493 1 -chr20 41395183 41395385 1 -chr20 41395641 41395984 1 -chr20 41397618 41397667 1 -chr20 41398121 41398337 1 -chr20 41459997 41460042 1 -chr20 41518994 41519030 1 -chr20 41588982 41589038 1 -chr20 41590531 41590683 1 -chr20 41591214 41591253 1 -chr20 41638888 41639102 1 -chr20 41646743 41646910 1 -chr20 41651412 41651813 1 -chr20 41652116 41652361 1 -chr20 41654197 41654676 1 -chr20 41654819 41655116 1 -chr20 41673318 41673533 1 -chr20 41691181 41691378 1 -chr20 41717599 41717795 1 -chr20 41745440 41745657 1 -chr20 41748994 41749214 1 -chr20 41749418 41749836 1 -chr20 41751655 41751708 1 -chr20 41752343 41752524 1 -chr20 41752526 41752741 1 -chr20 41758966 41759217 1 -chr20 41761074 41761239 1 -chr20 41762346 41762732 1 -chr20 41764220 41764439 1 -chr20 41766474 41766602 1 -chr20 41769621 41769842 1 -chr20 41770031 41770429 1 -chr20 41770488 41770857 1 -chr20 41772531 41772760 1 -chr20 41775279 41775478 1 -chr20 41777227 41777278 1 -chr20 41778142 41778578 1 -chr20 41782312 41782684 1 -chr20 41784395 41784582 1 -chr20 41792673 41793092 1 -chr20 41793206 41793438 1 -chr20 41797113 41797176 1 -chr20 41797636 41797829 1 -chr20 41809500 41809678 1 -chr20 41817300 41817504 1 -chr20 41818901 41819138 1 -chr20 41826142 41826379 1 -chr20 41826990 41827330 1 -chr20 41831766 41831997 1 -chr20 41832495 41833076 1 -chr20 41834184 41834442 1 -chr20 41847155 41847197 1 -chr20 41849653 41850023 1 -chr20 41856430 41856469 1 -chr20 41866023 41866236 1 -chr20 41873539 41873778 1 -chr20 41876554 41876710 1 -chr20 41879862 41880118 1 -chr20 41888266 41888464 1 -chr20 41889019 41889371 1 -chr20 41891303 41891546 1 -chr20 41891598 41891819 1 -chr20 41893155 41893364 1 -chr20 41896703 41896904 1 -chr20 41899316 41899580 1 -chr20 41905551 41905790 1 -chr20 41910773 41910958 1 -chr20 41910959 41911142 1 -chr20 41917310 41917351 1 -chr20 41917494 41917684 1 -chr20 41920010 41920233 1 -chr20 41927345 41927613 1 -chr20 41934466 41934700 1 -chr20 41944619 41944831 1 -chr20 41948651 41949048 1 -chr20 41965969 41966161 1 -chr20 41970064 41970259 1 -chr20 41971966 41972196 1 -chr20 41972846 41973054 1 -chr20 41975482 41975526 1 -chr20 41976833 41977082 1 -chr20 41980266 41980845 1 -chr20 41983224 41983516 1 -chr20 41992737 41992903 1 -chr20 41997239 41997680 1 -chr20 42000611 42000806 1 -chr20 42009405 42009654 1 -chr20 42010532 42010738 1 -chr20 42036229 42036402 1 -chr20 42036995 42037401 1 -chr20 42051304 42051512 1 -chr20 42054644 42055034 1 -chr20 42055742 42055999 1 -chr20 42062059 42062244 1 -chr20 42062871 42062920 1 -chr20 42062946 42063171 1 -chr20 42067274 42067461 1 -chr20 42068581 42068621 1 -chr20 42068837 42069060 1 -chr20 42085169 42085218 1 -chr20 42085305 42085552 1 -chr20 42086709 42086770 1 -chr20 42088022 42088287 1 -chr20 42090544 42090941 1 -chr20 42094909 42095051 1 -chr20 42095427 42095630 1 -chr20 42096908 42097155 1 -chr20 42097516 42097935 1 -chr20 42098026 42098263 1 -chr20 42099738 42099784 1 -chr20 42101562 42101598 1 -chr20 42102889 42103102 1 -chr20 42104994 42105414 1 -chr20 42106034 42106325 1 -chr20 42110274 42110464 1 -chr20 42110934 42111158 1 -chr20 42111208 42111419 1 -chr20 42112608 42112806 1 -chr20 42113027 42113496 1 -chr20 42114298 42114657 1 -chr20 42115824 42116068 1 -chr20 42116175 42116388 1 -chr20 42117367 42117687 1 -chr20 42117991 42118384 1 -chr20 42147344 42147760 1 -chr20 42149693 42149729 1 -chr20 42157747 42157919 1 -chr20 42161385 42161592 1 -chr20 42189658 42189869 1 -chr20 42198856 42198900 1 -chr20 42199129 42199956 1 -chr20 42204917 42205104 1 -chr20 42211681 42211804 1 -chr20 42214712 42215210 1 -chr20 42215391 42215612 1 -chr20 42217559 42217959 1 -chr20 42218210 42218795 1 -chr20 42219747 42219955 1 -chr20 42220163 42220365 1 -chr20 42224372 42224547 1 -chr20 42224547 42224556 2 -chr20 42224556 42224945 1 -chr20 42225505 42225725 1 -chr20 42226864 42227291 1 -chr20 42254186 42254576 1 -chr20 42259602 42259802 1 -chr20 42264062 42264126 1 -chr20 42264307 42264684 1 -chr20 42310152 42310405 1 -chr20 42315132 42315171 1 -chr20 42316613 42316789 1 -chr20 42327651 42328007 1 -chr20 42344336 42344511 1 -chr20 42345363 42345388 1 -chr20 42353457 42353650 1 -chr20 42354095 42354289 1 -chr20 42355801 42355871 1 -chr20 42356734 42356930 1 -chr20 42360034 42360239 1 -chr20 42361160 42361612 1 -chr20 42361672 42361718 1 -chr20 42362149 42362210 1 -chr20 42362529 42362712 1 -chr20 42363017 42363058 1 -chr20 42364562 42364787 1 -chr20 42364866 42365200 1 -chr20 42365775 42366128 1 -chr20 42367509 42367727 1 -chr20 42368512 42368899 1 -chr20 42376466 42376889 1 -chr20 42378505 42378743 1 -chr20 42380161 42380346 1 -chr20 42391463 42391691 1 -chr20 42394790 42395208 1 -chr20 42400674 42400900 1 -chr20 42412736 42413294 1 -chr20 42419378 42419601 1 -chr20 42423343 42423561 1 -chr20 42427688 42427729 1 -chr20 42439532 42439779 1 -chr20 42442164 42442202 1 -chr20 42463549 42463728 1 -chr20 42466260 42466460 1 -chr20 42468853 42469070 1 -chr20 42469588 42469800 1 -chr20 42470747 42471133 1 -chr20 42475758 42475971 1 -chr20 42476388 42476840 1 -chr20 42477837 42478175 1 -chr20 42486139 42486411 1 -chr20 42493475 42493644 1 -chr20 42505414 42505455 1 -chr20 42512910 42512941 1 -chr20 42527308 42527477 1 -chr20 42532884 42533313 1 -chr20 42533455 42533641 1 -chr20 42535767 42535813 1 -chr20 42548799 42549023 1 -chr20 42551579 42551961 1 -chr20 42557126 42557357 1 -chr20 42558369 42558423 1 -chr20 42558886 42559151 1 -chr20 42565792 42565987 1 -chr20 42575152 42575708 1 -chr20 42599339 42599542 1 -chr20 42600566 42600749 1 -chr20 42600910 42601118 1 -chr20 42604800 42605218 1 -chr20 42615088 42615252 1 -chr20 42616334 42616538 1 -chr20 42619784 42619822 1 -chr20 42620461 42620506 1 -chr20 42629725 42629984 1 -chr20 42654549 42654725 1 -chr20 42678560 42678595 1 -chr20 42704491 42704721 1 -chr20 42723629 42723880 1 -chr20 42729032 42729266 1 -chr20 42748666 42748843 1 -chr20 42749160 42749359 1 -chr20 42749389 42749823 1 -chr20 42750477 42750753 1 -chr20 42751741 42751790 1 -chr20 42752988 42753216 1 -chr20 42753579 42753713 1 -chr20 42754735 42754982 1 -chr20 42756500 42756559 1 -chr20 42757277 42758110 1 -chr20 42759549 42759946 1 -chr20 42760005 42760250 1 -chr20 42760712 42760877 1 -chr20 42771131 42771339 1 -chr20 42777887 42778111 1 -chr20 42785578 42785803 1 -chr20 42785892 42785959 1 -chr20 42790377 42790432 1 -chr20 42790655 42791045 1 -chr20 42794137 42794477 1 -chr20 42795407 42795628 1 -chr20 42799292 42799717 1 -chr20 42803618 42803674 1 -chr20 42803753 42803797 1 -chr20 42808918 42809305 1 -chr20 42810483 42810694 1 -chr20 42818075 42818271 1 -chr20 42818739 42818895 1 -chr20 42822236 42822487 1 -chr20 42837418 42837576 1 -chr20 42838853 42839062 1 -chr20 42840094 42840259 1 -chr20 42840823 42841027 1 -chr20 42845662 42845838 1 -chr20 42858680 42858920 1 -chr20 42876525 42876927 1 -chr20 42880612 42880996 1 -chr20 42887958 42888166 1 -chr20 42893601 42893676 1 -chr20 42894781 42895212 1 -chr20 42904063 42904269 1 -chr20 42907385 42907584 1 -chr20 42907971 42908179 1 -chr20 42909686 42909871 1 -chr20 42915336 42915515 1 -chr20 42916469 42916682 1 -chr20 42917032 42917209 1 -chr20 42917689 42917896 1 -chr20 42919586 42919815 1 -chr20 42922711 42922958 1 -chr20 42931815 42932768 1 -chr20 42942900 42943276 1 -chr20 42944758 42944922 1 -chr20 42948996 42949241 1 -chr20 42959090 42959303 1 -chr20 42963903 42964090 1 -chr20 42965959 42966154 1 -chr20 42967684 42967727 1 -chr20 42967991 42968213 1 -chr20 42970017 42970054 1 -chr20 42979144 42979756 1 -chr20 42980341 42980558 1 -chr20 42981639 42981889 1 -chr20 42986900 42987260 1 -chr20 42992345 42992550 1 -chr20 43005477 43005688 1 -chr20 43005688 43005711 2 -chr20 43005711 43005885 1 -chr20 43008931 43008979 1 -chr20 43013816 43014034 1 -chr20 43015020 43015408 1 -chr20 43030828 43031033 1 -chr20 43043704 43044092 1 -chr20 43047496 43047634 1 -chr20 43050164 43050603 1 -chr20 43068071 43068112 1 -chr20 43074950 43075113 1 -chr20 43084039 43084094 1 -chr20 43084850 43085098 1 -chr20 43085564 43085637 1 -chr20 43086328 43086716 1 -chr20 43088476 43088625 1 -chr20 43093783 43094123 1 -chr20 43097784 43098042 1 -chr20 43105964 43106191 1 -chr20 43111356 43111409 1 -chr20 43118546 43118590 1 -chr20 43119512 43119742 1 -chr20 43125710 43125934 1 -chr20 43126225 43126268 1 -chr20 43126710 43126898 1 -chr20 43127960 43128148 1 -chr20 43129264 43129448 1 -chr20 43131257 43131643 1 -chr20 43138873 43139114 1 -chr20 43139289 43139694 1 -chr20 43160422 43160642 1 -chr20 43166344 43166473 1 -chr20 43170616 43171045 1 -chr20 43173507 43173700 1 -chr20 43175912 43175971 1 -chr20 43183128 43183338 1 -chr20 43183668 43183910 1 -chr20 43185174 43185419 1 -chr20 43187692 43187959 1 -chr20 43187959 43187961 2 -chr20 43187961 43188173 1 -chr20 43188896 43189036 1 -chr20 43190092 43190478 1 -chr20 43195113 43195352 1 -chr20 43196956 43197164 1 -chr20 43198345 43198404 1 -chr20 43198695 43198925 1 -chr20 43200307 43200527 1 -chr20 43202491 43202696 1 -chr20 43217022 43217369 1 -chr20 43231120 43231159 1 -chr20 43231825 43231901 1 -chr20 43232141 43232520 1 -chr20 43232704 43232908 1 -chr20 43233656 43233801 1 -chr20 43238419 43238655 1 -chr20 43246282 43246691 1 -chr20 43251053 43251216 1 -chr20 43255364 43255561 1 -chr20 43256195 43256418 1 -chr20 43261414 43261662 1 -chr20 43262106 43262294 1 -chr20 43266010 43266271 1 -chr20 43269465 43270056 1 -chr20 43272646 43272932 1 -chr20 43288360 43288407 1 -chr20 43295188 43295415 1 -chr20 43298475 43298527 1 -chr20 43312076 43312299 1 -chr20 43312546 43312599 1 -chr20 43313036 43313205 1 -chr20 43314757 43315145 1 -chr20 43316563 43316754 1 -chr20 43320107 43320290 1 -chr20 43321922 43322263 1 -chr20 43322460 43322698 1 -chr20 43322970 43323374 1 -chr20 43324239 43324316 1 -chr20 43326438 43326636 1 -chr20 43327703 43327992 1 -chr20 43332659 43332881 1 -chr20 43338944 43338972 1 -chr20 43339244 43339307 1 -chr20 43340278 43340507 1 -chr20 43341901 43341941 1 -chr20 43346252 43346425 1 -chr20 43348539 43348771 1 -chr20 43349837 43350041 1 -chr20 43352560 43352735 1 -chr20 43353460 43353544 1 -chr20 43356191 43356231 1 -chr20 43356495 43356555 1 -chr20 43358132 43358359 1 -chr20 43358466 43358687 1 -chr20 43362480 43362647 1 -chr20 43364645 43364709 1 -chr20 43371276 43371515 1 -chr20 43372919 43373137 1 -chr20 43374931 43375112 1 -chr20 43376758 43376786 1 -chr20 43379887 43380294 1 -chr20 43381357 43381569 1 -chr20 43383356 43383725 1 -chr20 43385995 43386158 1 -chr20 43388380 43388424 1 -chr20 43389024 43389223 1 -chr20 43391693 43391900 1 -chr20 43392643 43392823 1 -chr20 43398629 43398843 1 -chr20 43399552 43399585 1 -chr20 43400218 43400247 1 -chr20 43402863 43403005 1 -chr20 43404258 43404425 1 -chr20 43408643 43408826 1 -chr20 43416190 43416421 1 -chr20 43423427 43423625 1 -chr20 43424940 43425011 1 -chr20 43428724 43428892 1 -chr20 43428892 43428899 2 -chr20 43428899 43429085 1 -chr20 43429620 43429798 1 -chr20 43432864 43432949 1 -chr20 43433841 43434003 1 -chr20 43434165 43434320 1 -chr20 43435506 43435708 1 -chr20 43435838 43436031 1 -chr20 43436200 43436640 1 -chr20 43437284 43437532 1 -chr20 43437736 43437789 1 -chr20 43453083 43453125 1 -chr20 43455801 43455981 1 -chr20 43456358 43456418 1 -chr20 43470272 43470316 1 -chr20 43474881 43474930 1 -chr20 43477113 43477295 1 -chr20 43478118 43478326 1 -chr20 43481185 43481382 1 -chr20 43486941 43487108 1 -chr20 43487998 43488201 1 -chr20 43493905 43493961 1 -chr20 43494966 43495178 1 -chr20 43496456 43496499 1 -chr20 43499909 43499953 1 -chr20 43501176 43501220 1 -chr20 43505858 43505903 1 -chr20 43506727 43506910 1 -chr20 43506910 43506918 2 -chr20 43506918 43507115 1 -chr20 43513986 43514805 1 -chr20 43544833 43544865 1 -chr20 43558127 43558191 1 -chr20 43587391 43587436 1 -chr20 43590906 43591146 1 -chr20 43616886 43616930 1 -chr20 43627216 43627310 1 -chr20 43641945 43642007 1 -chr20 43643990 43644032 1 -chr20 43675448 43675511 1 -chr20 43678240 43678289 1 -chr20 43696833 43696886 1 -chr20 43708152 43708213 1 -chr20 43720180 43720754 1 -chr20 43722055 43722306 1 -chr20 43728525 43728713 1 -chr20 43733974 43734034 1 -chr20 43734160 43734336 1 -chr20 43735599 43735650 1 -chr20 43736355 43736386 1 -chr20 43739122 43739167 1 -chr20 43739738 43739781 1 -chr20 43740918 43741090 1 -chr20 43744193 43744249 1 -chr20 43747403 43747455 1 -chr20 43749213 43749370 1 -chr20 43749852 43749943 1 -chr20 43756460 43756513 1 -chr20 43761722 43761896 1 -chr20 43763672 43763712 1 -chr20 43768516 43768727 1 -chr20 43769426 43769662 1 -chr20 43770692 43771093 1 -chr20 43773494 43773831 1 -chr20 43775908 43776108 1 -chr20 43786923 43786965 1 -chr20 43787118 43787165 1 -chr20 43789775 43789987 1 -chr20 43795311 43795565 1 -chr20 43798538 43798755 1 -chr20 43799539 43799777 1 -chr20 43800063 43800224 1 -chr20 43802259 43802320 1 -chr20 43813310 43813385 1 -chr20 43817392 43817578 1 -chr20 43819101 43819238 1 -chr20 43822143 43822390 1 -chr20 43823093 43823304 1 -chr20 43824043 43824239 1 -chr20 43825429 43825483 1 -chr20 43830393 43830578 1 -chr20 43830970 43831200 1 -chr20 43831586 43831776 1 -chr20 43832547 43832711 1 -chr20 43833279 43833388 1 -chr20 43834059 43834234 1 -chr20 43835133 43835347 1 -chr20 43836322 43836493 1 -chr20 43837988 43838163 1 -chr20 43838905 43839075 1 -chr20 43843471 43843648 1 -chr20 43843870 43844049 1 -chr20 43846200 43846426 1 -chr20 43846691 43846767 1 -chr20 43846993 43847146 1 -chr20 43849104 43849167 1 -chr20 43849331 43849521 1 -chr20 43849627 43849983 1 -chr20 43850065 43850230 1 -chr20 43852693 43852734 1 -chr20 43855079 43855140 1 -chr20 43855267 43855466 1 -chr20 43859185 43859223 1 -chr20 43859342 43859381 1 -chr20 43864082 43864338 1 -chr20 43866331 43866589 1 -chr20 43866648 43866702 1 -chr20 43869480 43870013 1 -chr20 43871651 43871755 1 -chr20 43872270 43872365 1 -chr20 43893423 43893567 1 -chr20 43894469 43894706 1 -chr20 43895159 43895405 1 -chr20 43897007 43897071 1 -chr20 43897254 43897294 1 -chr20 43899516 43899683 1 -chr20 43901472 43901521 1 -chr20 43903657 43903854 1 -chr20 43904884 43905290 1 -chr20 43911745 43911799 1 -chr20 43916364 43916551 1 -chr20 43917105 43917331 1 -chr20 43917426 43917673 1 -chr20 43920352 43920657 1 -chr20 43923612 43923664 1 -chr20 43924067 43924278 1 -chr20 43924278 43924287 2 -chr20 43924287 43924461 1 -chr20 43924749 43924933 1 -chr20 43926152 43926379 1 -chr20 43926489 43926658 1 -chr20 43926842 43926906 1 -chr20 43926915 43927328 1 -chr20 43927792 43927970 1 -chr20 43928423 43928624 1 -chr20 43930483 43930728 1 -chr20 43930920 43931128 1 -chr20 43934799 43934824 1 -chr20 43936204 43936414 1 -chr20 43940592 43940790 1 -chr20 43940791 43941008 1 -chr20 43941053 43941106 1 -chr20 43944153 43944382 1 -chr20 43946258 43946428 1 -chr20 43949220 43949425 1 -chr20 43951368 43951402 1 -chr20 43953293 43953466 1 -chr20 43954376 43954563 1 -chr20 43955776 43956198 1 -chr20 43957366 43957625 1 -chr20 43958347 43958623 1 -chr20 43959146 43959348 1 -chr20 43959415 43959466 1 -chr20 43962237 43962433 1 -chr20 43963333 43963508 1 -chr20 43969151 43969410 1 -chr20 43970678 43970899 1 -chr20 43979560 43979786 1 -chr20 43983604 43983775 1 -chr20 43985834 43986210 1 -chr20 43989054 43989446 1 -chr20 43992932 43993149 1 -chr20 43995168 43995575 1 -chr20 43997775 43997964 1 -chr20 44004014 44004401 1 -chr20 44013230 44013274 1 -chr20 44014264 44014493 1 -chr20 44016553 44016593 1 -chr20 44017054 44017277 1 -chr20 44018314 44018354 1 -chr20 44018354 44018364 2 -chr20 44018364 44018440 1 -chr20 44018635 44019218 1 -chr20 44021912 44022267 1 -chr20 44022666 44022856 1 -chr20 44028994 44029159 1 -chr20 44029470 44029678 1 -chr20 44029962 44030004 1 -chr20 44030004 44030005 2 -chr20 44030005 44030088 1 -chr20 44034617 44034800 1 -chr20 44038746 44038894 1 -chr20 44040056 44040419 1 -chr20 44044039 44044119 1 -chr20 44046834 44047229 1 -chr20 44047229 44047231 2 -chr20 44047231 44047431 1 -chr20 44049097 44049307 1 -chr20 44050343 44050536 1 -chr20 44051362 44051415 1 -chr20 44056193 44056315 1 -chr20 44057457 44057658 1 -chr20 44062972 44063004 1 -chr20 44064708 44064778 1 -chr20 44065537 44065585 1 -chr20 44068586 44068628 1 -chr20 44071285 44071329 1 -chr20 44072606 44072673 1 -chr20 44072686 44072755 1 -chr20 44076538 44076713 1 -chr20 44080918 44081241 1 -chr20 44083081 44083270 1 -chr20 44083365 44083544 1 -chr20 44083972 44084143 1 -chr20 44090108 44090361 1 -chr20 44091170 44091235 1 -chr20 44094070 44094116 1 -chr20 44094890 44095151 1 -chr20 44100965 44101168 1 -chr20 44104048 44104255 1 -chr20 44111688 44111902 1 -chr20 44113450 44113698 1 -chr20 44113928 44114135 1 -chr20 44116813 44116866 1 -chr20 44118557 44118781 1 -chr20 44119680 44119769 1 -chr20 44121277 44121324 1 -chr20 44121369 44121714 1 -chr20 44124853 44124897 1 -chr20 44125620 44125675 1 -chr20 44127828 44128107 1 -chr20 44129532 44129682 1 -chr20 44130395 44130580 1 -chr20 44130680 44130860 1 -chr20 44132957 44133140 1 -chr20 44135732 44135898 1 -chr20 44139231 44139470 1 -chr20 44144628 44144673 1 -chr20 44151659 44151712 1 -chr20 44152070 44152430 1 -chr20 44153153 44153258 1 -chr20 44153690 44153736 1 -chr20 44154476 44154686 1 -chr20 44155330 44155384 1 -chr20 44156538 44156743 1 -chr20 44158051 44158222 1 -chr20 44165193 44165382 1 -chr20 44165555 44165612 1 -chr20 44171578 44171718 1 -chr20 44172843 44173047 1 -chr20 44185004 44185061 1 -chr20 44191288 44191421 1 -chr20 44191754 44191800 1 -chr20 44192140 44192342 1 -chr20 44204974 44205121 1 -chr20 44210834 44210906 1 -chr20 44218851 44219299 1 -chr20 44220888 44221268 1 -chr20 44232323 44232362 1 -chr20 44233077 44233288 1 -chr20 44234631 44234876 1 -chr20 44235417 44235448 1 -chr20 44237015 44237057 1 -chr20 44238007 44238285 1 -chr20 44238514 44238542 1 -chr20 44241850 44242017 1 -chr20 44244164 44244727 1 -chr20 44244974 44245173 1 -chr20 44247055 44247112 1 -chr20 44247569 44247743 1 -chr20 44249581 44249657 1 -chr20 44253886 44254265 1 -chr20 44254507 44254933 1 -chr20 44255437 44255486 1 -chr20 44255878 44256103 1 -chr20 44258611 44258674 1 -chr20 44260237 44260517 1 -chr20 44260605 44260973 1 -chr20 44264230 44264410 1 -chr20 44264967 44265127 1 -chr20 44265427 44265654 1 -chr20 44265806 44265984 1 -chr20 44268063 44268255 1 -chr20 44268514 44268700 1 -chr20 44270662 44270707 1 -chr20 44271566 44271620 1 -chr20 44272268 44272459 1 -chr20 44273142 44273352 1 -chr20 44274577 44274630 1 -chr20 44274806 44274848 1 -chr20 44277418 44277462 1 -chr20 44279111 44279150 1 -chr20 44281456 44281659 1 -chr20 44282186 44282249 1 -chr20 44282605 44282813 1 -chr20 44284206 44284242 1 -chr20 44287274 44287420 1 -chr20 44292405 44292441 1 -chr20 44296683 44296717 1 -chr20 44298325 44298682 1 -chr20 44313835 44313915 1 -chr20 44319418 44319767 1 -chr20 44320029 44320424 1 -chr20 44324425 44324777 1 -chr20 44326778 44327012 1 -chr20 44327303 44327501 1 -chr20 44329909 44330091 1 -chr20 44332897 44332960 1 -chr20 44334823 44334855 1 -chr20 44337622 44337671 1 -chr20 44339033 44339213 1 -chr20 44347039 44347096 1 -chr20 44347798 44348005 1 -chr20 44348027 44348275 1 -chr20 44348324 44348373 1 -chr20 44349930 44349967 1 -chr20 44359764 44359957 1 -chr20 44363350 44363516 1 -chr20 44364246 44364458 1 -chr20 44368461 44368716 1 -chr20 44370338 44370893 1 -chr20 44372431 44372821 1 -chr20 44377906 44378189 1 -chr20 44381700 44381739 1 -chr20 44383115 44383141 1 -chr20 44384486 44384694 1 -chr20 44388724 44388765 1 -chr20 44399969 44400196 1 -chr20 44401648 44401813 1 -chr20 44402015 44402230 1 -chr20 44402451 44402638 1 -chr20 44404815 44404911 1 -chr20 44413667 44413732 1 -chr20 44416616 44416857 1 -chr20 44416857 44416860 2 -chr20 44416860 44416898 1 -chr20 44418917 44419007 1 -chr20 44421557 44421651 1 -chr20 44426395 44426442 1 -chr20 44428496 44428667 1 -chr20 44430335 44430376 1 -chr20 44432513 44432854 1 -chr20 44433024 44433250 1 -chr20 44440828 44441038 1 -chr20 44446299 44446529 1 -chr20 44447626 44447800 1 -chr20 44449822 44449885 1 -chr20 44451153 44451364 1 -chr20 44451516 44451558 1 -chr20 44453694 44453921 1 -chr20 44455833 44455998 1 -chr20 44464792 44464865 1 -chr20 44464900 44464958 1 -chr20 44468298 44468362 1 -chr20 44473592 44473789 1 -chr20 44478928 44479088 1 -chr20 44516511 44516610 1 -chr20 44526646 44526691 1 -chr20 44529003 44529063 1 -chr20 44530683 44530714 1 -chr20 44565218 44565415 1 -chr20 44567884 44568041 1 -chr20 44579467 44579632 1 -chr20 44579767 44580019 1 -chr20 44581515 44581600 1 -chr20 44582061 44582268 1 -chr20 44583484 44583685 1 -chr20 44583942 44584325 1 -chr20 44587375 44587424 1 -chr20 44591305 44591553 1 -chr20 44606608 44606675 1 -chr20 44615311 44615365 1 -chr20 44644614 44644805 1 -chr20 44645687 44645771 1 -chr20 44646062 44646254 1 -chr20 44649426 44649629 1 -chr20 44655265 44655484 1 -chr20 44655812 44655994 1 -chr20 44661582 44661798 1 -chr20 44662259 44662611 1 -chr20 44663998 44664252 1 -chr20 44665667 44665855 1 -chr20 44665918 44666095 1 -chr20 44666134 44666354 1 -chr20 44666356 44666527 1 -chr20 44666527 44666547 2 -chr20 44666547 44666557 1 -chr20 44666557 44666576 2 -chr20 44666576 44666778 1 -chr20 44668341 44668515 1 -chr20 44669098 44669157 1 -chr20 44678301 44678494 1 -chr20 44680492 44680700 1 -chr20 44681327 44681377 1 -chr20 44685340 44685775 1 -chr20 44688812 44688859 1 -chr20 44689706 44690060 1 -chr20 44702566 44702818 1 -chr20 44703809 44704196 1 -chr20 44704448 44704834 1 -chr20 44707094 44707143 1 -chr20 44711372 44711422 1 -chr20 44713406 44713629 1 -chr20 44713880 44714040 1 -chr20 44715839 44716241 1 -chr20 44716403 44716602 1 -chr20 44716675 44716836 1 -chr20 44719527 44719590 1 -chr20 44722207 44722405 1 -chr20 44722964 44723050 1 -chr20 44732494 44732701 1 -chr20 44733577 44733928 1 -chr20 44745832 44746084 1 -chr20 44746268 44746638 1 -chr20 44746683 44746929 1 -chr20 44747028 44747225 1 -chr20 44748281 44748466 1 -chr20 44749325 44749396 1 -chr20 44750127 44750175 1 -chr20 44750187 44750227 1 -chr20 44754198 44754251 1 -chr20 44755600 44755782 1 -chr20 44757562 44757623 1 -chr20 44762579 44762808 1 -chr20 44763199 44763384 1 -chr20 44768451 44768651 1 -chr20 44771229 44771614 1 -chr20 44771658 44771852 1 -chr20 44772024 44772253 1 -chr20 44772253 44772254 2 -chr20 44772254 44772498 1 -chr20 44773786 44774173 1 -chr20 44784198 44784383 1 -chr20 44791321 44791394 1 -chr20 44793526 44793674 1 -chr20 44794084 44794250 1 -chr20 44794402 44794572 1 -chr20 44796763 44796952 1 -chr20 44797397 44797611 1 -chr20 44798596 44798754 1 -chr20 44799420 44799674 1 -chr20 44799976 44800197 1 -chr20 44800635 44801014 1 -chr20 44802544 44802777 1 -chr20 44804708 44804785 1 -chr20 44806504 44806724 1 -chr20 44811318 44811389 1 -chr20 44816604 44816825 1 -chr20 44817408 44817738 1 -chr20 44817738 44817758 2 -chr20 44817758 44817926 1 -chr20 44818216 44818449 1 -chr20 44819085 44819282 1 -chr20 44828900 44828944 1 -chr20 44830202 44830402 1 -chr20 44834476 44834678 1 -chr20 44838520 44838710 1 -chr20 44838809 44839031 1 -chr20 44841092 44841133 1 -chr20 44848386 44848432 1 -chr20 44848806 44848969 1 -chr20 44849660 44849912 1 -chr20 44849940 44850158 1 -chr20 44850446 44850815 1 -chr20 44852262 44852303 1 -chr20 44853884 44854128 1 -chr20 44863846 44864045 1 -chr20 44866452 44866619 1 -chr20 44867967 44868020 1 -chr20 44870903 44870950 1 -chr20 44874330 44874406 1 -chr20 44876255 44876446 1 -chr20 44957221 44957266 1 -chr20 44974098 44974138 1 -chr20 44978908 44978942 1 -chr20 44984825 44984897 1 -chr20 45046769 45046810 1 -chr20 45063397 45063500 1 -chr20 45078351 45078405 1 -chr20 45096830 45097277 1 -chr20 45097508 45097684 1 -chr20 45099372 45099514 1 -chr20 45100254 45100305 1 -chr20 45102405 45102555 1 -chr20 45103563 45103717 1 -chr20 45104458 45104532 1 -chr20 45104820 45105019 1 -chr20 45106713 45106923 1 -chr20 45107894 45107955 1 -chr20 45109333 45109393 1 -chr20 45110801 45111034 1 -chr20 45111034 45111038 2 -chr20 45111038 45111079 1 -chr20 45111644 45111839 1 -chr20 45112940 45113172 1 -chr20 45113228 45113430 1 -chr20 45115457 45115650 1 -chr20 45115930 45116324 1 -chr20 45117595 45117832 1 -chr20 45119641 45119838 1 -chr20 45121635 45121805 1 -chr20 45122387 45122593 1 -chr20 45123993 45124206 1 -chr20 45124433 45124619 1 -chr20 45128144 45128228 1 -chr20 45129717 45129746 1 -chr20 45135608 45135820 1 -chr20 45140294 45140345 1 -chr20 45143335 45143567 1 -chr20 45146757 45147140 1 -chr20 45150477 45150704 1 -chr20 45151506 45151737 1 -chr20 45155297 45155451 1 -chr20 45156781 45156856 1 -chr20 45166792 45166977 1 -chr20 45167915 45167981 1 -chr20 45175786 45175989 1 -chr20 45176015 45176211 1 -chr20 45177313 45177733 1 -chr20 45178358 45178550 1 -chr20 45178948 45179145 1 -chr20 45180018 45180206 1 -chr20 45184825 45185003 1 -chr20 45185076 45185673 1 -chr20 45190542 45190692 1 -chr20 45194217 45194445 1 -chr20 45194474 45194699 1 -chr20 45195760 45195956 1 -chr20 45196451 45196645 1 -chr20 45200719 45200890 1 -chr20 45202628 45202824 1 -chr20 45207439 45207613 1 -chr20 45210081 45210321 1 -chr20 45210825 45211035 1 -chr20 45215330 45215396 1 -chr20 45216778 45216806 1 -chr20 45218121 45218334 1 -chr20 45220420 45220631 1 -chr20 45221105 45221485 1 -chr20 45222705 45222896 1 -chr20 45230831 45230910 1 -chr20 45232222 45232608 1 -chr20 45236294 45236451 1 -chr20 45245748 45245934 1 -chr20 45245992 45246185 1 -chr20 45247846 45248050 1 -chr20 45248111 45248555 1 -chr20 45250121 45250298 1 -chr20 45254204 45254231 1 -chr20 45255801 45255844 1 -chr20 45259081 45259513 1 -chr20 45259973 45260178 1 -chr20 45267308 45267519 1 -chr20 45269130 45269305 1 -chr20 45270608 45270778 1 -chr20 45275115 45275319 1 -chr20 45277818 45277909 1 -chr20 45279092 45279128 1 -chr20 45279816 45279860 1 -chr20 45280533 45280588 1 -chr20 45282374 45282568 1 -chr20 45283622 45283966 1 -chr20 45284057 45284249 1 -chr20 45287189 45287230 1 -chr20 45290844 45291292 1 -chr20 45291674 45291838 1 -chr20 45292209 45292427 1 -chr20 45293151 45293364 1 -chr20 45293745 45293917 1 -chr20 45306707 45306853 1 -chr20 45309217 45309449 1 -chr20 45309531 45309737 1 -chr20 45311528 45311707 1 -chr20 45312196 45312390 1 -chr20 45313675 45313831 1 -chr20 45320175 45320248 1 -chr20 45356835 45356896 1 -chr20 45378266 45378668 1 -chr20 45380564 45380763 1 -chr20 45385030 45385080 1 -chr20 45391291 45391495 1 -chr20 45392863 45393190 1 -chr20 45398032 45398077 1 -chr20 45399953 45400221 1 -chr20 45411472 45411512 1 -chr20 45411643 45411692 1 -chr20 45440867 45441118 1 -chr20 45443200 45443232 1 -chr20 45446545 45446749 1 -chr20 45453014 45453055 1 -chr20 45453357 45453528 1 -chr20 45458804 45458986 1 -chr20 45459312 45459575 1 -chr20 45461329 45461517 1 -chr20 45464618 45465021 1 -chr20 45466059 45466102 1 -chr20 45470692 45470870 1 -chr20 45471328 45471531 1 -chr20 45471683 45471884 1 -chr20 45477351 45477395 1 -chr20 45479984 45480029 1 -chr20 45480909 45481124 1 -chr20 45482167 45482343 1 -chr20 45489431 45489646 1 -chr20 45490243 45490498 1 -chr20 45494107 45494139 1 -chr20 45494312 45494515 1 -chr20 45495327 45495518 1 -chr20 45496603 45496646 1 -chr20 45497490 45497538 1 -chr20 45497895 45497941 1 -chr20 45500015 45500062 1 -chr20 45500432 45500593 1 -chr20 45502732 45502882 1 -chr20 45506652 45506857 1 -chr20 45511577 45511760 1 -chr20 45512625 45512794 1 -chr20 45512917 45512957 1 -chr20 45514150 45514510 1 -chr20 45515928 45516346 1 -chr20 45517198 45517301 1 -chr20 45525947 45526172 1 -chr20 45532016 45532194 1 -chr20 45534468 45534680 1 -chr20 45536504 45536934 1 -chr20 45547350 45547572 1 -chr20 45548122 45548318 1 -chr20 45549548 45549928 1 -chr20 45554368 45554595 1 -chr20 45558375 45558605 1 -chr20 45558851 45559089 1 -chr20 45559130 45559325 1 -chr20 45562378 45562570 1 -chr20 45566546 45566605 1 -chr20 45567960 45568014 1 -chr20 45575465 45575660 1 -chr20 45576072 45576125 1 -chr20 45576282 45576335 1 -chr20 45582285 45582449 1 -chr20 45583208 45583413 1 -chr20 45583478 45583512 1 -chr20 45584290 45584332 1 -chr20 45588450 45588842 1 -chr20 45596411 45596596 1 -chr20 45598004 45598201 1 -chr20 45599588 45599718 1 -chr20 45602610 45602669 1 -chr20 45605133 45605188 1 -chr20 45611805 45611863 1 -chr20 45624080 45624122 1 -chr20 45630231 45630451 1 -chr20 45634233 45634398 1 -chr20 45642501 45642570 1 -chr20 45642573 45642807 1 -chr20 45647505 45647736 1 -chr20 45654606 45654758 1 -chr20 45657295 45657353 1 -chr20 45659146 45659192 1 -chr20 45678524 45679098 1 -chr20 45682849 45683052 1 -chr20 45683207 45683373 1 -chr20 45685834 45686244 1 -chr20 45690336 45690474 1 -chr20 45698193 45698370 1 -chr20 45699922 45699954 1 -chr20 45702619 45702909 1 -chr20 45704923 45705123 1 -chr20 45719409 45719638 1 -chr20 45719661 45719844 1 -chr20 45726571 45726739 1 -chr20 45728062 45728302 1 -chr20 45730836 45730870 1 -chr20 45741726 45741948 1 -chr20 45743203 45743407 1 -chr20 45748448 45748786 1 -chr20 45754985 45755184 1 -chr20 45767274 45767503 1 -chr20 45775166 45775209 1 -chr20 45775252 45775936 1 -chr20 45795651 45795681 1 -chr20 45797386 45797588 1 -chr20 45827268 45827488 1 -chr20 45829600 45829652 1 -chr20 45849961 45850016 1 -chr20 45855618 45855663 1 -chr20 45867191 45867230 1 -chr20 45870236 45870288 1 -chr20 45879331 45879383 1 -chr20 45886118 45886170 1 -chr20 45889846 45889891 1 -chr20 45903903 45904211 1 -chr20 45917452 45917491 1 -chr20 45921298 45921329 1 -chr20 45923732 45923808 1 -chr20 45939658 45939998 1 -chr20 45954873 45954912 1 -chr20 45991129 45991171 1 -chr20 45995337 45995519 1 -chr20 45997026 45997225 1 -chr20 45998291 45998510 1 -chr20 45998570 45998645 1 -chr20 45999416 45999466 1 -chr20 46001064 46001135 1 -chr20 46004544 46004798 1 -chr20 46005946 46006186 1 -chr20 46006370 46006597 1 -chr20 46008066 46008259 1 -chr20 46011102 46011271 1 -chr20 46012248 46012500 1 -chr20 46012986 46013014 1 -chr20 46013363 46013686 1 -chr20 46014247 46014584 1 -chr20 46018074 46018572 1 -chr20 46029592 46029637 1 -chr20 46029861 46029886 1 -chr20 46033094 46033282 1 -chr20 46033623 46033854 1 -chr20 46034150 46034238 1 -chr20 46035295 46035459 1 -chr20 46036514 46036686 1 -chr20 46042763 46042978 1 -chr20 46047650 46047856 1 -chr20 46049151 46049345 1 -chr20 46053510 46053708 1 -chr20 46058199 46058398 1 -chr20 46085226 46085278 1 -chr20 46088624 46088823 1 -chr20 46100682 46100734 1 -chr20 46100884 46101033 1 -chr20 46105725 46106101 1 -chr20 46106574 46106627 1 -chr20 46108247 46108705 1 -chr20 46109487 46109696 1 -chr20 46110116 46110307 1 -chr20 46111587 46111634 1 -chr20 46112253 46112478 1 -chr20 46113610 46113665 1 -chr20 46114605 46114720 1 -chr20 46114720 46114729 2 -chr20 46114729 46114770 1 -chr20 46120030 46120236 1 -chr20 46120236 46120252 2 -chr20 46120252 46120404 1 -chr20 46121039 46121226 1 -chr20 46121451 46121507 1 -chr20 46121634 46121823 1 -chr20 46121823 46121839 2 -chr20 46121839 46122029 1 -chr20 46123894 46123947 1 -chr20 46125906 46125949 1 -chr20 46126062 46126204 1 -chr20 46127795 46128045 1 -chr20 46130741 46130919 1 -chr20 46132755 46132845 1 -chr20 46140034 46140266 1 -chr20 46140414 46140922 1 -chr20 46141634 46141849 1 -chr20 46142209 46142479 1 -chr20 46144070 46144324 1 -chr20 46145681 46145859 1 -chr20 46148447 46148489 1 -chr20 46154016 46154188 1 -chr20 46158978 46159179 1 -chr20 46164860 46165224 1 -chr20 46167930 46168147 1 -chr20 46169412 46169614 1 -chr20 46169771 46169829 1 -chr20 46169939 46170200 1 -chr20 46171668 46172027 1 -chr20 46172045 46172279 1 -chr20 46172616 46172683 1 -chr20 46173486 46173689 1 -chr20 46173689 46173692 2 -chr20 46173692 46173857 1 -chr20 46177222 46177384 1 -chr20 46178721 46178904 1 -chr20 46180318 46180428 1 -chr20 46181250 46181507 1 -chr20 46182533 46182673 1 -chr20 46182952 46183166 1 -chr20 46185224 46185422 1 -chr20 46187101 46187281 1 -chr20 46188585 46188728 1 -chr20 46189231 46189444 1 -chr20 46190338 46190524 1 -chr20 46194120 46194526 1 -chr20 46195768 46195835 1 -chr20 46197486 46197649 1 -chr20 46197720 46197925 1 -chr20 46198513 46198726 1 -chr20 46199581 46199760 1 -chr20 46203413 46203467 1 -chr20 46205947 46206122 1 -chr20 46207130 46207328 1 -chr20 46226816 46227024 1 -chr20 46227024 46227028 2 -chr20 46227028 46227226 1 -chr20 46227821 46228003 1 -chr20 46234298 46234717 1 -chr20 46237043 46237254 1 -chr20 46241496 46241743 1 -chr20 46243818 46244232 1 -chr20 46245364 46245408 1 -chr20 46245778 46246012 1 -chr20 46247746 46247791 1 -chr20 46248952 46249128 1 -chr20 46249257 46249329 1 -chr20 46250068 46250480 1 -chr20 46251958 46251997 1 -chr20 46252832 46253014 1 -chr20 46257039 46257108 1 -chr20 46258295 46258498 1 -chr20 46258938 46259103 1 -chr20 46261210 46261646 1 -chr20 46264066 46264438 1 -chr20 46268690 46268917 1 -chr20 46269592 46269811 1 -chr20 46271236 46271630 1 -chr20 46273947 46274154 1 -chr20 46274962 46275177 1 -chr20 46275595 46275760 1 -chr20 46275828 46276016 1 -chr20 46277650 46278042 1 -chr20 46281956 46282349 1 -chr20 46285893 46286055 1 -chr20 46287523 46287781 1 -chr20 46288153 46288219 1 -chr20 46289277 46289451 1 -chr20 46291437 46291639 1 -chr20 46294116 46294357 1 -chr20 46298745 46298913 1 -chr20 46298977 46299533 1 -chr20 46300281 46300435 1 -chr20 46301826 46302012 1 -chr20 46302623 46302688 1 -chr20 46303180 46303522 1 -chr20 46303868 46304100 1 -chr20 46304100 46304109 2 -chr20 46304109 46304323 1 -chr20 46306559 46306770 1 -chr20 46306928 46307155 1 -chr20 46307274 46307441 1 -chr20 46308400 46308451 1 -chr20 46311508 46311563 1 -chr20 46311938 46312188 1 -chr20 46312672 46312742 1 -chr20 46312742 46312752 2 -chr20 46312752 46312980 1 -chr20 46313873 46313916 1 -chr20 46315345 46315421 1 -chr20 46316563 46316645 1 -chr20 46319803 46320029 1 -chr20 46324526 46324569 1 -chr20 46325373 46325581 1 -chr20 46326069 46326269 1 -chr20 46326588 46326827 1 -chr20 46329911 46329985 1 -chr20 46330353 46330663 1 -chr20 46330849 46331041 1 -chr20 46331813 46331865 1 -chr20 46333527 46333674 1 -chr20 46335958 46336000 1 -chr20 46336755 46336813 1 -chr20 46338605 46338761 1 -chr20 46344655 46344893 1 -chr20 46380757 46380797 1 -chr20 46385357 46385753 1 -chr20 46386067 46386277 1 -chr20 46387805 46388222 1 -chr20 46395236 46395450 1 -chr20 46396710 46396801 1 -chr20 46398602 46398650 1 -chr20 46400611 46400676 1 -chr20 46412656 46412702 1 -chr20 46413055 46413130 1 -chr20 46413710 46413964 1 -chr20 46417097 46417141 1 -chr20 46417414 46417593 1 -chr20 46417710 46417754 1 -chr20 46418432 46418478 1 -chr20 46426188 46426591 1 -chr20 46432720 46432869 1 -chr20 46433180 46433241 1 -chr20 46433507 46433996 1 -chr20 46434588 46434796 1 -chr20 46434857 46434913 1 -chr20 46439788 46440013 1 -chr20 46440535 46440945 1 -chr20 46442135 46442352 1 -chr20 46446805 46447015 1 -chr20 46448093 46448323 1 -chr20 46448998 46449221 1 -chr20 46450927 46450978 1 -chr20 46451294 46451427 1 -chr20 46452310 46452686 1 -chr20 46459317 46459525 1 -chr20 46463647 46463847 1 -chr20 46467545 46467951 1 -chr20 46469027 46469272 1 -chr20 46470475 46470845 1 -chr20 46480808 46481607 1 -chr20 46489010 46489416 1 -chr20 46490148 46490340 1 -chr20 46490497 46490872 1 -chr20 46491061 46491249 1 -chr20 46491690 46491731 1 -chr20 46491858 46492095 1 -chr20 46494126 46494300 1 -chr20 46494411 46494813 1 -chr20 46496145 46496508 1 -chr20 46498332 46498554 1 -chr20 46507860 46508037 1 -chr20 46508152 46508392 1 -chr20 46509785 46509983 1 -chr20 46511696 46511945 1 -chr20 46513254 46513405 1 -chr20 46513405 46513411 2 -chr20 46513411 46513648 1 -chr20 46519196 46519438 1 -chr20 46520152 46520591 1 -chr20 46525116 46525405 1 -chr20 46537619 46537821 1 -chr20 46537935 46538154 1 -chr20 46539386 46539622 1 -chr20 46540868 46541025 1 -chr20 46545173 46545359 1 -chr20 46546071 46546297 1 -chr20 46547460 46547636 1 -chr20 46547940 46548123 1 -chr20 46548330 46548510 1 -chr20 46551637 46552020 1 -chr20 46557231 46557273 1 -chr20 46558536 46558802 1 -chr20 46566220 46566545 1 -chr20 46567694 46567929 1 -chr20 46571970 46572549 1 -chr20 46578539 46578600 1 -chr20 46596998 46597036 1 -chr20 46602059 46602122 1 -chr20 46603413 46603441 1 -chr20 46626245 46626306 1 -chr20 46643775 46643846 1 -chr20 46648674 46648707 1 -chr20 46654592 46654658 1 -chr20 46703399 46703585 1 -chr20 46708227 46708361 1 -chr20 46711210 46711389 1 -chr20 46712341 46712550 1 -chr20 46712989 46713541 1 -chr20 46721154 46721627 1 -chr20 46724132 46724534 1 -chr20 46726029 46726399 1 -chr20 46730738 46731145 1 -chr20 46732711 46732934 1 -chr20 46733935 46734170 1 -chr20 46738023 46738052 1 -chr20 46738392 46738700 1 -chr20 46739759 46739970 1 -chr20 46740684 46740907 1 -chr20 46740918 46741165 1 -chr20 46741264 46741632 1 -chr20 46746915 46747313 1 -chr20 46747314 46747555 1 -chr20 46748043 46748141 1 -chr20 46749340 46749492 1 -chr20 46751702 46751927 1 -chr20 46752397 46752572 1 -chr20 46755328 46755659 1 -chr20 46756452 46756832 1 -chr20 46759045 46759301 1 -chr20 46761009 46761408 1 -chr20 46764981 46765189 1 -chr20 46765555 46765788 1 -chr20 46767366 46767921 1 -chr20 46771067 46771276 1 -chr20 46780171 46780389 1 -chr20 46783091 46783287 1 -chr20 46784755 46784981 1 -chr20 46787612 46787856 1 -chr20 46794540 46794601 1 -chr20 46797395 46797592 1 -chr20 46803490 46803584 1 -chr20 46804474 46804540 1 -chr20 46804796 46804842 1 -chr20 46807726 46807799 1 -chr20 46808969 46809130 1 -chr20 46809876 46810117 1 -chr20 46813274 46813652 1 -chr20 46816667 46816844 1 -chr20 46816844 46816865 2 -chr20 46816865 46817403 1 -chr20 46826064 46826235 1 -chr20 46826475 46826741 1 -chr20 46826823 46826885 1 -chr20 46827110 46827297 1 -chr20 46828077 46828278 1 -chr20 46830441 46830868 1 -chr20 46832861 46833027 1 -chr20 46835904 46836082 1 -chr20 46838428 46838470 1 -chr20 46838537 46838730 1 -chr20 46841105 46841145 1 -chr20 46847677 46847882 1 -chr20 46848080 46848117 1 -chr20 46848583 46848831 1 -chr20 46849250 46849460 1 -chr20 46849754 46849905 1 -chr20 46850274 46850486 1 -chr20 46851874 46852028 1 -chr20 46852208 46852431 1 -chr20 46852511 46852557 1 -chr20 46853877 46854070 1 -chr20 46859458 46859633 1 -chr20 46859862 46860110 1 -chr20 46862256 46862471 1 -chr20 46863836 46864229 1 -chr20 46871454 46871621 1 -chr20 46886986 46887145 1 -chr20 46887730 46888111 1 -chr20 46890887 46891045 1 -chr20 46893019 46893235 1 -chr20 46893409 46893486 1 -chr20 46896913 46897119 1 -chr20 46903324 46903389 1 -chr20 46905259 46905394 1 -chr20 46905394 46905417 2 -chr20 46905417 46905468 1 -chr20 46905633 46905837 1 -chr20 46905837 46905848 2 -chr20 46905848 46906038 1 -chr20 46908466 46908642 1 -chr20 46909187 46909386 1 -chr20 46909956 46910019 1 -chr20 46911090 46911261 1 -chr20 46912170 46912232 1 -chr20 46913536 46913717 1 -chr20 46917398 46917590 1 -chr20 46920349 46920830 1 -chr20 46921321 46921402 1 -chr20 46922567 46922734 1 -chr20 46931205 46931408 1 -chr20 46933769 46934010 1 -chr20 46935145 46935333 1 -chr20 46936506 46936728 1 -chr20 46939796 46939958 1 -chr20 46946050 46946248 1 -chr20 46946392 46946579 1 -chr20 46948542 46948720 1 -chr20 46952694 46952893 1 -chr20 46953996 46954245 1 -chr20 46958833 46958996 1 -chr20 46960075 46960318 1 -chr20 46960544 46960720 1 -chr20 46962853 46963028 1 -chr20 46965461 46965677 1 -chr20 46967342 46967579 1 -chr20 46967732 46968120 1 -chr20 46968854 46969087 1 -chr20 46973766 46973997 1 -chr20 46974482 46974855 1 -chr20 46979082 46979147 1 -chr20 46979962 46980151 1 -chr20 46980331 46980533 1 -chr20 46981426 46981603 1 -chr20 46997977 46998199 1 -chr20 46998894 46998934 1 -chr20 47001089 47001464 1 -chr20 47003574 47003778 1 -chr20 47006983 47007130 1 -chr20 47015539 47015646 1 -chr20 47016409 47016782 1 -chr20 47017113 47017339 1 -chr20 47019005 47019182 1 -chr20 47020179 47020357 1 -chr20 47020431 47020647 1 -chr20 47020877 47021120 1 -chr20 47022463 47022512 1 -chr20 47025778 47025945 1 -chr20 47026773 47027199 1 -chr20 47028552 47028750 1 -chr20 47030383 47030459 1 -chr20 47030629 47030871 1 -chr20 47031410 47031446 1 -chr20 47031989 47032384 1 -chr20 47032789 47033062 1 -chr20 47036034 47036231 1 -chr20 47038961 47039126 1 -chr20 47046354 47046600 1 -chr20 47049806 47049851 1 -chr20 47050538 47050741 1 -chr20 47051318 47051491 1 -chr20 47053760 47053970 1 -chr20 47055531 47055920 1 -chr20 47057833 47058392 1 -chr20 47061585 47061795 1 -chr20 47072009 47072591 1 -chr20 47073209 47073609 1 -chr20 47095516 47095922 1 -chr20 47097087 47097293 1 -chr20 47098372 47098635 1 -chr20 47098746 47098841 1 -chr20 47107607 47107654 1 -chr20 47118384 47118585 1 -chr20 47119767 47119814 1 -chr20 47120671 47120727 1 -chr20 47122368 47122401 1 -chr20 47122722 47122927 1 -chr20 47123203 47123378 1 -chr20 47124366 47124730 1 -chr20 47125147 47125192 1 -chr20 47126879 47127058 1 -chr20 47129323 47129363 1 -chr20 47129610 47129659 1 -chr20 47138489 47138529 1 -chr20 47139974 47140020 1 -chr20 47140228 47140638 1 -chr20 47141844 47142009 1 -chr20 47142924 47143128 1 -chr20 47144797 47144960 1 -chr20 47144960 47144961 2 -chr20 47144961 47145028 1 -chr20 47148734 47148913 1 -chr20 47150781 47150838 1 -chr20 47151681 47151846 1 -chr20 47155448 47155624 1 -chr20 47158000 47158185 1 -chr20 47159516 47159589 1 -chr20 47160608 47160671 1 -chr20 47164278 47164518 1 -chr20 47166509 47166724 1 -chr20 47172358 47172403 1 -chr20 47176047 47176122 1 -chr20 47177524 47177692 1 -chr20 47178370 47178554 1 -chr20 47181520 47181561 1 -chr20 47182165 47182208 1 -chr20 47182919 47183154 1 -chr20 47183612 47183814 1 -chr20 47184126 47184323 1 -chr20 47184327 47184412 1 -chr20 47187187 47187238 1 -chr20 47188011 47188381 1 -chr20 47188897 47189078 1 -chr20 47190178 47190538 1 -chr20 47200040 47200090 1 -chr20 47215269 47215315 1 -chr20 47221542 47221701 1 -chr20 47264320 47264360 1 -chr20 47268347 47268389 1 -chr20 47270037 47270076 1 -chr20 47272161 47272221 1 -chr20 47276196 47276324 1 -chr20 47289309 47289681 1 -chr20 47300889 47300916 1 -chr20 47308430 47308499 1 -chr20 47338142 47338370 1 -chr20 47338998 47339025 1 -chr20 47341820 47341870 1 -chr20 47343151 47343237 1 -chr20 47346821 47346876 1 -chr20 47369791 47369826 1 -chr20 47376012 47376059 1 -chr20 47414814 47414901 1 -chr20 47440557 47440601 1 -chr20 47447726 47447768 1 -chr20 47454938 47454969 1 -chr20 47467750 47467816 1 -chr20 47481183 47481212 1 -chr20 47485676 47485704 1 -chr20 47485999 47486121 1 -chr20 47520671 47520720 1 -chr20 47523338 47523629 1 -chr20 47559606 47559651 1 -chr20 47568670 47568715 1 -chr20 47578457 47578486 1 -chr20 47644418 47644447 1 -chr20 47647935 47647964 1 -chr20 47666060 47666092 1 -chr20 47666277 47666342 1 -chr20 47666987 47667031 1 -chr20 47676008 47676236 1 -chr20 47679217 47679395 1 -chr20 47679674 47679727 1 -chr20 47680488 47680545 1 -chr20 47680695 47680759 1 -chr20 47681469 47681631 1 -chr20 47683629 47683674 1 -chr20 47686338 47686402 1 -chr20 47686844 47686896 1 -chr20 47690072 47690127 1 -chr20 47696757 47696809 1 -chr20 47696809 47696818 2 -chr20 47696818 47696871 1 -chr20 47698377 47698608 1 -chr20 47700225 47700279 1 -chr20 47706346 47706565 1 -chr20 47707408 47707638 1 -chr20 47714385 47714437 1 -chr20 47717497 47717866 1 -chr20 47725495 47725570 1 -chr20 47727021 47727061 1 -chr20 47728720 47728774 1 -chr20 47729789 47729837 1 -chr20 47731415 47731590 1 -chr20 47734479 47734650 1 -chr20 47735286 47735444 1 -chr20 47736508 47736713 1 -chr20 47739406 47739603 1 -chr20 47741588 47742008 1 -chr20 47742008 47742012 2 -chr20 47742012 47742426 1 -chr20 47742540 47742620 1 -chr20 47745882 47745935 1 -chr20 47746861 47746912 1 -chr20 47748653 47748718 1 -chr20 47749870 47749920 1 -chr20 47751929 47752171 1 -chr20 47752827 47752888 1 -chr20 47753472 47753733 1 -chr20 47755667 47755829 1 -chr20 47759128 47759179 1 -chr20 47763864 47763910 1 -chr20 47764563 47764613 1 -chr20 47770828 47770880 1 -chr20 47774658 47774816 1 -chr20 47776343 47776580 1 -chr20 47776738 47776941 1 -chr20 47777215 47777273 1 -chr20 47778887 47779103 1 -chr20 47781117 47781465 1 -chr20 47781517 47781581 1 -chr20 47781626 47781687 1 -chr20 47783134 47783511 1 -chr20 47786020 47786081 1 -chr20 47787812 47787996 1 -chr20 47789330 47789571 1 -chr20 47790135 47790528 1 -chr20 47794439 47794635 1 -chr20 47799044 47799087 1 -chr20 47799484 47799534 1 -chr20 47799885 47800143 1 -chr20 47800395 47800458 1 -chr20 47802321 47802528 1 -chr20 47807423 47807650 1 -chr20 47810563 47810731 1 -chr20 47810945 47811133 1 -chr20 47812665 47812870 1 -chr20 47816703 47816900 1 -chr20 47817156 47817316 1 -chr20 47817767 47817946 1 -chr20 47824690 47824865 1 -chr20 47825129 47825178 1 -chr20 47826008 47826043 1 -chr20 47826169 47826238 1 -chr20 47826534 47826900 1 -chr20 47828220 47828665 1 -chr20 47829337 47829424 1 -chr20 47831588 47831811 1 -chr20 47831811 47831827 2 -chr20 47831827 47832037 1 -chr20 47832576 47832771 1 -chr20 47833257 47833295 1 -chr20 47835312 47835345 1 -chr20 47839555 47839744 1 -chr20 47840559 47840613 1 -chr20 47842357 47842552 1 -chr20 47844001 47844027 1 -chr20 47844644 47844702 1 -chr20 47845204 47845407 1 -chr20 47846298 47846454 1 -chr20 47846495 47846912 1 -chr20 47846916 47847107 1 -chr20 47848155 47848334 1 -chr20 47848725 47848953 1 -chr20 47849848 47850116 1 -chr20 47850256 47850618 1 -chr20 47851250 47851687 1 -chr20 47854283 47854462 1 -chr20 47854685 47854810 1 -chr20 47857129 47857324 1 -chr20 47857324 47857328 2 -chr20 47857328 47857490 1 -chr20 47857737 47857903 1 -chr20 47858755 47858960 1 -chr20 47859121 47859323 1 -chr20 47859879 47860124 1 -chr20 47862741 47863143 1 -chr20 47863503 47863560 1 -chr20 47865533 47865605 1 -chr20 47868113 47868165 1 -chr20 47875085 47875138 1 -chr20 47877205 47877416 1 -chr20 47885908 47886086 1 -chr20 47887332 47887511 1 -chr20 47887685 47887890 1 -chr20 47896657 47896719 1 -chr20 47902695 47902737 1 -chr20 47905198 47905250 1 -chr20 47908057 47908260 1 -chr20 47910911 47911306 1 -chr20 47912028 47912198 1 -chr20 47912284 47912468 1 -chr20 47913425 47913649 1 -chr20 47919889 47919950 1 -chr20 47932229 47932482 1 -chr20 47933018 47933229 1 -chr20 47938213 47938391 1 -chr20 47940157 47940579 1 -chr20 47941093 47941328 1 -chr20 47943947 47944001 1 -chr20 47947869 47948059 1 -chr20 47948101 47948313 1 -chr20 47948804 47948981 1 -chr20 47951246 47951421 1 -chr20 47955891 47956323 1 -chr20 47957525 47957739 1 -chr20 47961191 47961255 1 -chr20 47962574 47962803 1 -chr20 47967301 47967494 1 -chr20 47969021 47969197 1 -chr20 47969563 47969813 1 -chr20 47969824 47970213 1 -chr20 47972335 47972389 1 -chr20 47974571 47974615 1 -chr20 47977388 47977431 1 -chr20 47978218 47978402 1 -chr20 47978741 47978888 1 -chr20 47979808 47979844 1 -chr20 47980602 47981000 1 -chr20 47983800 47984423 1 -chr20 47990969 47991175 1 -chr20 47991252 47991539 1 -chr20 47991746 47991893 1 -chr20 48020329 48020953 1 -chr20 48021568 48021652 1 -chr20 48022007 48022202 1 -chr20 48034693 48034760 1 -chr20 48038130 48038530 1 -chr20 48040367 48040601 1 -chr20 48041443 48041616 1 -chr20 48046889 48047064 1 -chr20 48060673 48060880 1 -chr20 48066489 48066581 1 -chr20 48069876 48070087 1 -chr20 48084630 48084697 1 -chr20 48092617 48092779 1 -chr20 48097500 48097862 1 -chr20 48102483 48103213 1 -chr20 48104962 48105209 1 -chr20 48116603 48116794 1 -chr20 48123176 48123303 1 -chr20 48123719 48123781 1 -chr20 48127818 48128055 1 -chr20 48132411 48132569 1 -chr20 48136791 48137028 1 -chr20 48137586 48137785 1 -chr20 48137959 48138143 1 -chr20 48152925 48153353 1 -chr20 48154516 48154913 1 -chr20 48161594 48161981 1 -chr20 48165371 48165620 1 -chr20 48167651 48167853 1 -chr20 48168001 48168199 1 -chr20 48168209 48168418 1 -chr20 48169832 48170070 1 -chr20 48170855 48171068 1 -chr20 48173926 48174364 1 -chr20 48174645 48175021 1 -chr20 48185501 48185686 1 -chr20 48187458 48187931 1 -chr20 48192192 48192375 1 -chr20 48193522 48193701 1 -chr20 48194083 48194327 1 -chr20 48195928 48195982 1 -chr20 48199419 48199582 1 -chr20 48200942 48201082 1 -chr20 48203988 48204217 1 -chr20 48205005 48205208 1 -chr20 48205722 48205758 1 -chr20 48208266 48208351 1 -chr20 48208861 48209240 1 -chr20 48209240 48209256 2 -chr20 48209256 48209383 1 -chr20 48210322 48210384 1 -chr20 48210809 48211004 1 -chr20 48211157 48211352 1 -chr20 48212177 48212298 1 -chr20 48212843 48213008 1 -chr20 48214208 48214625 1 -chr20 48216266 48216446 1 -chr20 48217352 48217552 1 -chr20 48218136 48218381 1 -chr20 48218758 48218803 1 -chr20 48219168 48219397 1 -chr20 48219509 48219966 1 -chr20 48223295 48223525 1 -chr20 48225425 48225641 1 -chr20 48226278 48226503 1 -chr20 48227407 48227462 1 -chr20 48228506 48228558 1 -chr20 48234250 48234439 1 -chr20 48236475 48236850 1 -chr20 48237213 48237420 1 -chr20 48239313 48239533 1 -chr20 48240491 48240782 1 -chr20 48242775 48243383 1 -chr20 48245046 48245275 1 -chr20 48251268 48251308 1 -chr20 48260295 48260719 1 -chr20 48263620 48263984 1 -chr20 48265131 48265508 1 -chr20 48265709 48265957 1 -chr20 48266339 48266411 1 -chr20 48280435 48280496 1 -chr20 48287398 48287771 1 -chr20 48288998 48289236 1 -chr20 48289692 48289882 1 -chr20 48293498 48293559 1 -chr20 48298756 48298992 1 -chr20 48301344 48301686 1 -chr20 48305337 48305518 1 -chr20 48320481 48320633 1 -chr20 48324942 48325090 1 -chr20 48325090 48325095 2 -chr20 48325095 48325311 1 -chr20 48326150 48326325 1 -chr20 48328273 48328326 1 -chr20 48329707 48329919 1 -chr20 48334059 48334260 1 -chr20 48335381 48335561 1 -chr20 48338278 48338352 1 -chr20 48341775 48341942 1 -chr20 48343386 48343468 1 -chr20 48351030 48351096 1 -chr20 48351099 48351494 1 -chr20 48359330 48359547 1 -chr20 48360556 48360898 1 -chr20 48361819 48362013 1 -chr20 48364105 48364296 1 -chr20 48364894 48364955 1 -chr20 48366497 48366762 1 -chr20 48367242 48367425 1 -chr20 48368362 48368564 1 -chr20 48368716 48368922 1 -chr20 48384287 48384419 1 -chr20 48393799 48394026 1 -chr20 48396744 48396923 1 -chr20 48397328 48397501 1 -chr20 48400850 48401036 1 -chr20 48408074 48408510 1 -chr20 48409821 48410011 1 -chr20 48410080 48410259 1 -chr20 48413592 48413646 1 -chr20 48413882 48414092 1 -chr20 48417170 48417366 1 -chr20 48419238 48419493 1 -chr20 48421287 48421369 1 -chr20 48427261 48427300 1 -chr20 48431903 48432107 1 -chr20 48435032 48435213 1 -chr20 48442907 48443088 1 -chr20 48445802 48446162 1 -chr20 48448713 48448790 1 -chr20 48453255 48453423 1 -chr20 48456027 48456254 1 -chr20 48462495 48462894 1 -chr20 48463572 48463788 1 -chr20 48463835 48464086 1 -chr20 48470266 48470334 1 -chr20 48471192 48471236 1 -chr20 48472662 48472714 1 -chr20 48475359 48475545 1 -chr20 48477183 48477245 1 -chr20 48479151 48479336 1 -chr20 48479358 48479527 1 -chr20 48482247 48482469 1 -chr20 48485744 48485940 1 -chr20 48486036 48486464 1 -chr20 48487490 48487844 1 -chr20 48489175 48489418 1 -chr20 48489517 48489546 1 -chr20 48490256 48490444 1 -chr20 48491610 48491802 1 -chr20 48493414 48493583 1 -chr20 48494119 48494307 1 -chr20 48494556 48494800 1 -chr20 48495168 48495375 1 -chr20 48499436 48499709 1 -chr20 48501857 48501911 1 -chr20 48505481 48505518 1 -chr20 48508130 48508167 1 -chr20 48510544 48510596 1 -chr20 48515173 48515204 1 -chr20 48516947 48517153 1 -chr20 48517346 48517418 1 -chr20 48518089 48518328 1 -chr20 48520967 48521199 1 -chr20 48521990 48522162 1 -chr20 48524417 48524594 1 -chr20 48541166 48541543 1 -chr20 48541543 48541547 2 -chr20 48541547 48542109 1 -chr20 48543212 48543985 1 -chr20 48545306 48545418 1 -chr20 48547924 48548150 1 -chr20 48551350 48551561 1 -chr20 48552758 48552958 1 -chr20 48553210 48553294 1 -chr20 48555863 48556041 1 -chr20 48556148 48556340 1 -chr20 48557379 48557608 1 -chr20 48568465 48568623 1 -chr20 48570380 48570617 1 -chr20 48571260 48571505 1 -chr20 48571922 48572124 1 -chr20 48573615 48573821 1 -chr20 48574213 48574369 1 -chr20 48576699 48576889 1 -chr20 48577289 48577505 1 -chr20 48577776 48578002 1 -chr20 48582683 48582921 1 -chr20 48589092 48589269 1 -chr20 48593043 48593093 1 -chr20 48594401 48594440 1 -chr20 48594588 48594804 1 -chr20 48595751 48595900 1 -chr20 48597712 48597838 1 -chr20 48598258 48598314 1 -chr20 48598816 48598912 1 -chr20 48601970 48602181 1 -chr20 48602601 48602823 1 -chr20 48603043 48603256 1 -chr20 48605074 48605468 1 -chr20 48605513 48605682 1 -chr20 48607039 48607228 1 -chr20 48608682 48608858 1 -chr20 48609335 48609547 1 -chr20 48609713 48609990 1 -chr20 48612494 48612706 1 -chr20 48612716 48613109 1 -chr20 48614842 48614892 1 -chr20 48615917 48616111 1 -chr20 48616580 48616783 1 -chr20 48617461 48617626 1 -chr20 48619951 48620282 1 -chr20 48627757 48627947 1 -chr20 48629709 48629789 1 -chr20 48644034 48644234 1 -chr20 48649630 48650032 1 -chr20 48653849 48654038 1 -chr20 48654038 48654047 2 -chr20 48654047 48654260 1 -chr20 48655678 48655903 1 -chr20 48656279 48656679 1 -chr20 48657450 48657961 1 -chr20 48669186 48669395 1 -chr20 48671488 48671545 1 -chr20 48672846 48672918 1 -chr20 48676297 48676698 1 -chr20 48682798 48683007 1 -chr20 48687548 48687788 1 -chr20 48703338 48703495 1 -chr20 48703495 48703497 2 -chr20 48703497 48703670 1 -chr20 48703670 48703690 2 -chr20 48703690 48704034 1 -chr20 48704059 48704228 1 -chr20 48706737 48707037 1 -chr20 48708477 48708692 1 -chr20 48709313 48709508 1 -chr20 48711941 48711999 1 -chr20 48712485 48712671 1 -chr20 48714948 48715144 1 -chr20 48716511 48716581 1 -chr20 48720752 48720796 1 -chr20 48721657 48721882 1 -chr20 48723266 48723480 1 -chr20 48723665 48723901 1 -chr20 48738971 48739196 1 -chr20 48742621 48742879 1 -chr20 48743066 48743427 1 -chr20 48743644 48743881 1 -chr20 48743933 48744153 1 -chr20 48744740 48744787 1 -chr20 48748716 48749284 1 -chr20 48749448 48749615 1 -chr20 48753843 48754088 1 -chr20 48754422 48754646 1 -chr20 48756037 48756446 1 -chr20 48766436 48766474 1 -chr20 48768293 48768515 1 -chr20 48772268 48772406 1 -chr20 48772725 48772939 1 -chr20 48773045 48773092 1 -chr20 48774358 48774552 1 -chr20 48777701 48777920 1 -chr20 48779295 48779606 1 -chr20 48779925 48780156 1 -chr20 48782854 48783284 1 -chr20 48783518 48783724 1 -chr20 48784629 48784819 1 -chr20 48785591 48785764 1 -chr20 48786866 48787034 1 -chr20 48789529 48789737 1 -chr20 48791283 48791469 1 -chr20 48795062 48795364 1 -chr20 48799638 48799831 1 -chr20 48803454 48803666 1 -chr20 48803666 48803682 2 -chr20 48803682 48803860 1 -chr20 48805270 48805445 1 -chr20 48805666 48806062 1 -chr20 48806379 48806587 1 -chr20 48807699 48808442 1 -chr20 48809674 48809914 1 -chr20 48811447 48811507 1 -chr20 48813033 48813089 1 -chr20 48813162 48813376 1 -chr20 48814527 48814584 1 -chr20 48816183 48816641 1 -chr20 48816766 48816989 1 -chr20 48819134 48819222 1 -chr20 48819320 48819686 1 -chr20 48820311 48820488 1 -chr20 48821517 48821745 1 -chr20 48823143 48823328 1 -chr20 48823335 48823734 1 -chr20 48824633 48824808 1 -chr20 48826315 48826378 1 -chr20 48827666 48827967 1 -chr20 48834629 48834778 1 -chr20 48839131 48839755 1 -chr20 48864689 48864869 1 -chr20 48885963 48886063 1 -chr20 48893010 48893451 1 -chr20 48893788 48893934 1 -chr20 48902257 48902409 1 -chr20 48903737 48903950 1 -chr20 48905683 48905758 1 -chr20 48922471 48922529 1 -chr20 48933831 48933867 1 -chr20 48936150 48936208 1 -chr20 48947442 48947492 1 -chr20 48952292 48952364 1 -chr20 48982306 48982352 1 -chr20 49031708 49031747 1 -chr20 49042232 49042268 1 -chr20 49050476 49050518 1 -chr20 49077364 49077445 1 -chr20 49080720 49080761 1 -chr20 49112463 49112507 1 -chr20 49120883 49120923 1 -chr20 49136216 49136243 1 -chr20 49139442 49139484 1 -chr20 49156924 49157005 1 -chr20 49157091 49157155 1 -chr20 49174816 49174857 1 -chr20 49182655 49182705 1 -chr20 49193122 49193166 1 -chr20 49203283 49203367 1 -chr20 49222353 49222393 1 -chr20 49238824 49238865 1 -chr20 49247083 49247138 1 -chr20 49250941 49250972 1 -chr20 49254216 49254282 1 -chr20 49297339 49297396 1 -chr20 49306690 49306927 1 -chr20 49307221 49307411 1 -chr20 49308596 49308803 1 -chr20 49311378 49311424 1 -chr20 49312647 49312841 1 -chr20 49314888 49315293 1 -chr20 49317085 49317313 1 -chr20 49318759 49318801 1 -chr20 49319446 49319689 1 -chr20 49323081 49323270 1 -chr20 49325026 49325256 1 -chr20 49327461 49327641 1 -chr20 49329635 49329678 1 -chr20 49333060 49333261 1 -chr20 49338078 49338268 1 -chr20 49338721 49338767 1 -chr20 49339152 49339216 1 -chr20 49340504 49340701 1 -chr20 49347095 49347294 1 -chr20 49347783 49347952 1 -chr20 49348001 49348197 1 -chr20 49348197 49348199 2 -chr20 49348199 49348222 1 -chr20 49349436 49349637 1 -chr20 49351568 49351816 1 -chr20 49353202 49353392 1 -chr20 49354618 49354646 1 -chr20 49358424 49358622 1 -chr20 49361102 49361298 1 -chr20 49363637 49363707 1 -chr20 49363762 49363805 1 -chr20 49364875 49364927 1 -chr20 49365208 49365239 1 -chr20 49365684 49365900 1 -chr20 49366466 49366696 1 -chr20 49368641 49368697 1 -chr20 49368748 49368965 1 -chr20 49369160 49369342 1 -chr20 49369684 49369865 1 -chr20 49372625 49372693 1 -chr20 49372980 49373015 1 -chr20 49374789 49374833 1 -chr20 49377234 49377473 1 -chr20 49378450 49378480 1 -chr20 49380287 49380527 1 -chr20 49380531 49380752 1 -chr20 49384300 49384515 1 -chr20 49390193 49390392 1 -chr20 49391771 49392122 1 -chr20 49397754 49397948 1 -chr20 49400382 49400547 1 -chr20 49400754 49400831 1 -chr20 49404674 49404734 1 -chr20 49406150 49406304 1 -chr20 49406914 49406956 1 -chr20 49407193 49407240 1 -chr20 49410877 49410929 1 -chr20 49411495 49411711 1 -chr20 49411875 49411942 1 -chr20 49412284 49412476 1 -chr20 49413361 49413434 1 -chr20 49414673 49414704 1 -chr20 49414732 49414832 1 -chr20 49415651 49415810 1 -chr20 49419182 49419325 1 -chr20 49420373 49421164 1 -chr20 49421816 49421993 1 -chr20 49423819 49424018 1 -chr20 49427287 49427338 1 -chr20 49427726 49427960 1 -chr20 49428036 49428217 1 -chr20 49429739 49429962 1 -chr20 49431904 49432131 1 -chr20 49432310 49432525 1 -chr20 49432525 49432534 2 -chr20 49432534 49432774 1 -chr20 49434938 49435085 1 -chr20 49435526 49435712 1 -chr20 49435801 49435996 1 -chr20 49436296 49436338 1 -chr20 49437249 49437303 1 -chr20 49438730 49438792 1 -chr20 49440454 49440608 1 -chr20 49440608 49440620 2 -chr20 49440620 49440691 1 -chr20 49443614 49443811 1 -chr20 49444072 49444239 1 -chr20 49444383 49444556 1 -chr20 49444556 49444577 2 -chr20 49444577 49444767 1 -chr20 49444782 49444845 1 -chr20 49444961 49445154 1 -chr20 49448777 49448999 1 -chr20 49450892 49450958 1 -chr20 49451224 49451280 1 -chr20 49451308 49451503 1 -chr20 49452068 49452285 1 -chr20 49453192 49453235 1 -chr20 49456122 49456336 1 -chr20 49457595 49457784 1 -chr20 49459520 49459579 1 -chr20 49460701 49460928 1 -chr20 49464643 49464687 1 -chr20 49465256 49465416 1 -chr20 49468938 49469387 1 -chr20 49471153 49471392 1 -chr20 49473871 49474252 1 -chr20 49474277 49474330 1 -chr20 49474623 49474962 1 -chr20 49475014 49475233 1 -chr20 49476193 49476253 1 -chr20 49477853 49478021 1 -chr20 49478779 49478987 1 -chr20 49480557 49480744 1 -chr20 49483794 49484160 1 -chr20 49484310 49484361 1 -chr20 49496914 49497087 1 -chr20 49498310 49498545 1 -chr20 49503591 49503780 1 -chr20 49505107 49505423 1 -chr20 49509932 49509977 1 -chr20 49512736 49512964 1 -chr20 49517094 49517281 1 -chr20 49519756 49519918 1 -chr20 49519918 49519936 2 -chr20 49519936 49520023 1 -chr20 49521765 49521949 1 -chr20 49521950 49522171 1 -chr20 49525048 49525305 1 -chr20 49526202 49526594 1 -chr20 49529671 49529715 1 -chr20 49539597 49539754 1 -chr20 49540192 49540568 1 -chr20 49548134 49548340 1 -chr20 49549936 49550321 1 -chr20 49552508 49552541 1 -chr20 49560800 49561015 1 -chr20 49563700 49563878 1 -chr20 49566960 49567113 1 -chr20 49569058 49569126 1 -chr20 49573431 49573633 1 -chr20 49576539 49576766 1 -chr20 49578241 49578280 1 -chr20 49581245 49581473 1 -chr20 49581874 49581917 1 -chr20 49585968 49586164 1 -chr20 49588715 49588748 1 -chr20 49588836 49589037 1 -chr20 49590335 49590501 1 -chr20 49593604 49593787 1 -chr20 49594685 49594899 1 -chr20 49596195 49596385 1 -chr20 49604437 49604681 1 -chr20 49604681 49604695 2 -chr20 49604695 49605063 1 -chr20 49607278 49607706 1 -chr20 49607812 49607977 1 -chr20 49608899 49609320 1 -chr20 49620616 49620852 1 -chr20 49621069 49621258 1 -chr20 49624498 49624722 1 -chr20 49627307 49627549 1 -chr20 49645511 49645551 1 -chr20 49649468 49649497 1 -chr20 49651967 49652022 1 -chr20 49670922 49671105 1 -chr20 49716739 49716790 1 -chr20 49724979 49725345 1 -chr20 49761863 49761919 1 -chr20 49765724 49765786 1 -chr20 49782994 49783028 1 -chr20 49789554 49789595 1 -chr20 49806236 49806325 1 -chr20 49809444 49809499 1 -chr20 49809805 49809848 1 -chr20 49841080 49841122 1 -chr20 49841665 49841710 1 -chr20 49865678 49865855 1 -chr20 49910938 49910979 1 -chr20 49931088 49931122 1 -chr20 49949000 49949228 1 -chr20 49951584 49951603 1 -chr20 49951603 49951627 2 -chr20 49951627 49951634 1 -chr20 49964050 49964079 1 -chr20 49965860 49965948 1 -chr20 49993109 49993154 1 -chr20 49998987 49999032 1 -chr20 50013799 50013826 1 -chr20 50015333 50015432 1 -chr20 50022172 50022228 1 -chr20 50060271 50060317 1 -chr20 50066662 50066878 1 -chr20 50068977 50069007 1 -chr20 50070750 50070792 1 -chr20 50077643 50077691 1 -chr20 50089913 50090114 1 -chr20 50120595 50120637 1 -chr20 50131430 50131489 1 -chr20 50150767 50150799 1 -chr20 50181938 50181977 1 -chr20 50196703 50196745 1 -chr20 50211541 50211570 1 -chr20 50215430 50215639 1 -chr20 50215943 50216163 1 -chr20 50221171 50221532 1 -chr20 50225608 50225643 1 -chr20 50235918 50236256 1 -chr20 50238438 50238622 1 -chr20 50240312 50240510 1 -chr20 50242738 50242920 1 -chr20 50262339 50262381 1 -chr20 50301145 50301183 1 -chr20 50306186 50306233 1 -chr20 50311406 50311623 1 -chr20 50312402 50312591 1 -chr20 50314240 50314443 1 -chr20 50315753 50315973 1 -chr20 50316086 50316454 1 -chr20 50317234 50317293 1 -chr20 50328505 50328559 1 -chr20 50331636 50331826 1 -chr20 50359869 50360099 1 -chr20 50360302 50360503 1 -chr20 50360989 50361373 1 -chr20 50363337 50363493 1 -chr20 50363664 50363877 1 -chr20 50364090 50364638 1 -chr20 50373138 50373336 1 -chr20 50373944 50374351 1 -chr20 50375335 50375520 1 -chr20 50388594 50388838 1 -chr20 50389722 50389911 1 -chr20 50401657 50401868 1 -chr20 50402508 50402669 1 -chr20 50404577 50404808 1 -chr20 50407159 50407210 1 -chr20 50435295 50435340 1 -chr20 50443539 50443582 1 -chr20 50447188 50447390 1 -chr20 50450392 50450548 1 -chr20 50458463 50458714 1 -chr20 50463572 50463656 1 -chr20 50468621 50468649 1 -chr20 50474655 50474705 1 -chr20 50490623 50490651 1 -chr20 50520195 50520246 1 -chr20 50525132 50525175 1 -chr20 50590377 50590484 1 -chr20 50654882 50654937 1 -chr20 50663222 50663610 1 -chr20 50666254 50666297 1 -chr20 50678842 50678888 1 -chr20 50679503 50679547 1 -chr20 50687489 50687683 1 -chr20 50691059 50691176 1 -chr20 50719161 50719242 1 -chr20 50721706 50721771 1 -chr20 50736848 50736913 1 -chr20 50739192 50739235 1 -chr20 50760293 50760371 1 -chr20 50760894 50760968 1 -chr20 50765348 50765423 1 -chr20 50778191 50778232 1 -chr20 50784019 50784092 1 -chr20 50794661 50794896 1 -chr20 50800220 50800475 1 -chr20 50804566 50804756 1 -chr20 50804986 50805211 1 -chr20 50809728 50810125 1 -chr20 50821350 50821636 1 -chr20 50828641 50828683 1 -chr20 50845594 50845758 1 -chr20 50849893 50849944 1 -chr20 50850320 50850774 1 -chr20 50855638 50855862 1 -chr20 50858347 50858419 1 -chr20 50861089 50861258 1 -chr20 50862470 50862837 1 -chr20 50865075 50865226 1 -chr20 50866387 50866730 1 -chr20 50868286 50868475 1 -chr20 50878585 50878703 1 -chr20 50879604 50879862 1 -chr20 50908525 50908580 1 -chr20 50919349 50919423 1 -chr20 50942486 50942642 1 -chr20 50956599 50956892 1 -chr20 50958823 50958949 1 -chr20 50959833 50960241 1 -chr20 50971016 50971343 1 -chr20 50972668 50972738 1 -chr20 50973417 50973457 1 -chr20 50976999 50977048 1 -chr20 50982392 50982449 1 -chr20 50982559 50982945 1 -chr20 50987859 50987969 1 -chr20 50990403 50990460 1 -chr20 50994400 50994631 1 -chr20 50995346 50995409 1 -chr20 50997262 50997507 1 -chr20 50998014 50998213 1 -chr20 50999795 50999849 1 -chr20 51006032 51006580 1 -chr20 51008825 51008971 1 -chr20 51009822 51009883 1 -chr20 51012070 51012259 1 -chr20 51012265 51012466 1 -chr20 51015246 51015624 1 -chr20 51016514 51016742 1 -chr20 51024817 51024880 1 -chr20 51029690 51029743 1 -chr20 51029932 51030536 1 -chr20 51030536 51030559 2 -chr20 51030559 51030901 1 -chr20 51035271 51035461 1 -chr20 51036003 51036469 1 -chr20 51045213 51045461 1 -chr20 51046688 51046750 1 -chr20 51051239 51051652 1 -chr20 51052092 51052267 1 -chr20 51053840 51054001 1 -chr20 51054619 51054855 1 -chr20 51067264 51067307 1 -chr20 51067342 51067394 1 -chr20 51075675 51075719 1 -chr20 51082715 51082886 1 -chr20 51083044 51083108 1 -chr20 51083439 51083646 1 -chr20 51085833 51085873 1 -chr20 51089448 51089615 1 -chr20 51092989 51093064 1 -chr20 51097013 51097288 1 -chr20 51097356 51097541 1 -chr20 51099016 51099060 1 -chr20 51099060 51099069 2 -chr20 51099069 51099293 1 -chr20 51099673 51099902 1 -chr20 51100200 51100359 1 -chr20 51100366 51100414 1 -chr20 51100498 51100546 1 -chr20 51103215 51103561 1 -chr20 51105316 51105423 1 -chr20 51107267 51107468 1 -chr20 51112317 51112631 1 -chr20 51114305 51114562 1 -chr20 51115531 51115578 1 -chr20 51116399 51116656 1 -chr20 51121228 51121476 1 -chr20 51122004 51122067 1 -chr20 51123084 51123294 1 -chr20 51123514 51123698 1 -chr20 51125881 51126042 1 -chr20 51128724 51128898 1 -chr20 51135556 51135763 1 -chr20 51136218 51136602 1 -chr20 51137503 51137687 1 -chr20 51141596 51141642 1 -chr20 51141696 51141853 1 -chr20 51143633 51143831 1 -chr20 51144930 51145137 1 -chr20 51145408 51145453 1 -chr20 51147893 51147935 1 -chr20 51152883 51153110 1 -chr20 51157202 51157247 1 -chr20 51162624 51162691 1 -chr20 51165156 51165345 1 -chr20 51167111 51167355 1 -chr20 51169649 51170058 1 -chr20 51173490 51173858 1 -chr20 51175743 51175935 1 -chr20 51176360 51176581 1 -chr20 51176711 51176774 1 -chr20 51181031 51181078 1 -chr20 51181901 51182204 1 -chr20 51182204 51182225 2 -chr20 51182225 51182427 1 -chr20 51186598 51187123 1 -chr20 51189195 51189619 1 -chr20 51189789 51189860 1 -chr20 51192256 51192472 1 -chr20 51194461 51194519 1 -chr20 51196342 51196745 1 -chr20 51196941 51197330 1 -chr20 51200215 51200452 1 -chr20 51201712 51202074 1 -chr20 51205366 51205547 1 -chr20 51208385 51208603 1 -chr20 51213332 51213706 1 -chr20 51222072 51222278 1 -chr20 51222278 51222289 2 -chr20 51222289 51222440 1 -chr20 51229080 51229265 1 -chr20 51231524 51231769 1 -chr20 51232762 51232944 1 -chr20 51233406 51233567 1 -chr20 51235854 51236019 1 -chr20 51236062 51236241 1 -chr20 51237381 51237776 1 -chr20 51238386 51238436 1 -chr20 51238972 51239007 1 -chr20 51240052 51240263 1 -chr20 51240530 51240687 1 -chr20 51242008 51242216 1 -chr20 51249025 51249250 1 -chr20 51251181 51251350 1 -chr20 51251736 51251789 1 -chr20 51253395 51253567 1 -chr20 51253567 51253571 2 -chr20 51253571 51254001 1 -chr20 51262832 51263065 1 -chr20 51263065 51263074 2 -chr20 51263074 51263259 1 -chr20 51265086 51265140 1 -chr20 51268037 51268323 1 -chr20 51268661 51269008 1 -chr20 51272324 51272513 1 -chr20 51275050 51275239 1 -chr20 51275379 51275617 1 -chr20 51275637 51275782 1 -chr20 51275782 51275794 2 -chr20 51275794 51276000 1 -chr20 51276133 51276286 1 -chr20 51287662 51287869 1 -chr20 51288502 51288683 1 -chr20 51289517 51289881 1 -chr20 51289881 51289905 2 -chr20 51289905 51290261 1 -chr20 51290936 51290975 1 -chr20 51292673 51292892 1 -chr20 51296995 51297212 1 -chr20 51298681 51298889 1 -chr20 51300709 51300781 1 -chr20 51302314 51302354 1 -chr20 51306968 51307017 1 -chr20 51307749 51307940 1 -chr20 51314291 51314690 1 -chr20 51315664 51315798 1 -chr20 51315987 51316027 1 -chr20 51316375 51316593 1 -chr20 51320750 51320934 1 -chr20 51323952 51324126 1 -chr20 51326438 51326598 1 -chr20 51326707 51326900 1 -chr20 51328009 51328429 1 -chr20 51332755 51332800 1 -chr20 51333919 51334127 1 -chr20 51338885 51338923 1 -chr20 51355622 51355873 1 -chr20 51361099 51361155 1 -chr20 51364003 51364174 1 -chr20 51367104 51367172 1 -chr20 51370143 51370207 1 -chr20 51410027 51410076 1 -chr20 51441644 51441675 1 -chr20 51466202 51466266 1 -chr20 51486145 51486177 1 -chr20 51493410 51493567 1 -chr20 51540202 51540246 1 -chr20 51547586 51547832 1 -chr20 51549851 51550064 1 -chr20 51552678 51552727 1 -chr20 51554941 51555071 1 -chr20 51560154 51560305 1 -chr20 51570009 51570181 1 -chr20 51579212 51579769 1 -chr20 51580760 51580969 1 -chr20 51599688 51600044 1 -chr20 51602622 51603024 1 -chr20 51610772 51610967 1 -chr20 51610967 51610971 2 -chr20 51610971 51611176 1 -chr20 51611240 51611297 1 -chr20 51611515 51611580 1 -chr20 51612080 51612137 1 -chr20 51617544 51617622 1 -chr20 51618644 51619060 1 -chr20 51621115 51621306 1 -chr20 51621544 51621744 1 -chr20 51621830 51622069 1 -chr20 51622264 51622427 1 -chr20 51623118 51623336 1 -chr20 51625039 51625198 1 -chr20 51627207 51627442 1 -chr20 51627633 51627887 1 -chr20 51628144 51628573 1 -chr20 51629514 51629751 1 -chr20 51636215 51636448 1 -chr20 51637356 51637552 1 -chr20 51638420 51638617 1 -chr20 51639987 51640037 1 -chr20 51646475 51646538 1 -chr20 51646581 51646804 1 -chr20 51651993 51652178 1 -chr20 51652503 51652729 1 -chr20 51660120 51660367 1 -chr20 51660488 51660707 1 -chr20 51660906 51660958 1 -chr20 51662348 51662386 1 -chr20 51665998 51666034 1 -chr20 51669073 51669112 1 -chr20 51671238 51671293 1 -chr20 51671933 51671992 1 -chr20 51678772 51678822 1 -chr20 51681106 51681148 1 -chr20 51683370 51683408 1 -chr20 51685660 51685829 1 -chr20 51695697 51695779 1 -chr20 51697382 51697631 1 -chr20 51698906 51698961 1 -chr20 51700917 51701326 1 -chr20 51702968 51703175 1 -chr20 51703866 51704059 1 -chr20 51704308 51704490 1 -chr20 51704654 51704710 1 -chr20 51705285 51705657 1 -chr20 51710288 51710507 1 -chr20 51711033 51711224 1 -chr20 51711714 51711907 1 -chr20 51715345 51715407 1 -chr20 51721057 51721266 1 -chr20 51725834 51726045 1 -chr20 51728020 51728237 1 -chr20 51732818 51733005 1 -chr20 51733074 51733298 1 -chr20 51736836 51737018 1 -chr20 51741136 51741307 1 -chr20 51742430 51742475 1 -chr20 51747861 51747912 1 -chr20 51747943 51748175 1 -chr20 51750957 51751157 1 -chr20 51752430 51752576 1 -chr20 51757308 51757516 1 -chr20 51757621 51757674 1 -chr20 51770527 51770569 1 -chr20 51771187 51771378 1 -chr20 51773253 51773435 1 -chr20 51781350 51781536 1 -chr20 51781986 51782052 1 -chr20 51785331 51785385 1 -chr20 51787393 51787446 1 -chr20 51788284 51788349 1 -chr20 51789795 51789889 1 -chr20 51793825 51793877 1 -chr20 51798417 51798586 1 -chr20 51798887 51798941 1 -chr20 51799308 51799353 1 -chr20 51800597 51800958 1 -chr20 51802262 51802681 1 -chr20 51804433 51804599 1 -chr20 51806048 51806265 1 -chr20 51807794 51808019 1 -chr20 51815243 51815459 1 -chr20 51815636 51815709 1 -chr20 51818410 51818663 1 -chr20 51819641 51819679 1 -chr20 51819727 51819901 1 -chr20 51823174 51823233 1 -chr20 51823353 51823548 1 -chr20 51823710 51823974 1 -chr20 51824950 51825175 1 -chr20 51827315 51827544 1 -chr20 51830139 51830193 1 -chr20 51832698 51832769 1 -chr20 51842664 51842729 1 -chr20 51843341 51843537 1 -chr20 51845423 51845476 1 -chr20 51852760 51852811 1 -chr20 51854743 51854785 1 -chr20 51859683 51859726 1 -chr20 51860024 51860114 1 -chr20 51862745 51862803 1 -chr20 51862878 51862946 1 -chr20 51863981 51864021 1 -chr20 51870227 51870279 1 -chr20 51876992 51877230 1 -chr20 51878274 51878319 1 -chr20 51882261 51882314 1 -chr20 51883152 51883196 1 -chr20 51883656 51883704 1 -chr20 51884424 51884609 1 -chr20 51889548 51889714 1 -chr20 51893889 51894107 1 -chr20 51894184 51894437 1 -chr20 51895101 51895150 1 -chr20 51901166 51901205 1 -chr20 51906387 51906413 1 -chr20 51908264 51908314 1 -chr20 51912824 51912877 1 -chr20 51917425 51917479 1 -chr20 51918247 51918425 1 -chr20 51918656 51918865 1 -chr20 51919586 51919627 1 -chr20 51920980 51921077 1 -chr20 51922255 51922427 1 -chr20 51922778 51922806 1 -chr20 51925328 51925354 1 -chr20 51925591 51925638 1 -chr20 51926605 51926781 1 -chr20 51930832 51931069 1 -chr20 51931547 51931669 1 -chr20 51934197 51934586 1 -chr20 51938748 51938795 1 -chr20 51939476 51939520 1 -chr20 51940569 51940607 1 -chr20 51943867 51944076 1 -chr20 51945295 51945664 1 -chr20 51946739 51946819 1 -chr20 51948595 51948747 1 -chr20 51950282 51950334 1 -chr20 51952651 51952717 1 -chr20 51960320 51960531 1 -chr20 51961379 51961552 1 -chr20 51966414 51966828 1 -chr20 51967634 51967663 1 -chr20 51967976 51968340 1 -chr20 51968592 51968763 1 -chr20 51970712 51970756 1 -chr20 51971798 51971976 1 -chr20 51981190 51981383 1 -chr20 51990804 51991234 1 -chr20 51995973 51996028 1 -chr20 52002239 52002299 1 -chr20 52002794 52003138 1 -chr20 52003407 52003450 1 -chr20 52004520 52004657 1 -chr20 52006074 52006268 1 -chr20 52006493 52006911 1 -chr20 52007306 52007484 1 -chr20 52010309 52010557 1 -chr20 52012572 52012998 1 -chr20 52013471 52013670 1 -chr20 52016865 52017058 1 -chr20 52017677 52017878 1 -chr20 52019708 52019739 1 -chr20 52020134 52020176 1 -chr20 52020828 52021219 1 -chr20 52026738 52026918 1 -chr20 52034389 52034457 1 -chr20 52040531 52040593 1 -chr20 52041442 52041628 1 -chr20 52043338 52043405 1 -chr20 52047877 52048247 1 -chr20 52049417 52049646 1 -chr20 52050539 52050737 1 -chr20 52053212 52053265 1 -chr20 52107221 52107279 1 -chr20 52107757 52107947 1 -chr20 52111320 52111360 1 -chr20 52124004 52124085 1 -chr20 52127406 52127611 1 -chr20 52146265 52146404 1 -chr20 52184098 52184131 1 -chr20 52188788 52188856 1 -chr20 52200697 52201113 1 -chr20 52202698 52202748 1 -chr20 52203823 52203870 1 -chr20 52207460 52207652 1 -chr20 52210579 52210673 1 -chr20 52214285 52214466 1 -chr20 52226545 52226777 1 -chr20 52244805 52244849 1 -chr20 52252622 52252871 1 -chr20 52269661 52269840 1 -chr20 52270803 52270998 1 -chr20 52271970 52272172 1 -chr20 52276317 52277103 1 -chr20 52278765 52278920 1 -chr20 52288468 52288536 1 -chr20 52292727 52292767 1 -chr20 52305093 52305458 1 -chr20 52307643 52307684 1 -chr20 52312351 52312524 1 -chr20 52314972 52314999 1 -chr20 52315314 52315736 1 -chr20 52318668 52318853 1 -chr20 52323645 52323687 1 -chr20 52324353 52324551 1 -chr20 52329578 52329632 1 -chr20 52351594 52351796 1 -chr20 52358898 52359114 1 -chr20 52369725 52369930 1 -chr20 52429905 52430005 1 -chr20 52482613 52482648 1 -chr20 52491731 52491787 1 -chr20 52504937 52505047 1 -chr20 52546112 52546151 1 -chr20 52554528 52554560 1 -chr20 52586267 52586305 1 -chr20 52671200 52671402 1 -chr20 52676316 52676528 1 -chr20 52683710 52684089 1 -chr20 52687638 52688416 1 -chr20 52693190 52693432 1 -chr20 52694615 52694668 1 -chr20 52696229 52696390 1 -chr20 52698871 52699065 1 -chr20 52700337 52700513 1 -chr20 52700866 52701097 1 -chr20 52701917 52702310 1 -chr20 52702861 52702915 1 -chr20 52703575 52703753 1 -chr20 52709119 52709324 1 -chr20 52714996 52715401 1 -chr20 52715554 52715621 1 -chr20 52722955 52722994 1 -chr20 52733312 52733482 1 -chr20 52740035 52740260 1 -chr20 52742967 52743185 1 -chr20 52745832 52746001 1 -chr20 52751472 52751659 1 -chr20 52770802 52770889 1 -chr20 52778350 52778733 1 -chr20 52788067 52788399 1 -chr20 52796066 52796315 1 -chr20 52813014 52813077 1 -chr20 52816845 52817208 1 -chr20 52817612 52817696 1 -chr20 52824148 52824316 1 -chr20 52824456 52824512 1 -chr20 52825227 52825528 1 -chr20 52830034 52830104 1 -chr20 52832537 52832746 1 -chr20 52833805 52834026 1 -chr20 52836034 52836106 1 -chr20 52837542 52837728 1 -chr20 52838075 52838272 1 -chr20 52841113 52841490 1 -chr20 52852663 52853052 1 -chr20 52854747 52854911 1 -chr20 52858217 52858421 1 -chr20 52862014 52862420 1 -chr20 52862645 52862822 1 -chr20 52872732 52872924 1 -chr20 52876724 52876807 1 -chr20 52876810 52876862 1 -chr20 52895894 52896688 1 -chr20 52904432 52904675 1 -chr20 52909588 52909845 1 -chr20 52919962 52920196 1 -chr20 52921468 52921648 1 -chr20 52923623 52923728 1 -chr20 52929168 52929354 1 -chr20 52931568 52931624 1 -chr20 52931814 52931865 1 -chr20 52933067 52933271 1 -chr20 52935548 52935782 1 -chr20 52935949 52936204 1 -chr20 52938471 52938689 1 -chr20 52960478 52960648 1 -chr20 52961314 52961492 1 -chr20 52968089 52968306 1 -chr20 52971096 52971462 1 -chr20 52974386 52974605 1 -chr20 52974605 52974607 2 -chr20 52974607 52974803 1 -chr20 52977084 52977293 1 -chr20 52979703 52979878 1 -chr20 52981924 52982125 1 -chr20 52982172 52982217 1 -chr20 52983886 52984048 1 -chr20 52984286 52984348 1 -chr20 52986514 52986562 1 -chr20 52988887 52989117 1 -chr20 52990270 52990511 1 -chr20 52990931 52991172 1 -chr20 52991230 52991314 1 -chr20 52991386 52991476 1 -chr20 52991784 52992201 1 -chr20 52995152 52995543 1 -chr20 52998606 52998981 1 -chr20 53003557 53004482 1 -chr20 53005485 53005639 1 -chr20 53006994 53007197 1 -chr20 53009790 53010378 1 -chr20 53012089 53012648 1 -chr20 53014023 53014213 1 -chr20 53015401 53015800 1 -chr20 53016708 53016906 1 -chr20 53027940 53027984 1 -chr20 53030610 53030814 1 -chr20 53034472 53034667 1 -chr20 53034789 53035318 1 -chr20 53037183 53037584 1 -chr20 53040178 53040392 1 -chr20 53043989 53044366 1 -chr20 53045491 53045672 1 -chr20 53046290 53046662 1 -chr20 53046765 53046815 1 -chr20 53046874 53047069 1 -chr20 53047318 53047375 1 -chr20 53047543 53047746 1 -chr20 53051314 53051486 1 -chr20 53051514 53051754 1 -chr20 53053319 53053504 1 -chr20 53053736 53053892 1 -chr20 53055877 53056241 1 -chr20 53060320 53060513 1 -chr20 53061039 53061331 1 -chr20 53066104 53066490 1 -chr20 53066889 53066934 1 -chr20 53067229 53067272 1 -chr20 53069116 53069318 1 -chr20 53070217 53070658 1 -chr20 53076025 53076081 1 -chr20 53076780 53077148 1 -chr20 53077628 53077680 1 -chr20 53078723 53078951 1 -chr20 53079211 53079452 1 -chr20 53080210 53080612 1 -chr20 53080849 53081068 1 -chr20 53081390 53081572 1 -chr20 53081572 53081581 2 -chr20 53081581 53081749 1 -chr20 53086487 53086652 1 -chr20 53087307 53087526 1 -chr20 53089388 53089594 1 -chr20 53091400 53091604 1 -chr20 53093018 53093093 1 -chr20 53094230 53094643 1 -chr20 53095015 53095244 1 -chr20 53095303 53095519 1 -chr20 53097320 53097544 1 -chr20 53100352 53100566 1 -chr20 53103371 53103577 1 -chr20 53108244 53108300 1 -chr20 53109291 53109522 1 -chr20 53114032 53114265 1 -chr20 53119731 53119890 1 -chr20 53120100 53120305 1 -chr20 53121447 53121512 1 -chr20 53122598 53122879 1 -chr20 53124215 53124629 1 -chr20 53126556 53126762 1 -chr20 53127061 53127223 1 -chr20 53130707 53130760 1 -chr20 53130981 53131217 1 -chr20 53133345 53133749 1 -chr20 53136092 53136298 1 -chr20 53136501 53136684 1 -chr20 53137389 53137596 1 -chr20 53148309 53148392 1 -chr20 53163505 53163561 1 -chr20 53167562 53167589 1 -chr20 53181761 53181806 1 -chr20 53192216 53192401 1 -chr20 53193093 53193299 1 -chr20 53195293 53195502 1 -chr20 53196468 53196710 1 -chr20 53196710 53196719 2 -chr20 53196719 53196918 1 -chr20 53197676 53197751 1 -chr20 53202062 53202208 1 -chr20 53203002 53203176 1 -chr20 53207252 53207403 1 -chr20 53209419 53209803 1 -chr20 53210860 53211034 1 -chr20 53211984 53212192 1 -chr20 53213826 53214072 1 -chr20 53220494 53220707 1 -chr20 53224922 53225150 1 -chr20 53228769 53228970 1 -chr20 53229129 53229301 1 -chr20 53229461 53229639 1 -chr20 53231751 53231932 1 -chr20 53236951 53237151 1 -chr20 53237703 53237885 1 -chr20 53240307 53240552 1 -chr20 53242542 53242867 1 -chr20 53242867 53242890 2 -chr20 53242890 53243086 1 -chr20 53243095 53243299 1 -chr20 53243368 53243711 1 -chr20 53244451 53244542 1 -chr20 53245248 53245289 1 -chr20 53245699 53245895 1 -chr20 53247164 53247372 1 -chr20 53249971 53250202 1 -chr20 53250989 53251203 1 -chr20 53251230 53251421 1 -chr20 53253255 53253467 1 -chr20 53259457 53259777 1 -chr20 53259958 53260181 1 -chr20 53261510 53261724 1 -chr20 53262963 53263109 1 -chr20 53264919 53264967 1 -chr20 53268704 53268772 1 -chr20 53268873 53268934 1 -chr20 53269277 53269474 1 -chr20 53269985 53270173 1 -chr20 53270449 53270624 1 -chr20 53271554 53271762 1 -chr20 53272343 53272577 1 -chr20 53274629 53274819 1 -chr20 53277925 53278386 1 -chr20 53279188 53279225 1 -chr20 53279480 53279637 1 -chr20 53279637 53279646 2 -chr20 53279646 53279869 1 -chr20 53280210 53280401 1 -chr20 53282415 53282626 1 -chr20 53282859 53283093 1 -chr20 53284163 53284416 1 -chr20 53285599 53285652 1 -chr20 53290178 53290355 1 -chr20 53292446 53292490 1 -chr20 53295372 53295578 1 -chr20 53298327 53298570 1 -chr20 53299436 53299851 1 -chr20 53301702 53301932 1 -chr20 53302001 53302218 1 -chr20 53308332 53308570 1 -chr20 53312756 53312957 1 -chr20 53315547 53315727 1 -chr20 53317526 53317728 1 -chr20 53317862 53318090 1 -chr20 53319924 53320183 1 -chr20 53326019 53326257 1 -chr20 53327038 53327278 1 -chr20 53327859 53328108 1 -chr20 53341121 53341323 1 -chr20 53342184 53342410 1 -chr20 53343319 53343693 1 -chr20 53346643 53346869 1 -chr20 53347413 53347464 1 -chr20 53359464 53359679 1 -chr20 53360638 53360850 1 -chr20 53361193 53361407 1 -chr20 53365207 53365375 1 -chr20 53365640 53365686 1 -chr20 53366679 53366913 1 -chr20 53368595 53368833 1 -chr20 53369887 53370095 1 -chr20 53376140 53376358 1 -chr20 53376700 53376899 1 -chr20 53379561 53379791 1 -chr20 53380815 53381457 1 -chr20 53381839 53382067 1 -chr20 53382681 53382726 1 -chr20 53383520 53383582 1 -chr20 53386589 53386769 1 -chr20 53394485 53394642 1 -chr20 53399983 53400013 1 -chr20 53400229 53400609 1 -chr20 53402461 53402506 1 -chr20 53409379 53409761 1 -chr20 53415849 53416045 1 -chr20 53422653 53422857 1 -chr20 53427351 53427576 1 -chr20 53434780 53435339 1 -chr20 53435998 53436424 1 -chr20 53436591 53436617 1 -chr20 53439144 53439343 1 -chr20 53439969 53440356 1 -chr20 53440398 53440617 1 -chr20 53440935 53441101 1 -chr20 53443025 53443200 1 -chr20 53444104 53444482 1 -chr20 53445095 53445283 1 -chr20 53456738 53456778 1 -chr20 53463989 53464197 1 -chr20 53469954 53470158 1 -chr20 53471372 53471544 1 -chr20 53476705 53476921 1 -chr20 53478507 53478560 1 -chr20 53479453 53479510 1 -chr20 53480500 53480565 1 -chr20 53485878 53486272 1 -chr20 53487517 53487706 1 -chr20 53487882 53488019 1 -chr20 53488954 53489118 1 -chr20 53489118 53489137 2 -chr20 53489137 53489334 1 -chr20 53490938 53491113 1 -chr20 53491641 53491781 1 -chr20 53492799 53493067 1 -chr20 53493948 53494032 1 -chr20 53498073 53498311 1 -chr20 53508277 53508463 1 -chr20 53517848 53518042 1 -chr20 53518435 53518475 1 -chr20 53518912 53519104 1 -chr20 53521352 53521402 1 -chr20 53521922 53521963 1 -chr20 53522318 53522373 1 -chr20 53523790 53523842 1 -chr20 53525267 53525667 1 -chr20 53527043 53527235 1 -chr20 53527235 53527244 2 -chr20 53527244 53527443 1 -chr20 53529996 53530206 1 -chr20 53534059 53534101 1 -chr20 53538683 53538817 1 -chr20 53611034 53611080 1 -chr20 53626058 53626251 1 -chr20 53630335 53630363 1 -chr20 53644885 53644925 1 -chr20 53650931 53651144 1 -chr20 53651144 53651167 2 -chr20 53651167 53651189 1 -chr20 53670297 53670342 1 -chr20 53675152 53675367 1 -chr20 53682489 53682557 1 -chr20 53702655 53702707 1 -chr20 53715875 53715917 1 -chr20 53720852 53720909 1 -chr20 53732187 53732244 1 -chr20 53749007 53749035 1 -chr20 53777493 53777537 1 -chr20 53780418 53780465 1 -chr20 53790506 53790547 1 -chr20 53803645 53803674 1 -chr20 53804162 53804202 1 -chr20 53814479 53814560 1 -chr20 53846216 53846519 1 -chr20 53851050 53851115 1 -chr20 53922203 53922257 1 -chr20 53923926 53924174 1 -chr20 53945988 53946174 1 -chr20 53947410 53947844 1 -chr20 53953041 53953383 1 -chr20 53953490 53954083 1 -chr20 53957372 53957588 1 -chr20 53958267 53958489 1 -chr20 53960187 53960372 1 -chr20 53963385 53963434 1 -chr20 53963515 53963579 1 -chr20 53964654 53964718 1 -chr20 53964962 53965177 1 -chr20 53966819 53967056 1 -chr20 53967864 53968062 1 -chr20 53970061 53970434 1 -chr20 53975929 53976114 1 -chr20 53977941 53978122 1 -chr20 53979241 53979426 1 -chr20 53982104 53982278 1 -chr20 53983677 53983812 1 -chr20 53984875 53985160 1 -chr20 53986234 53986465 1 -chr20 53986954 53987479 1 -chr20 53987479 53987489 2 -chr20 53987489 53987887 1 -chr20 53988056 53988295 1 -chr20 53988719 53988896 1 -chr20 53988913 53989330 1 -chr20 53989614 53989786 1 -chr20 53992450 53992678 1 -chr20 53996558 53996755 1 -chr20 53997078 53997264 1 -chr20 54001249 54001464 1 -chr20 54005724 54005891 1 -chr20 54006508 54006537 1 -chr20 54006982 54007173 1 -chr20 54012843 54013107 1 -chr20 54013980 54014199 1 -chr20 54014485 54014685 1 -chr20 54017107 54017309 1 -chr20 54019678 54019720 1 -chr20 54021441 54021527 1 -chr20 54022826 54023055 1 -chr20 54024306 54024420 1 -chr20 54024680 54024756 1 -chr20 54026746 54026954 1 -chr20 54029260 54029347 1 -chr20 54030937 54031130 1 -chr20 54031346 54031533 1 -chr20 54033110 54033158 1 -chr20 54033784 54033920 1 -chr20 54038541 54038768 1 -chr20 54039536 54039719 1 -chr20 54040646 54040812 1 -chr20 54042079 54042298 1 -chr20 54046773 54046817 1 -chr20 54046965 54047007 1 -chr20 54050258 54050456 1 -chr20 54054153 54054197 1 -chr20 54063149 54063193 1 -chr20 54074184 54074240 1 -chr20 54076043 54076239 1 -chr20 54078382 54078534 1 -chr20 54089770 54089958 1 -chr20 54092409 54092576 1 -chr20 54092908 54092936 1 -chr20 54107663 54108081 1 -chr20 54112368 54112752 1 -chr20 54114858 54115286 1 -chr20 54115822 54116009 1 -chr20 54120103 54120536 1 -chr20 54123666 54123872 1 -chr20 54130345 54130604 1 -chr20 54131580 54131625 1 -chr20 54132633 54133014 1 -chr20 54142425 54142468 1 -chr20 54147321 54147696 1 -chr20 54149604 54149795 1 -chr20 54150710 54150754 1 -chr20 54152022 54152195 1 -chr20 54154703 54154842 1 -chr20 54154842 54154859 2 -chr20 54154859 54155086 1 -chr20 54158473 54158678 1 -chr20 54158686 54158915 1 -chr20 54158925 54159132 1 -chr20 54159207 54159270 1 -chr20 54160432 54160494 1 -chr20 54160745 54160936 1 -chr20 54163140 54163318 1 -chr20 54164730 54165104 1 -chr20 54175577 54175765 1 -chr20 54176767 54176972 1 -chr20 54178303 54178556 1 -chr20 54178708 54179084 1 -chr20 54180695 54180933 1 -chr20 54181264 54181342 1 -chr20 54185201 54185420 1 -chr20 54193401 54193610 1 -chr20 54201384 54201552 1 -chr20 54212066 54212115 1 -chr20 54226191 54226459 1 -chr20 54228972 54229195 1 -chr20 54231688 54232254 1 -chr20 54236299 54236667 1 -chr20 54238224 54238622 1 -chr20 54243177 54243380 1 -chr20 54251866 54252061 1 -chr20 54254655 54254686 1 -chr20 54277368 54277408 1 -chr20 54278574 54278785 1 -chr20 54280860 54281055 1 -chr20 54288261 54288450 1 -chr20 54290990 54291223 1 -chr20 54357882 54358051 1 -chr20 54359311 54359359 1 -chr20 54374917 54374973 1 -chr20 54375865 54376046 1 -chr20 54377654 54377686 1 -chr20 54406413 54406453 1 -chr20 54422805 54423046 1 -chr20 54426236 54426292 1 -chr20 54429901 54430099 1 -chr20 54457580 54457585 1 -chr20 54457585 54457607 2 -chr20 54457607 54457630 1 -chr20 54479797 54480004 1 -chr20 54490739 54490788 1 -chr20 54508794 54508858 1 -chr20 54537990 54538032 1 -chr20 54565289 54565345 1 -chr20 54610679 54610902 1 -chr20 54627784 54627974 1 -chr20 54629782 54630204 1 -chr20 54632194 54632403 1 -chr20 54643694 54644058 1 -chr20 54654347 54654440 1 -chr20 54656466 54656671 1 -chr20 54662766 54662992 1 -chr20 54669470 54669536 1 -chr20 54670262 54670339 1 -chr20 54725159 54725363 1 -chr20 54732055 54732092 1 -chr20 54738288 54738380 1 -chr20 54741741 54741784 1 -chr20 54755673 54755889 1 -chr20 54756206 54756249 1 -chr20 54784844 54784919 1 -chr20 54785428 54785682 1 -chr20 54788819 54788896 1 -chr20 54812034 54812254 1 -chr20 54816826 54816878 1 -chr20 54851854 54852039 1 -chr20 54901357 54901576 1 -chr20 54902656 54902846 1 -chr20 54905517 54905690 1 -chr20 54919401 54919428 1 -chr20 54919428 54919442 2 -chr20 54919442 54919476 1 -chr20 54925749 54925774 1 -chr20 54970492 54970523 1 -chr20 54974662 54974702 1 -chr20 55040949 55041124 1 -chr20 55063296 55063544 1 -chr20 55065430 55065624 1 -chr20 55076354 55076509 1 -chr20 55097566 55097604 1 -chr20 55108043 55108083 1 -chr20 55185193 55185232 1 -chr20 55220627 55220818 1 -chr20 55222018 55222199 1 -chr20 55222648 55222814 1 -chr20 55226135 55226192 1 -chr20 55246390 55246583 1 -chr20 55247800 55248029 1 -chr20 55248814 55248879 1 -chr20 55275258 55275445 1 -chr20 55310365 55310417 1 -chr20 55380079 55380134 1 -chr20 55401332 55401372 1 -chr20 55495595 55495681 1 -chr20 55497085 55497146 1 -chr20 55500043 55500103 1 -chr20 55500919 55500986 1 -chr20 55519074 55519459 1 -chr20 55561641 55561690 1 -chr20 55612441 55612510 1 -chr20 55617825 55617990 1 -chr20 55618408 55618452 1 -chr20 55639006 55639043 1 -chr20 55710396 55710621 1 -chr20 55747569 55747766 1 -chr20 55765459 55765632 1 -chr20 55791845 55791911 1 -chr20 55806907 55806951 1 -chr20 55814643 55814846 1 -chr20 55848792 55848941 1 -chr20 55849080 55849138 1 -chr20 55849138 55849142 2 -chr20 55849142 55849175 1 -chr20 55849758 55849809 1 -chr20 55850932 55851143 1 -chr20 55855566 55855604 1 -chr20 55862570 55862767 1 -chr20 55864459 55864503 1 -chr20 55895548 55895619 1 -chr20 55900916 55901058 1 -chr20 55968978 55969018 1 -chr20 56010183 56010208 1 -chr20 56016064 56016115 1 -chr20 56032480 56032672 1 -chr20 56052875 56053056 1 -chr20 56054384 56054488 1 -chr20 56054580 56054955 1 -chr20 56055443 56055618 1 -chr20 56062661 56062922 1 -chr20 56063411 56063692 1 -chr20 56082691 56082863 1 -chr20 56108326 56108517 1 -chr20 56150777 56150881 1 -chr20 56216275 56216313 1 -chr20 56240907 56241321 1 -chr20 56241569 56241613 1 -chr20 56241905 56241956 1 -chr20 56253144 56253339 1 -chr20 56268124 56268160 1 -chr20 56292710 56292753 1 -chr20 56309356 56309562 1 -chr20 56315711 56315920 1 -chr20 56317840 56317904 1 -chr20 56318107 56318272 1 -chr20 56318964 56319155 1 -chr20 56320908 56321082 1 -chr20 56343979 56344072 1 -chr20 56344072 56344081 2 -chr20 56344081 56344281 1 -chr20 56344473 56344640 1 -chr20 56345366 56345608 1 -chr20 56345630 56345858 1 -chr20 56346841 56346880 1 -chr20 56347643 56347859 1 -chr20 56350176 56350380 1 -chr20 56350918 56350973 1 -chr20 56352001 56352204 1 -chr20 56352719 56352896 1 -chr20 56353184 56353364 1 -chr20 56353582 56353781 1 -chr20 56366542 56366694 1 -chr20 56368122 56368429 1 -chr20 56393132 56393184 1 -chr20 56394488 56394530 1 -chr20 56403278 56403310 1 -chr20 56413593 56413625 1 -chr20 56426382 56426620 1 -chr20 56447959 56448013 1 -chr20 56457739 56457768 1 -chr20 56478829 56479001 1 -chr20 56520948 56521175 1 -chr20 56526221 56526269 1 -chr20 56527136 56527360 1 -chr20 56529026 56529075 1 -chr20 56533446 56533487 1 -chr20 56540642 56540824 1 -chr20 56541574 56541633 1 -chr20 56542484 56542531 1 -chr20 56547890 56548097 1 -chr20 56550085 56550150 1 -chr20 56553588 56553632 1 -chr20 56556166 56556213 1 -chr20 56558329 56558356 1 -chr20 56558356 56558368 2 -chr20 56558368 56558399 1 -chr20 56566413 56566616 1 -chr20 56568836 56569083 1 -chr20 56571567 56571592 1 -chr20 56571908 56571958 1 -chr20 56574554 56574803 1 -chr20 56576845 56576927 1 -chr20 56580094 56580150 1 -chr20 56584520 56584560 1 -chr20 56585666 56585725 1 -chr20 56587691 56588117 1 -chr20 56592227 56592422 1 -chr20 56592741 56592973 1 -chr20 56593930 56594072 1 -chr20 56600544 56600602 1 -chr20 56608044 56608085 1 -chr20 56614139 56614332 1 -chr20 56617125 56617162 1 -chr20 56621729 56621973 1 -chr20 56622851 56622895 1 -chr20 56624290 56624373 1 -chr20 56625948 56626001 1 -chr20 56627580 56627658 1 -chr20 56628588 56628784 1 -chr20 56632471 56632529 1 -chr20 56635323 56635362 1 -chr20 56637477 56637524 1 -chr20 56637749 56637802 1 -chr20 56638203 56638401 1 -chr20 56638792 56638996 1 -chr20 56640078 56640272 1 -chr20 56642525 56642725 1 -chr20 56657009 56657214 1 -chr20 56658259 56658367 1 -chr20 56658469 56658534 1 -chr20 56662476 56662650 1 -chr20 56667783 56667825 1 -chr20 56673235 56673710 1 -chr20 56678052 56678110 1 -chr20 56679507 56679567 1 -chr20 56680138 56680279 1 -chr20 56681076 56681248 1 -chr20 56685358 56685403 1 -chr20 56688981 56689178 1 -chr20 56690229 56690368 1 -chr20 56690461 56690808 1 -chr20 56693849 56693895 1 -chr20 56694809 56694875 1 -chr20 56696122 56696511 1 -chr20 56697010 56697053 1 -chr20 56697161 56697207 1 -chr20 56699023 56699203 1 -chr20 56700299 56700343 1 -chr20 56707447 56707635 1 -chr20 56709568 56709743 1 -chr20 56713738 56713909 1 -chr20 56715347 56715808 1 -chr20 56716435 56716658 1 -chr20 56716841 56717042 1 -chr20 56721523 56721564 1 -chr20 56722237 56722375 1 -chr20 56723044 56723232 1 -chr20 56725717 56725915 1 -chr20 56730180 56730511 1 -chr20 56735137 56735309 1 -chr20 56736410 56736574 1 -chr20 56738030 56738444 1 -chr20 56740982 56741215 1 -chr20 56742671 56743074 1 -chr20 56747640 56747828 1 -chr20 56748478 56748900 1 -chr20 56750359 56750536 1 -chr20 56752060 56752317 1 -chr20 56752711 56753051 1 -chr20 56754041 56754126 1 -chr20 56759697 56759858 1 -chr20 56761782 56762020 1 -chr20 56763945 56763990 1 -chr20 56765404 56765607 1 -chr20 56767894 56768179 1 -chr20 56770397 56770599 1 -chr20 56771515 56771561 1 -chr20 56773764 56773818 1 -chr20 56774503 56774753 1 -chr20 56775484 56775561 1 -chr20 56778777 56778834 1 -chr20 56779168 56779379 1 -chr20 56779813 56779912 1 -chr20 56781080 56781233 1 -chr20 56781296 56781522 1 -chr20 56792675 56793042 1 -chr20 56793396 56793815 1 -chr20 56793822 56794201 1 -chr20 56796396 56796565 1 -chr20 56802420 56803044 1 -chr20 56806926 56806973 1 -chr20 56807106 56807305 1 -chr20 56808104 56808354 1 -chr20 56808496 56808679 1 -chr20 56810023 56810424 1 -chr20 56811105 56811158 1 -chr20 56813183 56813375 1 -chr20 56814362 56814417 1 -chr20 56816096 56816263 1 -chr20 56816293 56816479 1 -chr20 56820167 56820360 1 -chr20 56822035 56822261 1 -chr20 56822289 56822483 1 -chr20 56822483 56822497 2 -chr20 56822497 56822683 1 -chr20 56825382 56825458 1 -chr20 56827322 56827552 1 -chr20 56828708 56828891 1 -chr20 56829229 56829836 1 -chr20 56829940 56830126 1 -chr20 56830347 56830531 1 -chr20 56835094 56835153 1 -chr20 56836511 56836756 1 -chr20 56836814 56837006 1 -chr20 56843793 56843996 1 -chr20 56855418 56855673 1 -chr20 56861995 56862410 1 -chr20 56862695 56862878 1 -chr20 56871308 56871508 1 -chr20 56871775 56871968 1 -chr20 56874085 56874131 1 -chr20 56877608 56877871 1 -chr20 56882483 56882876 1 -chr20 56886016 56886194 1 -chr20 56886807 56886859 1 -chr20 56887794 56888015 1 -chr20 56888583 56888780 1 -chr20 56890219 56890400 1 -chr20 56891122 56891273 1 -chr20 56893197 56893375 1 -chr20 56896716 56897013 1 -chr20 56898930 56899146 1 -chr20 56899775 56900384 1 -chr20 56902314 56902672 1 -chr20 56903363 56903560 1 -chr20 56905963 56906270 1 -chr20 56909659 56909730 1 -chr20 56912502 56912783 1 -chr20 56915317 56915734 1 -chr20 56917214 56917643 1 -chr20 56920785 56920848 1 -chr20 56924044 56924208 1 -chr20 56928202 56928267 1 -chr20 56929944 56930347 1 -chr20 56940831 56941038 1 -chr20 56943663 56943836 1 -chr20 56946786 56946987 1 -chr20 56948311 56948524 1 -chr20 56951238 56951421 1 -chr20 56951590 56951639 1 -chr20 56952078 56952131 1 -chr20 56952773 56952853 1 -chr20 56957226 56957405 1 -chr20 56962103 56962461 1 -chr20 56962524 56962755 1 -chr20 56963734 56963911 1 -chr20 56964958 56965175 1 -chr20 56967680 56967884 1 -chr20 56967884 56967885 2 -chr20 56967885 56968076 1 -chr20 56972059 56972253 1 -chr20 56973131 56973542 1 -chr20 56973542 56973546 2 -chr20 56973546 56973766 1 -chr20 56973766 56973780 2 -chr20 56973780 56973977 1 -chr20 56974182 56974603 1 -chr20 56977652 56977857 1 -chr20 56979386 56979629 1 -chr20 56981252 56981443 1 -chr20 56982482 56982659 1 -chr20 56989364 56989535 1 -chr20 56993190 56993397 1 -chr20 56993494 56993682 1 -chr20 56994954 56995145 1 -chr20 57002256 57002663 1 -chr20 57002730 57002945 1 -chr20 57004409 57004581 1 -chr20 57004693 57005025 1 -chr20 57009930 57009973 1 -chr20 57011530 57011747 1 -chr20 57017665 57017897 1 -chr20 57018314 57018358 1 -chr20 57020771 57020969 1 -chr20 57021207 57021272 1 -chr20 57023431 57023664 1 -chr20 57024252 57024458 1 -chr20 57024850 57025056 1 -chr20 57029117 57029292 1 -chr20 57034194 57034716 1 -chr20 57034722 57034934 1 -chr20 57038074 57038710 1 -chr20 57043201 57043394 1 -chr20 57046915 57047326 1 -chr20 57047444 57047638 1 -chr20 57053498 57053675 1 -chr20 57058092 57058309 1 -chr20 57059022 57059077 1 -chr20 57061749 57061928 1 -chr20 57062168 57062379 1 -chr20 57063801 57064032 1 -chr20 57064930 57064995 1 -chr20 57065897 57066075 1 -chr20 57066075 57066095 2 -chr20 57066095 57066285 1 -chr20 57067788 57068018 1 -chr20 57068064 57068265 1 -chr20 57068969 57069127 1 -chr20 57070666 57071072 1 -chr20 57072573 57072617 1 -chr20 57074371 57074456 1 -chr20 57084223 57084444 1 -chr20 57085066 57085242 1 -chr20 57087773 57088018 1 -chr20 57088319 57088495 1 -chr20 57092883 57093212 1 -chr20 57094755 57095131 1 -chr20 57097407 57097607 1 -chr20 57097699 57097910 1 -chr20 57101771 57101952 1 -chr20 57103103 57103299 1 -chr20 57104510 57104569 1 -chr20 57104822 57104983 1 -chr20 57105738 57105952 1 -chr20 57110425 57110619 1 -chr20 57112085 57112512 1 -chr20 57119666 57119837 1 -chr20 57119912 57120091 1 -chr20 57124954 57125127 1 -chr20 57125150 57125597 1 -chr20 57128410 57128466 1 -chr20 57132318 57132543 1 -chr20 57133845 57134012 1 -chr20 57134358 57134468 1 -chr20 57136556 57136620 1 -chr20 57142054 57142221 1 -chr20 57142221 57142234 2 -chr20 57142234 57142408 1 -chr20 57148769 57149137 1 -chr20 57150584 57150804 1 -chr20 57152823 57152980 1 -chr20 57152981 57153178 1 -chr20 57153426 57153489 1 -chr20 57153505 57153834 1 -chr20 57154127 57154377 1 -chr20 57155605 57155793 1 -chr20 57156554 57156713 1 -chr20 57160797 57160842 1 -chr20 57162146 57162218 1 -chr20 57163235 57163472 1 -chr20 57164354 57164509 1 -chr20 57164509 57164512 2 -chr20 57164512 57164863 1 -chr20 57165447 57165592 1 -chr20 57165592 57165603 2 -chr20 57165603 57165778 1 -chr20 57170276 57170478 1 -chr20 57171134 57171342 1 -chr20 57171435 57171636 1 -chr20 57172898 57173270 1 -chr20 57173325 57173524 1 -chr20 57174514 57174555 1 -chr20 57174994 57175230 1 -chr20 57175536 57175714 1 -chr20 57176601 57176652 1 -chr20 57177753 57177805 1 -chr20 57185625 57185781 1 -chr20 57185816 57185996 1 -chr20 57186557 57186623 1 -chr20 57187048 57187121 1 -chr20 57187578 57187664 1 -chr20 57188742 57188926 1 -chr20 57189527 57189579 1 -chr20 57192721 57192896 1 -chr20 57193066 57193277 1 -chr20 57196488 57196655 1 -chr20 57197713 57197923 1 -chr20 57199697 57200019 1 -chr20 57200019 57200033 2 -chr20 57200033 57200453 1 -chr20 57201110 57201263 1 -chr20 57201486 57201709 1 -chr20 57203058 57203103 1 -chr20 57204519 57204585 1 -chr20 57206927 57207097 1 -chr20 57207584 57207802 1 -chr20 57208184 57208425 1 -chr20 57209880 57210113 1 -chr20 57216406 57216457 1 -chr20 57216458 57216503 1 -chr20 57218053 57218096 1 -chr20 57218676 57218858 1 -chr20 57222323 57222384 1 -chr20 57225472 57225870 1 -chr20 57229051 57229103 1 -chr20 57230235 57230424 1 -chr20 57232121 57232333 1 -chr20 57233538 57233923 1 -chr20 57234907 57235300 1 -chr20 57244516 57244718 1 -chr20 57246471 57246542 1 -chr20 57247975 57248192 1 -chr20 57248205 57248420 1 -chr20 57250169 57250209 1 -chr20 57251080 57251301 1 -chr20 57251301 57251312 2 -chr20 57251312 57251488 1 -chr20 57252406 57253001 1 -chr20 57253493 57253700 1 -chr20 57254920 57254953 1 -chr20 57258274 57258337 1 -chr20 57259995 57260041 1 -chr20 57262391 57262439 1 -chr20 57267660 57267702 1 -chr20 57270501 57270797 1 -chr20 57271609 57271663 1 -chr20 57272044 57272264 1 -chr20 57274504 57274916 1 -chr20 57274955 57275363 1 -chr20 57275392 57275789 1 -chr20 57275837 57276009 1 -chr20 57277176 57277366 1 -chr20 57278161 57278473 1 -chr20 57278639 57278716 1 -chr20 57281030 57281075 1 -chr20 57283407 57283452 1 -chr20 57286246 57286288 1 -chr20 57287944 57288121 1 -chr20 57295822 57295967 1 -chr20 57297244 57297297 1 -chr20 57297298 57297422 1 -chr20 57298202 57298228 1 -chr20 57298604 57298822 1 -chr20 57302767 57302814 1 -chr20 57304759 57304952 1 -chr20 57305408 57305449 1 -chr20 57306582 57306740 1 -chr20 57307128 57307366 1 -chr20 57307461 57307708 1 -chr20 57307764 57307911 1 -chr20 57311829 57312032 1 -chr20 57312073 57312293 1 -chr20 57312455 57312510 1 -chr20 57320848 57320904 1 -chr20 57322546 57322619 1 -chr20 57322743 57322989 1 -chr20 57323089 57323255 1 -chr20 57323768 57323980 1 -chr20 57332914 57333312 1 -chr20 57339030 57339246 1 -chr20 57341852 57342056 1 -chr20 57342396 57342590 1 -chr20 57352474 57352749 1 -chr20 57360773 57360838 1 -chr20 57362854 57362901 1 -chr20 57380797 57380831 1 -chr20 57406738 57406786 1 -chr20 57418063 57418337 1 -chr20 57443918 57444186 1 -chr20 57471542 57472147 1 -chr20 57474246 57474273 1 -chr20 57474484 57474799 1 -chr20 57509333 57509378 1 -chr20 57510764 57510805 1 -chr20 57524555 57524763 1 -chr20 57524763 57524786 2 -chr20 57524786 57524803 1 -chr20 57533785 57533994 1 -chr20 57539713 57539772 1 -chr20 57540838 57541086 1 -chr20 57543752 57543984 1 -chr20 57545988 57546361 1 -chr20 57546584 57546614 1 -chr20 57547438 57547598 1 -chr20 57549273 57549433 1 -chr20 57550238 57550414 1 -chr20 57551992 57552149 1 -chr20 57552482 57552736 1 -chr20 57553031 57553440 1 -chr20 57554630 57554834 1 -chr20 57556900 57556944 1 -chr20 57557049 57557378 1 -chr20 57557645 57557832 1 -chr20 57558244 57558646 1 -chr20 57559721 57559878 1 -chr20 57563039 57563239 1 -chr20 57563366 57563605 1 -chr20 57565540 57565921 1 -chr20 57566771 57567082 1 -chr20 57568003 57568365 1 -chr20 57569118 57569358 1 -chr20 57569455 57569923 1 -chr20 57572501 57572736 1 -chr20 57573174 57573528 1 -chr20 57578075 57578138 1 -chr20 57581391 57581555 1 -chr20 57582212 57582783 1 -chr20 57585558 57585823 1 -chr20 57585825 57586245 1 -chr20 57588731 57588888 1 -chr20 57589691 57590091 1 -chr20 57593308 57593373 1 -chr20 57604400 57604601 1 -chr20 57609075 57609141 1 -chr20 57616562 57616739 1 -chr20 57616851 57616911 1 -chr20 57622354 57622712 1 -chr20 57624845 57625068 1 -chr20 57626413 57626652 1 -chr20 57630387 57630566 1 -chr20 57631945 57632565 1 -chr20 57633254 57633348 1 -chr20 57641354 57641570 1 -chr20 57648137 57648359 1 -chr20 57654186 57654406 1 -chr20 57659989 57660049 1 -chr20 57660595 57660625 1 -chr20 57671844 57671895 1 -chr20 57674442 57674486 1 -chr20 57676299 57676357 1 -chr20 57676706 57676757 1 -chr20 57678482 57678538 1 -chr20 57684511 57684548 1 -chr20 57685151 57685334 1 -chr20 57688783 57688829 1 -chr20 57695750 57695811 1 -chr20 57698185 57698237 1 -chr20 57698412 57698636 1 -chr20 57698643 57698720 1 -chr20 57700536 57700758 1 -chr20 57702237 57702404 1 -chr20 57702458 57702645 1 -chr20 57707308 57707351 1 -chr20 57708990 57709035 1 -chr20 57710019 57710168 1 -chr20 57711274 57711459 1 -chr20 57712885 57713106 1 -chr20 57713536 57713909 1 -chr20 57714852 57714916 1 -chr20 57720600 57720803 1 -chr20 57721365 57721742 1 -chr20 57722117 57722301 1 -chr20 57722589 57722754 1 -chr20 57727827 57728061 1 -chr20 57733238 57733491 1 -chr20 57734234 57734636 1 -chr20 57734828 57735153 1 -chr20 57739074 57739481 1 -chr20 57740083 57740357 1 -chr20 57742675 57743034 1 -chr20 57745363 57745503 1 -chr20 57746551 57746799 1 -chr20 57748102 57748302 1 -chr20 57750314 57750534 1 -chr20 57755552 57755759 1 -chr20 57765980 57766011 1 -chr20 57767944 57767996 1 -chr20 57770736 57770797 1 -chr20 57775786 57775974 1 -chr20 57776647 57777031 1 -chr20 57781126 57781157 1 -chr20 57782255 57782620 1 -chr20 57782794 57783059 1 -chr20 57783139 57783508 1 -chr20 57783722 57783922 1 -chr20 57789749 57789937 1 -chr20 57791453 57791687 1 -chr20 57793687 57793907 1 -chr20 57796095 57796274 1 -chr20 57798731 57798953 1 -chr20 57802679 57803031 1 -chr20 57803914 57804330 1 -chr20 57806048 57806430 1 -chr20 57806948 57807575 1 -chr20 57808359 57808734 1 -chr20 57810025 57810394 1 -chr20 57810581 57810638 1 -chr20 57810638 57810644 2 -chr20 57810644 57810813 1 -chr20 57813480 57813874 1 -chr20 57819303 57819543 1 -chr20 57819691 57819752 1 -chr20 57820202 57820501 1 -chr20 57824876 57825106 1 -chr20 57825309 57825692 1 -chr20 57831084 57831149 1 -chr20 57834407 57834617 1 -chr20 57835820 57836030 1 -chr20 57836231 57836451 1 -chr20 57842587 57842826 1 -chr20 57849935 57850144 1 -chr20 57862909 57862953 1 -chr20 57870030 57870204 1 -chr20 57870387 57870646 1 -chr20 57870670 57870848 1 -chr20 57872939 57873170 1 -chr20 57873493 57873855 1 -chr20 57874139 57874319 1 -chr20 57876850 57877126 1 -chr20 57877211 57877265 1 -chr20 57878018 57878164 1 -chr20 57878912 57879076 1 -chr20 57879228 57879277 1 -chr20 57882421 57882486 1 -chr20 57882645 57882853 1 -chr20 57884996 57885162 1 -chr20 57885198 57885417 1 -chr20 57891093 57891488 1 -chr20 57891544 57891735 1 -chr20 57893066 57893495 1 -chr20 57895508 57895905 1 -chr20 57895915 57896302 1 -chr20 57896779 57897004 1 -chr20 57903785 57903989 1 -chr20 57904612 57904826 1 -chr20 57905129 57905337 1 -chr20 57907473 57907745 1 -chr20 57912360 57912767 1 -chr20 57913002 57913257 1 -chr20 57913627 57913825 1 -chr20 57914347 57915043 1 -chr20 57919101 57919360 1 -chr20 57920070 57920761 1 -chr20 57923342 57923800 1 -chr20 57929725 57930292 1 -chr20 57934048 57934373 1 -chr20 57935028 57935203 1 -chr20 57937597 57938017 1 -chr20 57938998 57939534 1 -chr20 57940525 57940746 1 -chr20 57944097 57944151 1 -chr20 57944617 57944767 1 -chr20 57952830 57953232 1 -chr20 57954072 57954291 1 -chr20 57957642 57958016 1 -chr20 57958932 57959152 1 -chr20 57962435 57962631 1 -chr20 57981663 57981977 1 -chr20 57982380 57982561 1 -chr20 57983059 57983171 1 -chr20 57985144 57985396 1 -chr20 57986503 57986720 1 -chr20 57987894 57988098 1 -chr20 57990860 57991037 1 -chr20 57991920 57992135 1 -chr20 57993664 57993717 1 -chr20 57994395 57994644 1 -chr20 57998949 57999549 1 -chr20 58000830 58000872 1 -chr20 58004320 58004531 1 -chr20 58005376 58005587 1 -chr20 58007958 58008154 1 -chr20 58008415 58008458 1 -chr20 58010860 58010920 1 -chr20 58012456 58012702 1 -chr20 58013643 58013853 1 -chr20 58014036 58014065 1 -chr20 58014297 58014486 1 -chr20 58014666 58014868 1 -chr20 58014962 58015196 1 -chr20 58016360 58016561 1 -chr20 58016909 58017088 1 -chr20 58019021 58019082 1 -chr20 58020724 58020950 1 -chr20 58021173 58021375 1 -chr20 58023935 58024098 1 -chr20 58025030 58025409 1 -chr20 58033172 58033340 1 -chr20 58034409 58034595 1 -chr20 58037810 58038575 1 -chr20 58039142 58039385 1 -chr20 58039385 58039403 2 -chr20 58039403 58039572 1 -chr20 58043801 58044044 1 -chr20 58044970 58045114 1 -chr20 58064898 58065098 1 -chr20 58068972 58069126 1 -chr20 58069247 58069474 1 -chr20 58070041 58070296 1 -chr20 58074505 58074747 1 -chr20 58075286 58075507 1 -chr20 58077433 58077628 1 -chr20 58080111 58080355 1 -chr20 58084996 58085401 1 -chr20 58086748 58086917 1 -chr20 58088472 58088660 1 -chr20 58090302 58090507 1 -chr20 58092313 58092498 1 -chr20 58094817 58094882 1 -chr20 58095558 58095781 1 -chr20 58097022 58097115 1 -chr20 58097115 58097124 2 -chr20 58097124 58097229 1 -chr20 58097261 58097302 1 -chr20 58097496 58097662 1 -chr20 58098149 58098384 1 -chr20 58099261 58099468 1 -chr20 58100823 58101005 1 -chr20 58110409 58110766 1 -chr20 58114384 58114592 1 -chr20 58126656 58126832 1 -chr20 58133211 58133411 1 -chr20 58136245 58136284 1 -chr20 58136344 58136556 1 -chr20 58139070 58139126 1 -chr20 58139424 58139805 1 -chr20 58139805 58139822 2 -chr20 58139822 58139994 1 -chr20 58139994 58140003 2 -chr20 58140003 58140157 1 -chr20 58140327 58140534 1 -chr20 58141347 58141672 1 -chr20 58142121 58142352 1 -chr20 58142782 58142956 1 -chr20 58144409 58144773 1 -chr20 58145139 58145181 1 -chr20 58147234 58147413 1 -chr20 58151225 58151466 1 -chr20 58151909 58152079 1 -chr20 58155082 58155282 1 -chr20 58156371 58156448 1 -chr20 58156452 58156650 1 -chr20 58156656 58156703 1 -chr20 58157430 58157657 1 -chr20 58159269 58159328 1 -chr20 58160504 58160699 1 -chr20 58160833 58161000 1 -chr20 58161771 58161940 1 -chr20 58163135 58163304 1 -chr20 58163304 58163314 2 -chr20 58163314 58163565 1 -chr20 58164813 58165077 1 -chr20 58165636 58165675 1 -chr20 58166956 58167146 1 -chr20 58167285 58167492 1 -chr20 58167697 58167981 1 -chr20 58168259 58168343 1 -chr20 58168766 58169067 1 -chr20 58172014 58172194 1 -chr20 58174196 58174395 1 -chr20 58176151 58176458 1 -chr20 58177004 58177193 1 -chr20 58177970 58178010 1 -chr20 58179772 58179961 1 -chr20 58181556 58181772 1 -chr20 58182739 58182899 1 -chr20 58185083 58185397 1 -chr20 58185511 58185784 1 -chr20 58185823 58186022 1 -chr20 58186063 58186281 1 -chr20 58187400 58187479 1 -chr20 58190562 58190750 1 -chr20 58192675 58192859 1 -chr20 58198037 58198229 1 -chr20 58199708 58199928 1 -chr20 58200887 58201051 1 -chr20 58204861 58205105 1 -chr20 58205207 58205455 1 -chr20 58205571 58205722 1 -chr20 58206275 58206432 1 -chr20 58207261 58207435 1 -chr20 58209984 58210093 1 -chr20 58212815 58212874 1 -chr20 58213055 58213251 1 -chr20 58216906 58217071 1 -chr20 58219428 58219796 1 -chr20 58220018 58220058 1 -chr20 58220774 58220827 1 -chr20 58223562 58223703 1 -chr20 58226758 58226812 1 -chr20 58227052 58227093 1 -chr20 58279571 58279622 1 -chr20 58309868 58309924 1 -chr20 58321135 58321164 1 -chr20 58331154 58331432 1 -chr20 58336090 58336120 1 -chr20 58369539 58369579 1 -chr20 58373147 58373212 1 -chr20 58378042 58378226 1 -chr20 58393978 58394022 1 -chr20 58404350 58404567 1 -chr20 58411870 58411904 1 -chr20 58413885 58413928 1 -chr20 58414630 58414655 1 -chr20 58414786 58414827 1 -chr20 58420135 58420184 1 -chr20 58438548 58438577 1 -chr20 58459418 58459610 1 -chr20 58460694 58461501 1 -chr20 58463588 58463806 1 -chr20 58464125 58464171 1 -chr20 58464931 58465157 1 -chr20 58467738 58467942 1 -chr20 58468101 58468260 1 -chr20 58469938 58470138 1 -chr20 58471163 58471209 1 -chr20 58473495 58473711 1 -chr20 58473762 58473977 1 -chr20 58475166 58475406 1 -chr20 58477290 58477496 1 -chr20 58480246 58480467 1 -chr20 58482500 58482944 1 -chr20 58497897 58498335 1 -chr20 58499695 58499878 1 -chr20 58499969 58500118 1 -chr20 58502422 58502664 1 -chr20 58509001 58509252 1 -chr20 58510757 58511004 1 -chr20 58511182 58511370 1 -chr20 58512093 58512299 1 -chr20 58514689 58514749 1 -chr20 58515471 58515519 1 -chr20 58517119 58517515 1 -chr20 58518027 58518083 1 -chr20 58519321 58519454 1 -chr20 58520875 58521336 1 -chr20 58535175 58535428 1 -chr20 58535779 58535824 1 -chr20 58541644 58541821 1 -chr20 58542019 58542082 1 -chr20 58545008 58545037 1 -chr20 58549200 58549327 1 -chr20 58549327 58549328 2 -chr20 58549328 58549493 1 -chr20 58549943 58550178 1 -chr20 58552706 58552889 1 -chr20 58553710 58553933 1 -chr20 58555200 58555371 1 -chr20 58555727 58555971 1 -chr20 58556658 58556732 1 -chr20 58560596 58560650 1 -chr20 58560650 58560658 2 -chr20 58560658 58560706 1 -chr20 58565083 58565133 1 -chr20 58567074 58567138 1 -chr20 58572144 58572308 1 -chr20 58578544 58578686 1 -chr20 58578956 58579131 1 -chr20 58584178 58584225 1 -chr20 58586675 58587031 1 -chr20 58590656 58590731 1 -chr20 58591795 58592038 1 -chr20 58594081 58594135 1 -chr20 58595052 58595227 1 -chr20 58595716 58595957 1 -chr20 58596561 58596765 1 -chr20 58597554 58597876 1 -chr20 58598058 58598220 1 -chr20 58601192 58601543 1 -chr20 58603720 58603786 1 -chr20 58603930 58603977 1 -chr20 58610412 58610466 1 -chr20 58611562 58611613 1 -chr20 58611736 58611964 1 -chr20 58615723 58615892 1 -chr20 58617467 58617712 1 -chr20 58617971 58618316 1 -chr20 58620299 58620469 1 -chr20 58620469 58620478 2 -chr20 58620478 58620677 1 -chr20 58620696 58620889 1 -chr20 58622879 58623070 1 -chr20 58627485 58627865 1 -chr20 58628516 58628737 1 -chr20 58628793 58628821 1 -chr20 58630244 58630441 1 -chr20 58630632 58631026 1 -chr20 58632036 58632114 1 -chr20 58632654 58632862 1 -chr20 58633458 58633668 1 -chr20 58635393 58635577 1 -chr20 58637274 58637690 1 -chr20 58639911 58640057 1 -chr20 58643704 58643880 1 -chr20 58643949 58644171 1 -chr20 58687588 58687810 1 -chr20 58708450 58708626 1 -chr20 58711936 58712113 1 -chr20 58712808 58713028 1 -chr20 58714043 58714106 1 -chr20 58714192 58714272 1 -chr20 58716674 58716855 1 -chr20 58718416 58718484 1 -chr20 58720615 58720795 1 -chr20 58720939 58721106 1 -chr20 58722244 58722287 1 -chr20 58722453 58722507 1 -chr20 58733803 58734007 1 -chr20 58748133 58748315 1 -chr20 58749757 58749988 1 -chr20 58750176 58750233 1 -chr20 58752238 58752288 1 -chr20 58752694 58752738 1 -chr20 58754050 58754094 1 -chr20 58754194 58754246 1 -chr20 58756356 58756399 1 -chr20 58756747 58756802 1 -chr20 58756984 58757164 1 -chr20 58758705 58758760 1 -chr20 58762790 58762839 1 -chr20 58765741 58765809 1 -chr20 58765916 58766115 1 -chr20 58766463 58766609 1 -chr20 58766609 58766618 2 -chr20 58766618 58766775 1 -chr20 58766776 58767025 1 -chr20 58767532 58767766 1 -chr20 58769634 58769840 1 -chr20 58774412 58774569 1 -chr20 58775930 58776140 1 -chr20 58778486 58778674 1 -chr20 58779308 58779355 1 -chr20 58779491 58779690 1 -chr20 58781566 58781620 1 -chr20 58783204 58783255 1 -chr20 58785932 58785990 1 -chr20 58788734 58788777 1 -chr20 58792132 58792173 1 -chr20 58793784 58793834 1 -chr20 58798419 58798490 1 -chr20 58799118 58799168 1 -chr20 58801926 58801990 1 -chr20 58802281 58802334 1 -chr20 58802695 58802872 1 -chr20 58803712 58803763 1 -chr20 58804473 58804516 1 -chr20 58807886 58807927 1 -chr20 58813518 58813730 1 -chr20 58816809 58816956 1 -chr20 58818529 58818580 1 -chr20 58819697 58819896 1 -chr20 58820158 58820368 1 -chr20 58820509 58820566 1 -chr20 58822157 58822336 1 -chr20 58822813 58823017 1 -chr20 58823509 58823587 1 -chr20 58824547 58824819 1 -chr20 58825821 58825918 1 -chr20 58826023 58826427 1 -chr20 58832869 58833064 1 -chr20 58834310 58834350 1 -chr20 58835043 58835239 1 -chr20 58835954 58836009 1 -chr20 58836841 58837279 1 -chr20 58839061 58839101 1 -chr20 58842397 58842639 1 -chr20 58842974 58843174 1 -chr20 58844488 58844659 1 -chr20 58844914 58845138 1 -chr20 58846288 58846504 1 -chr20 58850547 58850773 1 -chr20 58850773 58850777 2 -chr20 58850777 58851085 1 -chr20 58856210 58856270 1 -chr20 58856443 58856504 1 -chr20 58856855 58857269 1 -chr20 58859981 58860170 1 -chr20 58861145 58861345 1 -chr20 58863331 58863538 1 -chr20 58867712 58867884 1 -chr20 58875609 58875978 1 -chr20 58877235 58877404 1 -chr20 58877619 58877819 1 -chr20 58878409 58878661 1 -chr20 58884523 58884836 1 -chr20 58919381 58919447 1 -chr20 58919962 58920015 1 -chr20 58923719 58924129 1 -chr20 58926201 58926445 1 -chr20 58926451 58926887 1 -chr20 58928856 58929021 1 -chr20 58931487 58931554 1 -chr20 58937852 58938036 1 -chr20 58939391 58939542 1 -chr20 58939658 58939841 1 -chr20 58940056 58940261 1 -chr20 58940476 58940532 1 -chr20 58941241 58941638 1 -chr20 58941911 58942083 1 -chr20 58942647 58942792 1 -chr20 58942814 58942870 1 -chr20 58943051 58943266 1 -chr20 58946680 58946721 1 -chr20 58951171 58951519 1 -chr20 58960822 58960862 1 -chr20 58964675 58964913 1 -chr20 58968980 58969321 1 -chr20 58969685 58969743 1 -chr20 58971601 58971653 1 -chr20 58972063 58972127 1 -chr20 58972753 58972910 1 -chr20 58972929 58973085 1 -chr20 58974905 58974970 1 -chr20 59015008 59015047 1 -chr20 59016015 59016079 1 -chr20 59021726 59021769 1 -chr20 59021891 59021948 1 -chr20 59045350 59045399 1 -chr20 59046231 59046296 1 -chr20 59053101 59053243 1 -chr20 59053381 59053572 1 -chr20 59055573 59055796 1 -chr20 59059173 59059397 1 -chr20 59062339 59062399 1 -chr20 59062921 59063085 1 -chr20 59063086 59063166 1 -chr20 59063419 59063596 1 -chr20 59064666 59064731 1 -chr20 59065866 59066095 1 -chr20 59066905 59067115 1 -chr20 59067395 59067605 1 -chr20 59067812 59067854 1 -chr20 59072294 59072359 1 -chr20 59072964 59073023 1 -chr20 59073553 59073757 1 -chr20 59073922 59074162 1 -chr20 59074162 59074169 2 -chr20 59074169 59074249 1 -chr20 59076888 59076938 1 -chr20 59076950 59076996 1 -chr20 59079683 59079799 1 -chr20 59082384 59082445 1 -chr20 59083850 59084012 1 -chr20 59084568 59084790 1 -chr20 59085183 59085232 1 -chr20 59085538 59085730 1 -chr20 59086642 59086847 1 -chr20 59087774 59088008 1 -chr20 59089425 59089655 1 -chr20 59089907 59090010 1 -chr20 59090372 59090619 1 -chr20 59092696 59092974 1 -chr20 59093153 59093334 1 -chr20 59093950 59094132 1 -chr20 59094561 59094745 1 -chr20 59095429 59095616 1 -chr20 59097633 59097829 1 -chr20 59101303 59101505 1 -chr20 59101742 59102116 1 -chr20 59102967 59103189 1 -chr20 59103617 59104011 1 -chr20 59104011 59104020 2 -chr20 59104020 59104260 1 -chr20 59104352 59104525 1 -chr20 59106046 59106324 1 -chr20 59110984 59111201 1 -chr20 59114509 59114697 1 -chr20 59115354 59115547 1 -chr20 59119113 59119316 1 -chr20 59120990 59121158 1 -chr20 59121385 59121636 1 -chr20 59125348 59125568 1 -chr20 59125813 59126270 1 -chr20 59127414 59127625 1 -chr20 59134023 59134451 1 -chr20 59135554 59135612 1 -chr20 59142940 59142968 1 -chr20 59143558 59143788 1 -chr20 59144970 59145189 1 -chr20 59148141 59148205 1 -chr20 59149154 59149360 1 -chr20 59149744 59149796 1 -chr20 59150558 59150788 1 -chr20 59151813 59151995 1 -chr20 59157377 59157735 1 -chr20 59158400 59158447 1 -chr20 59158632 59158811 1 -chr20 59159267 59159490 1 -chr20 59160242 59160647 1 -chr20 59164972 59165213 1 -chr20 59166548 59166729 1 -chr20 59170434 59170603 1 -chr20 59171012 59171185 1 -chr20 59171393 59171464 1 -chr20 59173764 59174190 1 -chr20 59174190 59174199 2 -chr20 59174199 59174240 1 -chr20 59175510 59175909 1 -chr20 59177775 59178354 1 -chr20 59186811 59187006 1 -chr20 59187012 59187205 1 -chr20 59187727 59187785 1 -chr20 59188475 59188532 1 -chr20 59189663 59189705 1 -chr20 59195349 59195399 1 -chr20 59197541 59197587 1 -chr20 59197601 59197790 1 -chr20 59198021 59198242 1 -chr20 59198452 59198848 1 -chr20 59203357 59203389 1 -chr20 59204258 59204472 1 -chr20 59204960 59205142 1 -chr20 59205855 59206085 1 -chr20 59206820 59207045 1 -chr20 59207158 59207324 1 -chr20 59209354 59209593 1 -chr20 59210055 59210472 1 -chr20 59210947 59210999 1 -chr20 59211446 59211729 1 -chr20 59214224 59214479 1 -chr20 59215298 59215443 1 -chr20 59215443 59215452 2 -chr20 59215452 59215632 1 -chr20 59220133 59220299 1 -chr20 59222235 59222279 1 -chr20 59225742 59225793 1 -chr20 59226112 59226352 1 -chr20 59226352 59226374 2 -chr20 59226374 59226552 1 -chr20 59227028 59227199 1 -chr20 59229644 59229692 1 -chr20 59229692 59229701 2 -chr20 59229701 59229903 1 -chr20 59232154 59232360 1 -chr20 59234349 59234601 1 -chr20 59234832 59235233 1 -chr20 59236974 59237224 1 -chr20 59237883 59238102 1 -chr20 59240108 59240308 1 -chr20 59241689 59241909 1 -chr20 59242805 59243386 1 -chr20 59244053 59244658 1 -chr20 59244723 59244930 1 -chr20 59251213 59251410 1 -chr20 59253936 59254332 1 -chr20 59254944 59255144 1 -chr20 59255665 59255874 1 -chr20 59256476 59256873 1 -chr20 59258242 59258652 1 -chr20 59261702 59261906 1 -chr20 59262528 59263350 1 -chr20 59263434 59263780 1 -chr20 59268084 59268144 1 -chr20 59268495 59268591 1 -chr20 59270609 59270677 1 -chr20 59271420 59271475 1 -chr20 59271871 59272253 1 -chr20 59272253 59272257 2 -chr20 59272257 59272318 1 -chr20 59275242 59275275 1 -chr20 59275675 59275733 1 -chr20 59278638 59278872 1 -chr20 59282266 59282643 1 -chr20 59286934 59287341 1 -chr20 59287655 59287727 1 -chr20 59287814 59288026 1 -chr20 59289004 59289659 1 -chr20 59290130 59290397 1 -chr20 59291067 59291452 1 -chr20 59291533 59291577 1 -chr20 59294012 59294183 1 -chr20 59294196 59294332 1 -chr20 59295038 59295211 1 -chr20 59295720 59296124 1 -chr20 59298933 59299138 1 -chr20 59300332 59300385 1 -chr20 59300399 59300619 1 -chr20 59300632 59300684 1 -chr20 59304642 59304829 1 -chr20 59307154 59307502 1 -chr20 59308025 59308242 1 -chr20 59312536 59312593 1 -chr20 59312928 59313163 1 -chr20 59313163 59313172 2 -chr20 59313172 59313332 1 -chr20 59313730 59313926 1 -chr20 59322050 59322102 1 -chr20 59323701 59323756 1 -chr20 59324399 59324475 1 -chr20 59325171 59325243 1 -chr20 59327421 59327671 1 -chr20 59328529 59328736 1 -chr20 59330887 59331073 1 -chr20 59332331 59332368 1 -chr20 59333727 59333942 1 -chr20 59334385 59334981 1 -chr20 59335681 59335726 1 -chr20 59335860 59336089 1 -chr20 59337880 59337931 1 -chr20 59338175 59338371 1 -chr20 59338805 59338986 1 -chr20 59339300 59339515 1 -chr20 59340286 59340678 1 -chr20 59342540 59342756 1 -chr20 59350362 59350529 1 -chr20 59352977 59353021 1 -chr20 59359402 59359862 1 -chr20 59363811 59363867 1 -chr20 59365762 59365943 1 -chr20 59366156 59366375 1 -chr20 59366861 59367069 1 -chr20 59367074 59367268 1 -chr20 59368441 59368623 1 -chr20 59368794 59369220 1 -chr20 59372159 59372357 1 -chr20 59376445 59376511 1 -chr20 59377200 59377437 1 -chr20 59385232 59385674 1 -chr20 59387992 59388181 1 -chr20 59390687 59391041 1 -chr20 59394072 59394321 1 -chr20 59395907 59396149 1 -chr20 59396535 59396858 1 -chr20 59397582 59397758 1 -chr20 59402551 59402782 1 -chr20 59403120 59403319 1 -chr20 59403925 59404283 1 -chr20 59405310 59405363 1 -chr20 59405597 59405847 1 -chr20 59406034 59406282 1 -chr20 59406714 59406887 1 -chr20 59407394 59407603 1 -chr20 59408744 59408934 1 -chr20 59409988 59410042 1 -chr20 59411495 59411689 1 -chr20 59412971 59413221 1 -chr20 59416920 59417132 1 -chr20 59417421 59417611 1 -chr20 59418941 59419630 1 -chr20 59420465 59420520 1 -chr20 59420755 59420930 1 -chr20 59422953 59423145 1 -chr20 59424646 59424709 1 -chr20 59425271 59425484 1 -chr20 59426057 59426152 1 -chr20 59426566 59426750 1 -chr20 59427196 59427401 1 -chr20 59432114 59432272 1 -chr20 59432272 59432293 2 -chr20 59432293 59432418 1 -chr20 59434728 59434780 1 -chr20 59436074 59436129 1 -chr20 59438400 59438582 1 -chr20 59439692 59439859 1 -chr20 59441315 59441360 1 -chr20 59441734 59441958 1 -chr20 59443645 59443846 1 -chr20 59444648 59444713 1 -chr20 59444851 59445015 1 -chr20 59445453 59445497 1 -chr20 59445588 59445773 1 -chr20 59447962 59448158 1 -chr20 59448449 59448658 1 -chr20 59449109 59449169 1 -chr20 59450126 59450285 1 -chr20 59450292 59450507 1 -chr20 59450635 59451020 1 -chr20 59451693 59451913 1 -chr20 59454784 59454826 1 -chr20 59455685 59455899 1 -chr20 59456828 59457042 1 -chr20 59457584 59457788 1 -chr20 59458718 59458892 1 -chr20 59459061 59459259 1 -chr20 59460609 59460845 1 -chr20 59460987 59461246 1 -chr20 59462009 59462166 1 -chr20 59466109 59466285 1 -chr20 59467168 59467432 1 -chr20 59468052 59468404 1 -chr20 59469804 59470017 1 -chr20 59477338 59477547 1 -chr20 59483487 59483557 1 -chr20 59484564 59484793 1 -chr20 59485836 59486021 1 -chr20 59486023 59486374 1 -chr20 59487862 59488243 1 -chr20 59488587 59488775 1 -chr20 59489226 59489381 1 -chr20 59493657 59493874 1 -chr20 59494007 59494046 1 -chr20 59494585 59494752 1 -chr20 59508367 59508431 1 -chr20 59515293 59515457 1 -chr20 59516809 59516861 1 -chr20 59528054 59528098 1 -chr20 59531330 59531404 1 -chr20 59532430 59532594 1 -chr20 59532965 59532998 1 -chr20 59542417 59542469 1 -chr20 59543733 59543929 1 -chr20 59563130 59563367 1 -chr20 59564287 59564542 1 -chr20 59564772 59564800 1 -chr20 59570170 59570339 1 -chr20 59570940 59571114 1 -chr20 59573168 59573369 1 -chr20 59573934 59574152 1 -chr20 59577628 59577682 1 -chr20 59578689 59578905 1 -chr20 59579097 59579313 1 -chr20 59579550 59579779 1 -chr20 59580058 59580102 1 -chr20 59582797 59583018 1 -chr20 59586855 59587026 1 -chr20 59587451 59587670 1 -chr20 59588294 59588369 1 -chr20 59589219 59589416 1 -chr20 59592275 59592316 1 -chr20 59594047 59594206 1 -chr20 59596963 59597170 1 -chr20 59598570 59598806 1 -chr20 59600225 59600622 1 -chr20 59602237 59602299 1 -chr20 59606588 59606827 1 -chr20 59606926 59607111 1 -chr20 59607328 59607723 1 -chr20 59610039 59610081 1 -chr20 59616351 59616534 1 -chr20 59616737 59617138 1 -chr20 59619193 59619401 1 -chr20 59619875 59620053 1 -chr20 59620389 59620796 1 -chr20 59624599 59625011 1 -chr20 59625364 59625552 1 -chr20 59627210 59627601 1 -chr20 59632855 59632976 1 -chr20 59662373 59662439 1 -chr20 59663448 59663646 1 -chr20 59664306 59664521 1 -chr20 59664552 59664596 1 -chr20 59664756 59664938 1 -chr20 59666297 59666470 1 -chr20 59676459 59676932 1 -chr20 59678574 59678650 1 -chr20 59678804 59678960 1 -chr20 59680363 59680558 1 -chr20 59683881 59684087 1 -chr20 59684738 59684982 1 -chr20 59689700 59689897 1 -chr20 59692999 59693229 1 -chr20 59694429 59694624 1 -chr20 59697055 59697249 1 -chr20 59701265 59701516 1 -chr20 59707536 59707587 1 -chr20 59716960 59717201 1 -chr20 59718010 59718225 1 -chr20 59719863 59720089 1 -chr20 59722678 59722920 1 -chr20 59728992 59729159 1 -chr20 59729725 59729986 1 -chr20 59736177 59736557 1 -chr20 59740753 59740998 1 -chr20 59741333 59741519 1 -chr20 59743333 59743582 1 -chr20 59745430 59745773 1 -chr20 59748063 59748303 1 -chr20 59752140 59752347 1 -chr20 59752833 59753049 1 -chr20 59753935 59754013 1 -chr20 59769035 59769422 1 -chr20 59774151 59774377 1 -chr20 59784538 59784588 1 -chr20 59785848 59786115 1 -chr20 59787492 59787655 1 -chr20 59787732 59787974 1 -chr20 59789683 59789872 1 -chr20 59801229 59801529 1 -chr20 59804420 59804586 1 -chr20 59807336 59807406 1 -chr20 59809590 59809961 1 -chr20 59810776 59811189 1 -chr20 59814566 59814652 1 -chr20 59816534 59816717 1 -chr20 59816967 59817157 1 -chr20 59818041 59818196 1 -chr20 59820103 59820280 1 -chr20 59821146 59821571 1 -chr20 59821774 59821969 1 -chr20 59830195 59830793 1 -chr20 59831733 59831929 1 -chr20 59833191 59833621 1 -chr20 59834166 59834381 1 -chr20 59835828 59836194 1 -chr20 59836198 59836928 1 -chr20 59837904 59838084 1 -chr20 59838258 59838415 1 -chr20 59838730 59839087 1 -chr20 59839684 59839862 1 -chr20 59840776 59840965 1 -chr20 59842237 59842454 1 -chr20 59843047 59843253 1 -chr20 59850251 59850443 1 -chr20 59852415 59852855 1 -chr20 59853804 59854028 1 -chr20 59855783 59856006 1 -chr20 59891526 59891732 1 -chr20 59897962 59898028 1 -chr20 59899924 59900086 1 -chr20 59927513 59927688 1 -chr20 59929696 59930446 1 -chr20 59950570 59950611 1 -chr20 59958184 59958400 1 -chr20 59959731 59960115 1 -chr20 59961139 59961363 1 -chr20 59962175 59962398 1 -chr20 59964018 59964204 1 -chr20 59966079 59966284 1 -chr20 59971793 59972009 1 -chr20 59977648 59977875 1 -chr20 59978098 59978313 1 -chr20 59980660 59980816 1 -chr20 59983221 59983417 1 -chr20 59992997 59993377 1 -chr20 59994465 59994838 1 -chr20 59995938 59996138 1 -chr20 59997579 59997735 1 -chr20 59998848 59999257 1 -chr20 60000529 60000908 1 -chr20 60000992 60001365 1 -chr20 60001737 60001955 1 -chr20 60002856 60003076 1 -chr20 60003844 60004059 1 -chr20 60005995 60006058 1 -chr20 60009075 60009349 1 -chr20 60022859 60023065 1 -chr20 60024574 60024758 1 -chr20 60024984 60025164 1 -chr20 60029384 60029462 1 -chr20 60030573 60030782 1 -chr20 60031573 60031721 1 -chr20 60031767 60032157 1 -chr20 60039359 60040103 1 -chr20 60043282 60043506 1 -chr20 60045852 60046069 1 -chr20 60046950 60047148 1 -chr20 60052254 60052488 1 -chr20 60053739 60053919 1 -chr20 60055361 60055567 1 -chr20 60062413 60062632 1 -chr20 60065237 60065419 1 -chr20 60065998 60066236 1 -chr20 60067077 60067901 1 -chr20 60069478 60069939 1 -chr20 60070856 60071032 1 -chr20 60075363 60075564 1 -chr20 60075877 60076074 1 -chr20 60076110 60076576 1 -chr20 60078340 60078930 1 -chr20 60079058 60079245 1 -chr20 60079498 60079650 1 -chr20 60081054 60081105 1 -chr20 60081995 60082037 1 -chr20 60082815 60082879 1 -chr20 60083356 60083566 1 -chr20 60084427 60084607 1 -chr20 60086407 60086573 1 -chr20 60087626 60087695 1 -chr20 60087847 60087880 1 -chr20 60099808 60100012 1 -chr20 60101772 60101964 1 -chr20 60102535 60102580 1 -chr20 60102795 60103196 1 -chr20 60107965 60108190 1 -chr20 60108472 60108679 1 -chr20 60111111 60111307 1 -chr20 60117176 60117396 1 -chr20 60118543 60118744 1 -chr20 60118930 60119146 1 -chr20 60119578 60119741 1 -chr20 60122463 60122512 1 -chr20 60123591 60123786 1 -chr20 60125479 60125882 1 -chr20 60126049 60126279 1 -chr20 60132783 60132997 1 -chr20 60138744 60139116 1 -chr20 60151621 60152001 1 -chr20 60165913 60166371 1 -chr20 60170942 60171141 1 -chr20 60180725 60180891 1 -chr20 60183673 60183861 1 -chr20 60190402 60190603 1 -chr20 60190752 60190994 1 -chr20 60195855 60196041 1 -chr20 60202110 60202344 1 -chr20 60203352 60203588 1 -chr20 60203829 60204008 1 -chr20 60205924 60206152 1 -chr20 60208746 60209085 1 -chr20 60211913 60212312 1 -chr20 60215921 60216106 1 -chr20 60216351 60216591 1 -chr20 60221671 60221886 1 -chr20 60222003 60222200 1 -chr20 60237755 60238148 1 -chr20 60238419 60238486 1 -chr20 60239178 60239394 1 -chr20 60243689 60244108 1 -chr20 60245187 60245262 1 -chr20 60250552 60250919 1 -chr20 60252501 60252678 1 -chr20 60253139 60253181 1 -chr20 60255416 60255605 1 -chr20 60257536 60257745 1 -chr20 60273091 60273310 1 -chr20 60286760 60286997 1 -chr20 60294716 60294900 1 -chr20 60299705 60299929 1 -chr20 60303122 60303352 1 -chr20 60304545 60304599 1 -chr20 60308231 60308419 1 -chr20 60311910 60312156 1 -chr20 60318268 60318474 1 -chr20 60330255 60330518 1 -chr20 60331235 60331432 1 -chr20 60332010 60332074 1 -chr20 60333793 60333951 1 -chr20 60334923 60335158 1 -chr20 60338001 60338169 1 -chr20 60339376 60339541 1 -chr20 60352564 60352783 1 -chr20 60353100 60353480 1 -chr20 60363925 60364132 1 -chr20 60388338 60388402 1 -chr20 60389715 60390128 1 -chr20 60393722 60393874 1 -chr20 60397759 60397981 1 -chr20 60404178 60404345 1 -chr20 60407884 60408119 1 -chr20 60411784 60411972 1 -chr20 60420160 60420223 1 -chr20 60422446 60422672 1 -chr20 60423482 60423698 1 -chr20 60423810 60423882 1 -chr20 60426247 60426666 1 -chr20 60432115 60432448 1 -chr20 60433275 60433473 1 -chr20 60436059 60436293 1 -chr20 60440843 60440885 1 -chr20 60444574 60444807 1 -chr20 60446384 60446795 1 -chr20 60447486 60447542 1 -chr20 60452868 60453071 1 -chr20 60454410 60454656 1 -chr20 60454984 60455210 1 -chr20 60478824 60479004 1 -chr20 60481309 60481373 1 -chr20 60482426 60482591 1 -chr20 60483199 60483460 1 -chr20 60484372 60484578 1 -chr20 60490001 60490261 1 -chr20 60492351 60492587 1 -chr20 60493192 60493357 1 -chr20 60495515 60495923 1 -chr20 60495959 60496188 1 -chr20 60496945 60497193 1 -chr20 60507264 60507295 1 -chr20 60512072 60512135 1 -chr20 60514964 60515244 1 -chr20 60547694 60547741 1 -chr20 60552662 60553034 1 -chr20 60556878 60557087 1 -chr20 60559471 60559665 1 -chr20 60561787 60561968 1 -chr20 60562185 60562401 1 -chr20 60562523 60562587 1 -chr20 60564511 60564898 1 -chr20 60565268 60565321 1 -chr20 60585183 60585565 1 -chr20 60587547 60587764 1 -chr20 60605277 60605634 1 -chr20 60615902 60616094 1 -chr20 60618751 60618822 1 -chr20 60628761 60628804 1 -chr20 60633834 60633893 1 -chr20 60634129 60634723 1 -chr20 60635286 60635887 1 -chr20 60640787 60640840 1 -chr20 60642174 60642376 1 -chr20 60653108 60653319 1 -chr20 60656695 60656940 1 -chr20 60658485 60658675 1 -chr20 60658866 60659040 1 -chr20 60660679 60660880 1 -chr20 60671066 60671333 1 -chr20 60676294 60676692 1 -chr20 60687818 60688032 1 -chr20 60688208 60688405 1 -chr20 60722483 60722717 1 -chr20 60732182 60732583 1 -chr20 60747236 60747648 1 -chr20 60749652 60749845 1 -chr20 60753030 60753217 1 -chr20 60753553 60754076 1 -chr20 60793620 60793991 1 -chr20 60798667 60798703 1 -chr20 60800168 60800527 1 -chr20 60801572 60801750 1 -chr20 60808500 60808873 1 -chr20 60823380 60823618 1 -chr20 60850130 60850334 1 -chr20 60850776 60851052 1 -chr20 60862453 60862499 1 -chr20 60867619 60867674 1 -chr20 60868162 60868711 1 -chr20 60868852 60869024 1 -chr20 60872879 60873118 1 -chr20 60876947 60877197 1 -chr20 60877899 60877961 1 -chr20 60880295 60880502 1 -chr20 60883040 60883227 1 -chr20 60900941 60901123 1 -chr20 60903728 60903769 1 -chr20 60926284 60926478 1 -chr20 60929780 60930018 1 -chr20 60937960 60938388 1 -chr20 60940936 60941125 1 -chr20 60950803 60951169 1 -chr20 60953337 60953525 1 -chr20 60960230 60960604 1 -chr20 60966098 60966348 1 -chr20 60966473 60966680 1 -chr20 60967415 60967464 1 -chr20 60968689 60969146 1 -chr20 60972209 60972282 1 -chr20 60976012 60976211 1 -chr20 60976657 60976831 1 -chr20 60978708 60978907 1 -chr20 60982474 60982674 1 -chr20 60985143 60985353 1 -chr20 60990837 60991069 1 -chr20 60991282 60991310 1 -chr20 60991782 60992002 1 -chr20 60992245 60992664 1 -chr20 60996779 60996961 1 -chr20 60999084 60999281 1 -chr20 61006080 61006517 1 -chr20 61007262 61007658 1 -chr20 61010081 61010270 1 -chr20 61024137 61024566 1 -chr20 61027388 61027726 1 -chr20 61029023 61029050 1 -chr20 61039826 61040077 1 -chr20 61053192 61053400 1 -chr20 61054037 61054226 1 -chr20 61056485 61056527 1 -chr20 61056616 61056820 1 -chr20 61057150 61057507 1 -chr20 61060605 61060876 1 -chr20 61062198 61062659 1 -chr20 61066614 61066710 1 -chr20 61067076 61067452 1 -chr20 61068963 61069160 1 -chr20 61070728 61071117 1 -chr20 61071252 61071403 1 -chr20 61071630 61071963 1 -chr20 61081266 61081452 1 -chr20 61081554 61081683 1 -chr20 61087660 61087736 1 -chr20 61088276 61088516 1 -chr20 61092099 61092452 1 -chr20 61093943 61094206 1 -chr20 61098980 61099207 1 -chr20 61100879 61101273 1 -chr20 61102029 61102527 1 -chr20 61105276 61105517 1 -chr20 61106466 61106875 1 -chr20 61110134 61110351 1 -chr20 61110824 61110965 1 -chr20 61111864 61112302 1 -chr20 61114908 61115077 1 -chr20 61115634 61115835 1 -chr20 61116390 61116483 1 -chr20 61116894 61117133 1 -chr20 61118588 61118660 1 -chr20 61121261 61121436 1 -chr20 61123287 61123335 1 -chr20 61125705 61125884 1 -chr20 61126782 61126967 1 -chr20 61128701 61129047 1 -chr20 61129075 61129279 1 -chr20 61129388 61129566 1 -chr20 61130825 61131031 1 -chr20 61132454 61132643 1 -chr20 61135262 61135469 1 -chr20 61137742 61137940 1 -chr20 61139186 61139496 1 -chr20 61140110 61140310 1 -chr20 61147477 61147627 1 -chr20 61153530 61153702 1 -chr20 61158167 61158388 1 -chr20 61160081 61160309 1 -chr20 61160398 61160466 1 -chr20 61162007 61162412 1 -chr20 61165262 61165306 1 -chr20 61170967 61171363 1 -chr20 61178563 61178767 1 -chr20 61179198 61179429 1 -chr20 61184371 61184581 1 -chr20 61185643 61185687 1 -chr20 61185983 61186186 1 -chr20 61186231 61186617 1 -chr20 61187054 61187130 1 -chr20 61190145 61190324 1 -chr20 61195497 61195679 1 -chr20 61210242 61210443 1 -chr20 61218138 61218319 1 -chr20 61220343 61220539 1 -chr20 61221104 61221306 1 -chr20 61222272 61222482 1 -chr20 61227478 61227538 1 -chr20 61228001 61228244 1 -chr20 61233193 61233340 1 -chr20 61234753 61235013 1 -chr20 61235063 61235483 1 -chr20 61237404 61237811 1 -chr20 61239557 61239963 1 -chr20 61244435 61244646 1 -chr20 61244688 61245037 1 -chr20 61245769 61245982 1 -chr20 61247108 61247314 1 -chr20 61247314 61247327 2 -chr20 61247327 61247350 1 -chr20 61254937 61255004 1 -chr20 61255659 61255714 1 -chr20 61256181 61256224 1 -chr20 61256628 61256668 1 -chr20 61258538 61258959 1 -chr20 61261269 61261595 1 -chr20 61264580 61264791 1 -chr20 61264869 61265015 1 -chr20 61265982 61266170 1 -chr20 61266625 61266836 1 -chr20 61267466 61267607 1 -chr20 61269951 61270168 1 -chr20 61270841 61271016 1 -chr20 61271714 61271878 1 -chr20 61273918 61274399 1 -chr20 61278815 61279220 1 -chr20 61285929 61286115 1 -chr20 61287052 61287268 1 -chr20 61287723 61287916 1 -chr20 61288701 61288887 1 -chr20 61293353 61293517 1 -chr20 61297749 61297913 1 -chr20 61298748 61299111 1 -chr20 61300174 61300210 1 -chr20 61302667 61302837 1 -chr20 61304844 61304890 1 -chr20 61305418 61305615 1 -chr20 61308457 61308880 1 -chr20 61308880 61308884 2 -chr20 61308884 61308968 1 -chr20 61309329 61309549 1 -chr20 61313450 61313628 1 -chr20 61314024 61314180 1 -chr20 61314747 61314946 1 -chr20 61321434 61321658 1 -chr20 61325759 61325969 1 -chr20 61326457 61326654 1 -chr20 61329329 61329392 1 -chr20 61331592 61331632 1 -chr20 61332454 61332620 1 -chr20 61334363 61334730 1 -chr20 61340850 61340900 1 -chr20 61343451 61343679 1 -chr20 61344962 61345148 1 -chr20 61345148 61345165 2 -chr20 61345165 61345346 1 -chr20 61347676 61347891 1 -chr20 61350947 61351184 1 -chr20 61351225 61351267 1 -chr20 61352627 61352858 1 -chr20 61353042 61353210 1 -chr20 61356414 61356636 1 -chr20 61358077 61358130 1 -chr20 61364426 61364592 1 -chr20 61365425 61365639 1 -chr20 61367296 61367542 1 -chr20 61367631 61367838 1 -chr20 61387875 61388091 1 -chr20 61388655 61388884 1 -chr20 61391251 61391852 1 -chr20 61392024 61392254 1 -chr20 61392590 61392836 1 -chr20 61393366 61393593 1 -chr20 61398752 61398949 1 -chr20 61399644 61399814 1 -chr20 61400417 61400601 1 -chr20 61401265 61401819 1 -chr20 61403199 61403359 1 -chr20 61406091 61406576 1 -chr20 61417494 61417703 1 -chr20 61418643 61418856 1 -chr20 61420548 61420717 1 -chr20 61430793 61431034 1 -chr20 61433578 61433763 1 -chr20 61435235 61435306 1 -chr20 61436902 61437082 1 -chr20 61438100 61438338 1 -chr20 61441299 61441355 1 -chr20 61441612 61441809 1 -chr20 61441966 61442220 1 -chr20 61442945 61443356 1 -chr20 61443526 61443701 1 -chr20 61445859 61446029 1 -chr20 61450186 61450249 1 -chr20 61464459 61464626 1 -chr20 61468037 61468272 1 -chr20 61475704 61476389 1 -chr20 61477197 61477380 1 -chr20 61488126 61488263 1 -chr20 61488451 61488657 1 -chr20 61491699 61491887 1 -chr20 61492865 61493041 1 -chr20 61498014 61498086 1 -chr20 61499190 61499241 1 -chr20 61499562 61499600 1 -chr20 61500127 61500292 1 -chr20 61501331 61501488 1 -chr20 61502529 61502706 1 -chr20 61507436 61507633 1 -chr20 61510007 61510208 1 -chr20 61512695 61512736 1 -chr20 61513033 61513074 1 -chr20 61514133 61514298 1 -chr20 61514854 61515001 1 -chr20 61517885 61518229 1 -chr20 61519359 61519658 1 -chr20 61534162 61534327 1 -chr20 61534403 61534570 1 -chr20 61535131 61535215 1 -chr20 61535222 61535275 1 -chr20 61535418 61535811 1 -chr20 61537572 61537767 1 -chr20 61537853 61538037 1 -chr20 61538499 61538561 1 -chr20 61540000 61540061 1 -chr20 61540520 61540593 1 -chr20 61540607 61540937 1 -chr20 61542006 61542205 1 -chr20 61542480 61542635 1 -chr20 61546840 61547011 1 -chr20 61548690 61548923 1 -chr20 61549150 61549398 1 -chr20 61549589 61549787 1 -chr20 61550111 61550186 1 -chr20 61550374 61550905 1 -chr20 61554429 61554846 1 -chr20 61557087 61557346 1 -chr20 61557850 61557902 1 -chr20 61557986 61558168 1 -chr20 61558646 61558738 1 -chr20 61560692 61561256 1 -chr20 61563406 61563810 1 -chr20 61564022 61564431 1 -chr20 61566573 61566796 1 -chr20 61568504 61568546 1 -chr20 61570054 61570222 1 -chr20 61570429 61570660 1 -chr20 61571015 61571062 1 -chr20 61571702 61571904 1 -chr20 61572056 61572263 1 -chr20 61572950 61573139 1 -chr20 61573587 61573751 1 -chr20 61575823 61576016 1 -chr20 61579047 61579258 1 -chr20 61580554 61580727 1 -chr20 61582014 61582056 1 -chr20 61586330 61586484 1 -chr20 61586819 61587054 1 -chr20 61588070 61588277 1 -chr20 61588937 61589154 1 -chr20 61589854 61590253 1 -chr20 61597571 61597608 1 -chr20 61602433 61602860 1 -chr20 61603314 61603524 1 -chr20 61603922 61604122 1 -chr20 61606083 61606280 1 -chr20 61606538 61607049 1 -chr20 61608870 61609088 1 -chr20 61611000 61611192 1 -chr20 61611334 61611580 1 -chr20 61616604 61617164 1 -chr20 61618510 61618758 1 -chr20 61620089 61620263 1 -chr20 61627095 61627175 1 -chr20 61629323 61629504 1 -chr20 61631044 61631130 1 -chr20 61634422 61634476 1 -chr20 61636019 61636205 1 -chr20 61640703 61640944 1 -chr20 61640969 61641123 1 -chr20 61647095 61647330 1 -chr20 61648140 61648316 1 -chr20 61648831 61648926 1 -chr20 61649131 61649300 1 -chr20 61651061 61651115 1 -chr20 61651929 61651995 1 -chr20 61655790 61655860 1 -chr20 61657107 61657287 1 -chr20 61657883 61658083 1 -chr20 61659582 61659639 1 -chr20 61660568 61660660 1 -chr20 61668012 61668056 1 -chr20 61671673 61671874 1 -chr20 61678830 61679018 1 -chr20 61679025 61679585 1 -chr20 61680478 61680675 1 -chr20 61680733 61680935 1 -chr20 61682748 61683114 1 -chr20 61683831 61683857 1 -chr20 61683857 61683873 2 -chr20 61683873 61683909 1 -chr20 61689030 61689242 1 -chr20 61689356 61689412 1 -chr20 61692296 61692474 1 -chr20 61693668 61693760 1 -chr20 61701654 61701701 1 -chr20 61709552 61709945 1 -chr20 61716165 61716332 1 -chr20 61719142 61719288 1 -chr20 61720484 61720546 1 -chr20 61721066 61721218 1 -chr20 61722015 61722260 1 -chr20 61723376 61723767 1 -chr20 61725246 61725494 1 -chr20 61729332 61729397 1 -chr20 61729963 61730198 1 -chr20 61732254 61732304 1 -chr20 61735505 61735542 1 -chr20 61738418 61738480 1 -chr20 61741987 61742204 1 -chr20 61742651 61742874 1 -chr20 61743110 61743329 1 -chr20 61745336 61745523 1 -chr20 61752522 61752817 1 -chr20 61752964 61753078 1 -chr20 61754320 61754500 1 -chr20 61757806 61758166 1 -chr20 61762341 61762495 1 -chr20 61765934 61766132 1 -chr20 61766837 61767165 1 -chr20 61768743 61769104 1 -chr20 61769104 61769124 2 -chr20 61769124 61769259 1 -chr20 61769259 61769278 2 -chr20 61769278 61769492 1 -chr20 61769976 61770173 1 -chr20 61772068 61772247 1 -chr20 61773838 61774238 1 -chr20 61774815 61774886 1 -chr20 61776469 61776644 1 -chr20 61776908 61777115 1 -chr20 61782637 61782679 1 -chr20 61785121 61785205 1 -chr20 61789460 61789723 1 -chr20 61795765 61796159 1 -chr20 61796369 61796571 1 -chr20 61797818 61797892 1 -chr20 61797938 61798132 1 -chr20 61801404 61801500 1 -chr20 61802863 61802907 1 -chr20 61803520 61803606 1 -chr20 61804233 61804303 1 -chr20 61807088 61807127 1 -chr20 61809309 61809550 1 -chr20 61811628 61811671 1 -chr20 61811941 61812077 1 -chr20 61813034 61813274 1 -chr20 61817400 61817444 1 -chr20 61817764 61817846 1 -chr20 61818233 61818291 1 -chr20 61821162 61821202 1 -chr20 61821245 61821434 1 -chr20 61822542 61822732 1 -chr20 61822732 61822750 2 -chr20 61822750 61822953 1 -chr20 61824177 61824229 1 -chr20 61825549 61825705 1 -chr20 61825946 61826244 1 -chr20 61827485 61827659 1 -chr20 61833161 61833376 1 -chr20 61836158 61836371 1 -chr20 61839148 61839302 1 -chr20 61840494 61840651 1 -chr20 61842146 61842208 1 -chr20 61842705 61842893 1 -chr20 61846220 61846294 1 -chr20 61850529 61850696 1 -chr20 61854334 61854816 1 -chr20 61854866 61855208 1 -chr20 61856289 61856684 1 -chr20 61857085 61857267 1 -chr20 61858773 61858836 1 -chr20 61858867 61859019 1 -chr20 61859580 61859778 1 -chr20 61866515 61866676 1 -chr20 61867532 61867726 1 -chr20 61868696 61868884 1 -chr20 61869713 61869891 1 -chr20 61870438 61870637 1 -chr20 61871553 61871750 1 -chr20 61873828 61873894 1 -chr20 61874370 61874578 1 -chr20 61881607 61881680 1 -chr20 61882929 61882971 1 -chr20 61886378 61886560 1 -chr20 61886624 61886780 1 -chr20 61887270 61887429 1 -chr20 61887961 61888150 1 -chr20 61888563 61888848 1 -chr20 61891121 61891424 1 -chr20 61894938 61894983 1 -chr20 61895405 61895456 1 -chr20 61898088 61898144 1 -chr20 61898659 61898706 1 -chr20 61899539 61899571 1 -chr20 61901031 61901076 1 -chr20 61902079 61902148 1 -chr20 61903364 61903428 1 -chr20 61908462 61908505 1 -chr20 61911587 61911721 1 -chr20 61911727 61911769 1 -chr20 61913566 61913608 1 -chr20 61915956 61916355 1 -chr20 61923515 61923717 1 -chr20 61925521 61925563 1 -chr20 61926281 61926323 1 -chr20 61928305 61928440 1 -chr20 61929591 61929774 1 -chr20 61929915 61930111 1 -chr20 61930269 61930647 1 -chr20 61931079 61931295 1 -chr20 61933721 61933824 1 -chr20 61935098 61935142 1 -chr20 61936449 61936646 1 -chr20 61937928 61938063 1 -chr20 61939139 61939323 1 -chr20 61940573 61940780 1 -chr20 61943047 61943540 1 -chr20 61945271 61945348 1 -chr20 61947079 61947131 1 -chr20 61948289 61948331 1 -chr20 61949266 61949708 1 -chr20 61950050 61950469 1 -chr20 61954967 61955250 1 -chr20 61956609 61956820 1 -chr20 61958412 61958658 1 -chr20 61960638 61960677 1 -chr20 61964528 61964709 1 -chr20 61965681 61965893 1 -chr20 62011711 62011875 1 -chr20 62041831 62041871 1 -chr20 62065151 62065244 1 -chr20 62079530 62079730 1 -chr20 62080815 62081004 1 -chr20 62088638 62088812 1 -chr20 62098241 62098287 1 -chr20 62101777 62101822 1 -chr20 62103855 62104223 1 -chr20 62104480 62104663 1 -chr20 62113084 62113296 1 -chr20 62113741 62113984 1 -chr20 62114918 62115128 1 -chr20 62116071 62116234 1 -chr20 62116460 62116509 1 -chr20 62117074 62117482 1 -chr20 62117563 62117786 1 -chr20 62118951 62119159 1 -chr20 62121338 62121367 1 -chr20 62144075 62144416 1 -chr20 62176326 62176380 1 -chr20 62182952 62183294 1 -chr20 62189557 62189693 1 -chr20 62199461 62199517 1 -chr20 62204975 62205017 1 -chr20 62211060 62211236 1 -chr20 62212216 62212588 1 -chr20 62215063 62215105 1 -chr20 62219700 62219966 1 -chr20 62220839 62221076 1 -chr20 62221297 62221503 1 -chr20 62222231 62222497 1 -chr20 62223365 62223532 1 -chr20 62225698 62225929 1 -chr20 62230688 62231232 1 -chr20 62237221 62237305 1 -chr20 62254588 62254840 1 -chr20 62271681 62271752 1 -chr20 62281682 62281919 1 -chr20 62303374 62303412 1 -chr20 62306982 62307140 1 -chr20 62310917 62311157 1 -chr20 62311384 62311470 1 -chr20 62312361 62312734 1 -chr20 62345202 62345239 1 -chr20 62349058 62349154 1 -chr20 62368270 62368488 1 -chr20 62396075 62396274 1 -chr20 62411453 62411615 1 -chr20 62413653 62413860 1 -chr20 62416984 62417031 1 -chr20 62417695 62417859 1 -chr20 62426772 62426967 1 -chr20 62427120 62427339 1 -chr20 62427357 62427521 1 -chr20 62430439 62430617 1 -chr20 62430975 62431185 1 -chr20 62433598 62433640 1 -chr20 62435468 62435623 1 -chr20 62438175 62438231 1 -chr20 62442411 62442597 1 -chr20 62442597 62442611 2 -chr20 62442611 62442823 1 -chr20 62444762 62444933 1 -chr20 62446262 62446597 1 -chr20 62448985 62449330 1 -chr20 62449521 62449908 1 -chr20 62450506 62450572 1 -chr20 62450694 62451083 1 -chr20 62453290 62453457 1 -chr20 62455279 62455336 1 -chr20 62456477 62456713 1 -chr20 62458089 62458432 1 -chr20 62459055 62459446 1 -chr20 62461053 62461548 1 -chr20 62462364 62463140 1 -chr20 62463819 62464008 1 -chr20 62465819 62466052 1 -chr20 62466242 62466303 1 -chr20 62467090 62467156 1 -chr20 62468146 62468207 1 -chr20 62470256 62470309 1 -chr20 62472029 62472223 1 -chr20 62472395 62472448 1 -chr20 62474012 62474208 1 -chr20 62478715 62478925 1 -chr20 62480981 62481175 1 -chr20 62481462 62481642 1 -chr20 62483083 62483285 1 -chr20 62492672 62492712 1 -chr20 62497950 62498362 1 -chr20 62506788 62506852 1 -chr20 62509424 62509590 1 -chr20 62510665 62510720 1 -chr20 62513862 62514035 1 -chr20 62514040 62514085 1 -chr20 62514319 62514357 1 -chr20 62514924 62514988 1 -chr20 62515073 62515458 1 -chr20 62516231 62516403 1 -chr20 62518299 62518629 1 -chr20 62518842 62519027 1 -chr20 62519182 62519420 1 -chr20 62519483 62519655 1 -chr20 62521658 62521889 1 -chr20 62523142 62523178 1 -chr20 62525491 62525766 1 -chr20 62525861 62526109 1 -chr20 62541031 62541065 1 -chr20 62542629 62542785 1 -chr20 62543589 62543639 1 -chr20 62543832 62544036 1 -chr20 62546420 62546587 1 -chr20 62547024 62547221 1 -chr20 62547326 62547457 1 -chr20 62547922 62548239 1 -chr20 62548920 62549089 1 -chr20 62549770 62549815 1 -chr20 62553458 62553521 1 -chr20 62554417 62554460 1 -chr20 62556780 62556833 1 -chr20 62561778 62561950 1 -chr20 62562376 62562530 1 -chr20 62567149 62567183 1 -chr20 62570610 62571012 1 -chr20 62571842 62571885 1 -chr20 62572860 62573068 1 -chr20 62577402 62577588 1 -chr20 62578443 62578490 1 -chr20 62578895 62578940 1 -chr20 62581399 62581433 1 -chr20 62585013 62585098 1 -chr20 62586864 62586983 1 -chr20 62588056 62588215 1 -chr20 62592362 62592533 1 -chr20 62595702 62595757 1 -chr20 62597716 62597849 1 -chr20 62598753 62598805 1 -chr20 62602573 62602749 1 -chr20 62604915 62604960 1 -chr20 62606093 62606135 1 -chr20 62606713 62606767 1 -chr20 62609707 62609923 1 -chr20 62611308 62611703 1 -chr20 62612113 62612335 1 -chr20 62625574 62625624 1 -chr20 62625912 62626106 1 -chr20 62628953 62629160 1 -chr20 62634742 62634797 1 -chr20 62636145 62636184 1 -chr20 62638011 62638220 1 -chr20 62653976 62654021 1 -chr20 62657793 62657958 1 -chr20 62674416 62674654 1 -chr20 62681678 62681723 1 -chr20 62683151 62683350 1 -chr20 62689488 62689635 1 -chr20 62699010 62699079 1 -chr20 62699422 62699483 1 -chr20 62702784 62702831 1 -chr20 62703410 62703468 1 -chr20 62704445 62704676 1 -chr20 62706885 62707269 1 -chr20 62707510 62707547 1 -chr20 62711189 62711394 1 -chr20 62715137 62715337 1 -chr20 62716872 62717050 1 -chr20 62717768 62717948 1 -chr20 62717961 62718236 1 -chr20 62719438 62719575 1 -chr20 62719747 62719976 1 -chr20 62721231 62721276 1 -chr20 62730634 62730676 1 -chr20 62737546 62737730 1 -chr20 62738800 62739004 1 -chr20 62739137 62739187 1 -chr20 62739306 62739513 1 -chr20 62739567 62739773 1 -chr20 62741084 62741259 1 -chr20 62741352 62741553 1 -chr20 62744300 62744340 1 -chr20 62744842 62744909 1 -chr20 62746314 62746371 1 -chr20 62746860 62746933 1 -chr20 62747364 62747408 1 -chr20 62750863 62750923 1 -chr20 62751909 62752138 1 -chr20 62752685 62752885 1 -chr20 62755043 62755096 1 -chr20 62759961 62760128 1 -chr20 62762524 62762831 1 -chr20 62763466 62763521 1 -chr20 62763964 62764178 1 -chr20 62773215 62773341 1 -chr20 62776989 62777068 1 -chr20 62782410 62782604 1 -chr20 62784509 62784691 1 -chr20 62786396 62786471 1 -chr20 62786726 62786902 1 -chr20 62787682 62787920 1 -chr20 62805395 62805422 1 -chr20 62809268 62809642 1 -chr20 62811526 62811715 1 -chr20 62814172 62814423 1 -chr20 62817743 62818004 1 -chr20 62818632 62818843 1 -chr20 62820006 62820198 1 -chr20 62829037 62829076 1 -chr20 62834707 62834751 1 -chr20 62838284 62838502 1 -chr20 62839868 62840099 1 -chr20 62862101 62862155 1 -chr20 62862343 62862385 1 -chr20 62869052 62869085 1 -chr20 62900300 62900425 1 -chr20 62912835 62912915 1 -chr20 62937397 62937472 1 -chr20 62937648 62938181 1 -chr20 62945833 62946130 1 -chr20 62953176 62953588 1 -chr20 62955643 62955888 1 -chr20 62958578 62958993 1 -chr20 62959534 62959597 1 -chr20 62960472 62960514 1 -chr20 62961449 62961506 1 -chr20 62970429 62970486 1 -chr20 62971029 62971267 1 -chr20 62971633 62971802 1 -chr20 62973277 62973476 1 -chr20 62974374 62974554 1 -chr20 62975195 62975347 1 -chr20 62975396 62975626 1 -chr20 62976284 62976356 1 -chr20 62976992 62977055 1 -chr20 62986285 62986349 1 -chr20 62986439 62986481 1 -chr20 62987708 62987759 1 -chr20 62988562 62988619 1 -chr20 62999100 62999150 1 -chr20 63000737 63000921 1 -chr20 63004379 63004569 1 -chr20 63004726 63005089 1 -chr20 63005147 63005392 1 -chr20 63008266 63008487 1 -chr20 63012551 63012761 1 -chr20 63014668 63014706 1 -chr20 63030198 63030281 1 -chr20 63031674 63031720 1 -chr20 63032169 63032232 1 -chr20 63040612 63040653 1 -chr20 63041211 63041407 1 -chr20 63041825 63041975 1 -chr20 63048065 63048121 1 -chr20 63052052 63052117 1 -chr20 63052615 63052686 1 -chr20 63059674 63060024 1 -chr20 63061257 63061306 1 -chr20 63067151 63067377 1 -chr20 63067620 63067983 1 -chr20 63067983 63067992 2 -chr20 63067992 63068043 1 -chr20 63069461 63069486 1 -chr20 63070962 63071027 1 -chr20 63073090 63073512 1 -chr20 63081754 63081979 1 -chr20 63084785 63084848 1 -chr20 63085179 63085233 1 -chr20 63089601 63089640 1 -chr20 63089710 63089770 1 -chr20 63092588 63092634 1 -chr20 63094748 63094788 1 -chr20 63096411 63096492 1 -chr20 63099704 63099920 1 -chr20 63101736 63101767 1 -chr20 63107574 63107817 1 -chr20 63115639 63115806 1 -chr20 63117604 63117660 1 -chr20 63118674 63118786 1 -chr20 63120268 63120342 1 -chr20 63127081 63127126 1 -chr20 63136848 63137094 1 -chr20 63137930 63137969 1 -chr20 63143049 63143102 1 -chr20 63148285 63148436 1 -chr20 63150006 63150214 1 -chr20 63150314 63150549 1 -chr20 63151051 63151210 1 -chr20 63151937 63152018 1 -chr20 63156521 63156833 1 -chr20 63158605 63158933 1 -chr20 63160100 63160314 1 -chr20 63160399 63160553 1 -chr20 63161002 63161254 1 -chr20 63161789 63161989 1 -chr20 63169815 63170271 1 -chr20 63173506 63173704 1 -chr20 63175833 63175974 1 -chr20 63181150 63181365 1 -chr20 63184317 63184467 1 -chr20 63189918 63190476 1 -chr20 63199844 63199884 1 -chr20 63200169 63200303 1 -chr20 63206032 63206097 1 -chr20 63227158 63227333 1 -chr20 63234515 63234955 1 -chr20 63237909 63238271 1 -chr20 63238693 63238857 1 -chr20 63238857 63238867 2 -chr20 63238867 63239044 1 -chr20 63242192 63242250 1 -chr20 63242902 63242949 1 -chr20 63245364 63245435 1 -chr20 63251542 63251581 1 -chr20 63251979 63252211 1 -chr20 63255131 63255173 1 -chr20 63256855 63257012 1 -chr20 63257043 63257377 1 -chr20 63257473 63257502 1 -chr20 63257838 63257872 1 -chr20 63258834 63258890 1 -chr20 63262908 63262964 1 -chr20 63264462 63264673 1 -chr20 63265585 63266325 1 -chr20 63267959 63268170 1 -chr20 63276973 63277050 1 -chr20 63294479 63294663 1 -chr20 63294706 63294937 1 -chr20 63297094 63297271 1 -chr20 63298966 63299162 1 -chr20 63299260 63299412 1 -chr20 63302785 63302972 1 -chr20 63307140 63307340 1 -chr20 63307584 63307757 1 -chr20 63308578 63308792 1 -chr20 63312122 63312513 1 -chr20 63313385 63313430 1 -chr20 63314976 63315033 1 -chr20 63315378 63315552 1 -chr20 63320693 63320744 1 -chr20 63323719 63323937 1 -chr20 63328177 63328568 1 -chr20 63328839 63328899 1 -chr20 63330128 63330528 1 -chr20 63330867 63331076 1 -chr20 63331572 63331759 1 -chr20 63332242 63332672 1 -chr20 63332672 63332680 2 -chr20 63332680 63333145 1 -chr20 63334095 63334271 1 -chr20 63336206 63336445 1 -chr20 63337243 63337403 1 -chr20 63338501 63338873 1 -chr20 63341547 63341591 1 -chr20 63349433 63349636 1 -chr20 63350085 63350132 1 -chr20 63357500 63357737 1 -chr20 63359190 63359372 1 -chr20 63359372 63359386 2 -chr20 63359386 63359549 1 -chr20 63359573 63359623 1 -chr20 63362964 63363132 1 -chr20 63363423 63363820 1 -chr20 63368490 63369023 1 -chr20 63369314 63369691 1 -chr20 63372363 63372451 1 -chr20 63375083 63375150 1 -chr20 63375220 63375266 1 -chr20 63375333 63375528 1 -chr20 63375808 63376042 1 -chr20 63376433 63376643 1 -chr20 63376643 63376652 2 -chr20 63376652 63376833 1 -chr20 63377352 63377795 1 -chr20 63377921 63378167 1 -chr20 63379013 63379391 1 -chr20 63380327 63380381 1 -chr20 63382675 63382868 1 -chr20 63383935 63384146 1 -chr20 63384466 63384842 1 -chr20 63392640 63392876 1 -chr20 63393736 63393782 1 -chr20 63394714 63394765 1 -chr20 63402949 63403005 1 -chr20 63411037 63411199 1 -chr20 63411927 63411988 1 -chr20 63414838 63414883 1 -chr20 63415075 63415137 1 -chr20 63423673 63423719 1 -chr20 63425803 63425856 1 -chr20 63425901 63425966 1 -chr20 63426099 63426134 1 -chr20 63427029 63427105 1 -chr20 63429594 63429765 1 -chr20 63429935 63430365 1 -chr20 63430627 63430812 1 -chr20 63432034 63432176 1 -chr20 63435734 63435909 1 -chr20 63438062 63438103 1 -chr20 63440165 63440374 1 -chr20 63442110 63442154 1 -chr20 63442658 63442687 1 -chr20 63442696 63442757 1 -chr20 63445567 63445634 1 -chr20 63446621 63446664 1 -chr20 63448900 63449049 1 -chr20 63449503 63449548 1 -chr20 63453210 63453291 1 -chr20 63456659 63456856 1 -chr20 63459016 63459066 1 -chr20 63459082 63459127 1 -chr20 63459986 63460031 1 -chr20 63461548 63461604 1 -chr20 63461890 63461934 1 -chr20 63462839 63462894 1 -chr20 63464511 63464584 1 -chr20 63472273 63472302 1 -chr20 63472627 63472681 1 -chr20 63479302 63479350 1 -chr20 63481405 63481607 1 -chr20 63484327 63484501 1 -chr20 63486185 63486393 1 -chr20 63500962 63501157 1 -chr20 63501805 63502028 1 -chr20 63506536 63506584 1 -chr20 63507482 63507592 1 -chr20 63510020 63510249 1 -chr20 63513314 63513388 1 -chr20 63519669 63520062 1 -chr20 63528861 63529018 1 -chr20 63529018 63529038 2 -chr20 63529038 63529213 1 -chr20 63531252 63531301 1 -chr20 63532154 63532216 1 -chr20 63532814 63533003 1 -chr20 63534686 63535252 1 -chr20 63537046 63537379 1 -chr20 63539527 63539691 1 -chr20 63545654 63545852 1 -chr20 63546460 63546688 1 -chr20 63546862 63547095 1 -chr20 63548812 63548914 1 -chr20 63553211 63553269 1 -chr20 63558218 63558261 1 -chr20 63561610 63562026 1 -chr20 63563462 63563673 1 -chr20 63563800 63564031 1 -chr20 63564842 63565053 1 -chr20 63566618 63566667 1 -chr20 63570948 63571169 1 -chr20 63571169 63571186 2 -chr20 63571186 63571197 1 -chr20 63579816 63580165 1 -chr20 63583681 63583722 1 -chr20 63604990 63605026 1 -chr20 63605172 63605210 1 -chr20 63640297 63640518 1 -chr20 63646577 63646614 1 -chr20 63661360 63661909 1 -chr20 63676177 63676205 1 -chr20 63721209 63721240 1 -chr20 63748334 63748421 1 -chr20 63751847 63752012 1 -chr20 63767441 63767650 1 -chr20 63783032 63783072 1 -chr20 63785145 63785174 1 -chr20 63789973 63790179 1 -chr20 63790444 63790611 1 -chr20 63791683 63791820 1 -chr20 63793140 63793313 1 -chr20 63794416 63794456 1 -chr20 63796696 63796735 1 -chr20 63797592 63797826 1 -chr20 63800206 63800413 1 -chr20 63804161 63804353 1 -chr20 63808344 63808595 1 -chr20 63819369 63819606 1 -chr20 63821399 63821431 1 -chr20 63821850 63822277 1 -chr20 63822567 63822598 1 -chr20 63824443 63824904 1 -chr20 63827244 63827307 1 -chr20 63830283 63830466 1 -chr20 63832286 63832469 1 -chr20 63852730 63852777 1 -chr20 63853848 63854013 1 -chr20 63880747 63880796 1 -chr20 63906682 63906728 1 -chr20 63908970 63909012 1 -chr20 63936606 63936675 1 -chr20 63946809 63946890 1 -chr20 63948595 63948677 1 -chr20 64003785 64003823 1 -chr20 64037896 64038311 1 -chr20 64084296 64084684 1 -chr20 64085362 64085568 1 -chr20 64085772 64085924 1 -chr20 64086864 64087244 1 -chr20 64088642 64088904 1 -chr20 64091504 64091590 1 -chr20 64098093 64098142 1 -chr20 64099314 64099547 1 -chr20 64102166 64102224 1 -chr20 64107836 64108138 1 -chr20 64108909 64108951 1 -chr20 64111829 64111907 1 -chr20 64120653 64120815 1 -chr20 64123860 64123949 1 -chr20 64124228 64124512 1 -chr20 64127452 64127694 1 -chr20 64137668 64137721 1 -chr20 64138036 64138227 1 -chr20 64150674 64151010 1 -chr20 64151398 64151572 1 -chr20 64151680 64152088 1 -chr20 64152364 64152427 1 -chr20 64154756 64155139 1 -chr20 64155449 64155659 1 -chr20 64161605 64161652 1 -chr20 64164807 64164859 1 -chr20 64165728 64165901 1 -chr20 64166591 64166633 1 -chr20 64172314 64172724 1 -chr20 64179241 64179349 1 -chr20 64184104 64184198 1 -chr20 64186246 64186287 1 -chr20 64186389 64186454 1 -chr20 64186775 64186997 1 -chr20 64187971 64188049 1 -chr20 64189403 64189577 1 -chr20 64189772 64189842 1 -chr20 64191136 64191211 1 -chr20 64196401 64196452 1 -chr20 64202427 64202476 1 -chr20 64202479 64202522 1 -chr20 64207856 64207898 1 -chr20 64216638 64216683 1 -chr20 64217391 64217589 1 -chr20 64219452 64219682 1 -chr20 64220274 64220373 1 -chr20 64222736 64222780 1 -chr20 64223562 64223768 1 -chr20 64223936 64223981 1 -chr20 64225274 64225473 1 -chr20 64228409 64228573 1 -chr20 64231462 64231676 1 -chr20 64237238 64237419 1 -chr20 64239420 64239602 1 -chr20 64240556 64240962 1 -chr20 64240989 64241218 1 -chr20 64243359 64243567 1 -chr20 64245146 64245307 1 -chr20 64246468 64246656 1 -chr20 64246656 64246665 2 -chr20 64246665 64246865 1 -chr20 64247873 64248100 1 -chr20 64252682 64252995 1 -chr20 64252995 64253006 2 -chr20 64253006 64253178 1 -chr20 64267135 64267196 1 -chr20 64289536 64289706 1 -chr20 64290818 64290880 1 -chr20 64291719 64291984 1 -chr20 64301024 64301202 1 -chr20 64302696 64302738 1 -chr20 64309118 64309183 1 -chr20 64310426 64310658 1 -chr20 64315281 64315490 1 -chr20 64316575 64317013 1 -chr20 64320500 64320685 1 -chr20 64322866 64323066 1 -chr20 64326308 64326685 1 -chr20 64326748 64326904 1 -chr20 64334031 64334056 1 diff --git a/tests/data/delete_me/fastq/test_R1.fastq.gz b/tests/data/delete_me/fastq/test_R1.fastq.gz deleted file mode 100644 index eae90297..00000000 Binary files a/tests/data/delete_me/fastq/test_R1.fastq.gz and /dev/null differ diff --git a/tests/data/delete_me/fastq/test_R2.fastq.gz b/tests/data/delete_me/fastq/test_R2.fastq.gz deleted file mode 100644 index 46ef7a63..00000000 Binary files a/tests/data/delete_me/fastq/test_R2.fastq.gz and /dev/null differ diff --git a/tests/data/delete_me/fastq/test_single_end.fastq.gz b/tests/data/delete_me/fastq/test_single_end.fastq.gz deleted file mode 100644 index 257a7ca5..00000000 Binary files a/tests/data/delete_me/fastq/test_single_end.fastq.gz and /dev/null differ diff --git a/tests/data/delete_me/gfa/B-3106.gfa b/tests/data/delete_me/gfa/B-3106.gfa deleted file mode 100644 index e2467654..00000000 --- a/tests/data/delete_me/gfa/B-3106.gfa +++ /dev/null @@ -1,1438 +0,0 @@ -H VN:Z:1.0 -S 1 AT -S 2 TCTGGAA -S 3 G -S 4 GTTCTCAGGTCTTTATTTGCTCT -S 5 C -S 6 TCA -S 7 A -S 8 ATTCCAGGAATTGACTTATTTAATTAATCCATCAACCTCTCATAGCAAATATTTGAGAAAACAAATTTATATTCAGATTCTTATTTTCAGTAGGGAAGTAAGAAGTTGCAGCTCAGTGCAC -S 9 G -S 10 TAAAGTTGAGACAGAGATGGAGACATCCAGCCCCACC -S 11 T -S 12 CTCTGGAACA -S 13 A -S 14 GAAAGATGACTGGGGAGGAAACACA -S 15 G -S 16 G -S 17 TCAGCATGGGAACAGGGGTCAC -S 18 A -S 19 GTGGACAC -S 20 A -S 21 A -S 22 G -S 23 G -S 24 G -S 25 TG -S 26 G -S 27 GCTGTCTCTCCACCTCCTCACATTATGCTAACAGGGAC -S 28 G -S 29 CAGACACATTCAGGTGCCTTTGCAGAAAGAGATGCCAGAGGCTCTTGAAGTCACAAAGGGGAGG -S 30 C -S 31 GTGAAGAAATCCTGCATCTC -S 32 A -S 33 GTCCCTCACAAGACAGCTGTCTCAGGCTACAGAAAACAACAGTCATGAACAAATTCTGGTTAGTCATGGTAAG -S 34 C -S 35 GATGACACTCT -S 36 A -S 37 AACAGCCCAC -S 38 C -S 39 ACACACGCGAAACATCCCAATCAAAGAAT -S 40 C -S 41 C -S 42 CCATT -S 43 A -S 44 CCCAGGCCTTTCCCC -S 45 T -S 46 CTG -S 47 C -S 48 A -S 49 A -S 50 AGA -S 51 G -S 52 A -S 53 A -S 54 CACTCTAGACCCCAAGAATCTCACCTTTTCAAGCTGTGAGAGACACATCAGAGCCCTGGGCACTGTCGCTG -S 55 C -S 56 CTGGAGTAGAACAAAAACAGGACCTGGTCAGAGCCCGCAGGAGACGTGGGACAGGAGGAATTATGGGGTGGGTGAGCTCCTCCACACTCCC -S 57 A -S 58 CCCCCA -S 59 C -S 60 CACTTACACGCAGCCTGAGAGTAGCTCCCTCCTTTTCCACCTGTGGGAAGAAAATG -S 61 T -S 62 CCTGTGAGGG -S 63 C -S 64 ACTGGGAGGAAGCAGG -S 65 G -S 66 CCATGAGATCTTAGAGGAACCTCCT -S 67 A -S 68 GTCTTGGA -S 69 C -S 70 CCAAAAGGAATTTCCAGAAGTATGACTACAGACCCA -S 71 G -S 72 GGCAGGATCAGGAAACACGAGGAAAGCAAGTGTGGGTCCTGGACCAACTGCCCTCCTAAGGTCTGTCCTTAGCAGGGACCTTCCCCTGACTCATGAATGCTG -S 73 G -S 74 AATCAGGACCCCAACACCACAACCA -S 75 T -S 76 CAAGG -S 77 T -S 78 GATACATC -S 79 C -S 80 A -S 81 T -S 82 C -S 83 CTTCATTGTCACATGTGCTGCACAAAAGAGTAAGTGCTGGCACACAGGGTCCCAG -S 84 G -S 85 CTG -S 86 C -S 87 G -S 88 TTAGCCCCTGTGTG -S 89 C -S 90 ATGCTGC -S 91 T -S 92 TCCCAGTAATGAGGCAGGGAACACTTCTACCTGGGGCTTGAAACCCCCAGTGGGACAAGAAAACCCAGACCCCACCCCTCACCCCTTCCCTACCTGA -S 93 A -S 94 CTCTTCCTCCTACACATCACAG -S 95 C -S 96 AGCGACCACAGCTCCGATGACCACAACTGCTAGGACAGCCAGGCCAGCAACAATGCCCACGATGGGGA -S 97 C -S 98 GGTGGACTGGGAAGA -S 99 C -S 100 GGCTCTGGGAAAGGA -S 101 G -S 102 GGGAAGA -S 103 T -S 104 GAGGGGCCCTGACCCTGCT -S 105 GAAGGGCTCC -S 106 TGCTTTCCCTGAGAA -S 107 G -S 108 AGATATGACCCCTCATCCCCCTCCTTACCCCATCTCAGGGTGAGGGGCTTCGGCAGCCCCTCATGCTGTACATGGCATGTGTATCTCTGCTCTTCTCCAGAAGGCACCACCACAGCTGCCCACTTCTGGAAGGTTCTATCTCCTGCTGGTCTGGTCTCCACAAGCTC -S 109 A -S 110 GTGTCCTGAGTTTGGTCCTCGCCATCCCGCTGCCAGGTCAGTGTGATCTCCGCAGGGTAGAA -S 111 A -S 112 CCCAGGGCCCAGCACCTCAGGGTG -S 113 G -S 114 CCTCATGGTCAGAGATGGGGTGGTGGGTCAC -S 115 G -S 116 TGTGTCTTTGGGGGGTCTGATGGGAAGAGTCAGAAAATTCAGGCGCTTTGCATCT -S 117 T -S 118 TCAT -S 119 G -S 120 G -S 121 G -S 122 ACACCCTAGGACCACCCATGTGACCAGCCTGAGAATGGACAGGACACCTGGGGTGGGGAAGGGGCACAGAACCCAGACACCAGC -S 123 CT -S 124 GGA -S 125 C -S 126 GCAGGCACCTGGGATAAT -S 127 CTC -S 128 CTATTCATTGGAAAGTTCGAGTCTCTGAGCGGGGAACAG -S 129 G -S 130 GACTTCTGCTCCTGATCTGAGTGGAGGTAAAGTGACTCAGAAGTGCTGGAATCAGAGCCCCAAACACACTGAGTGTGAGGCAGAGAACAAGGCCTGAGAGGAAAAGTCA -S 131 C -S 132 GGTTCCCAAGGCTGCTGCAGGGGTCAAAG -S 133 G -S 134 GGACCCCTGATCA -S 135 G -S 136 TAT -S 137 T -S 138 CTAGGGACTGTCTTCCCCTCCATTTCCTCAGAGACGTCAT -S 139 T -S 140 CCTTAATTGT -S 141 C -S 142 TAGAGAGAAGAGGGGGCCCTCAGAGGAAACTCAGGAAAACTCATGCCATTCTCCATTCAA -S 143 C -S 144 GGAGGGCGACATTCTAGCGCTGATCCCATTTTCCTCCTCTTCTCGTGGGAGGCCATCCCCGGCGACCTATAGGAGATGGGGAAGGCTCCCCACTGCCCCTGGTACC -S 145 A -S 146 GCGCGCT -S 147 C -S 148 CAGC -S 149 T -S 150 T -S 151 G -S 152 TCCTTCCCGTTCTCCAGGT -S 153 A -S 154 TCTGCGGAGC -S 155 C -S 156 ACTCCACGCAC -S 157 TC -S 158 GCCCTCCAGGTAGGCTCT -S 159 C -S 160 C -S 161 G -S 162 CTGCTCCGCC -S 163 T -S 164 CACGGGCCGCCTCCCACTTGCGCTGGGTGATCTGAGCCGC -S 165 C -S 166 GTGTCCGC -S 167 G -S 168 GCGGTCCAGGAGC -S 169 G -S 170 CAG -S 171 G -S 172 TCCTCGTTCAGGGCGATGTAATCCTTGCCGTCGTAGGCG -S 173 T -S 174 A -S 175 CTGGT -S 176 C -S 177 AT -S 178 G -S 179 CCCGCGGAGGAGGCGCCCGTC -S 180 C -S 181 GGCCCCACGTCGCAGCC -S 182 G -S 183 T -S 184 ACAT -S 185 G -S 186 CTCTGGA -S 187 G -S 188 G -S 189 G -S 190 TGTGAGACCCTGGCCC -S 191 C -S 192 G -S 193 G -S 194 CCCCGCGGTCAGCCC -S 195 A -S 196 GT -S 197 C -S 198 GAGCCCCGCCCCGCCCCGACCAACCCGCGGGGATTTTGGCCTCAACTGAAAATGAAACCGGGTAAACGCGCCTGGGGCTCTCGCCGGTCGAGGGT -S 199 C -S 200 TGGGCGGGTCCCGCGGCCTC -S 201 A -S 202 G -S 203 A -S 204 GGCGGATCTCGGACCCGGAGACTCGGGGCGACCCGGGCCGT -S 205 A -S 206 CGTGGGGGATGGGGAGTCGTGACCTGCGCCCC -S 207 G -S 208 GGCCGGGGTCACTCACCGGCCTCGCTCTGGTTGTAGTAGC -S 209 C -S 210 G -S 211 C -S 212 GC -S 213 AG -S 214 G -S 215 T -S 216 T -S 217 C -S 218 CGCAGG -S 219 C -S 220 T -S 221 CTCTCGGT -S 222 C -S 223 AGTCTGTG -S 224 CC -S 225 T -S 226 G -S 227 GG -S 228 C -S 229 CTTG -S 230 T -S 231 AGATCTGTGT -S 232 G -S 233 T -S 234 T -S 235 CCGGTCCCAATACTCCGGCCCCTC -S 236 C -S 237 TGCTCTATCCA -S 238 C -S 239 GGCGCCCG -S 240 C -S 241 GGC -S 242 T -S 243 CC -S 244 T -S 245 C -S 246 T -S 247 CTCGGACTCG -S 248 C -S 249 GGCGTCGCTGTCGAACCTCACGAAC -S 250 T -S 251 G -S 252 G -S 253 GTG -S 254 T -S 255 CGTCCACGTAGCCCAC -S 256 T -S 257 G -S 258 A -S 259 GATGAAGCGGGGCTCCCCGCGGCCGGGCCGGGACA -S 260 C -S 261 GG -S 262 A -S 263 GGTGT -S 264 A -S 265 GAAATACCTCATGGAGTGGGAGCCT -S 266 G -S 267 GGGG -S 268 T -S 269 G -S 270 AGGAGGGGCTGAGACCCGCC -S 271 C -S 272 GACCCTCCTCCCGGCGCGGCTCC -S 273 T -S 274 C -S 275 A -S 276 GGTCCTGCGCCCCCGCCTGCGGTCCCCTC -S 277 G -S 278 CTCCTCCC -S 279 GG -S 280 CAGAGGCCATTTCCCT -S 281 C -S 282 CCGA -S 283 CCCGCACTCACC -S 284 G -S 285 GCCCAGGTCTCGGTCAGGGCCA -S 286 GG -S 287 GC -S 288 C -S 289 G -S 290 CC -S 291 G -S 292 AGAGCAGCAGGAGGA -S 293 C -S 294 GGTTCGGGG -S 295 C -S 296 GCC -S 297 A -S 298 TGACC -S 299 A -S 300 GCATCTCGG -S 301 C -S 302 GTCTGAGGA -S 303 GA -S 304 C -S 305 T -S 306 C -S 307 TGAGTCCGGGTGGGTGCGTGGGGACTTTAGAAC -S 308 T -S 309 T -S 310 A -S 311 T -S 312 C -S 313 G -S 314 C -S 315 A -S 316 C -S 317 G -S 318 G -S 319 A -S 320 G -S 321 G -S 322 C -S 323 C -S 324 T -S 325 C -S 326 G -S 327 C -S 328 G -S 329 GT -S 330 GTC -S 331 A -S 332 G -S 333 C -S 334 T -S 335 C -S 336 C -S 337 TG -S 338 T -S 339 T -S 340 A -S 341 C -S 342 T -S 343 C -S 344 C -S 345 C -S 346 A -S 347 G -S 348 A -S 349 G -S 350 GG -S 351 T -S 352 G -S 353 A -S 354 G -S 355 A -S 356 A -S 357 G -S 358 C -S 359 G -S 360 AG -S 361 A -S 362 T -S 363 C -S 364 A -S 365 C -S 366 T -S 367 A -S 368 G -S 369 A -S 370 GC -S 371 G -S 372 G -S 373 T -S 374 A -S 375 G -S 376 C -S 377 C -S 378 T -S 379 T -S 380 A -S 381 G -S 382 T -S 383 C -S 384 G -S 385 T -S 386 CA -S 387 C -S 388 CT -S 389 C -S 390 C -S 391 G -S 392 G -S 393 C -S 394 T -S 395 T -S 396 A -S 397 G -S 398 G -S 399 G -S 400 G -S 401 A -S 402 A -S 403 C -S 404 T -S 405 T -S 406 T -S 407 T -S 408 A -S 409 C -S 410 C -S 411 C -S 412 A -S 413 G -S 414 A -S 415 T -S 416 A -S 417 G -S 418 G -S 419 A -S 420 C -S 421 G -S 422 T -S 423 T -S 424 TG -S 425 GGACCCCGG -S 426 A -S 427 T -S 428 T -S 429 A -S 430 T -S 431 G -S 432 T -S 433 G -S 434 C -S 435 G -S 436 A -S 437 A -S 438 CGACACTGATTGGCTTCTCTAGACACCCGACACCCAATGGGAGTGGGAAATGGGGACGCGTCACGAGTATCCTGGAAGAAGGACCCGACATAGGTTGGGAGAAGAAGTGAAACTCGTGGGAGTGGGGAATCCCCAATGCTGCGCCTCCCCAATGCAGACAAGGCTCTCGGAGCCTGAGACCCTGAGAGCCCCGCCCGGGGCCTGGGACTTCGTCCTGATCCCTCTTCTCCTACACCAGCCTCTTTGTCACACTGTCTGCCTGAGTCCTGCACAAGGATCTGTCTGTGGAAACCAGGGAGAGACCCCCAGGCTGCGCCCACCCGCTTCCCCTTCACTTCTCCTCCTGGAATCCCTGTCCCTGAACTGGACTCCCTGCCTCTCACTCCTTACCTCTCCTCTTGGATCTTGTGTAGGGAAACTGATCACGGAGAACTTGATGCCAGAGAGTGAGCTCGCCCTGGGAATGGAGGTGTAGAGACAGGGGTTTTCTCTCTAAACCTGGCGAAGTTTTGTCTGAAGCCACCACACAGAGATTCTCATAGAGACCAGTTTCCTTTTTGTTTATTAATACAGTAGGTAGCACAATATTGGTAATCCCTGAATGATTAGAATTCCAATCTGCA -S 439 A -S 440 C -S 441 C -S 442 A -S 443 C -S 444 C -S 445 A -S 446 A -S 447 C -S 448 A -S 449 A -S 450 A -S 451 G -S 452 A -S 453 C -S 454 A -S 455 T -S 456 T -S 457 CTCTGAG -S 458 CCGG -S 459 CA -S 460 T -S 461 A -S 462 G -S 463 G -S 464 T -S 465 A -S 466 G -S 467 C -S 468 C -S 469 T -L 1 + 2 + 0M -L 2 + 3 + 0M -L 2 + 439 + 0M -L 3 + 4 + 0M -L 3 - 2 - 0M -L 4 + 5 + 0M -L 4 + 395 + 0M -L 4 - 3 - 0M -L 5 + 6 + 0M -L 5 - 4 - 0M -L 6 + 7 + 0M -L 6 + 440 + 0M -L 6 - 5 - 0M -L 7 + 8 + 0M -L 7 - 6 - 0M -L 8 + 9 + 0M -L 8 + 346 + 0M -L 8 - 7 - 0M -L 9 + 10 + 0M -L 9 - 8 - 0M -L 10 + 11 + 0M -L 10 + 441 + 0M -L 10 - 9 - 0M -L 11 + 12 + 0M -L 11 - 10 - 0M -L 12 + 13 + 0M -L 12 + 347 + 0M -L 12 - 11 - 0M -L 13 + 14 + 0M -L 13 - 12 - 0M -L 14 + 15 + 0M -L 14 + 348 + 0M -L 14 - 13 - 0M -L 15 + 16 + 0M -L 15 + 396 + 0M -L 15 - 14 - 0M -L 16 + 17 + 0M -L 16 - 15 - 0M -L 17 + 18 + 0M -L 17 + 349 + 0M -L 17 - 16 - 0M -L 18 + 19 + 0M -L 18 - 17 - 0M -L 19 + 20 + 0M -L 19 + 350 + 0M -L 19 - 18 - 0M -L 20 + 21 + 0M -L 20 + 459 + 0M -L 20 - 19 - 0M -L 21 + 22 + 0M -L 21 - 20 - 0M -L 22 + 23 + 0M -L 22 - 21 - 0M -L 23 + 24 + 0M -L 23 + 460 + 0M -L 23 - 22 - 0M -L 24 + 25 + 0M -L 24 - 23 - 0M -L 25 + 26 + 0M -L 25 + 426 + 0M -L 25 - 24 - 0M -L 26 + 27 + 0M -L 26 - 25 - 0M -L 27 + 28 + 0M -L 27 + 461 + 0M -L 27 - 26 - 0M -L 28 + 29 + 0M -L 28 - 27 - 0M -L 29 + 30 + 0M -L 29 + 442 + 0M -L 29 - 28 - 0M -L 30 + 31 + 0M -L 30 - 29 - 0M -L 31 + 32 + 0M -L 31 + 397 + 0M -L 31 - 30 - 0M -L 32 + 33 + 0M -L 32 - 31 - 0M -L 33 + 34 + 0M -L 33 + 308 + 0M -L 33 - 32 - 0M -L 34 + 35 + 0M -L 34 - 33 - 0M -L 35 + 36 + 0M -L 35 + 398 + 0M -L 35 - 34 - 0M -L 36 + 37 + 0M -L 36 - 35 - 0M -L 37 + 38 + 0M -L 37 + 399 + 0M -L 37 - 36 - 0M -L 38 + 39 + 0M -L 38 - 37 - 0M -L 39 + 40 + 0M -L 39 + 462 + 0M -L 39 - 38 - 0M -L 40 + 41 + 0M -L 40 + 309 + 0M -L 40 - 39 - 0M -L 41 + 42 + 0M -L 41 - 40 - 0M -L 42 + 43 + 0M -L 42 + 443 + 0M -L 42 - 41 - 0M -L 43 + 44 + 0M -L 43 - 42 - 0M -L 44 + 45 + 0M -L 44 + 310 + 0M -L 44 - 43 - 0M -L 45 + 46 + 0M -L 45 - 44 - 0M -L 46 + 47 + 0M -L 46 - 45 - 0M -L 47 + 47 + 0M -L 47 + 48 + 0M -L 47 + 49 + 0M -L 47 + 50 + 0M -L 47 + 51 + 0M -L 47 + 52 + 0M -L 47 + 53 + 0M -L 47 + 54 + 0M -L 47 + 351 + 0M -L 47 + 427 + 0M -L 47 + 444 + 0M -L 47 - 46 - 0M -L 47 - 47 - 0M -L 47 - 48 - 0M -L 47 - 49 - 0M -L 47 - 50 - 0M -L 47 - 51 - 0M -L 47 - 52 - 0M -L 47 - 53 - 0M -L 48 + 47 + 0M -L 48 - 47 - 0M -L 49 + 47 + 0M -L 49 - 47 - 0M -L 50 + 47 + 0M -L 50 - 47 - 0M -L 51 + 47 + 0M -L 51 - 47 - 0M -L 52 + 47 + 0M -L 52 - 47 - 0M -L 53 + 47 + 0M -L 53 - 47 - 0M -L 54 + 55 + 0M -L 54 + 400 + 0M -L 54 - 47 - 0M -L 55 + 56 + 0M -L 55 - 54 - 0M -L 56 + 57 + 0M -L 56 + 352 + 0M -L 56 - 55 - 0M -L 57 + 58 + 0M -L 57 - 56 - 0M -L 58 + 59 + 0M -L 58 + 311 + 0M -L 58 - 57 - 0M -L 59 + 60 + 0M -L 59 - 58 - 0M -L 60 + 61 + 0M -L 60 + 312 + 0M -L 60 - 59 - 0M -L 61 + 62 + 0M -L 61 - 60 - 0M -L 62 + 63 + 0M -L 62 + 313 + 0M -L 62 - 61 - 0M -L 63 + 64 + 0M -L 63 - 62 - 0M -L 64 + 65 + 0M -L 64 + 401 + 0M -L 64 - 63 - 0M -L 65 + 66 + 0M -L 65 - 64 - 0M -L 66 + 67 + 0M -L 66 + 314 + 0M -L 66 - 65 - 0M -L 67 + 68 + 0M -L 67 - 66 - 0M -L 68 + 69 + 0M -L 68 + 402 + 0M -L 68 - 67 - 0M -L 69 + 70 + 0M -L 69 - 68 - 0M -L 70 + 71 + 0M -L 70 + 315 + 0M -L 70 - 69 - 0M -L 71 + 72 + 0M -L 71 - 70 - 0M -L 72 + 73 + 0M -L 72 + 445 + 0M -L 72 - 71 - 0M -L 73 + 74 + 0M -L 73 - 72 - 0M -L 74 + 75 + 0M -L 74 + 316 + 0M -L 74 - 73 - 0M -L 75 + 76 + 0M -L 75 - 74 - 0M -L 76 + 77 + 0M -L 76 + 403 + 0M -L 76 - 75 - 0M -L 77 + 78 + 0M -L 77 - 76 - 0M -L 78 + 79 + 0M -L 78 + 404 + 0M -L 78 - 77 - 0M -L 79 + 80 + 0M -L 79 + 317 + 0M -L 79 - 78 - 0M -L 80 + 81 + 0M -L 80 - 79 - 0M -L 81 + 82 + 0M -L 81 + 463 + 0M -L 81 - 80 - 0M -L 82 + 83 + 0M -L 82 - 81 - 0M -L 83 + 84 + 0M -L 83 + 464 + 0M -L 83 - 82 - 0M -L 84 + 85 + 0M -L 84 - 83 - 0M -L 85 + 86 + 0M -L 85 + 428 + 0M -L 85 - 84 - 0M -L 86 + 87 + 0M -L 86 + 446 + 0M -L 86 - 85 - 0M -L 87 + 88 + 0M -L 87 - 86 - 0M -L 88 + 89 + 0M -L 88 + 318 + 0M -L 88 - 87 - 0M -L 89 + 90 + 0M -L 89 - 88 - 0M -L 90 + 91 + 0M -L 90 + 319 + 0M -L 90 - 89 - 0M -L 91 + 92 + 0M -L 91 - 90 - 0M -L 92 + 93 + 0M -L 92 + 320 + 0M -L 92 - 91 - 0M -L 93 + 94 + 0M -L 93 - 92 - 0M -L 94 + 95 + 0M -L 94 + 405 + 0M -L 94 - 93 - 0M -L 95 + 96 + 0M -L 95 - 94 - 0M -L 96 + 97 + 0M -L 96 + 406 + 0M -L 96 - 95 - 0M -L 97 + 98 + 0M -L 97 - 96 - 0M -L 98 + 99 + 0M -L 98 + 407 + 0M -L 98 - 97 - 0M -L 99 + 100 + 0M -L 99 - 98 - 0M -L 100 + 101 + 0M -L 100 + 353 + 0M -L 100 - 99 - 0M -L 101 + 102 + 0M -L 101 - 100 - 0M -L 102 + 103 + 0M -L 102 + 447 + 0M -L 102 - 101 - 0M -L 103 + 104 + 0M -L 103 - 102 - 0M -L 104 + 105 + 0M -L 104 - 103 - 0M -L 105 + 106 + 0M -L 105 + 408 + 0M -L 105 - 104 - 0M -L 106 + 107 + 0M -L 106 + 409 + 0M -L 106 - 105 - 0M -L 107 + 108 + 0M -L 107 - 106 - 0M -L 108 + 109 + 0M -L 108 + 354 + 0M -L 108 - 107 - 0M -L 109 + 110 + 0M -L 109 - 108 - 0M -L 110 + 111 + 0M -L 110 + 321 + 0M -L 110 - 109 - 0M -L 111 + 112 + 0M -L 111 - 110 - 0M -L 112 + 113 + 0M -L 112 + 355 + 0M -L 112 - 111 - 0M -L 113 + 114 + 0M -L 113 - 112 - 0M -L 114 + 115 + 0M -L 114 + 356 + 0M -L 114 - 113 - 0M -L 115 + 116 + 0M -L 115 - 114 - 0M -L 116 + 117 + 0M -L 116 + 322 + 0M -L 116 - 115 - 0M -L 117 + 118 + 0M -L 117 - 116 - 0M -L 118 + 119 + 0M -L 118 + 448 + 0M -L 118 - 117 - 0M -L 119 + 120 + 0M -L 119 - 118 - 0M -L 120 + 121 + 0M -L 120 + 323 + 0M -L 120 - 119 - 0M -L 121 + 122 + 0M -L 121 - 120 - 0M -L 122 + 123 + 0M -L 122 + 124 + 0M -L 122 - 121 - 0M -L 123 + 124 + 0M -L 123 - 122 - 0M -L 124 + 125 + 0M -L 124 + 324 + 0M -L 124 - 123 - 0M -L 125 + 126 + 0M -L 125 - 124 - 0M -L 126 + 127 + 0M -L 126 + 128 + 0M -L 126 - 125 - 0M -L 127 + 128 + 0M -L 127 - 126 - 0M -L 128 + 129 + 0M -L 128 + 429 + 0M -L 128 - 127 - 0M -L 129 + 130 + 0M -L 129 - 128 - 0M -L 130 + 131 + 0M -L 130 + 430 + 0M -L 130 - 129 - 0M -L 131 + 132 + 0M -L 131 - 130 - 0M -L 132 + 133 + 0M -L 132 + 449 + 0M -L 132 - 131 - 0M -L 133 + 134 + 0M -L 133 - 132 - 0M -L 134 + 135 + 0M -L 134 + 410 + 0M -L 134 - 133 - 0M -L 135 + 136 + 0M -L 135 - 134 - 0M -L 136 + 137 + 0M -L 136 + 411 + 0M -L 136 - 135 - 0M -L 137 + 138 + 0M -L 137 - 136 - 0M -L 138 + 139 + 0M -L 138 + 325 + 0M -L 138 - 137 - 0M -L 139 + 140 + 0M -L 139 - 138 - 0M -L 140 + 141 + 0M -L 140 - 139 - 0M -L 141 + 141 + 0M -L 141 + 142 + 0M -L 141 - 140 - 0M -L 142 + 143 + 0M -L 142 + 326 + 0M -L 142 - 141 - 0M -L 143 + 144 + 0M -L 143 - 142 - 0M -L 144 + 145 + 0M -L 144 + 327 + 0M -L 144 - 143 - 0M -L 145 + 146 + 0M -L 145 - 144 - 0M -L 146 + 147 + 0M -L 146 + 357 + 0M -L 146 - 145 - 0M -L 147 + 148 + 0M -L 147 - 146 - 0M -L 148 + 149 + 0M -L 148 + 328 + 0M -L 148 - 147 - 0M -L 149 + 150 + 0M -L 149 - 148 - 0M -L 150 + 151 + 0M -L 150 + 358 + 0M -L 150 - 149 - 0M -L 151 + 152 + 0M -L 151 - 150 - 0M -L 152 + 153 + 0M -L 152 + 431 + 0M -L 152 - 151 - 0M -L 153 + 154 + 0M -L 153 - 152 - 0M -L 154 + 155 + 0M -L 154 + 359 + 0M -L 154 - 153 - 0M -L 155 + 156 + 0M -L 155 - 154 - 0M -L 156 + 157 + 0M -L 156 + 329 + 0M -L 156 + 360 + 0M -L 156 - 155 - 0M -L 157 + 158 + 0M -L 157 - 156 - 0M -L 158 + 159 + 0M -L 158 + 330 + 0M -L 158 - 157 - 0M -L 159 + 160 + 0M -L 159 + 361 + 0M -L 159 - 158 - 0M -L 160 + 161 + 0M -L 160 + 412 + 0M -L 160 - 159 - 0M -L 161 + 162 + 0M -L 161 - 160 - 0M -L 162 + 163 + 0M -L 162 + 331 + 0M -L 162 - 161 - 0M -L 163 + 164 + 0M -L 163 - 162 - 0M -L 164 + 165 + 0M -L 164 + 332 + 0M -L 164 - 163 - 0M -L 165 + 166 + 0M -L 165 - 164 - 0M -L 166 + 167 + 0M -L 166 + 333 + 0M -L 166 - 165 - 0M -L 167 + 168 + 0M -L 167 - 166 - 0M -L 168 + 169 + 0M -L 168 + 362 + 0M -L 168 - 167 - 0M -L 169 + 170 + 0M -L 169 - 168 - 0M -L 170 + 171 + 0M -L 170 + 450 + 0M -L 170 - 169 - 0M -L 171 + 172 + 0M -L 171 - 170 - 0M -L 172 + 173 + 0M -L 172 + 413 + 0M -L 172 + 465 + 0M -L 172 - 171 - 0M -L 173 + 174 + 0M -L 173 + 363 + 0M -L 173 - 172 - 0M -L 174 + 175 + 0M -L 174 - 173 - 0M -L 175 + 176 + 0M -L 175 + 334 + 0M -L 175 - 174 - 0M -L 176 + 177 + 0M -L 176 - 175 - 0M -L 177 + 178 + 0M -L 177 + 364 + 0M -L 177 - 176 - 0M -L 178 + 179 + 0M -L 178 - 177 - 0M -L 179 + 180 + 0M -L 179 + 451 + 0M -L 179 - 178 - 0M -L 180 + 181 + 0M -L 180 - 179 - 0M -L 181 + 182 + 0M -L 181 + 452 + 0M -L 181 - 180 - 0M -L 182 + 183 + 0M -L 182 - 181 - 0M -L 183 + 184 + 0M -L 183 - 182 - 0M -L 184 + 185 + 0M -L 184 + 365 + 0M -L 184 - 183 - 0M -L 185 + 186 + 0M -L 185 - 184 - 0M -L 186 + 187 + 0M -L 186 + 366 + 0M -L 186 - 185 - 0M -L 187 + 188 + 0M -L 187 - 186 - 0M -L 188 + 189 + 0M -L 188 + 367 + 0M -L 188 - 187 - 0M -L 189 + 190 + 0M -L 189 - 188 - 0M -L 190 + 191 + 0M -L 190 + 414 + 0M -L 190 - 189 - 0M -L 191 + 192 + 0M -L 191 - 190 - 0M -L 192 + 193 + 0M -L 192 + 453 + 0M -L 192 - 191 - 0M -L 193 + 194 + 0M -L 193 - 192 - 0M -L 194 + 195 + 0M -L 194 + 335 + 0M -L 194 - 193 - 0M -L 195 + 196 + 0M -L 195 - 194 - 0M -L 196 + 197 + 0M -L 196 - 195 - 0M -L 197 + 197 + 0M -L 197 + 198 + 0M -L 197 - 196 - 0M -L 197 - 197 - 0M -L 198 + 199 + 0M -L 198 + 415 + 0M -L 198 - 197 - 0M -L 199 + 200 + 0M -L 199 - 198 - 0M -L 200 + 201 + 0M -L 200 + 202 + 0M -L 200 - 199 - 0M -L 201 + 202 + 0M -L 201 - 200 - 0M -L 202 + 202 + 0M -L 202 + 203 + 0M -L 202 + 204 + 0M -L 202 - 201 - 0M -L 202 - 202 - 0M -L 203 + 204 + 0M -L 203 - 202 - 0M -L 204 + 205 + 0M -L 204 + 336 + 0M -L 204 - 203 - 0M -L 205 + 206 + 0M -L 205 - 204 - 0M -L 206 + 207 + 0M -L 206 + 416 + 0M -L 206 - 205 - 0M -L 207 + 208 + 0M -L 207 - 206 - 0M -L 208 + 209 + 0M -L 208 + 368 + 0M -L 208 - 207 - 0M -L 209 + 210 + 0M -L 209 - 208 - 0M -L 210 + 211 + 0M -L 210 + 369 + 0M -L 210 - 209 - 0M -L 211 + 212 + 0M -L 211 - 210 - 0M -L 212 + 213 + 0M -L 212 + 370 + 0M -L 212 - 211 - 0M -L 213 + 214 + 0M -L 213 - 212 - 0M -L 214 + 215 + 0M -L 214 + 371 + 0M -L 214 - 213 - 0M -L 215 + 216 + 0M -L 215 - 214 - 0M -L 216 + 217 + 0M -L 216 + 372 + 0M -L 216 - 215 - 0M -L 217 + 218 + 0M -L 217 - 216 - 0M -L 218 + 219 + 0M -L 218 + 373 + 0M -L 218 - 217 - 0M -L 219 + 220 + 0M -L 219 - 218 - 0M -L 220 + 221 + 0M -L 220 - 219 - 0M -L 221 + 222 + 0M -L 221 + 374 + 0M -L 221 - 220 - 0M -L 222 + 223 + 0M -L 222 - 221 - 0M -L 223 + 224 + 0M -L 223 + 337 + 0M -L 223 - 222 - 0M -L 224 + 225 + 0M -L 224 - 223 - 0M -L 225 + 226 + 0M -L 225 + 338 + 0M -L 225 - 224 - 0M -L 226 + 227 + 0M -L 226 - 225 - 0M -L 227 + 228 + 0M -L 227 + 339 + 0M -L 227 - 226 - 0M -L 228 + 229 + 0M -L 228 - 227 - 0M -L 229 + 230 + 0M -L 229 + 340 + 0M -L 229 + 375 + 0M -L 229 - 228 - 0M -L 230 + 231 + 0M -L 230 - 229 - 0M -L 231 + 232 + 0M -L 231 + 376 + 0M -L 231 - 230 - 0M -L 232 + 233 + 0M -L 232 - 231 - 0M -L 233 + 234 + 0M -L 233 + 377 + 0M -L 233 - 232 - 0M -L 234 + 235 + 0M -L 234 - 233 - 0M -L 235 + 236 + 0M -L 235 + 432 + 0M -L 235 - 234 - 0M -L 236 + 237 + 0M -L 236 - 235 - 0M -L 237 + 238 + 0M -L 237 + 378 + 0M -L 237 - 236 - 0M -L 238 + 239 + 0M -L 238 - 237 - 0M -L 239 + 240 + 0M -L 239 + 417 + 0M -L 239 - 238 - 0M -L 240 + 241 + 0M -L 240 - 239 - 0M -L 241 + 242 + 0M -L 241 + 418 + 0M -L 241 - 240 - 0M -L 242 + 243 + 0M -L 242 - 241 - 0M -L 243 + 244 + 0M -L 243 + 419 + 0M -L 243 + 433 + 0M -L 243 - 242 - 0M -L 244 + 244 + 0M -L 244 + 245 + 0M -L 244 - 243 - 0M -L 245 + 246 + 0M -L 245 + 247 + 0M -L 245 - 244 - 0M -L 246 + 247 + 0M -L 246 - 245 - 0M -L 247 + 248 + 0M -L 247 + 379 + 0M -L 247 - 246 - 0M -L 248 + 249 + 0M -L 248 - 247 - 0M -L 249 + 250 + 0M -L 249 + 380 + 0M -L 249 - 248 - 0M -L 250 + 251 + 0M -L 250 - 249 - 0M -L 251 + 252 + 0M -L 251 + 341 + 0M -L 251 - 250 - 0M -L 252 + 253 + 0M -L 252 - 251 - 0M -L 253 + 254 + 0M -L 253 + 434 + 0M -L 253 - 252 - 0M -L 254 + 255 + 0M -L 254 - 253 - 0M -L 255 + 256 + 0M -L 255 + 381 + 0M -L 255 - 254 - 0M -L 256 + 257 + 0M -L 256 - 255 - 0M -L 257 + 258 + 0M -L 257 + 382 + 0M -L 257 + 420 + 0M -L 257 - 256 - 0M -L 258 + 259 + 0M -L 258 - 257 - 0M -L 259 + 260 + 0M -L 259 + 342 + 0M -L 259 - 258 - 0M -L 260 + 261 + 0M -L 260 - 259 - 0M -L 261 + 262 + 0M -L 261 + 343 + 0M -L 261 - 260 - 0M -L 262 + 263 + 0M -L 262 - 261 - 0M -L 263 + 264 + 0M -L 263 + 344 + 0M -L 263 + 435 + 0M -L 263 - 262 - 0M -L 264 + 265 + 0M -L 264 - 263 - 0M -L 265 + 266 + 0M -L 265 + 267 + 0M -L 265 - 264 - 0M -L 266 + 267 + 0M -L 266 - 265 - 0M -L 267 + 268 + 0M -L 267 + 345 + 0M -L 267 - 266 - 0M -L 268 + 269 + 0M -L 268 - 267 - 0M -L 269 + 270 + 0M -L 269 - 268 - 0M -L 270 + 271 + 0M -L 270 + 454 + 0M -L 270 - 269 - 0M -L 271 + 272 + 0M -L 271 - 270 - 0M -L 272 + 273 + 0M -L 272 + 383 + 0M -L 272 - 271 - 0M -L 273 + 274 + 0M -L 273 - 272 - 0M -L 274 + 275 + 0M -L 274 + 384 + 0M -L 274 - 273 - 0M -L 275 + 276 + 0M -L 275 - 274 - 0M -L 276 + 277 + 0M -L 276 + 385 + 0M -L 276 - 275 - 0M -L 277 + 278 + 0M -L 277 - 276 - 0M -L 278 + 279 + 0M -L 278 + 386 + 0M -L 278 - 277 - 0M -L 279 + 280 + 0M -L 279 - 278 - 0M -L 280 + 281 + 0M -L 280 + 421 + 0M -L 280 - 279 - 0M -L 281 + 282 + 0M -L 281 - 280 - 0M -L 282 + 283 + 0M -L 282 + 387 + 0M -L 282 + 469 + 0M -L 282 - 281 - 0M -L 283 + 284 + 0M -L 283 + 437 + 0M -L 283 - 282 - 0M -L 284 + 285 + 0M -L 284 - 283 - 0M -L 285 + 286 + 0M -L 285 + 388 + 0M -L 285 - 284 - 0M -L 286 + 287 + 0M -L 286 - 285 - 0M -L 287 + 288 + 0M -L 287 + 422 + 0M -L 287 - 286 - 0M -L 288 + 289 + 0M -L 288 + 389 + 0M -L 288 - 287 - 0M -L 289 + 290 + 0M -L 289 - 288 - 0M -L 290 + 291 + 0M -L 290 + 390 + 0M -L 290 - 289 - 0M -L 291 + 292 + 0M -L 291 - 290 - 0M -L 292 + 293 + 0M -L 292 + 391 + 0M -L 292 - 291 - 0M -L 293 + 294 + 0M -L 293 - 292 - 0M -L 294 + 295 + 0M -L 294 + 455 + 0M -L 294 - 293 - 0M -L 295 + 296 + 0M -L 295 - 294 - 0M -L 296 + 297 + 0M -L 296 + 392 + 0M -L 296 - 295 - 0M -L 297 + 298 + 0M -L 297 - 296 - 0M -L 298 + 299 + 0M -L 298 + 393 + 0M -L 298 - 297 - 0M -L 299 + 300 + 0M -L 299 - 298 - 0M -L 300 + 301 + 0M -L 300 + 456 + 0M -L 300 - 299 - 0M -L 301 + 302 + 0M -L 301 - 300 - 0M -L 302 + 303 + 0M -L 302 - 301 - 0M -L 303 + 304 + 0M -L 303 + 394 + 0M -L 303 + 457 + 0M -L 303 - 302 - 0M -L 304 + 305 + 0M -L 304 - 303 - 0M -L 305 + 306 + 0M -L 305 + 423 + 0M -L 305 - 304 - 0M -L 306 + 307 + 0M -L 306 - 305 - 0M -L 307 + 424 + 0M -L 307 - 306 - 0M -L 308 + 35 + 0M -L 309 + 42 + 0M -L 310 + 46 + 0M -L 311 + 60 + 0M -L 312 + 62 + 0M -L 313 + 64 + 0M -L 314 + 68 + 0M -L 315 + 72 + 0M -L 316 + 76 + 0M -L 317 + 81 + 0M -L 318 + 90 + 0M -L 319 + 92 + 0M -L 320 + 94 + 0M -L 321 + 112 + 0M -L 322 + 118 + 0M -L 323 + 122 + 0M -L 324 + 126 + 0M -L 325 + 140 + 0M -L 326 + 144 + 0M -L 327 + 146 + 0M -L 328 + 150 + 0M -L 329 + 158 + 0M -L 330 + 162 + 0M -L 331 + 164 + 0M -L 332 + 166 + 0M -L 333 + 168 + 0M -L 334 + 177 + 0M -L 335 + 196 + 0M -L 336 + 206 + 0M -L 337 + 225 + 0M -L 338 + 227 + 0M -L 339 + 229 + 0M -L 340 + 231 + 0M -L 341 + 253 + 0M -L 342 + 261 + 0M -L 343 + 263 + 0M -L 344 + 265 + 0M -L 345 + 269 + 0M -L 345 + 436 + 0M -L 345 + 468 + 0M -L 346 + 10 + 0M -L 347 + 14 + 0M -L 348 + 16 + 0M -L 349 + 19 + 0M -L 350 + 22 + 0M -L 351 + 51 + 0M -L 352 + 58 + 0M -L 353 + 102 + 0M -L 354 + 110 + 0M -L 355 + 114 + 0M -L 356 + 116 + 0M -L 357 + 148 + 0M -L 358 + 152 + 0M -L 359 + 156 + 0M -L 360 + 158 + 0M -L 361 + 161 + 0M -L 362 + 170 + 0M -L 363 + 175 + 0M -L 364 + 179 + 0M -L 365 + 186 + 0M -L 366 + 188 + 0M -L 367 + 190 + 0M -L 368 + 210 + 0M -L 369 + 212 + 0M -L 370 + 214 + 0M -L 371 + 216 + 0M -L 372 + 218 + 0M -L 373 + 220 + 0M -L 373 + 467 + 0M -L 374 + 223 + 0M -L 375 + 231 + 0M -L 376 + 233 + 0M -L 377 + 235 + 0M -L 378 + 239 + 0M -L 379 + 249 + 0M -L 380 + 251 + 0M -L 381 + 257 + 0M -L 382 + 259 + 0M -L 383 + 274 + 0M -L 384 + 276 + 0M -L 385 + 278 + 0M -L 386 + 280 + 0M -L 387 + 283 + 0M -L 388 + 287 + 0M -L 389 + 290 + 0M -L 390 + 292 + 0M -L 391 + 294 + 0M -L 392 + 298 + 0M -L 393 + 300 + 0M -L 394 + 305 + 0M -L 394 + 458 + 0M -L 395 + 6 + 0M -L 396 + 17 + 0M -L 397 + 33 + 0M -L 398 + 37 + 0M -L 399 + 39 + 0M -L 400 + 56 + 0M -L 401 + 66 + 0M -L 402 + 70 + 0M -L 403 + 78 + 0M -L 404 + 317 + 0M -L 405 + 96 + 0M -L 406 + 98 + 0M -L 407 + 100 + 0M -L 408 + 105 + 0M -L 409 + 108 + 0M -L 410 + 136 + 0M -L 411 + 138 + 0M -L 412 + 162 + 0M -L 413 + 174 + 0M -L 414 + 192 + 0M -L 415 + 200 + 0M -L 416 + 208 + 0M -L 417 + 241 + 0M -L 418 + 243 + 0M -L 419 + 244 + 0M -L 420 + 259 + 0M -L 421 + 282 + 0M -L 422 + 389 + 0M -L 423 + 307 + 0M -L 424 + 425 + 0M -L 424 - 307 - 0M -L 425 + 438 + 0M -L 426 + 27 + 0M -L 427 + 47 + 0M -L 428 + 87 + 0M -L 429 + 130 + 0M -L 430 + 132 + 0M -L 431 + 154 + 0M -L 432 + 237 + 0M -L 433 + 244 + 0M -L 434 + 255 + 0M -L 435 + 265 + 0M -L 436 + 270 + 0M -L 437 + 285 + 0M -L 439 + 4 + 0M -L 440 + 8 + 0M -L 441 + 12 + 0M -L 442 + 31 + 0M -L 443 + 44 + 0M -L 444 + 47 + 0M -L 445 + 74 + 0M -L 446 + 88 + 0M -L 447 + 104 + 0M -L 448 + 120 + 0M -L 449 + 134 + 0M -L 450 + 172 + 0M -L 451 + 181 + 0M -L 452 + 183 + 0M -L 452 + 466 + 0M -L 453 + 194 + 0M -L 454 + 272 + 0M -L 455 + 296 + 0M -L 456 + 302 + 0M -L 457 + 394 + 0M -L 458 + 303 + 0M -L 459 + 23 + 0M -L 460 + 25 + 0M -L 461 + 29 + 0M -L 462 + 309 + 0M -L 463 + 83 + 0M -L 464 + 85 + 0M -L 465 + 174 + 0M -L 466 + 184 + 0M -L 467 + 221 + 0M -L 468 + 270 + 0M -L 469 + 283 + 0M -P gi|568815592:31353871-31357211 1+,2+,3+,4+,5+,6+,7+,8+,9+,10+,11+,12+,13+,14+,15+,16+,17+,18+,19+,20+,21+,22+,23+,24+,25+,26+,27+,28+,29+,30+,31+,32+,33+,34+,35+,36+,37+,38+,39+,40+,41+,42+,43+,44+,45+,46+,47+,47+,47+,47+,48+,47+,47+,47+,49+,47+,47+,47+,47+,47+,50+,47+,47+,47+,51+,47+,47+,52+,47+,47+,47+,47+,53+,47+,47+,54+,55+,56+,57+,58+,59+,60+,61+,62+,63+,64+,65+,66+,67+,68+,69+,70+,71+,72+,73+,74+,75+,76+,77+,78+,79+,80+,81+,82+,83+,84+,85+,86+,87+,88+,89+,90+,91+,92+,93+,94+,95+,96+,97+,98+,99+,100+,101+,102+,103+,104+,105+,106+,107+,108+,109+,110+,111+,112+,113+,114+,115+,116+,117+,118+,119+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,131+,132+,133+,134+,135+,136+,137+,138+,139+,140+,141+,142+,143+,144+,145+,146+,147+,148+,149+,150+,151+,152+,153+,154+,155+,156+,157+,158+,159+,160+,161+,162+,163+,164+,165+,166+,167+,168+,169+,170+,171+,172+,173+,174+,175+,176+,177+,178+,179+,180+,181+,182+,183+,184+,185+,186+,187+,188+,189+,190+,191+,192+,193+,194+,195+,196+,197+,197+,197+,197+,197+,198+,199+,200+,201+,202+,202+,202+,203+,204+,205+,206+,207+,208+,209+,210+,211+,212+,213+,214+,215+,216+,217+,218+,219+,220+,221+,222+,223+,224+,225+,226+,227+,228+,229+,230+,231+,232+,233+,234+,235+,236+,237+,238+,239+,240+,241+,242+,243+,244+,245+,246+,247+,248+,249+,250+,251+,252+,253+,254+,255+,256+,257+,258+,259+,260+,261+,262+,263+,264+,265+,266+,267+,268+,269+,270+,271+,272+,273+,274+,275+,276+,277+,278+,279+,280+,281+,282+,283+,284+,285+,286+,287+,288+,289+,290+,291+,292+,293+,294+,295+,296+,297+,298+,299+,300+,301+,302+,303+,304+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|568815529:2834231-2837570 1+,2+,3+,4+,5+,6+,7+,8+,9+,10+,11+,12+,13+,14+,15+,16+,17+,18+,19+,20+,21+,22+,23+,24+,25+,26+,27+,28+,29+,30+,31+,32+,33+,308+,35+,36+,37+,38+,39+,40+,309+,42+,43+,44+,310+,46+,47+,47+,47+,47+,48+,47+,47+,47+,49+,47+,47+,47+,47+,47+,50+,47+,47+,47+,51+,47+,47+,52+,47+,47+,47+,47+,53+,47+,47+,54+,55+,56+,57+,58+,311+,60+,312+,62+,313+,64+,65+,66+,314+,68+,69+,70+,315+,72+,73+,74+,316+,76+,77+,78+,79+,317+,81+,82+,83+,84+,85+,86+,87+,88+,318+,90+,319+,92+,320+,94+,95+,96+,97+,98+,99+,100+,101+,102+,103+,104+,105+,106+,107+,108+,109+,110+,321+,112+,113+,114+,115+,116+,322+,118+,119+,120+,323+,122+,124+,324+,126+,127+,128+,129+,130+,131+,132+,133+,134+,135+,136+,137+,138+,325+,140+,141+,142+,326+,144+,327+,146+,147+,148+,328+,150+,151+,152+,153+,154+,155+,156+,329+,158+,330+,162+,331+,164+,332+,166+,333+,168+,169+,170+,171+,172+,173+,174+,175+,334+,177+,178+,179+,180+,181+,182+,183+,184+,185+,186+,187+,188+,189+,190+,191+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,197+,198+,199+,200+,201+,202+,202+,202+,203+,204+,336+,206+,207+,208+,209+,210+,211+,212+,213+,214+,215+,216+,217+,218+,219+,220+,221+,222+,223+,337+,225+,338+,227+,339+,229+,340+,231+,232+,233+,234+,235+,236+,237+,238+,239+,240+,241+,242+,243+,244+,245+,246+,247+,248+,249+,250+,251+,341+,253+,254+,255+,256+,257+,258+,259+,342+,261+,343+,263+,344+,265+,266+,267+,345+,269+,270+,271+,272+,273+,274+,275+,276+,277+,278+,279+,280+,281+,282+,283+,284+,285+,286+,287+,288+,289+,290+,291+,292+,293+,294+,295+,296+,297+,298+,299+,300+,301+,302+,303+,304+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|568815561:2662483-2665823 1+,2+,3+,4+,5+,6+,7+,8+,346+,10+,11+,12+,347+,14+,348+,16+,17+,349+,19+,350+,22+,23+,24+,25+,26+,27+,28+,29+,30+,31+,32+,33+,308+,35+,36+,37+,38+,39+,40+,309+,42+,43+,44+,310+,46+,47+,47+,47+,47+,48+,47+,47+,47+,49+,47+,47+,47+,47+,47+,50+,47+,47+,351+,51+,47+,47+,52+,47+,47+,47+,47+,53+,47+,47+,54+,55+,56+,352+,58+,311+,60+,312+,62+,313+,64+,65+,66+,314+,68+,69+,70+,315+,72+,73+,74+,316+,76+,77+,78+,79+,317+,81+,82+,83+,84+,85+,86+,87+,88+,318+,90+,91+,92+,320+,94+,95+,96+,97+,98+,99+,100+,353+,102+,103+,104+,105+,106+,107+,108+,354+,110+,321+,112+,355+,114+,356+,116+,322+,118+,119+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,131+,132+,133+,134+,135+,136+,137+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,153+,154+,359+,156+,360+,158+,159+,361+,161+,162+,331+,164+,332+,166+,333+,168+,362+,170+,171+,172+,173+,363+,175+,176+,177+,364+,179+,180+,181+,182+,183+,184+,365+,186+,366+,188+,367+,190+,191+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,198+,199+,200+,202+,202+,202+,204+,205+,206+,207+,208+,368+,210+,369+,212+,370+,214+,371+,216+,372+,218+,373+,220+,221+,374+,223+,337+,225+,338+,227+,339+,229+,375+,231+,376+,233+,377+,235+,236+,237+,378+,239+,240+,241+,242+,243+,244+,244+,245+,247+,379+,249+,380+,251+,341+,253+,254+,255+,381+,257+,382+,259+,342+,261+,343+,263+,264+,265+,266+,267+,345+,269+,270+,271+,272+,383+,274+,384+,276+,385+,278+,386+,280+,281+,282+,387+,283+,284+,285+,388+,287+,288+,389+,290+,390+,292+,391+,294+,295+,296+,392+,298+,393+,300+,301+,302+,303+,394+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|568815564:2695843-2699207 1+,2+,3+,4+,395+,6+,7+,8+,346+,10+,11+,12+,13+,14+,15+,396+,17+,18+,19+,20+,21+,22+,23+,24+,25+,26+,27+,28+,29+,30+,31+,397+,33+,308+,35+,398+,37+,399+,39+,40+,309+,42+,43+,44+,310+,46+,47+,47+,47+,47+,48+,47+,47+,47+,49+,47+,47+,47+,47+,47+,50+,47+,47+,47+,51+,47+,47+,52+,47+,47+,47+,47+,53+,47+,47+,54+,400+,56+,57+,58+,59+,60+,61+,62+,313+,64+,401+,66+,314+,68+,402+,70+,71+,72+,73+,74+,75+,76+,403+,78+,404+,317+,81+,82+,83+,84+,85+,86+,87+,88+,318+,90+,91+,92+,320+,94+,405+,96+,406+,98+,407+,100+,101+,102+,103+,104+,105+,408+,105+,106+,409+,108+,354+,110+,321+,112+,113+,114+,356+,116+,322+,118+,119+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,131+,132+,133+,134+,410+,136+,411+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,153+,154+,155+,156+,360+,158+,159+,160+,412+,162+,163+,164+,165+,166+,333+,168+,362+,170+,171+,172+,413+,174+,175+,176+,177+,178+,179+,180+,181+,182+,183+,184+,365+,186+,187+,188+,189+,190+,414+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,198+,415+,200+,201+,202+,202+,202+,202+,204+,205+,206+,416+,208+,209+,210+,211+,212+,213+,214+,215+,216+,217+,218+,219+,220+,221+,374+,223+,337+,225+,338+,227+,339+,229+,375+,231+,376+,233+,377+,235+,236+,237+,378+,239+,417+,241+,418+,243+,419+,244+,245+,247+,248+,249+,250+,251+,252+,253+,254+,255+,256+,257+,420+,259+,342+,261+,343+,263+,264+,265+,266+,267+,345+,269+,270+,271+,272+,383+,274+,384+,276+,277+,278+,386+,280+,421+,282+,387+,283+,284+,285+,286+,287+,422+,389+,290+,291+,292+,293+,294+,295+,296+,392+,298+,393+,300+,301+,302+,303+,394+,305+,423+,307+,424+,425+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|568815567:2609568-2613542 1+,2+,3+,4+,5+,6+,7+,8+,346+,10+,11+,12+,13+,14+,15+,16+,17+,349+,19+,350+,22+,23+,24+,25+,426+,27+,28+,29+,30+,31+,397+,33+,308+,35+,398+,37+,38+,39+,40+,309+,42+,43+,44+,45+,46+,47+,47+,47+,47+,47+,427+,47+,47+,47+,47+,51+,47+,47+,47+,47+,47+,47+,47+,51+,47+,47+,54+,400+,56+,57+,58+,59+,60+,61+,62+,313+,64+,65+,66+,314+,68+,402+,70+,315+,72+,73+,74+,75+,76+,77+,78+,79+,317+,81+,82+,83+,84+,85+,428+,87+,88+,318+,90+,91+,92+,320+,94+,405+,96+,406+,98+,407+,100+,101+,102+,103+,104+,105+,408+,105+,106+,107+,108+,354+,110+,321+,112+,113+,114+,356+,116+,322+,118+,119+,120+,121+,122+,123+,124+,125+,126+,128+,429+,130+,430+,132+,133+,134+,135+,136+,137+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,431+,154+,155+,156+,329+,158+,159+,361+,161+,162+,331+,164+,332+,166+,333+,168+,362+,170+,171+,172+,413+,174+,175+,176+,177+,178+,179+,180+,181+,182+,183+,184+,365+,186+,187+,188+,189+,190+,191+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,197+,198+,199+,200+,201+,202+,202+,202+,202+,204+,205+,206+,207+,208+,209+,210+,211+,212+,213+,214+,215+,216+,217+,218+,219+,220+,221+,374+,223+,337+,225+,338+,227+,339+,229+,375+,231+,232+,233+,234+,235+,432+,237+,238+,239+,417+,241+,242+,243+,433+,244+,245+,247+,248+,249+,250+,251+,252+,253+,434+,255+,256+,257+,258+,259+,260+,261+,262+,263+,435+,265+,267+,345+,436+,270+,271+,272+,383+,274+,384+,276+,277+,278+,386+,280+,421+,282+,387+,283+,437+,285+,388+,287+,288+,389+,290+,390+,292+,391+,294+,295+,296+,392+,298+,393+,300+,301+,302+,303+,394+,305+,306+,307+,424+,425+,438+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|568815569:2656109-2659449 1+,2+,3+,4+,5+,6+,7+,8+,346+,10+,11+,12+,347+,14+,348+,16+,17+,349+,19+,350+,22+,23+,24+,25+,26+,27+,28+,29+,30+,31+,32+,33+,308+,35+,36+,37+,38+,39+,40+,309+,42+,43+,44+,310+,46+,47+,47+,47+,47+,48+,47+,47+,47+,49+,47+,47+,47+,47+,47+,50+,47+,47+,351+,51+,47+,47+,52+,47+,47+,47+,47+,53+,47+,47+,54+,55+,56+,352+,58+,311+,60+,312+,62+,313+,64+,65+,66+,314+,68+,69+,70+,315+,72+,73+,74+,316+,76+,77+,78+,79+,317+,81+,82+,83+,84+,85+,86+,87+,88+,318+,90+,91+,92+,320+,94+,95+,96+,97+,98+,99+,100+,353+,102+,103+,104+,105+,106+,107+,108+,354+,110+,321+,112+,355+,114+,356+,116+,322+,118+,119+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,131+,132+,133+,134+,135+,136+,137+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,153+,154+,359+,156+,360+,158+,330+,162+,331+,164+,332+,166+,333+,168+,362+,170+,171+,172+,173+,363+,175+,176+,177+,364+,179+,180+,181+,182+,183+,184+,365+,186+,366+,188+,367+,190+,191+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,198+,199+,200+,202+,202+,202+,204+,205+,206+,207+,208+,368+,210+,369+,212+,370+,214+,371+,216+,372+,218+,373+,220+,221+,374+,223+,337+,225+,338+,227+,339+,229+,375+,231+,376+,233+,377+,235+,236+,237+,378+,239+,240+,241+,242+,243+,244+,244+,245+,247+,379+,249+,380+,251+,341+,253+,254+,255+,381+,257+,382+,259+,342+,261+,343+,263+,264+,265+,266+,267+,345+,269+,270+,271+,272+,383+,274+,384+,276+,385+,278+,386+,280+,281+,282+,387+,283+,284+,285+,388+,287+,288+,389+,290+,390+,292+,391+,294+,295+,296+,392+,298+,393+,300+,301+,302+,303+,394+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|299782605:5000-8340 424-,307-,306-,305-,304-,303-,302-,301-,300-,299-,298-,297-,296-,295-,294-,293-,292-,291-,290-,289-,288-,287-,286-,285-,284-,283-,282-,281-,280-,279-,278-,277-,276-,275-,274-,273-,272-,271-,270-,269-,268-,267-,266-,265-,264-,263-,262-,261-,260-,259-,258-,257-,256-,255-,254-,253-,252-,251-,250-,249-,248-,247-,246-,245-,244-,243-,242-,241-,240-,239-,238-,237-,236-,235-,234-,233-,232-,231-,230-,229-,228-,227-,226-,225-,224-,223-,222-,221-,220-,219-,218-,217-,216-,215-,214-,213-,212-,211-,210-,209-,208-,207-,206-,205-,204-,203-,202-,202-,202-,201-,200-,199-,198-,197-,197-,197-,197-,197-,196-,195-,194-,193-,192-,191-,190-,189-,188-,187-,186-,185-,184-,183-,182-,181-,180-,179-,178-,177-,176-,175-,174-,173-,172-,171-,170-,169-,168-,167-,166-,165-,164-,163-,162-,161-,160-,159-,158-,157-,156-,155-,154-,153-,152-,151-,150-,149-,148-,147-,146-,145-,144-,143-,142-,141-,140-,139-,138-,137-,136-,135-,134-,133-,132-,131-,130-,129-,128-,127-,126-,125-,124-,123-,122-,121-,120-,119-,118-,117-,116-,115-,114-,113-,112-,111-,110-,109-,108-,107-,106-,105-,104-,103-,102-,101-,100-,99-,98-,97-,96-,95-,94-,93-,92-,91-,90-,89-,88-,87-,86-,85-,84-,83-,82-,81-,80-,79-,78-,77-,76-,75-,74-,73-,72-,71-,70-,69-,68-,67-,66-,65-,64-,63-,62-,61-,60-,59-,58-,57-,56-,55-,54-,47-,47-,53-,47-,47-,47-,47-,52-,47-,47-,51-,47-,47-,47-,50-,47-,47-,47-,47-,47-,49-,47-,47-,47-,48-,47-,47-,47-,47-,46-,45-,44-,43-,42-,41-,40-,39-,38-,37-,36-,35-,34-,33-,32-,31-,30-,29-,28-,27-,26-,25-,24-,23-,22-,21-,20-,19-,18-,17-,16-,15-,14-,13-,12-,11-,10-,9-,8-,7-,6-,5-,4-,3-,2- *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|528476637:31323556-31326919 1+,2+,439+,4+,5+,6+,440+,8+,346+,10+,441+,12+,347+,14+,15+,16+,17+,18+,19+,350+,22+,23+,24+,25+,26+,27+,28+,29+,442+,31+,32+,33+,308+,35+,36+,37+,38+,39+,40+,309+,42+,443+,44+,45+,46+,47+,47+,47+,47+,47+,427+,47+,47+,444+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,47+,51+,47+,47+,54+,400+,56+,57+,58+,59+,60+,61+,62+,313+,64+,65+,66+,314+,68+,69+,70+,315+,72+,445+,74+,75+,76+,77+,78+,79+,317+,81+,82+,83+,84+,85+,86+,446+,88+,318+,90+,91+,92+,320+,94+,405+,96+,406+,98+,407+,100+,101+,102+,447+,104+,105+,408+,105+,106+,107+,108+,109+,110+,321+,112+,113+,114+,115+,116+,322+,118+,448+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,131+,132+,449+,134+,135+,136+,137+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,153+,154+,155+,156+,360+,158+,159+,361+,161+,162+,163+,164+,165+,166+,167+,168+,169+,170+,450+,172+,173+,174+,175+,176+,177+,364+,179+,451+,181+,452+,183+,184+,365+,186+,366+,188+,367+,190+,191+,192+,453+,194+,335+,196+,197+,197+,197+,197+,197+,198+,199+,200+,201+,202+,202+,202+,203+,204+,205+,206+,207+,208+,209+,210+,211+,212+,213+,214+,215+,216+,217+,218+,219+,220+,221+,222+,223+,224+,225+,226+,227+,228+,229+,230+,231+,232+,233+,234+,235+,236+,237+,238+,239+,240+,241+,242+,243+,244+,245+,246+,247+,248+,249+,250+,251+,341+,253+,254+,255+,256+,257+,420+,259+,342+,261+,343+,263+,264+,265+,266+,267+,345+,269+,270+,454+,272+,383+,274+,384+,276+,277+,278+,386+,280+,281+,282+,283+,284+,285+,286+,287+,288+,389+,290+,390+,292+,391+,294+,455+,296+,392+,298+,393+,300+,456+,302+,303+,457+,394+,458+,303+,304+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* -P gi|157734152:31112050-31115392 1+,2+,3+,4+,5+,6+,7+,8+,346+,10+,11+,12+,13+,14+,15+,396+,17+,18+,19+,20+,459+,23+,460+,25+,26+,27+,461+,29+,30+,31+,397+,33+,308+,35+,36+,37+,38+,39+,462+,309+,42+,43+,44+,45+,46+,47+,47+,47+,47+,48+,47+,47+,49+,47+,47+,47+,47+,47+,47+,47+,47+,51+,47+,47+,54+,55+,56+,57+,58+,59+,60+,61+,62+,313+,64+,65+,66+,67+,68+,69+,70+,71+,72+,73+,74+,75+,76+,77+,78+,79+,317+,81+,463+,83+,464+,85+,86+,87+,88+,89+,90+,91+,92+,320+,94+,95+,96+,97+,98+,407+,100+,101+,102+,103+,104+,105+,408+,105+,106+,107+,108+,109+,110+,321+,112+,113+,114+,356+,116+,322+,118+,119+,120+,121+,122+,123+,124+,125+,126+,127+,128+,129+,130+,430+,132+,133+,134+,135+,136+,137+,138+,325+,140+,141+,141+,142+,326+,144+,327+,146+,357+,148+,328+,150+,358+,152+,153+,154+,155+,156+,329+,158+,330+,162+,331+,164+,332+,166+,333+,168+,362+,170+,171+,172+,465+,174+,175+,334+,177+,364+,179+,180+,181+,452+,466+,184+,365+,186+,366+,188+,189+,190+,191+,192+,193+,194+,335+,196+,197+,197+,197+,197+,197+,197+,198+,199+,200+,201+,202+,202+,202+,202+,204+,205+,206+,207+,208+,368+,210+,369+,212+,213+,214+,371+,216+,217+,218+,373+,467+,221+,374+,223+,337+,225+,338+,227+,339+,229+,375+,231+,376+,233+,377+,235+,236+,237+,238+,239+,417+,241+,242+,243+,433+,244+,245+,247+,248+,249+,250+,251+,252+,253+,254+,255+,256+,257+,258+,259+,260+,261+,262+,263+,435+,265+,266+,267+,345+,468+,270+,271+,272+,383+,274+,384+,276+,277+,278+,386+,280+,281+,282+,469+,283+,284+,285+,388+,287+,288+,389+,290+,390+,292+,391+,294+,295+,296+,392+,298+,393+,300+,301+,302+,303+,394+,305+,306+,307+ *,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,* diff --git a/tests/data/delete_me/test.txt.tar.gz b/tests/data/delete_me/test.txt.tar.gz deleted file mode 100644 index efb3c8ce..00000000 Binary files a/tests/data/delete_me/test.txt.tar.gz and /dev/null differ diff --git a/tests/data/genomics/homo_sapiens/illumina/bam/test_paired_end.bam b/tests/data/genomics/homo_sapiens/illumina/bam/test_paired_end.bam deleted file mode 100644 index 3f4791f0..00000000 Binary files a/tests/data/genomics/homo_sapiens/illumina/bam/test_paired_end.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/alignment/test.fas b/tests/data/genomics/sarscov2/genome/alignment/test.fas deleted file mode 100644 index a7cea715..00000000 --- a/tests/data/genomics/sarscov2/genome/alignment/test.fas +++ /dev/null @@ -1,8 +0,0 @@ ->ERR2172266 -NNNNNcaagagccagtttgccggaaaaatagaagcggtgagggaagagttggctgccggccgtcccgccttcgtattcaaaccgggagaaggcgtgcgttatgagatggcggcggttgaaggtgctgtcgaacctgccgagccgtccttgcacgcggggtcggaggagatgcccgtgcaggaggttctgttggacgagctgccgtctgaaaagcctgtcaaacccgctgcgtcgaaaacggcggcggatattttggcggaacgtatgaaaaacctgccgcacgagccgcgtcaggctgccgggcctgcttcccggccggaatcggcggcagttgccaaagcgcggacggatgcgcagcgtgatgcggaagaagcgcgttacgaacaaaccaacctgtctccggattacacgtttgatacgttggtagaaggtaagggcaaccgccttgcggcggctgcggcgcaggcgattgcggaaaacccggggcagagttacaacccgttcttcctgtacggcagcacgggtttgggcaaaacccaccttgtgcaggcggtcggcaacgagctgttgaaaaaccgtcccgatgccaaagtgcgctatatgcattcggacgactacatccgcagctttatgaaggcggttcgcaacaatacctacgacgtgttcaagcagcaatacaagcaatacgacctgctgattatcgacgatattcagttcatcaaaggaaaagaccgtacgatggaagaatttttctatctgtacaaccattttcacaatgagaaaaaacagctcatcctcacttgcgatgttttacccgccaaaatcgaaggtatggacgaccgcctcaaatcccgcttttcgtgggggctgactttggaactcgagccgcccgaattggaaatgcgtatcgccattttgcagaaaaaggcggaagcggcgggcatcagtatcgaagacgaagccgcgctgttcattgccaatctgatccgttccaacgtgcgcgaactggaaggcgcgttcaaccgtgtcggagcgagcagccgctttatgaaccgtcccgtcatcgacatcgatttggcgcgtaccgctttgcaggacattattgccgagaagcacaaagtcatcaccgccgacatcatcatcgatgcggtggcgaaatattaccgcatcaaaatcagcgacgtactcggcaaaaaacgcacgcgcaacattgcccgtccgcgtcaggttgctatgagcctgaccaaagaattgaccactttgagcctgccgtctatcggcgattcgttcggcggacgcgaccatacgaccgtcatgcacggcatcagggcggtggcgaaactgcgcgaggaagaccccgagttggcgcaggattacgagaaactgctgattctgattcaaaactgaccggacacgcctttcagacggcatgacattgaccatgccgtccgaagggtaggaaatccaaccgatttaaggagcgaaaatgttgattttacaagccgagcgcgacagcctgctcaagccgctgcaagccgttaccggcatcgtcgaacgccgacacaccctgcccatcctgtccaatgtgctgattgagggcaggggcggtcagaccaaactcttggcaaccgatttggaaatccaaatcgacaccgcgggtcccgagggaggtgcgggcgacttccgcatcactaccaatgccaagaaatttcaggacattttgcgcgcgctgcctgccggtgcgctggtgtcgctggattgggacgacaaccgtctgacgctgaaggcgggcaaatcgcgttttgccctgcaaaccctgcctgccgccgattttccgatgatgaatgtcggcgaggacatcagcgcgactttctcgctggggcaggagcgtttcaaaaccatgctgtcgcaagtgcagtacagcatggcggtgcaggacatccgctattatctcaacggtctgctgatgcaggttgagggcagccagttgcgccttgtggcgaccgacggacaccgccttgcctatgcagcctgcgcgattgatgcggatttgccgcgcgccgaagtgattttgccgcgcaaaacggtgctggaactgttcaaactgttgaacaaccccgacgatccgattcaaatcgagctgctggacaagcaggtgcgtttccaatgcaacggcacgaccatcgtcagcaaggtcatcgacggcaaattccccgatttcaaccgcgtgattcctttggacaacgacaagattttcgtgttgtcccgtgccgaacttttgggcgcgctggaacgtgtgtccattcttgccaacgaaaaattccgtggcgcgcgcctgttcctgcaacccggcctgttgagcgtcgtgtgcagcaacaacgagcaggaagaagcgcgcgaagaaatcgaaatcgcctatcagggcggcgaactcgaagtcggtttcaatatcggctatttgatggacgtgttgcgcaacatccattccgacgatatgcagcttgccttcggcgacgccaaccgctcgacgctgtttaccgtgccgaacaatccgaatttcaaatatattgtgatgccgatgcggatttgacggttttccggaacacgatgcccgtattggagatatgccccgaaccgtgcagacggattcggggttttgttcggctgccggaaaggcaatgccgtctggaatgcggcggattggggttgggagcgtatgggggaagtgcttgtgcgggtcagcctcggagcaaatcccataaatcgttttgcaggtcggcttcgctttcgccttcggcgggcgcggcgcggatatagccgccgtcgggctgcatcagccacgcgtgggtattgtctgccagtgccatttccaaaccttcgcggatgacgcgttttttgagttcgggcgcggtaatcggggtggcggtttcgatgcggcggaagaaattgcgccccatccaatccgcgctggaaataaaggtgtcgtccgcgccgttgttgtggaaacaatatacgcgcgcgtgttcgagctgcctgccgacgatggagcggacgcggatgttttcggacaagccttttacacccgggcgcaaggtacacataccgcgcacaatcaaatcgatttgcacgcctgccgcgcttgcccgatacagggcttctatgacagtcggttcgatgagcgaattcatcttggcggtaatccgcgccggtttgccggcttttgcgtgttcggtttcgcgagcgatgcggccgataaccattttgtgcagggtaaacggactttggtagagtttgttcagccgcccgggtttgcccaagcctgtgatttccataaataatgtgttcacgtcggcggtgatttgttcgtcggcggtaatgaggccgaagtcggtgtagatgcgcgatgtgccttggtggtagttgcccgtgccgaggtgggcgtaacgcttgagcacgccgtcttcgcggcggatgaccagtgccattttggcgtggactttgtagccgaacacgccgtacacgacgtgcgcgcccgcctcttcgagctgcttcgcccagttgacgttgttggcttcgtcaaaacgcgccatcagttcgacgacgacggttacttgtttgccggcgagtgccgccttcatcagggcggggacgagttcggagcgcgtgccggtgcggtaaatcgtcattttgacggcaagaacggcgggatcggcggcggcttcgcgtatcatatcgaccacgggatcgaaagattggtaggggtggtgcagcaggatgggcgattggcgcaccaaatcgaagatcgggctgtttttgcccaaggctttcagacgacccggcgtgtgcggcggaaatttcaaatcggggcggttgactaggtcggggacggcgttgaggcggacgaggttgaccgggcctttgacctgatagagttcggcgtcggtcagcctgaattgcgcgagcagaaagtcgcggatgtaggcgggacaggtgtcggcgacttcgagccgcacgccgtcgccgtattcgcggtcgtgcagttcgttttgaatggcggcgcggaggttttgtacgtcttcttcgtcaacggtcaagtcgctgtcgcgcgtgaggcggaactggtggcagcctttgacgttcatgcccgggaagagtttgccgacgtgggcgtggaggatggacgacaggaagacgaagccgtgtccgccgccacacagttcggacggcaggggaacaacgcgcggcaggatgcgcggtgcttggacaatcgccatacccgaaggcctgccgaacgcgtccgtgccgtcgagttctacggcgaagttgagcgatttgttcagcgggcgcgggaaagggtgggaagggtcgagtccgatgggggtcaggatcggcagcagttcgcggtcgaaatagtcttcgatccattttttctgcgtgcccgtccaattgcggcggcggtaaaaatggatgctttcccgcgccaactcgggctgaaggacgttgttgaacaggtcgtactggtgccgtatcagggagcgcgccgcttcggtaacgtcggcgatggtttcagacggcgttttgccgttgtccggcctgcgccgggggtgcagcttgttttcacgcttgagccacgccatgcggacttcaaaaaactcgtcaagattggacgacacgatgcacaggaagcgcaggcgttccaaaagggggacgtttttgtcttccgcctgtgccaacacgcggcggttgaatgccagcaggctcagttcgcggcagaggatgcggttttgttcggtcataaggttctcccaaagatggttgttgttcggtcggagcgggcggacaatgccgtctgaaggcttggcggcatctgcgccggtttcaggcggcatgacgtgacggacggtctgtttcaggcatcggggcaatgtgaaaacggataccggcacgtgcggtatccgtctgtttcaaatcacttccaacacaaaataatgacgcagtttttcgtacaccgcatcgctgacgttgatgcagccgttggtcataatcctgtcggacacggacggggaggcgatgcgttcgtttcgcctttcggacggtatctgattccaaacgcggtgcagggcgaaaagaaaatcgccctcctgcttgaaaccgatgacttcgccgccgtaaccgggcttgtcggtactgttcagcgtcagtccgaacgtccccttgggtgtggcagtgccgatgaggacggggtggcactgacggtcgtcggcaaaacagagttccgccttggatgtgtcgacgatgacttttttcttttgaatataggcactgaccgcatccggctgcccctgtgcgaatacgggggcagtcgtcagcaggcagcacaatatccctgaaagcaggcggggcggcatagcggcttattggcggatacgtttcggttttgccggcacgatttcgcggatgatgacttgcggctcggctttgggtgcgggcggcgggcagacggcatctttcgggaagacggggttccagtagaagctgcgggcaaatttgtctttatcgaaaatcactttgtattggcaggtagtaacgccttccacgccggaagtgttttcagggtcgatacccacgcccggggtgtggaagtggaacaggtaatcccattcgcgcacgccgtacataccttcgtcgtaatgcgggcggcccgggattttgtagatgtcgtctttggtcagaccggggcgcatctgatccagttcgtcataagtcgggaatgtgccgcgcttgttgtcgagcgttacggaatagggttccgggaaaaccggattgtcggtcgtgccgtcggctttgacgttgctttatggttgcgcaggcagacagaatgcctgccgccaatactgccaagctcggtttgacgatttgtttgattttcatatgcagaatccttttttacccgatgcccgtctgccttttgttcggaagagccgcatcaggagagttttaaacgtttgattttggttcgtaatattagcataaaaaacgtgcgtatcagtaaacgcggtgtatttgtacggcatacggaatgatgcgcgtgcgaatttacgcatcctgccggcaatttgccgattcgccgacatcggcaacctgttataattcctcctttaaattcctaacgttttcaagcgaaaaacaaaatgaccatgcaagaacattaccagcccgccgccatcgagcctgcggcgcagaaaaaatgggacgacgcccgtatttccaacgtctccgaagacgcttccaaacccaaatattattgcctttcgatgttcccttaccctagcggcaagctgcatatggggcatgtacgcaactacaccatcggcgacgtattgagccgcttcaaacttttaaacggcttcaacgttatgcagcctatgggttgggacgcgttcggcatgccggcggaaaatgcggcgatgaaaaacaacgtcgcccccgccgcttggacctacgacaacatcgaatacatgaaaacccagctcaaaagcctgggttttgcggttgactgggaacgcgaagtcgccacctgcaaacccgaatactaccgctgggaacaatggctgtttaccaagctgtttgaaaaaggcatcgtctatcgcaaaaacggcacggtgaactgggacccggtcgaccaaaccgtccttgccaacgagcaagtcatcgacggacgcggctggcgttcgggcgcgttgatcgaaaaacgcgaaatcccgatgtattacttcaaaatcacggattacgccgaagagctgctcaacgatttggacaagctggaacactggccggaacaagtcaaaaccatgcagcgcaactggatcggcaaatctcgcggcatgaccgtgcgcttcgccgtttcagacgacagcaagcaaggtttggaaggcgattacgcgaaattcctgcaagtttataccacccgccccgacacgctgatgggtgcgacttatgtcgctgttgccgccgaacatccgctggcaacagccgcagccgccgacaaacccgaattgcaggcatttatcgccgaatgcaaagccggttcggttgccgaagccgatatggcgacgatggagaaaaaaggcgtgccgaccggccgctacgtcgtcaacccgctcaacggcgacaagctggaagtgtggattgccaactatgtcttgtggggctacggcgacggcgcggtgatggctgttccggcgcacgacgaacgcgatttcgagtttgccgccaaatacaatctgccgaaaaaacaagtcattgccgtcggcgacaacgcattcgacgcaaaccgatggcaagaatggtacggcgacaaagaaaacggcgtattggtcaacagcggcgacttggacggcttggattttcagacggcatttgatgccgttgccgccaagctgcaaagccaaggtgcgggcgaaccgaaaacccaataccgcctgcgcgactggggcatttcgcgccaacgctactggggctgcccgattcccatcgtccattgcgaaaaatgcggagacgttcccgtccctgccgaccaactgcccgtcgtcctgcctgaaaacgtcgtacccgacggtatgggttcgccgctggcaaaaatgcccgagttttacgaaacttcctgcccgtgctgcggcggcgcggcgaaacgcgaaaccgacaccatggacaccttcatggagtcgagctggtacttcttccgctatatgtcgcccaagttttcagacggcatggtatcggcagaatccgcgaaatactggggcgcggtcgaccaatacatcggcggcatcgaacacgcgattttgcacctcctgtacgcgcgcttcttcaccaaactgatgcgcgacgaaggtttggtcaatgttgacgaaccgtttgaacgcctgctcacgcaaggtatggtcgtctgcgaaacctactaccgcgaaaacgacaaaggcggcaaagactggatcaaccccgccgatgtcgagctgactttcgatgacaaaggccgccccgtttccgccgtcctcaaagccgacggactgcccgtcgtcatcagcggcacggaaaaaatgtccaaatccaaaaacaacggcgtcgatccgcaagaactgattaacgcctacggcgcggacaccgcccgcctgttcatgatgttcgccgcaccgcccgaacagtccctcgaatggagcgacagcggcgtcgaaggtgcacaccgcttcctgcgccgtctgtggcgtaccgtttacgaatacctgaagcaaggcggcgcggtcaaagcatttgcaggcaaccaagacggtttgtctaaagaactcaaagacctgcgccacaaactgcattccaccaccgccaaagtcagcgacgactacggccgccgccagcagttcaacaccgccatcgccgccgtgatggaactgctcaaccaatacgacaaaaccgacaccggcagcgaacaaggccgcgccgtcgcccaagaagtattggaagccgccgtacgcctgttgtggcccatcgtgccgcacatctgcgaaaccctgtggagcgaattgaacggcgcgaaactgtgggaagcaggctggccgacagtcgacgaagccgccctggtcaaatccgaaatcgaagtgatggttcaagtcaacggcaaactgcgcggcaaaatcaccgtcgccgccgacgcctccaaagccgacctcgaagccgccgcactcgccaacgaaggcgcagtgaaattcatggaaggcaagcctgcgaagaaaatcatcgtcgtaccgggcagactggtgaacatcgtcgtctaaaccgcttttaaggtttagccatacggataaaggccgtctgaaacttggaaacagggtttcagacggcctttttaaggcagattgggttgtctgcaagacagacctcaaatatagcggattaactttaaaccggtacggcgttgccccgccttgccctgctgtctgcggcttcgtctccttgtcctgatttttgttaatctactaaaaattaatctcaaaatccaaaatatgaatttatttttcgatacccaattgggaaagcaacaaaataaagcaacccacaaaatccgtgtaatgagcgaggcttggctggaaaaaaacggctattgcccctgttgcggaagcaagccgatgcagagatttgccaataacaaacctgttgcagacctcttttgcccaaattgccacgagcaatatgaattaaagagtaaaaatcaaaaaaccataggcaacagcgtgcctgacggtgcatatcgcactatgttggagcgcatccggtcagataccaaccccaactttttctttcttgcatataaaaaagcggattactccatacggcaattggtgcttgtacccaaacatttcatcacgccggatatgattattcccagaaataaaggcattaaaaaccgaccgcaccacattatgtgttccatcaatctcgcccctttgcctgaaagcggaaaaatattcttaatagacgattcccgcattatcgaacccgaaaccgttctgaaaaaatggcaatccaacctgtttttacgcaaccaaaatgcggagcgcaaagactggcttttggctgttatgaaatgtatcgaccaactcaccgaagaattcacattgtcgcaaatgtatgaatttgaaaacaaactatccatccaatttccccaaaacaaccatatcaaagacaaaatccgccaacagttgcaaattttgcgtgatcaaaatatgatcgaattcattggtcgcggactttacaaaaaaatcgacaaattgcacccaactcccaaggcgttttgatttcaaatcatgatactgaatttacgagaaatatttattcttctgccattttaaaaacggttgaagtacaacgcaatattgccgcaaagggcagcagtcgtaaaaaagtcggagaattattggcaatttatgattgattttgacaaaccggctgaagaagctgccatttatcaaagtcgtttgaaaaaatcgtttcagacgaccttgtcctctacaacgaaaattcccttaacgtcatgcggaagatattggaaaaacatccaaacggctgttttgatatgattttcgcagacccgccttactttctttccaatgacggtttcagttgtcaaaacgggcaaatggtttccgtcaataagggcaactgggataaatccaaaggaatggcggcagatttggaattttacgaagaatggctccgactgtgttacgccttattaaaaccaaacggcacaatttgggtttgcggcacatttcataatatctatttaatcggctacctgatgcaaaccgtcggctaccatattttgaacaatattacttgggaaaaacccaatcctccccctaatttgtcctgccgtttctttacccattcgacagaaacaatcttataggcaaagaaaaataaaaaagctaaacacacgtttcattatgaaaccatgaaaacacaaaatgatggcaaacagatgaaatgtgtttggacatttcctccaccaaataaaaccgaaaaaacattcggcaaacatccgacacaaaaaccactccccttacttgaacgctgcatactatcggcttcaaatatcggagatttaatttttgacccttttatgggcagcggcacaacaggcgttgccgccttaaaacatggtcggagattttgcggttgcgaactggaagaagatttttttgaattagcaaagaaaaggttagaaaaatgattattggcggaatcggcggtgcaaggacacaaacaggactcagattcgaagaacgtacagacttacgaaagttgtttgaagaaattcccgggtacgacttaagaaaaacagatgataatgcgggttatgaagtttggtttaatggagaattgaaggcttattgtttcaaaaaatatgagttttaccgatttttggaaagactggaatacaatattaattggaaagaccatctgtctaaaagattactgcccgataatggcttatttatcatcatccgtgataccttatttattattgagatcaaattccaacaaactcccggttcagtagatgagaaattacaaacttgcgattttaagagaaaacaatatacaaagttagttcactctttaggttggcgggttggatatgtctatgttttgaatgattggtttacaaaaccggaatattaaagatgttttagattatattatcagtgttaactgccattaccaatttaacacgattcccttaaggtggtttggactgcctgatggtgaaacaaatgaataaataccatatttaaaacacaaccgttcaaggtcgtctgaatatcatttcagacgacctttcaccaatccccgccgttttccatctttctgctattgtgataaagtagcccgaccttttgttcaaaatacgcggattccgcgacactgaatgcagcatctgtcaaagattatttgaaaacggtcgagttaaacaagtctgccgacaatgtcgataccacatccaaaactatccgcagggtttaggcggtattccagagtacggtgtcttatgctgatgctgtaaacaatgcctgtatagaaaatctaaaacggttgttgccgaccgttatgccggtttatgagcaaagtgtcagaaataaggggcgcgttaataaaaaacgtcggcgttaagggaaggggatcgagaatttgagccgttgtttcaaaatgccgtctgaaatcgtttgagattcagacggcatttaaacagttctgcgccccgcccgttttgccttcaagcccgcgccgcttaaatctaatccccctgcaacgggcgcaaaaaatccccgtgcctcgcggtcggggatgtttcgggtttcgcgcccgtctgcgccgtgccttgctgtcgggctatgccgtctgcaccgccgccgtttcggcttggtttgatgcggtcgggcatttgtgcggctatgccctgatattcggttcggcggtcttgcctgtcttggcaggcatattcagcagcgcgtctattgtgaacttgctgattttgccgtttgccaagtcggctacgcaatggcttcgatacccttgtttttgacgatggtcagcagcttcaacgccgcgccgctcggctttttaacgccccgctcccaagccgaaacgtgattttttcccacgttgagatagatggcgaaagcggcttgcgatagtgcctccttctccctgattgccttgatgtccccgccgctcaacggtttgatttcggtcaggcaggacttgtcaaagccgcgcatagtctttttgtcgattgcgccgatgttgtaagccccttccatcatttcatgaatggcggctaatgcctcgcttttgtatttcataattctatctccgtgataatgccgtcttctttcaaagccgccagctctgcccgcgtgtatttcagataatatgcggcggcttttcggtaaacgtccagttctttatccgaaatgttttccctgtcgttcttggcaaaggcgtaaacgaaaaatgccctatctgcctgtttgaacaatatcaggctgcgatagccgccgcttctgccttgtccttgccttgctatgcgctgcttaatcacaccgccgcctaaatctgcgtctatcagcccgttatccgcccgctctaccgcttccagcagctcggaatcgttgattttgtgcttcttggcaaatttcactatccattggtttttgaatatccgcattgtgtagccgttgattagtgatacttggaattataccagagacagacaacacggcaagctgccttttttatgccccgcaatttctccgtttatgccgcctgaaacaccggcggctaacctgattattttttaatcaatcgcttttaatggctcaaattgcgtttttagcgcgtttcgctgtcttcctatgccccgtatataaccaagcggtttaaccgccattcctgctcaaaataggcgcggttccgtgcgttttggcttttcattccgctacgctcccactgccaagacggtgaaaaaccggaaaaccccaaaagttgttaccgattcgttaccatttgttaccgcatttgttaccaattttttatctttttcttattttatagtgaattaaatttaaaccggtacggcaaggcgaggcaacgccgtaccggtttaaatttaatccactatagtataggttttttccaaaaacccaaaaaaaaccgctctgcatcttggacggtttccccctcattccctacggtgcgtcagtattccccgcaagctatttcccgcttggcattcctgatttggtggtcgttcagctttatttttacggtattttctcgcggtattttcggatgctgtaaaaaatcaggttagttcaattagggcggattggacgggattgcactgtcaggaagggggacggcaggataacaatcagcctgaaatccttgtattgattgggattggttgacggcattagacaggattaaacgaaaaaaaacgcttagaatttctaagcgttttgtgtgttggtgccgacagcgagatttgaactcgcacagcctacggccactaccccctcaagatagcgtgtctaccaatttcaccatgtcggcatttgaaaaactgttatttctgctgctgaggaacaggggcagaaggttcggtattgcttacgggtttgggtgcttgctgagtttgttgtacgttgctgaagtccaaaccgtgttttgtcgtgtgggtgtgaatatacaccatagccatgcaggttgcaaagaaaaatgttgctgcaacggcggtcNagcggctgaggaagttagcgttgccggcagagccgaatacgccttgcgcgctgccgcttcccgatccgaaagtcgcgccggcatccgcgcctttgccgtgttggagcaatactaacacgatgacggccaaagcggaaattatattaacaatccaaattagggttttgaaggcttccatatttttctacgcattttgtgcggcactgatgatggcggtaaaggagtcgtacgacaatgacgcgccgccgacgagtgcgccgtccacataaggtactgcgaagatgtcggccgcgttgtccgctttcacacttccgccgtaaaggacgcggattttaacatcgcttccgcacaaagacaagatttctttgtagatgaatgcgtgcatatcggcaatctgttcgacggtggcgactttgccggtgccgatcgcccagacgggttcgtaggcgacggcgatgtttttggtatccagcccttgcaggatggaaagctgatgggcgatgacttcgtgttctttgccggcttcgcgctcttcgaggctttcgccgacgcacaataacgggatgagtccgacgttgaggacgttttccattttgcggcgttggatttcgtttttttcgccgaaataaaggctgcgttcggagtgtccgatgaggacgatgtctgtgccggtgtcggcgagcatttcggcggacacttcgccggtgtacgcgccgttgtcggggaagcggctcacgtcttgggcgcaggtgaggatgcggttgtttaagacgatttgcatggcgttgtgcagttgcagcaggtaaacggtcggggcggcgagtccgatgaggacgcgttcggcggtggggaggatgcggaagcggtgcatgagcgaattgttgttctggagccggccgttcattttccagttgccgatgacccatttttgatcccacattccgatttggtgatacatcttttttgctccgtgtcgtgttttttctgtctgccgcgtgtggcgcgttgcaatgtgaagtttagtggatatgcggcgggttcgcaacttggggcgggcggctgcgggggcggtttggaatgttgtttcgggcaggttgttttataatggccgcctgatatgtatgcaactataggagatgtgatgcacgcgcttcatttttcggcttcggacaaggccgcgctttatcgggaggtgttgccgcagattgagtctgtggtggcggacgagacggattgggtggcgaatttggcgaacacggcggcggttttgaaggaggcgttcggttggttttgggtgggtttttatttggtcgatacgcgttcggacgaattggttttggcaccgtttcaggggcctttggcgtgtacgcggattccgttcggtcgcggggtgtgcggtcaggcttgggcgaagggcgggacggtggtcgtcggggatgtggacgcgcatcccgaccatattgcctgttcgtctttgtcgcgttcggagattgtcgtgccgctgttttcagacggccgctgtatcggcgtgttggacgcggacagcgaacatttggcgcagtttgatgagacagatgctttgtatttgggcgaactggcgaagattttggagaagcggtttgaggcttcgcgccaggcggcttgagtgatggaaaggggcgggcggcgcgtgccgaagttggcgcggcgggagtgtggttttataatgcctgccattgttgaaacaattatttgacggagcactaaatggattttgaaaaagcgcggttcaatatggtcgaacagcaaatccgtccgtgggatgtattggattttgacgttttggacgctttggcggagattccgcgcgagctttttgtcgatgaggatttgcagggtttggcgtatgcggatatggcgctgccgcttgccaacggtcataagatgctggagccgaaagtcgtggcgcggctggcgcagggcttgaagctgacgaaaaacgatacggttttggaaatcggcacgggttcgggctatgcgaccgcgcttttggcaaaattggctggtcgtgtggtttcggacgacatcgatgccgaacggcaaaagcgcgccaaagcggttttggacggcttgtctttggaaaacatcgattatgtgcaaaataacgggttgaccgaactttccgcaggtgcgccgtttgatgcggtttacgtcggcggcgcggtaacccttgtgcctgaagtgttaaaggaacagttgaaggacggcgggcgtatggcggttattgtgggacgcaggccggtgcagcgcgcgcttttgattacgcgcaggggcgatgtgtttgaagagaaggtgctgttcgatactttggtggcgcatttggacgacaaggatgcccatcctttcgacagttttaatttttgatgttcggattgtgatgccgtctgaaagcgggtttggggcttcagacggcattttgcttggtttttttcggggggtttgtgatggatattgtgcaacttccgtcggcggcattgaaggcgtggatggacgaagggcggatgttttgtttgttggacgtgcgtacggatgaagaagcggcggtttgttcgctgccaaatgcgctgcatatcccgatgaatctgattccgctgcggcaaaacgagttgccggacgatgtgccgcttgtggtgtattgccatcacggtatccgcagcctgcatacggcgatgtatttggcggaggcgggNtttgaaaacctgtacaaccttcagggcggcatcgacgcgtgggcggttgaggttgacgcggaaatggcgcggtattgaaggcggcttcagacggcattccttaaatgcgtgtacctctggtgttccataaaggtcgtctgaaagtgcagcttctgcgaagctaaagcgcagtatcaacgaagttaaaatttgcctgaaccttaaaggcagcctgcaccccaattccctcgccccgtgggagaaggctagggagagggcggcaaactgcaggtttgcttgggcggcattttcaatgtgcaggctgcttttagcttcgcagaaactccgttttcagacgaccttatttaaaccgataggtaaacgccgcgttcactgtccgcagtgcgccgtggctgtggcggtcgggctgggtgcggtagtgtttgttgaacaggttgtccacgttcagcgacagttcggtgcgcggattgaagcggtaacgcgccatgatgtcggcgacggcgtaggctttctggcggctgttggcgacggcgcgggctttggcggcggggttggggatgtggagcgcggctgggtcggtgtgggtttcgccctgccggcgcacacccgcaccgatggtccggccgctgggggcttcgggggctaagtggtaggcggtgaagagtttgaagctgcgttcgggtacgctgtcggggttcaggcggctgccgtcttggtcgcggggtttgctttggctgtagcctgcctgtatctgccattcgggcgtgatgcggccgccgacttcgatttcccagccgtgggttttggcttggttggcggcgcgatagtaggtgttgccgctctggtcgcgtcctgctgcggtggcgaggttgtttttacgggcgcggtacacggcggcggatgcgttcagacgcccttcaagccattcgcctttgatgtcggcttccagattgttgccggttacgggtttcaggtagctgccgtgttcgtctttttgcaattgcgggacgaacaggctgctgtacgagccgtaaagcgacaggttgccggtcagatcgaacacgatgcctgtgtagggggtgaaacggttggcggacacataggtcatgccttgtgtgcggctgttgtagctgcctgcgcggtagcggctgtatctgccgccgagtatcagcgaaaggttgtcggcggcgcggaaacgggtggcgagatagccgccgatttgccgcctggtgtcgtattgcgggatggtttgggcaaacgatgatggctgcggataggcgcccgtgcgggaaaattcgtaggcgttgggaatggcgttgggaatgatgctgcgttcgccgtatttgttgctggcgtatttgtagccgttgatacccgcgattaaatcgtgctcgcggccgaacaggcggtatttgccggtcaatgacatgctggcgctgtgggtgcgcggatcggcgtgccaataaccgggaatcaggtcggtggcggcagtgctgtggtcgatggaaagtacgcctgccacaccgtagggctggcggaagcggctacgggtgtagtcgtattcggctttgagtttccagtcttggttgaagcggtgttctatgccggcgaacaggttgagcgcacggttgcggctgttcgaccaatttgtggcggggttgtcttttgggccgaaggcggtggcataaccttggctgtcgtacacggcgtagctgagcggcgcgtctgcggtttctttcgcctgctggtagtccatgcctgcgtggacgcgggtttgcggtgcgatgtcgtattccaaaatgccgtagagttcggcatcgcggctgcgttcgagctgccgccacgagtcgccgcgtccgaaggtggaaaccaggcggccgcgcagcgtgccttcggcgttcaggctgcccgatacgtccgcgcccagcccgaaatgtttgcggttgccggcttcggcgcggacttcaaacaatggcttgcgggtcgggtgtttgcgtaccagattgacggtggcagaaggctcgcccgtgccgtccggcagccccgccacgccgcgcacgacttctacgcgctcataggcggcggtgttggcattgcccgtatcggccagcgcgtcggcaacggggatgccgttgatttggtagttggcgatgcggctgccgcgcgcgaacaggtagttgtagcccgcgcggtcggagccgtaaatctggcggctggtgccggtcgcctgcaacagggcgcggtcgagcgttttgatgttttggtcgcgcatttgttgcgatgtgatgacgctgacgctctgcgggatttcgcgcagggtcatgggcagcccgaacggggtgtgcgtgccggaaacggtgtagccgtcgttggaactcgcggtgcggtcggcggtaacggtgatggtcggcaattcggtgctttcctgcggtttggggtcgtctgaaacagaaacatcggcctgcgcgtacacgggtagcagggcggcaaaaagcagggagtatttgaagcgtgtcatggggtttcctttgtgtgttggtgtgcggtggggttgtatagcggattaactttaaaccggtacggcgttgtcccgccccggctcaaagggaacgattccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatcctctatgcttttggcatattgaaggtgtaggctgcttttagcttcgcagaaactcagcttccttcggaaacttcgttttcaggcggcctcggacgggtcgggcagatcaatcagcaccaccgagcagccgttttccgaacgcgggcggtgcgacaccgacttcggcacgaccgccatctcgccctcgcgtatcgtcatgttgccgccgtcggcgaagtccaccgccatgtcgccctccacggcaaacagcactttgtcgctgtatccgtgcgtgtgccagccgtaatcgcccaaaagtttgaccaggcggaattggaacccgtggcggttgatgatttcgggctgccagtattctttgatggcggcaaggtgctgtttcaggttgatggtttcgttttgcatggggttctccttgtggtttgttttgaataaaactactgcgccgcaacgggttctgccttttcaaacgccgccttcaactgttccgccgcctgtatcaactgc---------------acaatgtagttcgcggcaggcatgacgatgatttgcttgcgcttccaagcgttcgtgccgcataccagcgcgttatccaacacttccacggcagccggcccttcctgcccgatggcggcggtgcggtcgatgatgaaaatccagccggggtttttctctttgatgtattcgaaggaaacgggctgcccgtgcccttcgttgcgtaaagattcgtccacgggcggcaggccgatgtcgccgtgtatccaacttgccaaccgcgattgcgtgccgaaggcggacaccttgttgcctgtaaccgacagcaccagcccgcgtcctttgcctttggcggcttcgcgcttttgggcgaacagcgcgtcaatctgcgcattcaattccgccacgcgcgcttccttaccgaaaatccgcgacagggtctccatctgcttctcgccgctggtgcggatattgccgttgtccaccgtcaaatctatggtggtcgcgtttttcgccaactgttcatacgcttccgcacccggcccgccggtaatgacaaactgcggattgtggcggtgcagggattcgcaatcgggctcaaacagcgtccccaccgttgccgccttgtcaaatgcaggctgcaaatagtccacgcgcaccggcgcggtggttgcgcccacattcacgcccggctcggtcagcgtatccaacgccgcccagtcgtacacggcgacgcgttcgggattcttcggcacaacggcatcgccccgcgcggtcggcacggtcagcgtggcgacaggtgtggatgcggcttgggatgcggcggatacagttttttcggcggcaggttcgggcgaacaggcggccggcaggacggcgcaggctgcccaataaaaacgcggtttcacggtgtgcggttcctttgcatacgaataagaatgtttattattaagcaaacaacctgcagaaaccacgccgcaaaacgcaaaattcccgatacggcaaaacaaattcccgaaacggaaaaggtcgtctgaaacaccctttcagacgaccttttccgttccaaccaatccctgcgcttgattattggtaataattcctatttaattcatttgttagacaactcgttcctatccaatcatgaacaccgccgccatctaccgccagtaccaaacctatgtccgctccgataaatccggctgggcgttggacggctgttccgacagcgcactcattgcgcaggcaaaacagcccggtttgcatctgaaaatgtgcatcaaccgcttcgactcgggcattaccttatcacggatgcgcggcggcggaacgggtgcgtttcccaccgaaatccacaatttcagccacaactgcgccttgttcgtcatggtatcggggcagaaccggttacaaatgggcggcagggaataccgcccgtctgccggcgaaatctggctggtacgcggcgaactggcggacgtatccgaaaccctgctgccagacagcggcggcatgtgcgcgctgcatttggatttttcgctggaaaaactgcgccgctggcacgacgaaggtttactggacgaacgcctgttttcgccgcaaacgataggccgattcgccctgcaacggctggcgcaaaacgcggggacactgacggcggcggcctgccccctgctgcaacgcccgttcgaatcggacggcttcggcctgctcgccgacgaagccgacgcgctggaactctccgcccgattattacgcttcaccttccgccgccacgacaacggctaccgccgccggcgcatagacgaagccgccgatattttgaacagcgaattcgcccgcccgctgaccatcgccgaaatcgcccgccgcgtcgggctgaacgaatgctacctgaaacgctatttcaaagcgcaaaccggcgaaaccgtcgccggacgcctgcgccgcctgcggctggaacacgcgctcgccctcatcgaatcgggcagcaccatccaagccgcgatgcacttttgcggctaccgccacgcgggacggttcaacgaagcgttcaggcggcattacggatttttgccttcggatgtgaaaaagtgctgatgggccgacggcatagatattttgatttgaaacaaccattaaaaaagatcgtctgaaaaagcaatttcagacgatcttttttcattcgcggcggcagtgtcgccccctgcccttatcccaaaaattctttcaaaaacagcaacacgcaggcgagtttgtcggcggattcgcgttgggtgccgttgccggtatggccgccgccgtcaggcgagtagagccaagattgcggcgaggtttcgcgcagtttggcgtagaatttgagcgcgtgggcgggatggacgcggtcgtcgctgaggctggtggtaatgagtgcgggcggataatcgatgccgtctgaaagattgtgatacggcgacaattcgcccagccggcgtttgcaggcttcgtatttctgcggattgccgtattcgtccgtccaacttgaaccggcggacagcagcggataacggatcatatcggtcagcggtacttcgcacaccagcgcaccgatgctttgcggttcgcgcacgaaggcggcggcggtaatcaggccgccgttgctgccgccctgcaagccgatgtgtttgggcgaactcatgccgcgttcggacaaatcacgcacgactgccaacaaatcatcaacgcttttgtgtttgctgattccctgcgccgcctgatgccagcgcgggccgaattctccgccgccgcggatgtttgccaatacaaaggcattgccctcttccagccaatatttgccgacgctgcccagataatgcggcaattcaggaatgccgaaacctccgtaagcatagactaaggtcggcgtgtcgggcgcggcgtttttgccgacgtggaaataaggaatgcgttcgccgtcggacgacaccgcccaaaactgccgcacttcgatgccgtctgaaacaaactgctgcggctggaggcgcatgacggtcagttccatcacgttcaaatccagcgcaaacagcgtcagcggcgtggtgaaatcgctggcggcaagataaaccacgtcgccgccccacggttggtcggtcatttccaacgcgcccgagggcaggtgcggcaactcggcttcctgccatttgctgtcggcaaaccgccacgctttcagacggccttgtacattctccagcaggcttgccaccacaaaacgcttggtcgtttccacgctttccaatgcctgcgtttcatcgggcgcaaacaaaagctgcgccgccccgagttcgccccgattcagtttcaccgccaccaacgcgccactcggatagctttggttcgcgcggtgccagtccttgcgcagcgtcagcaaaagatgtcccgccagatagccgaccacatcgcaatcattaggcaggttcaacggtttcgccccgccttcggacgacacctgcaaatacgtcttggtgtaaaaaccgtccgacgcttcaatcaaatcaatcggcgaaccctgcggatcgaggtaacgccacgcgtttaccatcatcgcgcctttatcgatttggtacgccggcaggctttcctcgaaactcttgccgcgttccaccagccacacttcgcgcggatagcccgattcggtcaactggcgttcgtcccaagccggacacacccacacgctgttttcatcgcgccacgacacatggtttttgcctgccggaaagtgaaaaccgccctctaccaattcccctgcttccaaatccacttccagcgtatacgccgtatcgccgcccgatttgttcaaagtcagcagcgcgcggttgggctgctccaccaagtgcgacacgccgcccaaatacacatcgtcgccgagcaactcatcgaaatccgccaccgaaaacaggattttccactcgggatagccggaacggtaggtcgccgccgtacacatgcggtacacgcccttcggatattccgcattctgatggaaatggtacatccgcgcgcggtgttcctgacaaaacggaatctgccgcgtgtcctgcatttgattcaaaatgccgtctgaaagtgcgcgcgccttgtcgttttctaaaaaacgcgcgcgcgtttcggcattcgcttcagcagcgaagttttgcgtttcggcggaatcgaggttttcaaaatggcggtaggggtcggggtaggatttcatcggggtccttgagggtcgggcaggtctttgtcatcggggaaatgccgtctgaaacggggttcaggcggcatttctgcggcggctttccgttgcggtcagcggtgcaggcgacgcaccagaatatgcgggtttcgtccgttgctgcggtagtctttgcgccgcgtttcgggcagctcgtcttccgatgccgtctgaaagccgcgttcggcaaaccattcgccggtatttgtggacagtgcgaacagcctgcttatgcctatgccgcgcgccttatcgataatgtgggcaagcaggcgttcgccgtagccgccgtcctgtgcctgcggcgagacggcaaggcaggcgatttcgccgcaatcggcttcggcaaaggttttgagtgcggcacagccgtacaggttgccgtcgtgttcgaggatggaaaattcggaaatgtggttttcgaggtattcgcggctgcggtgcaataggatgccctgttcttccagcgggcggatgagggcggcgatgtgcgggatgtcgccgctgtgcgcctgccggatggagacgaaggcttctttggcaatggacgtgccgatgccgttgcgggtgaagagttcttgcagcaggctgccgtcggcggccccgttgaggatttggacgcgatgcacgccgccttcgagcgcggcaacggcggacgaaatcagtcgtcgggtttcgctggcggcgtgttccgccagcgattgcgcttcctgtgccgagagggtttcggcgagcgtgccgtcggggcgggaaatgccgtctgaaagggtcaggtaaacgagtttttcggcttgaagcgagacggcgacggaagcggcggcctgcaccatatcgagattgaaggttttgccgccgtaggaatgcccgagcggcggcatccagacgatattgcccgcgtcgagttggaaacggagggcggcggtgtcggttttgcggataacgcccgcgtattccatatcggttccgtcaatcacgcctatcggacgggcggtcaggaagttgcccgatacgagcgggacggaaggcgcgcgcgcgaatcctgaaacgctgccgcacaatgcggcttcaaaacggctgcggacggtgccggcaaactgctgcgcctgtccgagcgaggtttcgtcggtaacgcgcaaaccccggcaataatgcggcgtgcggccttgcgcggcggcgaggcggtcgaggaagtggtacgcgccgtggatgaggacgagtcggatgcccagttgcgacaacagcccgatgtcggcggcgagcttatttaaggtgccgccttcgagcaggcggccgtctatgccggcgaccagtgtcgtgccgcgcatttggcggatgtagggggcggcttcgcggaagtgggcgacaaagctgtcgggcgcgttcataggatgaagaggtaggaaagctgcataatgaggacgataagtgcgaacagggttgcaatagtccagttgagcccttcctgacgggcgggcggtacggaaacctgcggtgcggcggcaggtgcggcagcggcggttgcgggcggcgtatcgtgcagggttgtaccgccgttgaggatatcggcgatttcgtcgcgggaaatctgtttcttgctaatggcgtgcgtgccgatgcggtggacgagtttgacatccgaaacagcttcgggcaaatcgttgaatataggttctttcgtgcttgccagatggtctttggctttaaacagcccttcgcatttttggcagacgacgaagccttgggcgacgttgagctgggtttctttgacccagaggcgggttttgcagtgcggacagaaacaggcgggcatgatgttttctcggtgtgtgtcggtttgatgccgtctgaagcggcaggtggttcggacggcatatgctttatttttattctacgccgtactgccggcggtaggtgcggacgggttcgaggaactgtccgaattcggggttgttttgcaacaggataaacaaatcgttcaggctggcgatgggggcgacgggcaggccgtattgtttttccacttcctgaacggcggacaattcacccgtgcctttttccatgcggtcgagcgcgatggcgacaccggcgggggttgcaccctccgcttcaatcagtttgattgattcgcgtacggatgtgccggcggaaatcacgtcgtcgataatcagcacgcgccctttaagcggcgcgccgaccaacacgccgccttcgccgcggtctttggcttctttgcggttgtaggcaaacgggacgttcacgcctttttccgccagcatcatcgcggttgccgccgccaaaataatgcctttgtaggcggggccgaacagcatatcgaatcggatgccgctttcaatgatggattgtgcatagaattttgccagttgcagcgtggacgcgccgtcgttgaagaggccggcattgaagaaatagggcgaccgccgtccggctttggtggtaaattcgccgaatttcaaaacattttgggcgagggagaatttgaggaaatcttggcggaaatcagtcattttgtgctttctgtcagatattgggacgcagttgcgattctaccgccccgtgcggcgcgcttcaactgccgccgccttgccgcaaggcgcgtttcaactgtttcaacacctgccagtttcgggctttgagttcgggttggcgcaacagccgggcgggatggtcgatgatgaagaagggacggctgccgcacaaagtttcaatcatcgcctgccgttccaggttgacaaacgcctgtccgaggaataggacggcgggggcgcggcagccgtcgagttccccggcgatttgacccagcgcatccgcgacggcctgttcagacggcatcgggttaccgacggcggcggttttcacccaacaggttttgtggacataggcggcatccagtcctgcggctttgaggatgttgtcgagcaggatgcccgctttgccgtggaacagttgcccgtaaaccgcatcctcgatcggcggacacaggctgacgacggcaagcttggtaatgcccgaagcggcgggaacgggggcgatgccgtctgaaaggccgggcgggggcgtttcggtttcaggcgcgggtttgcgcgtatgtacggcggcggtttccaacgctttcatcgtttcgagccgcgcctgaacgttatggggttgggaagggcggatcgtggcggcgcggacggtttggggacgtgcctgtgccggggttgcgggtgtgtttttgggcggcaggacggcggcggcctgtttcagccacatcggacccaagcccaaagcctcgtgcaggtggaggtagcgcgcgcttaacatattttctccattaagacggcatcttcggtttgcccgtcggcggcgcagtaatagtttttccgcctgcccgcaatgctgaagccgtgtttggtatacagtgcctgtgcggcggcgttgcctgcgcggacttcgagcagcaggcgttgcgtgccttcgggcagatgtgcgtaccaatattcgagcagggcggacgcaacgccccgtcggcggcattcgggcgcggtggcaatcaggtgcagttcggattcgtcgggcaggttctgccaaacgataaaggcggcaatcctgccgtctttttccgcaaggaaaacctgttcggacggcgaaacaagcgcggactcaaattggcgttgcgtccacgcggacgggttgcagacggtatcgagcgcggccagtgcggcgcagtcggacggtaaggctgggcggatgttcatgttcgtgccttccgttccgcctgttctttggcagtcagggcgattttgttgcggacgtagagcagttcggcgtgtgccgcgccagttgcgggatagccgccgagggcgagcgcgagaaaatcggcggcggtcggcatatcgggtttgcctgagaagggcggacggttttccagtgcgaacgcactgccgatgccgtctgaaaagacgtacccctcggggagggcaatgtctgccgccctaccgacttgataatcgctcaaacggcggcggttcagcgtgtcgaaccacgcataaaacacttcgcccatacgcgcgtccgcagcggcgagtatgcagctttgcggcggcggcagcgaggcggcggcatcgagcgtggggatgccgattaaaggcgtgtcgaacggcgttgccaaaccttgcgccacgccgatgccgatacgcagtccggtaaacgcgccggggcctttcgcataaacaatcgcccccaaatcggcggcggtaatgcccgcatttcggaatagggtgcggatttccggcaggatcagttcggactggcggatgccgacttcctgatggaacagacggatttcgccgtcggcgcgcagcgcgagcgacaaataggaagttccggtatcgacggcgaggacggggcggttgaaatcggcttgcatggtgtggttctcgttggttcagacggcattatatagtgaaatcggcttgcctgccgtgtcgtcgtgtcctagggcggtatggcgcaaaaatgccgtccgaacggtaaattatcgtgttcggacggcatttttcaaatactactgtttgtcggcgatgccgatttcgtgaaccttttcccctatcttcacggttgccgagccagcgatttcttgggcgcggccgccgaaaagggcgaggcggtaagtgcctttctcttcgccgccgtagcgcgtgtcgcccaaaatgacggcgtgtgatttttcatctgctttgagttcggcggaggcaagctcaacattctgctcgggtgttttcaggtgttcgattttgccgtgtccctgtttggcggcgaaatctatggtataggtcagttttccgccggcatcgtcggagctgaatgctttgccgtgatactcggctttgccgtcaggcagttggttgaaggcggtatgttctccgcccaaatcgctgacaaggaaggagcgttggtttatcaggctgtcgattttgtcggggttgttgattttttcaatccgtagggcaacgacggcggagtgatcctgtttgtatatttgaaattcgccgcttgccagtgtgatggtttgtccgtccacttcgattttttgcacgaagtcgaagcggctgattttgtcgttcttcagtttgcccgtgttgaggctgttgtctttgccgccggctttgaaagttttttccgcaccttgtgccgacagggtcagtgttccgtttNggggaatggaggcttccaatgttagggatttcaaacctttgtctttatggtcgagcggcgcggttaatgcatcggcaagccccgtgccgatgtcggcggcgacaccaccgcctccgcccctccgctgctgcaggcggtcagaatcagggccggcggtcaaagaaaggcagcagaaggtagttcggttcacaggtttactcctagtcatacacagaatagataatatataaacgttttggttatggtatctttttttgcatactgcatcaatgaggcaggtcagagaagcaaaaatcaaatgccgtccgaacggcgttcagacggcattttgtttacaggcaacctgttatttgacgatttggttcaattcgcccttggcataacggcttgccattttttccaacgaaacaggtttgattttgcctgcctgaccttcgcaaccgaacgcaagataacggtcgaggcagatttgcttcatcgcttcaatggttttgcccaagtatttgcgcggatcaaagtcggacgggttttcggcaaggtagcggcgtaccgcgccggtggaagcgaggcgcaggtcggtatcgatgttgactttgcgcacgccgtgtttgatgccttcgacgatttcttcaaccggcacgccgtaggtttcgccgatattgccgccgtattcgttgatgactttcagccattcttgcggaacggagctggagccgtgcatcacgatgtgtgtattgggcagggcttggtggatttccttgatgcggtcgatacgcaatacgtcgcctgtgggcggacgggtgaatttgtatgcgccgtggctggtgccgacggcaatcgccaatgcgtcaacgccggtatctttaacgaaacgcacggcatcttcaacgctggtgagcatttggtcgtgtgagagtttgcctgccgcgcccactccgtcttcttcgcctgcttcgccggtttcgaggttgcccaatacgccgatttcgccttcgacggacacgccgcaggcgtgggagaagttgacgacggtacgggtggcgttgacgttgtattcgtaagaagaaggggttttgccgtcttcgagcaaagagccgtccatcatcacggaggagaagcccagttggatggagcgttggcacacgtcgggcgatgcgccgtggtcttggtgcatcacgacggggatgtgcggaaattcttcgactgccgccagaatcaggtggcgcaaaaacggcgcgcccgcgtatttgcgcgcacctgcgctcgcctgtacgatgacgggcgcgttgacttggtcggcggcttccataatggcgcgcatttgttcgaggttgttgacgttgaacgcgggcaggccgtagctgttttcggcggcgtggtcaagcagttggcgcatggatacgagtgccatttgtgtctccttgggcaataggtaaataaggcggattataatgttttttacggcaaaaaaccataaacggctcattgattttatattaacgataacggcgggcagatggggcggattttgggcggttcgggattttggtgtgttgtttatgataatgttttcactggttttttgatatttgtgtgggacggttatggttttggacgggtttgcggcgtattttgacgcttatttggaaaacatcgtgcgcgagggcaagtcggagcacacggttgcggcataccggcgcgatttggaagaactgtttgcactgttggcacaaatgccgtctgaagatgcaggcggcgtgccgcaggacttgtcgcggcgcgattttacggcggcgttgcggcggctgtcgcagcgcggtttggacggtcggacgctggcgcgcaagctgtcggcgtggcggcagtattgcgcctggctggtcaaacgcgggctgatgcgcgccgacccgaccgccgacatcaaaccgccgaagcagcccgagcgcgtacccaaagccctgccgcaggaatggctgaaccggatgttggatttgcccgtggacggcggcgacccgctggcggtgcgcgaccacgcgctgttcgagctgatgtacggcagcggtttgcgcgtgagcgagatacacggcttgaatgcagatgatgtatatttggacgaagcgtgggtacacgttaccggcaaagggcgcaagcagcgtcaggttccgctgaccggcaaaagcgtggaagccttgaaaaactatctgccgctgcgtcagacggcatcggacggcaaagccctgtttaccggcaggaacggcacgcgcctgagccaacgccaaatccaaaaacgcctcgaatcgtgggcggcgcaatacggcgacggcaggcacgtttcgccgcatatgatgcgccacagctacgccggccacctgttgcaggcttcgcgcgacatcagggcggtgcaggagctgctcggacacagcagcctttcgaccacgcagatttataccaagctcgatttcgaccacatcgcccgcctctatgacgaagcccacccgcgcgccaagcggcaggacgaatgacgtacggcaaaatcagccgtcagccgcacgctcttgatatataattgaccgttgcacccggacgacacataaaaaagacacaccatgaacccaagccccctactcgacctgattgacagcccgcaagatttgcgccgcctggacaaaaaacagctgccgcgccttgccggcgagttgcgcgcctttctgctggaatctgtcgggcagaccggcgggcatttcgccagcaatctgggtgcggtcgaactgaccatcgccctgcactatgtgtacgacacgcccgaagacaagctggtgtgggatgtcggacaccaaagctacccgcacaaaatcctgacaggcaggaaaaaccagatgcacaccatgcgccaatacggcggtttggcgggttttccgaaacgttgcgagtccgagtacgacgcgttcggcgtggggcattcctccacctccatcggcgcggctttgggcatggcggcgacggacaaactcttgggcggcgaccgccgcagcgtcgccatcatcggagacggcgcgatgacggcggggcaggcgtttgaagccttgaattgcgcgggcgatatggatgtggatttgctggtcgtcctcaacgacaacgaaatgtcgatttcccccaacgtcggcgcgttgcccaaatatcttgccagcaacgtcgtgcgcgatatgcacggactgttgagtaccgtcaaagcgcaaacgggcaaggtattagacaaaatacccggcgcgatggagtttgcccaaaaagtcgaacacaaaatcaaaacccttgccgaagaagccgaacacgccaaacagtcgctgtcgctgtttgaaaatttcggcttccgctacaccggccccgtggacggacacaacgtcgagaatctggtggacgtattgaaagacttgcgcagccgcaaaggccctcagttgctgcacgtcatcaccaaaaagggcaacggctacaaactcgccgaaaacgaccccgtcaaataccacgccgtcgccaacctgcctaaagaaggcggggcgcaaatgccgtctgaaaaagaacccaagcccgccgccaaaccgacctatacccaagtattcggcaaatggctgtgcgaccgggcggcggcagattcccgactggttgcgattacccccgccatgcgcgagggcagcggactggtggagtttgaacaacgattccccgaccgctatttcgatgtcggcatcgccgagcagcacgccgttacctttgccggcggtttggcgtgcgaaggcatgaagcccgtcgtggcgatttattccacctttttacaacgcgcctacgaccaactggtgcacgacatcgccctgcaaaacctgcccgttttgtttgccgtcgaccgtgcgggcatcgtcggcgcggacggcccgacccatgccggcttgtacgatttgagcttcttgcgctgtgtgccgaacatgattgttgccgcgccgagcgatgaaaacgaatgccgcctgctgctttcgacctgctatcaggcggatgcgcccgccgccgtccgctatccgcgcggcacgggtacgggcgcgccggtttcagacggcatggaaaccgtggaaatcggcaagggcattatccgccgcgaaggtgagaaaaccgccttcattgccttcggcagtatggtcgccaccgcattggcggttgccgaaaaactgaacgccaccgtcgccgatatgcgcttcgtcaaaccgatagacgaagagttgattgtccgccttgcccgaagccacgaccgcatcgttacccttgaagaaaacgccgaacagggcggcgcaggcggcgcggtcttggaagtgttggcgaaacacggcatctgcaaacccgttttgcttttgggcgttgccgataccgtaaccgaacacggcgatccgaaaaaacttttggacgatttgggtttgagtgccgaagcggtggaacgccgggtgcgcgagtggctgccggaccgtgatgcggcaaattaaaccgcttgaccgcgccgtcgttatcgggcggcgtttttaaacggcgtttgtttctgcggtttttttattgaaaccccgcaggcggcaggaagggttcgggcggcggctttcgggcggtgcttggtgtgccgttgcgcgtttggaaatttattccgcttgtccgtataacggcggcggtgccgtctgccgatacaaggcaaaatgccgtctgaaacgcttcaggcggcatttttcggcgtgagggttttaggcttcgacaattttgccgcgcagggaaaaggtgtaggcttcggtgatttccaaatcgatcatttggttgatcatgtcgggcgtgccggtaaagttgacgacgcggttgttggcggtacgggcttggagctggtcggggtcttttttggagatgccttcgaccaggcagcgttgaaccgtgccgatcatggtttggttgatgcgggcggtttcggcttcgatgacttcgttcaaggcttcgaggcggcgcactttttcttcgtgcggcgtgtcgtccggcaggttggcggcaggcgtgccggggcgcgggctgtaaataaacacgaagctcaagtcgaaggcaatgtctttcaccagtttcaaggtttgctcgaactcgcgttcggtctcgccggggaaaccgacgatgaagtcgctgctcaggcacaaatcaggacggatggcgcgcagtttgcggatgatggatttgtattccaaagcggtgtagccgcgtttcatcgcgctcaatacgcggtcggaaccgctttgaatcggcaggtgcaggtgggaaaccagtttgggcaggtcgcggtagcactcgataatcgagtcggtaaactcgcgcgggtggctggtggtgaagcgcatacgttcgatgccggggatttcgtggacgatacgcagcagggtggcgaagtcgcagatttcgccgtcgtccatttcgccgcgataggcattgacgttttgtcccaagaggttgatttctttcacgccttgctgggcaaggttggcgatttcggtcaatacgtcgttgagcgggcgggagaattcttcgccgcgcgtgtaggggacgacgcagaaggagcagtatttggaacagccttccataatcgacacaaatgccgcgccgccttcgacgcgggcgggcggcaggtggtcgaatttttcgatttcggggaaggaaatatcgacttgcgacagcccgctggtttctttgtccacaatcattttgggcaggcggtgcagcgtttgcgggccgaaaaccacgtcaacataaggcgcgcgtttgatgatgttttcgccttcttgcgaggcgacgcagccggcaacgccgatgatgaggccggggtttttttctttgagcggacggacgcgccccaagtcggagaacactttttcctgtgctttttcgcgcacggaacaggtgttgaacaagatgatgtcggcttcgtcggcttgggtaacctgttcgatgccgccgtgttcttcggcaaggacggacagcattttttcgctgtcgtactcgttcatctggcagccgaaggtgcggataaataNttttttcatggtttgtgtctttctcgggcagccgtaatcgcggggctgatggttgttggaatgaaaaaatttcagacggcacgacgatgccgtctgaaaatcggtgcggattatagcacgatgtgggtttgggaggcaaaatattgttttaaaatatgaatttaatcggtcggaacggctgtataatgtttggctttaacgggaggtgtgtgtatgggcggcattgctgctgtgtgcgtgtaccagcaatttcggcgacagggaacatcagttcctgcgttatagtggattaaatttaaaccagtacagcgttgcctcgccttgccgtactatttgtactgtctgcggcttcgtcgccttgtcctgatttttgttaatccactatatcagacggaagagggaatcgcacaaacggttgttaaaggcaaaacgacccgggcggaggtagaggcacgtttcgggaagcgcaaccctttcggctgttatgcctatcacgaggtcagcctgccgatttataattttttgccgaccaatttcatctatatgaaatcggagcggcggcattgggaatggtgcgtggattacgacggggagggagtcgtccgggactaccgctttacacatataaagaggaaaaagacgagcgttccgtcatccgggatacggttggcgtaatccgcaaagaagcgggcaaatccttgtcgcaacctgaaaaatgataaaatggggctttctgcttccaagcccgaaacctgccgttcagacggcatttgaggataaatatgaaccgtaacgaaattttattcgaccgcgccaaagccatcatccccggcggcgtgaattcgcccgtgcgcgcattcggcagcgtcggcggcgtgccacgcttcatcaaaaaagccgaaggcgcgtatgtttgggacgaaaacggcacgcgctacaccgattatgtcggctcttgggggcctgcgattgtcggacacgcgcatcccgaagtcgtcgaagccgtgcgcgaagctgcgttgggcggtttgtcgttcggcgcgcccaccgaaggcgaaatcgccattgccgaacaaattgccgaaattatgccgtctgtcgaacggctgcgcctcgtcagctccggcacggaagcgacgatgactgccatccgtctggcacgcggttttaccggccgcgacaaaatcatcaaatttgaaggctgctaccacggccattccgacagcctgttggtgaaagcaggcagcggtctgcttaccttcggcaatccttcttccgccggtgtgcctgccgactttaccaaacatactttggtactcgaatacaacaacatcgcccaactcgaagaagcctttgcccaaagcggcgacgaaatcgcctgcgtgattgtcgaacccttcgtcggcaatatgaacctcgtccgcccgaccgaagcctttgtcaaagccttgcgcggattgaccgaaaaacacggcgcggtgttgatttacgacgaagtgatgaccggtttccgcgtcgcgctcggcggcgcgcagtcgctgcacggcatcacgcccgacctgaccacgatgggcaaagtcatcggcggcggtatgccgcttgccgcgttcggcggacgcaaagacatcatggaatgtatttccccgttgggcggcgtgtatcaggcaggtacattatcaggcaacccgattgccgtcgccgccggcttgaaaacgctggaaatcatccagcgcgaaggcttctatgaaaacctgaccgccttgacacaacgccttgccaacggtattgccgccgccaaagcgcacggtatcgagtttgccgccgacagcgtgggcggtatgttcggtctgtatttcgccgcacacgtgccgcgaaactatgccgatatggcgcgctccaatatcgacgctttcaaacgcttcttccacggcatgctcgaccgcggcattgccttcggcccgtccgcttatgaagcaggtttcgtttccgccgcgcatacgcccgagctgattgacgaaacggttgcggttgcggttgaagtgttcaaggcgatggctgcatgatgttttgacggacagagtttctctgttcgatttgtttggcagattgaagtaagaatgcacaccgccgtcatttccgcgcaggcgggaatccggacctttcagtttctgtaatgattgaaaataacggcaagcccgaccttccggattcccgcctgcgcgggaatgacgggcgtgtacatttttgatttcaatctactgtaaaaatgccgtctgaaatatatagtcaattaaaatcaaaataggacagtagtgcatcgtcaaatcgggcgtaatcagacaaaacggttcgcagataccgcttaatattcgcccacactttctcaatcgggttgggctcaggcgaacaaggtgcgggaggcaatacct--------------------------------------------------------------------------------------------------------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN--------------------------------------------aaagggaacggtNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNttgtactattttgtttttaattgaatataaatagcgtttcagacggcattgtttgtttcttattgcgcttcggctttcggggcggaaatcaggaagtgttcgcggtagtggcgcatttcttcgatgctctccaaaatgtcgtccaatgccttgtgcgaaccgcgtttgacgacgcttttggcaatgggcggattccagcgtttggcgagttctttcagcgtggaaacgtcgaggttgcggtagtggaagtagttttccagtttcggcatatatttgaccataaaacgccggtcttggtggatggagttgccgcacatcggtgtggcgcgtccgggtatccattccgacataaagtccagcagtttctgttcgacttcggcttcggtatgcgacgattcgcgcacgcgctgcgtcagccccgtcctgccgtgtgtggcggtgttccactcgtccatattgtcgagcagatcgtcgctttggtggatggcgtaaacttcggattgcgccaacacattcaaatccgagtcggtaataatcatcgcgacttcgataatgcggtcggtttcgggattcagccccgtcatttccatatcgagccagcagaggttgtttttgtcctgcacggtgtttcctttccgtttcagcgttttacgccgctcaagcgcgcccagccttcgtcagtttccgccgggtcgagatcgaaccattggctgtaaatgccgccgagttcttcggcctgttcatccaacaaaccggacaacacgatgcgtccgccctgtttggtgcgggctgcaagcatttcgccgagcatacgcaaagggttggcgaggatgttggcgacgacgacatcgaattgcccttgaggcagactgtcgggcaggaagaattgtgcatcgacgttgttctgttcggcgttgtccctgccggcgcggacggcctgttcgtcaatatccacgccgacggcggaacctgcaccgagtttgagggcggcgatggtcaggatgcccgaaccgcagccgtagtcgaggacgctttcgccgtttttgagttgcgtatccagccatttgaggcagaggcgcgtggtcgggtggctgccggtgccgaaggcgagtccgggatcgaggcggaggttgacggcgcagccttcgggggcttcgtgccaagagggggtaatccacaggcggtcggaaattcggatggggtcgaattgcgattgcgtgaggcgcacccagtcttggtcttcgatggtttcgccggtgtatgccaagtcttttaacccgcattcttgtgcggcggcatcgatgacggcggcggcttcgtcgtgttcgccgaacagggcgatgactttgctctgctgccagatttgttcggtgggcataccgggttcgccgaaaatcgcctgttcgttttgcgtgccggcgcaggcatcttcgatggcggcggagagtgcaccgtgttccatcagcacgtcggcgaggcgttcggcgacggcatcgttgacgttgacggtgatttgttggtagggcataacgggctttcttggaaatatcgaaatcggtttcagacggcggggcaagggaaatgccgtctgaacgcggaagggcggcttcagacggcatatcggcggcggcttatttgtcctgtttggttttgcgcgcttccagccagtgctccaggtaatggatgctcactccgccttcttggaaacccgcatcggcgaacaggtcgcggtgcaacggcgtattggttttgatgccggttaccgccagctcggcgagtgcgacgcgcattttcgccattgcctgttcacgcgttttgccgtgtacgcagattttgccgatcaggctgtcgtagtacggcgggatgcggtagccttggtagatgtggctgtccacgcggatgccgaagccgccgggcaggtggcagctttcaatcgggcccgggctggggatgaagttgtacgggtcttcggcattgatgcggcactcgaaggcgtggccttcgattttgatgtctttctgtttgtattgcagcggcaggccggatgcgatgcggagttgctcttggacgatgtccacgccggtaatgagttcggtaaccggatgctcgacctgaacgcgcgtgttcatctcgataaagaaaaattcgccgtcttcgtataaaaattcaaacgtgcccgcgccccggtagccgatgcgtttgcacgcgtcggtacaggctttgccgatttttttgcgtgcctcttcatcgataaacggggcgggtgcttcctcgatgactttctggtggcggcgttgcagcgaacagtcgcgctcggcaagatagacggcgttgccgtgttcgtcggcaagcacttggatttcgacgtggcgcgggcgttgcaggtagcgttccatataaaccatcgggttgccgaacgccgcgcccgcttcagccttggtcatttcgacagactggaggaggtcttcttttttctcgaccacgcgcatacc----ccgccgccgccgcccgatgctttgataatcacgggataaccgactttgtcggcgattttgaggatttcggcatcatcgtcgggcaatgcgccgtcagagccggggacgcagggcacgcctgccgctatcatcgcgtgtttggcggagactttgtcgcccatcaggcggatggtgtcgggtttcgggccgatgaaggtaaagccggactgttcgacctgttcggcgaaatcggcgttttcggcaaggaagccgtagcccgggtggacagcgtccgcgaaggttacttcggcggcggcaatgatggcgggaatgttcagataactttgcgcagaagcggcaggaccgatgcacacggattcgtcggcgagtttgacgtgcaggctgcctttgtcggcttcggaatgcacggcaacggtggcaatgcccatttcgcggcaggcacggagtacgcgcaaggcgatttcgccccggttggcgattaaaacttttttcagcatgatgacctttcctgcggttccggcaacccgtccgtaaaaaagggtgcgggaacgctgaagggggggaaagcatttcagacggcatcggaagtttatgccgtctgaaaacaggattatccgatgatgaagagcggttcgccgaattcgacgggcgtaccgttttcgaccagaatttctttgaccgtgccggatttttcggcttcgatttcgttcatcagcttcatcgcttcgatgatgcacagcgtgtcgccggctttgacctgttgaccgacttcgacaaatgcggcggcattcgggccgggcgcgcggtagaacgtgccgaccataggcgatttttgagcgtcggacaaatcgcgggcggccggcgcggcggcgggcgcggatgccgcaacgggtgcggcggccggcgttacggccggcgcggcggcaggtacgggcgcggcgtaaacgggagctgccgcagctgcaatggtacgggtaatgcggactttttcctcgccttcggttacttcgatttcggcgatacccgattcttcaaccaaatcaatcagtttttttaatttgcgcaaatccatttctgttcctttaaaggctgccggtgttccggcgggttgttgcgttggtttttcagaaaacagccggcttgcggcaacggcgcaaaccgggcggaatggtgttcggatacggttttcctgtggtgggaaacgaccgtgaaattgtgttcattttcccgaagttgtcggtaaatgtccagtaaaatatcaaaaaacggcggtttttgggggaaatgtgcaggaagtttgattttgcgcacaagatgccccgagtcaagagtgtttattctaatctgttggtttttcgggcaaagatgccgtctgaaaaagggctaaagtgcgtataatggcggcttgcccgaacgagagtgtaaaaatggatatttcagattttgactttaccctgcccgaacacctgattgcccagcatccgcccgaggtgcgcggcagcagccggcttttggtcgcgctgcccgatatgccgctgcaagaccgggtgtttggcgatttgcccgattatgtcgaggcaggcgacgttttggtattcaacaacaccaaagtcatgaaggcgcggctgtttgggcagaaagacagcggcggcaggatcgaagccctgattgagcgtgtgttggacaaccataccgcattggcgcacatccgttcgtccaagtcccccaagcccggtatggggctggtgtttgaaggcggtatccgtgccgtgatggtcggacgtgagggcgaactgttctgcctgcgttttgaaggcggtcaaaccgtttacgaacttttggaacagaacggacacctgcccctgccgccttatatcgaacgtgccgccgatgcggacgacgacagccgttatcaaactgtttatgccaaatatcagggcgcggtcgccgcgccgacggcgggcctgcattttacggaagaacttttgcgccgtctgaaagacaaaggcgcggtaaccgcagaagtaaccctgcacgtcggtgcggggacattccaacccgtgcgcgtcgataaaatcgaagaacacaaaatgcacagcgaatggtttgaagtgccgtctgaaaccgtcgccgccgttgaggcggcaaaagcccgggggaacaaagcctgggcggtcggcacgacttccatgcgcgccctcgagtctgccgcgcgcgcaacgggatatttgaaagacggacagggcgacaccgatattttcatcacgccgggctaccgttttaatgttgtcgacaggctggttaccaattttcatctgccgaaatcgacgctgctgatgttggtcggcgcgttttcgggtatgggtcatatccgcgccgtgtaccgtcatgcgattgaacgtgaataccgtttcttcagctacggagatgcgatggttttggggcggaacgaagggggcgggctttaaactgctgctgtccgttgcaaggcagatgccgtctgaaccgtggttcgggcggtatttttatggatgtccggcagttggataatccaccgccccaaattagggtgcttaaaggtcaaaagaaagtgaaggctatgtgcaacaaaatgccgtctgaaaccgcaaaacggcttcagacggcattgttcaacctgattcaggcatcagttgcggtttttcaaacgaccgtgcagctcttgaacgctgtacacacccagataatcccggcttttcgcgccttcgctcatcgcttcgccgccggcggtggtggtgtattgcggcacgcgttgctgcaatgcgctttggcggatgatgtggctgtcggacacggattgcggatcgctggaaacggtatttacgaccagtgcgatttcgccgtttttcagcgcgtcgccgatgtgcgggcggccttcggggactttgttgatggcctgcacaatcagcccgtgttcggtcaggtattgcgccgtgccgcgcgtggcgcagatgccgtagcctaaggcttggaagtttttggcggttttaatgacgcgttctttgtcttcttcgcgcacggagaggaagattttgccggtcgggttgaggcgttcgcccgcgccgagttgggctttgtagtaggcttcgccgaaacttgcgcccacgcccatcacttcgccggtggagcgcatttccggactcaaaatcgtatccacgcccgggaatttgatgaatgggaacacggcttctttaacggcatagaaatcggggacgacttctttttccacgccttgttctttcagggaaatgcctgccatgcagcgcgcgccgactttggcgagcggcacgccggtggctttggagacaaaggggacggtacggctggcgcgcgggttcacttccaacacgaacaccacgccgtcctgcacggcaaactgcacgttcatcagtccgaccacgcccagcgcgtacgccatcgctttggtttggcggcggatttcgtcttggatttcttcgcttaaggagtatggcggcagcgagcagccggagtcgccggagtggatgcccgcctgttcgacgtgctgcatgatgccgccgataaccacatctttgccgtctgaaacgcagtccacatcgacttcaatcgcgttgttgaggaagaaatcgagcagcacggggctgtcttcggaaacctgcacggcttcgcgcatgtatttttgcaaggcttcggcggagtggacaatctgcatcgcgcgtccgcccaaaacataagacgggcgcacgaccagcggataaccgatttcttcggctttgacgagtgcttcttcttcgttgtgggcgatgcggttgggcggttggcgcaggcctaagtcgttcaacactttttggaagcgttcgcggtcttcggcggcatcgatgctgtcggcggatgtgccgatgatgttcacgccgttttcaaccaatgcgttggcgagtttcagcggggtttgaccgccgtaatgaacaatcacgccccacgggttttcggtgcggacgatttccaacacgtcttccaatgtcagcggctcgaaatagaggcggtcgctggtgtcgaagtcggtggacacggtttcggggttgcagttgaccataatcgtttcaaagcccgattcgcgcagggcgagtgcggcgtgaacgcagcagtagtcaaactcgatgccctgaccgatgcggttcgggccgccgccgagaatcatcacttttttacggtcggaaggacgggattcgcattcttcttcgtaagtggagtaaagataggcggtttcggtggcgaactcggcggcgcaggtatcgacgcgtttgtaaaccggatgcagcttcagcgcgtagcggtgttcgcgaacttctttttcgcttacgttcaacaattgtgccaaacgtttgtcggagaagcctttgcgtttcagacggcgtagggcggcgtaatccaaatcttgcaactggccgtctgaaaccgatttttcttccttcatcaagtcttcgatttgcgccaagaaccaagggtcgatggcgcagatctcgtggatttcttccggcgtgaagcccgcgcggaacgcgtctgccacaaacagcatacgttcggggccggggttggccagttcgcggcggatttccgctttgtcttcgctgcgcggattgaaaccgcacaagccggtttccaaaccgcgcaaggctttttggaagctttcctgaatggtacggcccatcgccattacttcgcccacagatttcatctgcgtggtcaggcggtcgtctgcggcggggaatttttcaaacgcgaaacgcgggattttggttaccacatagtcgatggaaggctcgaacgacgcgggcgtgcggccgccggtgatgtcgttgcgcaactcgtccagcgtaaagccgaccgccagcttcgccgccaccttcgcaatcgggaagcccgttgctttggaagccagcgcggacgaacggctcacgcgcgggttcatctcgatcacaatcatctcgccgttttcagggttcaccgcaaactgcacgttcgagccgcccgtgtccacgccgatttcgcgcaataccgccaacgaagcgttgcgcatgatttggtattccttgtccgtcagcgtttgcgccggcgcaaccgtaatcgagtcgcccgtatgaacgcccatcgggtcgaagttttcaatcgaacagatgatgatgcagttgtccgccttatcgcgcaccacttccatctcgtactctttccagccgagcacagactgctcaatcagcagctcatgcgtaggcgacgcatcgaaaccgcgttcgcaaatcgccaaaaactcatccttattgtaggcaatgccgccgcccgaaccgcccatcgtgaaagacggacgaatcagcgtcggaaagccgacctgttcttgcgccgccaaggcttcgttcatggtgtggcagacaaaagatttcgggcaagagaggccgattttttccatcgcttctttaaagcggccgcggtcttccgccttgtcgatcgcgtcttccgttgcgccgattaactcgacattgtatttcgccagcacgccgttacgcgccaaatccagcgcacagttcagcgcggtctgaccgcccatcgtgggcagaatcgcatcgggccgctccttggcgataatcttctccaccgtctgccacataatcggctcgatgtaggtaacatccgccatttcggggtcggtcataatcgtggcggggttggaattcaccaaaatgactttatagccttcttcacgcaaggctttgcaggcctgtgcgcccgaatagtcaaattcgcaggcctgaccgataacgatagggccggcgccgatgataaggatggattttaggtcggtacgtttgggcatgggtggttactcttgaattaaagaaggttgttttgttacatagcttttaagaaaagtatttcccttttctaaaattgaagctaaaacatcatcttctatgttagataaaatattctctaaatctgcgcttgatttaattttaaagaattcttttgtttgagaatggtatacaagagaaggtttatttagctgtaaaagttctgctatattatttaatgaaccaatactcttaccatcccataaaataaagccataatcagcaatttctgccattttcttatcttttgctgtataaaatacccttccagttcctttgctgtctacttggacaaactgccaatttcccacattatttcggtaaattttgccagaaaagtaaatatgcacattagcataatcttgttcttgtagaaattcttggatagctttatcagccccattagcatctccaataacaatatcaaaattattgctaagaatattgttaattctttctcgtatttgtggatttagtcgtgaaatgctgcgtgaaccagaaaagaaaatagtgcgcatttttatcctctagtctttgtcattgctaaaacaattacagatctagcattttttgaaaacaatttttcagttgatatttccaatgttgctccgctatcaaataaatcatcgattactaaaatattcttattggatagatctatattgtcaattgtgatggaattattcagtatttctagtttttctgatttttcttcaatatttttgagtggtgtgtgtgagctagattttcttaaaataggagaatatggaatattcaagcgatcacttagttctttggcaattaattgaactggttgattaatacgctctgttgtaaaaggggcgggaacaattaaatttatagattctaaaccactaaatttttgtaaaatatagtctaccagcaaagaaacattttgggtttgattacgatattttaattgataaacccattctccaatcacacttctcttgctatcaaagtgaggatgccctaattcatcataacctaacaaaatacttttttgcatatgatggtctaaagcaaatccttttgtccagttaccatttagttctatcgccatttcattgactccttgtcaaaattaagtataacgagcaatcctagcaagccgtagcccgcatgtagggtgtgcggtacgcacgcacgcgttcttcattttccctgtaaccccgacccaccgcatgcgcgccttgcggcacacactctaccgatgagttcaaagattgtctgaaaaaacgctcgcggcgtttgttccatctgcttgacaataaaggctacctgaaaaattcccgctgttgatatttcgtgcatcctttttcagacgacctgaaatcaacggttgcaaatttaagttatttttcaaaccaccggcaaccgaaaaatctgccgaaacccactccctcccccgtgggggagggctggggggagggcattctccgaatggtggcaatctttcctaataccttcgccgcccaaatacaagccttgcggcttgttgcc--------------------------------------------------------tttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaacaacagctgcaaatctaagttgcctttcaaatcgcctgcaac----------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNtgccctctctccagctctctcccacagggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgcttttttgcttttcagacgacctttttaaacgctcaattcagttaattttaccttattattttcaaaatctaatcaaaatcaaccgtttgctaccgtgctggctgcttttccaattcctgcaatacgcgcaggatttccgccagtacatcgtttgtctgctgcaaaatttcgtgattccaaaaacgcagcacggtaaagcccaagctgttgagatataccgtccgcgcgtggtcgtatacggcttgttccgcgtgctgcccgccgtctgcttcgacaatcagcttgggcgttacgcacataaaatcaacaatataattccccatcggctgctgtcggcggaatttatagccgttcagacggcctgcccgcaggtgttgccacaattttgcttccgcctcgctcatttcttgacgcatggctttggcgcgttggcgtagggcggggttttcggcggtcaatagtttctcgggcgggttcatttttgttatcgggttgctgtttgtgtaagccttacagcttgttgccctctctctaactctttcccacagggagagaggacgggtcggctgttggggttaaaggggctgcaaggaaaacagcttgtgcaggctgttttttattttgcataatccgtctgaaaattaataactgctgatttccagcaggttgccatcgggatcgcgcaggtaaaccgattggattttgcccattgcgcctgtgcgcgctacgatgccgcttaaaggtttgatgccgtgtgcggataattcctgtaaaaccgtttccagtggggcgtatcggtcagcaggcataaatccgctgtgccgcaggcggcgtgttgcgcgttaggctgaatttccgcaccgcgcccgtgtaggttgattttctgactgccaaacaacaaagctttacggttgttgccaaatgaaacttcttccatgcccaaaacttgtgtgtaaaacgcgatggttcggtcaatgtcggcaacagtcagtactagatggtcgagtgcgctaattttcatttccagctttctttttcagacggcagcagcatactgttgccgtctgaaaatcattatgcttgttttgcagccttcatattgccaatgaatttgtcgaacaaatagccgacatcttgcggacccgggctggcttcggggtgtccttggaaacagaacacgggtttgtcggtcagctcgatgccttgcaaggtattgtcgaacaaggatttgtgggtaatgcgtgcgttggcgggcagggtgtcggcatcgacggcgaaaccgtggttttggctggtaatgacgactttgccgctgtccaaatcttgcacaggatggttcgcaccgtggtggctgaagcgcattttcagggttttcgcgccgatggcgaggctgatgagctggtgtcccaagcagatgccgaaaatcggtttgccgctttccatcagtttttgcacggcttcgatggcgtaggtgcaaggctcggggtcgccggggccgttggacaggaacacgccgtcgggattgagtgccaacacgtcttccgcgctcgtttgtgcggggacgacggtcaggcggcagccgcgcgaggcgagcatacgcaggatgttggttttcacgccgaaatcgtaggcgacgacgtggtaaggctgtttgtcaggggtaacgaaacctttgcccaattcccattcgccttccgtccattcgtaagtttccgtgcaggaaacttcttttgccaaatctttgccgaccatgctgccgaacgcggcgatgagttcttgcgctttttcaacggtggcatccgcacctgtcagaatcgcgccgccttgcgcgcctttttcgcgcaacagcatggtcaggcggcgggtgtcgatgtcggcgatggcgacggtttcgttgcgtaccaaatagtcgtgcaggctttcggaggcgcggaagctgctgtgcaagagcggcaggtcgcggataatcaggccggcggcataaacgctgcggctttcttcatcttcggcgttggtgccggtgttgccgatgtgggggtaggtgagggtaacgatttgtttgcagtaggacgggtcggtcagaatttcctgatagccggtcatcgaagtattgaacacgacttcgccggaagccgaaccttcgtaaccgattgatgtgccgtggaatacgctgccgtcagcgaggacgaggagggcgggggtgctcatgatgggaatcctgtttttaataaaattcttgacaatgccgtctgaagggacttcggcagggggcatccggtcggaaaaatccggtcaaaaaaaaacacgccgcgcaagatagacgcgtaacgtgcttttcgggcaagtgcctataccctgaaagcagcatattttaagacgaaacatacccgatttcaagcgcaaacgcggcaggcgggctgatatgttcgcgcgaaaacggaaatccggggcataaaaccgcccgctccgcgccccctatgcccgttacgcatttccccacgtccgcccggcgaaactatgggaatacccgaaccgtcattcccgcgcaggcgggaatccggacctgtcggcacggaaacttatcgggtacaacggtttcttgagattttacgtcctagattcccgcctgcgcgggaatgacggcatcggtttgacggtatttaattgaattgcggaaattgacggattcagtgagattggcgggatgaagcctaccctgtagcccgccttttatagcggattaacaaaaaccggtacgggttgccccgccccggctcaaagggaacggttccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgccccgatttttgttaatccgctatacgaacccgccccctcccgaaaaacgcaaaaaatgccgtccgaaaacctttcggacggcattttcgcgtgaaccgtcattcccacgaaaacagaaaaccaaaatcagaaacctaaaattcgtcattcccacgaaagtgggaatccaggactcaggacctgagaaacctttttacccgataagttcccgtaccgaccggtccggattcccgcctgcgcgggaatgacgcgtttcatttgccgccccctcccgaaaaacgcaaaaaatgccgtccgaagacctttcagacggcatttgcggaaaaaccggccgcgcgggcgggtcagaagaagacttcgcgccagcttaagcgtttgataccgcacatcgggccggtaatatccaagctgtccaaatcgttcatcagcagggtgcgcacaccttttccggagaagcaccggttattgcgggcggNttttttaccctctttgaatgttccgctgccgcctgcatcaccgtctgccgtgacggggaaatcgtctgttttcttttcgtccaggtagcgcacattaaccggtttgtcgtaaacatatccgttcgggcagacggttttgctgtttttccacatacagcctatggggacggacttgccgtcggtggttttcttatggccggaatattgcgcaaccgaattgtgatccggcacaatcgggcgcgcgcttctcggagtcNatgcgccgccgtcggcggtattgatgcccaaaatNNNNNNNNNNNNNNNNNNNNNNNNNtctttatacttgcggatggttacgaaggcggtacgcaataccacggtcggtttgacggtaacgcgttctccttccctcaatttcactacccagcctttatcggccgatccgccggatgccttattattgctcaggaacaaggtgttattttccttcgtaagcgtttgctcgagcagcccgcctcccgtgccgttttgtaccgttaccttaaccgtccccgtccccttatcgtcgtcaaagataccgtaaatatattgttgatccttaccgactacatcctcttcactcaaatcgctgcccgtaccgaagatgaccacgcgtttgtctgccagtcgggaaacggcgggcgcggaagtaatcggttttgtgccttcgaaaatagtgcgtacagcccactcggacggcttgtcgctgctcaaatcaaagcggtacatattcccgccccgatcgccggcataggcgatatcgaccgtgccgtccaaatctttatccaccagcgtgggggacgaaagcccgcctttgccgccgggtgcttcgatttttgcaatcggcgtacctaaggtgtctttcaaatcatacacatacagcgcggttgtattatcgctgctgacaatatctttagccgcataaccggaggcgaggaaggcggcgtatttgccgttttgggttttgccgatttgcggcgtaccgacggtgtagcctaatttcacgcgattactgtcattcttattgttatttttgtcgttttggacatcaaacatggaaacgccgaccgggttgctgtcgattttggtcaaatccaaggcgtatgcgcctctgccgcccaggcccatcgcaccaaacataaagaaatgtttttgcttgtcttggtcatctgtaatgcggcgcaagacaaagccgccgtccacgccgtagcggtcgcccacatagccttgttcggcaaaggcgcgcagctctttggcgaggtcggagtcattgccttcaatatccttacgctccatcgtaccggggatgtagctgagcttcagttcgtagcctcgttggtctgtgccggtttttttgaagatatgcaccatcccgtcgttggcagaagttgccagatacccgccgaccgccgttatcgggctgttgacgatgtcgcccaaatcgcggggtttgtcattgtcatcttcttttgtgcggatgcggtatttttggctgtattgttttttgtcgctttgttttttgttgtttggttggttgaatgttttaaatatatcgtcattaccgtaataccggaccgtccaaggcagcagcacttttgcccactcgtcgacctcaggtgtgacgagcctgtccttgtagatgccgaaagtgtcgtttttgccgtcattgccattcaaacccacgatcctgtcgcgagtcggggcgatccggtacacgccgcccggcaatcggatcacggtctgccttgagttgaaattcggctcgcggcttttgatgttctgcgtatccaaagcggcgagggaatgccggccgggccgggcggggtcggttcgagttttcagctcttggaggaagatgcggctgctcgaactgccggggtaggtggaaaccgaagcggaatacatctgcaccttaccattttgcacagagccgaaccacagcgcgggggcggtcagtgccggcgaaggggcttgggtattcttattggggttcggttcgttgatgcagcggcctgctttgacttccggcaggccgagcttgaccggaatctgcccgttatctttaatgtcccacttagaccaaaaatttagaatgccgctaagccccgtattttgtgtcttcacatcgatgctcggcttcaagacacccaaccgcactgttttgccggtgatatctttaatcccttttttgtccagcaggtgcagcttggcgttcagataataggccatggcggtcgtttcttgctgccagttgctaagggaaatacggtggtcttctgtcgtatagacgaggttttgattactattactattgttttcatcaaaagaagataccaatttgctggatgatctgccatctttggcggtaccctcgccgcccaaattgaaagacacacccaaccatggataatccttcaatttgtaaatgggcgaattttcgcggcttggctctgtgtgcctatccagcccgcctcttgtttttagcaagtcgggattatcgaaggaaaatcgggttttataggtaagtttgggacagtctttggtacttccgcaacggataccggtgtagccgtagcctgccagcccgggccgggtggtatgaatccaattgacggcattgccgcgcttgttcagctcggcggtatcaaagccggaaaccttgccgtagggcggcaggtaggtggctgtgccaaaaacggcagtaccgctttgttgagaaacaagctcatcgttattgttgaatgagataaaattgcttgtgatgccgaggctgtttttctggctcgtatggctaaatgtccgctccctgcttttgtcctttaatgctgattgattatattgatccttccactttacctcgggctgctttcgctcgttcatgataatagcgtattgatgggtttgcgccatcgccccccccccgccggtatgggaaaacatcaagatggcggtataaagcgcggtatggcggaaaacccgcctttttaaagttttattcatcgtatttccttttcggtcaaaccccccgcccttcggggcggcaggatcaggctttgtccgggaggggtgcaagcccttccgaatcagggcggcgccttatgtgccgccctgcgtgttggaacatattttatcccttaaatcttgcttcgcgggataccgtcggcggcaggcgcgccgcaaacggcgggattgggcaaaccgcccgatcccgcgcccgccggattgccggttgcaaagcccccttcgcccggctgccaaagggggatgttcgcaaaggtaacacgcccctttggccggatgcaatgtatagggttaccgcattattctacccttgcgcgctgatcatggtaaagcggttttcggcaatccgcaaccgtttgcccggcccgccattgccgcctgcgcggcaatggcgggccggggaggcggcattttccaagttgcggcaacctttcccaacaactcaaccgcctaaatacaagccttgcggcttgttgccctctctccagccctctcccacagggagagaggacggggaggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaacaacagctgcaaatctaagttgcctttcaaatcgcctgcaaccgaaaaacctgccgaaacccactccctcccccgtgggggagggccggggagagggcattctccgaatggtggcaatctttcctaataccttcgccgcccaaatacaagccttgcggcttgttgccctctctctagccctctcccacggggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaat---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------aaggaaaacaggttgtgcaggctgctttttgcttttcagacgacctgcatcaacggttgtaaatccaatctgtttttcaaaccgcctgcaaccgcaaaacctgccgaaacccactccctcccctgtgggggagggccggggagaNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNttgtaaatccaatctgtttttcaaaccgcctgcaaccgaaaaatctgccgcaatccgctccctcccccgtgggggagggccggggaggcggcattctccaagttgcggcaacctttcccaacaacttaaccgcccaaatacaagccttgcggcttgctgccctctctccagccctctcccacgggagagaggactatgaagcccgtcggcaggcgcggggcttgggacggcattgctgttgcggtttcgggcgcggctttattcgacgacaattttagggaaccggctgctgaagtctttgcctttgtcggcaatgcccagggcgatttggaatgcggcatcggtgtagattcgggcgatggcggggtgttcgtcgaacagtcgcgccggtgtgccgccgtccatggcttcgcgcacgggcaggcttaggggaagctgtccgagcagggggacgttgaggcgggccgccaaatctttgccgccgtccgtgccgaacagtgcttcgctatgcccgcagttggagcagatgtggacggacatgttttccaatacgcctaaaatgggaatgttgaccttgcggaacatatccacagccttgcgcgcgtctatcagcgcgatgtcctgcggcgtggttacgatgacggacccggttacggggatgcgttgggacagcgtgagttggatgtcgcccgtgccggggggcaggtcgatgaaaagatagtccacttcgtcccactcgctttggaacatcagctgctgcaaggcttggctgaccatcggcccgcgccagacgacggcttggccggtatcgactagaaagccgatggacataacctgtatgccgtctgaagattcgacgggaatcagtttttggtttttctgatcgggtttgcggtcgtgtacgcccagcatcgtgggctggctcggaccgtaaaggtcggcatcgagcacgccgacgcgtgcgcccatgcgcgccattgcggcggcaaggttggcagtggtggttgatttgcccacgccgccttttcccgatgcgacggcaatgatgtttttcacgcctttgatggtggcgacgccgggccggactttgtgtgtgccgatttcggtgtctatggacagatggatgtgcgcgccgcctgtttcgggcatcagggtttcttgtacggcatcggcgagggcggcggcgatgtgcgcgacagggaagccgaaatgcagggcgatgtggatgccgtctgaacgctgtccgaccgaacggacggccttttcgccgccgagcgtgcgtgccgtattcggaacggcgacggtgtcgaggagggtgcggatgttttgtatattcatgatgtgtgcctctgttcgcaagtcgtgtgaggggaagatagacggaaagtgtacatgattttgggcagtttgcttttttcttgtgcgaacttttacacggtatgcggcggattgtgaaaatccgttgccaaaatatcccgtgcaaacagcagtctgcaattaagcctgtaaaatttgcttgacggcggggaacggggctgtataatgcacggcttatcgggtcgttagctcagccggtagagcagcggacttttaatccgttggtcgagcgttcgaatcgctcacgacccaccagataaccggaagccaagtttcgagacttggcttttttgtttgcctgccggggcgtaccgtttgNgggggtgtatgaaaaagaaactgctttcgggcatcaaatttgccgttcggacggcattggtgtttttgctggtgtcgctgtttttggattgggtacgcaagcccgacgaacctgccggggcggcagggcggcctttgaccctgctgtcggggcagcggctgactttgggacagtttagccgggataggacggtgctggtgtatttttggggaagctggtgcggcgtgtgccgttatcagtcgccgataatcgatgatttggcggcggacggcgtgccggtcgtcggcgtggcggtacgttccggcagcgcgtccgaagtggcggcatatatggcaaaacggggcttgggctttccgactgtcagcgatgaggacgggggtttggcaaggtcttggcggattgccgcaacgcctgccgtcgttttggtcaaaaatgggaaaatggtccgctatacgacgggaatcagcagttattggggcttgcgcgcacgaatttttcaggcggattttttcggttaacttttgtttttgtcaaactttccgctatgtagagaatcaaacggcatatg-------------------------------------------------cgcctgccgatgtaatcccttgttgtgattgtgggaaaaatagattaaaatataactattaaaatattttcagataggattatcggaattaaagtcttttatacccggtcgtccgatgaggtttatagcgtattgttgctatatgttcgttttgttatataacggttgcatcaaaaattacgcccacaggctttcccgacggtttgaaagtttgattttcgataacttggagacttaaacaatgcctacccaatcaaaacatgcgtctatcaatatcggtctgatacaggcaagggaagccctgatgacccaattcaggcctattctgaatcaggcgaatattaccgatcagcaatggcggattatccgtcttttggcggaaaacggcacattggattttcaggatttggcgaatcaggcgtgcattttgcgccccagcctgaccggtatcctgacccgccttgaaaaagcggggttggtcgtccgcctgaaaccttccaacgaccaacggcgcgtttatctgaagctgacttccgagggcgagaagctgtatgaggaaatcggcgaagaagtggacgagcgttacgacgctatcgaggaagtgctgggccgcgagaaaatgctgctgcttaaagacctgttggcagaacttgccaaaatcgaggatgcgttgaactcgtaatacgccgtaatgcgcggaaacgtccgaccgacggctttttgaatcagaactgctgcacatgggggatgccttgtgtgcagcattcttatataggggacggtttaaaggggaaaaatggcggatttgcagaaaacttttcaaacttcgttccgtgatgcgatggcatcctgtgcggcaggcgttcatgtcatcacgacagacggtgcggcagggcgttacggcattacaatgacggcggttgcgccggttaccgacgagccgccgaccgtgatgctgtgcataaaccggagtgcgcgaatcattccgatcctgtcggaaaacggcagcctctgcatcaatatgctggcggacgaacatcaggatgttgccgaacattttgccgggctgaccggcctgtcgcccgaagagcggtttgcctaccatatttggcatcgcggcaaaacgggacaacttgaaatagaaggcgcgttggcgcacctgcacgggcatattgtcggcaaacatgaaatcggcacgcattttgtgttttacgtcaggctcgacgaaatcaaaaactgcgggtgcaaacgccccgcgctgctgtatttcagacggcagtttaggcctttagactgatattcggacagatatatgaaagcgatgatactggcggcaggacgcggcgagcgtatgcgccctttgaccgacaccactccgaagccgctgctcgatgtggcgggtaagcctctaatcggttggcacttgtgccgtctgaagcaggcggggtttaccgaaatcgtcatcaaccacgcttggctgggtcggcagatagaaaatgctttgggcgacggctcggcttatggcgtgaacatcgcctattcgcccgaacccgcaggcggtttggaaacggcaggcggcatcgcgcaggcattgccgctgttgggtgggcagccgtttttggtggccaacggcgacgtgctgaccgacatcgattttaccgccgcgtttcagacggcatcgtccctgcccgggcacatttccgcacatttgtggctggtgggaaatcccccgcacaaccccgacggcgatttttccctgctgcccgacggcagcgtgcggccggaagtatccggcggcaacggactgacattcagcggcgtgggtatttaccgtcctgaaatgtttgacggaatcgaagcgggcagtgtggcaaaactcgcgcccgtattgctgaacgaaatgcggcaaaaccgcgtgagcggtcagaagcatacgggcctgtggctggatgtcggcacggtatgccgtctgaaggaagcgcaagcccttgcagcggcttggaagtgaaaactcggtttcaggcggtatggcgg-----gtttaacgtttcagtgccaacgtcaacacgccgccgtaaccagccccaagtctatccattcctgcgtgttcgggcgttcgtctaagaaaatcaccgccatcagcgcgaccaagaccaggctgaatttgtcgacgggcgcgacttgcggggcgttgcccagttgcagggctttgaagtaggcgagccaagatgcgccggtggcgagtccggacaaaaccagaaacgtccggttgcgccccgtgaagccgtttacgccctgccatttgccggtgtaggtcaaaaacaataccaaggcggcgaggatgaccaaggtgcggataaaggcggcgaaatccgaatctatgccctgcaagcccattttggcgaaaacggcggtcaatgaggcgaagcctgccgatgccaatgcccaaaacagccatgcgttgctgcccatgttttctcctttgattgtgaacaatatgaacggtatttttgttgctgcgtcaaaaatttcactgcgggtttggtgcggataacgttataatatgcctgatattattttcaatccacctgtttgtcgcctgatgctttcagacggcatgtccctcctcatttctaaaggaaaatcatgagcttcaaaaccgatgccgaaaccgcccaatcctccaccatgcgcccgattggcgaaattgccgccaagctgggtttgaacgttgacaacattgagccttacggtcattacaaagccaaaatcaatcctgccgaagcgttcaagctgccgcaaaaacaaggcaggctgattttggttaccgccatcaacccgactccggcgggcgaaggcaaaaccaccgtaaccatcggtttggcggacgcattgcgccatatcggcaaagactctgtgattgctttgcgcgagccttctttgggtccggtgttcggcgtgaaaggcggcgcggcaggcggcggctacgcgcaagttttgccgatggaagacatcaacctgcacttcaccggcgacttccacgccatcggtgcggcgaataacctcctcgccgccatgctcgacaaccatatctaccaaggtaacgagttgaacatcgaccccaaacgcgtgctgtggcggcgcgtggtcgatatgaacgaccgccagttgcgcaacatcatcgacggtatgggcaagcctgttgacggcgtgatgcgtcccgacggcttcgacatcaccgtcgcctccgaagtgatggcggtattctgccttgccaaagacatcagcgatttgaaagagcgttttggcaatattctcgtcgcctacgccaaagacggcagccccgtttacgccaaagatttgaaggcacacggcgcgatggcggcattgctaaaagatgcgattaagcccaatttggtgcaaaccatcgaaggcactccggtctttgtacacggcggcccgttcgccaacatcgcccacggctgcaactccgttaccgcaacccgtctggcgaaacaccttgccgattacgccgtaaccgaagcaggcttcggcgcggacttgggtgcggaaaaattctgcgacatcaaatgccgccttgccggtttgaaacctgatgcggcagtcgtcgtggcgactgtccgcgccctgaaatacaacggcggcgtggaacgcgccaaccttggtgaagaaaacctcgaagccttggcaaaaggtttgcccaacctgttgaaacacatttccaacctgaaaaacgtattcggactgcccgtcgtcgttgcgctcaaccgcttcgtgtccgactccgatgccgagttggcgatgattgaaaaagcctgtgccgaacacggcgttgaagtttccctgaccgaagtgtggggcaaaggcggcgcgggcggcgcggatttggcgcgcaaagtcgtcaatgccatcgacaaccaacctaataacttcggtttcgcctacgatgtcgagttgggcatcaaagacaaaatccgtgcgattgcccaaaaagtgtacggcgcggaagatgtcgatttcagcgcggaagcgtctgccgaaatcgcctcgctggaaaaactgggcttggacaaaatgccgatctgcatggcgaaaacccaatattcattgagcgacaacgccaaactcttgggctgccccgaaggcttccgcatcaccgtacgcggtatcactgtttccgccggcgcgggcttcatcgttgcgttgtgcggcaatatgatgaaaatgccgggcctgccgaaagttccggctgccgagaaaatcgatgtggacgaacacggcgtgattcacggcttgttctgaacggtttttgaaaccggatgccgtctgaagccgtttcagacggcattttttcggaacgcgggcggcggtatgctataatccgccgttaaatttctctattttcaggaaaaaccatgagtttgaaatgcggcatcgtcggtttgcccaacgtcggcaaatccaccctttttaacgcgctgacccaatcgggcatcgaagcggcaaactatcccttctgcaccatcgaacccaacgtcggcatcgtcgaagtgcccgacccgcgtatggcggagctggcgaaaatcgtcaatccgcaaaaaatgcagcccgccatcgtcgagtttgtcgatattgccggcttggttgcgggcgcgagcaaaggcgaaggcttgggcaaccggttccttgccaacatccgtgaaaccgatgccatcgtcaacgtcgtgcgctgctttgacgacgacaacatcgtccacgtttccggcaaagtcgatccgattgccgacatcgaaaccatcggcaccgaattggcgcttgccgacttggcaagtgtggaaaaagccatcgtccgcgaagaaaaacgcgcccgatcaggcgacaaagacgcgcaaaaactagtcgatttgtgcaaaaaactgctgccgcatctggacgaaggcaaacccgtgcgttccttcggtttggacgcggaagaacgcgcgctgctgaagccgctgttcctgctgaccgccaaacctgcgatgtatgtgggaaacgttgccgaagacggttttgaaaacaacccgcacctcgaccgcctgaaagaattggcggcaaaagaaaacgcccccgtcgttgccgtctgcgccgcgatggagagcgaaatcgccgaattggaagacggtgaaaaagccgaatttctcgccgaaatgggcttggaagaaccgggcttgaaccgcctcatccgcgcgggttacgaccttttgggactgcaaacctacttcaccgccggcgtgaaagaagtccgcgcgtggacgatacacaaaggcgacaccgcgccgcaagccgccggcgtgatccatacggattttgaacgcggcttcatccgcgcccaagtgattgcctacgatgattttgtctcgctcggcggcgaagccaaagccaaagaagccggcaaaatgcgcgtggaaggcaaggaatacgtcgtgcaggacggcgacgtgatgcactttttgtttaacgtgtaacccaaatgcggcaggttttcagacggctttgccggaaatgccgtctgaagccggttttggtggttttcgacgttcccataccgccggaatgcagccgcatcaaaataaaatcccgcccgcatttccgatttgccctccccgattcctgcaaaacaaaccgcctgccctgccgttacgggaagccgtccggtattccgaatatcccgaaccccgatacaaaatgacctttcagacggcatttgcacagcccgccgcgtttcaagtaaaaacattatgagccaagccttaccctaccgcccggacatcgacacattgcgcgccgccgccgtcttgtccgtcatcgtgttccatatcgaaaaggattggctgccgggcgggtttctcggtgtcgatatattctttgtgatttcaggctttttgatgacggcgatcctccttcgcgaaatgtccggggggcgtttcttcctcaagacattttatatccgccgcatcaaacggattttgcccgcatttttcgccgtattggcggcaacgctggcaggcggcttctttttattcaccaaagatgatttctttcttttgtggaaatccgcgctgaccgccttgggtttcgcctccaacctgtattttgcaagggggaaggattatttcgatcccgcgcaggaagaaaagcccctgctgcacatctggtctttgtcggtcgaagaacaattttactttgtctttccgatattgctgttgcttgtcgcccgcaaaagcctgcgcgtacagttcggcttcctcgccgcattgtgcgccttaagccttgccgcttcctttatgccttccgcgctcgataaatattacctgccccacctgcgcgcctgcgaaatgctggtcggatcgctgaccgccgtgcggatgcggtaccggcaacagcggaatcccgccgtcgggaaacggtatgccgccgtcggcgcattgttttccgcgtgcatactgtccgcctgcctgtttgcctattcggaacaaaccgcctatttcccgggctccgccgccctgattccctgtctggctgttgccgcgctgatttatttcaaccattacgaacacccgcttaaaaaatttttccaatggaaaatcaccgttgccgccggtttgatttcctattcgctttatctgtggcattggccgatattggcctttatgcgctatatcggcccggacaacctgccgccttattcgccggcggcagcgatcgtcctgaccctggcgttttccctgatttcttatcactgcatcgaaaagccgtttaaaaaatggaaaggctcgttcgcacaatccgttttatggatttatgccttgcctatgctcgttttgggcgcgggctcgtttttcgcgatgaggctgccgtttatggcgcaatacgaccgcttggggctgacgcgttccaacacc---tgccacaacaataccggcaaacaatgcctgtggggggatacggaaaaacagccggaactgctggttttgggcgactcccacgccgaccattacaaaacattcttcgatgccgtgggcaaaaaagaaaaatggtccgccactatggtttccgccgacgcctgcgcctatgtggaaggctacgcgtcccgtgtgttccaaaactgggccgcctgccgcgccgtttaccgctatgccgaagaacacctgccccggtatccgaaagtggttttggcgatgcgctggggcagccagatgcccgaaaacagccgctcccttgcctacgatgccggttttttccaaaaattcgaccgtatgctgcacaaactctcatccgaaaaacaagccgtttacctgatggcggacaacttggcttcgtcttacaacgtccagcgcgcctatatcttgtcttcacgcataccgggttgccgccaaacactgcgcccggacgacgaaagcaccctgaaagccaatgcccgcatcagggaattggcagccaaataccccaacgtctatattattgatgccgccgcctatatccccgcagatttccaaatcggcggattgccggtttactcggacaaagaccacatcaacccttacggcggcacagaattggcgaagcgtttttccgaaaaacaaaggtttctcgatacgcgccataaccattgattcgcttaaatttgttacaatcggcggtttgcaaaaccgctaatttttttgaaagagaccgatgagcgtcatccaagacctgcaatcgcgcggccttatcgcgcaaaccaccgacatcgaagccttagacgctttgctgaacgaacaaaaaatcgccctttactgcggtttcgacccgacagccgacagcctgcacatcggacacctgctgcccgtattggcattgcgccgcttccaacaggcggggcatacgccgattgcactggtgggcggcgcgaccggtatgatcggcgaccccagcttcaaagccgccgaacgcagcttgaattccgccgaaaccgttgccggctgggtaggaagcatacgcagccaattaacccctttcttgagctttgaaggcggaaacgccgccattatggcgaacaatgccgactggttcggcagcatgaactgcctcgacttcctgcgcgacatcggcaagcatttctccgtcaacgccatgctgaacaaagaatccgtcaaacagcgcatcgaccgcgacggcgcaggcatttccttcaccgagttcgcctattccctgctgcaaggctacgacttcgccgagttgaacaaacgccacggcgcggttttggaaatcggcgg---------gtggggcaacatcaccgccggtatcgacctgacccgccgcctgaaccaaaaacaagtgttcggtctgaccctgcctttggttaccaaatccgacggtaccaaattcggcaaaaccgaaggcggcgcggtgtggctgaacgcgaaaaaaacctcgccgtaccagttctaccagttctggctgaaagtcgccgatgccgatgtgtataaattcctgaaatactttaccttcctgtccatcgaagaaatcggtgtcgtcgaagccaaagacaaggcaagcggcagcaagcccgaagcgcaacgcatcctcgccgaagaaatgacccgcctgattcacggcgaagaagcccttgccgccgcgcaacgcatttccgaaagcctgtttgccgaagaccaaagccggcttaccgaaagcgacttcgagcagctcgccctcgacggcctgcctgcatttgaagtttcagacggcatcaacgccgtcgaagccttggtcaaaaccggcttggcagcgtccaacaaagaagcgcgcggctttgtcaatgccaaagcggttctgctcaacggcaaaccggctgaagccaacaaccccaaccacgccgccgaacgccccgacgatgcctatctgttgataggcgaatacaaacgtttcggcaaatacaccatcctccggcgcggcaaacgcaaccacgcgcttttggtttggaaataatccgattgccgcagaaatgccgtctgaagctttcagacggcatttttatcaaatgcaaaacaccctgcgcctgccgatatgtcgtcatttccatgcaggcgggaattcaaacttgtccgcacggaaacttatcgggcaaaacggtttcttcagttctacgttctagatgcccgctttcgtgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttcctgcactgacagatctagattcccgcctgcgcgggaatgacgggtttcgagattgcggtgttgtcgggaatgacgggttttaagattgcggtgttgtcggaacgcaaccgaaccgtcattcccacggaagtgggaatctaggacgcggggtttcagtcatttccgatagattcccgccgcgtcgggggtccggattcccgcctgcgcgggaatgacggttcggg------------------------------------------taaaaatgccgtctgaaggttcagacggcatcggtatcggggaatcagaagcggtagcgcacgcccaacgaggctNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNagagaagagaagagaagagaagagaagagaaggttttttgcgggctggattcattttcggctccttattcggtttgaccggttaaaaaaaaagattttcactgatgttgaagggcggattatatcgggttccgggcggtgtttcaatacatagcaccgcgcctgctgcgcgttttatgcgtttggcgcgttcggcggcgggaaatttgcctacttttcccgcgtcgggcgggcggaacgggcggcacactgtctataaaccgcaataccgtttacaatgaccgcctgtttcaccacatacccgaacgcaacaatgtttcaacacacgggacggcacatcaagcaccgccctatgtgtcgtcctgatttggaaggggttgcacccctcccgaataaagtctgatcctgccgccccgaaggacggatgtccgagtggcggggtttcaaccgaaaaggaaatacaatgaaaatcaggccggggcggcacaacgcgcccgactttccgcacggggccgccgtaaccataggcaatttcgacggcgtgcacctcggacacaaacacatcctccaaaaactccgcctcgaagccgatacgcgcggattgcccgtcgtggccgtcgttttcgaaccccaacccaaagaatttttcgcactccgtaccggcaaaaccccgccgtgccgtatcagccccctgcgtaccaaactcgggctgctcgaaaaaaccggttgcgtcgatgccgcctgggttttgcgtttcgatcggaatttttccgaaatatccgcgcaagcatttatcgaccgcctgctgcgtcaaaccttgaatacgcgctatttgctcgtcggcgatgatttccgtttcggtgcggggcgggaaggctgttttgaacttttggcacaacagcccgatatgcaaaccgagcgcacgccttccgtcatcgtcgaagacatccgcaccagcagtaccgccgtccgccaagccctttcagacggcaaccttgcctatgcgaagaaacttttggggcacgactacgttttggggggcagggtggtgcacggcagaaaactcggacgcaccttaaacgccccgaccgccaatatccgcctgcccggccaccgttatgcactcggcggcgtgttcgtcgtcgaggcggacggcgcattcggcacgcggcgcggcgtggcgagcttcggcttcaatcccaccgttgatggcggctgttctcaaaagcttgaagtccacctgttcgactttcaaggcgatttgtacggacaacggttgaacgtccgcttcctgcacaaactgcgcgacgaggaaaagtttgacggtatggaagaactgaaaaggcggattgaagccgatatggaagccgcaaagtgttggtagaaaaaccttatacaaaccatccgattgggctacaatcagccttttaactgttcggacggcacaggggtttcccgttgtgaaatactgtttgaggcgcaatgccgtctgaaaccgaaatattgtaacaatagagattaaaaaatgaccgattacagtaaaaccgtcaacctgctcgaaagcccgtttccgatgcgcggcaatcttgccaagcgcgagcctgcgtggctgaaaagctggtacgagcaaaaacgttaccaaaaactgcgcgaaatcgccaaaggccgtccgaaattcatcctgcacgacggcccgccgtatgccaacggcgacatccatatcggtcatgccgtcaataaaattcttaaagacattattatccgcagcaaaacccaagccggttttgacgcgccttatgtgccgggttgggactgccacggcctgcccatcgaagtgatggtggaaaaactgcacggcaaagatatgcctaaagcccgtttccgcgaattgtgccgcgaatatgccgccgaacagattgcccgtcagaaaaaagactttatccgcttgggcgtgttgggcgactgggacaatccttacttgaccatggatttcaaaaccgaagccgataccgtgcgtatgctcggcgaaatctacaaatccggctatctctaccgtggtgcgaaaccggttcagttttgcttggattgcggatcttcgctggcggaagcggaagtggaatacaaagacaaagtatcgcctgcgattgacgttgcctatccgtttaaaaacaccgtcgcgcttgccgccgcattcggcttggcaggtatcgaaggcaaagcgtttgccgtcatttggacgaccacgccttggactctgcctgcgagccaggccgtgtctgccggcgcggacgtggtgtatcaattaatcgatacgcccaaaggcaaattggtgctggcgaaagatttggcggaaggcgctttgaaacgctacggcttttcagacggcatcgccatccttgccgaaaccaccggcgacaagctggaaaacctgcacatgaatcatccgttcctcgaacgcgatattcccatgctcaacggcgaacacgttaccaccgatgccggtaccggcttggtgcatactgcgcctgcgcacggtttggaagactacgccgtctgcaataaatacggcatcgagctttacaaccctgtcaacgccgaaggcaaatacataagcgaaacgcctcgtgtcgcaggcatgagcgtttgggaggcgaatcccgtcatcctgcaatggccggaagaaaccggcaacctcttggcaagcagcaaaatcgaacacagctacgcccactgctggcgccacaaaaccccgctgatttaccgagcgacaggtcagtggtttgtcggcatggacaaagccggcagcgacggtaaaaccctgcgcgacaaagccatcaaagccgtggacgacaccgaattcttcccgccatggggtcgtgcgcgtttggaatccatgattgaaggccgtcctgactgggtggtttcacgccaacgctattggggcacgccgatgactttctttgttcacaaagaaaccggtgaattgcatccgaactctgccgaacttttggaaaaagtcgcgcaacgcatcgaagaaaaaggcatcgaggcttggttctccctcgataaaagcgaattattaagcgcggaagattgcgaacattacgacaaactccccgataccatggacgtatggttcgactcaggctcgacgcattattccgttgtaaaacaacgcgaagaattggaatggccggctgacttgtacctcgaaggcagcgaccaacaccgcggctggttccaatcttctatgctgaccggttgcgcctcatccatgggacgcgcaccgtataaacagctgctgacccacggtttcgttgtggacggcgaaggcaaaaaaatgtcgaaatccatcggcaacgtcgtcgcgccgcaggaagtgtataacgagttcggcgcggacatcctgcgtctgtgggcggcatccaccgattacagcggcgaattggcgatttccaaagaaatcctcaaacgcgtaaccgaaagctaccgccgtatccgcaataccttgagcttcctgtttgccaatttgagcgactttaatccgattgaagatgctgttccacaagcagaaatggtggaaatcgaccgctacgccctggtgttggcgcgtcaacttcaagaacgcgttgccggcgatttttatccgcgttacgccttccattttgccgtaaaagaaatggtttctttctgctcggaagacttgggcgcgttctacctcgacatcctgaaagaccgcctctacaccaccaaagccgacagccgcgcccgccgcagcgcgcaaaccgccctgtaccacatcacgcgcagcctggttctcttgattgcaccgattttgtgcttcaccggcgaagaagcgtgggacatcatcggcggcggcgaagaagacagcgtcctcttccatacttggcacgagttcccggccatcaacgaaaaagccgaagccgaactggtgaaaaaatggacggcaatccgcgaagcgcgcgaagcagtaaccgccgccatcgagcctttgcgcgccgacaaaaccgtcggttcgtccttgcaggcggaagccgaaatcaccgcgccggaagaaatggccggctatctgaatgctttgggcgaagaattgcgctttgccctgctggtgtctaaagcagaagtgaaagtcggtgatgaacttgccgttgccgccaaagccagcgacggcgaaaaatgcgaacgctgctggcattacacccgcgatgtgggcgcggttgcaggttatgaaaccgtctgcaaacgctgtgcggagaatgtcggcggagaaggcgaaacgcgccattacgcctgataaagtttgagcaaatgccgtctgaaaccgccaaacagtatttcagacggcattttttgtgccgcgatttgtcttcataatggcggaggggtttcgagattgcggtgttgtcgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttcctgcactgacagatctagatttccgcctgcgcgggaatgacgggtttcgagattacggtgttgtcgggaatgacggttcgggtattttactgcgcccgccccgcgcctgtaaacggcaagtgcatcaaaaatgccgtctgaaggttcagacggcatcggtatcggggaatcagaagcggtagcgcacgcccaatgaggcttcgtgggttttgaagcgggtgttttccaagcgtccccagttgtggtaacggtagccagcatctaaagtcagattggacgtgatgtcgaaaccgacaccggcgatgacaccaagacccaagcggcggatgc---------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcattgtcttcatttgccgcctgcgctgcNNNNgagaagagaagagaagagaagagaagagaaggttttttggggctggattcattttcgactccttatatcggtttgaccggttaaaaaaagattttcactgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN------------------------------gccccggctcaaagggaacggttccctaaggtgctgaagcaccgggcggatcggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatccgctataaagaccgtcgggcatctgcagccgtcattcccgcgcgggcgggaatctaggccggtcggtgcggaaacttatcgggaaaaaaggtttcttgagattttacgtcctggattcccacttttgtgggaatgacgtggtgcaggtttccgtacggatggattcgtcattcccgcgcaggcgggaatccggNccttagaacaacagcaatattcaaagattatctgaaagtccgggattctggattcccgctttcgcgggaatgacggttcggttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaatcgtcattcccatgcaggcgggaatctggaatttcaatgcctcaagaatttatcggaaaaaaccaaaacccttccgccgtcattcccactttcgtgggaatgacgggatgtaggttcgtaggaatgacgtggtgcaggtttccgtgcggatggattcgtcattcccgcgcaggcgggaatccggtccgttcggtttcagttatttccgataaattcctgctgctttttatttctagattcccacttccgtgggaatgacggcggaggggataagttcttgcaatctaaaatttcgtcatttctataaaatagcaaaccgaaacagaaacttaaaaacagaaacctgaaacagcaacctgaaaccccgtcattcccgcgcaggcggaaatccggcgggccgtagggtgtgcttcggcccgccatttccatcaatccaacatgtctaccgttttcatcgaatccatcgaatccgccttttcgaccacccggccctacgcaaccgaaccgtcattcccgcgaaagtgggaatctaggacgcggggtttgggcaaccgttttatccgataagtttccgtgcggacaggtccggattcccgcctgcgcgggaatgacgggtttcaagattacggcatttgccgtttcgggtacaggaaagggggttttcgggtagaatggcactcttttatccggctgttgaaaaatatgtcttcatctgtttcaagtaaaacgcgctattgggtattggcacttgccgccatcgtgctggaccagtggtcgaagtgggcggtgctgtcgtcgtttcagtatcgggaacgcgtcaacgtcatcccttcgtttttcgatctgacgctggtgtacaacccgggcgcggcattcagcttccttgccgatcagggcggctggcagaaatacttttttttggtgctggcggtggcggtgagcgcgtatttggtacgcgccatcttgcgcgacgagtttgcagccctcggcaaaatcggggcggcaatgattatcggcggtgcgtcgggcaatgtcatcgatcgcctgatacacggtcatgtcgtcgatttcttattgttttattggcaaaattggttttatcccgcctttaatattgccgacagctttatctgcgtcggtgcggtgttggcggtgcttgacaatatcgtccatcgcaaagatagcaaaaaaacgtgaatgccgtctgaacacggaatgcaaaacttatgaacggaaaaaccatcatccttgccaatccgcgcggcttctgcgccggtgtggatcgggcaatcagtattgtcgaacgtgctttggaagaattcggcgcgccggtttatgtgcgccacgaagtcgtccacaacaaattcgtcgtggacaacctgcgcgaaaaaggcgcggtgtttatcgaagacttggcggaagtgccgccgggcgcgacactggtttattcggcacacggcgtatcgaaggcggtgcagcaggaagcggcggagcgcggtttccgggtatttgatgcgacttgcccgctggtaacgaaagtgcataaggaagtcgcccgactggatgcccaaaactgtgaaatcatcatgatcgggcataaggggcacgccgaggtcgaaggcacgatggggcagcttgcaccgggcaaaatgcttttggtcgaaacggtcggagatgtggcaaaactcgaagtcagaaaccccgacaaactcgcctatgtcagccaaaccacgctctcggtcgatgaaaccaaagacatcatcgccgcgctgaacgcgcgtttccccaatatccgcaatccgcacaaggaagacatctgctatgcgacgaccaaccggcaaaccgccgtcaaagagctggcggaacagtgcgacatcgtgattgtggtcggttcgcccaattcgtccaacagcaaccgcctgcgcgaagtggcggcatcgcgcggaatcgatgcgtatatggtggacaacgcgtcctacctgcaacgcacgtggtttgaaggcaaaagcaaagtcggcgtaacggcaggcgcgtccgcgcccgaagtgttggtgcgggaagtattggcagccatacgcggatgggggcatgaaaccgtgcgcgaaggggggggcgcggaagaaagcatcgtgttcgtcctgcccaaggagctgcgccgcgagggcgaaaccaaacccgatttgtgcaaacgttgacgcaggcgttaacgcaggcatcggatgtttgggcaatacaaatgccgagacctttgcaaaaatccccaaaatcccctaaattcccaccaaggcatttaggggatttcccatg------------------------------------------------------------------------------------------------------------------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcgaactcgaacacagcctcatcacccgcatcggtttcaacctgttttgccgttttgacgaaccgggcatccccggttgcagcaccttatgcc------------------atgcgcgggcagcctatttcgggctgctcaaagtgggtgcgcaaagccacctgaaggcgatgtgtttgaacctgttgaaagccgccaacaggctaagtgc-------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNaggggatattcgggtaaaattaggaggtatttggggcgaaaacagccgaaaacctgtgtttgggtttcggatgtcgaaggaagggcttttttgcaaaggcctcatgccgtctgaacaggcttcagacggcatttttgccgcgtgccggatgcggaaaccaatcaggcgtaatgtcgtgcaagaaaaccgggcagttcggacaaaccgtccaatacggcgagatgcggtgcgccaaggagctgttcgcgcgaatgtgcgccggtggcaacgccgactgccgccgcgcctgcgtttgccgccatatgcaggtcgtgcgccgtatcgccgacaaccaatgcctctttcgggtcgagtcccagttcgccgcagagtccgaataccatttcgggcgagggtttggaggggtattcccccgcgcaggcggtggcgagccaatagccgccggtggcggtttggctgatggcgttgtccaaacccgcccgccctttgcccgtggcgacggcaagccggaagccttgcgctttgagcttgtccagacagggcggggcatcgggaaagagtgtcatattgcggttgttgggattgaggtaatgcgcggaataagtgcgcgcgatgtcggcaacggcagcttcagaaggcatttcgagcagggcgcggatgatttcgggcaggctgtatccgatcaggctgcggacgcgctccgcttcgggcggcggaaaaccgcattcggcgaagctgcggcgcatggtgtcgatgatgggttgggtcgtatcggcaagcgtgccgtcccagtcgaagatgatgagtttgggcggggtcatggcaggttggttgcagtaaaaaagcagattttatgcggaaaacgcagacgtgtcgcattttcgacaaaatttgtcggctgagcgatatgtttttccgaacaagccgcgttgtgctttattaaaatagaaccattatcatttatacagatgggacagtttatgtcagttttccgcatcaatatgaccgccgccacggttttggcagcactctcgtctccggtttttgccgcacaaacggcggatttggaaaccgtccatatcaaagggcagcgttcgtacaacgcgattgccaccgagaaaaacggcgattacagctcgttaaaggcagctatatggatgaccgcctcaatacccgcgtctccccctgccgcctgaaagacaaaaacgccgccgaacccgaacaaccgcaacacccgttacgccgcattgggcaaacgcgtgatggaaggcgttgagaccgaaatcagcggtgcgattacaccgaaatggcaaatccatgcaggttacagctatctgcacagccaaatcaaaaccgccgccaatccacgcgacgacggcatcttcctgctggtgcccaaacacagcgcaaacctgtggacgacttaccaagttacgcccgggctgaccgtcggcggcggcgtgaacgcgatgagcggcattacttcatctgcagggatgcatgcaggcggttatgccacgttcgatgcgatggcggcataccgcttcacgcccaagctgaagctgcaaatcaatgccgacaacatcttcaaccgccattactacgcccgcgtcggcggcacgaacacctttaacattcccggttcggagcgcagcctgacggcaaacctgcgttacagtttttaaagaccaatatgccgtctgaaacggcagccgcagcataatcaaaccacaacaagctgcgcggcataccctatgcgctcacaaccggagtatggcattgcgaaggaaaacagaccgaaccggcaggcagaccgctttgccggttcggttttaccgcttgccgccagtctgacccacaagccgaacatcatgaaacccataccgaccgacacattccaacctgccatactgccccaagcctttgaaaccgaaatcaaatccacctgcacggggcgaatctatcggattcagacggcaacactcggcgaaatgcagtctgaaggctatcccgtcctctttgtcctcgacggcgaagcctttttcccgcgctgtacaacatcatgcagtcgctgatgaacaaccccgttacccgaagcaacgccccctgcctgattgtcggtatcggctacacgacaggcagtgtgcgcgacctggcgcagcgtgccgccgactacacgccgccgcttggagacaacgccacagcagacgaacggcggcagttcggacaggcagaccgcttcgccgactttatcgacagcgaactgaccgcctttttagaaagccgctacacccttaaccgtaatgaaaccgccgtattcggacactcgttcggcgcactgttcggactgtattccctgctttcccaccgctgtttcagacggcattggctcgtatcccctcgatttggtggcacaacaggcggatactcgactttatgccgtctgaaaaccggctggacggcatcgatgcctgcctcaacatcggcgcactcgagcggagcagcggttgcaaacgcagggaagaacgcgacatggcagggcaggccgaacaaatggcggcagagttggacaggcgcgggaccgccgtatttttccgggaatatccgaatgccgaccacggcaatgtcccgttttactcgctgaccgactgcgtcgaatatttgagggaagcgtggcaacggtagggggaatcaaatatatgactgctttgttttgcatcggaaaatatagcggattaacaaaaaccggtacggcgttgccccgccttagctcaaagagaacgattctctaaggtgctgaagcaccaagtgaatcggttccgtactatttgtactgtctgcggcttcgtcgccttgtcctgattttcgttaatccgctataacaagagctacctaagggttattgctcccgttctcatttcgcagtgctacaatttttgatagttcgcgccgactttgcccgtggttgtcgctcccgttctcattttatcttgatataaaaatccctgtttcaggccgcctgaaacagggatagattaatttaacggacgggcgggcgttttttcaggcggcacggtctgatttctttgcccggttcgtcgatttggtatttttggaatgaaagggcggttttgacaccgatacttttgaaaatgccgtttttccctttggcgctgtctgtgtcatgtacacggatatcaatcgccccggttgatttatttaggctggcgaaataaccaaaaaatacgtttttcttggcagttacttttattcaatcattcgaataaagtacgaatgaaaccggttttgggcttcagacggcatttgtatttttggttaccaattcacgcgcaccgaccggctgccgagcaatgtttccagttcgccgaacaatgcggaactcggtgtaaccgtccatttcggaggcacttgaagcctgcccgacgctttttcgttggcatacgacaattgaagcgggatgcgcggcgtgtcgggcagttggtgggcggcgagcagccgtaccagtccgccgatgtcgtgatgcggggcaagggcgaggctgaggctgcgggcgtagcgttcgcgcgccgtttgcagggtcatgacttggtttgccatgatgcgcagcccgtcgccgccgccgtaatcgtcgcggctgactttggattcgataatcagcacttggtcggctttgaggcagtcggcgcagttttccagcgtttgtccgccgaccatgatttcagcctgcccgctcgaatcttcgaggctgacgaaggcgattttgccgcgtttgcccatcatggtgcgcacggcggtaacgaatccggcgaggcgcacgctgtcttgcggtttcagacggcctaatttggtcggggcgatttggcggacttcttgggcatacgggccgaacgggtggccggacaggtaaaagccgatgacggttttttcttcggcgagtttttccgattcgctccacatgggtgcgtcgatgagccgcaccggttcgatggcgtcttccatcatgtcaaacagcccgccctgattggcgttggcggctttttggtcggcgttgtccatggcaaggtcgatgttcgccaagagcatggcgcggttgggttcgatgctgtcgaacgcgccgccgcgtatcagggcttcgagggtgcggcggttcatgtgttctttgccgacgcgctcgcagaagtccaacaggccggtaaatttgccgccgctttgccgcgcggcgatgatggattcgacggcggcttcgcccgtgcctttaatcgcgccgagtgcgtagcggattttcatgttcggatacggcgtgaagcggtagtcggattcgttaatgtcgggcggcaggaactcgatgccgttggcgcggcagtcgtcgtagaaatgtttgagctggtcggtgttgtccaattcggac---------------------------------------------------gtctggtaggaaatcagggcgtaggcggcggcgtgggatttgttgaaaccgtagccggcgaatttttccatgtagttgaagatttcgtcggatttttcgcgcgaaatgccttgttttgccgcaccttcggcgaagatttcgcggtgtttcaccatctcttcgggctttttcttacccatggcgcggcgcagcaggtccgcgccgccgagcgagtagccgccgataatctgcgccgcctgcatcacttgttcctgatacaccataatgccgtaggtcggcgcgaggatgccttccagcagcgggtggatgtattggaattcctgtcccttcatgcgtgcgacgaagtcgggaatgttgtccatcgggccgggtcggtagagcgatacgaaggcgatgagttcttcaaacttggtcgtatgcgccgttttcagcatttttttcatgccggtcgactcgaactggaagacggcggtggtgttcgcatcgcggaagatttggtaggcagtctggtcgtcaagcggaatcttgccgacatcgacgatatcgccggcggtgtttttgatgttgttctgcgccatttcgataatggtcaggttgcgcaggcccaaaaagtcgaacttcaccaaacccacgtcttccacgtcgcccttgtcgtacatggatacgggcgaggcggattcgtccgcctgatacacggggctgtaatcggaaatcttgcccggcgcaatcaacacgccgcctgcgtgcatacccaaaccgcgcgtcaggtcttccagttttttcgccagcgtaatcagttcgtccgcttcttccgcttcaagcaattcctgaatctgcggctgcgccttcatcgcgtcgtccaaactcaggggtttgttggcttccaacggaatcagcttggacagtttgtcgcacagcataaacggcagttccagcacacgccccacgtcgcggatgaccgctttggacgacatcgtgccgaaagtcacaatctggctgaccgcctgagcgccgtatttttcgcgcacgtattcaatcacgcggccgcggtttgcctgacagaagtccacgtcaaagtcgggcatggaaacgcgttcggggtttaggaaacgctcgaacagcagcgcgtatttcagcgggtcgaggtcggtaatcttcagcgaatacgccaccagcgaacccgcgcccgaaccgcgtcccggcccgaccggacagccgtgcgttttcgcccagttgataaagtcttgtacgataaggaaatagccggggaatttcatttggatgatgatgttcagctcaaagtccagccgctcctgatattccggcatttttgccgcccgttccgcctcgtcgggataaagctgaaccatgcgttcctgcaaaccctcgttggaaagtttgatgagacagtcatcgagtgataaaccgtcgggcgtggggaaaaggggtaggaagtttttgcccaatgtgatgtgcaagttgcagcgtttggcgatttccaccgtgttttccaaggcttcgggcaagtcggcgaaacgctccagcatcgtttccggcggaatgaaaaactggctcggcgtgaaatcgcgcggacgtttcttgtccgtcagcacccagccgcccgcgatgcacacccgcgcctcgtgcgcgttgaaatcgtcgcggttcataaactgtgtcggatgcgttgctaccaccggcaaacccagttcctccgccagcttcacgctgccggaaacgcaagcctcccattcggggcgttcgggcaggcgttgcagctctaaataaaacgtatcgggaaaccatgccgcatatttcaacgccgccgcacgcgccgcgtcttcattgccgttcaacagattcacgcccacttcgccgtaatgcgcgccgctcaaacaaatcaagccgctgttgtcgccgttttccagccattcgggattgagttccgcatgatggatattgcggtcttggccgacataagcctccgtcaaaagctcgctcaagcgcagataacccgcatcgttgcggataaccagcatggcgcggaacggcttgtcgggcgcattcggattgcctatccacacgtccgccgcgccgacgggcttaatccctgcgccgcggcaggctttatagaatttcaccaaaccgaattcgttcatcaaatcgctgatgcccaaagcaggcaaaccgtattcttgcgctttggcaatcagttttttaatccgcaccataccgtcggtaatggagaattcggtatgcaggcgcagggggatgtaggtcggctcggtcatggcaaaatcggcgtggacaataaaaggcgtattgtagcagggttgtctttagatggcggtgcaggtaatgccgtttcggattcagacggcatgacctgcaaatgttttttgagcttttacgacggcaaaaaaatgcctcctgccgtgtggcggaggcttcccaaggagtattgatagatataaaggactatcaaactagttataaggaactatataccttattcggacggacggcaagcagttaaatagattttacgttcaaacaggtttttgatttcgttttgatgccgattgccggtgtatcgggcagtccgcgtttgaggatgtgcatcagcgtcaatgcggattcgtcggggaacaggatttgcagcctgccgttgggcaggatttctttggacggatggcggcatacggggtttcagacggcatttttacggaacaggcagtgcggacacatcgccggttttgcggcaattttgggtgcggcggcggcaggtgctacaataacgccctctttctaaaaggggacattatggaagccaccgtctatctcgaagacaacgaatacatcgctttgtgcgacctcttgaaattggccggacttgccgaaagcggcggacaggcaaaagcatttatcgccgaagggctggtgttgcgcaacggcggaaccgaaatccgcaaaacggccaaaatacgcggcggagaagtcatcgagtttgacggcgcgcgcttggaaatcgccgatggatacgaccctgaagcataaagccgaagcccttttgggcgagccgcttttggacgaacccgtccgccccgagtcgtgggaatgctgcggcagcgactgcggcgaggcgtgcattcagacgatttactgggcggacaaggcacgctacgatgcgcaacggaaaaaactgaaggaagcgggttggccggacgatgccgtctgaaaacggttgggcttgataaaaccacgttttcagacggtcttttatagtagattaaaattgaaaacgttcatatcgccattccctcgaaagcaggaatccggaagtttgaaatagcggttaaccttaaacatttccaataaatcaaagtctggattctcgcctgcgcgggaatgacggcatagcggcttttcctttgcatttgccatacacctgttttttaaaatgaccgccgccgccacactgtccgacaacattgaaacatcccgtccttcattcaccaccacataacaccccatgatagacctgcactgccattccaccgtttccgacggtatgctcccccccgccgaagtcgtccgcctcgcacatcaaaacggctgcacgctgctggcgttgaccgaccacgaccacacgggcggcatctccgaagcgcgtgccgaagccgacaggctcggtttgcgcctgattaacggcgtggaaatttcggtaacgtggcgcgggcgtaccatacacgttgtcggtttggatttcgacgagcaggacgaaaacctgcaaaacctgttggcagatgtccgcaaaggccgtctgaaacgtcttgaagccatcgccgccaagctcgaaaagaaaggcatcggcggcgcatacgacggcgcgctggcgctggcggcaaacaaagaaatggtcagccgcacccacgtcgccgagttcctcatcaaaaacggacacgtcaaaaacaagcagcaggcgttcaccaaatacttgggcgacggcaaatcctgcgcggtacgccacgaatgggcgacgctggcagactgcgtctccgccgtcaacggcgcgggcggcatggcggtgattgcccatccgatgcgttatgatttgtcggcaaccgccaagcgcaacctgtttgaagaatttaaaaacctcggcggcgcgggcatcgaagtccacagcggcaactgctgcaaaaacgaccgcctcaactacgcgcttttggcagaccgcttcggattgttggcaagcgcgggcagcgacttccaccgtttagacgacttcagcggcggcatcctcggcgcgtgtcccgatcttccggaaaactgcaaaccggtgcgggcgcatttttcccgacattgaatgcggatgaaaatgccgtctgaaaggtcttcagacggcattttttgcgttttaaacgttgtcgtacggttttcggacggttttgccgatggcggcgatgcctttttccagcgtttgagcgtcctgtgcgatactcatacggatgcactcgcccgcgtgcgggtagtcttgcgtgtcgatgccgacgaagaaatgttcgcccggaataatcagcgtaccttcggctttgagcatttcgtacagggtttgcgacgaaacgggcaggttttcaaaccagagccacaggaaaatcgcgccttcgggtttgtggattttcatcgggtacgcgcccagctcgcgcttgagcagcgaaacggcggtttgcgcctgattgcggtaaaacggccggatgacttggtcggcaagccgtttcatctcgccgctttccagcagcggggcggcgatggccgcgccgaagcgcgtgggggcaaggttcacaatcgcgttcaggctgctgacggctttgacggcttcgggcgcggcgacgatgatgccggtgcgaacgcccggcaggccgactttggaaaggctgaagcagaggatgatgttttcgtgccaattcagcgttacgccgctgtcaataatgttggggaacggcattccgtaggcgttgtcgataatcggcggaatgccgtgttcacgcgccaaagcgtccaaacgcgccatttcgccgtcggtcaacacgttgccggtcgggttggtcgggcgcgaacagcaaatcgcgccgattttgcccgctttgagttcgggcaggttttccagtgcgtcaaagtccacgcggtatttgaagaagcctgcttcgccttcgtgttcgacgttttcgattttgggtttgacggaaacgaagtgccgcccttcgacatgcacgtcggcatagccgatgtattcgggcgcgagcggcaacaaaatggctttttctgcggatgtgccgtctgaaagcttgaatttgccgccgaagaggttgaataaatagaaaaacgcgttttgcgaaccgttggtcagcgcgatattgccgacggtcaggttccagccgtattcgcggttggggaaggcggtcagcgcgtcaatcagcgcggcatcgccttggggattggagtagttgccgatgttctcgacggcgtgttccgccgccagcttggaaaatatgtcggcgaacgcccgatcgatttcgggaatgcgcgccgggttgccgccgccgagcatattgacgggcttgtcgcttttgagcgcgtcgccgaggtcgtccatcagttgcaggatgccgctgtgttgcgtgaatttttcgccgaatgccgagaactgcatgtcaaactcagtgtgtgtaaggcagattggtttgtacggtatgccgtctgaaggttcagacggcattttttctgtgtgtttcgcatacccaaagcaggtcgcagatgccgccggtcggggtaaagccggtcggggcgttgacgagcaggtcgcggattgcctgctggtcgtaacggtcgcaggcggtgcggatgcggtcgagcagggcggagagttcgtgccacggcagcatggtctcgtcggcggtcatgatgcgcggatggccggttttgcggacgttgtcgccgatgagcaactcttcgtagaNtttttcgccggggcgcagcccggtaatgaggatttcgatgtcgccgtcgggctgttcgggcgttttgggtttgagtccgcttaaggtaatcatttggcgggcaaggtcggtgattctgacggattcgcccatatcgaggacgaacacgtcgccgcctctgcccatcgcgccggcttggataaccagttgcgccgcttcgggtatggtcatgaaatagcgcgtgatgtcggggtgggtcagggtgatggggccgccttcggcaatctgtttttcaaacagcgggacgacggagccggacgagcctaaaacattgccgaaacgtaccatgctgaagcgggttttttgtccgggttcggcggcgagtgcctgaaggcagagttccgccatgcgtttgcccgcacccatcgtgttggcggggcggacggctttgtcggtggagatgaggacgaaggtttccacgcccgaagccgtggcggcaagcgcgcattcgagtgtgccgaagatgttgttgcgtatgccctcgacggtgttgaactcgaccatagggacgtgtttgtaggcggcggcgtgatagacggtcgcaacggaaaaggcggtcataatgtgcgtgagcagcgtgcggttttgcaccgaacccaaaaagggaaggatttcggcggcgatgccgtttcgggcgcagtattcgcacaattctttttcaacggtgtacagggcgaattcggacagctcgaacagcagcagcctttcggggcggcggcggataatctggcggcagagttccgaaccgatggagccgcccgcgccggttaccatgacggttttgccttcggtgtcggcattcatgaggcggtcgtcgggtgcgacggaatcgcgcccgagcaggtcggacacagagatttttttgagcgtgccgatgctgattttcccgtccatcaggtctttcattccgggaatggtcaacacttcgcacggataggctttcagtt--------attcggcggcgttgttcctgagtcgcgctgggaatggcgagcaggattttttccacgccgtagcgttcgatgaggaaggcgatggcatcgggctggtaaacggcaaggtcgtagatgacggtgtgccaaagcttggggttgtcgtccacaaaggcggcggcggaatattcgcgcatctgtttgacggcttcaaggagctgccgacccgaacgccccgcgccgtaaatgatgacggggtcatgtgtttttttctggtggtcggacaggagtccgcgcaaaaccatacgcgagccggtcacggaaacaaacagcagtaagaaatagacaatcggcagggcgaggcgcagcctttcttcaaaaatcaatgtgttgaggaagaacaatacggcggaggcgaggctgccggcaaaggcggtggtcaggacgtggaaactgacaaagcgtgtaacggcgcggtaaagccccattcggataaataatgtgatggtcagcaaggcagtcagcaaaaaagactgccagttggcaaaatcgaaccattcgtccgagtagtcggccttcaggctttgggtgaaccaaaaggcaatgaaaatcatcagaaaatcgtgtatgaggaaacagattttcttgatgttgcgcggcagggcgatcagggtttccagattcatatcgtggggcggtatgtgctttcaggcggcatatgccgtctgaagggttatcgtgcggcttcggtcaggacggcttcgatgtgttttttgcagaacgcgatttcgtcgtcggtcagcgtcgggtgcaccaagaacgtcagggcggtgccgcccagttcgacggcgtttttcagccgctctttgggccgccacggcgtgttgtcgaaggctttttccaaatacacttcggagcagccgccttgatagcaggggacgttgcgcgcgttcagttcgctgacgatgcggtcgcgcgtccagtcgtctttcaggtgttcgggtttgacgaaggcgtagaacttgtattgcgcgtgtccgatgtagccggcgacttcaatcaggcggatgcttttgaatttgcgcaaactttctgccagcttggcggcgttttcttggcggcgcgccgtccattcgggcaggtgtttgagctggatgcggccgatgacagcctgcatttccatcatgcgccagttggtgccgaaactttcgtgcagccagcggaaaccgggcgcgtgttcgcggtggtacacggcatcgtagcttttgccgtggtctttgtacgcccacattttttcccacagggttttgtcgttggtcgtaaccataccgccctcgccgccggtggtgatgattttgtcttgacagaacgaccacgcgccgacgtgcccgatagagccgacggatttgcctttgtaggtcgcgccgtgcgcttgggcgcagtcttcaatcacccacaaatcatgttcttttgccaaagccatgatgccgtccatttcggcaggcataccggcaaggtggacgacaatgacggctttggtattcggggtcagcacggctttgacggtttccgcgctgatgttttggctgttcaaatccacgtcggcaaacacggggtttgcgcccgcgttcacaatgcaggaggcggaggcgaggaaggtgcgcgaggtaacaatcacatcgtcgcccgcgcctatgccgattgctttgagtgcggcatcgagcgcaagcgtgccgttggaaagggcgacggcgtaccgcgtgccggcaaaggcggcaaattctttttcaaattcgcggcattcgctgcccgtccagtagttgactttgttggacagcaggactttggaaacggcatcggcttcttctcgggtgaagctcggccatggggaaagggcggtgttcagcatggtgtttggtccgtcgggttcggacggcatttccgaccctatgccgtctgaagggggcgtgttccgaagaatcgggcgcgcgccgcaggtgttgtcaaaatcggtttgtacggaagtttattttaatcgcttatgccgtcccggtcttggggtttttgcccgtaaggggctttgccgggttgcccgcgacggtcatgccgtccgggatgtcgcatacgataaccgcccctgcaccggcggtaaccccgctgccgacggttgtctgctggcggctgcacgcgcccgtgcctatccggctttcttcgccgatacgcgtgttgcctgacaggtgcgcgcccgggctgatgtggacgaaagcgtcaagcaggcagtcgtgatcgacggtggcggcagtgttcacaatcacgccgtctttcaatacgctgccggcctgtacgacggctttcgccattacgacgctgccttgtccgattattgcagaaggcgagacggtcgcgtcgggatgaatcagaacgggcagtttgaagccgagcgcggcggctttttcggtgatttggcggcggatgcggttgttgccgacggcgacggtgatgtcgaattgttcgggcgataaactgttttcaagcagcagcgtcgtgccgatgacggggaagccgttgacgctgccttgggtgcggtcgtccagaaaaacgatttcgccgtatgtgccgagtgcggcggcaagctcggcaacgactttgccgtgtccgcccgcgccgataacggcgagtttgcgattccccgcgaaagggggcatggtggcttccccttgcgccgaaatgccttctttaatcaagacttttttgactgtcagaaacaggattttcatatccagccaaaagctgaaattgtcggtgtaccaaacatcgcaggagaacttttcgtcccacgaaagcgcgttgcgcccgttgacctgcgcccagccggtaatgcccggtttcatttcgtggcggcggttttgaaatttgttgtaaagcggcagatactgcatcaaaagcgggcgggggccgaccaggctcatctcgcctttgaggacgttccacagttcaggcagttcgtccaaactggcggtgcgcagttttttgccgaagggcgtgagccgctcgctgtcgggcagcggaatgccgtctgaatcaagcgcgtcgcgcatggaacggaatttgaccattttaaaaggttttccgtcctttccggggcgttcccgaatgaagaagacgggcgaacctaagtttttgcggatgaggtatattaaaaccaaaaacacgggcgacagggcaatcagccccgatgcggaggcgacaatgtcgatgaggcgtttgaaaaatttattcatcagctaatctttcaatcaggttgacgattttccgataggaaatgtcgcgcctgaagcggcggacgatttcttcggactgaacaggatcgtttttgcgcttcaaaatatctttggcggctcgaacgaaaccgtccacatcgccggaacggtagttcgcatgcggcagcagggtaaggacttcggcaacttcgtcgtggacctggctgttcagaatcggtttttgcaaagccatatagtcggagagtttgttggtaatcgatgccattgaataggaccggatggcgttgacggcaatgtcgcagcccttggcgaccgacatcatttcggcgtaaggaatgtagccgtaaaacttgatgccgtcgcaggcatattgtttgagcctgtccaaatcggggccgccgcccatgatgtgcagctctacattttcgccgtcgtccaaaagtttccgaacgcctttgcacacggtttccacgtcatagctgtaactgagcgtgcccaagtagaaaaagcgggttttgtcgtcgccaaaatctttggcaggtgcggcatcgagtttgggaaagtcagcaccaatatagatgacttcgccgggtacgttcggattggtttctttggcgcggtcgagataagtctgcgatacggcaaccagcgcgtcggcgtagcggtaggcccggttggcgcgtgaagcaaagggcagcagcttgtgcggtacttttttcaaaaacggtacgaccgaggagaaagactccggccatacgtcctgcacatcgacaatcagtttgtaacccaaacgcgctttgtgtttgcccaacagcaggttggtggcaatcagcggataggcggaatagacgacgtcttgttcgcccggacggcagttttccaaccatttttcaaaatgtttgacgaagcggtgatggctggtcacgcgtcccaaagatacgtttttgctgtatccgctttcttccaacagtatgactttcagacggccttgtgaggcggcctcggcatcttcgggccgtctgaaagatttgtcgtagtgcttgaagttgctggtaatcagcaacacgtcgtgcgattgcgacaatagttctgccagataccaaaagcggttgaaatgcggttcggacggcagcgagcagtagggggcggctatggtaatgttcatgtttcagacggccttacatttcgtacgcagccatggtggtgcggtagatttcgtcgtcggagcataaggtttcgacatgtttgtgcagggctttgcccatttggctgcgcaactctggatgcttgatgagtgtatcgacggcttcgataaacgcttcgtcatcgccgaaaggaatgcagtagccggtttggccggtaatgaccatttcggaaatgcccgccatgttgtaggtcacgacaggcgtgtcgtaaaggccggcttccaaaatattgttgccgacacctgcgccgtggtcacctacgcaatgcggcgtgttcactaaaatatcgacttctttgaagtagccggtcaaatcgcggacgccgccgaggaaggtcactttgtcttcaatacccaaacgtttggcttgggctttgaggttgtccatttcttctcctatgcccgccatgttcaggcgtacgggtatattgcggccaaccattttcttcaaaatatccaacatcagatgcacggcgcggacggtgtccaaacgggaaagtgtgccgagtacggcgcattctttttcggttttccggaaatgaaattccggggggggggNgttgtaggcgtaggcaatccggccggcggggaagccgtggcggatgagcttttcgcgttcgtgtttgcagttgccgatgatgtacgcgcccagcttgtcgaagagtttggcggttttggggtaggttgccgcgtccaaaccgtgcgagtggcagatgattttggttttcggtgaaacgattttggcggcaagggcgcaggccgggacgacgcgcgccatttggcagtcgatgatgtcgggttgttcgcggcgcagcatccgggcgtaggcaaaggtgcttttaaggtagccggcaagcccgccccggtaaaaatcaaccggctgccaacggatgcccgatgcttgcgcctctccgacaaaagggccgtccgaggaggcgaggatgatgtcgtgcccgtgccgtttgagcagccgcccgaggcggacggtggcggtttctgtgccgcccagacccgacatagaagtagtcaggatgattttcataatgggaaaccttgttttttcaaataatgaaacagtttgtgcaaatttttccggtggcgcaggatgcagcctgccagatatgccgcccatacgccggcaaacagggggtagtttgccggcgtgccgaagcaggtgtaagccgccgaggaggccaggcagaacaatgtgtgcatataaagcggcaggcgtttgagcggctgccacaggcggcaggagctttcggtcttgaaaacaaaaaacagccagaatgaagcggcacaggcaaccgccgcgccccgcgccccgccggccggtacggaaagccccagcagcagcaggtttgccgccagcgcgcccaaggtggcgaatgcaatcggacgcgttttgcggacgacgttcaaaccgatgccgctgatttctgccagcgtgcaaaacagcggcggcagcatacacgatacgacggtaaaccggacggcggcgtagttttccggcagtaggagggaggtgaggggcgagaaaatgccggtcaggcagagggcggcggcaagcagggcggcgacagattctgccgttgccgagaggcgggtgggcggggcgtttttttcgattgcgcggaaaatatacggtgtccaaaccgttgaaaagatgctttggaacaataatgccgccccgccgaacgaaatacccatcgaataaatgccgagctgttccaggccggcatattttttcaggaacaaacggtcggcggatgtcagtccccaataggcaaggctgtccagtgcgagcggtatgccgtagcgcagcccgcgatgcaggacggcgggcgaaaacggtgcgcgccggacggccttcagacggcatcggttttgaaacagcaaaaaggcggcggcggcaaggtttgccagcgcgtaaacggaggtcaggacggcggtgcgcgccggaaagtgcagcagccagaccgtcagcagcaacagcagcagggcggacttgggtacgagttgcgcggacgaaaaggcaagggcgcgcccttccatacgcaaaaccagtaagagaaagcggatgggcagcaagctcagtccaaacagcaccagcccgatgccggcggcggcatcgtcgagcgaaaacaggatttcagacggcagggccgggtgggaaagcaggaaggcggctatcgcggcggcagacagcagcggcggcaggaacagggctttgaacaaaatgtctttgtcggcggcggcattgtattcgcggatatatgcctgatccagcccgaggcacaacaccgacatcgccagtcccgccgccgtctgcatcaacacgatgcgcccgatgtcgtcggcggggaaataccacgacagcagcggcaggatgatgacggctaaaatcgcgcagccaatcgatcctgccgcgtagccgaggatttcttttgtgtccatttttgatgtccggtcggcggcgggatgctgcctgtgccgtctgaagcctttcttgatcggaatttgacggctttcaggccgtcgcggctgccggcggggtgcggcagcccgggttgcgcttttccgggcgggcggcggtctgaacgggccgttttttatcggcgttattatatagtgaaacggcggcaaaccctttaaaaggcgttgccgtttttccggaacacggttttgatgtcgtgtccgaggatttcggtggaaacgggtgtccataatggcggcgcggaaagggcggcgcggttttcgggcagggaaaacaggtctttgccgccgccgaggattttgggcgaacggtacagcacgatttcgtccgccaaattttccgccaaaaatgcggatgtgagttcggagcctgcttcgaccatgatttcgccgaaaccttcgtcggcaaggaggcgcatcagatggtgcaggtcgattttgccgtctgccgtttcagacggcatcaggatgcggatgtgtgcgtgttcccgataggggcggagtttgtcttcatcgcgttccaaggtggcgatgtaggtcggagattgtccgtcggtaaccaaatggctgttcgggggcaggcgcaggcggctgtctaaaacgatgcgtgcgggttggcgcaaagttggaaaagcgcggacgttgagccggggattgtctgccaacaccgtgccgatgccggtcagcaccgcgcagctttcggcacgcaaaacctgtacgtcggcacgcgcttcctcgccggtaatccaaaagctgctgccgtctgaaagggcggttttgccgtccagcgaaacggcgcatttgaggcggacaaaggggcggcggcgttcgatgcgcgataaaaatccccggttgagttcgcgtgctttgttttcaagtagtccgcattccgtcttgatgcccgctgctttgagcaggacaagccctttgcctgcaaccggcgggttggggtcgcgcatggcggcgacgacgcgtgttacgccggaacggagcagggcttcggcgcagggcggtgtgcgtccgtaatggctgcacggttcgagggtaacaaaggcggtcgcgccttttgccatttcccccgcctgacgcagggcgtggacttcggcatggggttcgcccgctttgacgtggaagccctgtccgacaatttgtctgccgtgtgcgataacgcagccgacgcgcgggttgggtgaagtggaaaaacgccccaaagcggcaagtcggagggcgttttccatcatggatatatttgtgtccgaaaacatagggataccgtatcagtatgggttgggggaatcaggttttgccgcctgttttgacggcttgcgccagccacgaggcgaaatgttccgggctgtcgaagcgtttgtgcagggcggcgaaacggacggcggcttccgtgttttgcccgaacagctcctccagcacgatttcgacaagttcggatgaggatatgtcgcgctgacccgaagtgtagagcctgtgttccgtcaggcggacggtttcgtcaatctgttcgggtgtcagggcggattttcgggcggcggcggtcaggtcgttgcggaggcgttgtgca-----------------------cggaccgatgacggcgggcattttgagttcgacggtttcgagcgtgccgaagcgtttgccgcagccggggcagtggcggcggcggcggacggtattgcgctcttccatcaggcgggaatcggcaactcgggtgtctgggtggctgcaaaacgggcatttcatggtgtttcttcctgatgccgtctgaacgtcaaaccgatacgccggcggcgcgggcgatttccaggccttcttcggcactcatatagacgggattttcgggacggtcgtgccggacgatgttgccttcgcggaacatgaccagttcgttcacggcaagttgggaccacgattcatcgcgagtcagcggcagggtggagataacggcgacgcggtcgtccggcgtggttacttcggcaaaatcgaccattacatcgtcgtcgagcaggcgcgctttgccgaacggggcttggcggacgatgtagtgcagcagcgtgctggcgtgggcaaacagggaaatgccgtctgaaagcatgaagttaaacagcccgaacttgcggatttcgtgcgtcagccccgcaatcgcgtcaaacagcgtgtcgtcgtcgggacgggcggcaaagcgggtgcgcaggcggttgaggatgtggcagaacgcgcgttcggaatcggttgtgccgacggggtggaaaaattctccttgttcggggaaaaaatcgaccaaatgcccgttgtgggcaaacagccagtagccgccccacatttcgcgcataaagggatgggtgttcgccagcgaggtttgaccttgcgaggctttgcggatgtgggcgacgacgttttccgatttaatctggtaggcgcgcacgaggtcggcgacgggggaatttgcactcggcttgtcgtcatggaacaggcgcacgcctttgccttcgaaaaagccgatgccgaaaccgtcggcgtgatggtcggtaatgccgcccctgcggcggaagccttcaaaggaaaacataatatcggtcggcgtattgcagttcatgcccagcagttgacacatagtttgtccaaatgattcagatggtcgcaagtattcggattataccccgaactgaaaatgccgtctgaaatacggcttgttccccattattcccgcgaaaacagaaaacaaagacggaaacttaagattccgtcattcccgcgcaggcgggaatccgacttgtccggtttcggttgtttttcgttccgtaacttttgagccgtcattcccgcgcaggcgggaatctagaattt ->ERR2172265 -atgctcaagagccagtttgccggaaaaatagaagcggtgagggaagagttggctgccggccgtcccgccttcgtattcaaaccgggagaaggcgtgcgttatgagatggcggcggttgaaggtgctgtcgaacctgccgagccgtccttgcacgcggggtcggaggagatgcccgtgcaggaggttctgttggacgagctgccgtctgaaaagcctgtcaaacccgctgcgtcgaaaacggcggcggatattttggcggaacgtatgaaaaacctgccgcacgagccgcgtcaggctgccgggcctgcttcccggccggaatcggcggcagttgccaaagcgcggacggatgcgcagcgtgatgcggaagaagcgcgttacgaacaaaccaacctgtctccggattacacgtttgatacgttggtagaaggtaagggcaaccgccttgcggcggctgcggcgcaggcgattgcggaaaacccggggcagagttacaacccgttcttcctgtacggcagcacgggtttgggcaaaacccaccttgtgcaggcggtcggcaacgagctgttgaaaaaccgtcccgatgccaaagtgcgctatatgcattcggacgactacatccgcagctttatgaaggcggttcgcaacaatacctacgacgtgttcaagcagcaatacaagcaatacgacctgctgattatcgacgatattcagttcatcaaaggaaaagaccgtacgatggaagaatttttctatctgtacaaccattttcacaatgagaaaaaacagctcatcctcacttgcgatgttttacccgccaaaatcgaaggtatggacgaccgcctcaaatcccgcttttcgtgggggctgactttggaactcgagccgcccgaattggaaatgcgtatcgccattttgcagaaaaaggcggaagcggcgggcatcagtatcgaagacgaagccgcgctgttcattgccaatctgatccgttccaacgtgcgcgaactggaaggcgcgttcaaccgtgtcggagcgagcagccgctttatgaaccgtcccgtcatcgacatcgatttggcgcgtaccgctttgcaggacattattgccgagaagcacaaagtcatcaccgccgacatcatcatcgatgcggtggcgaaatattaccgcatcaaaatcagcgacgtactcggcaaaaaacgcacgcgcaacattgcccgtccgcgtcaggttgctatgagcctgaccaaagaattgaccactttgagcctgccgtctatcggcgattcgttcggcggacgcgaccatacgaccgtcatgcacggcatcagggcggtggcgaaactgcgcgaggaagaccccgagttggcgcaggattacgagaaactgctgattctgattcaaaactgaccggacacgcctttcagacggcatgacattgaccatgccgtccgaagggtaggaaatccaaccgatttaaggagcgaaaatgttgattttacaagccgagcgcgacagcctgctcaagccgctgcaagccgttaccggcatcgtcgaacgccgacacaccctgccNatcctgtccaatgtgctgattgagggcaggggcggtcagaccaaactcttggcaaccgatttggaaatccaaatcgacaccgcgggtcccgagggaggtgcgggcgacttccgcatcactaccaatgccaagaaatttcaggacattttgcgcgcgctgcctgccggtgcgctggtgtcgctggattgggacgacaaccgtctgacgctgaaggcgggcaaatcgcgttttgccctgcaaaccctgcctgccgccgattttccgatgatgaatgtcggcgaggacatcagcgcgactttctcgctggggcaggagcgtttcaaaaccatgctgtcgcaagtgcagtacagcatggcggtgcaggacatccgctattatctcaacggtctgctgatgcaggttgagggcagccagttgcgccttgtggcgaccgacggacaccgccttgcctatgcagcctgcgcgattgatgcggatttgccgcgcgccgaagtgattttgccgcgcaaaacggtgctggaactgttcaaactgttgaacaaccccgacgatccgattcaaatcgagctgctggacaagcaggtgcgtttccaatgcaacggcacgaccatcgtcagcaaggtcatcgacggcaaattccccgatttcaaccgcgtgattcctttggacaacgacaagattttcgtgttgtcccgtgccgaacttttgggcgcgctggaacgtgtgtccattcttgccaacgaaaaattccgtggcgcgcgcctgttcctgcaacccggcctgttgagcgtcgtgtgcagcaacaacgagcaggaagaagcgcgcgaagaaatcgaaatcgcctatcagggcggcgaactcgaagtcggtttcaatatcggctatttgatggacgtgttgcgcaacatccattccgacgatatgcagcttgccttcggcgacgccaaccgctcgacgctgtttaccgtgccgaacaatccgaatttcaaatatattgtgatgccgatgcggatttgacggttttccggaacacgatgcccgtattggagatatgccccgaaccgtgcagacggattcggggttttgttcggctgccggaaaggcaatgccgtctggaatgcggcggattggggttgggagcgtatgggggaagtgcttgtgcgggtcagcctcggagcaaatcccataaatcgttttgcaggtcggcttcgctttcgccttcggcgggcgcggcgcggatatagccgccgtcgggctgcatcagccacgcgtgggtattgtctgccagtgccatttccaaaccttcgcggatgacgcgttttttgagttcgggcgcggtaatcggggtggcggtttcgatgcggcggaagaaattgcgccccatccaatccgcgctggaaataaaggtgtcgtccgcgccgttgttgtggaaacaatatacgcgcgcgtgttcgagctgcctgccgacgatggagcggacgcggatgttttcggacaagccttttacacccgggcgcaaggtacacataccgcgcacaatcaaatcgatttgcacgcctgccgcgcttgcccgatacagggcttctatgacagtcggttcgatgagcgaattcatcttggcggtaatccgcgccggtttgccggcttttgcgtgttcggtttcgcgagcgatgcggccgataaccattttgtgcagggtaaacggactttggtagagtttgttcagccgcccgggtttgcccaagcctgtgatttccataaataatgtgttcacgtcggcggtgatttgttcgtcggcggtaatgaggccgaagtcggtgtagatgcgcgatgtgccttggtggtagttgcccgtgccgaggtgggcgtaacgcttgagcacgccgtcttcgcggcggatgaccagtgccattttggcgtggactttgtagccgaacacgccgtacacgacgtgcgcgcccgcctcttcgagctgcttcgcccagttgacgttgttggcttcgtcaaaacgcgccatcagttcgacgacgacggttacttgtttgccggcgagtgccgccttcatcagggcggggacgagttcggagcgcgtgccggtgcggtaaatcgtcattttgacggcaagaacggcgggatcggcggcggcttcgcgtatcatatcgaccacgggatcgaaagattggtaggggtggtgcagcaggatgggcgattggcgcaccaaatcgaagatcgggctgtttttgcccaaggctttcagacgacccggcgtgtgcggcggaaatttcaaatcggggcggttgactaggtcggggacggcgttgaggcggacgaggttgaccgggcctttgacctgatagagttcggcgtcggtcagcctgaattgcgcgagcagaaagtcgcggatgtaggcgggacaggtgtcggcgacttcgagccgcacgccgtcgccgtattcgcggtcgtgcagttcgttttgaatggcggcgcggaggttttgtacgtcttcttcgtcaacggtcaagtcgctgtcgcgcgtgaggcggaactggtggcagcctttgacgttcatgcccgggaagagtttgccgacgtgggcgtggaggatggacgacaggaagacgaagccgtgtccgccgccacacagttcggacggcaggggaacaacgcgcggcaggatgcgcggtgcttggacaatcgccatacccgaaggcctgccgaacgcgtccgtgccgtcgagttctacggcgaagttgagcgatttgttcagcgggcgcgggaaagggtgggaagggtcgagtccgatgggggtcaggatcggcagcagttcgcggtcgaaatagtcttcgatccattttttctgcgtgcccgtccaattgcggcggcggtaaaaatggatgctttcccgcgccaactcgggctgaaggacgttgttgaacaggtcgtactggtgccgtatcagggagcgcgccgcttcggtaacgtcggcgatggtttcagacggcgttttgccgttgtccggcctgcgccgggggtgcagcttgttttcacgcttgagccacgccatgcggacttcaaaaaactcgtcaagattggacgacacgatgcacaggaagcgcaggcgttccaaaagggggacgtttttgtcttccgcctgtgccaacacgcggcggttgaatgccagcaggctcagttcgcggcagaggatgcggttttgttcggtcataaggttctcccaaagatggttgttgttcggtcggagcgggcggacaatgccgtctgaaggcttggcggcatctgcgccggtttcaggcggcatgacgtgacggacggtctgtttcaggcatcggggcaatgtgaaaacggataccggcacgtgcggtatccgtctgtttcaaatcacttccaacacaaaataatgacgcagtttttcgtacaccgcatcgctgacgttgatgcagccgttggtcataatcctgtcggacacggacggggaggcgatgcgttcgtttcgcctttcggacggtatctgattccaaacgcggtgcagggcgaaaagaaaatcgccctcctgcttgaaaccgatgacttcgccgccgtaaccgggcttgtcggtactgttcagcgtcagtccgaacgtccccttgggtgtggcagtgccgatgaggacggggtggcactgacggtcgtcggcaaaacagagttccgccttggatgtgtcgacgatgacttttttcttttgaatataggcactgaccgcatccggctgcccctgtgcgaatacgggggcagtcgtcagcaggcagcacaatatccctgaaagcaggcggggcggcatagcggcttattggcggatacgtttcggttttgccggcacgatttcgcggatgatgacttgcggctcggctttgggtgcgggcggcgggcagacggcatctttcgggaagacggggttccagtagaagctgcgggcaaatttgtctttatcgaaaatcactttgtattggcaggtagtaacgccttccacgccggaagtgttttcagggtcgatacccacgcccggggtgtggaagtggaacaggtaatcccattcgcgcacgccgtacataccttcgtcgtaatgcgggcggcccgggattttgtagatgtcgtctttggtcagaccggggcgcatctgatccagttcgtcataagtcgggaatgtgccgcgcttgttgtcgagcgttacggaatagggttccgggaaaaccggattgtcggtcgtgccgtcggctttgacgttgctttatggttgcgcaggcagacagaatgcctgccgccaatactgccaagctcggtttgacgatttgtttgattttcatatgcagaatccttttttacccgatgcccgtctgccttttgttcggaagagccgcatcaggagagttttaaacgtttgattttggttcgtaatattagcataaaaaacgtgcgtatcagtaaacgcggtgtatttgtacggcatacggaatgatgcgcgtgcgaatttacgcatcctgccggcaatttgccgattcgccgacatcggcaacctgttataattcctcctttaaattcctaacgttttcaagcgaaaaacaaaatgaccatgcaagaacattaccagcccgccgccatcgagcctgcggcgcagaaaaaatgggacgacgcccgtatttccaacgtctccgaagacgcttccaaacccaaatattattgcctttcgatgttcccttaccctagcggcaagctgcatatggggcatgtacgcaactacaccatcggcgacgtattgagccgcttcaaacttttaaacggcttcaacgttatgcagcctatgggttgggacgcgttcggcatgccggcggaaaatgcggcgatgaaaaacaacgtcgcccccgccgcttggacctacgacaacatcgaatacatgaaaacccagctcaaaagcctgggttttgcggttgactgggaacgcgaagtcgccacctgcaaacccgaatactaccgctgggaacaatggctgtttaccaagctgtttgaaaaaggcatcgtctatcgcaaaaacggcacggtgaactgggacccggtcgaccaaaccgtccttgccaacgagcaagtcatcgacggacgcggctggcgttcgggcgcgttgatcgaaaaacgcgaaatcccgatgtattacttcaaaatcacggattacgccgaagagctgctcaacgatttggacaagctggaacactggccggaacaagtcaaaaccatgcagcgcaactggatcggcaaatctcgcggcatgaccgtgcgcttcgccgtttcagacgacagcaagcaaggtttggaaggcgattacgcgaaattcctgcaagtttataccacccgccccgacacgctgatgggtgcgacttatgtcgctgttgccgccgaacatccgctggcaacagccgcagccgccgacaaacccgaattgcaggcatttatcgccgaatgcaaagccggttcggttgccgaagccgatatggcgacgatggagaaaaaaggcgtgccgaccggccgctacgtcgtcaacccgctcaacggcgacaagctggaagtgtggattgccaactatgtcttgtggggctacggcgacggcgcggtgatggctgttccggcgcacgacgaacgcgatttcgagtttgccgccaaatacaatctgccgaaaaaacaagtcattgccgtcggcgacaacgcattcgacgcaaaccgatggcaagaatggtacggcgacaaagaaaacggcgtattggtcaacagcggcgacttggacggcttggattttcagacggcatttgatgccgttgccgccaagctgcaaagccaaggtgcgggcgaaccgaaaacccaataccgcctgcgcgactggggcatttcgcgccaacgctactggggctgcccgattcccatcgtccattgcgaaaaatgcggagacgttcccgtccctgccgaccaactgcccgtcgtcctgcctgaaaacgtcgtacccgacggtatgggttcgccgctggcaaaaatgcccgagttttacgaaacttcctgcccgtgctgcggcggcgcggcgaaacgcgaaaccgacaccatggacaccttcatggagtcgagctggtacttcttccgctatatgtcgcccaagttttcagacggcatggtatcggcagaatccgcgaaatactggggcgcggtcgaccaatacatcggcggcatcgaacacgcgattttgcacctcctgtacgcgcgcttcttcaccaaactgatgcgcgacgaaggtttggtcaatgttgacgaaccgtttgaacgcctgctcacgcaaggtatggtcgtctgcgaaacctactaccgcgaaaacgacaaaggcggcaaagactggatcaaccccgccgatgtcgagctgactttcgatgacaaaggccgccccgtttccgccgtcctcaaagccgacggactgcccgtcgtcatcagcggcacggaaaaaatgtccaaatccaaaaacaacggcgtcgatccgcaagaactgattaacgcctacggcgcggacaccgcccgcctgttcatgatgttcgccgcaccgcccgaacagtccctcgaatggagcgacagcggcgtcgaaggtgcacaccgcttcctgcgccgtctgtggcgtaccgtttacgaatacctgaagcaaggcggcgcggtcaaagcatttgcaggcaaccaagacggtttgtctaaagaactcaaagacctgcgccacaaactgcattccaccaccgccaaagtcagcgacgactacggccgccgccagcagttcaacaccgccatcgccgccgtgatggaactgctcaaccaatacgacaaaaccgacaccggcagcgaacaaggccgcgccgtcgcccaagaagtattggaagccgccgtacgcctgttgtggcccatcgtgccgcacatctgcgaaaccctgtggagcgaattgaacggcgcgaaactgtgggaagcaggctggccgacagtcgacgaagccgccctggtcaaatccgaaatcgaagtgatggttcaagtcaacggcaaactgcgcggcaaaatcaccgtcgccgccgacgcctccaaagccgacctcgaagccgccgcactcgccaacgaaggcgcagtgaaattcatggaaggcaagcctgcgaagaaaatcatcgtcgtaccgggcagactggtgaacatcgtcgtctaaaccgcttttaaggtttagccatacggataaaggccgtctgaaacttggaaacagggtttcagacggcctttttaaggcagattgggttgtctgcaagacagacctcaaatatagcggattaactttaaaccggtacggcgttgccccgccttgccctgctgtctgcggcttcgtctccttgtcctgatttttgttaatctactaaaaattaatctcaaaatccaaaatatgaatttatttttcgatacccaattgggaaagcaacaaaataaagcaacccacaaaatccgtgtaatgagcgaggcttggctggaaaaaaacggctattgcccctgttgcggaagcaagccgatgcagagatttgccaataacaaacctgttgcagacctcttttgcccaaattgccacgagcaatatgaattaaagagtaaaaatcaaaaaaccataggcaacagcgtgcctgacggtgcatatcgcactatgttggagcgcatccggtcagataccaaccccaactttttctttcttgcatataaaaaagcggattactccatacggcaattggtgcttgtacccaaacatttcatcacgccggatatgattattcccagaaataaaggcattaaaaaccgaccgcaccacattatgtgttccatcaatctcgcccctttgcctgaaagcggaaaaatattcttaatagacgattcccgcattatcgaacccgaaaccgttctgaaaaaatggcaatccaacctgtttttacgcaaccaaaatgcggagcgcaaagactggcttttggctgttatgaaatgtatcgaccaactcaccgaagaattcacattgtcgcaaatgtatgaatttgaaaacaaactatccatccaatttccccaaaacaaccatatcaaagacaaaatccgccaacagttgcaaattttgcgtgatcaaaatatgatcgaattcattggtcgcggactttacaaaaaaatcgacaaattgcacccaactcccaaggcgttttgatttcaaatcatgatactgaatttacgagaaatatttattcttctgccattttaaaaacggttgaagtacaacgcaatattgccgcaaagggcagcagtcgtaaaaaagtcggagaattattggcaatttatgattgattttgacaaaccggctgaagaagctgccatttatcaaagtcgtttgaaaaaatcgtttcagacgaccttgtcctctacaacgaaaattcccttaacgtcatgcggaagatattggaaaaacatccaaacggctgttttgatatgattttcgcagacccgccttactttctttccaatgacggtttcagttgtcaaaacgggcaaatggtttccgtcaataagggcaactgggataaatccaaaggaatggcggcagatttggaattttacgaagaatggctccgactgtgttacgccttattaaaaccaaacggcacaatttgggtttgcggcacatttcataatatctatttaatcggctacctgatgcaaaccgtcggctaccatattttgaacaatattacttgggaaaaacccaatcctccccctaatttgtcctgccgtttctttacccattcgacagaaacaatcttataggcaaagaaaaataaaaaagctaaacacacgtttcattatgaaaccatgaaaacacaaaatgatggcaaacagatgaaatgtgtttggacatttcctccaccaaataaaaccgaaaaaacattcggcaaacatccgacacaaaaaccactccccttacttgaacgctgcatactatcggcttcaaatatcggagatttaatttttgacccttttatgggcagcggcacaacaggcgttgccgccttaaaacatggtcggagattttgcggttgcgaactggaagaagatttttttgaattagcaaagaaaaggttagaaaaatgattattggcggaatcggcggtgcaaggacacaaacaggactcagattcgaagaacgtacagacttacgaaagttgtttgaagaaattcccgggtacgacttaagaaaaacagatgataatgcgggttatgaagtttggtttaatggagaattgaaggcttattgtttcaaaaaatatgagttttaccgatttttggaaagactggaatacaatattaattggaaagaccatctgtctaaaagattactgcccgataatggcttatttatcatcatccgtgataccttatttattattgagatcaaattccaacaaactcccggttcagtagatgagaaattacaaacttgcgattttaagagaaaacaatatacaaagttagttcactctttaggttggcgggttggatatgtctatgttttgaatgattggtttacaaaaccggaatattaaagatgttttagattatattatcagtgttaactgccattaccaatttaacacgattcccttaaggtggtttggactgcctgatggtgaaacaaatgaataaataccatatttaaaacacaaccgttcaaggtcgtctgaatatcatttcagacgacctttcaccaatccccgccgttttccatctttctgctattgtgataaagtagcccgaccttttgttcaaaatacgcggattccgcgacactgaatgcagcatctgtcaaagattatttgaaaacggtcgagttaaacaagtctgccgacaatgtcgataccacatccaaaactatccgcagggtttaggcggtattccagagtacggtgtcttatgctgatgctgtaaacaatgcctgtatagaaaatctaaaacggttgttgccgaccgttatgccggtttatgagcaaagtgtcagaaataaggggcgcgttaataaaaaacgtcggcgttaagggaaggggatcgagaatttgagccgttgtttcaaaatgccgtctgaaatcgtttgagattcagacggcatttaaacagttctgcgccccgcccgttttgccttcaagcccgcgccgcttaaatctaatccccctgcaacgggcgcaaaaaatccccgtgcctcgcggtcggggatgtttcgggtttcgcgcccgtctgcgccgtgccttgctgtcgggctatgccgtctgcaccgccgccgtttcggcttggtttgatgcggtcgggcatttgtgcggctatgccctgatattcggttcggcggtcttgcctgtcttggcaggcatattcagcagcgcgtctattgtgaacttgctgattttgccgtttgccaagtcggctacgcaatggcttcgatacccttgtttttgacgatggtcagcagcttcaacgccgcgccgctcggctttttaacgccccgctcccaagccgaaacgtgattttttcccacgttgagatagatggcgaaagcggcttgcgatagtgcctccttctccctgattgccttgatgtccccgccgctcaacggtttgatttcggtcaggcaggacttgtcaaagccgcgcatagtctttttgtcgattgcgccgatgttgtaagccccttccatcatttcatgaatggcggctaatgcctcgcttttgtatttcataattctatctccgtgataatgccgtcttctttcaaagccgccagctctgcccgcgtgtatttcagataatatgcggcggcttttcggtaaacgtccagttctttatccgaaatgttttccctgtcgttcttggcaaaggcgtaaacgaaaaatgccctatctgcctgtttgaacaatatcaggctgcgatagccgccgcttctgccttgtccttgccttgctatgcgctgcttaatcacaccgccgcctaaatctgcgtctatcagcccgttatccgcccgctctaccgcttccagcagctcggaatcgttgattttgtgcttcttggcaaatttcactatccattggtttttgaatatccgcattgtgtagccgttgattagtgatacttggaattataccagagacagacaacacggcaagctgccttttttatgccccgcaatttctccgtttatgccgcctgaaacaccggcggctaacctgattattttttaatcaatcgcttttaatggctcaaattgcgtttttagcgcgtttcgctgtcttcctatgccccgtatataaccaagcggtttaaccgccattcctgctcaaaataggcgcggttccgtgcgttttggcttttcattccgctacgctcccactgccaagacggtgaaaaaccggaaaaccccaaaagttgttaccgattcgttaccatttgttaccgcatttgttaccaattttttatctttttcttattttatagtgaattaaatttaaaccggtacggcaaggcgaggcaacgccgtaccggtttaaatttaatccactatagtataggttttttccaaaaacccaaaaaaaaccgctctgcatcttggacggtttccccctcattccctacggtgcgtcagtattccccgcaagctatttcccgcttggcattcctgatttggtggtcgttcagctttatttttacggtattttctcgcggtattttcggatgctgtaaaaaatcaggttagttcaattagggcggattggacgggattgcactgtcaggaagggggacggcaggataacaatcagcctgaaatccttgtattgattgggattggttgacggcattagacaggattaaacgaaaaaaaacgcttagaatttctaagcgttttgtgtgttggtgccgacagcgagatttgaactcgcacagcctacggccactaccccctcaagatagcgtgtctaccaatttcaccatgtcggcatttgaaaaactgttatttctgctgctgaggaacaggggcagaaggttcggtattgcttacgggtttgggtgcttgctgagtttgttgtacgttgctgaagtccaaaccgtgttttgtcgtgtgggtgtgaatatacaccatagccatgcaggttgcaaagaaaaatgttgctgcaacggcggtcgagcggctgaggaagttagcgttgccggcagagccgaatacgccttgcgcgctgccgcttcccgatccgaaagtcgcgccggcatccgcgcctttgccgtgttggagcaatactaacacgatgacggccaaagcggaaattatattaacaatccaaattagggttttgaaggcttccatatttttctacgcattttgtgcggcactgatgatggcggtaaaggagtcgtacgacaatgacgcgccgccgacgagtgcgccgtccacataaggtactgcgaagatgtcggccgcgttgtccgctttcacacttccgccgtaaaggacgcggattttaacatcgcttccgcacaaagacaagatttctttgtagatgaatgcgtgcatatcggcaatctgttcgacggtggcgactttgccggtgccgatcgcccagacgggttcgtaggcgacggcgatgtttttggtatccagcccttgcaggatggaaagctgatgggcgatgacttcgtgttctttgccggcttcgcgctcttcgaggctttcgccgacgcacaataacgggatgagtccgacgttgaggacgttttccattttgcggcgttggatttcgtttttttcgccgaaataaaggctgcgttcggagtgtccgatgaggacgatgtctgtgccggtgtcggcgagcatttcggcggacacttcgccggtgtacgcgccgttgtcggggaagcggctcacgtcttgggcgcaggtgaggatgcggttgtttaagacgatttgcatggcgttgtgcagttgcagcaggtaaacggtcggggcggcgagtccgatgaggacgcgttcggcggtggggaggatgcggaagcggtgcatgagcgaattgttgttctggagccggccgttcattttccagttgccgatgacccatttttgatcccacattccgatttggtgatacatcttttttgctccgtgtcgtgttttttctgtctgccgcgtgtggcgcgttgcaatgtgaagtttagtggatatgcggcgggttcgcaacttggggcgggcggctgcgggggcggtttggaatgttgtttcgggcaggttgttttataatggccgcctgatatgtatgcaactataggagatgtgatgcacgcgcttcatttttcggcttcggacaaggccgcgctttatcgggaggtgttgccgcagattgagtctgtggtggcggacgagacggattgggtggcgaatttggcgaacacggcggcggttttgaaggaggcgttcggttgNttttgggtgggtttttatttggtcgatacgcgttcggacgaattggttttggcaccgtttcaggggcctttggcgtgtacgcggattccgttcggtcgcggggtgtgcggtcaggcttgggcgaagggcgggacggtggtcgtcggggatgtggacgcgcatcccgaccatattgcctgttcgtctttgtcgcgttcggagattgtcgtgccgctgttttcagacggccgctgtatcggcgtgttggacgcggacagcgaacatttggcgcagtttgatgagacagatgctttgtatttgggcgaactggcgaagattttggagaagcggtttgaggcttcgcgccaggcggcttgagtgatggaaaggggcgggcggcgcgtgccgaagttggcgcggcgggagtgtggttttataatgcctgccattgttgaaacaattatttgacggagcactaaatggattttgaaaaagcgcggttcaatatggtcgaacagcaaatccgtccgtgggatgtattggattttgacgttttggacgctttggcggagattccgcgcgagctttttgtcgatgaggatttgcaggNtttggcgtatgcggatatggcgctgccgcttgccaacggtcataagatgctggagccgaaagtcgtggcgcggctggcgcagggcttgaagctgacgaaaaacgatacggttttggaaatcggcacgggttcgggctatgcgaccgcgcttttggcaaaattggctggtcgtgtggtttcggacgacatcgatgccgaacggcaaaagcgcgccaaagcggttttggacggcttgtctttggaaaacatcgattatgtgcaaaataacgggttgaccgaactttccgcaggtgcgccgtttgatgcggtttacgtcggcggcgcggtaacccttgtgcctgaagtgttaaaggaacagttgaaggacggcgggcgtatggcggttattgtgggacgcaggccggtgcagcgcgcgcttttgattacgcgcaggggcgatgtgtttgaagagaaggtgctgttcgatactttggtggcgcatttggacgacaaggatgcccatcctttcgacagttttaatttttgatgttcggattgtgatgccgtctgaaagcgggtttggggcttcagacggcattttgcttggtttttttcggggggtttgtgatggatattgtgcaacttccgtcggcggcattgaaggcgtggatggacgaagggcggatgttttgtttgttggacgtgcgtacggatgaagaagcggcggtttgttcgctgccaaatgcgctgcatatcccgatgaatctgattccgctgcggcaaaacgagttgccggacgatgtgccgcttgtggtgtattgccatcacggtatccgcagcctgcatacggcgatgtatttggcggaggcgggttttgaaaacctgtacaaccttcagggcggcatcgacgcgtgggcggttgaggttgacgcggaaatggcgcggtattgaaggcggcttcagacggcattccttaaatgcgtgtacctctggtgttccataaaggtcgtctgaaagtgcagcttctgcgaagctaaagcgcagtatcaacgaagttaaaatttgcctgaaccttaaaggcagcctgcaccccaattccctcgccccgtgggagaaggctagggagagggcggcaaactgcaggtttgcttgggcggcattttcaatgtgcaggctgcttttagcttcgcagaaactccgttttcagacgaccttatttaaaccgataggtaaacgccgcgttcactgtccgcagtgcgccgtggctgtggcggtcgggctgggtgcggtagtgtttgttgaacaggttgtccacgttcagcgacagttcggtgcgcggattgaagcggtaacgcgccatgatgtcggcgacggcgtaggctttctggcggctgttggcgacggcgcgggctttggcggcggggttggggatgtggagcgcggctgggtcggtgtgggtttcgccctgccggcgcacacccgcaccgatggtccggccgctgggggcttcgggggctaagtggtaggcggtgaagagtttgaagctgcgttcgggtacgctgtcggggttcaggcggctgccgtcttggtcgcggggtttgctttggctgtagcctgcctgtatctgccattcgggcgtgatgcggccgccgacttcgatttcccagccgtgggttttggcttggttggcggcgcgatagtaggtgttgccgctctggtcgcgtcctgctgcggtggcgaggttgtttttacgggcgcggtacacggcggcggatgcgttcagacgcccttcaagccattcgcctttgatgtcggcttccagattgttgccggttacgggtttcaggtagctgccgtgttcgtctttttgcaattgcgggacgaacaggctgctgtacgagccgtaaagcgacaggttgccggtcagatcgaacacgatgcctgtgtagggggtgaaacggttggcggacacataggtcatgccttgtgtgcggctgttgtagctgcctgcgcggtagcggctgtatctgccgccgagtatcagcgaaaggttgtcggcggcgcggaaacgggtggcgagatagccgccgatttgccgcctggtgtcgtattgcgggatggtttgggcaaacgatgatggctgcggataggcgcccgtgcgggaaaattcgtaggcgttgggaatggcgttgggaatgatgctgcgttcgccgtatttgttgctggcgtatttgtagccgttgatacccgcgattaaatcgtgctcgcggccgaacaggcggtatttgccggtcaatgacatgctggcgctgtgggtgcgcggatcggcgtgccaataaccgggaatcaggtcggtggcggcagtgctgtggtcgatggaaagtacgcctgccacaccgtagggctggcggaagcggctacgggtgtagtcgtattcggctttgagtttccagtcttggttgaagcggtgttctatgccggcgaacaggttgagcgcacggttgcggctgttcgaccaatttgtggcggggttgtcttttgggccgaaggcggtggcataaccttggctgtcgtacacggcgtagctgagcggcgcgtctgcggtttctttcgcctgctggtagtccatgcctgcgtggacgcgggtttgcggtgcgatgtcgtattccaaaatgccgtagagttcggcatcgcggctgcgttcgagctgccgccacgagtcgccgcgtccgaaggtggaaaccaggcggccgcgcagcgtgccttcggcgttcaggctgcccgatacgtccgcgcccagcccgaaatgtttgcggttgccggcttcggcgcggacttcaaacaatggcttgcgggtcgggtgtttgcgtaccagattgacggtggcagaaggctcgcccgtgccgtccggcagccccgccacgccgcgcacgacttctacgcgctcataggcggcggtgttggcattgcccgtatcggccagcgcgtcggcaacggggatgccgttgatttggtagttggcgatgcggctgccgcgcgcgaacaggtagttgtagcccgcgcggtcggagccgtaaatctggcggctggtgccggtcgcctgcaacagggcgcggtcgagcgttttgatgttttggtcgcgcatttgttgcgatgtgatgacgctgacgctctgcgggatttcgcgcagggtcatgggcagcccgaacggggtgtgcgtgccggaaacggtgtagccgtcgttggaactcgcggtgcggtcggcggtaacggtgatggtcggcaattcggtgctttcctgcggtttggggtcgtctgaaacagaaacatcggcctgcgcgtacacgggtagcagggcggcaaaaagcagggagtatttgaagcgtgtcatggggtttcctttgtgtgttggtgtgcggtggggttgtatagcggattaactttaaaccggtacggcgttgtcccgccccggctcaaagggaacgattccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatcctctatgcttttggcatattgaaggtgtaggctgcttttagcttcgcagaaactcagcttccttcggaaacttcgttttcaggcggcctcggacgggtcgggcagatcaatcagcaccaccgagcagccgttttccgaacgcgggcggtgcgacaccgacttcggcacgaccgccatctcgccctcgcgtatcgtcatgttgccgccgtcggcgaagtccaccgccatgtcgccctccacggcaaacagcactttgtcgctgtatccgtgcgtgtgccagccgtaatcgcccaaaagtttgaccaggcggaattggaacccgtggcggttgatgatttcgggctgccagtattctttgatggcggcaaggtgctgtttcaggttgatggtttcgttttgcatggggttctccttgtggtttgttttgaataaaactactgcgccgcaacgggttctgccttttcaaacgccgccttcaactgttccgccgcctgtatcaactgccgcgcgccgcccgcgacaatgtagttcgcggcaggcatgacgatgatttgcttgcgcttccaagcgttcgtgccgcataccagcgcgttatccaacacttccacggcagccggcccttcctgcccgatggcggcggtgcggtcgatgatgaaaatccagccggggtttttctctttgatgtattcgaaggaaacgggctgcccgtgcccttcgttgcgtaaagattcgtccacgggcggcaggccgatgtcgccgtgtatccaacttgccaaccgcgattgcgtgccgaaggcggacaccttgttgcctgtaaccgacagcaccagcccgcgtcctttgcctttggcggcttcgcgcttttgggcgaacagcgcgtcaatctgcgcattcaattccgccacgcgcgcttccttaccgaaaatccgcgacagggtctccatctgcttctcgccgctggtgcggatattgccgttgtccaccgtcaaatctatggtggtcgcgtttttcgccaactgttcatacgcttccgcacccggcccgccggtaatgacaaactgcggattgtggcggtgcagggattcgcaatcgggctcaaacagcgtccccaccgttgccgccttgtcaaatgcaggctgcaaatagtccacgcgcaccggcgcggtggttgcgcccacattcacgcccggctcggtcagcgtatccaacgccgcccagtcgtacacggcgacgcgttcgggattcttcggcacaacggcatcgccccgcgcggtcggcacggtcagcgtggcgacaggtgtggatgcggcttgggatgcggcggatacagttttttcggcggcaggttcgggcgaacaggcggccggcaggacggcgcaggctgcccaataaaaacgcggtttcacggtgtgcggttcctttgcatacgaataagaatgtttattattaagcaaacaacctgcagaaaccacgccgcaaaacgcaaaattcccgatacggcaaaacaaattcccgaaacggaaaaggtcgtctgaaacaccctttcagacgaccttttccgttccaaccaatccctgcgcttgattattggtaataattcctatttaattcatttgttagacaactcgttcctatccaatcatgaacaccgccgccatctaccgccagtaccaaacctatgtccgctccgataaatccggctgggcgttggacggctgttccgacagcgcactcattgcgcaggcaaaacagcccggtttgcatctgaaaatgtgcatcaaccgcttcgactcgggcattaccttatcacggatgcgcggcggcggaacgggtgcgtttcccaccgaaatccacaatttcagccacaactgcgccttgttcgtcatggtatcggggcagaaccggttacaaatgggcggcagggaataccgcccgtctgccggcgaaatctggctggtacgcggcgaactggcggacgtatccgaaaccctgctgccagacagcggcggcatgtgcgcgctgcatttggatttttcgctggaaaaactgcgccgctggcacgacgaaggtttactggacgaacgcctgttttcgccgcaaacgataggccgattcgccctgcaacggctggcgcaaaacgcggggacactgacggcggcggcctgccccctgctgcaacgcccgttcgaatcggacggcttcggcctgctcgccgacgaagccgacgcgctggaactctccgcccgattattacgcttcaccttccgccgccacgacaacggctaccgccgccggcgcatagacgaagccgccgatattttgaacagcgaattcgcccgcccgctgaccatcgccgaaatcgcccgccgcgtcgggctgaacgaatgctacctgaaacgctatttcaaagcgcaaaccggcgaaaccgtcgccggacgcctgcgccgcctgcggctggaacacgcgctcgccctcatcgaatcgggcagcaccatccaagccgcgatgcacttttgcggctaccgccacgcgggacggttcaacgaagcgttcaggcggcattacggatttttgccttcggatgtgaaaaagtgctgatgggccgacggcatagatattttgatttgaaacaaccattaaaaaagatcgtctgaaaaagcaatttcagacgatcttttttcattcgcggcggcagtgtcgccccctgcccttatcccaaaaattctttcaaaaacagcaacacgcaggcgagtttgtcggcggattcgcgttgggtgccgttgccggtatggccgccgccgtcaggcgagtagagccaagattgcggcgaggtttcgcgcagtttggcgtagaatttgagcgcgtgggcgggatggacgcggtcgtcgctgaggctggtggtaatgagtgcgggcggataatcgatgccgtctgaaagattgtgatacggcgacaattcgcccagccggcgtttgcaggcttcgtatttctgcggattgccgtattcgtccgtccaacttgaaccggcggacagcagcggataacggatcatatcggtcagcggtacttcgcacaccagcgcaccgatgctttgcggttcgcgcacgaaggcggcggcggtaatcaggccgccgttgctgccgccctgcaagcc----tgtttgggcgaactcatgccgcgttcggacaaatcacgcacgactgccaacaaatcatcaacgcttttgtgtttgctgattccctgcgccgcctgatgccagcgcgggccgaattctccgccgccgcggatgtttgccaatacaaaggcattgccctcttccagccaatatttgccgacgctgcccagataatgcggcaattcaggaatgccgaaacctccgtaagcatagactaaggtcggcgtgtcgggcgcggcgtttttgccgacgtggaaataaggaatgcgttcgccgtcggacgacaccgcccaaaactgccgcacttcgatgccgtctgaaacaaactgctgcggctggaggcgcatgacggtcagttccatcacgttcaaatccagcgcaaacagcgtcagcggcgtggtgaaatcgctggcggcaagataaaccacgtcgccgccccacggttggtcggtcatttccaacgcgcccgagggcaggtgcggcaactcggcttcctgccatttgctgtcggcaaaccgccacgctttcagacggccttgtacattctccagcaggcttgccaccacaaaacgcttggtcgtttccacgctttccaatgcctgcgtttcatcgggcgcaaacaaaagctgcgccgccccgagttcgccccgattcagtttcaccgccaccaacgcgccactcggatagctttggttcgcgcggtgccagtccttgcgcagcgtcagcaaaagatgtcccgccagatagccgaccacatcgcaatcattaggcaggttcaacggtttcgccccgccttcggacgacacctgcaaatacgtcttggtgtaaaaaccgtccgacgcttcaatcaaatcaatcggcgaaccctgcggatcgaggtaacgccacgcgtttaccatcatcgcgcctttatcgatttggtacgccggcaggctttcctcgaaactcttgccgcgttccaccagccacacttcgcgcggatagcccgattcggtcaactggcgttcgtcccaagccggacacacccacacgctgttttcatcgcgccacgacacatggtttttgcctgccggaaagtgaaaaccgccctctaccaattcccctgcttccaaatccacttccagcgtatacgccgtatcgccgcccgatttgttcaaagtcagcagcgcgcggttgggctgctccaccaagtgcgacacgccgcccaaatacacatcgtcgccgagcaactcatcgaaatccgccaccgaaaacaggattttccactcgggatagccggaacggtaggtcgccgccgtacacatgcggtacacgcccttcggatattccgcattctgatggaaatggtacatccgcgcgcggtgttcctgacaaaacggaatctgccgcgtgtcctgcatttgattcaaaatgccgtctgaaagtgcgcgcgccttgtcgttttctaaaaaacgcgcgcgcgtttcggcattcgcttcagcagcgaagttttgcgtttcggcggaatcgaggttttcaaaatggcggtaggggtcggggtaggatttcatcggggtccttgagggtcgggcaggtctttgtcatcggggaaatgccgtctgaaacggggttcaggcggcatttctgcggcggctttccgttgcggtcagcggtgcaggcgacgcaccagaatatgcgggtttcgtccgttgctgcggtagtctttgcgccgcgtttcgggcagctcgtcttccgatgccgtctgaaagccgcgttcggcaaaccattcgccggtatttgtggacagtgcgaacagcctgcttatgcctatgccgcgcgccttatcgataatgtgggcaagcaggcgttcgccgtagccgccgtcctgtgcctgcggcgagacggcaaggcaggcgatttcgccgcaatcggcttcggcaaaggttttgagtgcggcacagccgtacaggttgccgtcgtgttcgaggatggaaaattcggaaatgtggttttcgaggtattcgcggctgcggtgcaataggatgccctgttcttccagcgggcggatgagggcggcgatgtgcgggatgtcgccgctgtgcgcctgccggatggagacgaaggcttctttggcaatggacgtgccgatgccgttgcgggtgaagagttcttgcagcaggctgccgtcggcggccccgttgaggatttggacgcgatgcacgccgccttcgagcgcggcaacggcggacgaaatcagtcgtcgggtttcgctggcggcgtgttccgccagcgattgcgcttcctgtgccgagagggtttcggcgagcgtgccgtcggggcgggaaatgccgtctgaaagggtcaggtaaacgagtttttcggcttgaagcgagacggcgacggaagcggcggcctgcaccatatcgagattgaaggttttgccgccgtaggaatgcccgagcggcggcatccagacgatattgcccgcgtcgagttggaaacggagggcggcggtgtcggttttgcggataacgcccgcgtattccatatcggttccgtcaatcacgcctatcggacgggcggtcaggaagttgcccgatacgagcgggacggaaggcgcgcgcgcgaatcctgaaacgctgccgcacaatgcggcttcaaaacggctgcggacggtgccggcaaactgctgcgcctgtccgagcgaggtttcgtcggtaacgcgcaaaccccggcaataatgcggcgtgcggccttgcgcggcggcgaggcggtcgaggaagtggtacgcgccgtggatgaggacgagtcggatgcccagttgcgacaacagcccgatgtcggcggcgagcttatttaaggtgccgccttcgagcaggcggccgtctatgccggcgaccagtgtcgtgccgcgcatttggcggatgtagggggcggcttcgcggaagtgggcgacaaagctgtcgggcgcgttcataggatgaagaggtaggaaagctgcataatgaggacgataagtgcgaacagggttgcaatagtccagttgagcccttcctgacgggcgggcggtacggaaacctgcggtgcggcggcaggtgcggcagcggcggttgcgggcggcgtatcgtgcagggttgtaccgccgttgaggatatcggcgatttcgtcgcgggaaatctgtttcttgctaatggcgtgcgtgccgatgcggtggacgagtttgacatccgaaacagcttcgggcaaatcgttgaatataggttctttcgtgcttgccagatggtctttggctttaaacagcccttcgcatttttggcagacgacgaagccttgggcgacgttgagctgggtttctttgacccagaggcgggttttgcagtgcggacagaaacaggcgggcatgatgttttctcggtgtgtgtcggtttgatgccgtctgaagcggcaggtggttcggacggcatatgctttatttttattctacgccgtactgccggcggtaggtgcggacgggttcgaggaactgtccgaattcggggttgttttgcaacaggataaacaaatcgttcaggctggcgatgggggcgacgggcaggccgtattgtttttccacttcctgaacggcggacaattcacccgtgcctttttccatgcggtcgagcgcgatggcgacaccggcgggggttgcaccctccgcttcaatcagtttgattgattcgcgtacggatgtgccggcggaaatcacgtcgtcgataatcagcacgcgccctttaagcggcgcgccgaccaacacgccgccttcgccgcggtctttggcttctttgcggttgtaggcaaacgggacgttcacgcctttttccgccagcatcatcgcggttgccgccgccaaaataatgcctttgtaggcggggccgaacagcatatcgaatcggatgccgctttcaatgatggattgtgcatagaattttgccagttgcagcgtggacgcgccgtcgttgaagaggccggcattgaagaaatagggcgaccgccgtccggctttggtggtaaattcgccgaatttcaaaacattttgggcgagggagaatttgaggaaatcttggcggaaatcagtcattttgtgctttctgtcagatattgggacgcagttgcgattctaccgccccgtgcggcgcgcttcaactgccgccgccttgccgcaaggcgcgtttcaactgtttcaacacctgccagtttcgggctttgagttcgggttggcgcaacagccgggcgggatggtcgatgatgaagaagggacggctgccgcacaaagtttcaatcatcgcctgccgttccaggttgacaaacgcctgtccgaggaataggacggcgggggcgcggcagccgtcgagttccccggcgatttgacccagcgcatccgcgacggcctgttcagacggcatcgggttaccgacggcggcggttttcacccaacaggttttgtggacataggcggcatccagtcctgcggctttgaggatgttgtcgagcaggatgcccgctttgccgtggaacagttgcccgtaaaccgcatcctcgatcggcggacacaggctgacgacggcaagcttggtaatgcccgaagcggcgggaacgggggcgatgccgtctgaaaggccgggcgggggcgtttcggtttcaggcgcgggtttgcgcgtatgtacggcggcggtttccaacgctttcatcgtttcgagccgcgcctgaacgttatggggttgggaagggcggatcgtggcggcgcggacggtttggggacgtgcctgtgccggggttgcgggtgtgtttttgggcggcaggacggcggcggcctgtttcagccacatcggacccaagcccaaagcctcgtgcaggtggaggtagcgcgcgcttaacatattttctccattaagacggcatcttcggtttgcccgtcggcggcgcagtaatagtttttccgcctgcccgcaatgctgaagccgtgtttggtatacagtgcctgtgcggcggcgttgcctgcgcggacttcgagcagcaggcgttgcgtgccttcgggcagatgtgcgtaccaatattcgagcagggcggacgcaacgccccgtcggcggcattcgggcgcggtggcaatcaggtgcagttcggattcgtcgggcaggttctgccaaacgataaaggcggcaatcctgccgtctttttccgcaaggaaaacctgttcggacggcgaaacaagcgcggactcaaattggcgttgcgtccacgcggacgggttgcagacggtatcgagcgcggccagtgcggcgcagtcggacggtaaggctgggcggatgttcatgttcgtgccttccgttccgcctgttctttggcagtcagggcgattttgttgcggacgtagagcagttcggcgtgtgccgcgccagttgcgggatagccgccgagggcgagcgcgagaaaatcggcggcggtcggcatatcgggtttgcctgagaagggcggacggttttccagtgcgaacgcactgccgatgccgtctgaaaagacgtacccctcggggagggcaatgtctgccgccctaccgacttgataatcgctcaaacggcggcggttcagcgtgtcgaaccacgcataaaacacttcgcccatacgcgcgtccgcagcggcgagtatgcagctttgcggcggcggcagcgaggcggcggcatcgagcgtggggatgccgattaaaggcgtgtcgaacggcgttgccaaaccttgcgccacgccgatgccgatacgcagtccggtaaacgcgccggggcctttcgcataaacaatcgcccccaaatcggcggcggtaatgcccgcatttcggaatagggtgcggatttccggcaggatcagttcggactggcggatgccgacttcctgatggaacagacggatttcgccgtcggcgcgcagcgcgagcgacaaataggaagttccggtatcgacggcgaggacggggcggttgaaatcggcttgcatggtgtggttctcgttggttcagacggcattatatagtgaaatcggcttgcctgccgtgtcgtcgtgtcctagggcggtatggcgcaaaaatgccgtccgaacggtaaattatcgtgttcggacggcatttttcaaatactactgtttgtcggcgatgccgatttcgtgaaccttttcccctatcttcacggttgccgagccagcgatttcttgggcgcggccgccgaaaagggcgaggcggtaagtgcctttctcttcgccgccgtagcgcgtgtcgcccaaaatgacggcgtgtgatttttcatctgctttgagttcggcggaggcaagctcaacattctgctcgggtgttttcaggtgttcgattttgccgtgtccctgtttggcggcgaaatctatggtataggtcagttttccgccggcatcgtcggagctgaatgctttgccgtgatactcggctttgccgtcaggcagttggttgaaggcggtatgttctccgcccaaatcgctgacaaggaaggagcgttggtttatcaggctgtcgattttgtcggggttgttgattttttcaatccgtagggcaacgacggcggagtgatcctgtttgtatatttgaaattcgccgcttgccagtgtgatggtttgtccgtccacttcgattttttgcacgaagtcgaagcggctgattttgtcgttcttcagtttgcccgtgttgaggctgttgtctttgccgccggctttgaaagttttttccgcaccttgtgccgacagggtcagtgttccgttttggggaatggaggcttccaatgttagggatttcaaacctttgtctttatggtcgagcggcgcggttaatgcatcggcaagccccgtgccgatgtcggcggcgacaccaccgcctccgcccctccgctgctgcaggcggtcagaatcagggccggcggtcaaagaaaggcagcagaaggtagttcggttcacaggtttactcctagtcatacacagaatagataatatataaacgttttggttatggtatctttttttgcatactgcatcaatgaggcaggtcagagaagcaaaaatcaaatgccgtccgaacggcgttcagacggcattttgtttacaggcaacctgttatttgacgatttggttcaattcgcccttggcataacggcttgccattttttccaacgaaacaggtttgattttgcctgcctgaccttcgcaaccgaacgcaagataacggtcgaggcagatttgcttcatcgcttcaatggttttgcccaagtatttgcgcggatcaaagtcggacgggttttcggcaaggtagcggcgtaccgcgccggtggaagcgaggcgcaggtcggtatcgatgttgactttgcgcacgccgtgtttgatgccttcgacgatttcttcaaccggcacgccgtaggtttcgccgatattgccgccgtattcgttgatgactttcagccattcttgcggaacggagctggagccgtgcatcacgatgtgtgtattgggcagggcttggtggatttccttgatgcggtcgatacgcaatacgtcgcctgtgggcggacgggtgaatttgtatgcgccgtggctggtgccgacggcaatcgccaatgcgtcaacgccggtatctttaacgaaacgcacggcatcttcaacgctggtgagcatttggtcgtgtgagagtttgcctgccgcgcccactccgtcttcttcgcctgcttcgccggtttcgaggttgcccaatacgccgatttcgccttcgacggacacgccgcaggcgtgggagaagttgacgacggtacgggtggcgttgacgttgtattcgtaagaagaaggggttttgccgtcttcgagcaaagagccgtccatcatcacggaggagaagcccagttggatggagcgttggcacacgtcgggcgatgcgccgtggtcttggtgcatcacgacggggatgtgcggaaattcttcgactgccgccagaatcaggtggcgcaaaaacggcgcgcccgcgtatttgcgcgcacctgcgctcgcctgtacgatgacgggcgcgttgacttggtcggcggcttccataatggcgcgcatttgttcgaggttgttgacgttgaacgcgggcaggccgtagctgttttcggcggcgtggtcaagcagttggcgcatggatacgagtgccatttgtgtctccttgggcaataggtaaataaggcggattataatgttttttacggcaaaaaaccataaacggctcattgattttatattaacgataacggcgggcagatggggcggattttgggcggttcgggattttggtgtgttgtttatgataatgttttcactggttttttgatatttgtgtgggacggttatggttttggacgggtttgcggcgtattttgacgcttatttggaaaacatcgtgcgcgagggcaagtcggagcacacggttgcggcataccggcgcgatttggaagaactgtttgcactgttggcacaaatgccgtctgaagatgcaggcggcgtgccgcaggacttgtcgcggcgcgattttacggcggcgttgcggcggctgtcgcagcgcggtttggacggtcggacgctggcgcgcaagctgtcggcgtggcggcagtattgcgcctggctggtcaaacgcgggctgatgcgcgccgacccgaccgccgacatcaaaccgccgaagcagcccgagcgcgtacccaaagccctgccgcaggaatggctgaaccggatgttggatttgcccgtggacggcggcgacccgctggcggtgcgcgaccacgcgctgttcgagctgatgtacggcagcggtttgcgcgtgagcgagatacacggcttgaatgcagatgatgtatatttggacgaagcgtgggtacacgttaccggcaaagggcgcaagcagcgtcaggttccgctgaccggcaaaagcgtggaagccttgaaaaactatctgccgctgcgtcagacggcatcggacggcaaagccctgtttaccggcaggaacggcacgcgcctgagccaacgccaaatccaaaaacgcctcgaatcgtgggcggcgcaatacggcgacggcaggcacgtttcgccgcatatgatgcgccacagctacgccggccacctgttgcaggcttcgcgcgacatcagggcggtgcaggagctgctcggacacagcagcctttcgaccacgcagatttataccaagctcgatttcgaccacatcgcccgcctctatgacgaagcccacccgcgcgccaagcggcaggacgaatgacgtacggcaaaatcagccgtcagccgcacgctcttgatatataattgaccgttgcacccggacgacacataaaaaagacacaccatgaacccaagccccctactcgacctgattgacagcccgcaagatttgcgccgcctggacaaaaaacagctgccgcgccttgccggcgagttgcgcgcctttctgctggaatctgtcgggcagaccggcgggcatttcgccagcaatctgggtgcggtcgaactgaccatcgccctgcactatgtgtacgacacgcccgaagacaagctggtgtgggatgtcggacaccaaagctacccgcacaaaatcctgacaggcaggaaaaaccagatgcacaccatgcgccaatacggcggtttggcgggttttccgaaacgttgcgagtccgagtacgacgcgttcggcgtggggcattcctccacctccatcggcgcggctttgggcatggcggcgacggacaaactcttgggcggcgaccgccgcagcgtcgccatcatcggagacggcgcgatgacggcggggcaggcgtttgaagccttgaattgcgcgggcgatatggatgtggatttgctggtcgtcctcaacgacaacgaaatgtcgatttcccccaacgtcggcgcgttgcccaaatatcttgccagcaacgtcgtgcgcgatatgcacggactgttgagtaccgtcaaagcgcaaacgggcaaggtattagacaaaatacccggcgcgatggagtttgcccaaaaagtcgaacacaaaatcaaaacccttgccgaagaagccgaacacgccaaacagtcgctgtcgctgtttgaaaatttcggcttccgctacaccggccccgtggacggacacaacgtcgagaatctggtggacgtattgaaagacttgcgcagccgcaaaggccctcagttgctgcacgtcatcaccaaaaagggcaacggctacaaactcgccgaaaacgaccccgtcaaataccacgccgtcgccaacctgcctaaagaaggcggggcgcaaatgccgtctgaaaaagaacccaagcccgccgccaaaccgacctatacccaagtattcggcaaatggctgtgcgaccgggcggcggcagattcccgactggttgcgattacccccgccatgcgcgagggcagcggactggtggagtttgaacaacgattccccgaccgctatttcgatgtcggcatcgccgagcagcacgccgttacctttgccggcggtttggcgtgcgaaggcatgaagcccgtcgtggcgatttattccacctttttacaacgcgcctacgaccaactggtgcacgacatcgccctgcaaaacctgcccgttttgtttgccgtcgaccgtgcgggcatcgtcggcgcggacggcccgacccatgccggcttgtacgatttgagcttcttgcgctgtgtgccgaacatgattgttgccgcgccgagcgatgaaaacgaatgccgcctgctgctttcgacctgctatcaggcggatgcgcccgccgccgtccgctatccgcgcggcacgggtacgggcgcgccggtttcagacggcatggaaaccgtggaaatcggcaagggcattatccgccgcgaaggtgagaaaaccgccttcattgccttcggcagtatggtcgccaccgcattggcggttgccgaaaaactgaacgccaccgtcgccgatatgcgcttcgtcaaaccgatagacgaagagttgattgtccgccttgcccgaagccacgaccgcatcgttacccttgaagaaaacgccgaacagggcggcgcaggcggcgcggtcttggaagtgttggcgaaacacggcatctgcaaacccgttttgcttttgggcgttgccgataccgtaaccgaacacggcgatccgaaaaaacttttggacgatttgggtttgagtgccgaagcggtggaacgccgggtgcgcgagtggctgccggaccgtgatgcggcaaattaaaccgcttgaccgcgccgtcgttatcgggcggcgtttttaaacggcgtttgtttctgcggtttttttattgaaaccccgcaggcggcaggaagggttcgggcggcggctttcgggcggtgcttggtgtgccgttgcgcgtttggaaatttattccgcttgtccgtataacggcggcggtgccgtctgccgatacaaggcaaaatgccgtctgaaacgcttcaggcggcatttttcggcgtgagggttttaggcttcgacaattttgccgcgcagggaaaaggtgtaggcttcggtgatttccaaatcgatcatttggttgatcatgtcgggcgtgccggtaaagttgacgacgcggttgttggcggtacgggcttggagctggtcggggtcttttttggagatgccttcgaccaggcagcgttgaaccgtgccgatcatggtttggttgatgcgggcggtttcggcttcgatgacttcgttcaaggcttcgaggcggcgcactttttcttcgtgcggcgtgtcgtccggcaggttggcggcaggcgtgccggggcgcgggctgtaaataaacacgaagctcaagtcgaaggcaatgtctttcaccagtttcaaggtttgctcgaactcgcgttcggtctcgccggggaaaccgacgatgaagtcgctgctcaggcacaaatcaggacggatggcgcgcagtttgcggatgatggatttgtattccaaagcggtgtagccgcgtttcatcgcgctcaatacgcggtcggaaccgctttgaatcggcaggtgcaggtgggaaaccagtttgggcaggtcgcggtagcactcgataatcgagtcggtaaactcgcgcgggtggctggtggtgaagcgcatacgttcgatgccggggatttcgtggacgatacgcagcagggtggcgaagtcgcagatttcgccgtcgtccatttcgccgcgataggcattgacgttttgtcccaagaggttgatttctttcacgccttgctgggcaaggttggcgatttcggtcaatacgtcgttgagcgggcgggagaattcttcgccgcgcgtgtaggggacgacgcagaaggagcagtatttggaacagccttccataatcgacacaaatgccgcgccgccttcgacgcgggcgggcggcaggtggtcgaatttttcgatttcggggaaggaaatatcgacttgcgacagcccgctggtttctttgtccacaatcattttgggcaggcggtgcagcgtttgcgggccgaaaaccacgtcaacataaggcgcgcgtttgatgatgttttcgccttcttgcgaggcgacgcagccggcaacgccgatgatgaggccggggtttttttctttgagcggacggacgcgccccaagtcggagaacactttttcctgtgctttttcgcgcacggaacaggtgttgaacaagatgatgtcggcttcgtcggcttgggtaacctgttcgatgccgccgtgttcttcggcaaggacggacagcattttttcgctgtcgtactcgttcatctggcagccgaaggtgcggataaatacttttttcatggtttgtgtctttctcgggcagccgtaatcgcggggctgatggttgttggaatgaaaaaatttcagacggcacgacgatgccgtctgaaaatcggtgcggattatagcacgatgtgggtttgggaggcaaaatattgttttaaaatatgaatttaatcggtcggaacggctgtataatgtttggctttaacgggaggtgtgtgtatgggcggcattgctgctgtgtgcgtgtaccagcaatttcggcgacagggaacatcagttcctgcgttatagtggattaaatttaaaccagtacagcgttgcctcgccttgccgtactatttgtactgtctgcggcttcgtcgccttgtcctgatttttgttaatccactatatcagacggaagagggaatcgcacaaacggttgttaaaggcaaaacgacccgggcggaggtagaggcacgtttcgggaagcgcaaccctttcggctgttatgcctatcacgaggtcagcctgccgatttataattttttgccgaccaatttcatctatatgaaatcggagcggcggcattgggaatggtgcgtggattacgacggggagggagtcgtccgggactaccgctttacacatataaagaggaaaaagacgagcgttccgtcatccgggatacggttggcgtaatccgcaaagaagcgggcaaatccttgtcgcaacctgaaaaatgataaaatggggctttctgcttccaagcccgaaacctgccgttcagacggcatttgaggataaatatgaaccgtaacgaaattttattcgaccgcgccaaagccatcatccccggcggcgtgaattcgcccgtgcgcgcattcggcagcgtcggcggcgtgccacgcttcatcaaaaaagccgaaggcgcgtatgtttgggacgaaaacggcacgcgctacaccgattatgtcggctcttgggggcctgcgattgtcggacacgcgcatcccgaagtcgtcgaagccgtgcgcgaagctgcgttgggcggtttgtcgttcggcgcgcccaccgaaggcgaaatcgccattgccgaacaaattgccgaaattatgccgtctgtcgaacggctgcgcctcgtcagctccggcacggaagcgacgatgactgccatccgtctggcacgcggttttaccggccgcgacaaaatcatcaaatttgaaggctgctaccacggccattccgacagcctgttggtgaaagcaggcagcggtctgcttaccttcggcaatccttcttccgccggtgtgcctgccgactttaccaaacatactttggtactcgaatacaacaacatcgcccaactcgaagaagcctttgcccaaagcggcgacgaaatcgcctgcgtgattgtcgaacccttcgtcggcaatatgaacctcgtccgcccgaccgaagcctttgtcaaagccttgcgcggattgaccgaaaaacacggcgcggtgttgatttacgacgaagtgatgaccggtttccgcgtcgcgctcggcggcgcgcagtcgctgcacggcatcacgcccgacctgaccacgatgggcaaagtcatcggcggcggtatgccgcttgccgcgttcggcggacgcaaagacatcatggaatgtatttccccgttgggcggcgtgtatcaggcaggtacattatcaggcaacccgattgccgtcgccgccggcttgaaaacgctggaaatcatccagcgcgaaggcttctatgaaaacctgaccgccttgacacaacgccttgccaacggtattgccgccgccaaagcgcacggtatcgagtttgccgccgacagcgtgggcggtatgttcggtctgtatttcgccgcacacgtgccgcgaaactatgccgatatggcgcgctccaatatcgacgctttcaaacgcttcttccacggcatgctcgaccgcggcattgccttcggcccgtccgcttatgaagcaggtttcgtttccgccgcgcatacgcccgagctgattgacgaaacggttgcggttgcggttgaagtgttcaaggcgatggctgcatgatgttttgacggacagagtttctctgttcgatttgtttggcagattgaagtaagaatgcacaccgccgtcatttccgcgcaggcgggaatccggacctttcagtttctgtaatgattgaaaataacggcaagcccgaccttccggattcccgcctgcgcgggaatgacgggcgtgtacatttttgatttcaatctactgtaaaaatgccgtctgaaatatatagtcaattaaaatcaaaataggacagtagtgcatcgtcaaatcgggcgtaatcagacaaaacggttcgcagataccgcttaatattNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN---------------------------------------------------------------------------------------------------------------------------cgcccgacatatcgagccggtttttgcctatccgatttggcggcatttaggccggtaacttgatgttttaggctgcctgtttgttttttaaggcgaatcc---------------------------------------------------------------gtccgtaatatagcggattaacaaaaaccggtacggcgttgccccgccccggcccaaagggaacggttccctaaggtgatggagcgccgggcggatcggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatccgctatggtttaaagctttgtttcttaagtccgcagagtatgccatggttaaaccttcaacgtcgagtgttgtactattttgtttttaattgaatataaatagcgtttcagacggcattgtttgtttcttattgcgcttcggctttcggggcggaaatcaggaagtgttcgcggtagtggcgcatttcttcgatgctctccaaaatgtcgtccaatgccttgtgcgaaccgcgtttgacgacgcttttggcaatgggcggattccagcgtttggcgagttctttcagcgtggaaacgtcgaggttgcggtagtggaagtagttttccagtttcggcatatatttgaccataaaacgccggtcttggtggatggagttgccgcacatcggtgtggcgcgtccgggtatccattccgacataaagtccagcagtttctgttcgacttcggcttcggtatgcgacgattcgcgcacgcgctgcgtcagccccgtcctgccgtgtgtggcggtgttccactcgtccatattgtcgagcagatcgtcgctttggtggatggcgtaaacttcggattgcgccaacacattcaaatccgagtcggtaataatcatcgcgacttcgataatgcggtcggtttcgggattcagccccgtcatttccatatcgagccagcagaggttgtttttgtcctgcacggtgtttcctttccgtttcagcgttttacgccgctcaagcgcgcccagccttcgtcagtttccgccgggtcgagatcgaaccattggctgtaaatgccgccgagttcttcggcctgttcatccaacaaaccggacaacacgatgcgtccgccctgtttggtgcgggctgcaagcatttcgccgagcatacgcaaagggttggcgaggatgttggcgacgacgacatcgaattgcccttgaggcagactgtcgggcaggaagaattgtgcatcgacgttgttctgttcggcgttgtccctgccggcgcggacggcctgttcgtcaatatccacgccgacggcggaacctgcaccgagtttgagggcggcgatggtcaggatgcccgaaccgcagccgtagtcgaggacgctttcgccgtttttgagttgcgtatccagccatttgaggcagaggcgcgtggtcgggtggctgccggtgccgaaggcgagtccgggatcgaggcggaggttgacggcgcagccttcgggggcttcgtgccaagagggggtaatccacaggcggtcggaaattcggatggggtcgaattgcgattgcgtgaggcgcacccagtcttggtcttcgatggtttcgccggtgtatgccaagtcttttaacccgcattcttgtgcggcggcatcgatgacggcggcggcttcgtcgtgttcgccgaacagggcgatgactttgctctgctgccagatttgttcggtgggcataccgggttcgccgaaaatcgcctgttcgttttgcgtgccggcgcaggcatcttcgatggcggcggagagtgcaccgtgttccatcagcacgtcggcgaggcgttcggcgacggcatcgttgacgttgacggtgatttgttggtagggcataacgggctttcttggaaatatcgaaatcggtttcagacggcggggcaagggaaatgccgtctgaacgcggaagggcggcttcagacggcatatcggcggcggcttatttgtcctgtttggttttgcgcgcttccagccagtgctccaggtaatggatgctcactccgccttcttggaaacccgcatcggcgaacaggtcgcggtgcaacggcgtattggttttgatgccggttaccgccagctcggcgagtgcgacgcgcattttcgccattgcctgttcacgcgttttgccgtgtacgcagattttgccgatcaggctgtcgtagtacggcgggatgcggtagccttggtagatgtggctgtccacgcggatgccgaagccgccgggcaggtggcagctttcaatcgggcccgggctggggatgaagttgtacgggtcttcggcattgatgcggcactcgaaggcgtggccttcgattttgatgtctttctgtttgtattgcagcggcaggccggatgcgatgcggagttgctcttggacgatgtccacgccggtaatgagttcggtaaccggatgctcgacctgaacgcgcgtgttcatctcgataaagaaaaattcgccgtcttcgtataaaaattcaaacgtgcccgcgccccggtagccgatgcgtttgcacgcgtcggtacaggctttgccgatttttttgcgtgcctcttcatcgataaacggggcgggtgcttcctcgatgactttctggtggcggcgttgcagcgaacagtcgcgctcggcaagatagacggcgttgccgtgttcgtcggcaagcacttggatttcgacgtggcgcgggcgttgcaggtagcgttccatataaaccatcgggttgccgaacgccgcgcccgcttcagccttggtcatttcgacagactggaggaggtcttcttttttctcgaccacgcgcataccgcgcccgccgccgccgcccgatgctttgataatcacgggataaccgactttgtcggcgattttgaggatttcggcatcatcgtcgggcaatgcgccgtcagagccggggacgcagggcacgcctgccgctatcatcgcgtgtttggcggagactttgtcgcccatcaggcggatggtgtcgggtttcgggccgatgaaggtaaagccggactgttcgacctgttcggcgaaatcggcgttttcggcaaggaagccgtagcccgggtggacagcgtccgcgaaggttacttcggcggcggcaatgatggcgggaatgttcagataactttgcgcagaagcggcaggaccgatgcacacggattcgtcggcgagtttgacgtgcaggctgcctttgtcggcttcggaatgcacggcaacggtggcaatgcccatttcgcggcaggcacggagtacgcgcaaggcgatttcgccccggttggcgattaaaacttttttcagcatgatgacctttcctgcggttccggcaacccgtccgtaaaaaagggtgcgggaacgctgaagggggggaaagcatttcagacggcatcggaagtttatgccgtctgaaaacaggattatccgatgatgaagagcggttcgccgaattcgacgggcgtaccgttttcgaccagaatttctttgaccgtgccggatttttcggcttcgatttcgttcatcagcttcatcgcttcgatgatgcacagcgtgtcgccggctttgacctgttgaccgacttcgacaaatgcggcggcattcgggccgggcgcgcggtagaacgtgccgaccataggcgatttttgagcgtcggacaaatcgcgggcggccggcgcggcggcgggcgcggatgccgcaacgggtgcggcggccggcgttacggccggcgcggcggcaggtacgggcgcggcgtaaacgggagctgccgcagctgcaatggtacgggtaatgcggactttttcctcgccttcggttacttcgatttcggcgatacccgattcttcaaccaaatcaatcagtttttttaatttgcgcaaatccatttctgttcctttaaaggctgccggtgttccggcgggttgttgcgttggtttttcagaaaacagccggcttgcggcaacggcgcaaaccgggcggaatggtgttcggatacggttttcctgtggtgggaaacgaccgtgaaattgtgttcattttcccgaagttgtcggtaaatgtccagtaaaatatcaaaaaacggcggtttttgggggaaatgtgcaggaagtttgattttgcgcacaagatgccccgagtcaagagtgtttattctaatctgttggtttttcgggcaaagatgccgtctgaaaaagggctaaagtgcgtataatggcggcttgcccgaacgagagtgtaaaaatggatatttcagattttgactttaccctgcccgaacacctgattgcccagcatccgcccgaggtgcgcggcagcagccggcttttggtcgcgctgcccgatatgccgctgcaagaccgggtgtttggcgatttgcccgattatgtcgaggcaggcgacgttttggtattcaacaacaccaaagtcatgaaggcgcggctgtttgggcagaaagacagcggcggcaggatcgaagccctgattgagcgtgtgttggacaaccataccgcattggcgcacatccgttcgtccaagtcccccaagcccggtatggggctggtgtttgaaggcggtatccgtgccgtgatggtcggacgtgagggcgaactgttctgcctgcgttttgaaggcggtcaaaccgtttacgaacttttggaacagaacggacacctgcccctgccgccttatatcgaacgtgccgccgatgcggacgacgacagccgttatcaaactgtttatgccaaatatcagggcgcggtcgccgcgccgacggcgggcctgcattttacggaagaacttttgcgccgtctgaaagacaaaggcgcggtaaccgcagaagtaaccctgcacgtcggtgcggggacattccaacccgtgcgcgtcgataaaatcgaagaacacaaaatgcacagcgaatggtttgaagtgccgtctgaaaccgtcgccgccgttgaggcggcaaaagcccgggggaacaaagcctgggcggtcggcacgacttccatgcgcgccctcgagtctgccgcgcgcgcaacgggatatttgaaagacggacagggcgacaccgatattttcatcacgccgggctaccgttttaatgttgtcgacaggctggttaccaattttcatctgccgaaatcgacgctgctgatgttggtcggcgcgttttcgggtatgggtcatatccgcgccgtgtaccgtcatgcgattgaacgtgaataccgtttcttcagctacggagatgcgatggttttggggcggaacgaagggggcgggctttaaactgctgctgtccgttgcaaggcagatgccgtctgaaccgtggttcgggcggtatttttatggatgtccggcagttggataatccaccgccccaaattagggtgcttaaaggtcaaaagaaagtgaaggctatgtgcaacaaaatgccgtctgaaaccgcaaaacggcttcagacggcattgttcaacctgattcaggcatcagttgcggtttttcaaacgaccgtgcagctcttgaacgctgtacacacccagataatcccggcttttcgcgccttcgctcatcgcttcgccgccggcggtggtggtgtattgcggcacgcgttgctgcaatgcgctttggcggatgatgtggctgtcggacacggattgcggatcgctggaaacggtatttacgaccagtgcgatttcgccgtttttcagcgcgtcgccgatgtgcgggcggccttcggggactttgttgatggcctgcacaatcagcccgtgttcggtcaggtattgcgccgtgccgcgcgtggcgcagatgccgtagcctaaggcttggaagtttttggcggttttaatgacgcgttctttgtcttcttcgcgcacggagaggaagattttgccggtcgggttgaggcgttcgcccgcgccgagttgggctttgtagtaggcttcgccgaaacttgcgcccacgcccatcacttcgccggtggagcgcatttccggactcaaaatcgtatccacgcccgggaatttgatgaatgggaacacggcttctttaacggcatagaaatcggggacgacttctttttccacgccttgttctttcagggaaatgcctgccatgcagcgcgcgccgactttggcgagcggcacgccggtggctttggagacaaaggggacggtacggctggcgcgcgggttcacttccaacacgaacaccacgccgtcctgcacggcaaactgcacgttcatcagtccgaccacgcccagcgcgtacgccatcgctttggtttggcggcggatttcgtcttggatttcttcgcttaaggagtatggcggcagcgagcagccggagtcgccggagtggatgcccgcctgttcgacgtgctgcatgatgccgccgataaccacatctttgccgtctgaaacgcagtccacatcgacttcaatcgcgttgttgaggaagaaatcgagcagcacggggctgtcttcggaaacctgcacggcttcgcgcatgtatttttgcaaggcttcggcggagtggacaatctgcatcgcgcgtccgcccaaaacataagacgggcgcacgaccagcggataaccgatttcttcggctttgacgagtgcttcttcttcgttgtgggcgatgcggttgggcggttggcgcaggcctaagtcgttcaacactttttggaagcgttcgcggtcttcggcggcatcgatgctgtcggcggatgtgccgatgatgttcacgccgttttcaaccaatgcgttggcgagtttcagcggggtttgaccgccgtaatgaacaatcacgccccacgggttttcggtgcggacgatttccaacacgtcttccaatgtcagcggctcgaaatagaggcggtcgctggtgtcgaagtcggtggacacggtttcggggttgcagttgaccataatcgtttcaaagcccgattcgcgcagggcgagtgcggcgtgaacgcagcagtagtcaaactcgatgccctgaccgatgcggttcgggccgccgccgagaatcatcacttttttacggtcggaaggacgggattcgcattcttcttcgtaagtggagtaaagataggcggtttcggtggcgaactcggcggcgcaggtatcgacgcgtttgtaaaccggatgcagcttcagcgcgtagcggtgttcgcgaacttctttttcgcttacgttcaacaattgtgccaaacgtttgtcggagaagcctttgcgtttcagacggcgtagggcggcgtaatccaaatcttgcaactggccgtctgaaaccgatttttcttccttcatcaagtcttcgatttgcgccaagaaccaagggtcgatggcgcagatctcgtggatttcttccggcgtgaagcccgcgcggaacgcgtctgccacaaacagcatacgttcggggccggggttggccagttcgcggcggatttccgctttgtcttcgctgcgcggattgaaaccgcacaagccggtttccaaaccgcgcaaggctttttggaagctttcctgaatggtacggcccatcgccattacttcgcccacagatttcatctgcgtggtcaggcggtcgtctgcggcggggaatttttcaaacgcgaaacgcgggattttggttaccacatagtcgatggaaggctcgaacgacgcgggcgtgcggccgccggtgatgtcgttgcgcaactcgtccagcgtaaagccgaccgccagcttcgccgccaccttcgcaatcgggaagcccgttgctttggaagccagcgcggacgaacggctcacgcgcgggttcatctcgatcacaatcatctcgccgttttcagggttcaccgcaaactgcacgttcgagccgcccgtgtccacgccgatttcgcgcaataccgccaacgaagcgttgcgcatgatttggtattccttgtccgtcagcgtttgcgccggcgcaaccgtaatcgagtcgcccgtatgaacgcccatcgggtcgaagttttcaatcgaacagatgatgatgcagttgtccgccttatcgcgcaccacttccatctcgtactctttccagccgagcacagactgctcaatcagcagctcatgcgtaggcgacgcatcgaaaccgcgttcgcaaatcgccaaaaactcatccttattgtaggcaatgccgccgcccgaaccgcccatcgtgaaagacggacgaatcagcgtcggaaagccgacctgttcttgcgccgccaaggcttcgttcatggtgtggcagacaaaagatttcgggcaagagaggccgattttttccatcgcttctttaaagcggccgcggtcttccgccttgtcgatcgcgtcttccgttgcgccgattaactcgacattgtatttcgccagcacgccgttacgcgccaaatccagcgcacagttcagcgcggtctgaccgcccatcgtgggcagaatcgcatcgggccgctccttggcgataatcttctccaccgtctgccacataatcggctcgatgtaggtaacatccgccatttcggggtcggtcataatcgtggcggggttggaattcaccaaaatgactttatagccttcttcacgcaaggctttgcaggcctgtgcgcccgaatagtcaaattcgcaggcctgaccgataacgatagggccggcgccgatgataaggatggattttaggtcggtacgtttgggcatgggtggttactcttgaattaaagaaggttgttttgttacatagcttttaagaaaagtatttcccttttctaaaattgaagctaaaacatcatcttctatgttagataaaatattctctaaatctgcgcttgatttaattttaaagaattcttttgtttgagaatggtatacaagagaaggtttatttagctgtaaaagttctgctatattatttaatgaaccaatactcttaccatcccataaaataaagccataatcagcaatttctgccattttcttatcttttgctgtataaaatacccttccagttcctttgctgtctacttggacaaactgccaatttcccacattatttcggtaaattttgccagaaaagtaaatatgcacattagcataatcttgttcttgtagaaattcttggatagctttatcagccccattagcatctccaataacaatatcaaaattattgctaagaatattgttaattctttctcgtatttgtggatttagtcgtgaaatgctgcgtgaaccagaaaagaaaatagtgcgcatttttatcctctagtctttgtcattgctaaaacaattacagatctagcattttttgaaaacaatttttcagttgatatttccaatgttgctccgctatcaaataaatcatcgattactaaaatattcttattggatagatctatattgtcaattgtgatggaattattcagtatttctagtttttctgatttttcttcaatatttttgagtggtgtgtgtgagctagattttcttaaaataggagaatatggaatattcaagcgatcacttagttctttggcaattaattgaactggttgattaatacgctctgttgtaaaaggggcgggaacaattaaatttatagattctaaaccactaaatttttgtaaaatatagtctaccagcaaagaaacattttgggtttgattacgatattttaattgataaacccattctccaatcacacttctcttgctatcaaagtgaggatgccctaattcatcataacctaacaaaatacttttttgcatatgatggtctaaagcaaatccttttgtccagttaccatttagttctatcgccatttcattgactccttgtcaaaattaagtataacgagcaatcctagcaagccgtagcccgcatgtagggtgtgcggtacgcacgcacgcgttcttcattttccctgtaaccccgacccaccgcatgcgcgccttgcggcacacactctaccgatgagttcaaagattgtctgaaaaaacgctcgcggcgtttgttccatctgcttgacaataaaggctacctgaaaaattcccgctgttgatatttcgtgcatcctttttcagacgacctgaaatcaacggttgcaaatttaagttatttttcaaaccaccggcaaccgaaaaatctgccgaaacccactccctcccccgtgggggagggctgggggNNNNNNNNNNNNNNNNNNgtggcaatcNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-----------------------------cctaataccttcgccgcccaaatacaagccttgcggcttgttgccctctctccagctctctcccacagggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgcttttttgcttttcagacgacctttttaaacgctcaattcagttaattttaccttattattttcaaaatctaatcaaaatcaaccgtttgctaccgtgctggctgcttttccaattcctNcaatacgcgcaggatttccgccagtacatcgtttgtctgctgcaaaatttcgtgattccaaaaacgcagcacggtaaagcccaagctgttgagatataccgtccgcgcgtggtcgtatacggcttgttccgcgtgctgcccgccgtctgcttcgacaatcagcttgggcgttacgcacataaaatcaacaatataattccccatcggctgctgtcggcggaatttatagccgttcagacggcctgcccgcaggtgttgccacaattttgcttccgcctcgctcatttcttgacgcatggctttggcgcgttggcgtagggcggggttttcggcggtcaatagtttctcgggcgggttcatttttgttatcgggttgctgtttgtgtaagccttacagcttgttgccctctctctaactctttcccacagggagagaggacgggtcggctgttggggttaaaggggctgcaaggaaaacagcttgtgcaggctgttttttattttgcataatccgtctgaaaattaataactgctgatttccagcaggttgccatcgggatcgcgcaggtaaaccgattggattttgcccattgcgcctgtgcgcgctacgatgccgcttaaaggtttgatgccgtgtgcggataattcctgtaaaaccgtttccagtggggcgtatcggtcagcaggcataaatccgctgtgccgcaggcggcgtgttgcgcgttaggctgaatttccgcaccgcgcccgtgtaggttgattttctgactgccaaacaacaaagctttacggttgttgccaaatgaaacttcttccatgcccaaaacttgtgtgtaaaacgcgatggttcggtcaatgtcggcaacagtcagtactagatggtcgagtgcgctaattttcatttccagctttctttttcagacggcagcagcatactgttgccgtctgaaaatcattatgcttgttttgcagccttcatattgccaatgaatttgtcgaacaaatagccgacatcttgcggacccgggctggcttcggggtgtccttggaaacagaacacgggtttgtcggtcagctcgatgccttgcaaggtattgtcgaacaaggatttgtgggtaatgcgtgcgttggcgggcagggtgtcggcatcgacggcgaaaccgtggttttggctggtaatgacgactttgccgctgtccaaatcttgcacaggatggttcgcaccgtggtggctgaagcgcattttcagggttttcgcgccgatggcgaggctgatgagctggtgtcccaagcagatgccgaaaatcggtttgccgctttccatcagtttttgcacggcttcgatggcgtaggtgcaaggctcggggtcgccggggccgttggacaggaacacgccgtcgggattgagtgccaacacgtcttccgcgctcgtttgtgcggggacgacggtcaggcggcagccgcgcgaggcgagcatacgcaggatgttggttttcacgccgaaatcgtaggcgacgacgtggtaaggctgtttgtcaggggtaacgaaacctttgcccaattcccattcgccttccgtccattcgtaagtttccgtgcaggaaacttcttttgccaaatctttgccgaccatgctgccgaacgcggcgatgagttcttgcgctttttcaacggtggcatccgcacctgtcagaatcgcgccgccttgcgcgcctttttcgcgcaacagcatggtcaggcggcgggtgtcgatgtcggcgatggcgacggtttcgttgcgtaccaaatagtcgtgcaggctttcggaggcgcggaagctgctgtgcaagagcggcaggtcgcggataatcaggccggcggcataaacgctgcggctttcttcatcttcggcgttggtgccggtgttgccgatgtgggggtaggtgagggtaacgatttgtttgcagtaggacgggtcggtcagaatttcctgatagccggtcatcgaagtattgaacacgacttcgccggaagccgaaccttcgtaaccgattgatgtgccgtggaatacgctgccgtcagcgaggacgaggagggcgggggtgctcatgatgggaatcctgtttttaataaaattcttgacaatgccgtctgaagggacttcggcagggggcatccggtcggaaaaatccggtcaaaaaaaaacacgccgcgcaagatagacgcgtaacgtgcttttcgggcaagtgcctataccctgaaagcagcatattttaagacgaaacatacccgatttcaagcgcaaacgcggcaggcgggctgatatgttcgcgcgaaaacggaaatccggggcataaaaccgcccgctccgcgccccctatgcccgttacgcatttccccacgtccgcccggcgaaactatgggaatacccgaaccgtcattcccgcgcaggcgggaatccggacctgtcggcacggaaacttatcgggtacaacggtttcttgagattttacgtcctagattcccgcctgcgcgggaatgacggcatcggtttgacggtatttaattgaattgcggaaattgacggattcagtgagattggcgggatgaagcctac---------------------------------------------------------ggctcaaagggaacggttccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgccccgatttttgttaatccgctatacgaacccgccccctcccgaaaaacgcaaaaaatgccgtccgaaaacctttcggacggcattttcgcgtgaaccgtcattcccacgaaaacagaaaaccaaaatcagaaacctaaaattcgtcattcccacgaaagtgggaatccaggactcaggacctgagaaacctttttacccgataagttcccgtaccgaccggtccggattcccgcctgcNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNaacgcaaaaaatgccgtccgaagacctttcagacggcatttgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNtatccNNNNNNNNNNNNNNgttcatcagcagggtgcgcacaccttttccggagaagcaccggttattgcgggcgggttttttaccctctttgaatgttccgctgccgcctgcatcaccgtctgccgtgacggggaaatcgtctgttttcttttcgtccaggtagcgcacattaaccggtttgtcgtaaacatatccgttcgggcagacggttttgctgtttttccacatacagcctatggggacggacttgccgtcggtggttttcttatggccggaatattgcgcaaccgaattgtgatccggcacaatcgggcgcgcgcttctcggagtcaatgcgccgccgtcggcgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNacggtcggtttgacggtaacgcgttctccttccctcaatttcactacccagcctttatcggccgatccgccggatgccttattattgctcaggaacaaggtgttattttccttcgtaagcgtttgctcgagcagcccgcctcccgtgccgttttgtaccgttaccttaaccgtccccgtccccttatcgtcgtcaaagataccgtaaatatattgttgatccttaccgactacatcctcttcactcaaatcgctgcccgtaccgaagatgaccacgcgtttgtctgccagtcgggaaacggcgggcgcggaagtaatcggttttgtgccttcgaaaatagtgcgtacagcccactcggacggcttgtcgctgctcaaatcaaagcggtacatattcccgccccgatcgccggcataggcgatatcgaccgtgccgtccaaatctttatccaccagcgtgggggacgaaagcccgcctttgccgccgggtgcttcgatttttgcaatcggcgtacctaaggtgtctttcaaatcatacacatacagcgcggttgtattatcgctgctgacaatatctttagccgcataaccggaggcgaggaaggcggcgtatttgccgttttgggttttgccgatttgcggcgtaccgacggtgtagcctaatttcacgcgattactgtcattcttattgttatttttgtcgttttggacatcaaacatggaaacgccgaccgggttgctgtcgattttggtcaaatccaaggcgtatgcgcctctgccgcccaggcccatcgcaccaaacataaagaaatgtttttgcttgtcttggtcatctgtaatgcggcgcaagacaaagccgccgtccacgccgtagcggtcgcccacatagccttgttcggcaaaggcgcgcagctctttggcgaggtcggagtcattgccttcaatatccttacgctccatcgtaccggggatgtagctgagcttcagttcgtagcctcgttggtctgtgccggtttttttgaagatatgcaccatcccgtcgttggcagaagttgccagatacccgccgaccgccgttatcgggctgttgacgatgtcgcccaaatcgcggggtttgtcattgtcatcttcttttgtgcggatgcggtatttttggctgtattgttttttgtcgctttgttttttgttgtttggttggttgaatgttttaaatatatcgtcattaccgtaataccggaccgtccaaggcagcagcacttttgcccactcgtcgacctcaggtgtgacgagcctgtccttgtagatgccgaaagtgtcgtttttgccgtcattgccattcaaacccacgatcctgtcgcgagtcggggcgatccggtacacgccgcccggcaatcggatcacggtctgccttgagttgaaattcggctcgcggcttttgatgttctgcgtatccaaagcggcgagggaatgccggccgggccgggcggggtcggttcgagttttcagctcttggaggaagatgcggctgctcgaactgccggggtaggtggaaaccgaagcggaatacatctgcaccttaccattttgcacagagccgaaccacagcgcgggggcggtcagtgccggcgaaggggcttgggtattcttattggggttcggttcgttgatgcagcggcctgctttgacttccggcaggccgagcttgaccggaatctgcccgttatctttaatgtcccacttagaccaaaaatttagaatgccgctaagccccgtattttgtgtcttcacatcgatgctcggcttcaagacacccaaccgcactgttttgccggtgatatctttaatcccttttttgtccagcaggtgcagcttggcgttcagataataggccatggcggtcgtttcttgctgccagttgctaagggaaatacggtggtcttctgtcgtatagacgaggttttgattactattactattgttttcatcaaaagaagataccaatttgctggatgatctgccatctttggcggtaccctcgccgcccaaattgaaagacacacccaaccatggataatccttcaatttgtaaatgggcgaattttcgcggcttggctctgtgtgcctatccagcccgcctcttgtttttagcaagtcgggattatcgaaggaaaatcgggttttataggtaagtttgggacagtctttggtacttccgcaacggataccggtgtagccgtagcctgccagcccgggccgggtggtatgaatccaattgacggcattgccgcgcttgttcagctcggcggtatcaaagccggaaaccttgccgtagggcggcaggtaggtggctgtgccaaaaacggcagtaccgctttgttgagaaacaagctcatcgttattgttgaatgagataaaattgcttgtgatgccgaggctgtttttctggctcgtatggctaaatgtccgctccctgcttttgtcctttaatgctgattgattatattgatccttccactttacctcgggctgctttcgctcgttcatgataatagcgtattgatgggtttgcgccatcNccccccccccgccggtatgggaaaacatcaagatggcggtataaagcgcggtatggcggaaaacccgcctttttaaagttttattcatcgtatttccttttcggtcaaaccccccgcccttcggggcggcaggatcaggctttgtccgggaggggtgcaagcccttccgaatcagggcggcgccttatgtgccgccctgcgtgttggaacatattttatcccttaaatcttgcttcgcgggataccgtcggcggcaggcgcgccgcaaacggcgggattgggcaaaccgcccgatcccgcgcccgccggattgccggttgcaaagcccccttcgcccggctgccaaagggggatgttcgcaaaggtaacacgcccctttggccggatgcaatgtatagggttaccgcattattctacccttgcgcgctgatcatggtaaagcggttttcggcaatccgcaaccgtttgcccggcccgccattgccgcctgcgcggcaatggcgggccggggaggcggcattttccaagttgcggcaacctttcccaacaactcaaccgcctaaatacaagccttgcggcttgttgccctctctccagccctctcccacagggagagaggacggggaggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaacaacagctgcaaatctaagttgcctttcaaatcgcctgcaaccgaaaaacctgccgaaacccactccctcccccgtgggggagggccggggagagggcattctc-------------------------------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-----------------------------------------------------------------------------------------------------------------------------------------------------gaaaacaggttgtgcaggctgctttttgcttttcagacgacctgcatcaacggttgtaaatccaatctgtttttcaaaccgcctgcaaccgcaaaacctgccgaaacccactccctcccctgtgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaatcaacggttgtaaatccaatctgtttttcaaaccgcctgcaaccgaaaaatctgccgcaatccgctccctcccccgtgggggagggccggggaggcggcattctccaagttgcggcaacctttcccaacaacttaaccgcccaaatacaagccttgcggcttgctgccctctctccagccctctcccacgggagagaggactatgaagcccgtcggcaggcgcggggcttgggacggcattgctgttgcggtttcgggcgcggctttattcgacgacaattttagggaaccggctgctgaagtctttgcctttgtcggcaatgcccagggcgatttggaatgcggcatcggtgtagattcgggcgatggcggggtgttcgtcgaacagtcgcgccggtgtgccgccgtccatggcttcgcgcacgggcaggcttaggggaagctgtccgagcagggggacgttgaggcgggccgccaaatctttgccgccgtccgtgccgaacagtgcttcgctatgcccgcagttggagcagatgtggacggacatgttttccaatacgcctaaaatgggaatgttgaccttgcggaacatatccacagccttgcgcgcgtctatcagcgcgatgtcctgcggcgtggttacgatgacggacccggttacggggatgcgttgggacagcgtgagttggatgtcgcccgtgccggggggcaggtcgatgaaaagatagtccacttcgtcccactcgctttggaacatcagctgctgcaaggcttggctgaccatcggcccgcgccagacgacggcttggccggtatcgactagaaagccgatggacataacctgtatgccgtctgaagattcgacgggaatcagtttttggtttttctgatcgggtttgcggtcgtgtacgcccagcatcgtgggctggctcggaccgtaaaggtcggcatcgagcacgccgacgcgtgcgcccatgcgcgccattgcggcggcaaggttggcagtggtggttgatttgcccacgccgccttttcccgatgcgacggcaatgatgtttttcacgcctttgatggtggcgacgccgggccggactttgtgtgtgccgatttcggtgtctatggacagatggatgtgcgcgccgcctgtttcgggcatcagggtttcttgtacggcatcggcgagggcggcggcgatgtgcgcgacagggaagccgaaatgcagggcgatgtggatgccgtctgaacgctgtccgaccgaacggacggccttttcgccgccgagcgtgcgtgccgtattcggaacggcgacggtgtcgaggagggtgcggatgttttgtatattcatgatgtgtgcctctgttcgcaagtcgtgtgaggggaagatagacggaaagtgtacatgattttgggcagtttgcttttttcttgtgcgaacttttacacggtatgcggcggattgtgaaaatccgttgccaaaatatcccgtgcaaacagcagtctgcaattaagcctgtaaaatttgcttgacggcggggaacggggctgtataatgcacggcttatcgggtcgttagctcagccggtagagcagcggacttttaatccgttggtcgagcgttcgaatcgctcacgacccaccagataaccggaagccaagtttcgagacttggcttttttgtttgcctgccggggcgtaccgtttgcgggggtgtatgaaaaagaaactgctttcgggcatcaaatttgccgttcggacggcattggtgtttttgctggtgtcgctgtttttggattgggtacgcaagcccgacgaacctgccggggcggcagggcggcctttgaccctgctgtcggggcagcggctgactttgggacagtttagccgggataggacggtgctggtgtatttttggggaagctggtgcggcgtgtgccgttatcagtcgccgataatcgatgatttggcggcggacggcgtgccggtcgtcggcgtggcggtacgttccggcagcgcgtccgaagtggcggcatatatggcaaaacggggcttgggctttccgactgtcagcgatgaggacgggggtttggcaaggtcttggcggattgccgcaacgcctgccgtcgttttggtcaaaaatgggaaaatggtccgctatacgacgggaatcagcagttattggggcttgcgcgcacgaatttttcaggcggattttttcggttaacttttgtttttgtcaaactttccgctatgtagagaatcaaacggcatatgccttgcgcggcggatgcggcggcttttgttttttgggaaagagccggcgcgcctgccgatgtaatcccttgttgtgattgtgggaaaaatagattaaaatataactattaaaatattttcagataggattatcggaattaaagtcttttatacccggtcgtccgatgaggtttatagcgtattgttgctatatgttcgttttgttatataacggttgcatcaaaaattacgcccacaggctttcccgacggtttgaaagtttgattttcgataacttggagacttaaacaatgcctacccaatcaaaacatgcgtctatcaatatcggtctgatacaggcaagggaagccctgatgacccaattcaggcctattctgaatcaggcgaatattaccgatcagcaatggcggattatccgtcttttggcggaaaacggcacattggattttcaggatttggcgaatcaggcgtgcattttgcgccccagcctgaccggtatcctgacccgccttgaaaaagcggggttggtcgtccgcctgaaaccttccaacgaccaacggcgcgtttatctgaagctgacttccgagggcgagaagctgtatgaggaaatcggcgaagaagtggacgagcgttacgacgctatcgaggaagtgctgggccgcgagaaaatgctgctgcttaaagacctgttggcagaacttgccaaaatcgaggatgcgttgaactcgtaatacgccgtaatgcgcggaaacgtccgaccgacggctttttgaatcagaactgctgcacatgggggatgccttgtgtgcagcattcttatataggggacggtttaaaggggaaaaatggcggatttgcagaaaacttttcaaacttcgttccgtgatgcgatggcatcctgtgcggcaggcgttcatgtcatcacgacagacggtgcggcagggcgttacggcattacaatgacggcggttgcgccggttaccgacgagccgccgaccgtgatgctgtgcataaaccggagtgcgcgaatcattccgatcctgtcggaaaacggcagcctctgcatcaatatgctggcggacgaacatcaggatgttgccgaacattttgccgggctgaccggcctgtcgcccgaagagcggtttgcctaccatatttggcatcgcggcaaaacgggacaacttgaaatagaaggcgcgttggcgcacctgcacgggcatattgtcggcaaacatgaaatcggcacgcattttgtgttttacgtcaggctcgacgaaatcaaaaactgcgggtgcaaacgccccgcgctgctgtatttcagacggcagtttaggcctttagactgatattcggacagatatatgaaagcgatgatactggcggcaggacgcggcgagcgtatgcgccctttgaccgacaccactccgaagccgctgctcgatgtggcgggtaagcctctaatcggttggcacttgtgccgtctgaagcaggcggggtttaccgaaatcgtcatcaaccacgcttggctgggtcggcagatagaaaatgctttgggcgacggctcggcttatggcgtgaacatcgcctattcgcccgaacccgcaggcggtttggaaacggcaggcggcat------------------gttgggtgggcagccgtttttggtggccaacggcgacgtgctgaccgacatcgattttaccgccgcgtttcagacggcatcgtccctgcccgggcacatttccgcacatttgtggctggtgggaaatcccccgcacaaccccgacggcgatttttccctgctgcccgacggcagcgtgcggccggaagtatccggcggcaacggactgacattcagcggcgtgggtatttaccgtcctgaaatgtttgacggaatcgaagcgggcagtgtggcaaaactcgcgcccgtattgctgaacgaaatgcggcaaaaccgcgtgagcggtcagaagcatacgggcctgtggctggatgtcggcacggtatgccgtctgaaggaagcgcaagcccttgcagcggcttggaagtgaaaactcggtttcaggcggtatggcggattcggtttaacgtttcagtgccaacgtcaacacgccgccgtaaccagccccaagtctatccattcctgcgtgttcgggcgttcgtctaagaaaatcaccgccatcagcgcgaccaagaccaggctgaatttgtcgacgggcgcgacttgcggggcgttgcccagttgcagggctttgaagtaggcgagccaagatgcgccggtggcgagtccggacaaaaccagaaacgtccggttgcgccccgtgaagccgtttacgccctgccatttgccggtgtaggtcaaaaacaataccaaggcggcgaggatgaccaaggtgcggataaaggcggcgaaatccgaatctatgccctgcaagcccattttggcgaaaacggcggtcaatgaggcgaagcctgccgatgccaatgcccaaaacagccatgcgttgctgcccatgttttctcctttgattgtgaacaatatgaacggtatttttgttgctgcgtcaaaaatttcactgcgggtttggtgcggataacgttataatatgcctgatattattttcaatccacctgtttgtcgcctgatgctttcagacggcatgtccctcctcatttctaaaggaaaatcatgagcttcaaaaccgatgccgaaaccgcccaatcctccaccatgcgcccgattggcgaaattgccgccaagctgggtttgaacgttgacaacattgagccttacggtcattacaaagccaaaatcaatcctgccgaagcgttcaagctgccgcaaaaacaaggcaggctgattttggttaccgccatcaacccgactccggcgggcgaaggcaaaaccaccgtaaccatcggtttggcggacgcattgcgccatatcggcaaagactctgtgattgctttgcgcgagccttctttgggtccggtgttcggcgtgaaaggcggcgcggcaggcggcggctacgcgcaagttttgccgatggaagacatcaacctgcacttcaccggcgacttccacgccatcggtgcggcgaataacctcctcgccgccatgctcgacaaccatatctaccaaggtaacgagttgaacatcgaccccaaacgcgtgctgtggcggcgcgtggtcgatatgaacgaccgccagttgcgcaacatcatcgacggtatgggcaagcctgttgacggcgtgatgcgtcccgacggcttcgacatcaccgtcgcctccgaagtgatggcggtattctgccttgccaaagacatcagcgatttgaaagagcgttttggcaatattctcgtcgcctacgccaaagacggcagccccgtttacgccaaagatttgaaggcacacggcgcgatggcggcattgctaaaagatgcgattaagcccaatttggtgcaaaccatcNaaggcactccggtctttgtacacggcggcccgttcgccaacatcgcccacggctgcaactccgttaccgcaacccgtctggcgaaacaccttgccgattacgccgtaaccgaagcaggcttcggcgcggacttgggtgcggaaaaattctgcgacatcaaatgccgccttgccggtttgaaacctgatgcggcagtcgtcgtggcgactgtccgcgccctgaaatacaacggcggcgtggaacgcgccaaccttggtgaagaaaacctcgaagccttggcaaaaggtttgcccaacctgttgaaacacatttccaacctgaaaaacgtattcggactgcccgtcgtcgttgcgctcaaccgcttcgtgtccgactccgatgccgagttggcgatgattgaaaaagcctgtgccgaacacggcgttgaagtttccctgaccgaagtgtggggcaaaggcggcgcgggcggcgcggatttggcgcgcaaagtcgtcaatgccatcgacaaccaacctaataacttcggtttcgcctacgatgtcgagttgggcatcaaagacaaaatccgtgcgattgcccaaaaagtgtacggcgcggaagatgtcgatttcagcgcggaagcgtctgccgaaatcgcctcgctggaaaaactgggcttggacaaaatgccgatctgcatggcgaaaacccaatattcattgagcgacaacgccaaactcttgggctgccccgaaggcttccgcatcaccgtacgcggtatcactgtttccgccggcgcgggcttcatcgttgcgttgtgcggcaatatgatgaaaatgccgggcctgccgaaagttccggctgccgagaaaatcgatgtggacgaacacggcgtgattcacggcttgttctgaacggtttttgaaaccggatgccgtctgaagccgtttcagacggcattttttcggaacgcgggcggcggtatgctataatccgccgttaaatttctctattttcaggaaaaaccatgagtttgaaatgcggcatcgtcggtttgcccaacgtcggcaaatccaccctttttaacgcgctgacccaatcgggcatcgaagcggcaaactatcccttctgcaccatcgaacccaacgtcggcatcgtcgaagtgcccgacccgcgtatggcggagctggcgaaaatcgtcaatccgcaaaaaatgcagcccgccatcgtcgagtttgtcgatattgccggcttggttgcgggcgcgagcaaaggcgaaggcttgggcaaccggttccttgccaacatccgtgaaaccgatgccatcgtcaacgtcgtgcgctgctttgacgacgacaacatcgtccacgtttccggcaaagtcgatccgattgccgacatcgaaaccatcggcaccgaatNggcgcttgccgacttggcaagtgtggaaaaagccatcgtccgcgaagaaaaacgcgcccgatcaggcgacaaagacgcgcaaaaactagtcgatttgtgcaaaaaactgctgccgcatctggacgaaggcaaacccgtgcgttccttcggtttggacgcggaagaacgcgcgctgctgaagccgctgttcctgctgaccgccaaacctgcgatgtatgtgggaaacgttgccgaagacggttttgaaaacaacccgcacctcgaccgcctgaaagaattggcggcaaaagaaaacgcccccgtcgttgccgtctgcgccgcgatggagagcgaaatcgccgaattggaagacggtgaaaaagccgaatttctcgccgaaatgggcttggaagaaccgggcttgaaccgcctcatccgcgcgggttacgaccttttgggactgcaaacctacttcaccgccggcgtgaaagaagtccgcgcgtggacgatacacaaaggcgacaccgcgccgcaagccgccggcgtgatccatacggattttgaacgcggcttcatccgcgcccaagtgattgcctacgatgattttgtctcgctcggcggcgaagccaaagccaaagaagccggcaaaatgcgcgtggaaggcaaggaatacgtcgtgcaggacggcgacgtgatgcactttttgtttaacgtgtaacccaaatgcggcaggttttcagacggctttgccggaaatgccgtctgaagccggttttggtggttttcgacgttcccataccgccggaatgcagccgcatcaaaataaaatcccgcccgcatttccgatttgccctccccgattcctgcaaaacaaaccgcctgccctgccgttacgggaagccgtccggtattccgaatatcccgaaccccgatacaaaatgacctttcagacggcatttgcacagcccgccgcgtttcaagtaaaaacattatgagccaagccttaccctaccgcccggacatcgacacattgcgcgccgccgccgtcttgtccgtcatcgtgttccatatcgaaaaggattggctgccgggcgggtttctcggtgtcgatatattctttgtgatttcaggctttttgatgacggcgatcctccttcgcgaaatgtccggggggcgtttcttcctcaagacattttatatccgccgcatcaaacggattttgcccgcatttttcgccgtattggcggcaacgctggcaggcggcttctttttattcaccaaagatgatttctttcttttgtggaaatccgcgctgaccgccttgggtttcgcctccaacctgtattttgcaagggggaaggattatttcgatcccgcgcaggaagaaaagcccctgctgcacatctggtctttgtcggtcgaagaacaattttactttgtctttccgatattgctgttgcttgtcgcccgcaaaagcctgcgcgtacagttcggcttcctcgccgcattgtgcgccttaagccttgccgcttcctttatgccttccgcgctcgataaatattacctgccccacctgcgcgcctgcgaaatgctggtcggatcgctgaccgccgtgcggatgcggtaccggcaacagcggaatcccgccgtcgggaaacggtatgccgccgtcggcgcattgttttccgcgtgcatactgtccgcctgcctgtttgcctattcggaacaaaccgcctatttcccgggctccgccgccctgattccctgtctggctgttgccgcgctgatttatttcaaccattacgaacacccgcttaaaaaatttttccaatggaaaatcaccgttgccgccggtttgatttcctattcgctttatctgtggcattggccgatattggcctttatgcgctatatcggcccggacaacctgccgccttattcgccggcggcagcgatcgtcctgaccctggcgttttccctgatttcttatcactgcatcgaaaagccgtttaaaaaatggaaaggctcgttcgcacaatccgttttatggatttatgccttgcctatgctcgttttgggcgcgggctcgtttttcgcgatgaggctgccgtttatggcgcaatacgaccgcttggggctgacgcgttccaacacctcctgccacaacaataccggcaaacaatgcctgtggggggatacggaaaaacagccggaactgctggttttgggcgactcccacgccgaccattacaaaacattcttcgatgccgtgggcaaaaaagaaaaatggtccgccactatggtttccgccgacgcctgcgcctatgtggaaggctacgcgtcccgtgtgttccaaaactgggccgcctgccgcgccgtttaccgctatgccgaagaacacctgccccggtatccgaaagtggttttggcgatgcgctggggcagccagatgcccgaaaacagccgctcccttgcctacgatgccggttttttccaaaaattcgaccgtatgctgcacaaactctcatccgaaaaacaagccgtttacctgatggcggacaacttggcttcgtcttacaacgtccagcgcgcctatatcttgtcttcacgcataccgggttgccgccaaacactgcgcccggacgacgaaagcaccctgaaagccaatgcccgcatcagggaattggcagccaaataccccaacgtctatattattgatgccgccgcctatatccccgcagatttccaaatcggcggattgccggtttactcggacaaagaccacatcaacccttacggcggcacagaattggcgaagcgtttttccgaaaaacaaaggtttctcgatacgcgccataaccattgattcgcttaaatttgttacaatcggcggtttgcaaaaccgctaatttttttgaaagagaccgatgagcgtcatccaagacctgcaatcgcgcggccttatcgcgcaaaccaccgacatcgaagccttagacgctttgctgaacgaacaaaaaatcgccctttactgcggtttcgacccgacagccgacagcctgcacatcggacacctgctgcccgtattggcattgcgccgcttccaacaggcggggcatacgccgattgcactggtgggcggcgcgaccggtatgatcggcgaccccagcttcaaagccgccgaacgcagcttgaattccgccgaaaccgttgccggctgggtaggaagcatacgcagccaattaacccctttcttgagctttgaaggcggaaacgccgccattatggcgaacaatgccgactggttcggcagcatgaactgcctcgacttcctgcgcgacatcggcaagcatttctccgtcaacgccatgctgaacaaagaatccgtcaaacagcgcatcgaccgcgacggcgcaggcatttccttcaccgagttcgcctattccctgctgcaaggctacgacttcgccgagttgaacaaacgccacggcgcggttttggaaatcggcggttccgacc-gtggggcaacatcaccgccggtatcgacctgacccgccgcctgaaccaaaaacaagtgttcggtctgaccctgcNtttggttaccaaatccgacggtaccaaattcggcaaaaccgaaggcggcgcggtgtggctgaacgcgaaaaaaacctcgccgtaccagttctaccagttctggctgaaagtcgccgatgccgatgtgtataaattcctgaaatactttaccttcctgtccatcgaagaaatcggtgtcgtcgaagccaaagacaaggcaagcggcagcaagcccgaagcgcaacgcatcctcgccgaagaaatgacccgcctgattcacggcgaagaagcccttgccgccgcgcaacgcatttccgaaagcctgtttgccgaagaccaaagccggcttaccgaaagcgacttcgagcagctcgccctcgacggcctgcctgcatttgaagtttcagacggcatcaacgccgtcgaagccttggtcaaaaccggcttggcagcgtccaacaaagaagcgcgcggctttgtcaatgccaaagcggttctgctcaacggcaaaccggctgaagccaacaaccccaaccacgccgccgaacgccccgacgatgcctatctgttgataggcgaatacaaacgtttcggcaaatacaccatcctccggcgcggcaaacgcaaccacgcgcttttggtttggaaataatccgattgccgcagaaatgccgtctgaagctttcagacggcatttttatcaaatgcaaaacaccctgcgcctgccgatatgtcgtcatttccatgcaggcgggaattcaaacttgtccgcacggaaacttatcgggcaaaacggtttcttcagttctacgttctagatgcccgctttcgtgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttcctgcactgacagatctagattcccgcctgcgcgggaatgacgggtttcgagattgcggtgttgtcgggaatgacgggttttaagattgcggtgttgtcggaacgcaaccgaaccgtcattcccacggaagtgggaatctaggac----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNagagaagagaagagaagagaagagaagagaagagaagagaagagaaggttttttgcgggctggattcattttcggctccttattcggtttgaccggttaaaaaaaaagattttcactgatgttgaagggcggattatatcgggttccgggcggtgtttcaatacatagcaccgcgcctgctgcgcgttttatgcgtttggcgcgttcggcggcgggaaatttgcctacttttcccgcgtcgggcgggcggaacgggcggcacactgtctataaaccgcaataccgtttacaatgaccgcctgtttcaccacatacccgaacgcaacaatgtttcaacacacgggacggcacatcaagcaccgccctatgtgtcgtcctgatttggaaggggttgcacccctcccgaataaagtctgatcctgccgccccgaaggacggatgtccgagtggcggggtttcaaccgaaaaggaaatacaatgaaaatcaggccggggcggcacaacgcgcccgactttccgcacggggccgccgtaaccataggcaatttcgacggcgtgcacctcggacacaaacacatcctccaaaaactccgcctcgaagccgatacgcgcggattgcccgtcgtggccgtcgttttcgaaccccaacccaaagaatttttcgcactccgtaccggcaaaaccccgccgtgccgtatcagccccctgcgtaccaaactcgggctgctcgaaaaaaccggttgcgtcgatgccgcctgggttttgcgtttcgatcggaatttttccgaaatatccgcgcaagcatttatcgaccgcctgctgcgtcaaaccttgaatacgcgctatttgctcgtcggcgatgatttccgtttcggtgcggggcgggaaggctgttttgaacttttggcacaacagcccgatatgcaaaccgagcgcacgccttccgtcatcgtcgaagacatccgcaccagcagtaccgccgtccgccaagccctttcagacggcaaccttgcctatgcgaagaaacttttggggcacgactacgttttggggggcagggtggtgcacggcagaaaactcggacgcaccttaaacgccccgaccgccaatatccgcctgcccggccaccgttatgcactcggcggcgtgttcgtcgtcgaggcggacggcgcattcggcacgcggcgcggcgtggcgagcttcggcttcaatcccaccgttgatggcggctgttctcaaaagcttgaagtccacctgttcgactttcaaggcgatttgtacggacaacggttgaacgtccgcttcctgcacaaactgcgcgacgaggaaaagtttgacggtatggaagaactgaaaaggcggattgaagccgatatggaagccgcaaagtgttggtagaaaaaccttatacaaaccatccgattgggctacaatcagccttttaactgttcggacggcacaggggtttcccgttgtgaaatactgtttgaggcgcaatgccgtctgaaaccgaaatattgtaacaatagagattaaaaaatgaccgattacagtaaaaccgtcaacctgctcgaaagcccgtttccgatgcgcggcaatcttgccaagcgcgagcctgcgtggctgaaaagctggtacgagcaaaaacgttaccaaaaactgcgcgaaatcgccaaaggccgtccgaaattcatcctgcacgacggcccgccgtatgccaacggcgacatccatatcggtcatgccgtcaataaaattcttaaagacattattatccgcagcaaaacccaagccggttttgacgcgccttatgtgccgggttgggactgccacggcctgcccatcgaagtgatggtggaaaaactgcacggcaaagatatgcctaaagcccgtttccgcgaattgtgccgcgaatatgccgccgaacagattgcccgtcagaaaaaagactttatccgcttgggcgtgttgggcgactgggacaatccttacttgaccatggatttcaaaaccgaagccgataccgtgcgtatgctcggcgaaatctacaaatccggctatctctaccgtggtgcgaaaccggttcagttttgcttggattgcggatcttcgctggcggaagcggaagtggaatacaaagacaaagtatcgcctgcgattgacgttgcctatccgtttaaaaacaccgtcgcgcttgccgccgcattcggcttggcaggtatcgaaggcaaagcgtttgccgtcatttggacgaccacgccttggactctgcctgcgagccaggccgtgtctgccggcgcggacgtggtgtatcaattaatcgatacgcccaaaggcaaattggtgctggcgaaagatttggcggaaggcgctttgaaacgctacggcttttcagacggcatcgccatccttgccgaaaccaccggcgacaagctggaaaacctgcacatgaatcatccgttcctcgaacgcgatattcccatgctcaacggcgaacacgttaccaccgatgccggtaccggcttggtgcatactgcgcctgcgcacggtttggaagactacgccgtctgcaataaatacggcatcgagctttacaaccctgtcaacgccgaaggcaaatacataagcgaaacgcctcgtgtcgcaggcatgagcgtttgggaggcgaatcccgtcatcctgcaatggccggaagaaaccggcaacctcttggcaagcagcaaaatcgaacacagctacgcccactgctggcgccacaaaaccccgctgatttaccgagcgacaggtcagtggtttgtcggcatggacaaagccggcagcgacggtaaaaccctgcgcgacaaagccatcaaagccgtggacgacaccgaattcttcccgccatggggtcgtgcgcgtttggaatccatgattgaaggccgtcctgactgggtggtttcacgccaacgctattggggcacgccgatgactttctttgttcacaaagaaaccggtgaattgcatccgaactctgccgaacttttggaaaaagtcgcgcaacgcatcgaagaaaaaggcatcgaggcttggttctccctcgataaaagcgaattattaagcgcggaagattgcgaacattacgacaaactccccgataccatggacgtatggttcgactcaggctcgacgcattattccgttgtaaaacaacgcgaagaattggaatggccggctgacttgtacctcgaaggcagcgaccaacaccgcggctggttccaatcttctatgctgaccggttgcgcctcatccatgggacgcgcaccgtataaacagctgctgacccacggtttcgtNgtggacggcgaaggcaaaaaaatgtcgaaatccatcggcaacgtcgtcgcgccgcaggaagtgtataacgagttcggcgcggacatcctgcgtctgtgggcggcatccaccgattacagcggcgaattggcgatttccaaagaaatcctcaaacgcgtaaccgaaagctaccgccgtatccgcaataccttgagcttcctgtttgccaatttgagcgactttaatccgattgaagatgctgttccacaagcagaaatggtggaaatcgaccgctacgccctggtgttggcgcgtcaacttcaagaacgcgttgccggcgatttttatccgcgttacgccttccattttgccgtaaaagaaatggtttctttctgctcggaagacttgggcgcgttctacctcgacatcctgaaagaccgcctctacaccaccaaagccgacagccgcgcccgccgcagcgcgcaaaccgccctgtaccacatcacgcgcagcctggttctcttgattgcaccgattttgtgcttcaccggcgaagaagcgtgggacatcatcggcggcggcgaagaagacagcgtcctcttccatacttggcacgagttcccggccatcaacgaaaaagccgaagccgaactggtgaaaaaatggacggcaatccgcgaagcgcgcgaagcagtaaccgccgccatcgagcctttgcgcgccgacaaaaccgtcggttcgtccttgcaggcggaagccgaaatcaccgcgccggaagaaatggccggctatctgaatgctttgggcgaagaattgcgctttgccctgctggtgtctaaagcagaagtgaaagtcggtgatgaacttgccgttgccgccaaagccagcgacggcgaaaaatgcgaacgctgctggcattacacccgcgatgtgggcgcggttgcaggttatgaaaccgtctgcaaacgctgtgcggagaatgtcggcggagaaggcgaaacgcgccattacgcctgataaagtttgagcaaatgccgtctgaaaccgccaaacagtatttcagacggcattttttgtgccgcgatttgtcttcataatggcggaggggtttcgagattgcggtgttgtcgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttcctgcactgacagatctagatttccgcctgcgcgggaatgacgggtttcgagattacggtgttgtcgggaatgacggttcgggtattttactgcgcccgccccgcgcctgtaaacggcaagtgcatcaaaaatgccgtctgaaggttcagacggcatcggtatcggggaatcagaagcggtagcgcacgcccaatgaggcttcgtgggttttgaagcgggtgttttccaagNNNNNNNNNNNNNNNNNNNNNNNNNNNN------------------acgtgatgtcgaaaccgacaccggcgatgacaccaagacccaagcggcggatgctgtggctttcgtgataggcaggtttgctggtcgaccctNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNagagaagagaagagaaggttttttggggctggattcattttcgactccttatatcggtttgaccggttaaaaaaagattttcactgatgttgaagggcggattatatcNNNNNNNNNNNNNNNNNNNNNN--------------------------------------------------------------------------------------------------------ttcgtactgcctgcggcccgccgccttgtcctgatttttgttaatccgctataaagaccgtcgggcatctgcagccgtcattcccgcgcgggcgggaatctaggccggtcggtgcggaaacttatcgggaaaaaaggtttcttgagattNNNNNNNNNNNatNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNtcaaagattatctgaaagtccgggattctggattcccgctttcgcgggaatgacggttcggttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaatcgtcattcccatgcaggcgggaatctggaatttcaatgcctcaagaatttatcggaaaaaaccaaaacccttccgccgtcattcccactttcgtgggaatgacgggatgtaggttcgtaggaatgacgtggtgcaggtttccgtgcggatggattcgtcattcccgcgcaggcgggaatccggtccgttcggtttcagttatttccgataaattcctgctgctttttatttctagattcccacttccgtgggaatgacggcggaggggataagttcttgcaatctaaaatttcgtcatttctataaaatagcaaaccgaaacagaaacttaaaaacagaaacctgaaacagcaacctgaaaccccgtcattcccgcgcaggcggaaatccggcgggccgtagggtgtgcttcggcccgccatttccatcaatccaacatgtctaccgttttcatcgaatccatcgaatccgccttttcgaccacccggccctacgcaaccgaaccgtcattcccgcgaaagtgggaatctaggacgcggggtttgggcaaccgttttatccgataagtttccgtgcggacaggtccggattcccgcctgcgcgggaatgacgggtttcaagattacggcatttgccgtttcgggtacaggaaagggggttttcgggtagaatggcactcttttatccggctgttgaaaaatatgtcttcatctgtttcaagtaaaacgcgctattgggtattggcacttgccgccatcgtgctggaccagtggtcgaagtgggcggtgctgtcgtcgtttcagtatcgggaacgcgtcaacgtcatcccttcgtttttcgatctgacgctggtgtacaacccgggcgcggcattcagcttccttgccgatcagggcggctggcagaaatacttttttttggtgctggcggtggcggtgagcgcgtatttggtacgcgccatcttgcgcgacgagtttgcagccctcggcaaaatcggggcggcaatgattatcggcggtgcgtcgggcaatgtcatcgatcgcctgatacacggtcatgtcgtcgatttcttattgttttattggcaaaattggttttatcccgcctttaatattgccgacagctttatctgcgtcggtgcggtgttggcggtgcttgacaatatcgtccatcgcaaagatagcaaaaaaacgtgaatgccgtctgaacacggaatgcaaaacttatgaacggaaaaaccatcatccttgccaatccgcgcggcttctgcgccggtgtggatcgggcaatcagtattgtcgaacgtgctttggaagaattcggcgcgccggtttatgtgcgccacgaagtcgtccacaacaaattcgtcgtggacaacctgcgcgaaaaaggcgcggtgtttatcgaagacttggcggaagtgccgccgggcgcgacactggtttattcggcacacggcgtatcgaaggcggtgcagcaggaagcggcggagcgcggtttccgggtatttgatgcgacttgcccgctggtaacgaaagtgcataaggaagtcgcccgactggatgcccaaaactgtgaaatcatcatgatcgggcataaggggcacgccgaggtcgaaggcacgatggggcagcttgcaccgggcaaaatgcttttggtcgaaacggtcggagatgtggcaaaactcgaagtcagaaaccccgacaaactcgcctatgtcagccaaaccacgctctcggtcgatgaaaccaaagacatcatcgccgcgctgaacgcgcgtttccccaatatccgcaatccgcacaaggaagacatctgctatgcgacgaccaaccggcaaaccgccgtcaaagagctggcggaacagtgcgacatcgtgattgtggtcggttcgcccaattcgtccaacagcaaccgcctgcgcgaagtggcggcatcgcgcggaatcgatgcgtatatggtggacaacgcgtcctacctgcaacgcacgtggtttgaaggcaaaagcaaagtcggcgtaacggcaggcgcgtccgcgcccgaagtgttggtgcgggaagtattggcagccatacgcggatgggggcatgaaaccgtgcgcgaNggggggggcgcggaagaaagcatcgtgttcgtcctgcccaaggagctgcgccgcgagggcgaaaccaaacccgatttgtgcaaacgttgacgcaggcgttaacgcaggcatcggatgtttgggcaatacaaatgccgagacctttgcaaaaatccccaaaatcccctaaattcccaccaaggcatttaggggatttcccatgagcaccttcttccggcaaaccgcaNaagccatgactgccaaacacatcggccgcttcccgctatcggagttggaccaggtgattgattggcagccgatcgaacaatacctgaaccgtcaaaaaacccgttacctcagagaccgccgcggccgccccgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNaNNNNNNNNNNNNNcaacctgttttgccgttttgacgaaccgggcatccccggttgcagcaccttatgccgctaccgtaaattccgctatNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN------------cctgaaggcgatgtgtttgaacctgttgaaagccgccaacaggctaagtgcgcccgctgccgcctaaaaggcggcccggatgcctgattatcgggtatccgggggggattaaggggatattcgggtaaaattaggaggtatttggggcgaaaacagccgaaaacctgtgtttgggtttcggatgtcgaaggaagggcttttttgcaaaggcctcatgccgtctgaacaggcttcagacggcatttttgccgcgtgccggatgcggaaaccaatcaggcgtaatgtcgtgcaagaaaaccgggcagttcggacaaaccgtccaatacggcgagatgcggtgcgccaaggagctgttcgcgcgaatgtgcgccggtggcaacgccgactgccgccgcgcctgcgtttgccgccatatgcaggtcgtgcgccgtatcgccgacaaccaatgcctctttcgggtcgagtcccagttcgccgcagagtccgaataccatttcgggcgagggtttggaggggtattcccccgcgcaggcggtggcgagccaatagccgccggtggcggtttggctgatggcgttgtccaaacccgcccgccctttgcccgtggcgacggcaagccggaagccttgcgctttgagcttgtccagacagggcggggcatcgggaaagagtgtcatattgcggttgttgggattgaggtaatgcgcggaataagtgcgcgcgatgtcggcaacggcagcttcagaaggcatttcgagcagggcgcggatgatttcgggcaggctgtatccgatcaggctgcggacgcgctccgcttcgggcggcggaaaaccgcattcggcgaagctgcggcgcatggtgtcgatgatgggttgggtcgtatcggcaagcgtgccgtcccagtcgaagatgatgagtttgggcggggtcatggcaggttggttgcagtaaaaaagcagattttatgcggaaaacgcagacgtgtcgcattttcgacaaaatttgtcggctgagcgatatgtttttccgaacaagccgcgttgtgctttattaaaatagaaccattatcatttatacagatgggacagtttatgtcagttttccgcatcaatatgaccgccgccacggttttggcagcactctcgtctccggtttttgccgcacaaacggcggatttggaaaccgtccatatcaaagggcagcgttcgtacaacgcgattgccaccgagaaaaacggcgattacagctcgttaaaggcagctatatggatgaccgcctcaatacccgcgtctccccctgccgcctgaaagacaaaaacgccgccgaacccgaacaaccgcaacacccgttacgccgcattgggcaaacgcgtgatggaaggcgttgagaccgaaatcagcggtgcgattacaccgaaatggcaaatccatgcaggttacagctatctgcacagccaaatcaaaaccgccgccaatccacgcgacgacggcatcttcctgctggtgcccaaacacagcgcaaacctgtggacgacttaccaagttacgcccgggctgaccgtcggcggcggcgtgaacgcgatgagcggcattacttcatctgcagggatgcatgcaggcggttatgccacgttcgatgcgatggcggcataccgcttcacgcccaagctgaagctgcaaatcaatgccgacaacatcttcaaccgccattactacgcccgcgtcggcggcacgaacacctttaacattcccggttcggagcgcagcctgacggcaaacctgcgttacagtttttaaagaccaatatgccgtctgaaacggcagccgcagcataatcaaaccacaacaagctgcgcggcataccctatgcgctcacaaccggagtatggcattgcgaaggaaaacagaccgaaccggcaggcagaccgctttgccggttcggttttaccgcttgccgccagtctgacccacaagccgaacatcatgaaacccataccgaccgacacattccaacctgccatactgccccaagcctttgaaaccgaaatcaaatccacctgcacggggcgaatctatcggattcagacggcaacactcggcgaaatgcagtctgaaggctatcccgtcctctttgtcctcgacggcgaagcctttttcccgcgctgtacaacatcatgcagtcgctgatgaacaaccccgttacccgaagcaacgccccctgcctgattgtcggtatcggctacacgacaggcagtgtgcgcgacctggcgcagcgtgccgccgactacacgccgccgcttggagacaacgccacagcagacgaacggcggcagttcggacaggcagaccgcttcgccgactttatcgacagcgaactgaccgcctttttagaaagccgctacacccttaaccgtaatgaaaccgccgtattcggacactcgttcggcgcactgttcggactgtattccctgctttcccaccgctgtttcagacggcattggctcgtatcccctcgatttggtggcacaacaggcggatactcgactttatgccgtctgaaaaccggctggacggcatcgatgcctgcctcaacatcggcgcactcgagcggagcagcggttgcaaacgcagggaagaacgcgacatggcagggcaggccgaacaaatggcggcagagttggac--gcgcgggaccgccgtatttttccgggaatatccgaatgccgaccacggcaatgtcccgttttactcgctgaccgactgcgtcgaatatttgagggaagcgtggcaacggtagggggaatcaaatatatgactgctttgttttgcatcggaaaatatagcggattaacaaaaaccggtacggcgttgccccgccttagctcaaagagaacgattctctaaggtgctgaagcaccaagtgaatcggttccgtactatttgtactgtctgcggcttcgtcgccttgtcctgattttcgttaatccgctataacaagagctacctaagggttattgctcccgttctcatttcgcagtgctacaatttttgatagttcgcgccgactttgcccgtggttgtcgctcccgttctcattttatcttgatataaaaatccctgtttcaggccgcctgaaacagggatagattaatttaacggacgggcgggcgttttttcaggcggcacggtctgatttctttgcccggttcgtcgatttggtatttttggaatgaaagggcggttttgacaccgatacttttgaaaatgccgtttttccctttggcgctgtctgtgtcatgtacacggatatcaatcgccccggttgatttatttaggctggcgaaataaccaaaaaatacgtttttcttggcagttacttttattcaatcattcgaataaagtacgaatgaaaccggttttgggcttcagacggcatttgtatttttggttaccaattcacgcgcaccgaccggctgccgagcaatgtttccagttcgccgaacaatgcggaactcggtgtaaccgtccatttcggaggcacttgaagcctgcccgacgctttttcgttggcatacgacaattgaagcgggatgcgcggcgtgtcgggcagttggtgggcggcgagcagccgtaccagtccgccgatgtcgtgatgcggggcaagggcgaggctgaggctgcgggcgtagcgttcgcgcgccgtttgcagggtcatgacttggtttgccatgatgcgcagcccgtcgccgccgccgtaatcgtcgcggctgactttggattcgataatcagcacttggtcggctttNaggcagtcggcgcagttttccagcgtttgtccgccgaccatgatttcagcctgcccgctcgaatcttcgaggctgacgaaggcgattttgccgcgtttgcccatcatggtgcgcacggcggtaacgaatccggcgaggcgcacgctgtcttgcggtttcagacggcctaatttggtcggggcgatttggcggacttcttgggcatacgggccgaacgggtggccggacaggtaaaagccgatgacggttttttcttcggcgagtttttccgattcgctccacatgggtgcgtcgatgagccgcaccggttcgatggcgtcttccatcatgtcaaacagcccgccctgattggcgttggcggctttttggtcggcgttgtccatggcaaggtcgatgttcgccaagagcatggcgcggttgggttcgatgctgtcgaacgcgccgccgcgtatcagggcttcgagggtgcggcggttcatgtgttctttgccgacgcgctcgcagaagtccaacaggccggtaaatttgccgccgctttgccgcgcggcgatgatggattcgacggcggcttcgcccgtgcctttaatcgcgccgagtgcgtagcggattttcatgttcggatacggcgtgaagcggtagtcggattcgttaatgtcgggcggcaggaactcgatgccgttggcgcggcagtcgtcgtagaaatgtttgagctggtcggtgttgtccaattcggacgacatcgtcgccgccataaattcggcgggatagtgggctttgagccatgcggtctggtaggaaatcagggcgtaggcggcggcgtgggatttgttgaaaccgtagccggcgaatttttccatgtagttgaagatttcgtcggatttttcgcgcgaaatgccttgttttgccgcaccttcggcgaagatttcgcggtgtttcaccatctcttcgggctttttcttacccatggcgcggcgcagcaggtccgcgccgccgagcgagtagccgccgataatctgcgccgcctgcatcacttgttcctgatacaccataatgccgtaggtcggcgcgaggatgccttccagcagcgggtggatgtattggaattcctgtcccttcatgcgtgcgacgaagtcgggaatgttgtccatcgggccgggtcggtagagcgatacgaaggcgatgagttcttcaaacttggtcgtatgcgccgttttcagcatttttttcatgccggtcgactcgaactggaagacggcggtggtgttcgcatcgcggaagatttggtaggcagtctggtcgtcaagcggaatcttgccgacatcgacgatatcgccggcggtgtttttgatgttgttctgcgccatttcgataatggtcaggttgcgcaggcccaaaaagtcgaacttcaccaaacccacgtcttccacgtcgcccttgtcgtacatggatacgggcgaggcggattcgtccgcctgatacacggggctgtaatcggaaatcttgcccggcgcaatcaacacgccgcctgcgtgcatacccaaaccgcgcgtcaggtcttccagttttttcgccagcgtaatcagttcgtccgcttcttccgcttcaagcaattcctgaatctgcggctgcgccttcatcgcgtcgtccaaactcaggggtttgttggcttccaacggaatcagcttggacagtttgtcgcacagcataaacggcagttccagcacacgccccacgtcgcggatgaccgctttggacgacatcgtgccgaaagtcacaatctggctgaccgcctgagcgccgtatttttcgcgcacgtattcaatcacgcggccgcggtttgcctgacagaagtccacgtcaaagtcgggcatggaaacgcgttcggggtttaggaaacgctcgaacagcagcgcgtatttcagcgggtcgaggtcggtaatcttcagcgaatacgccaccagcgaacccgcgcccgaaccgcgtcccggcccgaccggacagccgtgcgttttcgcccagttgataaagtcttgtacgataaggaaatagccggggaatttcatttggatgatgatgttcagctcaaagtccagccgctcctgatattccggcatttttgccgcccgttccgcctcgtcgggataaagctgaaccatgcgttcctgcaaaccctcgttggaaagtttgatgagacagtcatcgagtgataaaccgtcgggcgtggggaaaaggggtaggaagtttttgcccaatgtgatgtgcaagttgcagcgtttggcgatttccaccgtgttttccaaggcttcgggcaagtcggcgaaacgctccagcatcgtttccggcggaatgaaaaactggctcggcgtgaaatcgcgcggacgtttcttgtccgtcagcacccagccgcccgcgatgcacacccgcgcctcgtgcgcgttgaaatcgtcgcggttcataaactgtgtcggatgcgttgctaccaccggcaaacccagttcctccgccagcttcacgctgccggaaacgcaagcctcccattcggggcgttcgggcaggcgttgcagctctaaataaaacgtatcgggaaaccatgccgcatatttcaacgccgccgcacgcgccgcgtcttcattgccgttcaacagattcacgcccacttcgccgtaatgcgcgccgctcaaacaaatcaagccgctgttgtcgccgttttccagccattcgggattgagttccgcatgatggatattgcggtcttggccgacataagcctccgtcaaaagctcgctcaagcgcagataacccgcatcgttgcggataaccagcatggcgcggaacggcttgtcgggcgcattcggattgcctatccacacgtccgccgcgccgacgggcttaatccctgcgccgcggcaggctttatagaatttcaccaaaccgaattcgttcatcaaatcgctgatgcccaaagcaggcaaaccgtattcttgcgctttggcaatcagttttttaatccgcaccataccgtcggtaatggagaattcggtatgcaggcgcagggggatgtaggtcggctcggtcatggcaaaatcggcgtggacaataaaaggcgtattgtagcagggttgtctttagatggcggtgcaggtaatgccgtttcggattcagacggcatgacctgcaaatgttttttgagcttttacgacggcaaaaaaatgcctcctgccgtgtggcggaggcttcccaaggagtattgatagatataaaggactatcaaactagttataaggaactatataccttattcggacggacggcaagcagttaaatagattttacgttcaaacaggtttttgatttcgttttgatgccgattgccggtgtatcgggcagtccgcgtttgaggatgtgcatcagcgtcaatgcggattcgtcggggaacaggatttgcagcctgccgttgggcaggatttctttggacggatggcggcatacggggtttcagacggcatttttacggaacaggcagtgcggacacatcgccggttttgcggcaattttgggtgcggcggcggcaggtgctacaataacgccctctttctaaaaggggacattatggaagccaccgtctatctcgaagacaacgaatacatcgctttgtgcgacctcttgaaattggccggacttgccgaaagcggcggacaggcaaaagcatttatcgccgaagggctggtgttgcgcaacggcggaaccgaaatccgcaaaacggccaaaatacgcggcggagaagtcatcgagtttgacggcgcgcgcttggaaatcgccgatggatacgaccctgaagcataaagccgaagcccttttgggcgagccgcttttggacgaacccgtccgccccgagtcgtgggaatgctgcggcagcgactgcggcgaggcgtgcattcagacgatttactgggcggacaaggcacgctacgatgcgcaacggaaaaaactgaaggaagcgggttggccggacgatgccgtctgaaaacggttgggcttgataaaaccacgttttcagacggtcttttatagtagattaaaattgaaaacgttcatatcgccattccctcgaaagcaggaatccggaagtttgaaatagcggttaaccttaaacatttccaataaatcaaagtctggattctcgcctgcgcgggaatgacggcatagcggcttttcctttgcatttgccatacacctgttttttaaaatgaccgccgccgccacactgtccgacaacattgaaacatcccgtccttcattcaccaccacataacaccccatgatagacctgcactgccattccaccgtttccgacggtatgctcccccccgccgaagtcgtccgcctcgcacatcaaaacggctgcacgctgctggcgttgaccgaccacgaccacacgggcggcatctccgaagcgcgtgccgaagccgacaggctcggtttgcgcctgattaacggcgtggaaatttcggtaacgtggcgcgggcgtaccatacacgttgtcggtttggatttcgacgagcaggacgaaaacctgcaaaacctgttggcagatgtccgcaaaggccgtctgaaacgtcttgaagccatcgccgccaagctcgaaaagaaaggcatcggcggcgcatacgacggcgcgctggcgctggcggcaaacaaagaaatggtcagccgcacccacgtcgccgagttcctcatcaaaaacggacacgtcaaaaacaagcagcaggcgttcaccaaatacttgggcgacggcaaatcctgcgcggtacgccacgaatgggcgacgctggcagactgcgtctccgccgtcaacggcgcgggcggcatggcggtgat----------------------------------gccaagcgcaacctgtttgaagaatttaaaaacctcggcggcgcgggcatcgaagtccacagcggcaactgctgcaaaaacgaccgcctcaactacgcgcttttggcagaccgcttcggattgttggcaagcgcgggcagcgacttccaccgtttagacgacttcagcggcggcatcctcggcgcgtgtcccgatcttccggaaaactgcaaaccggtgcgggcgcatttttcccgacattgaatgcggatgaaaatgccgtctgaaaggtcttcagacggcattttttgcgttttaaacgttgtcgtacggttttcggacggttttgccgatggcggcgatgcctttttccagcgtttgagcgtcctgtgcgatactcatacggatgcactcgcccgcgtgcgggtagtcttgcgtgtcgatgccgacgaagaaatgttcgcccggaataatcagcgtaccttcggctttgagcatttcgtacagggtttgcgacgaaacgggcaggttttcaaaccagagccacaggaaaatcgcgccttcgggtttgtggattttcatcgggtacgcgcccagctcgcgcttgagcagcgaaacggcggtttgcgcctgattgcggtaaaacggccggatgacttggtcggcaagccgtttcatctcgccgctttccagcagcggggcggcgatggccgcgccgaagcgcgtgggggcaaggttcacaatcgcgttcaggctgctgacggctttgacggcttcgggcgcggcgacgatgatgccggtgcgaacgcccggcaggccgactttggaaaggctgaagcagaggatgatgttttcgtgccaattcagcgttacgccgctgtcaataatgttggggaacggcattccgtaggcgttgtcgataatcggcggaatgccgtgttcacgcgccaaagcgtccaaacgcgccatttcgccgtcggtcaacacgttgccggtcgggttggtcgggcgcgaacagcaaatcgcgccgattttgcccgctttgagttcgggcaggttttccagtgcgtcaaagtccacgcggtatttgaagaagcctgcttcgccttcgtgttcgacgttttcgattttgggtttgacggaaacgaagtgccgcccttcgacatgcacgtcggcatagccgatgtattcgggcgcgagcggcaacaaaatggctttttctgcggatgtgccgtctgaaagcttgaatttgccgccgaagaggttgaataaatagaaaaacgcgttttgcgaaccgttggtcagcgcgatattgccgacggtcaggttccagccgtattcgcggttggggaaggcggtcagcgcgtcaatcagcgcggcatcgccttggggattggagtagttgccgatgttctcgacggcgtgttccgccgccagcttggaaaatatgtcggcgaacgcccgatcgatttcgggaatgcgcgccgggttgccgccgccgagcatattgacgggcttgtcgcttttgagcgcgtcgccgaggtcgtccatcagttgcaggatgccgctgtgttgcgtgaatttttcgccgaatgccgagaactgcatgtcaaactcagtgtgtgtaaggcagattggtttgtacggtatgccgtctgaaggttcagacggcattttttctgtgtgtttcgcatacccaaagcaggtcgcagatgccgccggtcggggtaaagccggtcggggcgttgacgagcaggtcgcggattgcctgctggtcgtaacggtcgcaggcggtgcggatgcggtcgagcagggcggagagttcgtgccacggcagcatggtctcgtcggcggtcatgatgcgcggatggccggttttgcggacgttgtcgccgatgagcaactcttcgtagagtttttcgccggggcgcagcccggtaatgaggatttcgatgtcgccgtcgggctgttcgggcgttttgggtttgagtccgcttaaggtaatcatttggcgggcaaggtcggtgattctgacggattcgcccatatcgaggacgaacacgtcgccgcctctgcccatcgcgccggcttggataaccagttgcgccgcttcgggtatggtcatgaaatagcgcgtgatgtcggggtgggtcagggtgatggggccgccttcggcaatctgtttttcaaacagcgggacgacggagccggacgagcctaaaacattgccgaaacgtaccatgctgaagcgggttttttgtccgggttcggcggcgagtgcctgaaggcagagttccgccatgcgtttgcccgcacccatcgtgttggcggggcggacggctttgtcggtggagatgaggacgaaggtttccacgcccgaagccgtggcggcaagcgcgcattcgagtgtgccgaagatgttgttgcgtatgccctcgacggtgttgaactcgaccatagggacgtgtttgtaggcggcggcgtgatagacggtcgcaacggaaaaggcggtcataatgtgcgtgagcagcgtgcggttttgcaccgaacccaaaaagggaaggatttcggcggcgatgccgtttcgggcgcagtattcgcacaattctttttcaacggtgtacagggcgaattcggacagctcgaacagcagcagcctttcggggcggcggcggataatctggcggcagagttccgaaccgatggagccgcccgcgccggttaccatgacggttttgccttcggtgtcggcattcatgaggcggtcgtcgggtgcgacggaatcgcgcccgagcaggtcggacacagagatttttttgagcgtgccgatgctgattttcccgtccatcaggtctttcattccgggaatggtcaacacttcgcacggataggctttcagtttgctgatgattcggcggcgttgttcctgagtcgcgctgggaatggcgagcaggattttttccacgccgtagcgttcgatgaggaaggcgatggcatcgggctggtaaacggcaaggtcgtagatgacggtgtgccaaagcttggggttgtcgtccacaaaggcggcggcggaatattcgcgcatctgtttgacggcttcaaggagctgccgacccgaacgccccgcgccgtaaatgatgacggggtcatgtgtttttttctggtggtcggacaggagtccgcgcaaaaccatacgcgagccggtcacggaaacaaacagcagtaagaaatagacaatcggcagggcgaggcgcagcctttcttcaaaaatcaatgtgttgaggaagaacaatacggcggaggcgaggctgccggcaaaggcggtggtcaggacgtggaaactgacaaagcgtgtaacggcgcggtaaagccccattcggataaataatgtgatggtcagcaaggcagtcagcaaaaaagactgccagttggcaaaatcgaaccattcgtccgagtagtcggccttcaggctttgggtgaaccaaaaggcaatgaaaatcatcagaaaatcgtgtatgaggaaacagattttcttgatgttgcgcggcagggcgatcagggtttccagattcatatcgtggggcggtatgtgctttcaggcggcatatgccgtctgaagggttatcgtgcggcttcggtcaggacggcttcgatgtgttttttgcagaacgcgatttcgtcgtcggtcagcgtcgggtgcaccaagaacgtcagggcggtgccgcccagttcgacggcgtttttcagccgctctttgggccgccacggcgtgttgtcgaaggctttttccaaatacacttcggagcagccgccttgatagcaggggacgttgcgcgcgttcagttcgctgacgatgcggtcgcgcgtccagtcgtctttcaggtgttcgggtttgacgaaggcgtagaacttgtattgcgcgtgtccgatgtagccggcgacttcaatcaggcggatgcttttgaatttgcgcaaactttctgccagcttggcggcgttttcttggcggcgcgccgtccattcgggcaggtgtttgagctggatgcggccgatgacagcctgcatttccatcatgcgccagttggtgccgaaactttcgtgcagccagcggaaaccgggcgcgtgttcgcggtggtacacggcatcgtagcttttgccgtggtctttgtacgcccacattttttcccacagggttttgtcgttggtcgtaaccataccgccctcgccgccggtggtgatgattttgtcttgacagaacgaccacgcgccgacgtgcccgatagagccgacggatttgcctttgtaggtcgcgccgtgcgcttgggcgcagtcttcaatcacccacaaatcatgttcttttgccaaagccatgatgccgtccatttcggcaggcataccggcaaggtggacgacaatgacggctttggtattcggggtcagcacggctttgacggtttccgcgctgatgttttggctgttcaaatccacgtcggcaaacacggggtttgcgcccgcgttcacaatgcaggaggcggaggcgaggaaggtgcgcgaggtaacaatcacatcgtcgcccgcgcctatgccgattgctttgagtgcggcatcgagcgcaagcgtgccgttggaaagggcgacggcgtaccgcgtgccggcaaaggcggcaaattctttttcaaattcgcggcattcgctgcccgtccagtagttgactttgttggacagcaggactttggaaacggcatcggcttcttctcgggtgaagctcggccatggggaaagggcggtgttcagcatggtgtttggtccgtcgggttcggacggcatttccgaccctatgccgtctgaNgggggcgtgttccgaagaatcgggcgcgcgccgcaggtgttgtcaaaatcggtttgtacggaagtttattttaatcgcttatgccgtcccggtcttggggtttttgcccgtaaggggctttgccgggttgcccgcgacggtcatgccgtccgggatgtcgcatacgataaccgcccctgcaccggcggtaaccccgctgccgacggttgtctgctggcggctgcacgcgcccgtgcctatccggctttcttcgccgatacgcgtgttgcctgacaggtgcgcgcccgggctgatgtggacgaaagcgtcaagcaggcagtcgtgatcgacggtggcggcagtgttcacaatcacgccgtctttcaatacgctgccggcctgtacgacggctttcgccattacgacgctgccttgtccgattattgcagaaggcgagacggtcgcgtcgggatgaatcagaacgggcagtttgaagccgagcgcggcggNtttttcggtgatttggcggcggatgcggttgttgccgacggcgacggtgatgtcgaattgttcgggcgataaactgttttcaagcagcagcgtcgtgccgatgacggggaagccgttgacgctgccttgggtgcggtcgtccagaaaaacgatttcgccgtatgtgccgagtgcggcggcaagctcggcaacgactttgccgtgtccgcccgcgccgataacggcgagtttgcgattccccgcgaaagggggcatggtggcttccccttgcgccgaaatgccttctttaatcaagacttttttgactgtcagaaacaggattttcatatccagccaaaagctgaaattgtcggtgtaccaaacatcgcaggagaacttttcgtcccacgaaagcgcgttgcgcccgttgacctgcgcccagccggtaatgcccggtttcatttcgtggcggcggttttgaaatttgttgtaaagcggcagatactgcatcaaaagcgggNgggggccgaccaggctcatctcgcctttgaggacgttccacagttcaggcagttcgtccaaactggcggtgcgcagttttttgccgaagggcgtgagccgctcgctgtcgggcagcggaatgccgtctgaatcaagcgcgtcgcgcatggaacggaatttgaccattttaaaaggttttccgtcctttccggggcgttcccgaatgaagaagacgggcgaacctaagtttttgcggatgaggtatattaaaaccaaaaacacgggcgacagggcaatcagccccgatgcggaggcgacaatgtcgatgaggcgtttgaaaaatttattcatcagctaatctttcaatcaggttgacgattttccgataggaaatgtcgcgcctgaagcggcggacgatttcttcggactgaacaggatcgtttttgcgcttcaaaatatctttggcggctcgaacgaaaccgtccacatcgccggaacggtagttcgcatgcggcagcagggtaaggacttcggcaacttcgtcgtggacctggctgttcagaatcggtttttgcaaagccatatagtcggagagtttgttggtaatcgatgccattgaataggaccggatggcgttgacggcaatgtcgcagcccttggcgaccgacatcatttcggcgtaaggaatgtagccgtaaaacttgatgccgtcgcaggcatattgtttgagcctgtccaaatcggggccgccgcccatgatgtgcagctctacattttcgccgtcgtccaaaagtttccgaacgcctttgcacacggtttccacgtcatagctgtaactgagcgtgcccaagtagaaaaagcgggttttgtcgtcgccaaaatctttggcaggtgcggcatcgagtttgggaaagtcagcaccaatatagatgacttcgccgggtacgttcggattggtttctttggcgcggtcgagataagtctgcgatacggcaaccagcgcgtcggcgtagcggtaggcccggttggcgcgtgaagcaaagggcagcagcttgtgcggtacttttttcaaaaacggtacgaccgaggagaaagactccggccatacgtcctgcacatcgacaatcagtttgtaacccaaacgcgctttgtgtttgcccaacagcaggttggtggcaatcagcggataggcggaatagacgacgtcttgttcgcccggacggcagttttccaaccatttttcaaaatgtttgacgaagcggtgatggctggtcacgcgtcccaaagatacgtttttgctgtatccgctttcttccaacagtatgactttcagacggccttgtgaggcggcctcggcatcttcgggccgtctgaaagatttgtcgtagtgcttgaagttgctggtaatcagcaacacgtcgtgcgattgcgacaatagttctgccagataccaaaagcggttgaaatgcggttcggacggcagcgagcagtagggggcggctatggtaatgttcatgtttcagacggccttacatttcgtacgcagccatggtggtgcggtagatttcgtcgtcggagcataaggtttcgacatgtttgtgcagggctttgcccatttggctgcgcaactctggatgcttgatgagtgtatcgacggcttcgataaacgcttcgtcatcgccgaaaggaatgcagtagccggtttggccggtaatgaccatttcggaaatgcccgccatgttgtaggtcacgacaggcgtgtcgtaaaggccggcttccaaaatattgttgccgacacctgcgccgtggtcacctacgcaatgcggcgtgttcactaaaatatcgacttctttgaagtagccggtcaaatcgcggacgccgccgaggaaggtcactttgtcttcaatacccaaacgtttggcttgggctttgaggttgtccatttcttctcctatgcccgccatgttcaggcgtacgggtatattgcggccaaccattttcttcaaaatatccaacatcagatgcacggcgcggacggtgtccaaacgggaaagtgtgccgagtacggcgcattctttttcggttttccggaaatgaaattcNggggggggggtgttgtaggcgtaggcaatccggccggcggggaagccgtggcggatgagcttttcgcgttcgtgtttgcagttgccgatgatgtacgcgcccagcttgtcgaagagtttggcggttttggggtaggttgccgcgtccaaaccgtgcgagtggcagatgattttggttttcggtgaaacgattttggcggcaagggcgcaggccgggacgacgcgcgccatttggcagtcgatgatgtcgggttgttcgcggcgcagcatccgggcgtaggcaaaggtgcttttaaggtagccggcaagcccgccccggtaaaaatcaaccggctgccaacggatgcccgatgcttgcgcctctccgacaaaagggccgtccgaggaggcgaggatgatgtcgtgcccgtgccgtttgagcagccgcccgaggcggacggtggcggtttctgtgccgcccagacccgacatagaagtagtcaggatgattttcataatgggaaaccttgttttttcaaataatgaaacagtttgtgcaaatttttccggtggcgcaggatgcagcctgccagatatgccgcccatacgccggcaaacagggggtagtttgccggcgtgccgaagcaggtgtaagccgccgaggaggccaggcagaacaatgtgtgcatataaagcggcaggcgtttgagcggctgccacaggcggcaggagctttcggtcttgaaaacaaaaaacagccagaatgaagcggcacaggcaaccgccgcgccccgcgccccgccggccggtacggaaagccccagcagcagcaggtttgccgccagcgcgcccaaggtggcgaatgcaatcggacgcgttttgcggacgacgttcaaaccgatgccgctgatttctgccagcgtgcaaaacagcggcggcagcatacacgatacgacggtaaaccggacggcggcgtagttttccggcagtaggagggaggtgaggggcgagaaaatgccggtcaggcagagggcggcggcaagcagggcggcgacagattctgccgttgccgagaggcgggtgggcggggcgtttttttcgattgcgcggaaaatatacggtgtccaaaccgttgaaaagatgctttggaacaataatgccgccccgccgaacgaaatacccatcgaataaatgccgagctgttccaggccggcatattttttcaggaacaaacggtcggcggatgtcagtccccaataggcaaggctgtccagtgcgagcggtatgccgtagcgcagcccgcgatgcaggacggcgggcgaaaacggtgcgcgccggacggccttcagacggcatcggttttgaaacagcaaaaaggcggcggcggcaaggtttgccagcgcgtaaacggaggtcaggacggcggtgcgcgccggaaagtgcagcagccagaccgtcagcagcaacagcagcagggcggacttgggtacgagttgcgcggacgaaaaggcaagggcgcgcccttccatacgcaaaaccagtaagagaaagcggatgggcagcaagctcagtccaaacagcaccagcccgatgccggcggcggcatcgtcgagcgaaaacaggatttcagacggcagggccgggtgggaaagcaggaaggcggctatcgcggcggcagacagcagcggcggcaggaacagggctttgaacaaaatgtctttgtcggcggcggcattgtattcgcggatatatgcctgatccagcccgaggcacaacaccgacatcgccagtcccgccgccgtctgcatcaacacgatgcgcccgatgtcgtcggcggggaaataccacgacagcagcggcaggatgatgacggctaaaatcgcgcagccaatcgatcctgccgcgtagccgaggatttcttttgtgtccatttttgatgtccggtcggcggcgggatgctgcctgtgccgtctgaagcctttcttgatcggaatttgacggctttcaggccgtcgcggctgccggcggggtgcggcagcccgggttgcgcttttccgggcgggcggcggtctgaacgggccgttttttatcggcgttattatatagtgaaacggcggcaaaccctttaaaaggcgttgccgtttttccggaacacggttttgatgtcgtgtccgaggatttcggtggaaacgggtgtccataatggcggcgcggaaagggcggcgcggttttcgggcagggaaaacaggtctttgccgccgccgaggattttgggcgaacggtacagcacgatttcgtccgccaaattttccgccaaaaatgcggatgtgagttcggagcctgcttcgaccatgatttcgccgaaaccttcgtcggcaaggaggcgcatcagatggtgcaggtcgattttgccgtctgccgtttcagacggcatcaggatgcggatgtgtgcgtgttcccgataggggcggagtttgtcttcatcgcgttccaaggtggcgatgtaggtcggagattgtccgtcggtaaccaaatggctgttcgggggcaggcgcaggcggctgtctaaaacgatgcgtgcgggttggcgcaaagttggaaaagcgcggacgttgagccggggattgtctgccaacaccgtgccgatgccggtcagcaccgcgcagctttcggcacgcaaaacctgtacgtcggcacgcgcttcctcgccggtaatccaaaagctgctgccgtctgaaagggcggttttgccgtccagcgaaacggcgcatttgaggcggacaaaggggcggcggcgttcgatgcgcgataaaaatccccggttgagttcgcgtgctttgttttcaagtagtccgcattccgtcttgatgcccgctgctttgagcaggacaagccctttgcctgcaaccggcgggttggggtcgcgcatggcggcgacgacgcgtgttacgccggaacggagcagggcttcggcgcagggcggtgtgcgtccgtaatggctgcacggttcgagggtaacaaaggcggtcgcgccttttgccatttcccccgcctgacgcagggcgtggacttcggcatggggttcgcccgctttgacgtggaagccctgtccgacaatttgtctgccgtgtgcgataacgcagccgacgcgcgggttgggtgaagtggaaaaacgccccaaagcggcaagtcggagggcgttttccatcatggatatatttgtgtccgaaaacatagggataccgtatcagtatgggttgggggaatcaggttttgccgcctgttttgacggcttgcgccagccacgaggcgaaatgttccgggctgtcgaagcgtttgtgcagggcggcgaaacggacggcggcttccgtgttttgcccgaacagctcctccagcacgatttcgacaagttcggatgaggatatgtcgcgctgacccgaagtgtagagcctgtgttccgtcaggcggacggtttcgtcaatctgttcgggtgtcagggcggNttttcgggcggcggcggtcaggtcgttgcggaggcgttgtgcattgaagggcgaacgtttcttgtccggaccgatgacggcgggcattttgagttcgacggtttcgagcgtgccgaagcgtttgccgcagccggggcagtggcggcggcggcggacggtattgcgctcttccatcaggcgggaatcggcaactcgggtgtctgggtggctgcaaaacgggcatttcatggtgtttcttcctgatgccgtctgaacgtcaaaccgatacgccggcggcgcgggcgatttccaggccttcttcggcactcatatagacgggattttcgggacggtcgtgccggacgatgttgccttcgcggaacatgaccagttcgttcacggcaagttgggaccacgattcatcgcgagtcagcggcagggtggagataacggcgacgcggtcgtccggcgtggttacttcggcaaaatcgaccattacatcgtcgtcgagcaggcgcgctttgccgaacggggcttggcggacgatgtagtgcagcagcgtgctggcgtgggcaaacagggaaatgccgtctgaaagcatgaagttaaacagcccgaacttgcggatttcgtgcgtcagccccgcaatcgcgtcaaacagcgtgtcgtcgtcgggacgggcggcaaagcgggtgcgcaggcggttgaggatgtggcagaacgcgcgttcggaatcggttgtgccgacggggtggaaaaattctccttgttcggggaaaaaatcgaccaaatgcccgttgtgggcaaacagccagtagccgccccacatttcgcgcataaagggatgggtgttcgccagcgaggtttgaccttgcgaggctttgcggatgtgggcgacgacgttttccgatttaatctggtaggcgcgcacgaggtcggcgacgggggaatttgcactcggcttgtcgtcatggaacaggcgcacgcctttgccttcgaaaaagccgatgccgaaaccgtcggcgtgatggtcggtaatgccgcccctgcggcggaagccttcaaaggaaaacataatatcggtcggcgtattgcagttcatgcccagcagttgacacatagtttgtccaaatgattcagatggtcgcaagtattcggattataccccgaactgaaaatgccgtctgaaatacggcttgttccccattattcccgcgaaaacagaaaacaaagacggaaacttaagattccgtcattcccgcgcaggcgggaatccgacttgtccggtttcggttNtttttcgttccgtaacttttgagccgtcattcccgcgcaggcgggaatctagaattt ->ERR2172267 -atgctcaagagccagtttgccggaaaaatagaagcggtgagggaagagttggctgccggccgtcccgccttcgtattcaaaccgggagaaggcgtgcgttatgagatggcggcggttgaaggtgctgtcgaacctgccgagccgtccttgcacgcggggtcggaggagatgcccgtgcaggaggttctgttggacgagctgccgtctgaaaagcctgtcaaacccgctgcgtcgaaaacggcggcggatattttggcggaacgtatgaaaaacctgccgcacgagccgcgtcaggctgccgggcctgcttcccggccggaatcggcggcagttgccaaagcgcggacggatgcgcagcgtgatgcggaagaagcgcgttacgaacaaaccaacctgtctccggattacacgtttgatacgttggtagaaggtaagggcaaccgccttgcggcggctgcggcgcaggcgattgcggaaaacccggggcagagttacaacccgttcttcctgtacggcagcacgggtttgggcaaaacccaccttgtgcaggcggtcggcaacgagctgttgaaaaaccgtcccgatgccaaagtgcgctatatgcattcggacgactacatccgcagctttatgaaggcggttcgcaacaatacctacgacgtgttcaagcagcaatacaagcaatacgacctgctgattatcgacgatattcagttcatcaaaggaaaagaccgtacgatggaagaatttttctatctgtacaaccattttcacaatgagaaaaaacagctcatcctcacttgcgatgttttacccgccaaaatcgaaggtatggacgaccgcctcaaatcccgcttttcgtgggggctgactttggaactcgagccgcccgaattggaaatgcgtatcgccattttgcagaaaaaggcggaagcggcgggcatcagtatcgaagacgaagccgcgctgttcattgccaatctgatccgttccaacgtgcgcgaactggaaggcgcgttcaaccgtgtcggagcgagcagccgctttatgaaccgtcccgtcatcgacatcgatttggcgcgtaccgctttgcaggacattattgccgagaagcacaaagtcatcaccgccgacatcatcatcgatgcggtggcgaaatattaccgcatcaaaatcagcgacgtactcggcaaaaaacgcacgcgcaacattgcccgtccgcgtcaggttgctatgagcctgaccaaagaattgaccactttgagcctgccgtctatcggcgattcgttcggcggacgcgaccatacgaccgtcatgcacggcatcagggcggtggcgaaactgcgcgaggaagaccccgagttggcgcaggattacgagaaactgctgattctgattcaaaactgaccggacacgcctttcagacggcatgacattgaccatgccgtccgaagggtaggaaatccaaccgatttaaggagcgaaaatgttgattttacaagccgagcgcgacagcctgctcaagccgctgcaagccgttaccggcatcgtcgaacgccgacacaccctgcccatcctgtccaatgtgctgattgagggcaggggcggtcagaccaaactcttggcaaccgatttggaaatccaaatcgacaccgcgggtcccgagggaggtgcgggcgacttccgcatcactaccaatgccaagaaatttcaggacattttgcgcgcgctgcctgccggtgcgctggtgtcgctggattgggacgacaaccgtctgacgctgaaggcgggcaaatcgcgttttgccctgcaaaccctgcctgccgccgattttccgatgatgaatgtcggcgaggacatcagcgcgactttctcgctggggcaggagcgtttcaaaaccatgctgtcgcaagtgcagtacagcatggcggtgcaggacatccgctattatctcaacggtctgctgatgcaggttgagggcagccagttgcgccttgtggcgaccgacggacaccgccttgcctatgcagcctgcgcgattgatgcggatttgccgcgcgccgaagtgattttgccgcgcaaaacggtgctggaactgttcaaactgttgaacaaccccgacgatccgattcaaatcgagctgctggacaagcaggtgcgtttccaatgcaacggcacgaccatcgtcagcaaggtcatcgacggcaaattccccgatttcaaccgcgtgattcctttggacaacgacaagattttcgtgttgtcccgtgccgaacttttgggcgcgctggaacgtgtgtccattcttgccaacgaaaaattccgtggcgcgcgcctgttcctgcaacccggcctgttgagcgtcgtgtgcagcaacaacgagcaggaagaagcgcgcgaagaaatcgaaatcgcctatcagggcggcgaactcgaagtcggtttcaatatcggctatttgatggacgtgttgcgcaacatccattccgacgatatgcagcttgccttcggcgacgccaaccgctcgacgctgtttaccgtgccgaacaatccgaatttcaaatatattgtgatgccgatgcggatttgacggttttccggaacacgatgcccgtattggagatatgccccgaaccgtgcagacggattcggggttttgttcggctgccggaaaggcaatgccgtctggaatgcggcggattggggttgggagcgtatgggggaagtgcttgtgcgggtcagcctcggagcaaatcccataaatcgttttgcaggtcggcttcgctttcgccttcggcgggcgcggcgcggatatagccgccgtcgggctgcatcagccacgcgtgggtattgtctgccagtgccatttccaaaccttcgcggatgacgcgttttttgagttcgggcgcggtaatcggggtggcggtttcgatgcggcggaagaaattgcgccccatccaatccgcgctggaaataaaggtgtcgtccgcgccgttgttgtggaaacaatatacgcgcgcgtgttcgagctgcctgccgacgatggagcggacgcggatgttttcggacaagccttttacacccgggcgcaaggtacacataccgcgcacaatcaaatcgatttgcacgcctgccgcgcttgcccgatacagggcttctatgacagtcggttcgatgagcgaattcatcttggcggtaatccgcgccggtttgccggcttttgcgtgttcggtttcgcgagcgatgcggccgataaccattttgtgcagggtaaacggactttggtagagtttgttcagccgcccgggtttgcccaagcctgtgatttccataaataatgtgttcacgtcggcggtgatttgttcgtcggcggtaatgaggccgaagtcggtgtagatgcgcgatgtgccttggtggtagttgcccgtgccgaggtgggcgtaacgcttgagcacgccgtcttcgcggcggatgaccagtgccattttggcgtggactttgtagccgaacacgccgtacacgacgtgcgcgcccgcctcttcgagctgcttcgcccagttgacgttgttggcttcgtcaaaacgcgccatcagttcgacgacgacggttacttgtttgccggcgagtgccgccttcatcagggcggggacgagttcggagcgcgtgccggtgcggtaaatcgtcattttgacggcaagaacggcgggatcggcggcggcttcgcgtatcatatcgaccacgggatcgaaagattggtaggggtggtgcagcaggatgggcgattggcgcaccaaatcgaagatcgggctgtttttgcccaaggctttcagacgacccggcgtgtgcggcggaaatttcaaatcggggcggttgactaggtcggggacggcgttgaggcggacgaggttgaccgggcctttgacctgatagagttcggcgtcggtcagcctgaattgcgcgagcagaaagtcgcggatgtaggcgggacaggtgtcggcgacttcgagccgcacgccgtcgccgtattcgcggtcgtgcagttcgttttgaatggcggcgcggaggttttgtacgtcttcttcgtcaacggtcaagtcgctgtcgcgcgtgaggcggaactggtggcagcctttgacgttcatgcccgggaagagtttgccgacgtgggcgtggaggatggacgacaggaagacgaagccgtgtccgccgccacacagttcggacggcaggggaacaacgcgcggcaggatgcgcggtgcttggacaatcgccatacccgaaggcctgccgaacgcgtccgtgccgtcgagttctacggcgaagttgagcgatttgttcagcgggcgcgggaaagggtgggaagggtcgagtccgatgggggtcaggatcggcagcagttcgcggtcgaaatagtcttcgatccattttttctgcgtgcccgtccaattgcggcggcggtaaaaatggatgctttcccgcgccaactcgggctgaaggacgttgttgaacaggtcgtactggtgccgtatcagggagcgcgccgcttcggtaacgtcggcgatggtttcagacggcgttttgccgttgtccggcctgcgccgggggtgcagcttgttttcacgcttgagccacgccatgcggacttcaaaaaactcgtcaagattggacgacacgatgcacaggaagcgcaggcgttccaaaagggggacgtttttgtcttccgcctgtgccaacacgcggcggttgaatgccagcaggctcagttcgcggcagaggatgcggttttgttcggtcataaggttctcccaaagatggttgttgttcggtcggagcgggcggacaatgccgtctgaaggcttggcggcatctgcgccggtttcaggcggcatgacgtgacggacggtctgtttcaggcatcggggcaatgtgaaaacggataccggcacgtgcggtatccgtctgtttcaaatcacttccaacacaaaataatgacgcagtttttcgtacaccgcatcgctgacgttgatgcagccgttggtcataatcctgtcggacacggacggggaggcgatgcgttcgtttcgcctttcggacggtatctgattccaaacgcggtgcagggcgaaaagaaaatcgccctcctgcttgaaaccgatgacttcgccgccgtaaccgggcttgtcggtactgttcagcgtcagtccgaacgtccccttgggtgtggcagtgccgatgaggacggggtggcactgacggtcgtcggcaaaacagagttccgccttggatgtgtcgacgatgacttttttcttttgaatataggcactgaccgcatccggctgcccctgtgcgaatacgggggcagtcgtcagcaggcagcacaatatccctgaaagcaggcggggcggcatagcggcttattggcggatacgtttcggttttgccggcacgatttcgcggatgatgacttgcggctcggctttgggtgcgggcggcgggcagacggcatctttcgggaagacggggttccagtagaagctgcgggcaaatttgtctttatcgaaaatcactttgtattggcaggtagtaacgccttccacgccggaagtgttttcagggtcgatacccacgcccggggtgtggaagtggaacaggtaatcccattcgcgcacgccgtacataccttcgtcgtaatgcgggcggcccgggattttgtagatgtcgtctttggtcagaccggggcgcatctgatccagttcgtcataagtcgggaatgtgccgcgcttgttgtcgagcgttacggaatagggttccgggaaaaccggattgtcggtcgtgccgtcggctttgacgttgctttatggttgcgcaggcagacagaatgcctgccgccaatactgccaagctcggtttgacgatttgtttgattttcatatgcagaatccttttttacccgatgcccgtctgccttttgttcggaagagccgcatcaggagagttttaaacgtttgattttggttcgtaatattagcataaaaaacgtgcgtatcagtaaacgcggtgtatttgtacggcatacggaatgatgcgcgtgcgaatttacgcatcctgccggcaatttgccgattcgccgacatcggcaacctgttataattcctcctttaaattcctaacgttttcaagcgaaaaacaaaatgaccatgcaagaacattaccagcccgccgccatcgagcctgcggcgcagaaaaaatgggacgacgcccgtatttccaacgtctccgaagacgcttccaaacccaaatattattgcctttcgatgttcccttaccctagcggcaagctgcatatggggcatgtacgcaactacaccatcggcgacgtattgagccgcttcaaacttttaaacggcttcaacgttatgcagcctatgggttgggacgcgttcggcatgccggcggaaaatgcggcgatgaaaaacaacgtcgcccccgccgcttggacctacgacaacatcgaatacatgaaaacccagctcaaaagcctgggttttgcggttgactgggaacgcgaagtcgccacctgcaaacccgaatactaccgctgggaacaatggctgtttaccaagctgtttgaaaaaggcatcgtctatcgcaaaaacggcacggtgaactgggacccggtcgaccaaaccgtccttgccaacgagcaagtcatcgacggacgcggctggcgttcgggcgcgttgatcgaaaaacgcgaaatcccgatgtattacttcaaaatcacggattacgccgaagagctgctcaacgatttggacaagctggaacactggccggaacaagtcaaaaccatgcagcgcaactggatcggcaaatctcgcggcatgaccgtgcgcttcgccgtttcagacgacagcaagcaaggtttggaaggcgattacgcgaaattcctgcaagtttataccacccgccccgacacgctgatgggtgcgacttatgtcgctgttgccgccgaacatccgctggcaacagccgcagccgccgacaaacccgaattgcaggcatttatcgccgaatgcaaagccggttcggttgccgaagccgatatggcgacgatggagaaaaaaggcgtgccgaccggccgctacgtcgtcaacccgctcaacggcgacaagctggaagtgtggattgccaactatgtcttgtggggctacggcgacggcgcggtgatggctgttccggcgcacgacgaacgcgatttcgagtttgccgccaaatacaatctgccgaaaaaacaagtcattgccgtcggcgacaacgcattcgacgcaaaccgatggcaagaatggtacggcgacaaagaaaacggcgtattggtcaacagcggcgacttggacggcttggattttcagacggcatttgatgccgttgccgccaagctgcaaagccaaggtgcgggcgaaccgaaaacccaataccgcctgcgcgactggggcatttcgcgccaacgctactggggctgcccgattcccatcgtccattgcgaaaaatgcggagacgttcccgtccctgccgaccaactgcccgtcgtcctgcctgaaaacgtcgtacccgacggtatgggttcgccgctggcaaaaatgcccgagttttacgaaacttcctgcccgtgctgcggcggcgcggcgaaacgcgaaaccgacaccatggacaccttcatggagtcgagctggtacttcttccgctatatgtcgcccaagttttcagacggcatggtatcggcagaatccgcgaaatactggggcgcggtcgaccaatacatcggcggcatcgaacacgcgattttgcacctcctgtacgcgcgcttcttcaccaaactgatgcgcgacgaaggtttggtcaatgttgacgaaccgtttgaacgcctgctcacgcaaggtatggtcgtctgcgaaacctactaccgcgaaaacgacaaaggcggcaaagactggatcaaccccgccgatgtcgagctgactttcgatgacaaaggccgccccgtttccgccgtcctcaaagccgacggactgcccgtcgtcatcagcggcacggaaaaaatgtccaaatccaaaaacaacggcgtcgatccgcaagaactgattaacgcctacggcgcggacaccgcccgcctgttcatgatgttcgccgcaccgcccgaacagtccctcgaatggagcgacagcggcgtcgaaggtgcacaccgcttcctgcgccgtctgtggcgtaccgtttacgaatacctgaagcaaggcggcgcggtcaaagcatttgcaggcaaccaagacggtttgtctaaagaactcaaagacctgcgccacaaactgcattccaccaccgccaaagtcagcgacgactacggccgccgccagcagttcaacaccgccatcgccgccgtgatggaactgctcaaccaatacgacaaaaccgacaccggcagcgaacaaggccgcgccgtcgcccaagaagtattggaagccgccgtacgcctgttgtggcccatcgtgccgcacatctgcgaaaccctgtggagcgaattgaacggcgcgaaactgtgggaagcaggctggccgacagtcgacgaagccgccctggtcaaatccgaaatcgaagtgatggttcaagtcaacggcaaactgcgcggcaaaatcaccgtcgccgccgacgcctccaaagccgacctcgaagccgccgcactcgccaacgaaggcgcagtgaaattcatggaaggcaagcctgcgaaNaaaatcatcgtcgtaccgggcagactggtgaacatcgtcgtctaaaccgcttttaaggtttagccatacggataaaggccgtctgaaacttggaaacagggtttcagacggcctttttaaggcagattgggttgtctgcaagacagacctcaaatatagcggattaactttaaaccggtacggcgttgccccgccttgccctgctgtctgcggcttcgtctccttgtcctgatttttgttaatctactaaaaattaatctcaaaatccaaaatatgaatttatttttcgatacccaattgggaaagcaacaaaataaagcaacccacaaaatccgtgtaatgagcgaggcttggctgNaaaaaaacggctattgcccctgttgcggaagcaagccgatgcagagatttgccaataacaaacctgttgcagacctcttttgcccaaattgccacgagcaatatgaattaaagagtaaaaatcaaaaaaccataggcaacagcgtgcctgacggtgcatatcgcactatgttggagcgcatccggtcagataccaaccccaactttttctttcttgcatataaaaaagcggattactccatacggcaattggtgcttgtacccaaacatttcatcacgccggatatgattattcccagaaataaaggcattaaaaaccgaccgcaccacattatgtgttccatcaatctcgcccctttgcctgaaagcggaaaaatattcttaatagacgattcccgcattatcgaacccgaaaccgttctgaaaaaatggcaatccaacctgtttttacgcaaccaaaatgcggagcgcaaagactggcttttggctgttatgaaatgtatcgaccaactcaccgaagaattcacattgtcgcaaatgtatgaatttgaaaacaaactatccatccaatttccccaaaacaaccatatcaaagacaaaatccgccaacagttgcaaattttgcgtgatcaaaatatgatcgaattcattggtcgcggactttacaaaaaaatcgacaaattgcacccaactcccaaggcgttttgatttcaaatcatgatactgaatttacgagaaatatttattcttctgccattttaaaaacggttgaagtacaacgcaatattgccgcaaagggcagcagtcgtaaaaaagtcggagaattattggcaatttatgattgattttgacaaaccggctgaagaagctgccatttatcaaagtcgtttgaaaaaatcgtttcagacgaccttgtcctctacaacgaaaattcccttaacgtcatgcggaagatattggaaaaacatccaaacggctgttttgatatgattttcgcagacccgccttactttctttccaatgacggtttcagttgtcaaaacgggcaaatggtttccgtcaataagggcaactgggataaatccaaaggaatggcggcagatttggaattttacgaagaatggctccgactgtgttacgccttattaaaaccaaacggcacaatttgggtttgcggcacatttcataatatctatttaatcggctacctgatgcaaaccgtcggctaccatattttgaacaatattacttgggaaaaacccaatcctccccctaatttgtcctgccgtttctttacccattcgacagaaacaatcttataggcaaagaaaaataaaaaagctaaacacacgtttcattatgaaaccatgaaaacacaaaatgatggcaaacagatgaaatgtgtttggacatttcctccaccaaataaaaccgaaaaaacattcggcaaacatccgacacaaaaaccactccccttacttgaacgctgcatactatcggcttcaaatatcggagatttaatttttgacccttttatgggcagcggcacaacaggcgttgccgccttaaaacatggtcggagattttgcggttgcgaactggaagaagatttttttgaattagcaaagaaaaggttagaaaaatgattattggcggaatcggcggtgcaaggacacaaacaggactcagattcgaagaacgtacagacttacgaaagttgtttgaagaaattcccgggtacgacttaagaaaaacagatgataatgcgggttatgaagtttggtttaatggagaattgaaggcttattgtttcaaaaaatatgagttttaccgatttttggaaagactggaatacaatattaattggaaagaccatctgtctaaaagattactgcccgataatggcttatttatcatcatccgtgataccttatttattattgagatcaaattccaacaaactcccggttcagtagatgagaaattacaaacttgcgattttaagagaaaacaatatacaaagttagttcactctttaggttggcgggttggatatgtctatgttttgaatgattggtttacaaaaccggaatattaaagatgttttagattatattatcagtgttaactgccattaccaatttaacacgattcccttaaggtggtttggactgcctgatggtgaaacaaatgaataaataccatatttaaaacacaaccgttcaaggtcgtctgaatatcatttcagacgacctttcaccaatccccgccgttttccatctttctgctattgtgataaagtagcccgaccttttgttcaaaatacgcggattccgcgacactgaatgcagcatctgtcaaagattatttgaaaacggtcgagttaaacaagtctgccgacaatgtcgataccacatccaaaactatccgcagggtttaggcggtattccagagtacggtgtcttatgctgatgctgtaaacaatgcctgtatagaaaatctaaaacggttgttgccgaccgttatgccggtttatgagcaaagtgtcagaaataaggggcgcgttaataaaaaacgtcggcgttaagggaaggggatcgagaatttgagccgttgtttcaaaatgccgtctgaaatcgtttgagattcagacggcatttaaacagttctgcgccccgcccgttttgccttcaagcccgcgccgcttaaatctaatccccctgcaacgggcgcaaaaaatccccgtgcctcgcggtcggggatgtttcgggtttcgcgcccgtctgcgccgtgccttgctgtcgggctatgccgtctgcaccgccgccgtttcggcttggtttgatgcggtcgggcatttgtgcggctatgccctgatattcggttcggcggtcttgcctgtcttggcaggcatattcagcagcgcgtctattgtgaacttgctgattttgccgtttgccaagtcggctacgcaatggcttcgatacccttgtttttgacgatggtcagcagcttcaacgccgcgccgctcggctttttaacgccccgctcccaagccgaaacgtgattttttcccacgttgagatagatggcgaaagcggcttgcgatagtgcctccttctccctgattgccttgatgtccccgccgctcaacggtttgatttcggtcaggcaggacttgtcaaagccgcgcatagtctttttgtcgattgcgccgatgttgtaagccccttccatcatttcatgaatggcggctaatgcctcgcttttgtatttcataattctatctccgtgataatgccgtcttctttcaaagccgccagctctgcccgcgtgtatttcagataatatgcggcggcttttcggtaaacgtccagttctttatccgaaatgttttccctgtcgttcttggcaaaggcgtaaacgaaaaatgccctatctgcctgtttgaacaatatcaggctgcgatagccgccgcttctgccttgtccttgccttgctatgcgctgcttaatcacaccgccgcctaaatctgcgtctatcagcccgttatccgcccgctctaccgcttccagcagctcggaatcgttgattttgtgcttcttggcaaatttcactatccattggtttttgaatatccgcattgtgtagccgttgattagtgatacttggaattataccagagacagacaacacggcaagctgccttttttatgccccgcaatttctccgtttatgccgcctgaaacaccggcggctaacctgattattttttaatcaatcgcttttaatggctcaaattgcgtttttagcgcgtttcgctgtcttcctatgccccgtatataaccaagcggtttaaccgccattcctgctcaaaataggcgcggttccgtgcgttttggcttttcattccgctacgctcccactgccaagacggtgaaaaaccggaaaaccccaaaagttgttaccgattcgttaccatttgttaccgcatttgttaccaattttttatctttttcttattttatagtgaattaaatttaaaccggtacggcaaggcgaggcaacgccgtaccggtttaaatttaatccactatagtataggttttttccaaaaacccaaaaaaaaccgctctgcatcttggacggtttccccctcattccctacggtgcgtcagtattccccgcaagctatttcccgcttggcattcctgatttggtggtcgttcagctttatttttacggtattttctcgcggtattttcggatgctgtaaaaaatcaggttagttcaattagggcggattggacgggattgcactgtcaggaagggggacggcaggataacaatcagcctgaaatccttgtattgattgggattggttgacggcattagacaggattaaacgaaaaaaaacgcttagaatttctaagcgttttgtgtgttggtgccgacagcgagatttgaactcgcacagcctacggccactaccccctcaagatagcgtgtctaccaatttcaccatgtcggcatttgaaaaactgttatttctgctgctgaggaacaggggcagaaggttcggtattgcttacgggtttgggtgcttgctgagtttgttgtacgttgctgaagtccaaaccgtgttttgtcgtgtgggtgtgaatatacaccatagccatgcaggttgcaaagaaaaatgttgctgcaacggcggtcgagcggctgaggaagttagcgttgccggcagagccgaatacgccttgcgcgctgccgcttcccgatccgaaagtcgcgccggcatccgcgcctttgccgtgttggagcaatactaacacgatgacggccaaagcggaaattatattaacaatccaaattagggttttgaaggcttccatatttttctacgcattttgtgcggcactgatgatggcggtaaaggagtcgtacgacaatgacgcgccgccgacgagtgcgccgtccacataaggtactgcgaagatgtcggccgcgttgtccgctttcacacttccgccgtaaaggacgcggattttaacatcgcttccgcacaaagacaagatttctttgtagatgaatgcgtgcatatcggcaatctgttcgacggtggcgactttgccggtgccgatcgcccagacgggttcgtaggcgacggcgatgtttttggtatccagcccttgcaggatggaaagctgatgggcgatgacttcgtgttctttgccggcttcgcgctcttcgaggctttcgccgacgcacaataacgggatgagtccgacgttgaggacgttttccattttgcggcgttggatttcgtttttttcgccgaaataaaggctgcgttcggagtgtccgatgaggacgatgtctgtgccggtgtcggcgagcatttcggcggacacttcgccggtgtacgcgccgttgtcggggaagcggctcacgtcttgggcgcaggtgaggatgcggttgtttaagacgatttgcatggcgttgtgcagttgcagcaggtaaacggtcggggcggcgagtccgatgaggacgcgttcggcggtggggaggatgcggaagcggtgcatgagcgaattgttgttctggagccggccgttcattttccagttgccgatgacccatttttgatcccacattccgatttggtgatacatcttttttgctccgtgtcgtgttttttctgtctgccgcgtgtggcgcgttgcaatgtgaagtttagtggatatgcggcgggttcgcaacttggggcgggcggctgcgggggcggtttggaatgttgtttcgggcaggttgttttataatggccgcctgatatgtatgcaactataggagatgtgatgcacgcgcttcatttttcggcttcggacaaggccgcgctttatcgggaggtgttgccgcagattgagtctgtggtggcggacgagacggattgggtggcgaatttggcgaacacggcggcggttttgaaggaggcgttcggttggttttgggtgggtttttatttggtcgatacgcgttcggacgaattggttttggcaccgtttcaggggcctttggcgtgtacgcggattccgttcggtcgcggggtgtgcggtcaggcttgggcgaagggcgggacggtggtcgtcggggatgtggacgcgcatcccgaccatattgcctgttcgtctttgtcgcgttcggagattgtcgtgccgctgttttcagacggccgctgtatcggcgtgttggacgcggacagcgaacatttggcgcagtttgatgagacagatgctttgtatttgggcgaactggcgaagattttggagaagcggtttgaggcttcgcgccaggcggcttgagtgatggaaaggggcgggcggcgcgtgccgaagttggcgcggcgggagtgtggttttataatgcctgccattgttgaaacaattatttgacggagcactaaatggattttgaaaaagcgcggttcaatatggtcgaacagcaaatccgtccgtgggatgtattggattttgacgttttggacgctttggcggagattccgcgcgagctttttgtcgatgaggatttgcagggtttggcgtatgcggatatggcgctgccgcttgccaacggtcataagatgctggagccgaaagtcgtggcgcggctggcgcagggcttgaagctgacgaaaaacgatacggttttggaaatcggcacgggttcgggctatgcgaccgcgcttttggcaaaattggctggtcgtgtggtttcggacgacatcgatgccgaacggcaaaagcgcgccaaagcggttttggacggcttgtctttggaaaacatcgattatgtgcaaaataacgggttgaccgaactttccgcaggtgcgccgtttgatgcggtttacgtcggcggcgcggtaacccttgtgcctgaagtgttaaaggaacagttgaaggacggcgggcgtatggcggttattgtgggacgcaggccggtgcagcgcgcgcttttgattacgcgcaggggcgatgtgtttgaagagaaggtgctgttcgatactttggtggcgcatttggacgacaaggatgcccatcctttcgacagttttaatttttgatgttcggattgtgatgccgtctgaaagcgggtttggggcttcagacggcattttgcttggtttttttcggggggtttgtgatggatattgtgcaacttccgtcggcggcattgaaggcgtggatggacgaagggcggatgttttgtttgttggacgtgcgtacggatgaagaagcggcggtttgttcgctgccaaatgcgctgcatatcccgatgaatctgattccgctgcggcaaaacgagttgccggacgatgtgccgcttgtggtgtattgccatcacggtatccgcagcctgcatacggcgatgtatttggcggaggcgggttttgaaaacctgtacaaccttcagggcggcatcgacgcgtgggcggttgaggttgacgcggaaatggcgcggtattgaaggcggcttcagacggcattccttaaatgcgtgtacctctggtgttccataaaggtcgtctgaaagtgcagcttctgcgaagctaaagcgcagtatcaacgaagttaaaatttgcctgaaccttaaaggcagcctgcaccccaattccctcgccccgtgggagaaggctagggagagggcggcaaactgcaggtttgcttgggcggcattttcaatgtgcaggctgcttttagcttcgcagaaactccgttttcagacgaccttatttaaaccgataggtaaacgccgcgttcactgtccgcagtgcgccgtggctgtggcggtcgggctgggtgcggtagtgtttgttgaacaggttgtccacgttcagcgacagttcggtgcgcggattgaagcggtaacgcgccatgatgtcggcgacggcgtaggctttctggcggctgttggcgacggcgcgggctttggcggcggggttggggatgtggagcgcggctgggtcggtgtgggtttcgccctgccggcgcacacccgcaccgatggtccggccgctgggggcttcgggggctaagtggtaggcggtgaagagtttgaagctgcgttcgggtacgctgtcggggttcaggcggctgccgtcttggtcgcggggtttgctttggctgtagcctgcctgtatctgccattcgggcgtgatgcggccgccgacttcgatttcccagccgtgggttttggcttggttggcggcgcgatagtaggtgttgccgctctggtcgcgtcctgctgcggtggcgaggttgtttttacgggcgcggtacacggcggcggatgcgttcagacgcccttcaagccattcgcctttgatgtcggcttccagattgttgccggttacgggtttcaggtagctgccgtgttcgtctttttgcaattgcgggacgaacaggctgctgtacgagccgtaaagcgacaggttgccggtcagatcgaacacgatgcctgtgtagggggtgaaacggttggcggacacataggtcatgccttgtgtgcggctgttgtagctgcctgcgcggtagcggctgtatctgccgccgagtatcagcgaaaggttgtcggcggcgcggaaacgggtggcgagatagccgccgatttgccgcctggtgtcgtattgcgggatggtttgggcaaacgatgatggctgcggataggcgcccgtgcgggaaaattcgtaggcgttgggaatggcgttgggaatgatgctgcgttcgccgtatttgttgctggcgtatttgtagccgttgatacccgcgattaaatcgtgctcgcggccgaacaggcggtatttgccggtcaatgacatgctggcgctgtgggtgcgcggatcggcgtgccaataaccgggaatcaggtcggtggcggcagtgctgtggtcgatggaaagtacgcctgccacaccgtagggctggcggaagcggctacgggtgtagtcgtattcggctttgagtttccagtcttggttgaagcggtgttctatgccggcgaacaggttgagcgcacggttgcggctgttcgaccaatttgtggcggggttgtcttttgggccgaaggcggtggcataaccttggctgtcgtacacggcgtagctgagcggcgcgtctgcggtttctttcgcctgctggtagtccatgcctgcgtggacgcgggtttgcggtgcgatgtcgtattccaaaatgccgtagagttcggcatcgcggctgcgttcgagctgccgccacgagtcgccgcgtccgaaggtggaaaccaggcggccgcgcagcgtgccttcggcgttcaggctgcccgatacgtccgcgcccagcccgaaatgtttgcggttgccggcttcggcgcggacttcaaacaatggcttgcgggtcgggtgtttgcgtaccagattgacggtggcagaaggctcgcccgtgccgtccggcagccccgccacgccgcgcacgacttctacgcgctcataggcggcggtgttggcattgcccgtatcggccagcgcgtcggcaacggggatgccgttgatttggtagttggcgatgcggctgccgcgcgcgaacaggtagttgtagcccgcgcggtcggagccgtaaatctggcggctggtgccggtcgcctgcaacagggcgcggtcgagcgttttgatgttttggtcgcgcatttgttgcgatgtgatgacgctgacgctctgcgggatttcgcgcagggtcatgggcagcccgaacggggtgtgcgtgccggaaacggtgtagccgtcgttggaactcgcggtgcggtcggcggtaacggtgatggtcggcaattcggtgctttcctgcggtttggggtcgtctgaaacagaaacatcggcctgcgcgtacacgggtagcagggcggcaaaaagcagggagtatttgaagcgtgtcatggggtttcctttgtgtgttggtgtgcggtggggttgtatagcggattaactttaaaccggtacggcgttgtcccgccccggctcaaagggaacgattccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatcctctatgcttttggcatattgaaggtgtaggctgcttttagcttcgcagaaactcagcttccttcggaaacttcgttttcaggcggcctcggacgggtcgggcagatcaatcagcaccaccgagcagccgttttccgaacgcgggcggtgcgacaccgacttcggcacgaccgccatctcgccctcgcgtatcgtcatgttgccgccgtcggcgaagtccaccgccatgtcgccctccacggcaaacagcactttgtcgctgtatccgtgcgtgtgccagccgtaatcgcccaaaagtttgaccaggcggaattggaacccgtggcggttgatgatttcgggctgccagtattctttgatggcggcaaggtgctgtttcaggttgatggtttcgttttgcatggggttctccttgtggtttgttttgaataaaactactgcgccgcaacgggttctgccttttcaaacgccgccttcaactgttccgccgcctgtatcaactgccgcgcgccgcccgcgacaatgtagttcgcggcaggcatgacgatgatttgcttgcgcttccaagcgttcgtgccgcataccagcgcgttatccaacacttccacggcagccggcccttcctgcccgatggcggcggtgcggtcgatgatgaaaatccagccggggtttttctctttgatgtattcgaaggaaacgggctgcccgtgcccttcgttgcgtaaagattcgtccacgggcggcaggccgatgtcgccgtgtatccaacttgccaaccgcgattgcgtgccgaaggcggacaccttgttgcctgtaaccgacagcaccagcccgcgtcctttgcctttggcggcttcgcgcttttgggcgaacagcgcgtcaatctgcgcattcaattccgccacgcgcgcttccttaccgaaaatccgcgacagggtctccatctgcttctcgccgctggtgcggatattgccgttgtccaccgtcaaatctatggtggtcgcgtttttcgccaactgttcatacgcttccgcacccggcccgccggtaatgacaaactgcggattgtggcggtgcagggattcgcaatcgggctcaaacagcgtccccaccgttgccgccttgtcaaatgcaggctgcaaatagtccacgcgcaccggcgcggtggttgcgcccacattcacgcccggctcggtcagcgtatccaacgccgcccagtcgtacacggcgacgcgttcgggattcttcggcacaacggcatcgccccgcgcggtcggcacggtcagcgtggcgacaggtgtggatgcggcttgggatgcggcggatacagttttttcggcggcaggttcgggcgaacaggcggccggcaggacggcgcaggctgcccaataaaaacgcggtttcacggtgtgcggttcctttgcatacgaataagaatgtttattattaagcaaacaacctgcagaaaccacgccgcaaaacgcaaaattcccgatacggcaaaacaaattcccgaaacggaaaaggtcgtctgaaacaccctttcagacgaccttttccgttccaaccaatccctgcgcttgattattggtaataattcctatttaattcatttgttagacaactcgttcctatccaatcatgaacaccgccgccatctaccgccagtaccaaacctatgtccgctccgataaatccggctgggcgttggacggctgttccgacagcgcactcattgcgcaggcaaaacagcccggtttgcatctgaaaatgtgcatcaaccgcttcgactcgggcattaccttatcacggatgcgcggcggcggaacgggtgcgtttcccaccgaaatccacaatttcagccacaactgcgccttgttcgtcatggtatcggggcagaaccggttacaaatgggcggcagggaataccgcccgtctgccggcgaaatctggctggtacgcggcgaactggcggacgtatccgaaaccctgctgccagacagcggcggcatgtgcgcgctgcatttggatttttcgctggaaaaactgcgccgctggcacgacgaaggtttactggacgaacgcctgttttcgccgcaaacgataggccgattcgccctgcaacggctggcgcaaaacgcggggacactgacggcggcggcctgccccctgctgcaacgcccgttcgaatcggacggcttcggcctgctcgccgacgaagccgacgcgctggaactctccgcccgattattacgcttcaccttccgccgccacgacaacggctaccgccgccggcgcatagacgaagccgccgatattttgaacagcgaattcgcccgcccgctgaccatcgccgaaatcgcccgccgcgtcgggctgaacgaatgctacctgaaacgctatttcaaagcgcaaaccggcgaaaccgtcgccggacgcctgcgccgcctgcggctggaacacgcgctcgccctcatcgaatcgggcagcaccatccaagccgcgatgcacttttgcggctaccgccacgcgggacggttcaacgaagcgttcaggcggcattacggatttttgccttcggatgtgaaaaagtgctgatgggccgacggcatagatattttgatttgaaacaaccattaaaaaagatcgtctgaaaaagcaatttcagacgatcttttttcattcgcggcggcagtgtcgccccctgcccttatcccaaaaattctttcaaaaacagcaacacgcaggcgagtttgtcggcggattcgcgttgggtgccgttgccggtatggccgccgccgtcaggcgagtagagccaagattgcggcgaggtttcgcgcagtttggcgtagaatttgagcgcgtgggcgggatggacgcggtcgtcgctgaggctggtggtaatgagtgcgggcggataatcgatgccgtctgaaagattgtgatacggcgacaattcgcccagccggcgtttgcaggcttcgtatttctgcggattgccgtattcgtccgtccaacttgaaccggcggacagcagcggataacggatcatatcggtcagcggtacttcgcacaccagcgcaccgatgctttgcggttcgcgcacgaaggcggcggcggtaatcaggccgccgttgctgccgccctgcaagccgatgtgtttgggcgaactcatgccgcgttcggacaaatcacgcacgactgccaacaaatcatcaacgcttttgtgtttgctgattccctgcgccgcctgatgccagcgcgggccgaattctccgccgccgcggatgtttgccaatacaaaggcattgccctcttccagccaatatttgccgacgctgcccagataatgcggcaattcaggaatgccgaaacctccgtaagcatagactaaggtcggcgtgtcgggcgcggcgtttttgccgacgtggaaataaggaatgcgttcgccgtcggacgacaccgcccaaaactgccgcacttcgatgccgtctgaaacaaactgctgcggctggaggcgcatgacggtcagttccatcacgttcaaatccagcgcaaacagcgtcagcggcgtggtgaaatcgctggcggcaagataaaccacgtcgccgccccacggttggtcggtcatttccaacgcgcccgagggcaggtgcggcaactcggcttcctgccatttgctgtcggcaaaccgccacgctttcagacggccttgtacattctccagcaggcttgccaccacaaaacgcttggtcgtttccacgctttccaatgcctgcgtttcatcgggcgcaaacaaaagctgcgccgccccgagttcgccccgattcagtttcaccgccaccaacgcgccactcggatagctttggttcgcgcggtgccagtccttgcgcagcgtcagcaaaagatgtcccgccagatagccgaccacatcgcaatcattaggcaggttcaacggtttcgccccgccttcggacgacacctgcaaatacgtcttggtgtaaaaaccgtccgacgcttcaatcaaatcaatcggcgaaccctgcggatcgaggtaacgccacgcgtttaccatcatcgcgcctttatcgatttggtacgccggcaggctttcctcgaaactcttgccgcgttccaccagccacacttcgcgcggatagcccgattcggtcaactggcgttcgtcccaagccggacacacccacacgctgttttcatcgcgccacgacacatggtttttgcctgccggaaagtgaaaaccgccctctaccaattcccctgcttccaaatccacttccagcgtatacgccgtatcgccgcccgatttgttcaaagtcagcagcgcgcggttgggctgctccaccaagtgcgacacgccgcccaaatacacatcgtcgccgagcaactcatcgaaatccgccaccgaaaacaggattttccactcgggatagccggaacggtaggtcgccgccgtacacatgcggtacacgcccttcggatattccgcattctgatggaaatggtacatccgcgcgcggtgttcctgacaaaacggaatctgccgcgtgtcctgcatttgattcaaaatgccgtctgaaagtgcgcgcgccttgtcgttttctaaaaaacgcgcgcgcgtttcggcattcgcttcagcagcgaagttttgcgtttcggcggaatcgaggttttcaaaatggcggtaggggtcggggtaggatttcatcggggtccttgagggtcgggcaggtctttgtcatcggggaaatgccgtctgaaacggggttcaggcggcatttctgcggcggctttccgttgcggtcagcggtgcaggcgacgcaccagaatatgcgggtttcgtccgttgctgcggtagtctttgcgccgcgtttcgggcagctcgtcttccgatgccgtctgaaagccgcgttcggcaaaccattcgccggtatttgtggacagtgcgaacagcctgcttatgcctatgccgcgcgccttatcgataatgtgggcaagcaggcgttcgccgtagccgccgtcctgtgcctgcggcgagacggcaaggcaggcgatttcgccgcaatcggcttcggcaaaggttttgagtgcggcacagccgtacaggttgccgtcgtgttcgaggatggaaaattcggaaatgtggttttcgaggtattcgcggctgcggtgcaataggatgccctgttcttccagcgggcggatgagggcggcgatgtgcgggatgtcgccgctgtgcgcctgccggatggagacgaaggcttctttggcaatggacgtgccgatgccgttgcgggtgaagagttcttgcagcaggctgccgtcggcggccccgttgaggatttggacgcgatgcacgccgccttcgagcgcggcaacggcggacgaaatcagtcgtcgggtttcgctggcggcgtgttccgccagcgattgcgcttcctgtgccgagagggtttcggcgagcgtgccgtcggggcgggaaatgccgtctgaaagggtcaggtaaacgagtttttcggcttgaagcgagacggcgacggaagcggcggcctgcaccatatcgagattgaaggttttgccgccgtaggaatgcccgagcggcggcatccagacgatattgcccgcgtcgagttggaaacggagggcggcggtgtcggttttgcggataacgcccgcgtattccatatcggttccgtcaatcacgcctatcggacgggcggtcaggaagttgcccgatacgagcgggacggaaggcgcgcgcgcgaatcctgaaacgctgccgcacaatgcggcttcaaaacggctgcggacggtgccggcaaactgctgcgcctgtccgagcgaggtttcgtcggtaacgcgcaaaccccggcaataatgcggcgtgcggccttgcgcggcggcgaggcggtcgaggaagtggtacgcgccgtggatgaggacgagtcggatgcccagttgcgacaacagcccgatgtcggcggcgagcttatttaaggtgccgccttcgagcaggcggccgtctatgccggcgaccagtgtcgtgccgcgcatttggcggatgtagggggcggcttcgcggaagtgggcgacaaagctgtcgggcgcgttcataggatgaagaggtaggaaagctgcataatgaggacgataagtgcgaacagggttgcaatagtccagttgagcccttcctgacgggcgggcggtacggaaacctgcggtgcggcggcaggtgcggcagcgg--------------gtatcgtgcagggttgtaccgccgttgaggatatcggcgatttcgtcgcgggaaatctgtttcttgctaatggcgtgcgtgccgatgcggtggacgagtttgacatccgaaacagcttcgggcaaatcgttgaatataggttctttcgtgcttgccagatggtctttggctttaaacagcccttcgcatttttggcagacgacgaagccttgggcgacgttgagctgggtttctttgacccagaggcgggttttgcagtgcggacagaaacaggcgggcatgatgttttctcggtgtgtgtcggtttgatgccgtctgaagcggcaggtggttcggacggcatatgctttatttttattctacgccgtactgccggcggtaggtgcggacgggttcgaggaactgtccgaattcggggttgttttgcaacaggataaacaaatcgttcaggctggcgatgggggcgacgggcaggccgtattgtttttccacttcctgaacggcggacaattcacccgtgcctttttccatgcggtcgagcgcgatggcgacaccggcgggggttgcaccctccgcttcaatcagtttgattgattcgcgtacggatgtgccggcggaaatcacgtcgtcgataatcagcacgcgccctttaagcggcgcgccgaccaacacgccgccttcgccgcggtctttggcttctttgcggttgtaggcaaacgggacgttcacgcctttttccgccagcatcatcgcggttgccgccgccaaaataatgcctttgtaggcggggccgaacagcatatcgaatcggatgccgctttcaatgatggattgtgcatagaattttgccagttgcagcgtggacgcgccgtcgttgaagaggccggcattgaagaaatagggcgaccgccgtccggctttggtggtaaattcgccgaatttcaaaacattttgggcgagggagaatttgaggaaatcttggcggaaatcagtcattttgtgctttctgtcagatattgggacgcagttgcgattctaccgccccgtgcggcgcgcttcaactgccgccgccttgccgcaaggcgcgtttcaactgtttcaacacctgccagtttcgggctttgagttcgggttggcgcaacagccgggcgggatggtcgatgatgaagaagggacggctgccgcacaaagtttcaatcatcgcctgccgttccaggttgacaaacgcctgtccgaggaataggacggcgggggcgcggcagccgtcgagttccccggcgatttgacccagcgcatccgcgacggcctgttcagacggcatcgggttaccgacggcggcggttttcacccaacaggttttgtggacataggcggcatccagtcctgcggctttgaggatgttgtcgagcaggatgcccgctttgccgtggaacagttgcccgtaaaccgcatcctcgatcggcggacacaggctgacgacggcaagcttggtaatgcccgaagcggcgggaacgggggcgatgccgtctgaaaggccgggcgggggcgtttcggtttcaggcgcgggtttgcgcgtatgtacggcggcggtttccaacgctttcatcgtttcgagccgcgcctgaacgttatggggttgggaagggcggatcgtggcggcgcggacggtttggggacgtgcctgtgccggggttgcgggtgtgtttttgggcggcaggacggcggcggcctgtttcagccacatcggacccaagcccaaagcctcgtgcaggtggaggtagcgcgcgcttaacatattttctccattaagacggcatcttcggtttgcccgtcggcggcgcagtaatagtttttccgcctgcccgcaatgctgaagccgtgtttggtatacagtgcctgtgcggcggcgttgcctgcgcggacttcgagcagcaggcgttgcgtgccttcgggcagatgtgcgtaccaatattcgagcagggcggacgcaacgccccgtcggcggcattcgggcgcggtggcaatcaggtgcagttcggattcgtcgggcaggttctgccaaacgataaaggcggcaatcctgccgtctttttccgcaaggaaaacctgttcggacggcgaaacaagcgcggactcaaattggcgttgcgtccacgcggacgggttgcagacggtatcgagcgcggccagtgcggcgcagtcggacggtaaggctgggcggatgttcatgttcgtgccttccgttccgcctgttctttggcagtcagggcgattttgttgcggacgtagagcagttcggcgtgtgccgcgccagttgcgggatagccgccgagggcgagcgcgagaaaatcggcggcggtcggcatatcgggtttgcctgagaagggcggacggttttccagtgcgaacgcactgccgatgccgtctgaaaagacgtaccNctcggggagggcaatgtctgccgccctaccgacttgataatcgctcaaacggcggcggttcagcgtgtcgaaccacgcataaaacacttcgcccatacgcgcgtccgcagcggcgagtatgcagctttgcggcggcggcagcgaggcggcggcatcgagcgtggggatgccgattaaaggcgtgtcgaacggcgttgccaaaccttgcgccacgccgatgccgatacgcagtccggtaaacgcgccggggcctttcgcataaacaatcgcccccaaatcggcggcggtaatgcccgcatttcggaatagggtgcggatttccggcaggatcagttcggactggcggatgccgacttcctgatggaacagacggatttcgccgtcggcgcgcagcgcgagcgacaaataggaagttccggtatcgacggcgaggacggggcggttgaaatcggcttgcatggtgtggttctcgttggttcagacggcattatatagtgaaatcggcttgcctgccgtgtcgtcgtgtcctagggcggtatggcgcaaaaatgccgtccgaacggtaaattatcgtgttcggacggcatttttcaaatactactgtttgtcggcgatgccgatttcgtgaaccttttcccctatcttcacggttgccgagccagcgatttcttgggcgcggccgccgaaaagggcgaggcggtaagtgcctttctcttcgccgccgtagcgcgtgtcgcccaaaatgacggcgtgtgatttttcatctgctttgagttcggcggaggcaagctcaacattctgctcgggtgttttcaggtgttcgattttgccgtgtccctgtttggcggcgaaatctatggtataggtcagttttccgccggcatcgtcggagctgaatgctttgccgtgatactcggctttgccgtcaggcagttggttgaaggcggtatgttctccgcccaaatcgctgacaaggaaggagcgttggtttatcaggctgtcgattttgtcggggttgttgattttttcaatccgtagggcaacgacggcggagtgatcctgtttgtatatttgaaattcgccgcttgccagtgtgatggtttgtccgtccacttcgattttttgcacgaagtcgaagcggctgattttgtcgttcttcagtttgcccgtgttgaggctgttgtctttgccgccggctttgaaagttttttccgcaccttgtgccgacagggtcagtgttccgttttggggaatggaggcttccaatgttagggatttcaaacctttgtctttatggtcgagcggcgcggttaatgcatcggcaagccccgtgccgatgtcggcggcgacaccaccgcctccgcccctccgctgctgcaggcggtcagaatcagggccggcggtcaaagaaaggcagcagaaggtagttcggttcacaggtttactcctagtcatacacagaatagataatatataaacgttttggttatggtatNtttttttgcatactgcatcaatgaggcaggtcagagaagcaaaaatcaaatgccgtccgaacggcgttcagacggcattttgtttacaggcaacctgttatttgacgatttggttcaattcgcccttggcataacggcttgccattttttccaacgaaacaggtttgattttgcctgcctgaccttcgcaaccgaacgcaagataacggtcgaggcagatttgcttcatcgcttcaatggttttgcccaagtatttgcgcggatcaaagtcggacgggttttcggcaaggtagcggcgtaccgcgccggtggaagcgaggcgcaggtcggtatcgatgttgactttgcgcacgccgtgtttgatgccttcgacgatttcttcaaccggcacgccgtaggtttcgccgatattgccgccgtattcgttgatgactttcagccattcttgcggaacggagctggagccgtgcatcacgatgtgtgtattgggcagggcttggtggatttccttgatgcggtcgatacgcaatacgtcgcctgtgggcggacgggtgaatttgtatgcgccgtggctggtgccgacggcaatcgccaatgcgtcaacgccggtatctttaacgaaacgcacggcatcttcaacgctggtgagcatttggtcgtgtgagagtttgcctgccgcgcccactccgtcttcttcgcctgcttcgccggtttcgaggttgcccaatacgccgatttcgccttcgacggacacgccgcaggcgtgggagaagttgacgacggtacgggtggcgttgacgttgtattcgtaagaagaaggggttttgccgtcttcgagcaaagagccgtccatcatcacggaggagaagcccagttggatggagcgttggcacacgtcgggcgatgcgccgtggtcttggtgcatcacgacggggatgtgcggaaattcttcgactgccgccagaatcaggtggcgcaaaaacggcgcgcccgcgtatttgcgcgcacctgcgctcgcctgtacgatgacgggcgcgttgacttggtcggcggcttccataatggcgcgcatttgttcgaggttgttgacgttgaacgcgggcaggccgtagctgttttcggcggcgtggtcaagcagttggcgcatggatacgagtgccatttgtgtctccttgggcaataggtaaataaggcggattataatgttttttacggcaaaaaaccataaacggctcattgattttatattaacgataacggcgggcagatggggcggattttgggcggttcgggattttggtgtgttgtttatgataatgttttcactggttttttgatatttgtgtgggacggttatggttttggacgggtttgcggcgtattttgacgcttatttggaaaacatcgtgcgcgagggcaagtcggagcacacggttgcggcataccggcgcgatttggaagaactgtttgcactgttggcacaaatgccgtctgaagatgcaggcggcgtgccgcaggacttgtcgcggcgcgattttacggcggcgttgcggcggctgtcgcagcgcggtttggacggtcggacgctggcgcgcaagctgtcggcgtggcggcagtattgcgcctggctggtcaaacgcgggctgatgcgcgccgacccgaccgccgacatcaaaccgccgaagcagcccgagcgcgtacccaaagccctgccgcaggaatggctgaaccggatgttggatttgcccgtggacggcggcgacccgctggcggtgcgcgaccacgcgctgttcgagctgatgtacggcagcggtttgcgcgtgagcgagatacacggcttgaatgcagatgatgtatatttggacgaagcgtgggtacacgttaccggcaaagggcgcaagcagcgtcaggttccgctgaccggcaaaagcgtggaagccttgaaaaactatctgccgctgcgtcagacggcatcggacggcaaagccctgtttaccggcaggaacggcacgcgcctgagccaacgccaaatccaaaaacgcctcgaatcgtgggcggcgcaatacggcgacggcaggcacgtttcgccgcatatgatgcgccacagctacgccggccacctgttgcaggcttcgcgcgacatcagggcggtgcaggagctgctcggacacagcagcctttcgaccacgcagatttataccaagctcgatttcgaccacatcgcccgcctctatgacgaagcccacccgcgcgccaagcggcaggacgaatgacgtacggcaaaatcagccgtcagccgcacgctcttgatatataattgaccgttgcacccggacgacacataaaaaagacacaccatgaacccaagccccctactcgacctgattgacagcccgcaagatttgcgccgcctggacaaaaaacagctgccgcgccttgccggcgagttgcgcgcctttctgctggaatctgtcgggcagaccggcgggcatttcgccagcaatctgggtgcggtcgaactgaccatcgccctgcactatgtgtacgacacgcccgaagacaagctggtgtgggatgtcggacaccaaagctacccgcacaaaatcctgacaggcaggaaaaaccagatgcacaccatgcgccaatacggcggtttggcgggttttccgaaacgttgcgagtccgagtacgacgcgttcggcgtggggcattcctccacctccatcggcgcggctttgggcatggcggcgacggacaaactcttgggcggcgaccgccgcagcgtcgccatcatcggagacggcgcgatgacggcggggcaggcgtttgaagccttgaattgcgcgggcgatatggatgtggatttgctggtcgtcctcaacgacaacgaaatgtcgatttcccccaacgtcggcgcgttgcccaaatatcttgccagcaacgtcgtgcgcgatatgcacggactgttgagtaccgtcaaagcgcaaacgggcaaggtattagacaaaatacccggcgcgatggagtttgcccaaaaagtcgaacacaaaatcaaaacccttgccgaagaagccgaacacgccaaacagtcgctgtcgctgtttgaaaatttcggcttccgctacaccggccccgtggacggacacaacgtcgagaatctggtggacgtattgaaagacttgcgcagccgcaaaggccctcagttgctgcacgtcatcaccaaaaagggcaacggctacaaactcgccgaaaacgaccccgtcaaataccacgccgtcgccaacctgcctaaagaaggcggggcgcaaatgccgtctgaaaaagaacccaagcccgccgccaaaccgacctatacccaagtattcggcaaatggctgtgcgaccgggcggcggcagattcccgactggttgcgattacccccgccatgcgcgagggcagcggactggtggagtttgaacaacgattccccgaccgctatttcgatgtcggcatcgccgagcagcacgccgttacctttgccggcggtttggcgtgcgaaggcatgaagcccgtcgtggcgatttattccacctttttacaacgcgcctacgaccaactggtgcacgacatcgccctgcaaaacctgcccgttttgtttgccgtcgaccgtgcgggcatcgtcggcgcggacggcccgacccatgccggcttgtacgatttgagcttcttgcgctgtgtgccgaacatgattgttgccgcgccgagcgatgaaaacgaatgccgcctgctgctttcgacctgctatcaggcggatgcgcccgccgccgtccgctatccgcgcggcacgggtacgggcgcgccggtttcagacggcatggaaaccgtggaaatcggcaagggcattatccgccgcgaaggtgagaaaaccgccttcattgccttcggcagtatggtcgccaccgcattggcggttgccgaaaaactgaacgccaccgtcgccgatatgcgcttcgtcaaaccgatagacgaagagttgattgtccgccttgcccgaagccacgaccgcatcgttacccttgaagaaaacgccgaacagggcggcgcaggcggcgcggtcttggaagtgttggcgaaacacggcatctgcaaacccgttttgcttttgggcgttgccgataccgtaaccgaacacggcgatccgaaaaaacttttggacgatttgggtttgagtgccgaagcggtggaacgccgggtgcgcgagtggctgccggaccgtgatgcggcaaattaaaccgcttgaccgcgccgtcgttatcgggcggcgtttttaaacggcgtttgtttctgcggtttttttattgaaaccccgcaggcggcaggaagggttcgggcggcggctttcgggcggtgcttggtgtgccgttgcgcgtttggaaatttattccgcttgtccgtataacggcggcggtgccgtctgccgatacaaggcaaaatgccgtctgaaacgcttcaggcggcatttttcggcgtgagggttttaggcttcgacaattttgccgcgcagggaaaaggtgtaggcttcggtgatttccaaatcgatcatttggttgatcatgtcgggcgtgccggtaaagttgacgacgcggttgttggcggtacgggcttggagctggtcggggtcttttttggagatgccttcgaccaggcagcgttgaaccgtgccgatcatggtttggttgatgcgggcggtttcggcttcgatgacttcgttcaaggcttcgaggcggcgcactttttcttcgtgcggcgtgtcgtccggcaggttggcggcaggcgtgccggggcgcgggctgtaaataaacacgaagctcaagtcgaaggcaatgtctttcaccagtttcaaggtttgctcgaactcgcgttcggtctcgccggggaaaccgacgatgaagtcgctgctcaggcacaaatcaggacggatggcgcgcagtttgcggatgatggatttgtattccaaagcggtgtagccgcgtttcatcgcgctcaatacgcggtcggaaccgctttgaatcggcaggtgcaggtgggaaaccagtttgggcaggtcgcggtagcactcgataatcgagtcggtaaactcgcgcgggtggctggtggtgaagcgcatacgttcgatgccggggatttcgtggacgatacgcagcagggtggcgaagtcgcagatttcgccgtcgtccatttcgccgcgataggcattgacgttttgtcccaagaggttgatttctttcacgccttgctgggcaaggttggcgatttcggtcaatacgtcgttgagcgggcgggagaattcttcgccgcgcgtgtaggggacgacgcagaaggagcagtatttggaacagccttccataatcgacacaaatgccgcgccgccttcgacgcgggcgggcggcaggtggtcgaatttttcgatttcggggaaggaaatatcgacttgcgacagcccgctggtttctttgtccacaatcattttgggcaggcggtgcagcgtttgcgggccgaaaaccacgtcaacataaggcgcgcgtttgatgatgttttcgccttcttgcgaggcgacgcagccggcaacgccgatgatgaggccggggtttttttctttgagcggacggacgcgccccaagtcggagaacactttttcctgtgctttttcgcgcacggaacaggtgttgaacaagatgatgtcggcttcgtcggcttgggtaacctgttcgatgccgccgtgttcttcggcaaggacggacagcattttttcgctgtcgtactcgttcatctggcagccgaaggtgcggataaatacttttttcatggtttgtgtctttctcgggcagccgtaatcgcggggctgatggttgttggaatgaaaaaatttcagacggcacgacgatgccgtctgaaaatcggtgcggattatagcacgatgtgggtttgggaggcaaaatattgttttaaaatatgaatttaatcggtcggaacggctgtataatgtttggctttaacgggaggtgtgtgtatgggcggcattgctgctgtgtgcgtgtaccagcaatttcggcgacagggaacatcagttcctgcgttatagtggattaaatttaaaccagtacagcgttgcctcgccttgccgtactatttgtactgtctgcggcttcgtcgccttgtcctgatttttgttaatccactatatcagacggaagagggaatcgcacaaacggttgttaaaggcaaaacgacccgggcggaggtagaggcacgtttcgggaagcgcaaccctttcggctgttatgcctatcacgaggtcagcctgccgatttataattttttgccgaccaatttcatctatatgaaatcggagcggcggcattgggaatggtgcgtggattacgacggggagggagtcgtccgggactaccgctttacacatataaagaggaaaaagacgagcgttccgtcatccgggatacggttggcgtaatccgcaaagaagcgggcaaatccttgtcgcaacctgaaaaatgataaaatggggctttctgcttccaagcccgaaacctgccgttcagacggcatttgaggataaatatgaaccgtaacgaaattttattcgaccgcgccaaagccatcaNccccggcggcgtgaattcgcccgtgcgcgcattcggcagcgtcggcggcgtgccacgcttcatcaaaaaagccgaaggcgcgtatgtttgggacgaaaacggcacgcgctacaccgattatgtcggctcttgggggcctgcgattgtcggacacgcgcatcccgaagtcgtcgaagccgtgcgcgaagctgcgttgggcggtttgtcgttcggcgcgcccaccgaaggcgaaatcgccattgccgaacaaattgccgaaattatgccgtctgtcgaacggctgcgcctcgtcagctccggcacggaagcgacgatgactgccatccgtctggcacgcggttttaccggccgcgacaaaatcatcaaatttgaaggctgctaccacggccattccgacagcctgttggtgaaagcaggcagcggtctgcttaccttcggcaatccttcttccgccggtgtgcctgccgactttaccaaacatactttggtactcgaatacaacaacatcgcccaactcgaagaagcctttgcccaaagcggcgacgaaatcgcctgcgtgattgtcgaacccttcgtcggcaatatgaacctcgtccgcccgaccgaagcctttgtcaaagccttgcgcggattgaccgaaaaacacggcgcggtgttgatttacgacgaagtgatgaccggtttccgcgtcgcgctcggcggcgcgcagtcgctgcacggcatcacgcccgacctgaccacgatgggcaaagtcatcggcggcggtatgccgcttgccgcgttcggcggacgcaaagacatcatggaatgtatttccccgttgggcggcgtgtatcaggcaggtacattatcaggcaacccgattgccgtcgccgccggcttgaaaacgctggaaatcatccagcgcgaaggcttctatgaaaacctgaccgccttgacacaacgccttgccaacggtattgccgccgccaaagcgcacggtatcgagtttgccgccgacagcgtgggcggtatgttcggtctgtatttcgccgcacacgtgccgcgaaactatgccgatatggcgcgctccaatatcgacgctttcaaacgcttcttccacggcatgctcgaccgcggcattgccttcggcccgtccgcttatgaagcaggtttcgtttccgccgcgcatacgcccgagctgattgacgaaacggttgcggttgcggttgaagtgttcaaggcgatggctgcatgatgttttgacggacagagtttctctgttcgatttgtttggcagattgaagtaagaatgcacaccgccgtcatttccgcgcaggcgggaatccggacctttcagtttctgtaatgattgaaaataacggcaagcccgaccttccggattcccgcctgcgcgggaatgacgggcgtgtacatttttgatttcaatctactgtaaaaatgccgtctgaaatatatagtcaattaaaatcaaaataggacagtagtgcNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNctttctcaatcgggttgggctcaggcgaacaaggtgcgggaggcaataccttatgtcccaatttttccgccgttccNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN------------------------------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN--------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNatagcggattaacaaaaaccggtacggcgttgccccgccccggcccaaagggaacggttccctaaggtgatggagcgccgggcggatcggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatccgctatggtttaaagctttgtttcttaagtccgcagagtatgccatggttaaaccttcaacgtcgagtgttgtactattttgtttttaattgaatataaatagcgtttcagacggcattgtttgtttcttattgcgcttcggctttcggggcggaaatcaggaagtgttcgcggtagtggcgcatttcttcgatgctctccaaaatgtcgtccaatgccttgtgcgaaccgcgtttgacgacgcttttggcaatgggcggattccagcgtttggcgagttctttcagcgtggaaacgtcgaggttgcggtagtggaagtagttttccagtttcggcatatatttgaccataaaacgccggtcttggtggatggagttgccgcacatcggtgtggcgcgtccgggtatccattccgacataaagtccagcagtttctgttcgacttcggcttcggtatgcgacgattcgcgcacgcgctgcgtcagccccgtcctgccgtgtgtggcggtgttccactcgtccatattgtcgagcagatcgtcgctttggtggatggcgtaaacttcggattgcgccaacacattcaaatccgagtcggtaataatcatcgcgacttcgataatgcggtcggtttcgggattcagccccgtcatttccatatcgagccagcagaggttgtttttgtcctgcacggtgtttcctttccgtttcagcgttttacgccgctcaagcgcgcccagccttcgtcagtttccgccgggtcgagatcgaaccattggctgtaaatgccgccgagttcttcggcctgttcatccaacaaaccggacaacacgatgcgtccgccctgtttggtgcgggctgcaagcatttcgccgagcatacgcaaagggttggcgaggatgttggcgacgacgacatcgaattgcccttgaggcagactgtcgggcaggaagaattgtgcatcgacgttgttctgttcggcgttgtccctgccggcgcggacggcctgttcgtcaatatccacgccgacggcggaacctgcaccgagtttgagggcggcgatggtcaggatgcccgaaccgcagccgtagtcgaggacgctttcgccgtttttgagttgcgtatccagccatttgaggcagaggcgcgtggtcgggtggctgccggtgccgaaggcgagtccgggatcgaggcggaggttgacggcgcagccttcgggggcttcgtgccaagagggggtaatccacaggcggtcggaaattcggatggggtcgaattgcgattgcgtgaggcgcacccagtcttggtcttcgatggtttcgccggtgtatgccaagtcttttaacccgcattcttgtgcggcggcatcgatgacggcggcggcttcgtcgtgttcgccgaacagggcgatgactttgctctgctgccagatttgttcggtgggcataccgggttcgccgaaaatcgcctgttcgttttgcgtgccggcgcaggcatcttcgatggcggcggagagtgcaccgtgttccatcagcacgtcggcgaggcgttcggcgacggcatcgttgacgttgacggtgatttgttggtagggcataacgggctttcttggaaatatcgaaatcggtttcagacggcggggcaagggaaatgccgtctgaacgcggaagggcggcttcagacggcatatcggcggcggcttatttgtcctgtttggttttgcgcgcttccagccagtgctccaggtaatggatgctcactccgccttcttggaaacccgcatcggcgaacaggtcgcggtgcaacggcgtattggttttgatgccggttaccgccagctcggcgagtgcgacgcgcattttcgccattgcctgttcacgcgttttgccgtgtacgcagattttgccgatcaggctgtcgtagtacggcgggatgcggtagccttggtagatgtggctgtccacgcggatgccgaagccgccgggcaggtggcagctttcaatcgggcccgggctggggatgaagttgtacgggtcttcggcattgatgcggcactcgaaggcgtggccttcgattttgatgtctttctgtttgtattgcagcggcaggccggatgcgatgcggagttgctcttggacgatgtccacgccggtaatgagttcggtaaccggatgctcgacctgaacgcgcgtgttcatctcgataaagaaaaattcgccgtcttcgtataaaaattcaaacgtgcccgcgccccggtagccgatgcgtttgcacgcgtcggtacaggctttgccgatttttttgcgtgcctcttcatcgataaacggggcgggtgcttcctcgatgactttctggtggcggcgttgcagcgaacagtcgcgctcggcaagatagacggcgttgccgtgttcgtcggcaagcacttggatttcgacgtggcgcgggcgttgcaggtagcgttccatataaaccatcgggttgccgaacgccgcgcccgcttcagccttggtcatttcgacagactggaggaggtcttcttttttctcgaccacgcgcataccgcgcccgccgccgccgcccgatgctttgataatcacgggataaccgactttgtcggcgattttgaggatttcggcatcatcgtcgggcaatgcgccgtcagagccggggacgcagggcacgcctgccgctatcatcgcgtgtttggcggagactttgtcgcccatcaggcggatggtgtcgggtttcgggccgatgaaggtaaagccggactgttcgacctgttcggcgaaatcggcgttttcggcaaggaagccgtagcccgggtggacagcgtccgcgaaggttacttcggcggcggcaatgatggcgggaatgttcagataactttgcgcagaagcggcaggaccgatgcacacggattcgtcggcgagtttgacgtgcaggctgcctttgtcggcttcggaatgcacggcaacggtggcaatgcccatttcgcggcaggcacggagtacgcgcaaggcgatttcgccccggttggcgattaaaacttttttcagcatgatgacctttcctgcggttccggcaacccgtccgtaaaaaagggtgcgggaacgctgaagggggggaaagcatttcagacggcatcggaagtttatgccgtctgaaaacaggattatccgatgatgaagagcggttcgccgaattcgacgggcgtaccgttttcgaccagaatttctttgaccgtgccggatttttcggcttcgatttcgttcatcagcttcatcgcttcgatgatgcacagcgtgtcgccggctttgacctgttgaccgacttcgacaaatgcggcggcattcgggccgggcgcgcggtagaacgtgccgaccataggcgatttttgagcgtcggacaaatcgcgggcggccggcgcggcggcgggcgcggatgccgcaacgggtgcggcggccggcgttacggccggcgcggcggcaggtacgggcgcggcgtaaacgggagctgccgcagctgcaatggtacgggtaatgcggactttttcctcgccttcggttacttcgatttcggcgatacccgattcttcaaccaaatcaatcagtttttttaatttgcgcaaatccatttctgttcctttaaaggctgccggtgttccggcgggttgttgcgttggtttttcagaaaacagccggcttgcggcaacggcgcaaaccgggcggaatggtgttcggatacggttttcctgtggtgggaaacgaccgtgaaattgtgttcattttcccgaagttgtcggtaaatgtccagtaaaatatcaaaaaacggcggtttttgggggaaatgtgcaggaagtttgattttgcgcacaagatgccccgagtcaagagtgtttattctaatctgttggtttttcgggcaaagatgccgtctgaaaaagggctaaagtgcgtataatggcggcttgcccgaacgagagtgtaaaaatggatatttcagattttgactttaccctgcccgaacacctgattgcccagcatccgcccgaggtgcgcggcagcagccggcttttggtcgcgctgcccgatatgccgctgcaagaccgggtgtttggcgatttgcccgattatgtcgaggcaggcgacgttttggtattcaacaacaccaaagtcatgaaggcgcggctgtttgggcagaaagacagcggcggcaggatcgaagccctgattgagcgtgtgttggacaaccataccgcattggcgcacatccgttcgtccaagtcccccaagcccggtatggggctggtgtttgaaggcggtatccgtgccgtgatggtcggacgtgagggcgaactgttctgcctgcgttttgaaggcggtcaaaccgtttacgaacttttggaacagaacggacacctgcccctgccgccttatatcgaacgtgccgccgatgcggacgacgacagccgttatcaaactgtttatgccaaatatcagggcgcggtcgccgcgccgacggcgggcctgcattttacggaagaacttttgcgccgtctgaaagacaaaggcgcggtaaccgcagaagtaaccctgcacgtcggtgcggggacattccaacccgtgcgcgtcgataaaatcgaagaacacaaaatgcacagcgaatggtttgaagtgccgtctgaaaccgtcgccgccgttgaggcggcaaaagcccgggggaacaaagcctgggcggtcggcacgacttccatgcgcgccctcgagtctgccgcgcgcgcaacgggatatttgaaagacggacagggcgacaccgatattttcatcacgccgggctaccgttttaatgttgtcgacaggctggttaccaattttcatctgccgaaatcgacgctgctgatgttggtcggcgcgttttcgggtatgggtcatatccgcgccgtgtaccgtcatgcgattgaacgtgaataccgtttcttcagctacggagatgcgatggttttggggcggaacgaagggggcgggctttaaactgctgctgtccgttgcaaggcagatgccgtctgaaccgtggttcgggcggtatttttatggatgtccggcagttggataatccaccgccccaaattagggtgcttaaaggtcaaaagaaagtgaaggctatgtgcaacaaaatgccgtctgaaaccgcaaaacggcttcagacggcattgttcaacctgattcaggcatcagttgcggtttttcaaacgaccgtgcagctcttgaacgctgtacacacccagataatcccggcttttcgcgccttcgctcatcgcttcgccgccggcggtggtggtgtattgcggcacgcgttgctgcaatgcgctttggcggatgatgtggctgtcggacacggattgcggatcgctggaaacggtatttacgaccagtgcgatttcgccgtttttcagcgcgtcgccgatgtgcgggcggccttcggggactttgttgatggcctgcacaatcagcccgtgttcggtcaggtattgcgccgtgccgcgcgtggcgcagatgccgtagcctaaggcttggaagtttttggcggttttaatgacgcgttctttgtcttcttcgcgcacggagaggaagattttgccggtcgggttgaggcgttcgcccgcgccgagttgggctttgtagtaggcttcgccgaaacttgcgcccacgcccatcacttcgccggtggagcgcatttccggactcaaaatcgtatccacgcccgggaatttgatgaatgggaacacggcttctttaacggcatagaaatcggggacgacttctttttccacgccttgttctttcagggaaatgcctgccatgcagcgcgcgccgactttggcgagcggcacgccggtggctttggagacaaaggggacggtacggctggcgcgcgggttcacttccaacacgaacaccacgccgtcctgcacggcaaactgcacgttcatcagtccgaccacgcccagcgcgtacgccatcgctttggtttggcggcggatttcgtcttggatttcttcgcttaaggagtatggcggcagcgagcagccggagtcgccggagtggatgcccgcctgttcgacgtgctgcatgatgccgccgataaccacatctttgccgtctgaaacgcagtccacatcgacttcaatcgcgttgttgaggaagaaatcgagcagcacggggctgtcttcggaaacctgcacggcttcgcgcatgtatttttgcaaggcttcggcggagtggacaatctgcatcgcgcgtccgcccaaaacataagacgggcgcacgaccagcggataaccgatttcttcggctttgacgagtgcttcttcttcgttgtgggcgatgcggttgggcggttggcgcaggcctaagtcgttcaacactttttggaagcgttcgcggtcttcggcggcatcgatgctgtcggcggatgtgccgatgatgttcacgccgttttcaaccaatgcgttggcgagtttcagcggggtttgaccgccgtaatgaacaatcacgccccacgggttttcggtgcggacgatttccaacacgtcttccaatgtcagcggctcgaaatagaggcggtcgctggtgtcgaagtcggtggacacggtttcggggttgcagttgaccataatcgtttcaaagcccgattcgcgcagggcgagtgcggcgtgaacgcagcagtagtcaaactcgatgccctgaccgatgcggttcgggccgccgccgagaatcatcacttttttacggtcggaaggacgggattcgcattcttcttcgtaagtggagtaaagataggcggtttcggtggcgaactcggcggcgcaggtatcgacgcgtttgtaaaccggatgcagcttcagcgcgtagcggtgttcgcgaacttctttttcgcttacgttcaacaattgtgccaaacgtttgtcggagaagcctttgcgtttcagacggcgtagggcggcgtaatccaaatcttgcaactggccgtctgaaaccgatttttcttccttcatcaagtcttcgatttgcgccaagaaccaagggtcgatggcgcagatctcgtggatttcttccggcgtgaagcccgcgcggaacgcgtctgccacaaacagcatacgttcggggccggggttggccagttcgcggcggatttccgctttgtcttcgctgcgcggattgaaaccgcacaagccggtttccaaaccgcgcaaggctttttggaagctttcctgaatggtacggcccatcgccattacttcgcccacagatttcatctgcgtggtcaggcggtcgtctgcggcggggaatttttcaaacgcgaaacgcgggattttggttaccacatagtcgatggaaggctcgaacgacgcgggcgtgcggccgccggtgatgtcgttgcgcaactcgtccagcgtaaagccgaccgccagcttcgccgccaccttcgcaatcgggaagcccgttgctttggaagccagcgcggacgaacggctcacgcgcgggttcatctcgatcacaatcatctcgccgttttcagggttcaccgcaaactgcacgttcgagccgcccgtgtccacgccgatttcgcgcaataccgccaacgaagcgttgcgcatgatttggtattccttgtccgtcagcgtttgcgccggcgcaaccgtaatcgagtcgcccgtatgaacgcccatcgggtcgaagttttcaatcgaacagatgatgatgcagttgtccgccttatcgcgcaccacttccatctcgtactctttccagccgagcacagactgctcaatcagcagctcatgcgtaggcgacgcatcgaaaccgcgttcgcaaatcgccaaaaactcatccttattgtaggcaatgccgccgcccgaaccgcccatcgtgaaagacggacgaatcagcgtcggaaagccgacctgttcttgcgccgccaaggcttcgttcatggtgtggcagacaaaagatttcgggcaagagaggccgattttttccatcgcttctttaaagcggccgcggtcttccgccttgtcgatcgcgtcttccgttgcgccgattaactcgacattgtatttcgccagcacgccgttacgcgccaaatccagcgcacagttcagcgcggtctgaccgcccatcgtgggcagaatcgcatcgggccgctccttggcgataatcttctccaccgtctgccacataatcggctcgatgtaggtaacatccgccatttcggggtcggtcataatcgtggcggggttggaattcaccaaaatgactttatagccttcttcacgcaaggctttgcaggcctgtgcgcccgaatagtcaaattcgcaggcctgaccgataacgatagggccggcgccgatgataaggatggattttaggtcggtacgtttgggcatgggtggttactcttgaattaaagaaggttgttttgttacatagcttttaagaaaagtatttcccttttctaaaattgaagctaaaacatcatcttctatgttagataaaatattctctaaatctgcgcttgatttaattttaaagaattcttttgtttgagaatggtatacaagagaaggtttatttagctgtaaaagttctgctatattatttaatgaaccaatactcttaccatcccataaaataaagccataatcagcaatttctgccattttcttatcttttgctgtataaaatacccttccagttcctttgctgtctacttggacaaactgccaatttcccacattatttcggtaaattttgccagaaaagtaaatatgcacattagcataatcttgttcttgtagaaattcttggatagctttatcagccccattagcatctccaataacaatatcaaaattattgctaagaatattgttaattctttctcgtatttgtggatttagtcgtgaaatgctgcgtgaaccagaaaagaaaatagtgcgcatttttatcctctagtctttgtcattgctaaaacaattacagatctagcattttttgaaaacaatttttcagttgatatttccaatgttgctccgctatcaaataaatcatcgattactaaaatattcttattggatagatctatattgtcaattgtgatggaattattcagtatttctagtttttctgatttttcttcaatatttttgagtggtgtgtgtgagctagattttcttaaaataggagaatatggaatattcaagcgatcacttagttctttggcaattaattgaactggttgattaatacgctctgttgtaaaaggggcgggaacaattaaatttatagattctaaaccactaaatttttgtaaaatatagtctaccagcaaagaaacattttgggtttgattacgatattttaattgataaacccattctccaatcacacttctcttgctatcaaagtgaggatgccctaattcatcataacctaacaaaatacttttttgcatatgatggtctaaagcaaatccttttgtccagttaccatttagttctatcgccatttcattgactccttgtcaaaattaagtataacgagcaatcctagcaagccgtagcccgcatgtagggtgtgcggtacgcacgcacgcgttcttcattttccctgtaaccccgacccaccgcatgcgcgccttgcggcacacactctaccgatgagttcaaagattgtctgaaaaaacgctcgcggcgtttgttccatctgcttgacaataaaggctacctgaaaaattcccgctgttgatatttcgtgcatcctttttcagacgacctgaaatcaacggttgcaaatttaagttatttttcaaaccaccggcaaccgaaaaatctgccgaaacccactccctcccccgtgggggagggctggggggagggcattctccgaatggtggcaatctttcctaatacNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN-------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN---------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN---NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNggcttgttgccctctctccagctctctcccacagggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgcttttttgcttttcagacgacctttttaaacgctcaattcagttaattttaccttattattttcaaaatctaatcaaaatcaaccgtttgctaccgtgctggctgcttttccaattcctgcaatacgcgcaggatttccgccagtacatcgtttgtctgctgcaaaatttcgtgattccaaaaacgcagcacggtaaagcccaagctgttgagatataccgtccgcgcgtggtcgtatacggcttgttccgcgtgctgcccgccgtctgcttcgacaatcagcttgggcgttacgcacataaaatcaacaatataattccccatcggctgctgtcggcggaatttatagccgttcagacggcctgcccgcaggtgttgccacaattttgcttccgcctcgctcatttcttgacgcatggctttggcgcgttggcgtagggcggggttttcggcggtcaatagtttctcgggcgggttcatttttgttatcgggttgctgtttgtgtaagccttacagcttgttgccctctctctaactctttcccacagggagagaggacgggtcggctgttggggttaaaggggctgcaaggaaaacagcttgtgcaggctgttttttattttgcataatccgtctgaaaattaataactgctgatttccagcaggttgccatcgggatcgcgcaggtaaaccgattggattttgcccattgcgcctgtgcgcgctacgatgccgcttaaaggtttgatgccgtgtgcggataattcctgtaaaaccgtttccagtggggcgtatcggtcagcaggcataaatccgctgtgccgcaggcggcgtgttgcgcgttaggctgaatttccgcaccgcgcccgtgtaggttgattttctgactgccaaacaacaaagctttacggttgttgccaaatgaaacttcttccatgcccaaaacttgtgtgtaaaacgcgatggttcggtcaatgtcggcaacagtcagtactagatggtcgagtgcgctaattttcatttccagctttctttttcagacggcagcagcatactgttgccgtctgaaaatcattatgcttgttttgcagccttcatattgccaatgaatttgtcgaacaaatagccgacatcttgcggacccgggctggcttcggggtgtccttggaaacagaacacgggtttgtcggtcagctcgatgccttgcaaggtattgtcgaacaaggatttgtgggtaatgcgtgcgttggcgggcagggtgtcggcatcgacggcgaaaccgtggttttggctggtaatgacgactttgccgctgtccaaatcttgcacaggatggttcgcaccgtggtggctgaagcgcattttcagggttttcgcgccgatggcgaggctgatgagctggtgtcccaagcagatgccgaaaatcggtttgccgctttccatcagtttttgcacggcttcgatggcgtaggtgcaaggctcggggtcgccggggccgttggacaggaacacgccgtcgggattgagtgccaacacgtcttccgcgctcgtttgtgcggggacgacggtcaggcggcagccgcgcgaggcgagcatacgcaggatgttggttttcacgccgaaatcgtaggcgacgacgtggtaaggctgtttgtcaggggtaacgaaacctttgcccaattcccattcgccttccgtccattcgtaagtttccgtgcaggaaacttcttttgccaaatctttgccgaccatgctgccgaacgcggcgatgagttcttgcgctttttcaacggtggcatccgcacctgtcagaatcgcgccgccttgcgcgcctttttcgcgcaacagcatggtcaggcggcgggtgtcgatgtcggcgatggcgacggtttcgttgcgtaccaaatagtcgtgcaggctttcggaggcgcggaagctgctgtgcaagagcggcaggtcgcggataatcaggccggcggcataaacgctgcggctttcttcatcttcggcgttggtgccggtgttgccgatgtgggggtaggtgagggtaacgatttgtttgcagtaggacgggtcggtcagaatttcctgatagccggtcatcgaagtattgaacacgacttcgccggaagccgaaccttcgtaaccgattgatgtgccgtggaatacgctgccgtcagcgaggacgaggagggcgggggtgctcatgatgggaatcctgtttttaataaaattcttgacaatgccgtctgaagggacttcggcagggggcatccggtcggaaaaatccggtcaaaaaaaaacacgccgcgcaagatagacgcgtaacgtgcttttcgggcaagtgcctataccctgaaagcagcatattttaagacgaaacatacccgatttcaagcgcaaacgcggcaggcgggctgatatgttcgcgcgaaaacggaaatccggggcataaaaccgcccgctccgcgccccctatgcccgttacgcatttccccacgtccgcccggcgaaactatgggaatacccgaaccgtcattcccgcgcaggcgggaatccggacctgtcggcacggaaacttatcgggtacaacggtttcttgagattttacgtcctagattcccgcctgcgcgggaatgacggcatcggtttgacggtatttaattgaattgcggaaattgacggattcagtgagattggcgggatgaagcctaccctgtagcccgccttttatagcggattaacaaaaaccggtacgggttgccccgccccggctcaaagggaacggttccctaaggcgcccaagcaccgggcgaaccggttccgtaccattcgtactgcctgcggcccgccgccttgccccgatttttgttaatccgctatacgaacccgccccctcccgaaaaacgcaaaaaatgccgtccgaaaacctttcggacggcattttcgcgtgaaccgtcattcccacgaaaacagaaaaccaaaatcagaaacctaaaattcgtcattcccacgaaagtgggaatccaggactcaggacctgagaaacctttttacccgataagttcccgtaccgaccggtccggattcccgcctgcgcgggaatgacgcgtttcatttgccgccccctcccgaaaaacgcaaaaaatgccgtccgaagacctttcagacggcatttgcggaaaaaccggccgcgcgggcgggtcagaagaagacttcgcgccagcttaagcgtttgataccgcacatcgggccggtaatatccaagctgtccaaatcgttcatcagcagggtgcgcacaccttttccggagaagcaccggttattgcgggcgggttttttaccctctttgaatgttccgctgccgcctgcatcaccgtctgccgtgacggggaaatcgtctgttttcttttcgtccaggtagcgcacattaaccggtttgtcgtaaacatatccgttcgggcagacggttttgctgtttttccacatacagcctatggggacggacttgccgtcggtggttttcttatggccggaatattgcgcaaccgaattgtgatccggcacaatcgggcgcgcgcttctcggagtcaatgcgccgccgtcggcggtattgatgcccaaaatggcggtatccgcgccgcagccgtcgtctttatacttgcggatggttacgaaggcggtacgcaataccacggtcggtttgacggtaacgcgttctccttccctcaatttcactacccagcctttatcggccgatccgccggatgccttattattgctcaggaacaaggtgttattttccttcgtaagcgtttgctcgagcagcccgcctcccgtgccgttttgtaccgttaccttaaccgtccccgtccccttatcgtcgtcaaagataccgtaaatatattgttgatccttaccgactacatcctcttcactcaaatcgctgcccgtaccgaagatgaccacgcgtttgtctgccagtcgggaaacggcgggcgcggaagtaatcggttttgtgccttcgaaaatagtgcgtacagcccactcggacggcttgtcgctgctcaaatcaaagcggtacatattcccgccccgatcgccggcataggcgatatcgaccgtgccgtccaaatctttatccaccagcgtgggggacgaaagcccgcctttgccgccgggtgcttcgatttttgcaatcggcgtacctaaggtgtctttcaaatcatacacatacagcgcggttgtattatcgctgctgacaatatctttagccgcataaccggaggcgaggaaggcggcgtatttgccgttttgggttttgccgatttgcggcgtaccgacggtgtagcctaatttcacgcgattactgtcattcttattgttatttttgtcgttttggacatcaaacatggaaacgccgaccgggttgctgtcgattttggtcaaatccaaggcgtatgcgcctctgccgcccaggcccatcgcaccaaacataaagaaatgtttttgcttgtcttggtcatctgtaatgcggcgcaagacaaagccgccgtccacgccgtagcggtcgcccacatagccttgttcggcaaaggcgcgcagctctttggcgaggtcggagtcattgccttcaatatccttacgctccatcgtaccggggatgtagctgagcttcagttcgtagcctcgttggtctgtgccggtttttttgaagatatgcaccatcccgtcgttggcagaagttgccagatacccgccgaccgccgttatcgggctgttgacgatgtcgcccaaatcgcggggtttgtcattgtcatcttcttttgtgcggatgcggtatttttggctgtattgttttttgtcgctttgttttttgttgtttggttggttgaatgttttaaatatatcgtcattaccgtaataccggaccgtccaaggcagcagcacttttgcccactcgtcgacctcaggtgtgacgagcctgtccttgtagatgccgaaagtgtcgtttttgccgtcattgccattcaaacccacgatcctgtcgcgagtcggggcgatccggtacacgccgcccggcaatcggatcacggtctgccttgagttgaaattcggctcgcggcttttgatgttctgcgtatccaaagcggcgagggaatgccggccgggccgggcggggtcggttcgagttttcagctcttggaggaagatgcggctgctcgaactgccggggtaggtggaaaccgaagcggaatacatctgcaccttaccattttgcacagagccgaaccacagcgcgggggcggtcagtgccggcgaaggggcttgggtattcttattggggttcggttcgttgatgcagcggcctgctttgacttccggcaggccgagcttgaccggaatctgcccgttatctttaatgtcccacttagaccaaaaatttagaatgccgctaagccccgtattttgtgtcttcacatcgatgctcggcttcaagacacccaaccgcactgttttgccggtgatatctttaatcccttttttgtccagcaggtgcagcttggcgttcagataataggccatggcggtcgtttcttgctgccagttgctaagggaaatacggtggtcttctgtcgtatagacgaggttttgattactattactattgttttcatcaaaagaagataccaatttgctggatgatctgccatctttggcggtaccctcgccgcccaaattgaaagacacacccaaccatggataatccttcaatttgtaaatgggcgaattttcgcggcttggctctgtgtgcctatccagcccgcctcttgtttttagcaagtcgggattatcgaaggaaaatcgggttttataggtaagtttgggacagtctttggtacttccgcaacggataccggtgtagccgtagcctgccagcccgggccgggtggtatgaatccaattgacggcattgccgcgcttgttcagctcggcggtatcaaagccggaaaccttgccgtagggcggcaggtaggtggctgtgccaaaaacggcagtaccgctttgttgagaaacaagctcatcgttattgttgaatgagataaaattgcttgtgatgccgaggctgtttttctggctcgtatggctaaatgtccgctccctgcttttgtcctttaatgctgattgattatattgatccttccactttacctcgggctgctttcgctcgttcatgataatagcgtattgatgggtttgcgccatcNccccccccccgccggtatgggaaaacatcaagatggcggtataaagcgcggtatggcggaaaacccgcctttttaaagttttattcatcgtatttccttttcggtcaaaccccccgcccttcggggcggcaggatcaggctttgtccgggaggggtgcaagcccttccgaatcagggcggcgccttatgtgccgccctgcgtgttggaacatattttatcccttaaatcttgcttcgcgggataccgtcggcggcaggcgcgccgcaaacggcgggattgggcaaaccgcccgatcccgcgcccgccggattgccggttgcaaagcccccttcgcccggctgccaaagggggatgttcgcaaaggtaacacgcccctttggccggatgcaatgtatagggttaccgcattattctacccttgcgcgctgatcatggtaaagcggttttcggcaatccgcaaccgtttgcccggcccgccattgccgcctgcgcggcaatggcgggccggggaggcggcattttccaagttgcggcaacctttcccaacaactcaaccgcctaaatacaagccttgcggcttgttgccctctctccagccctctcccacagggagagaggacggggaggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaacaacagctgcaaatctaagttgcctttcaaatcgcctgcaaccgaaaaaTctgccgaaacccactccctcccccgtgggggagggcTggggagagggcattctccgaatggtggcaatctttcctaataccttcgccgcccaaatacaagccttgcgg-------------ctctagccctctcccacggggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcaga---------------------------------------------------------aaatctgccgNaaNccNctccctcccccgtgggggagggcTggggagagggcattctccaagttgcggcaacctttcccaacaactcaaccgcctaaatacaagccttgcggcttgttgccctctctccagccctctcccacagggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggctgctttttgcttttcagacgacctgcatcaacggttgtaaatccaatctgtttttcaaaccgcctgcaaccgcaaaacctgccgaaacccactccctcccctgtgggggagggccggggagagggcattctccgaatggtggcaatctttcctaataccttcgccgcccaaatacaagcc-----------------------------ctcccacggggagagaggacgggtcggctgttggggttgaggtttgctgcaaggaaaacaggttgtgcaggttgctttttatttttcagacgacctgaaatcaacggttgtaaatccaatctgtttttcaaaccgcctgcaaccgaaaaatctgccgcaatccgctNNNNNNNNNgNNNNNNNNNNNNNNNNNNNNNNNNNtctccaagttgcggcaacctttcccaacaacttaaccgcccaaatacaagccttgcggcttgctgccctctctccagccctctcccacgggagagaggactatgaagcccgtcggcaggcgcggggcttgggacggcattgctgttgcggtttcgggcgcggctttattcgacgacaattttagggaaccggctgctgaagtctttgcctttgtcggcaatgcccagggcgatttggaatgcggcatcggtgtagattcgggcgatggcggggtgttcgtcgaacagtcgcgccggtgtgccgccgtccatggcttcgcgcacgggcaggcttaggggaagctgtccgagcagggggacgttgaggcgggccgccaaatctttgccgccgtccgtgccgaacagtgcttcgctatgcccgcagttggagcagatgtggacggacatgttttccaatacgcctaaaatgggaatgttgaccttgcggaacatatccacagccttgcgcgcgtctatcagcgcgatgtcctgcggcgtggttacgatgacggacccggttacggggatgcgttgggacagcgtgagttggatgtcgcccgtgccggggggcaggtcgatgaaaagatagtccacttcgtcccactcgctttggaacatcagctgctgcaaggcttggctgaccatcggcccgcgccagacgacggcttggccggtatcgactagaaagccgatggacataacctgtatgccgtctgaagattcgacgggaatcagtttttggtttttctgatcgggtttgcggtcgtgtacgcccagcatcgtgggctggctcggaccgtaaaggtcggcatcgagcacgccgacgcgtgcgcccatgcgcgccattgcggcggcaaggttggcagtggtggttgatttgcccacgccgccttttcccgatgcgacggcaatgatgtttttcacgcctttgatggtggcgacgccgggccggactttgtgtgtgccgatttcggtgtctatggacagatggatgtgcgcgccgcctgtttcgggcatcagggtttcttgtacggcatcggcgagggcggcggcgatgtgcgcgacagggaagccgaaatgcagggcgatgtggatgccgtctgaacgctgtccgaccgaacggacggccttttcgccgccgagcgtgcgtgccgtattcggaacggcgacggtgtcgaggagggtgcggatgttttgtatattcatgatgtgtgcctctgttcgcaagtcgtgtgaggggaagatagacggaaagtgtacatgattttgggcagtttgcttttttcttgtgcgaacttttacacggtatgcggcggattgtgaaaatccgttgccaaaatatcccgtgcaaacagcagtctgcaattaagcctgtaaaatttgcttgacggcggggaacggggctgtataatgcacggcttatcgggtcgttagctcagccggtagagcagcggacttttaatccgttggtcgagcgttcgaatcgctcacgacccaccagataaccggaagccaagtttcgagacttggcttttttgtttgcctgccggggcgtaccgtttgcgggggtgtatgaaaaagaaactgctttcgggcatcaaatttgccgttcggacggcattggtgtttttgctggtgtcgctgtttttggattgggtacgcaagcccgacgaacctgccggggcggcNgggcggcctttgaccctgctgtcggggcagcggctgactttgggacagtttagccgggataggacggtgctggtgtatttttggggaagctggtgcggcgtgtgccgttatcagtcgccgataatcgatgatttggcggcggacggcgtgccggtcgtcggcgtggcggtacgttccggcagcgcgtccgaagtggcggcatatatggcaaaacggggcttgggctttccgactgtcagcgatgaggacgggggtttggcaaggtcttggcggattgccgcaacgcctgccgtcgttttggtcaaaaatgggaaaatggtccgctatacgacgggaatcagcagttattggggcttgcgcgcacgaatttttcaggcggattttttcggttaacttttgtttttgtcaaactttccgctatgtagagaatcaaacggcatatgccttgcgcggcggatgcggcggcttttgttttttgggaaagagccggcgcgcctgccgatgtaatcccttgttgtgattgtgggaaaaatagattaaaatataactattaaaatattttcagataggattatcggaattaaagtcttttatacccggtcgtccgatgaggtttatagcgtattgttgctatatgttcgttttgttatataacggttgcatcaaaaattacgcccacaggctttcccgacggtttgaaagtttgattttcgataacttggagacttaaacaatgcctacccaatcaaaacatgcgtctatcaatatcggtctgatacaggcaagggaagccctgatgacccaattcaggcctattctgaatcaggcgaatattaccgatcagcaatggcggattatccgtcttttggcggaaaacggcacattggattttcaggatttggcgaatcaggcgtgcattttgcgccccagcctgaccggtatcctgacccgccttgaaaaagcggggttggtcgtccgcctgaaaccttccaacgaccaacggcgcgtttatctgaagctgacttccgagggcgagaagctgtatgaggaaatcggcgaagaagtggacgagcgttacgacgctatcgaggaagtgctgggccgcgagaaaatgctgctgcttaaagacctgttggcagaacttgccaaaatcgaggatgcgttgaactcgtaatacgccgtaatgcgcggaaacgtccgaccgacggctttttgaatcagaactgctgcacatgggggatgccttgtgtgcagcattcttatataggggacggtttaaaggggaaaaatggcggatttgcagaaaacttttcaaacttcgttccgtgatgcgatggcatcctgtgcggcaggcgttcatgtcatcacgacagacggtgcggcagggcgttacggcattacaatgacggcggttgcgccggttaccgacgagccgccgaccgtgatgctgtgcataaaccggagtgcgcgaatcattccgatcctgtcggaaaacggcagcctctgcatcaatatgctggcggacgaacatcaggatgttgccgaacattttgccgggctgaccggcctgtcgcccgaagagcggtttgcctaccatatttggcatcgcggcaaaacgggacaacttgaaatagaaggcgcgttggcgcacctgcacgggcatattgtcggcaaacatgaaatcggcacgcattttgtgttttacgtcaggctcgacgaaatcaaaaactgcgggtgcaaacgccccgcgctgctgtatttcagacggcagtttaggcctttagactgatattcggacagatatatgaaagcgatgatactggcggcaggacgcggcgagcgtatgcgccctttgaccgacaccactccgaagccgctgctcgatgtggcgggtaagcctctaatcggttggcacttgtgccgtctgaagcaggcggggtttaccgaaatcgtcatcaaccacgcttggctgggtcggcagatagaaaatgctttgggcgacggctcggcttatggcgtgaacatcgcctattcgcccgaacccgcaggcggtttggaaacggcaggcggcatcgcgcaggcattgccgctgttgggtgggcagccgtttttggtggccaacggcgacgtgctgaccgacatcgattttaccgccgcgtttcagacggcatcgtccctgcccgggcacatttccgcacatttgtggctggtgggaaatcccccgcacaaccccgacggcgatttttccctgctgcccgacggcagcgtgcggccggaagtatccggcggcaacggactgacattcagcggcgtgggtatttaccgtcctgaaatgtttgacggaatcgaagcgggcagtgtggcaaaactcgcgcccgtattgctgaacgaaatgcggcaaaaccgcgtgagcggtcagaagcatacgggcctgtggctggatgtcggcacggtatgccgtctgaaggaagcgcaagcccttgcagcggcttggaagtgaaaactcggtttcaggcggtatggcggattcggtttaacgtttcagtgccaacgtcaacacgccgccgtaaccagccccaagtctatccattcctgcgtgttcgggcgttcgtctaagaaaatcaccgccatcagcgcgaccaagaccaggctgaatttgtcgacgggcgcgacttgcggggcgttgcccagttgcagggctttgaagtaggcgagccaagatgcgccggtggcgagtccggacaaaaccagaaacgtccggttgcgccccgtgaagccgtttacgccctgccatttgccggtgtaggtcaaaaacaataccaaggcggcgaggatgaccaaggtgcggataaaggcggcgaaatccgaatctatgccctgcaagcccattttggcgaaaacggcggtcaatgaggcgaagcctgccgatgccaatgcccaaaacagccatgcgttgctgcccatgttttctcctttgattgtgaacaatatgaacggtatttttgttgctgcgtcaaaaatttcactgcgggtttggtgcggataacgttataatatgcctgatattattttcaatccacctgtttgtcgcctgatgctttcagacggcatgtccctcctcatttctaaaggaaaatcatgagcttcaaaaccgatgccgaaaccgcccaatcctccaccatgcgcccgattggcgaaattgccgccaagctgggtttgaacgttgacaacattgagccttacggtcattacaaagccaaaatcaatcctgccgaagcgttcaagctgccgcaaaaacaaggcaggctgattttggttaccgccatcaacccgactccggcgggcgaaggcaaaaccaccgtaaccatcggtttggcggacgcattgcgccatatcggcaaagactctgtgattgctttgcgcgagccttctttgggtccggtgttcggcgtgaaaggcggcgcggcaggcggcggctacgcgcaagttttgccgatggaagacatcaacctgcacttcaccggcgacttccacgccatcggtgcggcgaataacctcctcgccgccatgctcgacaaccatatctaccaaggtaacgagttgaacatcgaccccaaacgcgtgctgtggcggcgcgtggtcgatatgaacgaccgccagttgcgcaacatcatcgacggtatgggcaagcctgttgacggcgtgatgcgtcccgacggcttcgacatcaccgtcgcctccgaagtgatggcggtattctgccttgccaaagacatcagcgatttgaaagagcgttttggcaatattctcgtcgcctacgccaaagacggcagccccgtttacgccaaagatttgaaggcacacggcgcgatggcggcattgctaaaagatgcgattaagcccaatttggtgcaaaccatcgaaggcactccggtctttgtacacggcggcccgttcgccaacatcgcccacggctgcaactccgttaccgcaacccgtctggcgaaacaccttgccgattacgccgtaaccgaagcaggcttcggcgcggacttgggtgcggaaaaattctgcgacatcaaatgccgccttgccggtttgaaacctgatgcggcagtcgtcgtggcgactgtccgcgccctgaaatacaacggcggcgtggaacgcgccaaccttggtgaagaaaacctcgaagccttggcaaaaggtttgcccaacctgttgaaacacatttccaacctgaaaaacgtattcggactgcccgtcgtcgttgcgctcaaccgcttcgtgtccgactccgatgccgagttggcgatgattgaaaaagcctgtgccgaacacggcgttgaagtttccctgaccgaagtgtggggcaaaggcggcgcgggcggcgcggatttggcgcgcaaagtcgtcaatgccatcgacaaccaacctaataacttcggtttcgcctacgatgtcgagttgggcatcaaagacaaaatccgtgcgattgcccaaaaagtgtacggcgcggaagatgtcgatttcagcgcggaagcgtctgccgaaatcgcctcgctggaaaaactgggcttggacaaaatgccgatctgcatggcgaaaacccaatattcattgagcgacaacgccaaactcttgggctgccccgaaggcttccgcatcaccgtacgcggtatcactgtttccgccggcgcgggcttcatcgttgcgttgtgcggcaatatgatgaaaatgccgggcctgccgaaagttccggctgccgagaaaatcgatgtggacgaacacggcgtgattcacggcttgttctgaacggtttttgaaaccggatgccgtctgaagccgtttcagacggcattttttcggaacgcgggcggcggtatgctataatccgccgttaaatttctctattttcaggaaaaaccatgagtttgaaatgcggcatcgtcggtttgcccaacgtcggcaaatccaccctttttaacgcgctgacccaatcgggcatcgaagcggcaaactatcccttctgcaccatcgaacccaacgtcggcatcgtcgaagtgcccgacccgcgtatggcggagctggcgaaaatcgtcaatccgcaaaaaatgcagcccgccatcgtcgagtttgtcgatattgccggcttggttgcgggcgcgagcaaaggcgaaggcttgggcaaccggttccttgccaacatccgtgaaaccgatgccatcgtcaacgtcgtgcgctgctttgacgacgacaacatcgtccacgtttccggcaaagtcgatccgattgccgacatcgaaaccatcggcaccgaattggcgcttgccgacttggcaagtgtggaaaaagccatcgtccgcgaagaaaaacgcgcccgatcaggcgacaaagacgcgcaaaaactagtcgatttgtgcaaaaaactgctgccgcatctggacgaaggcaaacccgtgcgttccttcggtttggacgcggaagaacgcgcgctgctgaagccgctgttcctgctgaccgccaaacctgcgatgtatgtgggaaacgttgccgaagacggttttgaaaacaacccgcacctcgaccgcctgaaagaattggcggcaaaagaaaacgcccccgtcgttgccgtctgcgccgcgatggagagcgaaatcgccgaattggaagacggtgaaaaagccgaatttctcgccgaaatgggcttggaagaaccgggcttgaaccgcctcatccgcgcgggttacgaccttttgggactgcaaacctacttcaccgccggcgtgaaagaagtccgcgcgtggacgatacacaaaggcgacaccgcgccgcaagccgccggcgtgatccatacggattttgaacgcggcttcatccgcgcccaagtgattgcctacgatgattttgtctcgctcggcggcgaagccaaagccaaagaagccggcaaaatgcgcgtggaaggcaaggaatacgtcgtgcaggacggcgacgtgatgcactttttgtttaacgtgtaacccaaatgcggcaggttttcagacggctttgccggaaatgccgtctgaagccggttttggtggttttcgacgttcccataccgccggaatgcagccgcatcaaaataaaatcccgcccgcatttccgatttgccctccccgattcctgcaaaacaaaccgcctgccctgccgttacgggaagccgtccggtattccgaatatcccgaaccccgatacaaaatgacctttcagacggcatttgcacagcccgccgcgtttcaagtaaaaacattatgagccaagccttaccctaccgcccggacatcgacacattgcgcgccgccgccgtcttgtccgtcatcgtgttccatatcgaaaaggattggctgccgggcgggtttctcggtgtcgatatattctttgtgatttcaggctttttgatgacggcgatcctccttcgcgaaatgtccggggggcgtttcttcctcaagacattttatatccgccgcatcaaacggattttgcccgcatttttcgccgtattggcggcaacgctggcaggcggcttctttttattcaccaaagatgatttctttcttttgtggaaatccgcgctgaccgccttgggtttcgcctccaacctgtattttgcaagggggaaggattatttcgatcccgcgcaggaagaaaagcccctgctgcacatctggtctttgtcggtcgaagaacaattttactttgtctttccgatattgctgttgcttgtcgcccgcaaaagcctgcgcgtacagttcggcttcctcgccgcattgtgcgccttaagccttgccgcttcctttatgccttccgcgctcgataaatattacctgccccacctgcgcgcctgcgaaatgctggtcggatcgctgaccgccgtgcggatgcggtaccggcaacagcggaatcccgccgtcgggaaacggtatgccgccgtcggcgcattgttttccgcgtgcatactgtccgcctgcctgtttgcctattcggaacaaaccgcctatttcccgggctccgccgccctgattccctgtctggctgttgccgcgctgatttatttcaaccattacgaacacccgcttaaaaaatttttccaatggaaaatcaccgttgccgccggtttgatttcctattcgctttatctgtggcattggccgatattggcctttatgcgctatatcggcccggacaacctgccgccttattcgccggcggcagcgatcgtcctgaccctggcgttttccctgatttcttatcactgcatcgaaaagccgtttaaaaaatggaaaggctcgttcgcacaatccgttttatggatttatgccttgcctatgctcgttttgggcgcgggctcgtttttcgcgatgaggctgccgtttatggcgcaatacgaccgcttggggctgacgcgttccaacacctcctgccacaacaataccggcaaacaatgcctgtggggggatacggaaaaacagccggaactgctggttttgggcgactcccacgccgaccattacaaaacattcttcgatgccgtgggcaaaaaagaaaaatggtccgccactatggtttccgccgacNcctgcgcctatgtggaaggctacgcgtcccgtgtgttccaaaactgggccgcctgccgcgccgtttaccgctatgccgaagaacacctgccccggtatccgaaagtggttttggcgatgcgctggggcagccagatgcccgaaaacagccgctcccttgcctacgatgccggttttttccaaaaattcgaccgtatgctgcacaaactctcatccgaaaaacaagccgtttacctgatggcggacaacttggcttcgtcttacaacgtccagcgcgcctatatcttgtcttcacgcataccgggttgccgccaaacactgcgcccggacgacgaaagcaccctgaaagccaatgcccgcatcagggaattggcagccaaataccccaacgtctatattattgatgccgccgcctatatccccgcagatttccaaatcggcggattgccggtttactcggacaaagaccacatcaacccttacggcggcacagaattggcgaagcgtttttccgaaaaacaaaggtttctcgatacgcgccataaccattgattcgcttaaatttgttacaatcggcggtttgcaaaaccgctaatttttttgaaagagaccgatgagcgtcatccaagacctgcaatcgcgcggccttatcgcgcaaaccaccgacatcgaagccttagacgctttgctgaacgaacaaaaaatcgccctttactgcggtttcgacccgacagccgacagcctgcacatcggacacctgctgcccgtattggcattgcgccgcttccaacaggcggggcatacgccgattgcactggtgggcggcgcgaccggtatgatcggcgaccccagcttcaaagccgccgaacgcagcttgaattccgccgaaaccgttgccggctgggtaggaagcatacgcagccaattaacccctttcttgagctttgaaggcggaaacgccgccattatggcgaacaatgccgactggttcggcagcatgaactgcctcgacttcctgcgcgacatcggcaagcatttctccgtcaacgccatgctgaacaaagaatccgtcaaacagcgcatcgaccgcgacggcgcaggcatttccttcaccgagttcgcctattccctgctgcaaggctacgacttcgccgagttgaacaaacgccacggcgcggttttggaaatcggcggttccgaccagtggggcaacatcaccgccggtatcgacctgacccgccgcctgaaccaaaaacaagtgttcggtctgaccctgcctttggttaccaaatccgacggtaccaaattcggcaaaaccgaaggcggcgcggtgtggctgaacgcgaaaaaaacctcgccgtaccagttctaccagttctggctgaaagtcgccgatgccgatgtgtataaattcctgaaatactttaccttcctgtccatcgaagaaatcggtgtcgtcgaagccaaagacaaggcaagcggcagcaagcccgaagcgcaacgcatcctcgccgaagaaatgacccgcctgattcacggcgaagaagcccttgccgccgcgcaacgcNtttccgaaagcctgtttgccgaagaccaaagccggcttaccgaaagcgacttcgagcagctcgccctcgacggcctgcctgcatttgaagtttcagacggcatcaacgccgtcgaagccttggtcaaaaccggcttggcagcgtccaacaaagaagcgcgcggctttgtcaatgccaaagcggttctgctcaacggcaaaccggctgaagccaacaaccccaaccacgccgccgaacgccccgacgatgcctatctgttgataggcgaatacaaacgtttcggcaaatacaccatcctccggcgcggcaaacgcaaccacgcgcttttggtttggaaataatccgattgccgcagaaatgccgtctgaagctttcagacggcatttttatcaaatgcaaaacaccctgcgcctgccgatatgtcgtcatttccatgcaggcgggaattcaaacttgtccgcacggaaacttatcgggcaaaacggtttcttcagttctacgttctagatgcccgctttcgtgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttccNNNNNNNNNNNNNNNNNNNtcccgcctgcgcgggaatgacgggtttcgagattgcggtgttgtcgggaatgacgggttttaagattgcggtgttgtcggaacgcaaccgaaccgtcattcccacggaagtgggaatctaggacgcggggtttcagtcatttccgatagattcccg--gcgtcgggggtccggattcccgcctgcgcgggaatgacggttcgggtattttactgtgcccgccccgcgcctgtaaacggcgggcgattaaaaatgccgtctgaaggttcagacggcatcggtatcggggaatcagaagcggtagcgcacgcccaacgaggctt--------------------NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN------cacatacgNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNgagaagagNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcgggcggtgtttcaatacatagcaccgcgcctgctgcgcgttttatgcgtttggcgcgttcggcggcgggaaatttgcctacttttcccgcgtcgggcgggcggaacgggcggcacactgtctataaaccgcaataccgtttacaatgaccgcctgtttcaccacatacccgaacgcaacaatgtttcaacacacgggacggcacatcaagcaccgccctatgtgtcgtcctgatttggaaggggttgcacccctcccgaataaagtctgatcctgccgccccgaaggacggatgtccgagtggcggggtttcaaccgaaaaggaaatacaatgaaaatcaggccggggcggcacaacgcgcccgactttccgcacggggccgccgtaaccataggcaatttcgacggcgtgcacctcggacacaaacacatcctccaaaaactccgcctcgaagccgatacgcgcggattgcccgtcgtggccgtcgttttcgaaccccaacccaaagaatttttcgcactccgtaccggcaaaaccccgccgtgccgtatcagccccctgcgtaccaaactcgggctgctcgaaaaaaccggttgcgtcgatgccgcctgggttttgcgtttcgatcggaatttttccgaaatatccgcgcaagcatttatcgaccgcctgctgcgtcaaaccttgaatacgcgctatttgctcgtcggcgatgatttccgtttcggtgcggggcgggaaggctgttttgaacttttggcacaacagcccgatatgcaaaccgagcgcacgccttccgtcatcgtcgaagacatccgcaccagcagtaccgccgtccgccaagccctttcagacggcaaccttgcctatgcgaagaaacttttggggcacgactacgttttggggggcagggtggtgcacggcagaaaactcggacgcaccttaaacgccccgaccgccaatatccgcctgcccggccaccgttatgcactcggcggcgtgttcgtcgtcgaggcggacggcgcattcggcacgcggcgcggcgtggcgagcttcggcttcaatcccaccgttgatggcggctgttctcaaaagcttgaagtccacctgttcgactttcaaggcgatttgtacggacaacggttgaacgtccgcttcctgcacaaactgcgcgacgaggaaaagtttgacggtatggaagaactgaaaaggcggattgaagccgatatggaagccgcaaagtgttggtagaaaaaccttatacaaaccatccgattgggctacaatcagccttttaactgttcggacggcacaggggtttcccgttgtgaaatactgtttgaggcgcaatgccgtctgaaaccgaaatattgtaacaatagagattaaaaaatgaccgattacagtaaaaccgtcaacctgctcgaaagcccgtttccgatgcgcggcaatcttgccaagcgcgagcctgcgtggctgaaaagctggtacgagcaaaaacgttaccaaaaactgcgcgaaatcgccaaaggccgtccgaaattcatcctgcacgacggcccgccgtatgccaacggcgacatccatatcggtcatgccgtcaataaaattcttaaagacattattatccgcagcaaaacccaagccggttttgacgcgccttatgtgccgggttgggactgccacggcctgcccatcgaagtgatggtggaaaaactgcacggcaaagatatgcctaaagcccgtttccgcgaattgtgccgcgaatatgccgccgaacagattgcccgtcagaaaaaagactttatccgcttgggcgtgttgggcgactgggacaatccttacttgaccatggatttcaaaaccgaagccgataccgtgcgtatgctcggcgaaatctacaaatccggctatctctaccgtggtgcgaaaccggttcagttttgcttggattgcggatcttcgctggcggaagcggaagtggaatacaaagacaaagtatcgcctgcgattgacgttgcctatccgtttaaaaacaccgtcgcgcttgccgccgcattcggcttggcaggtatcgaaggcaaagcgtttgccgtcatttggacgaccacgccttggactctgcctgcgagccaggccgtgtctgccggcgcggacgtggtgtatcaattaatcgatacgcccaaaggcaaattggtgctggcgaaagatttggcggaaggcgctttgaaacgctacggcttttcagacggcatcgccatccttgccgaaaccaccggcgacaagctggaaaacctgcacatgaatcatccgttcctcgaacgcgatattcccatgctcaacggcgaacacgttaccaccgatgccggtaccggcttggtgcatactgcgcctgcgcacggtttggaagactacgccgtctgcaataaatacggcatcgagctttacaaccctgtcaacgccgaaggcaaatacataagcgaaacgcctcgtgtcgcaggcatgagcgtttgggaggcgaatcccgtcatcctgcaatggccggaagaaaccggcaacctcttggcaagcagcaaaatcgaacacagctacgcccactgctggcgccacaaaaccccgctgatttaccgagcgacaggtcagtggtttgtcggcatggacaaagccggcagcgacggtaaaaccctgcgcgacaaagccatcaaagccgtggacgacaccgaattcttcccgccatggggtcgtgcgcgtttggaatccatgattgaaggccgtcctgactgggtggtttcacgccaacgctattggggcacgccgatgactttctttgttcacaaagaaaccggtgaattgcatccgaactctgccgaacttttggaaaaagtcgcgcaacgcatcgaagaaaaaggcatcgaggcttggttctccctcgataaaagcgaattattaagcgcggaagattgcgaacattacgacaaactccccgataccatggacgtatggttcgactcaggctcgacgcattattccgttgtaaaacaacgcgaagaattggaatggccggctgacttgtacctcgaaggcagcgaccaacaccgcggctggttccaatcttctatgctgaccggttgcgcctcatccatgggacgcgcaccgtataaacagctgctgacccacggtttcgttgtggacggcgaaggcaaaaaaatgtcgaaatccatcggcaacgtcgtcgcgccgcaggaagtgtataacgagttcggcgcggacatcctgcgtctgtgggcggcatccaccgattacagcggcgaattggcgatttccaaagaaatcctcaaacgcgtaaccgaaagctaccgccgtatccgcaataccttgagcttcctgtttgccaatttgagcgactttaatccgattgaagatgctgttccacaagcagaaatggtggaaatcgaccgctacgccctggtgttggcgcgtcaacttcaagaacgcgttgccggcgatttttatccgcgttacgccttccattttgccgtaaaagaaatggtttctttctgctcggaagacttgggcgcgttctacctcgacatcctgaaagaccgcctctacaccaccaaagccgacagccgcgcccgccgcagcgcgcaaaccgccctgtaccacatcacgcgcagcctggttctcttgattgcaccgattttgtgcttcaccggcgaagaagcgtgggacatcatcggcggcggcgaagaagacagcgtcctcttccatacttggcacgagttcccggccatcaacgaaaaagccgaagccgaactggtgaaaaaatggacggcaatccgcgaagcgcgcgaagcagtaaccgccgccatcgagcctttgcgcgccgacaaaaccgtcggttcgtccttgcaggcggaagccgaaatcaccgcgccggaagaaatggccggctatctgaatgctttgggcgaagaattgcgctttgccctgctggtgtctaaagcagaagtgaaagtcggtgatgaacttgccgttgccgccaaagccagcgacggcgaaaaatgcgaacgctgctggcattacacccgcgatgtgggcgcggttgcaggttatgaaaccgtctgcaaacgctgtgcggagaatgtcggcggagaaggcgaaacgcgccattacgcctgataaagtttgagcaaatgccgtctgaaaccgccaaacagtatttcagacggcattttttgtgccgcgatttgtcttcataatggcggaggggtttcgagattgcggtgttgtcgggaatgacggttcagttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaattgtcattcccgcgaaagtgggaatccaggactcaaaatctcaagaaaccgttttgcccgataagttcctgcactgacagatctagatttccgcctgcgcgggaatgacgggtttcgagattacggtgttgtcgggaatgacggttcgggtattttactgcgcccgccccgcgcctgtaaacggcaagtgcatcaaaaatgccgtctgaaggttcagacggcatcggtatcggggaatcagaagcggtagcgcacgcccaatgaggcttcgtgggttttgaagcgggtgttttccaagcgtccccaNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcgtgaNNNNNNNNNNNgctggtcgacccNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNtgaagcaccgggcggatcggttccgtaccattcgtactgcctgcggcccgccgccttgtcctgatttttgttaatccgctataaagaccgtcgggcatctgcagccgtcattcccgcgcgggcgggaatctaggccggtcggtgcggaaacttatcgggaaaaaaggtttcttgagattttacgtcctggattcccacttttgtgggaatgacgtggtgcaggtttccgtacggatggattcgtcattcccgcgcaggcgggaatccggaccttagaacaacagcaatattcaaagattatctgaaagtccgggattctggattcccgctttcgcgggaatgacggttcggttgctacggttactgtcaggtttcggttatgttggaatttcgggaaacttatgaatcgtcattcccatgcaggcgggaatctggaatttcaatgcctcaagaatttatcggaaaaaaccaaaacccttccgccgtcattcccactttcgtgggaatgacgggatgtaggttcgtaggaatgacgtggtgcaggtttccgtgcggatggattcgtcattcccgcgcaggcgggaatccggtccgttcggtttcagttatttccgataaattcctgctgctttttatttctagattcccacttccgtgggaatgacggcggaggggataagttcttgcaatctaaaatttcgtcatttctataaaatagcaaaccgaaacagaaacttaaaaacagaaacctgaaacagcaacctgaaaccccgtcattcccgcgcaggcggaaatccggcgggccgtagggtgtgcttcggcccgccatttccatcaatccaacatgtctaccgttttcatcgaatccatcgaatccgccttttcgaccacccggccctacgcaaccgaaccgtcattcccgcgaaagtgggaatctaggacgcggggtttgggcaaccgttttatccgataagtttccgtgcggacaggtccggattcccgcctgcgcgggaatgacgggtttcaagattacggcatttgccgtttcgggtacaggaaagggggttttcgggtagaatggcactcttttatccggctgttgaaaaatatgtcttcatctgtttcaagtaaaacgcgctattgggtattggcacttgccgccatcgtgctggaccagtggtcgaagtgggcggtgctgtcgtcgtttcagtatcgggaacgcgtcaacgtcatcccttcgtttttcgatctgacgctggtgtacaacccgggcgcggcattcagcttccttgccgatcagggcggctggcagaaatacttttttttggtgctggcggtggcggtgagcgcgtatttggtacgcgccatcttgcgcgacgagtttgcagccctcggcaaaatcggggcggcaatgattatcggcggtgcgtcgggcaatgtcatcgatcgcctgatacacggtcatgtcgtcgatttcttattgttttattggcaaaattggttttatcccgcctttaatattgccgacagctttatctgcgtcggtgcggtgttggcggtgcttgacaatatcgtccatcgcaaagatagcaaaaaaacgtgaatgccgtctgaacacggaatgcaaaacttatgaacggaaaaaccatcatccttgccaatccgcgcggcttctgcgccggtgtggatcgggcaatcagtattgtcgaacgtgctttggaagaattcggcgcgccggtttatgtgcgccacgaagtcgtccacaacaaattcgtcgtggacaacctgcgcgaaaaaggcgcggtgtttatcgaagacttggcggaagtgccgccgggcgcgacactggtttattcggcacacggcgtatcgaaggcggtgcagcaggaagcggcggagcgcggtttccgggtatttgatgcgacttgcccgctggtaacgaaagtgcataaggaagtcgcccgactggatgcccaaaactgtgaaatcatcatgatcgggcataaggggcacgccgaggtcgaaggcacgatggggcagcttgcaccgggcaaaatgcttttggtcgaaacggtcggagatgtggcaaaactcgaagtcagaaaccccgacaaactcgcctatgtcagccaaaccacgctctcggtcgatgaaaccaaagacatcatcgccgcgctgaacgcgcgtttccccaatatccgcaatccgcacaaggaagacatctgctatgcgacgaccaaccggcaaaccgccgtcaaagagctggcggaacagtgcgacatcgtgattgtggtcggttcgcccaattcgtccaacagcaaccgcctgcgcgaagtggcggcatcgcgcggaatcgatgcgtatatggtggacaacgcgtcctacctgcaacgcacgtggtttgaaggcaaaagcaaagtcggcgtaacggcaggcgcgtccgcgcccgaagtgttggtgcgggaagtattggcagccatacgcggatgggggcatgaaaccgtgcgcgaNggggggggcgcggaagaaagcatcgtgttcgtcctgcccaaggagctgcgccgcgagggcgaaaccaaacccgatttgtgcaaacgttgacgcaggcgttaacgcaggcatcggatgtttgggcaatacaaatgccgagacctttgcaaaaatccccaaaatcccctaaattcccaccaaggcatttaggggatttcccatgagcaccttcttccggcaaaccgcNNaagccatgactgccaaacacatcggccgcttcccgctatcggagttggaccaggtgattgattggcagccgatcgaacaatacctgaaccgtcaaaaaacccgttacctcagagaccgccgcggccgccccgcccatcccctgtcgtccatgttcaaagccgtcctgcccggacaatggcacagcctctccgatcccgaactcgaacacagcctcatcacccgcatcggtttcaacctgttttgccgttttgacgaaccgggcatccccggttgcagcaccttatgccgctaccgtaaattccgctatgcgcgggcagcctatttcgggctgctcaaagtgggtgcgcaaagccacctgaaggcgatgtgtttgaacctgttgaaagccgccaacaggctaagtgcgcccgctgccgcctaaaaggcggcccggatgcctgattatcgggtatccgggggggattaaggggatattcgggtaaaattaggaggtatttggggcgaaaacagccgaaaacctgtgtttgggtttcggatgtcgaaggaagggcttttttgcaaaggcctcatgccgtctgaacaggcttcagacggcatttttgccgcgtgccggatgcggaaaccaatcaggcgtaatgtcgtgcaagaaaaccgggcagttcggacaaaccgtccaatacggcgagatgcggtgcgccaaggagctgttcgcgcgaatgtgcgccggtggcaacgccgactgccgccgcgcctgcgtttgccgccatatgcaggtcgtgcgccgtatcgccgacaaccaatgcctctttcgggtcgagtcccagttcgccgcagagtccgaataccatttcgggcgagggtttggaggggtattcccccgcgcaggcggtggcgagccaatagccgccggtggcggtttggctgatggcgttgtccaaacccgcccgccctttgcccgtggcgacggcaagccggaagccttgcgctttgagcttgtccagacagggcggggcatcgggaaagagtgtcatattgcggttgttgggattgaggtaatgcgcggaataagtgcgcgcgatgtcggcaacggcagcttcagaaggcatttcgagcagggcgcggatgatttcgggcaggctgtatccgatcaggctgcggacgcgctccgcttcgggcggcggaaaaccgcattcggcgaagctgcggcgcatggtgtcgatgatgggttgggtcgtatcggcaagcgtgccgtcccagtcgaagatgatgagtttgggcggggtcatggcaggttggttgcagtaaaaaagcagattttatgcggaaaacgcagacgtgtcgcattttcgacaaaatttgtcggctgagcgatatgtttttccgaacaagccgcgttgtgctttattaaaatagaaccattatcatttatacagatgggacagtttatgtcagttttccgcatcaatatgaccgccgccacggttttggcagcactctcgtctccggtttttgccgcacaaacggcggatttggaaaccgtccatatcaaagggcagcgttcgtacaacgcgattgccaccgagaaaaacggcgattacagctcgttaaaggcagctatatggatgaccgcctcaatacccgcgtctccccctgccgcctgaaagacaaaaacgccgccgaacccgaacaaccgcaacacccgttacgccgcattgggcaaacgcgtgatggaaggcgttgagaccgaaatcagcggtgcgattacaccgaaatggcaaatccatgcaggttacagctatctgcacagccaaatcaaaaccgccgccaatccacgcgacgacggcatcttcctgctggtgcccaaacacagcgcaaacctgtggacgacttaccaagttacgcccgggctgaccgtcggcggcggcgtgaacgcgatgagcggcattacttcatctgcagggatgcatgcaggcggttatgccacgttcgatgcgatggcggcataccgcttcacgcccaagctgaagctgcaaatcaatgccgacaacatcttcaaccgccattactacgcccgcgtcggcggcacgaacacctttaacattcccggttcggagcgcagcctgacggcaaacctgcgttacagtttttaaagaccaatatgccgtctgaaacggcagccgcagcataatcaaaccacaacaagctgcgcggcataccctatgcgctcacaaccggagtatggcattgcgaaggaaaacagaccgaaccggcaggcagaccgctttgccggttcggttttaccgcttgccgccagtctgacccacaagccgaacatcatgaaacccataccgaccgacacattccaacctgccatactgccccaagcctttgaaaccgaaatcaaatccacctgcacggggcgaatctatcggattcagacggcaacactcggcgaaatgcagtctgaaggctatcccgtcctctttgtcctcgacggcgaagcctttttcccgcgctgtacaacatcatgcagtcgctgatgaacaaccccgttacccgaagcaacgccccctgcctgattgtcggtatcggctacacgacaggcagtgtgcgcgacctggcgcagcgtgccgccgactacacgccgccgcttggagacaacgccacagcagacgaacggcggcagttcggacaggcagaccgcttcgccgactttatcgacagcgaactgaccgcctttttagaaagccgctacacccttaaccgtaatgaaaccgccgtattcggacactcgttcggcgcactgttcggactgtattccctgctttcccaccgctgtttcagacggcattggctcgtatcccctcgatttggtggcacaacaggcggatactcgactttatgccgtctgaaaaccggctggacggcatcgatgcctgcctcaacatcggcgcactcgagcggagcagcggttgcaaacgcagggaagaacgcgacatggcagggcaggccgaacaaatggcggcagagttggacaggcgcgggaccgccgtatttttccgggaatatccgaatgccgaccacggcaatgtcccgttttactcgctgaccgactgcgtcgaatatttgagggaagcgtggcaacggtagggggaatcaaatatatgactgctttgttttgcatcggaaaatatagcggattaacaaaaaccggtacggcgttgccccgccttagctcaaagagaacgattctctaaggtgctgaagcaccaagtgaatcggttccgtactatttgtactgtctgcggcttcgtcgccttgtcctgattttcgttaatccgctataacaagagctacctaagggttattgctcccgttctcatttcgcagtgctacaatttttgatagttcgcgccgactttgcccgtggttgtcgctcccgttctcattttatcttgatataaaaatccctgtttcaggccgcctgaaacagggatagattaatttaacggacgggcgggcgttttttcaggcggcacggtctgatttctttgcccggttcgtcgatttggtatttttggaatgaaagggcggttttgacaccgatacttttgaaaatgccgtttttccctttggcgctgtctgtgtcatgtacacggatatcaatcgccccggttgatttatttaggctggcgaaataaccaaaaaatacgtttttcttggcagttacttttattcaatcattcgaataaagtacgaatgaaaccggttttgggcttcagacggcatttgtatttttggttaccaattcacgcgcaccgaccggctgccgagcaatgtttccagttcgccgaacaatgcggaactcggtgtaaccgtccatttcggaggcacttgaagcctgcccgacgctttttcgttggcatacgacaattgaagcgggatgcgcggcgtgtcgggcagttggtgggcggcgagcagccgtaccagtccgccgatgtcgtgatgcggggcaagggcgaggctgaggctgcgggcgtagcgttcgcgcgccgtttgcagggtcatgacttggtttgccatgatgcgcagcccgtcgccgccgccgtaatcgtcgcggctgactttggattcgataatcagcacttggtcggctttgaggcagtcggcgcagttttccagcgtttgtccgccgaccatgatttcagcctgcccgctcgaatcttcgaggctgacgaaggcgattttgccgcgtttgcccatcatggtgcgcacggcggtaacgaatccggcgaggcgcacgctgtcttgcggtttcagacggcctaatttggtcggggcgatttggcggacttcttgggcatacgggccgaacgggtggccggacaggtaaaagccgatgacggttttttcttcggcgagtttttccgattcgctccacatgggtgcgtcgatgagccgcaccggttcgatggcgtcttccatcatgtcaaacagcccgccctgattggcgttggcggctttttggtcggcgttgtccatggcaaggtcgatgttcgccaagagcatggcgcggttgggttcgatgctgtcgaacgcgccgccgcgtatcagggcttcgagggtgcggcggttcatgtgttctttgccgacgcgctcgcagaagtccaacaggccggtaaatttgccgccgctttgccgcgcggcgatgatggattcgacggcggcttcgcccgtgcctttaatcgcgccgagtgcgtagcggattttcatgttcggatacggcgtgaagcggtagtcggattcgttaatgtcgggcggcaggaactcgatgccgttggcgcggcagtcgtcgtagaaatgtttgagctggtcggtgttgtccaattcggacgacatcgtcgccgccataaattcggcgggatagtgggctttgagccatgcggtctggtaggaaatcagggcgtaggcggcggcgtgggatttgttgaaaccgtagccggcgaatttttccatgtagttgaagatttcgtcggatttttcgcgcgaaatgccttgttttgccgcaccttcggcgaagatttcgcggtgtttcaccatctcttcgggctttttcttacccatggcgcggcgcagcaggtccgcgccgccgagcgagtagccgccgataatctgcgccgcctgcatcacttgttcctgatacaccataatgccgtaggtcggcgcgaggatgccttccagcagcgggtggatgtattggaattcctgtcccttcatgcgtgcgacgaagtcgggaatgttgtccatcgggccgggtcggtagagcgatacgaaggcgatgagttcttcaaacttggtcgtatgcgccgttttcagcatttttttcatgccggtcgactcgaactggaagacggcggtggtgttcgcatcgcggaagatttggtaggcagtctggtcgtcaagcggaatcttgccgacatcgacgatatcgccggcggtgtttttgatgttgttctgcgccatttcgataatggtcaggttgcgcaggcccaaaaagtcgaacttcaccaaacccacgtcttccacgtcgcccttgtcgtacatggatacgggcgaggcggattcgtccgcctgatacacggggctgtaatcggaaatcttgcccggcgcaatcaacacgccgcctgcgtgcatacccaaaccgcgcgtcaggtcttccagttttttcgccagcgtaatcagttcgtccgcttcttccgcttcaagcaattcctgaatctgcggctgcgccttcatcgcgtcgtccaaactcaggggtttgttggcttccaacggaatcagcttggacagtttgtcgcacagcataaacggcagttccagcacacgccccacgtcgcggatgaccgctttggacgacatcgtgccgaaagtcacaatctggctgaccgcctgagcgccgtatttttcgcgcacgtattcaatcacgcggccgcggtttgcctgacagaagtccacgtcaaagtcgggcatggaaacgcgttcggggtttaggaaacgctcgaacagcagcgcgtatttcagcgggtcgaggtcggtaatcttcagcgaatacgccaccagcgaacccgcgcccgaaccgcgtcccggcccgaccggacagccgtgcgttttcgcccagttgataaagtcttgtacgataaggaaatagccggggaatttcatttggatgatgatgttcagctcaaagtccagccgctcctgatattccggcatttttgccgcccgttccgcctcgtcgggataaagctgaaccatgcgttcctgcaaaccctcgttggaaagtttgatgagacagtcatcgagtgataaaccgtcgggcgtggggaaaaggggtaggaagtttttgcccaatgtgatgtgcaagttgcagcgtttggcgatttccaccgtgttttccaaggcttcgggcaagtcggcgaaacgctccagcatcgtttccggcggaatgaaaaactggctcggcgtgaaatcgcgcggacgtttcttgtccgtcagcacccagccgcccgcgatgcacacccgcgcctcgtgcgcgttgaaatcgtcgcggttcataaactgtgtcggatgcgttgctaccaccggcaaacccagttcctccgccagcttcacgctgccggaaacgcaagcctcccattcggggcgttcgggcaggcgttgcagctctaaataaaacgtatcgggaaaccatgccgcatatttcaacgccgccgcacgcgccgcgtcttcattgccgttcaacagattcacgcccacttcgccgtaatgcgcgccgctcaaacaaatcaagccgctgttgtcgccgttttccagccattcgggattgagttccgcatgatggatattgcggtcttggccgacataagcctccgtcaaaagctcgctcaagcgcagataacccgcatcgttgcggataaccagcatggcgcggaacggcttgtcgggcgcattcggattgcctatccacacgtccgccgcgccgacgggcttaatccctgcgccgcggcaggctttatagaatttcaccaaaccgaattcgttcatcaaatcgctgatgcccaaagcaggcaaaccgtattcttgcgctttggcaatcagttttttaatccgcaccataccgtcggtaatggagaattcggtatgcaggcgcagggggatgtaggtcggctcggtcatggcaaaatcggcgtggacaataaaaggcgtattgtagcagggttgtctttagatggcggtgcaggtaatgccgtttcggattcagacggcatgacctgcaaatgttttttgagcttttacgacggcaaaaaaatgcctcctgccgtgtggcggaggcttcccaaggagtattgatagatataaaggactatcaaactagttataaggaactatataccttattcggacggacggcaagcagttaaatagattttacgttcaaacaggtttttgatttcgttttgatgccgattgccggtgtatcgggcagtccgcgtttgaggatgtgcatcagcgtcaatgcggattcgtcggggaacaggatttgcagcctgccgttgggcaggatttctttggacggatggcggcatacggggtttcagacggcatttttacggaacaggcagtgcggacacatcgccggttttgcggcaattttgggtgcggcggcggcaggtgctacaataacgccctctttctaaaaggggacattatggaagccaccgtctatctcgaagacaacgaatacatcgctttgtgcgacctcttgaaattggccggacttgccgaaagcggcggacaggcaaaagcatttatcgccgaagggctggtgttgcgcaacggcggaaccgaaatccgcaaaacggccaaaatacgcggcggagaagtcatcgagtttgacggcgcgcgcttggaaatcgccgatggatacgaccctgaagcataaagccgaagcccttttgggcgagccgcttttggacgaacccgtccgccccgagtcgtgggaatgctgcggcagcgactgcggcgaggcgtgcattcagacgatttactgggcggacaaggcacgctacgatgcgcaacggaaaaaactgaaggaagcgggttggccggacgatgccgtctgaaaacggttgggcttgataaaaccacgttttcagacggtcttttatagtagattaaaattgaaaacgttcatatcgccattccctcgaaagcaggaatccggaagtttgaaatagcggttaaccttaaacatttccaataaatcaaagtctggattctcgcctgcgcgggaatgacggcatagcggcttttcctttgcatttgccatacacctgttttttaaaatgaccgccgccgccacactgtccgacaacattgaaacatcccgtccttcattcaccaccacataacaccccatgatagacctgcactgccattccaccgtttccgacggtatgctcccccccgccgaagtcgtccgcctcgcacatcaaaacggctgcacgctgctggcgttgaccgaccacgaccacacgggcggcatctccgaagcgcgtgccgaagccgacaggctcggtttgcgcctgattaacggcgtggaaatttcggtaacgtggcgcgggcgtaccatacacgttgtcggtttggatttcgacgagcaggacgaaaacctgcaaaacctgttggcagatgtccgcaaaggccgtctgaaacgtcttgaagccatcgccgccaagctcgaaaagaaaggcatcggcggcgcatacgacggcgcgctggcgctggcggcaaacaaagaaatggtcagccgcacccacgtcgccgagttcctcatcaaaaacggacacgtcaaaaacaagcagcaggcgttcaccaaatacttgggcgacggcaaatcctgcgcggtacgccacgaatgggcgacgctggcagactgcgtctccgccgtcaacggcgcgggcggcatggcggtgattgcccatccgatgcgttatgatttgtcggcaaccgccaagcgcaacctgtttgaagaatttaaaaacctcggcggcgcgggcatcgaagtccacagcggcaactgctgcaaaaacgaccgcctcaactacgcgcttttggcagaccgcttcggattgttggcaagcgcgggcagcgacttccaccgtttagacgacttcagcggcggcatcctcggcgcgtgtcccgatcttccggaaaactgcaaaccggtgcgggcgcatttttcccgacattgaatgcggatgaaaatgccgtctgaaaggtcttcagacggcattttttgcgttttaaacgttgtcgtacggttttcggacggttttgccgatggcggcgatgcctttttccagcgtttgagcgtcctgtgcgatactcatacggatgcactcgcccgcgtgcgggtagtcttgcgtgtcgatgccgacgaagaaatgttcgcccggaataatcagcgtaccttcggctttgagcatttcgtacagggtttgcgacgaaacgggcaggttttcaaaccagagccacaggaaaatcgcgccttcgggtttgtggattttcatcgggtacgcgcccagctcgcgcttgagcagcgaaacggcggtttgcgcctgattgcggtaaaacggccggatgacttggtcggcaagccgtttcatctcgccgctttccagcagcggggcggcgatggccgcgccgaagcgcgtgggggcaaggttcacaatcgcgttcaggctgctgacggctttgacggcttcgggcgcggcgacgatgatgccggtgcgaacgcccggcaggccgactttggaaaggctgaagcagaggatgatgttttcgtgccaattcagcgttacgccgctgtcaataatgttggggaacggcattccgtaggcgttgtcgataatcggcggaatgccgtgttcacgcgccaaagcgtccaaacgcgccatttcgccgtcggtcaacacgttgccggtcgggttggtcgggcgcgaacagcaaatcgcgccgattttgcccgctttgagttcgggcaggttttccagtgcgtcaaagtccacgcggtatttgaagaagcctgcttcgccttcgtgttcgacgttttcgattttgggtttgacggaaacgaagtgccgcccttcgacatgcacgtcggcatagccgatgtattcgggcgcgagcggcaacaaaatggctttttctgcggatgtgccgtctgaaagcttgaatttgccgccgaagaggttgaataaatagaaaaacgcgttttgcgaaccgttggtcagcgcgatattgccgacggtcaggttccagccgtattcgcggttggggaaggcggtcagcgcgtcaatcagcgcggcatcgccttggggattggagtagttgccgatgttctcgacggcgtgttccgccgccagcttggaaaatatgtcggcgaacgcccgatcgatttcgggaatgcgcgccgggttgccgccgccgagcatattgacgggcttgtcgcttttgagcgcgtcgccgaggtcgtccatcagttgcaggatgccgctgtgttgcgtgaatttttcgccgaatgccgagaactgcatgtcaaactcagtgtgtgtaaggcagattggtttgtacggtatgccgtctgaaggttcagacggcattttttctgtgtgtttcgcatacccaaagcaggtcgcagatgccgccggtcggggtaaagccggtcggggcgttgacgagcaggtcgcggattgcctgctggtcgtaacggtcgcaggcggtgcggatgcggtcgagcagggcggagagttcgtgccacggcagcatggtctcgtcggcggtcatgatgcgcggatggccggttttgcggacgttgtcgccgatgagcaactcttcgtagagtttttcgccggggcgcagcccggtaatgaggatttcgatgtcgccgtcgggctgttcgggcgttttgggtttgagtccgcttaaggtaatcatttggcgggcaaggtcggtgattctgacggattcgcccatatcgaggacgaacacgtcgccgcctctgcccatcgcgccggcttggataaccagttgcgccgcttcgggtatggtcatgaaatagcgcgtgatgtcggggtgggtcagggtgatggggccgccttcggcaatctgtttttcaaacagcgggacgacggagccggacgagcctaaaacattgccgaaacgtaccatgctgaagcgggttttttgtccgggttcggcggcgagtgcctgaaggcagagttccgccatgcgtttgcccgcacccatcgtgttggcggggcggacggctttgtcggtggagatgaggacgaaggtttccacgcccgaagccgtggcggcaagcgcgcattcgagtgtgccgaagatgttgttgcgtatgccctcgacggtgttgaactcgaccatagggacgtgtttgtaggcggcggcgtgatagacggtcgcaacggaaaaggcggtcataatgtgcgtgagcagcgtgcggttttgcaccgaacccaaaaagggaaggatttcggcggcgatgccgtttcgggcgcagtattcgcacaattctttttcaacggtgtacagggcgaattcggacagctcgaacagcagcagcctttcggggcggcggcggataatctggcggcagagttccgaaccgatggagccgcccgcgccggttaccatgacggttttgccttcggtgtcggcattcatgaggcggtcgtcgggtgcgacggaatcgcgcccgagcaggtcggacacagagatttttttgagcgtgccgatgctgattttcccgtccatcaggtctttcattccgggaatggtcaacacttcgcacggataggctttcagtttgctgatgattcggcggcgttgttcctgagtcgcgctgggaatggcgagcaggattttttccacgccgtagcgttcgatgaggaaggcgatggcatcgggctggtaaacggcaaggtcgtagatgacggtgtgccaaagcttggggttgtcgtccacaaaggcggcggcggaatattcgcgcatctgtttgacggcttcaaggagctgccgacccgaacgccccgcgccgtaaatgatgacggggtcatgtgtttttttctggtggtcggacaggagtccgcgcaaaaccatacgcgagccggtcacggaaacaaacagcagtaagaaatagacaatcggcagggcgaggcgcagcctttcttcaaaaatcaatgtgttgaggaagaacaatacggcggaggcgaggctgccggcaaaggcggtggtcaggacgtggaaactgacaaagcgtgtaacggcgcggtaaagccccattcggataaataatgtgatggtcagcaaggcagtcagcaaaaaagactgccagttggcaaaatcgaaccattcgtccgagtagtcggccttcaggctttgggtgaaccaaaaggcaatgaaaatcatcagaaaatcgtgtatgaggaaacagattttcttgatgttgcgcggcagggcgatcagggtttccagattcatatcgtggggcggtatgtgctttcaggcggcatatgccgtctgaagggttatcgtgcggcttcggtcaggacggcttcgatgtgttttttgcagaacgcgatttcgtcgtcggtcagcgtcgggtgcaccaagaacgtcagggcggtgccgcccagttcgacggcgtttttcagccgctctttgggccgccacggcgtgttgtcgaaggctttttccaaatacacttcggagcagccgccttgatagcaggggacgttgcgcgcgttcagttcgctgacgatgcggtcgcgcgtccagtcgtctttcaggtgttcgggtttgacgaaggcgtagaacttgtattgcgcgtgtccgatgtagccggcgacttcaatcaggcggatgcttttgaatttgcgcaaactttctgccagcttggcggcgttttcttggcggcgcgccgtccattcgggcaggtgtttgagctggatgcggccgatgacagcctgcatttccatcatgcgccagttggtgccgaaactttcgtgcagccagcggaaaccgggcgcgtgttcgcggtggtacacggcatcgtagcttttgccgtggtctttgtacgcccacattttttcccacagggttttgtcgttggtcgtaaccataccgccctcgccgccggtggtgatgattttgtcttgacagaacgaccacgcgccgacgtgcccgatagagccgacggatttgcctttgtaggtcgcgccgtgcgcttgggcgcagtcttcaatcacccacaaatcatgttcttttgccaaagccatgatgccgtccatttcggcaggcataccggcaaggtggacgacaatgacggctttggtattcggggtcagcacggctttgacggtttccgcgctgatgttttggctgttcaaatccacgtcggcaaacacggggtttgcgcccgcgttcacaatgcaggaggcggaggcgaggaaggtgcgcgaggtaacaatcacatcgtcgcccgcgcctatgccgattgctttgagtgcggcatcgagcgcaagcgtgccgttggaaagggcgacggcgtaccgcgtgccggcaaaggcggcaaattctttttcaaattcgcggcattcgctgcccgtccagtagttgactttgttggacagcaggactttggaaacggNatcggcttcttctcgggtgaagctcggccatggggaaagggcggtgttcagcatggtgtttggtccgtcgggttcggacggcatttccgaccctatgccgtctgaagggggcgtgttccgaagaatcgggcgcgcgccgcaggtgttgtcaaaatcggtttgtacggaagtttattttaatcgcttatgccgtcccggtcttggggtttttgcccgtaaggggctttgccgggttgcccgcgacggtcatgccgtccgggatgtcgcatacgataaccgcccctgcaccggcggtaaccccgctgccgacggttgtctgctggcggctgcacgcgcccgtgcctatccggctttcttcgccgatacgcgtgttgcctgacaggtgcgcgcccgggctgatgtggacgaaagcgtcaagcaggcagtcgtgatcgacggtggcggcagtgttcacaatcacgccgtctttcaatacgctgccggcctgtacgacggctttcgccattacgacgctgccttgtccgattattgcagaaggcgagacggtcgcgtcgggatgaatcagaacgggcagtttgaagccgagcgcggcggctttttcggtgatttggcggcggatgcggttgttgccgacggcgacggtgatgtcgaattgttcgggcgataaactgttttcaagcagcagcgtcgtgccgatgacggggaagccgttgacgctgccttgggtgcggtcgtccagaaaaacgatttcgccgtatgtgccgagtgcggcggcaagctcggcaacgactttgccgtgtccgcccgcgccgataacggcgagtttgcgattccccgcgaaagggggcatggtggcttccccttgcgccgaaatgccttctttaatcaagacttttttgactgtcagaaacaggattttcatatccagccaaaagctgaaattgtcggtgtaccaaacatcgcaggagaacttttcgtcccacgaaagcgcgttgcgcccgttgacctgcgcccagccggtaatgcccggtttcatttcgtggcggcggttttgaaatttgttgtaaagcggcagatactgcatcaaaagcgggcgggggccgaccaggctcatctcgcctttgaggacgttccacagttcaggcagttcgtccaaactggcggtgcgcagttttttgccgaagggcgtgagccgctcgctgtcgggcagcggaatgccgtctgaatcaagcgcgtcgcgcatggaacggaatttgaccattttaaaaggttttccgtcctttccggggcgttcccgaatgaagaagacgggcgaacctaagtttttgcggatgaggtatattaaaaccaaaaacacgggcgacagggcaatcagccccgatgcggaggcgacaatgtcgatgaggcgtttgaaaaatttattcatcagctaatctttcaatcaggttgacgattttccgataggaaatgtcgcgcctgaagcggcggacgatttcttcggactgaacaggatcgtttttgcgcttcaaaatatctttggcggctcgaacgaaaccgtccacatcgccggaacggtagttcgcatgcggcagcagggtaaggacttcggcaacttcgtcgtggacctggctgttcagaatcggtttttgcaaagccatatagtcggagagtttgttggtaatcgatgccattgaataggaccggatggcgttgacggcaatgtcgcagcccttggcgaccgacatcatttcggcgtaaggaatgtagccgtaaaacttgatgccgtcgcaggcatattgtttgagcctgtccaaatcggggccgccgcccatgatgtgcagctctacattttcgccgtcgtccaaaagtttccgaacgcctttgcacacggtttccacgtcatagctgtaactgagcgtgcccaagtagaaaaagcgggttttgtcgtcgccaaaatctttggcaggtgcggcatcgagtttgggaaagtcagcaccaatatagatgacttcgccgggtacgttcggattggtttctttggcgcggtcgagataagtctgcgatacggcaaccagcgcgtcggcgtagcggtaggcccggttggcgcgtgaagcaaagggcagcagcttgtgcggtacttttttcaaaaacggtacgaccgaggagaaagactccggccatacgtcctgcacatcgacaatcagtttgtaacccaaacgcgctttgtgtttgcccaacagcaggttggtggcaatcagcggataggcggaatagacgacgtcttgttcgcccggacggcagttttccaaccatttttcaaaatgtttgacgaagcggtgatggctggtcacgcgtcccaaagatacgtttttgctgtatccgctttcttccaacagtatgactttcagacggccttgtgaggcggcctcggcatcttcgggccgtctgaaagatttgtcgtagtgcttgaagttgctggtaatcagcaacacgtcgtgcgattgcgacaatagttctgccagataccaaaagcggttgaaatgcggttcggacggcagcgagcagtagggggcggctatggtaatgttcatgtttcagacggccttacatttcgtacgcagccatggtggtgcggtagatttcgtcgtcggagcataaggtttcgacatgtttgtgcagggctttgcccatttggctgcgcaactctggatgcttgatgagtgtatcgacggcttcgataaacgcttcgtcatcgccgaaaggaatgcagtagccggtttggccggtaatgaccatttcggaaatgcccgccatgttgtaggtcacgacaggcgtgtcgtaaaggccggcttccaaaatattgttgccgacacctgcgccgtggtcacctacgcaatgcggcgtgttcactaaaatatcgacttctttgaagtagccggtcaaatcgcggacgccgccgaggaaggtcactttgtcttcaatacccaaacgtttggcttgggctttgaggttgtccatttcttctcctatgcccgccatgttcaggcgtacgggtatattgcggccaaccattttcttcaaaatatccaacatcagatgcacggcgcggacggtgtccaaacgggaaagtgtgccgagtacggcgcattctttttcggttttccggaaatgaaattcNggggggggggtgttgtaggcgtaggcaatccggccggcggggaagccgtggcggatgagcttttcgcgttcgtgtttgcagttgccgatgatgtacgcgcccagcttgtcgaagagtttggcggttttggggtaggttgccgcgtccaaaccgtgcgagtggcagatgattttggttttcggtgaaacgattttggcggcaagggcgcaggccgggacgacgcgcgccatttggcagtcgatgatgtcgggttgttcgcggcgcagcatccgggcgtaggcaaaggtgcttttaaggtagccggcaagcccgccccggtaaaaatcaaccggctgccaacggatgcccgatgcttgcgcctctccgacaaaagggccgtccgaggaggcgaggatgatgtcgtgcccgtgccgtttgagcagccgcccgaggcggacggtggcggtttctgtgccgcccagacccgacatagaagtagtcaggatgattttcataatgggaaaccttgttttttcaaataatgaaacagtttgtgcaaatttttccggtggcgcaggatgcagcctgccagatatgccgcccatacgccggcaaacagggggtagtttgccggcgtgccgaagcaggtgtaagccgccgaggaggccaggcagaacaatgtgtgcatataaagcggcaggcgtttgagcggctgccacaggcggcaggagctttcggtcttgaaaacaaaaaacagccagaatgaagcggcacaggcaaccgccgcgccccgcgccccgccggccggtacggaaagccccagcagcagcaggtttgccgccagcgcgcccaaggtggcgaatgcaatcggacgcgttttgcggacgacgttcaaaccgatgccgctgatttctgccagcgtgcaaaacagcggcggcagcatacacgatacgacggtaaaccggacggcggcgtagttttccggcagtaggagggaggtgaggggcgagaaaatgccggtcaggcagagggcggcggcaagcagggcggcgacagattctgccgttgccgagaggcgggtgggcggggcgtttttttcgattgcgcggaaaatatacggtgtccaaaccgttgaaaagatgctttggaacaataatgccgccccgccgaacgaaatacccatcgaataaatgccgagctgttccaggccggcatattttttcaggaacaaacggtcggcggatgtcagtccccaataggcaaggctgtccagtgcgagcggtatgccgtagcgcagcccgcgatgcaggacggcgggcgaaaacggtgcgcgccggacggccttcagacggcatcggttttgaaacagcaaaaaggcggcggcggcaaggtttgccagcgcgtaaacggaggtcaggacggcggtgcgcgccggaaagtgcagcagccagaccgtcagcagcaacagcagcagggcggacttgggtacgagttgcgcggacgaaaaggcaagggcgcgcccttccatacgcaaaaccagtaagagaaagcggatgggcagcaagctcagtccaaacagcaccagcccgatgccggcggcggcatcgtcgagcgaaaacaggatttcagacggcagggccgggtgggaaagcaggaaggcggctatcgcggcggcagacagcagcggcggcaggaacagggctttgaacaaaatgtctttgtcggcggcggcattgtattcgcggatatatgcctgatccagcccgaggcacaacaccgacatcgccagtcccgccgccgtctgcatcaacacgatgcgcccgatgtcgtcggcggggaaataccacgacagcagcggcaggatgatgacggctaaaatcgcgcagccaatcgatcctgccgcgtagccgaggatttcttttgtgtccatttttgatgtccggtcggcggcgggatgctgcctgtgccgtctgaagcctttcttgatcggaatttgacggctttcaggccgtcgcggctgccggcggggtgcggcagcccgggttgcgcttttccgggcgggcggcggtctgaacgggccgttttttatcggcgttattatatagtgaaacggcggcaaaccctttaaaaggcgttgccgtttttccggaacacggttttgatgtcgtgtccgaggatttcggtggaaacgggtgtccataatggcggcgcggaaagggcggcgcggttttcgggcagggaaaacaggtctttgccgccgccgaggattttgggcgaacggtacagcacgatttcgtccgccaaattttccgccaaaaatgcggatgtgagttcggagcctgcttcgaccatgatttcgccgaaaccttcgtcggcaaggaggcgcatcagatggtgcaggtcgattttgccgtctgccgtttcagacggcatcaggatgcggatgtgtgcgtgttcccgataggggcggagtttgtcttcatcgcgttccaaggtggcgatgtaggtcggagattgtccgtcggtaaccaaatggctgttcgggggcaggcgcaggcggctgtctaaaacgatgcgtgcgggttggcgcaaagttggaaaagcgcggacgttgagccggggattgtctgccaacaccgtgccgatgccggtcagcaccgcgcagctttcggcacgcaaaacctgtacgtcggcacgcgcttcctcgccggtaatccaaaagctgctgccgtctgaaagggcggttttgccgtccagcgaaacggcgcatttgaggcggacaaaggggcggcggcgttcgatgcgcgataaaaatccccggttgagttcgcgtgctttgttttcaagtagtccgcattccgtcttgatgcccgctgctttgagcaggacaagccctttgcctgcaaccggcgggttggggtcgcgcatggcggcgacgacgcgtgttacgccggaacggagcagggcttcggcgcagggcggtgtgcgtccgtaatggctgcacggttcgagggtaacaaaggcggtcgcgccttttgccatttcccccgcctgacgcagggcgtggacttcggcatggggttcgcccgctttgacgtggaagccctgtccgacaatttgtctgccgtgtgcgataacgcagccgacgcgcgggttgggtgaagtggaaaaacgccccaaagcggcaagtcggagggcgttttccatcatggatatatttgtgtccgaaaacatagggataccgtatcagtatgggttgggggaatcaggttttgccgcctgttttgacggcttgcgccagccacgaggcgaaatgttccgggctgtcgaagcgtttgtgcagggcggcgaaacggacggcggcttccgtgttttgcccgaacagctcctccagcacgatttcgacaagttcggatgaggatatgtcgcgctgacccgaagtgtagagcctgtgttccgtcaggcggacggtttcgtcaatctgttcgggtgtcagggcggattttcgggcggcggcggtcaggtcgttgcggaggcgttgtgcattgaagggcgaacgtttcttgtccggaccgatgacggcgggcattttgagttcgacggtttcgagcgtgccgaagcgtttgccgcagccggggcagtggcggcggcggcggacggtattgcgctcttccatcaggcgggaatcggcaactcgggtgtctgggtggctgcaaaacgggcatttcatggtgtttcttcctgatgccgtctgaacgtcaaaccgatacgccggcggcgcgggcgatttccaggccttcttcggcactcatatagacgggattttcgggacggtcgtgccggacgatgttgccttcgcggaacatgaccagttcgttcacggcaagttgggaccacgattcatcgcgagtcagcggcagggtggagataacggcgacgcggtcgtccggcgtggttacttcggcaaaatcgaccattacatcgtcgtcgagcaggcgcgctttgccgaacggggcttggcggacgatgtagtgcagcagcgtgctggcgtgggcaaacagggaaatgccgtctgaaagcatgaagttaaacagcccgaacttgcggatttcgtgcgtcagccccgcaatcgcgtcaaacagcgtgtcgtcgtcgggacgggcggcaaagcgggtgcgcaggcggttgaggatgtggcagaacgcgcgttcggaatcggttgtgccgacggggtggaaaaattctccttgttcggggaaaaaatcgaccaaatgcccgttgtgggcaaacagccagtagccgccccacatttcgcgcataaagggatgggtgttcgccagcgaggtttgaccttgcgaggctttgcggatgtgggcgacgacgttttccgatttaatctggtaggcgcgcacgaggtcggcgacgggggaatttgcactcggcttgtcgtcatggaacaggcgcacgcctttgccttcgaaaaagccgatgccgaaaccgtcggcgtgatggtcggtaatgccgcccctgcggcggaagccttcaaaggaaaacataatatcggtcggcgtattgcagttcatgcccagcagttgacacatagtttgtccaaatgattcagatggtcgcaagtattcggattataccccgaactgaaaatgccgtctgaaatacggcttgttccccattattcccgcgaaaacagaaaacaaagacggaaacttaagattccgtcattcccgcgcaggcgggaatccgacttgtccggtttcggttNtttttcgttccgtaacttttgagccgtcattcccgcgcaggcgggaatctagaattt ->NZ_LT906437.1 Neisseria gonorrhoeae strain NCTC13799 genome assembly, chromosome: 1 -ATGCTCAAGAGCCAGTTTGCCGGAAAAATAGAAGCGGTGAGGGAAGAGTTGGCTGCCGGCCGTCCCGCCTTCGTATTCAAACCGGGAGAAGGCGTGCGTTATGAGATGGCGGCGGTTGAAGGTGCTGTCGAACCTGCCGAGCCGTCCTTGCACGCGGGGTCGGAGGAGATGCCCGTGCAGGAGGTTCTGTTGGACGAGCTGCCGTCTGAAAAGCCTGTCAAACCCGCTGCGTCGAAAACGGCGGCGGATATTTTGGCGGAACGTATGAAAAACCTGCCGCACGAGCCGCGTCAGGCTGCCGGGCCTGCTTCCCGGCCGGAATCGGCGGCAGTTGCCAAAGCGCGGACGGATGCGCAGCGTGATGCGGAAGAAGCGCGTTACGAACAAACCAACCTGTCTCCGGATTACACGTTTGATACGTTGGTAGAAGGTAAGGGCAACCGCCTTGCGGCGGCTGCGGCGCAGGCGATTGCGGAAAACCCGGGGCAGAGTTACAACCCGTTCTTCCTGTACGGCAGCACGGGTTTGGGCAAAACCCACCTTGTGCAGGCGGTCGGCAACGAGCTGTTGAAAAACCGTCCCGATGCCAAAGTGCGCTATATGCATTCGGACGACTACATCCGCAGCTTTATGAAGGCGGTTCGCAACAATACCTACGACGTGTTCAAGCAGCAATACAAGCAATACGACCTGCTGATTATCGACGATATTCAGTTCATCAAAGGAAAAGACCGTACGATGGAAGAATTTTTCTATCTGTACAACCATTTTCACAATGAGAAAAAACAGCTCATCCTCACTTGCGATGTTTTACCCGCCAAAATCGAAGGTATGGACGACCGCCTCAAATCCCGCTTTTCGTGGGGGCTGACTTTGGAACTCGAGCCGCCCGAATTGGAAATGCGTATCGCCATTTTGCAGAAAAAGGCGGAAGCGGCGGGCATCAGTATCGAAGACGAAGCCGCGCTGTTCATTGCCAATCTGATCCGTTCCAACGTGCGCGAACTGGAAGGCGCGTTCAACCGTGTCGGAGCGAGCAGCCGCTTTATGAACCGTCCCGTCATCGACATCGATTTGGCGCGTACCGCTTTGCAGGACATTATTGCCGAGAAGCACAAAGTCATCACCGCCGACATCATCATCGATGCGGTGGCGAAATATTACCGCATCAAAATCAGCGACGTACTCGGCAAAAAACGCACGCGCAACATTGCCCGTCCGCGTCAGGTTGCTATGAGCCTGACCAAAGAATTGACCACTTTGAGCCTGCCGTCTATCGGCGATTCGTTCGGCGGACGCGACCATACGACCGTCATGCACGGCATCAGGGCGGTGGCGAAACTGCGCGAGGAAGACCCCGAGTTGGCGCAGGATTACGAGAAACTGCTGATTCTGATTCAAAACTGACCGGACACGCCTTTCAGACGGCATGACATTGACCATGCCGTCCGAAGGGTAGGAAATCCAACCGATTTAAGGAGCGAAAATGTTGATTTTACAAGCCGAGCGCGACAGCCTGCTCAAGCCGCTGCAAGCCGTTACCGGCATCGTCGAACGCCGACACACCCTGCCCATCCTGTCCAATGTGCTGATTGAGGGCAGGGGCGGTCAGACCAAACTCTTGGCAACCGATTTGGAAATCCAAATCGACACCGCGGGTCCCGAGGGAGGTGCGGGCGACTTCCGCATCACTACCAATGCCAAGAAATTTCAGGACATTTTGCGCGCGCTGCCTGCCGGTGCGCTGGTGTCGCTGGATTGGGACGACAACCGTCTGACGCTGAAGGCGGGCAAATCGCGTTTTGCCCTGCAAACCCTGCCTGCCGCCGATTTTCCGATGATGAATGTCGGCGAGGACATCAGCGCGACTTTCTCGCTGGGGCAGGAGCGTTTCAAAACCATGCTGTCGCAAGTGCAGTACAGCATGGCGGTGCAGGACATCCGCTATTATCTCAACGGTCTGCTGATGCAGGTTGAGGGCAGCCAGTTGCGCCTTGTGGCGACCGACGGACACCGCCTTGCCTATGCAGCCTGCGCGATTGATGCGGATTTGCCGCGCGCCGAAGTGATTTTGCCGCGCAAAACGGTGCTGGAACTGTTCAAACTGTTGAACAACCCCGACGATCCGATTCAAATCGAGCTGCTGGACAAGCAGGTGCGTTTCCAATGCAACGGCACGACCATCGTCAGCAAGGTCATCGACGGCAAATTCCCCGATTTCAACCGCGTGATTCCTTTGGACAACGACAAGATTTTCGTGTTGTCCCGTGCCGAACTTTTGGGCGCGCTGGAACGTGTGTCCATTCTTGCCAACGAAAAATTCCGTGGCGCGCGCCTGTTCCTGCAACCCGGCCTGTTGAGCGTCGTGTGCAGCAACAACGAGCAGGAAGAAGCGCGCGAAGAAATCGAAATCGCCTATCAGGGCGGCGAACTCGAAGTCGGTTTCAATATCGGCTATTTGATGGACGTGTTGCGCAACATCCATTCCGACGATATGCAGCTTGCCTTCGGCGACGCCAACCGCTCGACGCTGTTTACCGTGCCGAACAATCCGAATTTCAAATATATTGTGATGCCGATGCGGATTTGACGGTTTTCCGGAACACGATGCCCGTATTGGAGATATGCCCCGAACCGTGCAGACGGATTCGGGGTTTTGTTCGGCTGCCGGAAAGGCAATGCCGTCTGGAATGCGGCGGATTGGGGTTGGGAGCGTATGGGGGAAGTGCTTGTGCGGGTCAGCCTCGGAGCAAATCCCATAAATCGTTTTGCAGGTCGGCTTCGCTTTCGCCTTCGGCGGGCGCGGCGCGGATATAGCCGCCGTCGGGCTGCATCAGCCACGCGTGGGTATTGTCTGCCAGTGCCATTTCCAAACCTTCGCGGATGACGCGTTTTTTGAGTTCGGGCGCGGTAATCGGGGTGGCGGTTTCGATGCGGCGGAAGAAATTGCGCCCCATCCAATCCGCGCTGGAAATAAAGGTGTCGTCCGCGCCGTTGTTGTGGAAACAATATACGCGCGCGTGTTCGAGCTGCCTGCCGACGATGGAGCGGACGCGGATGTTTTCGGACAAGCCTTTTACACCCGGGCGCAAGGTACACATACCGCGCACAATCAAATCGATTTGCACGCCTGCCGCGCTTGCCCGATACAGGGCTTCTATGACAGTCGGTTCGATGAGCGAATTCATCTTGGCGGTAATCCGCGCCGGTTTGCCGGCTTTTGCGTGTTCGGTTTCGCGAGCGATGCGGCCGATAACCATTTTGTGCAGGGTAAACGGACTTTGGTAGAGTTTGTTCAGCCGCCCGGGTTTGCCCAAGCCTGTGATTTCCATAAATAATGTGTTCACGTCGGCGGTGATTTGTTCGTCGGCGGTAATGAGGCCGAAGTCGGTGTAGATGCGCGATGTGCCTTGGTGGTAGTTGCCCGTGCCGAGGTGGGCGTAACGCTTGAGCACGCCGTCTTCGCGGCGGATGACCAGTGCCATTTTGGCGTGGACTTTGTAGCCGAACACGCCGTACACGACGTGCGCGCCCGCCTCTTCGAGCTGCTTCGCCCAGTTGACGTTGTTGGCTTCGTCAAAACGCGCCATCAGTTCGACGACGACGGTTACTTGTTTGCCGGCGAGTGCCGCCTTCATCAGGGCGGGGACGAGTTCGGAGCGCGTGCCGGTGCGGTAAATCGTCATTTTGACGGCAAGAACGGCGGGATCGGCGGCGGCTTCGCGTATCATATCGACCACGGGATCGAAAGATTGGTAGGGGTGGTGCAGCAGGATGGGCGATTGGCGCACCAAATCGAAGATCGGGCTGTTTTTGCCCAAGGCTTTCAGACGACCCGGCGTGTGCGGCGGAAATTTCAAATCGGGGCGGTTGACTAGGTCGGGGACGGCGTTGAGGCGGACGAGGTTGACCGGGCCTTTGACCTGATAGAGTTCGGCGTCGGTCAGCCTGAATTGCGCGAGCAGAAAGTCGCGGATGTAGGCGGGACAGGTGTCGGCGACTTCGAGCCGCACGCCGTCGCCGTATTCGCGGTCGTGCAGTTCGTTTTGAATGGCGGCGCGGAGGTTTTGTACGTCTTCTTCGTCAACGGTCAAGTCGCTGTCGCGCGTGAGGCGGAACTGGTGGCAGCCTTTGACGTTCATGCCCGGGAAGAGTTTGCCGACGTGGGCGTGGAGGATGGACGACAGGAAGACGAAGCCGTGTCCGCCGCCACACAGTTCGGACGGCAGGGGAACAACGCGCGGCAGGATGCGCGGTGCTTGGACAATCGCCATACCCGAAGGCCTGCCGAACGCGTCCGTGCCGTCGAGTTCTACGGCGAAGTTGAGCGATTTGTTCAGCGGGCGCGGGAAAGGGTGGGAAGGGTCGAGTCCGATGGGGGTCAGGATCGGCAGCAGTTCGCGGTCGAAATAGTCTTCGATCCATTTTTTCTGCGTGCCCGTCCAATTGCGGCGGCGGTAAAAATGGATGCTTTCCCGCGCCAACTCGGGCTGAAGGACGTTGTTGAACAGGTCGTACTGGTGCCGTATCAGGGAGCGCGCCGCTTCGGTAACGTCGGCGATGGTTTCAGACGGCGTTTTGCCGTTGTCCGGCCTGCGCCGGGGGTGCAGCTTGTTTTCACGCTTGAGCCACGCCATGCGGACTTCAAAAAACTCGTCAAGATTGGACGACACGATGCACAGGAAGCGCAGGCGTTCCAAAAGGGGGACGTTTTTGTCTTCCGCCTGTGCCAACACGCGGCGGTTGAATGCCAGCAGGCTCAGTTCGCGGCAGAGGATGCGGTTTTGTTCGGTCATAAGGTTCTCCCAAAGATGGTTGTTGTTCGGTCGGAGCGGGCGGACAATGCCGTCTGAAGGCTTGGCGGCATCTGCGCCGGTTTCAGGCGGCATGACGTGACGGACGGTCTGTTTCAGGCATCGGGGCAATGTGAAAACGGATACCGGCACGTGCGGTATCCGTCTGTTTCAAATCACTTCCAACACAAAATAATGACGCAGTTTTTCGTACACCGCATCGCTGACGTTGATGCAGCCGTTGGTCATAATCCTGTCGGACACGGACGGGGAGGCGATGCGTTCGTTTCGCCTTTCGGACGGTATCTGATTCCAAACGCGGTGCAGGGCGAAAAGAAAATCGCCCTCCTGCTTGAAACCGATGACTTCGCCGCCGTAACCGGGCTTGTCGGTACTGTTCAGCGTCAGTCCGAACGTCCCCTTGGGTGTGGCAGTGCCGATGAGGACGGGGTGGCACTGACGGTCGTCGGCAAAACAGAGTTCCGCCTTGGATGTGTCGACGATGACTTTTTTCTTTTGAATATAGGCACTGACCGCATCCGGCTGCCCCTGTGCGAATACGGGGGCAGTCGTCAGCAGGCAGCACAATATCCCTGAAAGCAGGCGGGGCGGCATAGCGGCTTATTGGCGGATACGTTTCGGTTTTGCCGGCACGATTTCGCGGATGATGACTTGCGGCTCGGCTTTGGGTGCGGGCGGCGGGCAGACGGCATCTTTCGGGAAGACGGGGTTCCAGTAGAAGCTGCGGGCAAATTTGTCTTTATCGAAAATCACTTTGTATTGGCAGGTAGTAACGCCTTCCACGCCGGAAGTGTTTTCAGGGTCGATACCCACGCCCGGGGTGTGGAAGTGGAACAGGTAATCCCATTCGCGCACGCCGTACATACCTTCGTCGTAATGCGGGCGGCCCGGGATTTTGTAGATGTCGTCTTTGGTCAGACCGGGGCGCATCTGATCCAGTTCGTCATAAGTCGGGAATGTGCCGCGCTTGTTGTCGAGCGTTACGGAATAGGGTTCCGGGAAAACCGGATTGTCGGTCGTGCCGTCGGCTTTGACGTTGCTTTATGGTTGCGCAGGCAGACAGAATGCCTGCCGCCAATACTGCCAAGCTCGGTTTGACGATTTGTTTGATTTTCATATGCAGAATCCTTTTTTACCCGATGCCCGTCTGCCTTTTGTTCGGAAGAGCCGCATCAGGAGAGTTTTAAACGTTTGATTTTGGTTCGTAATATTAGCATAAAAAACGTGCGTATCAGTAAACGCGGTGTATTTGTACGGCATACGGAATGATGCGCGTGCGAATTTACGCATCCTGCCGGCAATTTGCCGATTCGCCGACATCGGCAACCTGTTATAATTCCTCCTTTAAATTCCTAACGTTTTCAAGCGAAAAACAAAATGACCATGCAAGAACATTACCAGCCCGCCGCCATCGAGCCTGCGGCGCAGAAAAAATGGGACGACGCCCGTATTTCCAACGTCTCCGAAGACGCTTCCAAACCCAAATATTATTGCCTTTCGATGTTCCCTTACCCTAGCGGCAAGCTGCATATGGGGCATGTACGCAACTACACCATCGGCGACGTATTGAGCCGCTTCAAACTTTTAAACGGCTTCAACGTTATGCAGCCTATGGGTTGGGACGCGTTCGGCATGCCGGCGGAAAATGCGGCGATGAAAAACAACGTCGCCCCCGCCGCTTGGACCTACGACAACATCGAATACATGAAAACCCAGCTCAAAAGCCTGGGTTTTGCGGTTGACTGGGAACGCGAAGTCGCCACCTGCAAACCCGAATACTACCGCTGGGAACAATGGCTGTTTACCAAGCTGTTTGAAAAAGGCATCGTCTATCGCAAAAACGGCACGGTGAACTGGGACCCGGTCGACCAAACCGTCCTTGCCAACGAGCAAGTCATCGACGGACGCGGCTGGCGTTCGGGCGCGTTGATCGAAAAACGCGAAATCCCGATGTATTACTTCAAAATCACGGATTACGCCGAAGAGCTGCTCAACGATTTGGACAAGCTGGAACACTGGCCGGAACAAGTCAAAACCATGCAGCGCAACTGGATCGGCAAATCTCGCGGCATGACCGTGCGCTTCGCCGTTTCAGACGACAGCAAGCAAGGTTTGGAAGGCGATTACGCGAAATTCCTGCAAGTTTATACCACCCGCCCCGACACGCTGATGGGTGCGACTTATGTCGCTGTTGCCGCCGAACATCCGCTGGCAACAGCCGCAGCCGCCGACAAACCCGAATTGCAGGCATTTATCGCCGAATGCAAAGCCGGTTCGGTTGCCGAAGCCGATATGGCGACGATGGAGAAAAAAGGCGTGCCGACCGGCCGCTACGTCGTCAACCCGCTCAACGGCGACAAGCTGGAAGTGTGGATTGCCAACTATGTCTTGTGGGGCTACGGCGACGGCGCGGTGATGGCTGTTCCGGCGCACGACGAACGCGATTTCGAGTTTGCCGCCAAATACAATCTGCCGAAAAAACAAGTCATTGCCGTCGGCGACAACGCATTCGACGCAAACCGATGGCAAGAATGGTACGGCGACAAAGAAAACGGCGTATTGGTCAACAGCGGCGACTTGGACGGCTTGGATTTTCAGACGGCATTTGATGCCGTTGCCGCCAAGCTGCAAAGCCAAGGTGCGGGCGAACCGAAAACCCAATACCGCCTGCGCGACTGGGGCATTTCGCGCCAACGCTACTGGGGCTGCCCGATTCCCATCGTCCATTGCGAAAAATGCGGAGACGTTCCCGTCCCTGCCGACCAACTGCCCGTCGTCCTGCCTGAAAACGTCGTACCCGACGGTATGGGTTCGCCGCTGGCAAAAATGCCCGAGTTTTACGAAACTTCCTGCCCGTGCTGCGGCGGCGCGGCGAAACGCGAAACCGACACCATGGACACCTTCATGGAGTCGAGCTGGTACTTCTTCCGCTATATGTCGCCCAAGTTTTCAGACGGCATGGTATCGGCAGAATCCGCGAAATACTGGGGCGCGGTCGACCAATACATCGGCGGCATCGAACACGCGATTTTGCACCTCCTGTACGCGCGCTTCTTCACCAAACTGATGCGCGACGAAGGTTTGGTCAATGTTGACGAACCGTTTGAACGCCTGCTCACGCAAGGTATGGTCGTCTGCGAAACCTACTACCGCGAAAACGACAAAGGCGGCAAAGACTGGATCAACCCCGCCGATGTCGAGCTGACTTTCGATGACAAAGGCCGCCCCGTTTCCGCCGTCCTCAAAGCCGACGGACTGCCCGTCGTCATCAGCGGCACGGAAAAAATGTCCAAATCCAAAAACAACGGCGTCGATCCGCAAGAACTGATTAACGCCTACGGCGCGGACACCGCCCGCCTGTTCATGATGTTCGCCGCACCGCCCGAACAGTCCCTCGAATGGAGCGACAGCGGCGTCGAAGGTGCACACCGCTTCCTGCGCCGTCTGTGGCGTACCGTTTACGAATACCTGAAGCAAGGCGGCGCGGTCAAAGCATTTGCAGGCAACCAAGACGGTTTGTCTAAAGAACTCAAAGACCTGCGCCACAAACTGCATTCCACCACCGCCAAAGTCAGCGACGACTACGGCCGCCGCCAGCAGTTCAACACCGCCATCGCCGCCGTGATGGAACTGCTCAACCAATACGACAAAACCGACACCGGCAGCGAACAAGGCCGCGCCGTCGCCCAAGAAGTATTGGAAGCCGCCGTACGCCTGTTGTGGCCCATCGTGCCGCACATCTGCGAAACCCTGTGGAGCGAATTGAACGGCGCGAAACTGTGGGAAGCAGGCTGGCCGACAGTCGACGAAGCCGCCCTGGTCAAATCCGAAATCGAAGTGATGGTTCAAGTCAACGGCAAACTGCGCGGCAAAATCACCGTCGCCGCCGACGCCTCCAAAGCCGACCTCGAAGCCGCCGCACTCGCCAACGAAGGCGCAGTGAAATTCATGGAAGGCAAGCCTGCGAAGAAAATCATCGTCGTACCGGGCAGACTGGTGAACATCGTCGTCTAAACCGCTTTTAAGGTTTAGCCATACGGATAAAGGCCGTCTGAAACTTGGAAACAGGGTTTCAGACGGCCTTTTTAAGGCAGATTGGGTTGTCTGCAAGACAGACCTCAAATATAGCGGATTAACTTTAAACCGGTACGGCGTTGCCCCGCCTTGCCCTGCTGTCTGCGGCTTCGTCTCCTTGTCCTGATTTTTGTTAATCTACTAAAAATTAATCTCAAAATCCAAAATATGAATTTATTTTTCGATACCCAATTGGGAAAGCAACAAAATAAAGCAACCCACAAAATCCGTGTAATGAGCGAGGCTTGGCTGGAAAAAAACGGCTATTGCCCCTGTTGCGGAAGCAAGCCGATGCAGAGATTTGCCAATAACAAACCTGTTGCAGACCTCTTTTGCCCAAATTGCCACGAGCAATATGAATTAAAGAGTAAAAATCAAAAAACCATAGGCAACAGCGTGCCTGACGGTGCATATCGCACTATGTTGGAGCGCATCCGGTCAGATACCAACCCCAACTTTTTCTTTCTTGCATATAAAAAAGCGGATTACTCCATACGGCAATTGGTGCTTGTACCCAAACATTTCATCACGCCGGATATGATTATTCCCAGAAATAAAGGCATTAAAAACCGACCGCACCACATTATGTGTTCCATCAATCTCGCCCCTTTGCCTGAAAGCGGAAAAATATTCTTAATAGACGATTCCCGCATTATCGAACCCGAAACCGTTCTGAAAAAATGGCAATCCAACCTGTTTTTACGCAACCAAAATGCGGAGCGCAAAGACTGGCTTTTGGCTGTTATGAAATGTATCGACCAACTCACCGAAGAATTCACATTGTCGCAAATGTATGAATTTGAAAACAAACTATCCATCCAATTTCCCCAAAACAACCATATCAAAGACAAAATCCGCCAACAGTTGCAAATTTTGCGTGATCAAAATATGATCGAATTCATTGGTCGCGGACTTTACAAAAAAATCGACAAATTGCACCCAACTCCCAAGGCGTTTTGATTTCAAATCATGATACTGAATTTACGAGAAATATTTATTCTTCTGCCATTTTAAAAACGGTTGAAGTACAACGCAATATTGCCGCAAAGGGCAGCAGTCGTAAAAAAGTCGGAGAATTATTGGCAATTTATGATTGATTTTGACAAACCGGCTGAAGAAGCTGCCATTTATCAAAGTCGTTTGAAAAAATCGTTTCAGACGACCTTGTCCTCTACAACGAAAATTCCCTTAACGTCATGCGGAAGATATTGGAAAAACATCCAAACGGCTGTTTTGATATGATTTTCGCAGACCCGCCTTACTTTCTTTCCAATGACGGTTTCAGTTGTCAAAACGGGCAAATGGTTTCCGTCAATAAGGGCAACTGGGATAAATCCAAAGGAATGGCGGCAGATTTGGAATTTTACGAAGAATGGCTCCGACTGTGTTACGCCTTATTAAAACCAAACGGCACAATTTGGGTTTGCGGCACATTTCATAATATCTATTTAATCGGCTACCTGATGCAAACCGTCGGCTACCATATTTTGAACAATATTACTTGGGAAAAACCCAATCCTCCCCCTAATTTGTCCTGCCGTTTCTTTACCCATTCGACAGAAACAATCTTATAGGCAAAGAAAAATAAAAAAGCTAAACACACGTTTCATTATGAAACCATGAAAACACAAAATGATGGCAAACAGATGAAATGTGTTTGGACATTTCCTCCACCAAATAAAACCGAAAAAACATTCGGCAAACATCCGACACAAAAACCACTCCCCTTACTTGAACGCTGCATACTATCGGCTTCAAATATCGGAGATTTAATTTTTGACCCTTTTATGGGCAGCGGCACAACAGGCGTTGCCGCCTTAAAACATGGTCGGAGATTTTGCGGTTGCGAACTGGAAGAAGATTTTTTTGAATTAGCAAAGAAAAGGTTAGAAAAATGATTATTGGCGGAATCGGCGGTGCAAGGACACAAACAGGACTCAGATTCGAAGAACGTACAGACTTACGAAAGTTGTTTGAAGAAATTCCCGGGTACGACTTAAGAAAAACAGATGATAATGCGGGTTATGAAGTTTGGTTTAATGGAGAATTGAAGGCTTATTGTTTCAAAAAATATGAGTTTTACCGATTTTTGGAAAGACTGGAATACAATATTAATTGGAAAGACCATCTGTCTAAAAGATTACTGCCCGATAATGGCTTATTTATCATCATCCGTGATACCTTATTTATTATTGAGATCAAATTCCAACAAACTCCCGGTTCAGTAGATGAGAAATTACAAACTTGCGATTTTAAGAGAAAACAATATACAAAGTTAGTTCACTCTTTAGGTTGGCGGGTTGGATATGTCTATGTTTTGAATGATTGGTTTACAAAACCGGAATATTAAAGATGTTTTAGATTATATTATCAGTGTTAACTGCCATTACCAATTTAACACGATTCCCTTAAGGTGGTTTGGACTGCCTGATGGTGAAACAAATGAATAAATACCATATTTAAAACACAACCGTTCAAGGTCGTCTGAATATCATTTCAGACGACCTTTCACCAATCCCCGCCGTTTTCCATCTTTCTGCTATTGTGATAAAGTAGCCCGACCTTTTGTTCAAAATACGCGGATTCCGCGACACTGAATGCAGCATCTGTCAAAGATTATTTGAAAACGGTCGAGTTAAACAAGTCTGCCGACAATGTCGATACCACATCCAAAACTATCCGCAGGGTTTAGGCGGTATTCCAGAGTACGGTGTCTTATGCTGATGCTGTAAACAATGCCTGTATAGAAAATCTAAAACGGTTGTTGCCGACCGTTATGCCGGTTTATGAGCAAAGTGTCAGAAATAAGGGGCGCGTTAATAAAAAACGTCGGCGTTAAGGGAAGGGGATCGAGAATTTGAGCCGTTGTTTCAAAATGCCGTCTGAAATCGTTTGAGATTCAGACGGCATTTAAACAGTTCTGCGCCCCGCCCGTTTTGCCTTCAAGCCCGCGCCGCTTAAATCTAATCCCCCTGCAACGGGCGCAAAAAATCCCCGTGCCTCGCGGTCGGGGATGTTTCGGGTTTCGCGCCCGTCTGCGCCGTGCCTTGCTGTCGGGCTATGCCGTCTGCACCGCCGCCGTTTCGGCTTGGTTTGATGCGGTCGGGCATTTGTGCGGCTATGCCCTGATATTCGGTTCGGCGGTCTTGCCTGTCTTGGCAGGCATATTCAGCAGCGCGTCTATTGTGAACTTGCTGATTTTGCCGTTTGCCAAGTCGGCTACGCAATGGCTTCGATACCCTTGTTTTTGACGATGGTCAGCAGCTTCAACGCCGCGCCGCTCGGCTTTTTAACGCCCCGCTCCCAAGCCGAAACGTGATTTTTTCCCACGTTGAGATAGATGGCGAAAGCGGCTTGCGATAGTGCCTCCTTCTCCCTGATTGCCTTGATGTCCCCGCCGCTCAACGGTTTGATTTCGGTCAGGCAGGACTTGTCAAAGCCGCGCATAGTCTTTTTGTCGATTGCGCCGATGTTGTAAGCCCCTTCCATCATTTCATGAATGGCGGCTAATGCCTCGCTTTTGTATTTCATAATTCTATCTCCGTGATAATGCCGTCTTCTTTCAAAGCCGCCAGCTCTGCCCGCGTGTATTTCAGATAATATGCGGCGGCTTTTCGGTAAACGTCCAGTTCTTTATCCGAAATGTTTTCCCTGTCGTTCTTGGCAAAGGCGTAAACGAAAAATGCCCTATCTGCCTGTTTGAACAATATCAGGCTGCGATAGCCGCCGCTTCTGCCTTGTCCTTGCCTTGCTATGCGCTGCTTAATCACACCGCCGCCTAAATCTGCGTCTATCAGCCCGTTATCCGCCCGCTCTACCGCTTCCAGCAGCTCGGAATCGTTGATTTTGTGCTTCTTGGCAAATTTCACTATCCATTGGTTTTTGAATATCCGCATTGTGTAGCCGTTGATTAGTGATACTTGGAATTATACCAGAGACAGACAACACGGCAAGCTGCCTTTTTTATGCCCCGCAATTTCTCCGTTTATGCCGCCTGAAACACCGGCGGCTAACCTGATTATTTTTTAATCAATCGCTTTTAATGGCTCAAATTGCGTTTTTAGCGCGTTTCGCTGTCTTCCTATGCCCCGTATATAACCAAGCGGTTTAACCGCCATTCCTGCTCAAAATAGGCGCGGTTCCGTGCGTTTTGGCTTTTCATTCCGCTACGCTCCCACTGCCAAGACGGTGAAAAACCGGAAAACCCCAAAAGTTGTTACCGATTCGTTACCATTTGTTACCGCATTTGTTACCAATTTTTTATCTTTTTCTTATTTTATAGTGAATTAAATTTAAACCGGTACGGCAAGGCGAGGCAACGCCGTACCGGTTTAAATTTAATCCACTATAGTATAGGTTTTTTCCAAAAACCCAAAAAAAACCGCTCTGCATCTTGGACGGTTTCCCCCTCATTCCCTACGGTGCGTCAGTATTCCCCGCAAGCTATTTCCCGCTTGGCATTCCTGATTTGGTGGTCGTTCAGCTTTATTTTTACGGTATTTTCTCGCGGTATTTTCGGATGCTGTAAAAAATCAGGTTAGTTCAATTAGGGCGGATTGGACGGGATTGCACTGTCAGGAAGGGGGACGGCAGGATAACAATCAGCCTGAAATCCTTGTATTGATTGGGATTGGTTGACGGCATTAGACAGGATTAAACGAAAAAAAACGCTTAGAATTTCTAAGCGTTTTGTGTGTTGGTGCCGACAGCGAGATTTGAACTCGCACAGCCTACGGCCACTACCCCCTCAAGATAGCGTGTCTACCAATTTCACCATGTCGGCATTTGAAAAACTGTTATTTCTGCTGCTGAGGAACAGGGGCAGAAGGTTCGGTATTGCTTACGGGTTTGGGTGCTTGCTGAGTTTGTTGTACGTTGCTGAAGTCCAAACCGTGTTTTGTCGTGTGGGTGTGAATATACACCATAGCCATGCAGGTTGCAAAGAAAAATGTTGCTGCAACGGCGGTCGAGCGGCTGAGGAAGTTAGCGTTGCCGGCAGAGCCGAATACGCCTTGCGCGCTGCCGCTTCCCGATCCGAAAGTCGCGCCGGCATCCGCGCCTTTGCCGTGTTGGAGCAATACTAACACGATGACGGCCAAAGCGGAAATTATATTAACAATCCAAATTAGGGTTTTGAAGGCTTCCATATTTTTCTACGCATTTTGTGCGGCACTGATGATGGCGGTAAAGGAGTCGTACGACAATGACGCGCCGCCGACGAGTGCGCCGTCCACATAAGGTACTGCGAAGATGTCGGCCGCGTTGTCCGCTTTCACACTTCCGCCGTAAAGGACGCGGATTTTAACATCGCTTCCGCACAAAGACAAGATTTCTTTGTAGATGAATGCGTGCATATCGGCAATCTGTTCGACGGTGGCGACTTTGCCGGTGCCGATCGCCCAGACGGGTTCGTAGGCGACGGCGATGTTTTTGGTATCCAGCCCTTGCAGGATGGAAAGCTGATGGGCGATGACTTCGTGTTCTTTGCCGGCTTCGCGCTCTTCGAGGCTTTCGCCGACGCACAATAACGGGATGAGTCCGACGTTGAGGACGTTTTCCATTTTGCGGCGTTGGATTTCGTTTTTTTCGCCGAAATAAAGGCTGCGTTCGGAGTGTCCGATGAGGACGATGTCTGTGCCGGTGTCGGCGAGCATTTCGGCGGACACTTCGCCGGTGTACGCGCCGTTGTCGGGGAAGCGGCTCACGTCTTGGGCGCAGGTGAGGATGCGGTTGTTTAAGACGATTTGCATGGCGTTGTGCAGTTGCAGCAGGTAAACGGTCGGGGCGGCGAGTCCGATGAGGACGCGTTCGGCGGTGGGGAGGATGCGGAAGCGGTGCATGAGCGAATTGTTGTTCTGGAGCCGGCCGTTCATTTTCCAGTTGCCGATGACCCATTTTTGATCCCACATTCCGATTTGGTGATACATCTTTTTTGCTCCGTGTCGTGTTTTTTCTGTCTGCCGCGTGTGGCGCGTTGCAATGTGAAGTTTAGTGGATATGCGGCGGGTTCGCAACTTGGGGCGGGCGGCTGCGGGGGCGGTTTGGAATGTTGTTTCGGGCAGGTTGTTTTATAATGGCCGCCTGATATGTATGCAACTATAGGAGATGTGATGCACGCGCTTCATTTTTCGGCTTCGGACAAGGCCGCGCTTTATCGGGAGGTGTTGCCGCAGATTGAGTCTGTGGTGGCGGACGAGACGGATTGGGTGGCGAATTTGGCGAACACGGCGGCGGTTTTGAAGGAGGCGTTCGGTTGGTTTTGGGTGGGTTTTTATTTGGTCGATACGCGTTCGGACGAATTGGTTTTGGCACCGTTTCAGGGGCCTTTGGCGTGTACGCGGATTCCGTTCGGTCGCGGGGTGTGCGGTCAGGCTTGGGCGAAGGGCGGGACGGTGGTCGTCGGGGATGTGGACGCGCATCCCGACCATATTGCCTGTTCGTCTTTGTCGCGTTCGGAGATTGTCGTGCCGCTGTTTTCAGACGGCCGCTGTATCGGCGTGTTGGACGCGGACAGCGAACATTTGGCGCAGTTTGATGAGACAGATGCTTTGTATTTGGGCGAACTGGCGAAGATTTTGGAGAAGCGGTTTGAGGCTTCGCGCCAGGCGGCTTGAGTGATGGAAAGGGGCGGGCGGCGCGTGCCGAAGTTGGCGCGGCGGGAGTGTGGTTTTATAATGCCTGCCATTGTTGAAACAATTATTTGACGGAGCACTAAATGGATTTTGAAAAAGCGCGGTTCAATATGGTCGAACAGCAAATCCGTCCGTGGGATGTATTGGATTTTGACGTTTTGGACGCTTTGGCGGAGATTCCGCGCGAGCTTTTTGTCGATGAGGATTTGCAGGGTTTGGCGTATGCGGATATGGCGCTGCCGCTTGCCAACGGTCATAAGATGCTGGAGCCGAAAGTCGTGGCGCGGCTGGCGCAGGGCTTGAAGCTGACGAAAAACGATACGGTTTTGGAAATCGGCACGGGTTCGGGCTATGCGACCGCGCTTTTGGCAAAATTGGCTGGTCGTGTGGTTTCGGACGACATCGATGCCGAACGGCAAAAGCGCGCCAAAGCGGTTTTGGACGGCTTGTCTTTGGAAAACATCGATTATGTGCAAAATAACGGGTTGACCGAACTTTCCGCAGGTGCGCCGTTTGATGCGGTTTACGTCGGCGGCGCGGTAACCCTTGTGCCTGAAGTGTTAAAGGAACAGTTGAAGGACGGCGGGCGTATGGCGGTTATTGTGGGACGCAGGCCGGTGCAGCGCGCGCTTTTGATTACGCGCAGGGGCGATGTGTTTGAAGAGAAGGTGCTGTTCGATACTTTGGTGGCGCATTTGGACGACAAGGATGCCCATCCTTTCGACAGTTTTAATTTTTGATGTTCGGATTGTGATGCCGTCTGAAAGCGGGTTTGGGGCTTCAGACGGCATTTTGCTTGGTTTTTTTCGGGGGGTTTGTGATGGATATTGTGCAACTTCCGTCGGCGGCATTGAAGGCGTGGATGGACGAAGGGCGGATGTTTTGTTTGTTGGACGTGCGTACGGATGAAGAAGCGGCGGTTTGTTCGCTGCCAAATGCGCTGCATATCCCGATGAATCTGATTCCGCTGCGGCAAAACGAGTTGCCGGACGATGTGCCGCTTGTGGTGTATTGCCATCACGGTATCCGCAGCCTGCATACGGCGATGTATTTGGCGGAGGCGGGTTTTGAAAACCTGTACAACCTTCAGGGCGGCATCGACGCGTGGGCGGTTGAGGTTGACGCGGAAATGGCGCGGTATTGAAGGCGGCTTCAGACGGCATTCCTTAAATGCGTGTACCTCTGGTGTTCCATAAAGGTCGTCTGAAAGTGCAGCTTCTGCGAAGCTAAAGCGCAGTATCAACGAAGTTAAAATTTGCCTGAACCTTAAAGGCAGCCTGCACCCCAATTCCCTCGCCCCGTGGGAGAAGGCTAGGGAGAGGGCGGCAAACTGCAGGTTTGCTTGGGCGGCATTTTCAATGTGCAGGCTGCTTTTAGCTTCGCAGAAACTCCGTTTTCAGACGACCTTATTTAAACCGATAGGTAAACGCCGCGTTCACTGTCCGCAGTGCGCCGTGGCTGTGGCGGTCGGGCTGGGTGCGGTAGTGTTTGTTGAACAGGTTGTCCACGTTCAGCGACAGTTCGGTGCGCGGATTGAAGCGGTAACGCGCCATGATGTCGGCGACGGCGTAGGCTTTCTGGCGGCTGTTGGCGACGGCGCGGGCTTTGGCGGCGGGGTTGGGGATGTGGAGCGCGGCTGGGTCGGTGTGGGTTTCGCCCTGCCGGCGCACACCCGCACCGATGGTCCGGCCGCTGGGGGCTTCGGGGGCTAAGTGGTAGGCGGTGAAGAGTTTGAAGCTGCGTTCGGGTACGCTGTCGGGGTTCAGGCGGCTGCCGTCTTGGTCGCGGGGTTTGCTTTGGCTGTAGCCTGCCTGTATCTGCCATTCGGGCGTGATGCGGCCGCCGACTTCGATTTCCCAGCCGTGGGTTTTGGCTTGGTTGGCGGCGCGATAGTAGGTGTTGCCGCTCTGGTCGCGTCCTGCTGCGGTGGCGAGGTTGTTTTTACGGGCGCGGTACACGGCGGCGGATGCGTTCAGACGCCCTTCAAGCCATTCGCCTTTGATGTCGGCTTCCAGATTGTTGCCGGTTACGGGTTTCAGGTAGCTGCCGTGTTCGTCTTTTTGCAATTGCGGGACGAACAGGCTGCTGTACGAGCCGTAAAGCGACAGGTTGCCGGTCAGATCGAACACGATGCCTGTGTAGGGGGTGAAACGGTTGGCGGACACATAGGTCATGCCTTGTGTGCGGCTGTTGTAGCTGCCTGCGCGGTAGCGGCTGTATCTGCCGCCGAGTATCAGCGAAAGGTTGTCGGCGGCGCGGAAACGGGTGGCGAGATAGCCGCCGATTTGCCGCCTGGTGTCGTATTGCGGGATGGTTTGGGCAAACGATGATGGCTGCGGATAGGCGCCCGTGCGGGAAAATTCGTAGGCGTTGGGAATGGCGTTGGGAATGATGCTGCGTTCGCCGTATTTGTTGCTGGCGTATTTGTAGCCGTTGATACCCGCGATTAAATCGTGCTCGCGGCCGAACAGGCGGTATTTGCCGGTCAATGACATGCTGGCGCTGTGGGTGCGCGGATCGGCGTGCCAATAACCGGGAATCAGGTCGGTGGCGGCAGTGCTGTGGTCGATGGAAAGTACGCCTGCCACACCGTAGGGCTGGCGGAAGCGGCTACGGGTGTAGTCGTATTCGGCTTTGAGTTTCCAGTCTTGGTTGAAGCGGTGTTCTATGCCGGCGAACAGGTTGAGCGCACGGTTGCGGCTGTTCGACCAATTTGTGGCGGGGTTGTCTTTTGGGCCGAAGGCGGTGGCATAACCTTGGCTGTCGTACACGGCGTAGCTGAGCGGCGCGTCTGCGGTTTCTTTCGCCTGCTGGTAGTCCATGCCTGCGTGGACGCGGGTTTGCGGTGCGATGTCGTATTCCAAAATGCCGTAGAGTTCGGCATCGCGGCTGCGTTCGAGCTGCCGCCACGAGTCGCCGCGTCCGAAGGTGGAAACCAGGCGGCCGCGCAGCGTGCCTTCGGCGTTCAGGCTGCCCGATACGTCCGCGCCCAGCCCGAAATGTTTGCGGTTGCCGGCTTCGGCGCGGACTTCAAACAATGGCTTGCGGGTCGGGTGTTTGCGTACCAGATTGACGGTGGCAGAAGGCTCGCCCGTGCCGTCCGGCAGCCCCGCCACGCCGCGCACGACTTCTACGCGCTCATAGGCGGCGGTGTTGGCATTGCCCGTATCGGCCAGCGCGTCGGCAACGGGGATGCCGTTGATTTGGTAGTTGGCGATGCGGCTGCCGCGCGCGAACAGGTAGTTGTAGCCCGCGCGGTCGGAGCCGTAAATCTGGCGGCTGGTGCCGGTCGCCTGCAACAGGGCGCGGTCGAGCGTTTTGATGTTTTGGTCGCGCATTTGTTGCGATGTGATGACGCTGACGCTCTGCGGGATTTCGCGCAGGGTCATGGGCAGCCCGAACGGGGTGTGCGTGCCGGAAACGGTGTAGCCGTCGTTGGAACTCGCGGTGCGGTCGGCGGTAACGGTGATGGTCGGCAATTCGGTGCTTTCCTGCGGTTTGGGGTCGTCTGAAACAGAAACATCGGCCTGCGCGTACACGGGTAGCAGGGCGGCAAAAAGCAGGGAGTATTTGAAGCGTGTCATGGGGTTTCCTTTGTGTGTTGGTGTGCGGTGGGGTTGTATAGCGGATTAACTTTAAACCGGTACGGCGTTGTCCCGCCCCGGCTCAAAGGGAACGATTCCCTAAGGCGCCCAAGCACCGGGCGAACCGGTTCCGTACCATTCGTACTGCCTGCGGCCCGCCGCCTTGTCCTGATTTTTGTTAATCCTCTATGCTTTTGGCATATTGAAGGTGTAGGCTGCTTTTAGCTTCGCAGAAACTCAGCTTCCTTCGGAAACTTCGTTTTCAGGCGGCCTCGGACGGGTCGGGCAGATCAATCAGCACCACCGAGCAGCCGTTTTCCGAACGCGGGCGGTGCGACACCGACTTCGGCACGACCGCCATCTCGCCCTCGCGTATCGTCATGTTGCCGCCGTCGGCGAAGTCCACCGCCATGTCGCCCTCCACGGCAAACAGCACTTTGTCGCTGTATCCGTGCGTGTGCCAGCCGTAATCGCCCAAAAGTTTGACCAGGCGGAATTGGAACCCGTGGCGGTTGATGATTTCGGGCTGCCAGTATTCTTTGATGGCGGCAAGGTGCTGTTTCAGGTTGATGGTTTCGTTTTGCATGGGGTTCTCCTTGTGGTTTGTTTTGAATAAAACTACTGCGCCGCAACGGGTTCTGCCTTTTCAAACGCCGCCTTCAACTGTTCCGCCGCCTGTATCAACTGCCGCGCGCCGCCCGCGACAATGTAGTTCGCGGCAGGCATGACGATGATTTGCTTGCGCTTCCAAGCGTTCGTGCCGCATACCAGCGCGTTATCCAACACTTCCACGGCAGCCGGCCCTTCCTGCCCGATGGCGGCGGTGCGGTCGATGATGAAAATCCAGCCGGGGTTTTTCTCTTTGATGTATTCGAAGGAAACGGGCTGCCCGTGCCCTTCGTTGCGTAAAGATTCGTCCACGGGCGGCAGGCCGATGTCGCCGTGTATCCAACTTGCCAACCGCGATTGCGTGCCGAAGGCGGACACCTTGTTGCCTGTAACCGACAGCACCAGCCCGCGTCCTTTGCCTTTGGCGGCTTCGCGCTTTTGGGCGAACAGCGCGTCAATCTGCGCATTCAATTCCGCCACGCGCGCTTCCTTACCGAAAATCCGCGACAGGGTCTCCATCTGCTTCTCGCCGCTGGTGCGGATATTGCCGTTGTCCACCGTCAAATCTATGGTGGTCGCGTTTTTCGCCAACTGTTCATACGCTTCCGCACCCGGCCCGCCGGTAATGACAAACTGCGGATTGTGGCGGTGCAGGGATTCGCAATCGGGCTCAAACAGCGTCCCCACCGTTGCCGCCTTGTCAAATGCAGGCTGCAAATAGTCCACGCGCACCGGCGCGGTGGTTGCGCCCACATTCACGCCCGGCTCGGTCAGCGTATCCAACGCCGCCCAGTCGTACACGGCGACGCGTTCGGGATTCTTCGGCACAACGGCATCGCCCCGCGCGGTCGGCACGGTCAGCGTGGCGACAGGTGTGGATGCGGCTTGGGATGCGGCGGATACAGTTTTTTCGGCGGCAGGTTCGGGCGAACAGGCGGCCGGCAGGACGGCGCAGGCTGCCCAATAAAAACGCGGTTTCACGGTGTGCGGTTCCTTTGCATACGAATAAGAATGTTTATTATTAAGCAAACAACCTGCAGAAACCACGCCGCAAAACGCAAAATTCCCGATACGGCAAAACAAATTCCCGAAACGGAAAAGGTCGTCTGAAACACCCTTTCAGACGACCTTTTCCGTTCCAACCAATCCCTGCGCTTGATTATTGGTAATAATTCCTATTTAATTCATTTGTTAGACAACTCGTTCCTATCCAATCATGAACACCGCCGCCATCTACCGCCAGTACCAAACCTATGTCCGCTCCGATAAATCCGGCTGGGCGTTGGACGGCTGTTCCGACAGCGCACTCATTGCGCAGGCAAAACAGCCCGGTTTGCATCTGAAAATGTGCATCAACCGCTTCGACTCGGGCATTACCTTATCACGGATGCGCGGCGGCGGAACGGGTGCGTTTCCCACCGAAATCCACAATTTCAGCCACAACTGCGCCTTGTTCGTCATGGTATCGGGGCAGAACCGGTTACAAATGGGCGGCAGGGAATACCGCCCGTCTGCCGGCGAAATCTGGCTGGTACGCGGCGAACTGGCGGACGTATCCGAAACCCTGCTGCCAGACAGCGGCGGCATGTGCGCGCTGCATTTGGATTTTTCGCTGGAAAAACTGCGCCGCTGGCACGACGAAGGTTTACTGGACGAACGCCTGTTTTCGCCGCAAACGATAGGCCGATTCGCCCTGCAACGGCTGGCGCAAAACGCGGGGACACTGACGGCGGCGGCCTGCCCCCTGCTGCAACGCCCGTTCGAATCGGACGGCTTCGGCCTGCTCGCCGACGAAGCCGACGCGCTGGAACTCTCCGCCCGATTATTACGCTTCACCTTCCGCCGCCACGACAACGGCTACCGCCGCCGGCGCATAGACGAAGCCGCCGATATTTTGAACAGCGAATTCGCCCGCCCGCTGACCATCGCCGAAATCGCCCGCCGCGTCGGGCTGAACGAATGCTACCTGAAACGCTATTTCAAAGCGCAAACCGGCGAAACCGTCGCCGGACGCCTGCGCCGCCTGCGGCTGGAACACGCGCTCGCCCTCATCGAATCGGGCAGCACCATCCAAGCCGCGATGCACTTTTGCGGCTACCGCCACGCGGGACGGTTCAACGAAGCGTTCAGGCGGCATTACGGATTTTTGCCTTCGGATGTGAAAAAGTGCTGATGGGCCGACGGCATAGATATTTTGATTTGAAACAACCATTAAAAAAGATCGTCTGAAAAAGCAATTTCAGACGATCTTTTTTCATTCGCGGCGGCAGTGTCGCCCCCTGCCCTTATCCCAAAAATTCTTTCAAAAACAGCAACACGCAGGCGAGTTTGTCGGCGGATTCGCGTTGGGTGCCGTTGCCGGTATGGCCGCCGCCGTCAGGCGAGTAGAGCCAAGATTGCGGCGAGGTTTCGCGCAGTTTGGCGTAGAATTTGAGCGCGTGGGCGGGATGGACGCGGTCGTCGCTGAGGCTGGTGGTAATGAGTGCGGGCGGATAATCGATGCCGTCTGAAAGATTGTGATACGGCGACAATTCGCCCAGCCGGCGTTTGCAGGCTTCGTATTTCTGCGGATTGCCGTATTCGTCCGTCCAACTTGAACCGGCGGACAGCAGCGGATAACGGATCATATCGGTCAGCGGTACTTCGCACACCAGCGCACCGATGCTTTGCGGTTCGCGCACGAAGGCGGCGGCGGTAATCAGGCCGCCGTTGCTGCCGCCCTGCAAGCCGATGTGTTTGGGCGAACTCATGCCGCGTTCGGACAAATCACGCACGACTGCCAACAAATCATCAACGCTTTTGTGTTTGCTGATTCCCTGCGCCGCCTGATGCCAGCGCGGGCCGAATTCTCCGCCGCCGCGGATGTTTGCCAATACAAAGGCATTGCCCTCTTCCAGCCAATATTTGCCGACGCTGCCCAGATAATGCGGCAATTCAGGAATGCCGAAACCTCCGTAAGCATAGACTAAGGTCGGCGTGTCGGGCGCGGCGTTTTTGCCGACGTGGAAATAAGGAATGCGTTCGCCGTCGGACGACACCGCCCAAAACTGCCGCACTTCGATGCCGTCTGAAACAAACTGCTGCGGCTGGAGGCGCATGACGGTCAGTTCCATCACGTTCAAATCCAGCGCAAACAGCGTCAGCGGCGTGGTGAAATCGCTGGCGGCAAGATAAACCACGTCGCCGCCCCACGGTTGGTCGGTCATTTCCAACGCGCCCGAGGGCAGGTGCGGCAACTCGGCTTCCTGCCATTTGCTGTCGGCAAACCGCCACGCTTTCAGACGGCCTTGTACATTCTCCAGCAGGCTTGCCACCACAAAACGCTTGGTCGTTTCCACGCTTTCCAATGCCTGCGTTTCATCGGGCGCAAACAAAAGCTGCGCCGCCCCGAGTTCGCCCCGATTCAGTTTCACCGCCACCAACGCGCCACTCGGATAGCTTTGGTTCGCGCGGTGCCAGTCCTTGCGCAGCGTCAGCAAAAGATGTCCCGCCAGATAGCCGACCACATCGCAATCATTAGGCAGGTTCAACGGTTTCGCCCCGCCTTCGGACGACACCTGCAAATACGTCTTGGTGTAAAAACCGTCCGACGCTTCAATCAAATCAATCGGCGAACCCTGCGGATCGAGGTAACGCCACGCGTTTACCATCATCGCGCCTTTATCGATTTGGTACGCCGGCAGGCTTTCCTCGAAACTCTTGCCGCGTTCCACCAGCCACACTTCGCGCGGATAGCCCGATTCGGTCAACTGGCGTTCGTCCCAAGCCGGACACACCCACACGCTGTTTTCATCGCGCCACGACACATGGTTTTTGCCTGCCGGAAAGTGAAAACCGCCCTCTACCAATTCCCCTGCTTCCAAATCCACTTCCAGCGTATACGCCGTATCGCCGCCCGATTTGTTCAAAGTCAGCAGCGCGCGGTTGGGCTGCTCCACCAAGTGCGACACGCCGCCCAAATACACATCGTCGCCGAGCAACTCATCGAAATCCGCCACCGAAAACAGGATTTTCCACTCGGGATAGCCGGAACGGTAGGTCGCCGCCGTACACATGCGGTACACGCCCTTCGGATATTCCGCATTCTGATGGAAATGGTACATCCGCGCGCGGTGTTCCTGACAAAACGGAATCTGCCGCGTGTCCTGCATTTGATTCAAAATGCCGTCTGAAAGTGCGCGCGCCTTGTCGTTTTCTAAAAAACGCGCGCGCGTTTCGGCATTCGCTTCAGCAGCGAAGTTTTGCGTTTCGGCGGAATCGAGGTTTTCAAAATGGCGGTAGGGGTCGGGGTAGGATTTCATCGGGGTCCTTGAGGGTCGGGCAGGTCTTTGTCATCGGGGAAATGCCGTCTGAAACGGGGTTCAGGCGGCATTTCTGCGGCGGCTTTCCGTTGCGGTCAGCGGTGCAGGCGACGCACCAGAATATGCGGGTTTCGTCCGTTGCTGCGGTAGTCTTTGCGCCGCGTTTCGGGCAGCTCGTCTTCCGATGCCGTCTGAAAGCCGCGTTCGGCAAACCATTCGCCGGTATTTGTGGACAGTGCGAACAGCCTGCTTATGCCTATGCCGCGCGCCTTATCGATAATGTGGGCAAGCAGGCGTTCGCCGTAGCCGCCGTCCTGTGCCTGCGGCGAGACGGCAAGGCAGGCGATTTCGCCGCAATCGGCTTCGGCAAAGGTTTTGAGTGCGGCACAGCCGTACAGGTTGCCGTCGTGTTCGAGGATGGAAAATTCGGAAATGTGGTTTTCGAGGTATTCGCGGCTGCGGTGCAATAGGATGCCCTGTTCTTCCAGCGGGCGGATGAGGGCGGCGATGTGCGGGATGTCGCCGCTGTGCGCCTGCCGGATGGAGACGAAGGCTTCTTTGGCAATGGACGTGCCGATGCCGTTGCGGGTGAAGAGTTCTTGCAGCAGGCTGCCGTCGGCGGCCCCGTTGAGGATTTGGACGCGATGCACGCCGCCTTCGAGCGCGGCAACGGCGGACGAAATCAGTCGTCGGGTTTCGCTGGCGGCGTGTTCCGCCAGCGATTGCGCTTCCTGTGCCGAGAGGGTTTCGGCGAGCGTGCCGTCGGGGCGGGAAATGCCGTCTGAAAGGGTCAGGTAAACGAGTTTTTCGGCTTGAAGCGAGACGGCGACGGAAGCGGCGGCCTGCACCATATCGAGATTGAAGGTTTTGCCGCCGTAGGAATGCCCGAGCGGCGGCATCCAGACGATATTGCCCGCGTCGAGTTGGAAACGGAGGGCGGCGGTGTCGGTTTTGCGGATAACGCCCGCGTATTCCATATCGGTTCCGTCAATCACGCCTATCGGACGGGCGGTCAGGAAGTTGCCCGATACGAGCGGGACGGAAGGCGCGCGCGCGAATCCTGAAACGCTGCCGCACAATGCGGCTTCAAAACGGCTGCGGACGGTGCCGGCAAACTGCTGCGCCTGTCCGAGCGAGGTTTCGTCGGTAACGCGCAAACCCCGGCAATAATGCGGCGTGCGGCCTTGCGCGGCGGCGAGGCGGTCGAGGAAGTGGTACGCGCCGTGGATGAGGACGAGTCGGATGCCCAGTTGCGACAACAGCCCGATGTCGGCGGCGAGCTTATTTAAGGTGCCGCCTTCGAGCAGGCGGCCGTCTATGCCGGCGACCAGTGTCGTGCCGCGCATTTGGCGGATGTAGGGGGCGGCTTCGCGGAAGTGGGCGACAAAGCTGTCGGGCGCGTTCATAGGATGAAGAGGTAGGAAAGCTGCATAATGAGGACGATAAGTGCGAACAGGGTTGCAATAGTCCAGTTGAGCCCTTCCTGACGGGCGGGCGGTACGGAAACCTGCGGTGCGGCGGCAGGTGCGGCAGCGGCGGTTGCGGGCGGCGTATCGTGCAGGGTTGTACCGCCGTTGAGGATATCGGCGATTTCGTCGCGGGAAATCTGTTTCTTGCTAATGGCGTGCGTGCCGATGCGGTGGACGAGTTTGACATCCGAAACAGCTTCGGGCAAATCGTTGAATATAGGTTCTTTCGTGCTTGCCAGATGGTCTTTGGCTTTAAACAGCCCTTCGCATTTTTGGCAGACGACGAAGCCTTGGGCGACGTTGAGCTGGGTTTCTTTGACCCAGAGGCGGGTTTTGCAGTGCGGACAGAAACAGGCGGGCATGATGTTTTCTCGGTGTGTGTCGGTTTGATGCCGTCTGAAGCGGCAGGTGGTTCGGACGGCATATGCTTTATTTTTATTCTACGCCGTACTGCCGGCGGTAGGTGCGGACGGGTTCGAGGAACTGTCCGAATTCGGGGTTGTTTTGCAACAGGATAAACAAATCGTTCAGGCTGGCGATGGGGGCGACGGGCAGGCCGTATTGTTTTTCCACTTCCTGAACGGCGGACAATTCACCCGTGCCTTTTTCCATGCGGTCGAGCGCGATGGCGACACCGGCGGGGGTTGCACCCTCCGCTTCAATCAGTTTGATTGATTCGCGTACGGATGTGCCGGCGGAAATCACGTCGTCGATAATCAGCACGCGCCCTTTAAGCGGCGCGCCGACCAACACGCCGCCTTCGCCGCGGTCTTTGGCTTCTTTGCGGTTGTAGGCAAACGGGACGTTCACGCCTTTTTCCGCCAGCATCATCGCGGTTGCCGCCGCCAAAATAATGCCTTTGTAGGCGGGGCCGAACAGCATATCGAATCGGATGCCGCTTTCAATGATGGATTGTGCATAGAATTTTGCCAGTTGCAGCGTGGACGCGCCGTCGTTGAAGAGGCCGGCATTGAAGAAATAGGGCGACCGCCGTCCGGCTTTGGTGGTAAATTCGCCGAATTTCAAAACATTTTGGGCGAGGGAGAATTTGAGGAAATCTTGGCGGAAATCAGTCATTTTGTGCTTTCTGTCAGATATTGGGACGCAGTTGCGATTCTACCGCCCCGTGCGGCGCGCTTCAACTGCCGCCGCCTTGCCGCAAGGCGCGTTTCAACTGTTTCAACACCTGCCAGTTTCGGGCTTTGAGTTCGGGTTGGCGCAACAGCCGGGCGGGATGGTCGATGATGAAGAAGGGACGGCTGCCGCACAAAGTTTCAATCATCGCCTGCCGTTCCAGGTTGACAAACGCCTGTCCGAGGAATAGGACGGCGGGGGCGCGGCAGCCGTCGAGTTCCCCGGCGATTTGACCCAGCGCATCCGCGACGGCCTGTTCAGACGGCATCGGGTTACCGACGGCGGCGGTTTTCACCCAACAGGTTTTGTGGACATAGGCGGCATCCAGTCCTGCGGCTTTGAGGATGTTGTCGAGCAGGATGCCCGCTTTGCCGTGGAACAGTTGCCCGTAAACCGCATCCTCGATCGGCGGACACAGGCTGACGACGGCAAGCTTGGTAATGCCCGAAGCGGCGGGAACGGGGGCGATGCCGTCTGAAAGGCCGGGCGGGGGCGTTTCGGTTTCAGGCGCGGGTTTGCGCGTATGTACGGCGGCGGTTTCCAACGCTTTCATCGTTTCGAGCCGCGCCTGAACGTTATGGGGTTGGGAAGGGCGGATCGTGGCGGCGCGGACGGTTTGGGGACGTGCCTGTGCCGGGGTTGCGGGTGTGTTTTTGGGCGGCAGGACGGCGGCGGCCTGTTTCAGCCACATCGGACCCAAGCCCAAAGCCTCGTGCAGGTGGAGGTAGCGCGCGCTTAACATATTTTCTCCATTAAGACGGCATCTTCGGTTTGCCCGTCGGCGGCGCAGTAATAGTTTTTCCGCCTGCCCGCAATGCTGAAGCCGTGTTTGGTATACAGTGCCTGTGCGGCGGCGTTGCCTGCGCGGACTTCGAGCAGCAGGCGTTGCGTGCCTTCGGGCAGATGTGCGTACCAATATTCGAGCAGGGCGGACGCAACGCCCCGTCGGCGGCATTCGGGCGCGGTGGCAATCAGGTGCAGTTCGGATTCGTCGGGCAGGTTCTGCCAAACGATAAAGGCGGCAATCCTGCCGTCTTTTTCCGCAAGGAAAACCTGTTCGGACGGCGAAACAAGCGCGGACTCAAATTGGCGTTGCGTCCACGCGGACGGGTTGCAGACGGTATCGAGCGCGGCCAGTGCGGCGCAGTCGGACGGTAAGGCTGGGCGGATGTTCATGTTCGTGCCTTCCGTTCCGCCTGTTCTTTGGCAGTCAGGGCGATTTTGTTGCGGACGTAGAGCAGTTCGGCGTGTGCCGCGCCAGTTGCGGGATAGCCGCCGAGGGCGAGCGCGAGAAAATCGGCGGCGGTCGGCATATCGGGTTTGCCTGAGAAGGGCGGACGGTTTTCCAGTGCGAACGCACTGCCGATGCCGTCTGAAAAGACGTACCCCTCGGGGAGGGCAATGTCTGCCGCCCTACCGACTTGATAATCGCTCAAACGGCGGCGGTTCAGCGTGTCGAACCACGCATAAAACACTTCGCCCATACGCGCGTCCGCAGCGGCGAGTATGCAGCTTTGCGGCGGCGGCAGCGAGGCGGCGGCATCGAGCGTGGGGATGCCGATTAAAGGCGTGTCGAACGGCGTTGCCAAACCTTGCGCCACGCCGATGCCGATACGCAGTCCGGTAAACGCGCCGGGGCCTTTCGCATAAACAATCGCCCCCAAATCGGCGGCGGTAATGCCCGCATTTCGGAATAGGGTGCGGATTTCCGGCAGGATCAGTTCGGACTGGCGGATGCCGACTTCCTGATGGAACAGACGGATTTCGCCGTCGGCGCGCAGCGCGAGCGACAAATAGGAAGTTCCGGTATCGACGGCGAGGACGGGGCGGTTGAAATCGGCTTGCATGGTGTGGTTCTCGTTGGTTCAGACGGCATTATATAGTGAAATCGGCTTGCCTGCCGTGTCGTCGTGTCCTAGGGCGGTATGGCGCAAAAATGCCGTCCGAACGGTAAATTATCGTGTTCGGACGGCATTTTTCAAATACTACTGTTTGTCGGCGATGCCGATTTCGTGAACCTTTTCCCCTATCTTCACGGTTGCCGAGCCAGCGATTTCTTGGGCGCGGCCGCCGAAAAGGGCGAGGCGGTAAGTGCCTTTCTCTTCGCCGCCGTAGCGCGTGTCGCCCAAAATGACGGCGTGTGATTTTTCATCTGCTTTGAGTTCGGCGGAGGCAAGCTCAACATTCTGCTCGGGTGTTTTCAGGTGTTCGATTTTGCCGTGTCCCTGTTTGGCGGCGAAATCTATGGTATAGGTCAGTTTTCCGCCGGCATCGTCGGAGCTGAATGCTTTGCCGTGATACTCGGCTTTGCCGTCAGGCAGTTGGTTGAAGGCGGTATGTTCTCCGCCCAAATCGCTGACAAGGAAGGAGCGTTGGTTTATCAGGCTGTCGATTTTGTCGGGGTTGTTGATTTTTTCAATCCGTAGGGCAACGACGGCGGAGTGATCCTGTTTGTATATTTGAAATTCGCCGCTTGCCAGTGTGATGGTTTGTCCGTCCACTTCGATTTTTTGCACGAAGTCGAAGCGGCTGATTTTGTCGTTCTTCAGTTTGCCCGTGTTGAGGCTGTTGTCTTTGCCGCCGGCTTTGAAAGTTTTTTCCGCACCTTGTGCCGACAGGGTCAGTGTTCCGTTTTGGGGAATGGAGGCTTCCAATGTTAGGGATTTCAAACCTTTGTCTTTATGGTCGAGCGGCGCGGTTAATGCATCGGCAAGCCCCGTGCCGATGTCGGCGGCGACACCACCGCCTCCGCCCCTCCGCTGCTGCAGGCGGTCAGAATCAGGGCCGGCGGTCAAAGAAAGGCAGCAGAAGGTAGTTCGGTTCACAGGTTTACTCCTAGTCATACACAGAATAGATAATATATAAACGTTTTGGTTATGGTATCTTTTTTTGCATACTGCATCAATGAGGCAGGTCAGAGAAGCAAAAATCAAATGCCGTCCGAACGGCGTTCAGACGGCATTTTGTTTACAGGCAACCTGTTATTTGACGATTTGGTTCAATTCGCCCTTGGCATAACGGCTTGCCATTTTTTCCAACGAAACAGGTTTGATTTTGCCTGCCTGACCTTCGCAACCGAACGCAAGATAACGGTCGAGGCAGATTTGCTTCATCGCTTCAATGGTTTTGCCCAAGTATTTGCGCGGATCAAAGTCGGACGGGTTTTCGGCAAGGTAGCGGCGTACCGCGCCGGTGGAAGCGAGGCGCAGGTCGGTATCGATGTTGACTTTGCGCACGCCGTGTTTGATGCCTTCGACGATTTCTTCAACCGGCACGCCGTAGGTTTCGCCGATATTGCCGCCGTATTCGTTGATGACTTTCAGCCATTCTTGCGGAACGGAGCTGGAGCCGTGCATCACGATGTGTGTATTGGGCAGGGCTTGGTGGATTTCCTTGATGCGGTCGATACGCAATACGTCGCCTGTGGGCGGACGGGTGAATTTGTATGCGCCGTGGCTGGTGCCGACGGCAATCGCCAATGCGTCAACGCCGGTATCTTTAACGAAACGCACGGCATCTTCAACGCTGGTGAGCATTTGGTCGTGTGAGAGTTTGCCTGCCGCGCCCACTCCGTCTTCTTCGCCTGCTTCGCCGGTTTCGAGGTTGCCCAATACGCCGATTTCGCCTTCGACGGACACGCCGCAGGCGTGGGAGAAGTTGACGACGGTACGGGTGGCGTTGACGTTGTATTCGTAAGAAGAAGGGGTTTTGCCGTCTTCGAGCAAAGAGCCGTCCATCATCACGGAGGAGAAGCCCAGTTGGATGGAGCGTTGGCACACGTCGGGCGATGCGCCGTGGTCTTGGTGCATCACGACGGGGATGTGCGGAAATTCTTCGACTGCCGCCAGAATCAGGTGGCGCAAAAACGGCGCGCCCGCGTATTTGCGCGCACCTGCGCTCGCCTGTACGATGACGGGCGCGTTGACTTGGTCGGCGGCTTCCATAATGGCGCGCATTTGTTCGAGGTTGTTGACGTTGAACGCGGGCAGGCCGTAGCTGTTTTCGGCGGCGTGGTCAAGCAGTTGGCGCATGGATACGAGTGCCATTTGTGTCTCCTTGGGCAATAGGTAAATAAGGCGGATTATAATGTTTTTTACGGCAAAAAACCATAAACGGCTCATTGATTTTATATTAACGATAACGGCGGGCAGATGGGGCGGATTTTGGGCGGTTCGGGATTTTGGTGTGTTGTTTATGATAATGTTTTCACTGGTTTTTTGATATTTGTGTGGGACGGTTATGGTTTTGGACGGGTTTGCGGCGTATTTTGACGCTTATTTGGAAAACATCGTGCGCGAGGGCAAGTCGGAGCACACGGTTGCGGCATACCGGCGCGATTTGGAAGAACTGTTTGCACTGTTGGCACAAATGCCGTCTGAAGATGCAGGCGGCGTGCCGCAGGACTTGTCGCGGCGCGATTTTACGGCGGCGTTGCGGCGGCTGTCGCAGCGCGGTTTGGACGGTCGGACGCTGGCGCGCAAGCTGTCGGCGTGGCGGCAGTATTGCGCCTGGCTGGTCAAACGCGGGCTGATGCGCGCCGACCCGACCGCCGACATCAAACCGCCGAAGCAGCCCGAGCGCGTACCCAAAGCCCTGCCGCAGGAATGGCTGAACCGGATGTTGGATTTGCCCGTGGACGGCGGCGACCCGCTGGCGGTGCGCGACCACGCGCTGTTCGAGCTGATGTACGGCAGCGGTTTGCGCGTGAGCGAGATACACGGCTTGAATGCAGATGATGTATATTTGGACGAAGCGTGGGTACACGTTACCGGCAAAGGGCGCAAGCAGCGTCAGGTTCCGCTGACCGGCAAAAGCGTGGAAGCCTTGAAAAACTATCTGCCGCTGCGTCAGACGGCATCGGACGGCAAAGCCCTGTTTACCGGCAGGAACGGCACGCGCCTGAGCCAACGCCAAATCCAAAAACGCCTCGAATCGTGGGCGGCGCAATACGGCGACGGCAGGCACGTTTCGCCGCATATGATGCGCCACAGCTACGCCGGCCACCTGTTGCAGGCTTCGCGCGACATCAGGGCGGTGCAGGAGCTGCTCGGACACAGCAGCCTTTCGACCACGCAGATTTATACCAAGCTCGATTTCGACCACATCGCCCGCCTCTATGACGAAGCCCACCCGCGCGCCAAGCGGCAGGACGAATGACGTACGGCAAAATCAGCCGTCAGCCGCACGCTCTTGATATATAATTGACCGTTGCACCCGGACGACACATAAAAAAGACACACCATGAACCCAAGCCCCCTACTCGACCTGATTGACAGCCCGCAAGATTTGCGCCGCCTGGACAAAAAACAGCTGCCGCGCCTTGCCGGCGAGTTGCGCGCCTTTCTGCTGGAATCTGTCGGGCAGACCGGCGGGCATTTCGCCAGCAATCTGGGTGCGGTCGAACTGACCATCGCCCTGCACTATGTGTACGACACGCCCGAAGACAAGCTGGTGTGGGATGTCGGACACCAAAGCTACCCGCACAAAATCCTGACAGGCAGGAAAAACCAGATGCACACCATGCGCCAATACGGCGGTTTGGCGGGTTTTCCGAAACGTTGCGAGTCCGAGTACGACGCGTTCGGCGTGGGGCATTCCTCCACCTCCATCGGCGCGGCTTTGGGCATGGCGGCGACGGACAAACTCTTGGGCGGCGACCGCCGCAGCGTCGCCATCATCGGAGACGGCGCGATGACGGCGGGGCAGGCGTTTGAAGCCTTGAATTGCGCGGGCGATATGGATGTGGATTTGCTGGTCGTCCTCAACGACAACGAAATGTCGATTTCCCCCAACGTCGGCGCGTTGCCCAAATATCTTGCCAGCAACGTCGTGCGCGATATGCACGGACTGTTGAGTACCGTCAAAGCGCAAACGGGCAAGGTATTAGACAAAATACCCGGCGCGATGGAGTTTGCCCAAAAAGTCGAACACAAAATCAAAACCCTTGCCGAAGAAGCCGAACACGCCAAACAGTCGCTGTCGCTGTTTGAAAATTTCGGCTTCCGCTACACCGGCCCCGTGGACGGACACAACGTCGAGAATCTGGTGGACGTATTGAAAGACTTGCGCAGCCGCAAAGGCCCTCAGTTGCTGCACGTCATCACCAAAAAGGGCAACGGCTACAAACTCGCCGAAAACGACCCCGTCAAATACCACGCCGTCGCCAACCTGCCTAAAGAAGGCGGGGCGCAAATGCCGTCTGAAAAAGAACCCAAGCCCGCCGCCAAACCGACCTATACCCAAGTATTCGGCAAATGGCTGTGCGACCGGGCGGCGGCAGATTCCCGACTGGTTGCGATTACCCCCGCCATGCGCGAGGGCAGCGGACTGGTGGAGTTTGAACAACGATTCCCCGACCGCTATTTCGATGTCGGCATCGCCGAGCAGCACGCCGTTACCTTTGCCGGCGGTTTGGCGTGCGAAGGCATGAAGCCCGTCGTGGCGATTTATTCCACCTTTTTACAACGCGCCTACGACCAACTGGTGCACGACATCGCCCTGCAAAACCTGCCCGTTTTGTTTGCCGTCGACCGTGCGGGCATCGTCGGCGCGGACGGCCCGACCCATGCCGGCTTGTACGATTTGAGCTTCTTGCGCTGTGTGCCGAACATGATTGTTGCCGCGCCGAGCGATGAAAACGAATGCCGCCTGCTGCTTTCGACCTGCTATCAGGCGGATGCGCCCGCCGCCGTCCGCTATCCGCGCGGCACGGGTACGGGCGCGCCGGTTTCAGACGGCATGGAAACCGTGGAAATCGGCAAGGGCATTATCCGCCGCGAAGGTGAGAAAACCGCCTTCATTGCCTTCGGCAGTATGGTCGCCACCGCATTGGCGGTTGCCGAAAAACTGAACGCCACCGTCGCCGATATGCGCTTCGTCAAACCGATAGACGAAGAGTTGATTGTCCGCCTTGCCCGAAGCCACGACCGCATCGTTACCCTTGAAGAAAACGCCGAACAGGGCGGCGCAGGCGGCGCGGTCTTGGAAGTGTTGGCGAAACACGGCATCTGCAAACCCGTTTTGCTTTTGGGCGTTGCCGATACCGTAACCGAACACGGCGATCCGAAAAAACTTTTGGACGATTTGGGTTTGAGTGCCGAAGCGGTGGAACGCCGGGTGCGCGAGTGGCTGCCGGACCGTGATGCGGCAAATTAAACCGCTTGACCGCGCCGTCGTTATCGGGCGGCGTTTTTAAACGGCGTTTGTTTCTGCGGTTTTTTTATTGAAACCCCGCAGGCGGCAGGAAGGGTTCGGGCGGCGGCTTTCGGGCGGTGCTTGGTGTGCCGTTGCGCGTTTGGAAATTTATTCCGCTTGTCCGTATAACGGCGGCGGTGCCGTCTGCCGATACAAGGCAAAATGCCGTCTGAAACGCTTCAGGCGGCATTTTTCGGCGTGAGGGTTTTAGGCTTCGACAATTTTGCCGCGCAGGGAAAAGGTGTAGGCTTCGGTGATTTCCAAATCGATCATTTGGTTGATCATGTCGGGCGTGCCGGTAAAGTTGACGACGCGGTTGTTGGCGGTACGGGCTTGGAGCTGGTCGGGGTCTTTTTTGGAGATGCCTTCGACCAGGCAGCGTTGAACCGTGCCGATCATGGTTTGGTTGATGCGGGCGGTTTCGGCTTCGATGACTTCGTTCAAGGCTTCGAGGCGGCGCACTTTTTCTTCGTGCGGCGTGTCGTCCGGCAGGTTGGCGGCAGGCGTGCCGGGGCGCGGGCTGTAAATAAACACGAAGCTCAAGTCGAAGGCAATGTCTTTCACCAGTTTCAAGGTTTGCTCGAACTCGCGTTCGGTCTCGCCGGGGAAACCGACGATGAAGTCGCTGCTCAGGCACAAATCAGGACGGATGGCGCGCAGTTTGCGGATGATGGATTTGTATTCCAAAGCGGTGTAGCCGCGTTTCATCGCGCTCAATACGCGGTCGGAACCGCTTTGAATCGGCAGGTGCAGGTGGGAAACCAGTTTGGGCAGGTCGCGGTAGCACTCGATAATCGAGTCGGTAAACTCGCGCGGGTGGCTGGTGGTGAAGCGCATACGTTCGATGCCGGGGATTTCGTGGACGATACGCAGCAGGGTGGCGAAGTCGCAGATTTCGCCGTCGTCCATTTCGCCGCGATAGGCATTGACGTTTTGTCCCAAGAGGTTGATTTCTTTCACGCCTTGCTGGGCAAGGTTGGCGATTTCGGTCAATACGTCGTTGAGCGGGCGGGAGAATTCTTCGCCGCGCGTGTAGGGGACGACGCAGAAGGAGCAGTATTTGGAACAGCCTTCCATAATCGACACAAATGCCGCGCCGCCTTCGACGCGGGCGGGCGGCAGGTGGTCGAATTTTTCGATTTCGGGGAAGGAAATATCGACTTGCGACAGCCCGCTGGTTTCTTTGTCCACAATCATTTTGGGCAGGCGGTGCAGCGTTTGCGGGCCGAAAACCACGTCAACATAAGGCGCGCGTTTGATGATGTTTTCGCCTTCTTGCGAGGCGACGCAGCCGGCAACGCCGATGATGAGGCCGGGGTTTTTTTCTTTGAGCGGACGGACGCGCCCCAAGTCGGAGAACACTTTTTCCTGTGCTTTTTCGCGCACGGAACAGGTGTTGAACAAGATGATGTCGGCTTCGTCGGCTTGGGTAACCTGTTCGATGCCGCCGTGTTCTTCGGCAAGGACGGACAGCATTTTTTCGCTGTCGTACTCGTTCATCTGGCAGCCGAAGGTGCGGATAAATACTTTTTTCATGGTTTGTGTCTTTCTCGGGCAGCCGTAATCGCGGGGCTGATGGTTGTTGGAATGAAAAAATTTCAGACGGCACGACGATGCCGTCTGAAAATCGGTGCGGATTATAGCACGATGTGGGTTTGGGAGGCAAAATATTGTTTTAAAATATGAATTTAATCGGTCGGAACGGCTGTATAATGTTTGGCTTTAACGGGAGGTGTGTGTATGGGCGGCATTGCTGCTGTGTGCGTGTACCAGCAATTTCGGCGACAGGGAACATCAGTTCCTGCGTTATAGTGGATTAAATTTAAACCAGTACAGCGTTGCCTCGCCTTGCCGTACTATTTGTACTGTCTGCGGCTTCGTCGCCTTGTCCTGATTTTTGTTAATCCACTATATCAGACGGAAGAGGGAATCGCACAAACGGTTGTTAAAGGCAAAACGACCCGGGCGGAGGTAGAGGCACGTTTCGGGAAGCGCAACCCTTTCGGCTGTTATGCCTATCACGAGGTCAGCCTGCCGATTTATAATTTTTTGCCGACCAATTTCATCTATATGAAATCGGAGCGGCGGCATTGGGAATGGTGCGTGGATTACGACGGGGAGGGAGTCGTCCGGGACTACCGCTTTACACATATAAAGAGGAAAAAGACGAGCGTTCCGTCATCCGGGATACGGTTGGCGTAATCCGCAAAGAAGCGGGCAAATCCTTGTCGCAACCTGAAAAATGATAAAATGGGGCTTTCTGCTTCCAAGCCCGAAACCTGCCGTTCAGACGGCATTTGAGGATAAATATGAACCGTAACGAAATTTTATTCGACCGCGCCAAAGCCATCATCCCCGGCGGCGTGAATTCGCCCGTGCGCGCATTCGGCAGCGTCGGCGGCGTGCCACGCTTCATCAAAAAAGCCGAAGGCGCGTATGTTTGGGACGAAAACGGCACGCGCTACACCGATTATGTCGGCTCTTGGGGGCCTGCGATTGTCGGACACGCGCATCCCGAAGTCGTCGAAGCCGTGCGCGAAGCTGCGTTGGGCGGTTTGTCGTTCGGCGCGCCCACCGAAGGCGAAATCGCCATTGCCGAACAAATTGCCGAAATTATGCCGTCTGTCGAACGGCTGCGCCTCGTCAGCTCCGGCACGGAAGCGACGATGACTGCCATCCGTCTGGCACGCGGTTTTACCGGCCGCGACAAAATCATCAAATTTGAAGGCTGCTACCACGGCCATTCCGACAGCCTGTTGGTGAAAGCAGGCAGCGGTCTGCTTACCTTCGGCAATCCTTCTTCCGCCGGTGTGCCTGCCGACTTTACCAAACATACTTTGGTACTCGAATACAACAACATCGCCCAACTCGAAGAAGCCTTTGCCCAAAGCGGCGACGAAATCGCCTGCGTGATTGTCGAACCCTTCGTCGGCAATATGAACCTCGTCCGCCCGACCGAAGCCTTTGTCAAAGCCTTGCGCGGATTGACCGAAAAACACGGCGCGGTGTTGATTTACGACGAAGTGATGACCGGTTTCCGCGTCGCGCTCGGCGGCGCGCAGTCGCTGCACGGCATCACGCCCGACCTGACCACGATGGGCAAAGTCATCGGCGGCGGTATGCCGCTTGCCGCGTTCGGCGGACGCAAAGACATCATGGAATGTATTTCCCCGTTGGGCGGCGTGTATCAGGCAGGTACATTATCAGGCAACCCGATTGCCGTCGCCGCCGGCTTGAAAACGCTGGAAATCATCCAGCGCGAAGGCTTCTATGAAAACCTGACCGCCTTGACACAACGCCTTGCCAACGGTATTGCCGCCGCCAAAGCGCACGGTATCGAGTTTGCCGCCGACAGCGTGGGCGGTATGTTCGGTCTGTATTTCGCCGCACACGTGCCGCGAAACTATGCCGATATGGCGCGCTCCAATATCGACGCTTTCAAACGCTTCTTCCACGGCATGCTCGACCGCGGCATTGCCTTCGGCCCGTCCGCTTATGAAGCAGGTTTCGTTTCCGCCGCGCATACGCCCGAGCTGATTGACGAAACGGTTGCGGTTGCGGTTGAAGTGTTCAAGGCGATGGCTGCATGATGTTTTGACGGACAGAGTTTCTCTGTTCGATTTGTTTGGCAGATTGAAGTAAGAATGCACACCGCCGTCATTTCCGCGCAGGCGGGAATCCGGACCTTTCAGTTTCTGTAATGATTGAAAATAACGGCAAGCCCGACCTTCCGGATTCCCGCCTGCGCGGGAATGACGGGCGTGTACATTTTTGATTTCAATCTACTGTAAAAATGCCGTCTGAAATATATAGTCAATTAAAATCAAAATAGGACAGTAGTGCATCGTCAAATCGGGCGTAATCAGACAAAACGGTTCGCAGATACCGCTTAATATTCGCCCACACTTTCTCAATCGGGTTGGGCTCAGGCGAACAAGGTGCGGGAGGCAATACCTTATGTCCCAATTTTTCCGCCGTTCCCCGTAAGGCACCCATACGGCGAAATCGCGCATTATCTGAAATAATCACCGATTTTTGAGCCAATGCGGGCAGTAGGCATTGCTGAAACCGCGCTTCAAAAAAGACCCCGGCCACCGTATTTTGACAAACCATCGGAGCAATCGGCCGGTTGCCGACTTGTGCGGACACCAAAGATAAGCGCCGGTATCTTTTCCCACTTATCCGCGCTTTCGCCATTTGCCCTTTCAGGCTGCGGGCATAGGGGCGGAACAGGCGGCGGTCGAATCCTGTTTCATCCGGACAAACGCGTTGGCAGTCGGAAAATCCGGCCGGCCGTGTCAAATAATGCGTTACTTTGGCCGGGTCTTGTCCTTTGTAAGCGGCGGTCTTTTTTTGCGCGCCATCCGCATCTGTTTGGGCGCATGGCAAACGGCGGCTGCCGTACAATCAAAATGTTTGGCGATTTCATGCAGACAGGCATCCGGATGCCGCCCGACATATCGAGCCGGTTTTTGCCTATCCGATTTGGCGGCATTTAGGCCGGTAACTTGATGTTTTAGGCTGCCTGTTTGTTTTTTAAGGCGAATCCGCAGGTAAAGCGTGTTTCTTGACAAGTTAAACGTTGCTGCGGTTTGGCCGGTGTTTTTGCATTGTCCGTAATATAGCGGATTAACAAAAACCGGTACGGCGTTGCCCCGCCCCGGCCCAAAGGGAACGGTTCCCTAAGGTGATGGAGCGCCGGGCGGATCGGTTCCGTACCATTCGTACTGCCTGCGGCCCGCCGCCTTGTCCTGATTTTTGTTAATCCGCTATGGTTTAAAGCTTTGTTTCTTAAGTCCGCAGAGTATGCCATGGTTAAACCTTCAACGTCGAGTGTTGTACTATTTTGTTTTTAATTGAATATAAATAGCGTTTCAGACGGCATTGTTTGTTTCTTATTGCGCTTCGGCTTTCGGGGCGGAAATCAGGAAGTGTTCGCGGTAGTGGCGCATTTCTTCGATGCTCTCCAAAATGTCGTCCAATGCCTTGTGCGAACCGCGTTTGACGACGCTTTTGGCAATGGGCGGATTCCAGCGTTTGGCGAGTTCTTTCAGCGTGGAAACGTCGAGGTTGCGGTAGTGGAAGTAGTTTTCCAGTTTCGGCATATATTTGACCATAAAACGCCGGTCTTGGTGGATGGAGTTGCCGCACATCGGTGTGGCGCGTCCGGGTATCCATTCCGACATAAAGTCCAGCAGTTTCTGTTCGACTTCGGCTTCGGTATGCGACGATTCGCGCACGCGCTGCGTCAGCCCCGTCCTGCCGTGTGTGGCGGTGTTCCACTCGTCCATATTGTCGAGCAGATCGTCGCTTTGGTGGATGGCGTAAACTTCGGATTGCGCCAACACATTCAAATCCGAGTCGGTAATAATCATCGCGACTTCGATAATGCGGTCGGTTTCGGGATTCAGCCCCGTCATTTCCATATCGAGCCAGCAGAGGTTGTTTTTGTCCTGCACGGTGTTTCCTTTCCGTTTCAGCGTTTTACGCCGCTCAAGCGCGCCCAGCCTTCGTCAGTTTCCGCCGGGTCGAGATCGAACCATTGGCTGTAAATGCCGCCGAGTTCTTCGGCCTGTTCATCCAACAAACCGGACAACACGATGCGTCCGCCCTGTTTGGTGCGGGCTGCAAGCATTTCGCCGAGCATACGCAAAGGGTTGGCGAGGATGTTGGCGACGACGACATCGAATTGCCCTTGAGGCAGACTGTCGGGCAGGAAGAATTGTGCATCGACGTTGTTCTGTTCGGCGTTGTCCCTGCCGGCGCGGACGGCCTGTTCGTCAATATCCACGCCGACGGCGGAACCTGCACCGAGTTTGAGGGCGGCGATGGTCAGGATGCCCGAACCGCAGCCGTAGTCGAGGACGCTTTCGCCGTTTTTGAGTTGCGTATCCAGCCATTTGAGGCAGAGGCGCGTGGTCGGGTGGCTGCCGGTGCCGAAGGCGAGTCCGGGATCGAGGCGGAGGTTGACGGCGCAGCCTTCGGGGGCTTCGTGCCAAGAGGGGGTAATCCACAGGCGGTCGGAAATTCGGATGGGGTCGAATTGCGATTGCGTGAGGCGCACCCAGTCTTGGTCTTCGATGGTTTCGCCGGTGTATGCCAAGTCTTTTAACCCGCATTCTTGTGCGGCGGCATCGATGACGGCGGCGGCTTCGTCGTGTTCGCCGAACAGGGCGATGACTTTGCTCTGCTGCCAGATTTGTTCGGTGGGCATACCGGGTTCGCCGAAAATCGCCTGTTCGTTTTGCGTGCCGGCGCAGGCATCTTCGATGGCGGCGGAGAGTGCACCGTGTTCCATCAGCACGTCGGCGAGGCGTTCGGCGACGGCATCGTTGACGTTGACGGTGATTTGTTGGTAGGGCATAACGGGCTTTCTTGGAAATATCGAAATCGGTTTCAGACGGCGGGGCAAGGGAAATGCCGTCTGAACGCGGAAGGGCGGCTTCAGACGGCATATCGGCGGCGGCTTATTTGTCCTGTTTGGTTTTGCGCGCTTCCAGCCAGTGCTCCAGGTAATGGATGCTCACTCCGCCTTCTTGGAAACCCGCATCGGCGAACAGGTCGCGGTGCAACGGCGTATTGGTTTTGATGCCGGTTACCGCCAGCTCGGCGAGTGCGACGCGCATTTTCGCCATTGCCTGTTCACGCGTTTTGCCGTGTACGCAGATTTTGCCGATCAGGCTGTCGTAGTACGGCGGGATGCGGTAGCCTTGGTAGATGTGGCTGTCCACGCGGATGCCGAAGCCGCCGGGCAGGTGGCAGCTTTCAATCGGGCCCGGGCTGGGGATGAAGTTGTACGGGTCTTCGGCATTGATGCGGCACTCGAAGGCGTGGCCTTCGATTTTGATGTCTTTCTGTTTGTATTGCAGCGGCAGGCCGGATGCGATGCGGAGTTGCTCTTGGACGATGTCCACGCCGGTAATGAGTTCGGTAACCGGATGCTCGACCTGAACGCGCGTGTTCATCTCGATAAAGAAAAATTCGCCGTCTTCGTATAAAAATTCAAACGTGCCCGCGCCCCGGTAGCCGATGCGTTTGCACGCGTCGGTACAGGCTTTGCCGATTTTTTTGCGTGCCTCTTCATCGATAAACGGGGCGGGTGCTTCCTCGATGACTTTCTGGTGGCGGCGTTGCAGCGAACAGTCGCGCTCGGCAAGATAGACGGCGTTGCCGTGTTCGTCGGCAAGCACTTGGATTTCGACGTGGCGCGGGCGTTGCAGGTAGCGTTCCATATAAACCATCGGGTTGCCGAACGCCGCGCCCGCTTCAGCCTTGGTCATTTCGACAGACTGGAGGAGGTCTTCTTTTTTCTCGACCACGCGCATACCGCGCCCGCCGCCGCCGCCCGATGCTTTGATAATCACGGGATAACCGACTTTGTCGGCGATTTTGAGGATTTCGGCATCATCGTCGGGCAATGCGCCGTCAGAGCCGGGGACGCAGGGCACGCCTGCCGCTATCATCGCGTGTTTGGCGGAGACTTTGTCGCCCATCAGGCGGATGGTGTCGGGTTTCGGGCCGATGAAGGTAAAGCCGGACTGTTCGACCTGTTCGGCGAAATCGGCGTTTTCGGCAAGGAAGCCGTAGCCCGGGTGGACAGCGTCCGCGAAGGTTACTTCGGCGGCGGCAATGATGGCGGGAATGTTCAGATAACTTTGCGCAGAAGCGGCAGGACCGATGCACACGGATTCGTCGGCGAGTTTGACGTGCAGGCTGCCTTTGTCGGCTTCGGAATGCACGGCAACGGTGGCAATGCCCATTTCGCGGCAGGCACGGAGTACGCGCAAGGCGATTTCGCCCCGGTTGGCGATTAAAACTTTTTTCAGCATGATGACCTTTCCTGCGGTTCCGGCAACCCGTCCGTAAAAAAGGGTGCGGGAACGCTGAAGGGGGGGAAAGCATTTCAGACGGCATCGGAAGTTTATGCCGTCTGAAAACAGGATTATCCGATGATGAAGAGCGGTTCGCCGAATTCGACGGGCGTACCGTTTTCGACCAGAATTTCTTTGACCGTGCCGGATTTTTCGGCTTCGATTTCGTTCATCAGCTTCATCGCTTCGATGATGCACAGCGTGTCGCCGGCTTTGACCTGTTGACCGACTTCGACAAATGCGGCGGCATTCGGGCCGGGCGCGCGGTAGAACGTGCCGACCATAGGCGATTTTTGAGCGTCGGACAAATCGCGGGCGGCCGGCGCGGCGGCGGGCGCGGATGCCGCAACGGGTGCGGCGGCCGGCGTTACGGCCGGCGCGGCGGCAGGTACGGGCGCGGCGTAAACGGGAGCTGCCGCAGCTGCAATGGTACGGGTAATGCGGACTTTTTCCTCGCCTTCGGTTACTTCGATTTCGGCGATACCCGATTCTTCAACCAAATCAATCAGTTTTTTTAATTTGCGCAAATCCATTTCTGTTCCTTTAAAGGCTGCCGGTGTTCCGGCGGGTTGTTGCGTTGGTTTTTCAGAAAACAGCCGGCTTGCGGCAACGGCGCAAACCGGGCGGAATGGTGTTCGGATACGGTTTTCCTGTGGTGGGAAACGACCGTGAAATTGTGTTCATTTTCCCGAAGTTGTCGGTAAATGTCCAGTAAAATATCAAAAAACGGCGGTTTTTGGGGGAAATGTGCAGGAAGTTTGATTTTGCGCACAAGATGCCCCGAGTCAAGAGTGTTTATTCTAATCTGTTGGTTTTTCGGGCAAAGATGCCGTCTGAAAAAGGGCTAAAGTGCGTATAATGGCGGCTTGCCCGAACGAGAGTGTAAAAATGGATATTTCAGATTTTGACTTTACCCTGCCCGAACACCTGATTGCCCAGCATCCGCCCGAGGTGCGCGGCAGCAGCCGGCTTTTGGTCGCGCTGCCCGATATGCCGCTGCAAGACCGGGTGTTTGGCGATTTGCCCGATTATGTCGAGGCAGGCGACGTTTTGGTATTCAACAACACCAAAGTCATGAAGGCGCGGCTGTTTGGGCAGAAAGACAGCGGCGGCAGGATCGAAGCCCTGATTGAGCGTGTGTTGGACAACCATACCGCATTGGCGCACATCCGTTCGTCCAAGTCCCCCAAGCCCGGTATGGGGCTGGTGTTTGAAGGCGGTATCCGTGCCGTGATGGTCGGACGTGAGGGCGAACTGTTCTGCCTGCGTTTTGAAGGCGGTCAAACCGTTTACGAACTTTTGGAACAGAACGGACACCTGCCCCTGCCGCCTTATATCGAACGTGCCGCCGATGCGGACGACGACAGCCGTTATCAAACTGTTTATGCCAAATATCAGGGCGCGGTCGCCGCGCCGACGGCGGGCCTGCATTTTACGGAAGAACTTTTGCGCCGTCTGAAAGACAAAGGCGCGGTAACCGCAGAAGTAACCCTGCACGTCGGTGCGGGGACATTCCAACCCGTGCGCGTCGATAAAATCGAAGAACACAAAATGCACAGCGAATGGTTTGAAGTGCCGTCTGAAACCGTCGCCGCCGTTGAGGCGGCAAAAGCCCGGGGGAACAAAGCCTGGGCGGTCGGCACGACTTCCATGCGCGCCCTCGAGTCTGCCGCGCGCGCAACGGGATATTTGAAAGACGGACAGGGCGACACCGATATTTTCATCACGCCGGGCTACCGTTTTAATGTTGTCGACAGGCTGGTTACCAATTTTCATCTGCCGAAATCGACGCTGCTGATGTTGGTCGGCGCGTTTTCGGGTATGGGTCATATCCGCGCCGTGTACCGTCATGCGATTGAACGTGAATACCGTTTCTTCAGCTACGGAGATGCGATGGTTTTGGGGCGGAACGAAGGGGGCGGGCTTTAAACTGCTGCTGTCCGTTGCAAGGCAGATGCCGTCTGAACCGTGGTTCGGGCGGTATTTTTATGGATGTCCGGCAGTTGGATAATCCACCGCCCCAAATTAGGGTGCTTAAAGGTCAAAAGAAAGTGAAGGCTATGTGCAACAAAATGCCGTCTGAAACCGCAAAACGGCTTCAGACGGCATTGTTCAACCTGATTCAGGCATCAGTTGCGGTTTTTCAAACGACCGTGCAGCTCTTGAACGCTGTACACACCCAGATAATCCCGGCTTTTCGCGCCTTCGCTCATCGCTTCGCCGCCGGCGGTGGTGGTGTATTGCGGCACGCGTTGCTGCAATGCGCTTTGGCGGATGATGTGGCTGTCGGACACGGATTGCGGATCGCTGGAAACGGTATTTACGACCAGTGCGATTTCGCCGTTTTTCAGCGCGTCGCCGATGTGCGGGCGGCCTTCGGGGACTTTGTTGATGGCCTGCACAATCAGCCCGTGTTCGGTCAGGTATTGCGCCGTGCCGCGCGTGGCGCAGATGCCGTAGCCTAAGGCTTGGAAGTTTTTGGCGGTTTTAATGACGCGTTCTTTGTCTTCTTCGCGCACGGAGAGGAAGATTTTGCCGGTCGGGTTGAGGCGTTCGCCCGCGCCGAGTTGGGCTTTGTAGTAGGCTTCGCCGAAACTTGCGCCCACGCCCATCACTTCGCCGGTGGAGCGCATTTCCGGACTCAAAATCGTATCCACGCCCGGGAATTTGATGAATGGGAACACGGCTTCTTTAACGGCATAGAAATCGGGGACGACTTCTTTTTCCACGCCTTGTTCTTTCAGGGAAATGCCTGCCATGCAGCGCGCGCCGACTTTGGCGAGCGGCACGCCGGTGGCTTTGGAGACAAAGGGGACGGTACGGCTGGCGCGCGGGTTCACTTCCAACACGAACACCACGCCGTCCTGCACGGCAAACTGCACGTTCATCAGTCCGACCACGCCCAGCGCGTACGCCATCGCTTTGGTTTGGCGGCGGATTTCGTCTTGGATTTCTTCGCTTAAGGAGTATGGCGGCAGCGAGCAGCCGGAGTCGCCGGAGTGGATGCCCGCCTGTTCGACGTGCTGCATGATGCCGCCGATAACCACATCTTTGCCGTCTGAAACGCAGTCCACATCGACTTCAATCGCGTTGTTGAGGAAGAAATCGAGCAGCACGGGGCTGTCTTCGGAAACCTGCACGGCTTCGCGCATGTATTTTTGCAAGGCTTCGGCGGAGTGGACAATCTGCATCGCGCGTCCGCCCAAAACATAAGACGGGCGCACGACCAGCGGATAACCGATTTCTTCGGCTTTGACGAGTGCTTCTTCTTCGTTGTGGGCGATGCGGTTGGGCGGTTGGCGCAGGCCTAAGTCGTTCAACACTTTTTGGAAGCGTTCGCGGTCTTCGGCGGCATCGATGCTGTCGGCGGATGTGCCGATGATGTTCACGCCGTTTTCAACCAATGCGTTGGCGAGTTTCAGCGGGGTTTGACCGCCGTAATGAACAATCACGCCCCACGGGTTTTCGGTGCGGACGATTTCCAACACGTCTTCCAATGTCAGCGGCTCGAAATAGAGGCGGTCGCTGGTGTCGAAGTCGGTGGACACGGTTTCGGGGTTGCAGTTGACCATAATCGTTTCAAAGCCCGATTCGCGCAGGGCGAGTGCGGCGTGAACGCAGCAGTAGTCAAACTCGATGCCCTGACCGATGCGGTTCGGGCCGCCGCCGAGAATCATCACTTTTTTACGGTCGGAAGGACGGGATTCGCATTCTTCTTCGTAAGTGGAGTAAAGATAGGCGGTTTCGGTGGCGAACTCGGCGGCGCAGGTATCGACGCGTTTGTAAACCGGATGCAGCTTCAGCGCGTAGCGGTGTTCGCGAACTTCTTTTTCGCTTACGTTCAACAATTGTGCCAAACGTTTGTCGGAGAAGCCTTTGCGTTTCAGACGGCGTAGGGCGGCGTAATCCAAATCTTGCAACTGGCCGTCTGAAACCGATTTTTCTTCCTTCATCAAGTCTTCGATTTGCGCCAAGAACCAAGGGTCGATGGCGCAGATCTCGTGGATTTCTTCCGGCGTGAAGCCCGCGCGGAACGCGTCTGCCACAAACAGCATACGTTCGGGGCCGGGGTTGGCCAGTTCGCGGCGGATTTCCGCTTTGTCTTCGCTGCGCGGATTGAAACCGCACAAGCCGGTTTCCAAACCGCGCAAGGCTTTTTGGAAGCTTTCCTGAATGGTACGGCCCATCGCCATTACTTCGCCCACAGATTTCATCTGCGTGGTCAGGCGGTCGTCTGCGGCGGGGAATTTTTCAAACGCGAAACGCGGGATTTTGGTTACCACATAGTCGATGGAAGGCTCGAACGACGCGGGCGTGCGGCCGCCGGTGATGTCGTTGCGCAACTCGTCCAGCGTAAAGCCGACCGCCAGCTTCGCCGCCACCTTCGCAATCGGGAAGCCCGTTGCTTTGGAAGCCAGCGCGGACGAACGGCTCACGCGCGGGTTCATCTCGATCACAATCATCTCGCCGTTTTCAGGGTTCACCGCAAACTGCACGTTCGAGCCGCCCGTGTCCACGCCGATTTCGCGCAATACCGCCAACGAAGCGTTGCGCATGATTTGGTATTCCTTGTCCGTCAGCGTTTGCGCCGGCGCAACCGTAATCGAGTCGCCCGTATGAACGCCCATCGGGTCGAAGTTTTCAATCGAACAGATGATGATGCAGTTGTCCGCCTTATCGCGCACCACTTCCATCTCGTACTCTTTCCAGCCGAGCACAGACTGCTCAATCAGCAGCTCATGCGTAGGCGACGCATCGAAACCGCGTTCGCAAATCGCCAAAAACTCATCCTTATTGTAGGCAATGCCGCCGCCCGAACCGCCCATCGTGAAAGACGGACGAATCAGCGTCGGAAAGCCGACCTGTTCTTGCGCCGCCAAGGCTTCGTTCATGGTGTGGCAGACAAAAGATTTCGGGCAAGAGAGGCCGATTTTTTCCATCGCTTCTTTAAAGCGGCCGCGGTCTTCCGCCTTGTCGATCGCGTCTTCCGTTGCGCCGATTAACTCGACATTGTATTTCGCCAGCACGCCGTTACGCGCCAAATCCAGCGCACAGTTCAGCGCGGTCTGACCGCCCATCGTGGGCAGAATCGCATCGGGCCGCTCCTTGGCGATAATCTTCTCCACCGTCTGCCACATAATCGGCTCGATGTAGGTAACATCCGCCATTTCGGGGTCGGTCATAATCGTGGCGGGGTTGGAATTCACCAAAATGACTTTATAGCCTTCTTCACGCAAGGCTTTGCAGGCCTGTGCGCCCGAATAGTCAAATTCGCAGGCCTGACCGATAACGATAGGGCCGGCGCCGATGATAAGGATGGATTTTAGGTCGGTACGTTTGGGCATGGGTGGTTACTCTTGAATTAAAGAAGGTTGTTTTGTTACATAGCTTTTAAGAAAAGTATTTCCCTTTTCTAAAATTGAAGCTAAAACATCATCTTCTATGTTAGATAAAATATTCTCTAAATCTGCGCTTGATTTAATTTTAAAGAATTCTTTTGTTTGAGAATGGTATACAAGAGAAGGTTTATTTAGCTGTAAAAGTTCTGCTATATTATTTAATGAACCAATACTCTTACCATCCCATAAAATAAAGCCATAATCAGCAATTTCTGCCATTTTCTTATCTTTTGCTGTATAAAATACCCTTCCAGTTCCTTTGCTGTCTACTTGGACAAACTGCCAATTTCCCACATTATTTCGGTAAATTTTGCCAGAAAAGTAAATATGCACATTAGCATAATCTTGTTCTTGTAGAAATTCTTGGATAGCTTTATCAGCCCCATTAGCATCTCCAATAACAATATCAAAATTATTGCTAAGAATATTGTTAATTCTTTCTCGTATTTGTGGATTTAGTCGTGAAATGCTGCGTGAACCAGAAAAGAAAATAGTGCGCATTTTTATCCTCTAGTCTTTGTCATTGCTAAAACAATTACAGATCTAGCATTTTTTGAAAACAATTTTTCAGTTGATATTTCCAATGTTGCTCCGCTATCAAATAAATCATCGATTACTAAAATATTCTTATTGGATAGATCTATATTGTCAATTGTGATGGAATTATTCAGTATTTCTAGTTTTTCTGATTTTTCTTCAATATTTTTGAGTGGTGTGTGTGAGCTAGATTTTCTTAAAATAGGAGAATATGGAATATTCAAGCGATCACTTAGTTCTTTGGCAATTAATTGAACTGGTTGATTAATACGCTCTGTTGTAAAAGGGGCGGGAACAATTAAATTTATAGATTCTAAACCACTAAATTTTTGTAAAATATAGTCTACCAGCAAAGAAACATTTTGGGTTTGATTACGATATTTTAATTGATAAACCCATTCTCCAATCACACTTCTCTTGCTATCAAAGTGAGGATGCCCTAATTCATCATAACCTAACAAAATACTTTTTTGCATATGATGGTCTAAAGCAAATCCTTTTGTCCAGTTACCATTTAGTTCTATCGCCATTTCATTGACTCCTTGTCAAAATTAAGTATAACGAGCAATCCTAGCAAGCCGTAGCCCGCATGTAGGGTGTGCGGTACGCACGCACGCGTTCTTCATTTTCCCTGTAACCCCGACCCACCGCATGCGCGCCTTGCGGCACACACTCTACCGATGAGTTCAAAGATTGTCTGAAAAAACGCTCGCGGCGTTTGTTCCATCTGCTTGACAATAAAGGCTACCTGAAAAATTCCCGCTGTTGATATTTCGTGCATCCTTTTTCAGACGACCTGAAATCAACGGTTGCAAATTTAAGTTATTTTTCAAACCACCGGCAACCGAAAAATCTGCCGAAACCCACTCCCTCCCCCGTGGGGGAGGGCTGGGGGGAGGGCATTCTCCGAATGGTGGCAATCTTTCCTAATACCTTCGCCGCCCAAATACAAGCCTTGCGGCTTGTTGCCCTCTCGCTAGCTCTCTCCCACAGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTATTTTTCAGACGACCTGAAACAACAGCTGCAAATCTAAGTTGCCTTTCAAATCGCCTGCAACCGAAAAATCTGCCGAAACCCACTCCCTCCCCCGTGGGGGAGGGCTGGGGAGAGGGCATTCTCCGAATGGTGGCAATCTTTCCTAATACCTTCGCCGCCCAAATACAAGCCTTGCGGCTTGTTGCCCTCTCGCTAGCTCTCTCCCACAGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTATTTTTCAGACGACCTGAAACAACAGCTGCAAATCTAAGTTGCCTTTCAAATCGCCTGCAACCGAAAAATCTGCCGAAACCCACTCCCTCCCCCGTGGGGGAGGGCTGGGGAGAGGGCATTCTCCGAATGGTGGCAATCTTTCCTAATACCTTCGCCGCCCAAATACAAGCCTTGCGGCTTGTTGCCCTCTCTCCAGCTCTCTCCCACAGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTTGCTTTTCAGACGACCTTTTTAAACGCTCAATTCAGTTAATTTTACCTTATTATTTTCAAAATCTAATCAAAATCAACCGTTTGCTACCGTGCTGGCTGCTTTTCCAATTCCTGCAATACGCGCAGGATTTCCGCCAGTACATCGTTTGTCTGCTGCAAAATTTCGTGATTCCAAAAACGCAGCACGGTAAAGCCCAAGCTGTTGAGATATACCGTCCGCGCGTGGTCGTATACGGCTTGTTCCGCGTGCTGCCCGCCGTCTGCTTCGACAATCAGCTTGGGCGTTACGCACATAAAATCAACAATATAATTCCCCATCGGCTGCTGTCGGCGGAATTTATAGCCGTTCAGACGGCCTGCCCGCAGGTGTTGCCACAATTTTGCTTCCGCCTCGCTCATTTCTTGACGCATGGCTTTGGCGCGTTGGCGTAGGGCGGGGTTTTCGGCGGTCAATAGTTTCTCGGGCGGGTTCATTTTTGTTATCGGGTTGCTGTTTGTGTAAGCCTTACAGCTTGTTGCCCTCTCTCTAACTCTTTCCCACAGGGAGAGAGGACGGGTCGGCTGTTGGGGTTAAAGGGGCTGCAAGGAAAACAGCTTGTGCAGGCTGTTTTTTATTTTGCATAATCCGTCTGAAAATTAATAACTGCTGATTTCCAGCAGGTTGCCATCGGGATCGCGCAGGTAAACCGATTGGATTTTGCCCATTGCGCCTGTGCGCGCTACGATGCCGCTTAAAGGTTTGATGCCGTGTGCGGATAATTCCTGTAAAACCGTTTCCAGTGGGGCGTATCGGTCAGCAGGCATAAATCCGCTGTGCCGCAGGCGGCGTGTTGCGCGTTAGGCTGAATTTCCGCACCGCGCCCGTGTAGGTTGATTTTCTGACTGCCAAACAACAAAGCTTTACGGTTGTTGCCAAATGAAACTTCTTCCATGCCCAAAACTTGTGTGTAAAACGCGATGGTTCGGTCAATGTCGGCAACAGTCAGTACTAGATGGTCGAGTGCGCTAATTTTCATTTCCAGCTTTCTTTTTCAGACGGCAGCAGCATACTGTTGCCGTCTGAAAATCATTATGCTTGTTTTGCAGCCTTCATATTGCCAATGAATTTGTCGAACAAATAGCCGACATCTTGCGGACCCGGGCTGGCTTCGGGGTGTCCTTGGAAACAGAACACGGGTTTGTCGGTCAGCTCGATGCCTTGCAAGGTATTGTCGAACAAGGATTTGTGGGTAATGCGTGCGTTGGCGGGCAGGGTGTCGGCATCGACGGCGAAACCGTGGTTTTGGCTGGTAATGACGACTTTGCCGCTGTCCAAATCTTGCACAGGATGGTTCGCACCGTGGTGGCTGAAGCGCATTTTCAGGGTTTTCGCGCCGATGGCGAGGCTGATGAGCTGGTGTCCCAAGCAGATGCCGAAAATCGGTTTGCCGCTTTCCATCAGTTTTTGCACGGCTTCGATGGCGTAGGTGCAAGGCTCGGGGTCGCCGGGGCCGTTGGACAGGAACACGCCGTCGGGATTGAGTGCCAACACGTCTTCCGCGCTCGTTTGTGCGGGGACGACGGTCAGGCGGCAGCCGCGCGAGGCGAGCATACGCAGGATGTTGGTTTTCACGCCGAAATCGTAGGCGACGACGTGGTAAGGCTGTTTGTCAGGGGTAACGAAACCTTTGCCCAATTCCCATTCGCCTTCCGTCCATTCGTAAGTTTCCGTGCAGGAAACTTCTTTTGCCAAATCTTTGCCGACCATGCTGCCGAACGCGGCGATGAGTTCTTGCGCTTTTTCAACGGTGGCATCCGCACCTGTCAGAATCGCGCCGCCTTGCGCGCCTTTTTCGCGCAACAGCATGGTCAGGCGGCGGGTGTCGATGTCGGCGATGGCGACGGTTTCGTTGCGTACCAAATAGTCGTGCAGGCTTTCGGAGGCGCGGAAGCTGCTGTGCAAGAGCGGCAGGTCGCGGATAATCAGGCCGGCGGCATAAACGCTGCGGCTTTCTTCATCTTCGGCGTTGGTGCCGGTGTTGCCGATGTGGGGGTAGGTGAGGGTAACGATTTGTTTGCAGTAGGACGGGTCGGTCAGAATTTCCTGATAGCCGGTCATCGAAGTATTGAACACGACTTCGCCGGAAGCCGAACCTTCGTAACCGATTGATGTGCCGTGGAATACGCTGCCGTCAGCGAGGACGAGGAGGGCGGGGGTGCTCATGATGGGAATCCTGTTTTTAATAAAATTCTTGACAATGCCGTCTGAAGGGACTTCGGCAGGGGGCATCCGGTCGGAAAAATCCGGTCAAAAAAAAACACGCCGCGCAAGATAGACGCGTAACGTGCTTTTCGGGCAAGTGCCTATACCCTGAAAGCAGCATATTTTAAGACGAAACATACCCGATTTCAAGCGCAAACGCGGCAGGCGGGCTGATATGTTCGCGCGAAAACGGAAATCCGGGGCATAAAACCGCCCGCTCCGCGCCCCCTATGCCCGTTACGCATTTCCCCACGTCCGCCCGGCGAAACTATGGGAATACCCGAACCGTCATTCCCGCGCAGGCGGGAATCCGGACCTGTCGGCACGGAAACTTATCGGGTACAACGGTTTCTTGAGATTTTACGTCCTAGATTCCCGCCTGCGCGGGAATGACGGCATCGGTTTGACGGTATTTAATTGAATTGCGGAAATTGACGGATTCAGTGAGATTGGCGGGATGAAGCCTACCCTGTAGCCCGCCTTTTATAGCGGATTAACAAAAACCGGTACGGGTTGCCCCGCCCCGGCTCAAAGGGAACGGTTCCCTAAGGCGCCCAAGCACCGGGCGAACCGGTTCCGTACCATTCGTACTGCCTGCGGCCCGCCGCCTTGCCCCGATTTTTGTTAATCCGCTATACGAACCCGCCCCCTCCCGAAAAACGCAAAAAATGCCGTCCGAAAACCTTTCGGACGGCATTTTCGCGTGAACCGTCATTCCCACGAAAACAGAAAACCAAAATCAGAAACCTAAAATTCGTCATTCCCACGAAAGTGGGAATCCAGGACTCAGGACCTGAGAAACCTTTTTACCCGATAAGTTCCCGTACCGACCGGTCCGGATTCCCGCCTGCGCGGGAATGACGCGTTTCATTTGCCGCCCCCTCCCGAAAAACGCAAAAAATGCCGTCCGAAGACCTTTCAGACGGCATTTGCGGAAAAACCGGCCGCGCGGGCGGGTCAGAAGAAGACTTCGCGCCAGCTTAAGCGTTTGATACCGCACATCGGGCCGGTAATATCCAAGCTGTCCAAATCGTTCATCAGCAGGGTGCGCACACCTTTTCCGGAGAAGCACCGGTTATTGCGGGCGGGTTTTTTACCCTCTTTGAATGTTCCGCTGCCGCCTGCATCACCGTCTGCCGTGACGGGGAAATCGTCTGTTTTCTTTTCGTCCAGGTAGCGCACATTAACCGGTTTGTCGTAAACATATCCGTTCGGGCAGACGGTTTTGCTGTTTTTCCACATACAGCCTATGGGGACGGACTTGCCGTCGGTGGTTTTCTTATGGCCGGAATATTGCGCAACCGAATTGTGATCCGGCACAATCGGGCGCGCGCTTCTCGGAGTCAATGCGCCGCCGTCGGCGGTATTGATGCCCAAAATGGCGGTATCCGCGCCGCAGCCGTCGTCTTTATACTTGCGGATGGTTACGAAGGCGGTACGCAATACCACGGTCGGTTTGACGGTAACGCGTTCTCCTTCCCTCAATTTCACTACCCAGCCTTTATCGGCCGATCCGCCGGATGCCTTATTATTGCTCAGGAACAAGGTGTTATTTTCCTTCGTAAGCGTTTGCTCGAGCAGCCCGCCTCCCGTGCCGTTTTGTACCGTTACCTTAACCGTCCCCGTCCCCTTATCGTCGTCAAAGATACCGTAAATATATTGTTGATCCTTACCGACTACATCCTCTTCACTCAAATCGCTGCCCGTACCGAAGATGACCACGCGTTTGTCTGCCAGTCGGGAAACGGCGGGCGCGGAAGTAATCGGTTTTGTGCCTTCGAAAATAGTGCGTACAGCCCACTCGGACGGCTTGTCGCTGCTCAAATCAAAGCGGTACATATTCCCGCCCCGATCGCCGGCATAGGCGATATCGACCGTGCCGTCCAAATCTTTATCCACCAGCGTGGGGGACGAAAGCCCGCCTTTGCCGCCGGGTGCTTCGATTTTTGCAATCGGCGTACCTAAGGTGTCTTTCAAATCATACACATACAGCGCGGTTGTATTATCGCTGCTGACAATATCTTTAGCCGCATAACCGGAGGCGAGGAAGGCGGCGTATTTGCCGTTTTGGGTTTTGCCGATTTGCGGCGTACCGACGGTGTAGCCTAATTTCACGCGATTACTGTCATTCTTATTGTTATTTTTGTCGTTTTGGACATCAAACATGGAAACGCCGACCGGGTTGCTGTCGATTTTGGTCAAATCCAAGGCGTATGCGCCTCTGCCGCCCAGGCCCATCGCACCAAACATAAAGAAATGTTTTTGCTTGTCTTGGTCATCTGTAATGCGGCGCAAGACAAAGCCGCCGTCCACGCCGTAGCGGTCGCCCACATAGCCTTGTTCGGCAAAGGCGCGCAGCTCTTTGGCGAGGTCGGAGTCATTGCCTTCAATATCCTTACGCTCCATCGTACCGGGGATGTAGCTGAGCTTCAGTTCGTAGCCTCGTTGGTCTGTGCCGGTTTTTTTGAAGATATGCACCATCCCGTCGTTGGCAGAAGTTGCCAGATACCCGCCGACCGCCGTTATCGGGCTGTTGACGATGTCGCCCAAATCGCGGGGTTTGTCATTGTCATCTTCTTTTGTGCGGATGCGGTATTTTTGGCTGTATTGTTTTTTGTCGCTTTGTTTTTTGTTGTTTGGTTGGTTGAATGTTTTAAATATATCGTCATTACCGTAATACCGGACCGTCCAAGGCAGCAGCACTTTTGCCCACTCGTCGACCTCAGGTGTGACGAGCCTGTCCTTGTAGATGCCGAAAGTGTCGTTTTTGCCGTCATTGCCATTCAAACCCACGATCCTGTCGCGAGTCGGGGCGATCCGGTACACGCCGCCCGGCAATCGGATCACGGTCTGCCTTGAGTTGAAATTCGGCTCGCGGCTTTTGATGTTCTGCGTATCCAAAGCGGCGAGGGAATGCCGGCCGGGCCGGGCGGGGTCGGTTCGAGTTTTCAGCTCTTGGAGGAAGATGCGGCTGCTCGAACTGCCGGGGTAGGTGGAAACCGAAGCGGAATACATCTGCACCTTACCATTTTGCACAGAGCCGAACCACAGCGCGGGGGCGGTCAGTGCCGGCGAAGGGGCTTGGGTATTCTTATTGGGGTTCGGTTCGTTGATGCAGCGGCCTGCTTTGACTTCCGGCAGGCCGAGCTTGACCGGAATCTGCCCGTTATCTTTAATGTCCCACTTAGACCAAAAATTTAGAATGCCGCTAAGCCCCGTATTTTGTGTCTTCACATCGATGCTCGGCTTCAAGACACCCAACCGCACTGTTTTGCCGGTGATATCTTTAATCCCTTTTTTGTCCAGCAGGTGCAGCTTGGCGTTCAGATAATAGGCCATGGCGGTCGTTTCTTGCTGCCAGTTGCTAAGGGAAATACGGTGGTCTTCTGTCGTATAGACGAGGTTTTGATTACTATTACTATTGTTTTCATCAAAAGAAGATACCAATTTGCTGGATGATCTGCCATCTTTGGCGGTACCCTCGCCGCCCAAATTGAAAGACACACCCAACCATGGATAATCCTTCAATTTGTAAATGGGCGAATTTTCGCGGCTTGGCTCTGTGTGCCTATCCAGCCCGCCTCTTGTTTTTAGCAAGTCGGGATTATCGAAGGAAAATCGGGTTTTATAGGTAAGTTTGGGACAGTCTTTGGTACTTCCGCAACGGATACCGGTGTAGCCGTAGCCTGCCAGCCCGGGCCGGGTGGTATGAATCCAATTGACGGCATTGCCGCGCTTGTTCAGCTCGGCGGTATCAAAGCCGGAAACCTTGCCGTAGGGCGGCAGGTAGGTGGCTGTGCCAAAAACGGCAGTACCGCTTTGTTGAGAAACAAGCTCATCGTTATTGTTGAATGAGATAAAATTGCTTGTGATGCCGAGGCTGTTTTTCTGGCTCGTATGGCTAAATGTCCGCTCCCTGCTTTTGTCCTTTAATGCTGATTGATTATATTGATCCTTCCACTTTACCTCGGGCTGCTTTCGCTCGTTCATGATAATAGCGTATTGATGGGTTTGCGCCATCGCCCCCCCCCCGCCGGTATGGGAAAACATCAAGATGGCGGTATAAAGCGCGGTATGGCGGAAAACCCGCCTTTTTAAAGTTTTATTCATCGTATTTCCTTTTCGGTCAAACCCCCCGCCCTTCGGGGCGGCAGGATCAGGCTTTGTCCGGGAGGGGTGCAAGCCCTTCCGAATCAGGGCGGCGCCTTATGTGCCGCCCTGCGTGTTGGAACATATTTTATCCCTTAAATCTTGCTTCGCGGGATACCGTCGGCGGCAGGCGCGCCGCAAACGGCGGGATTGGGCAAACCGCCCGATCCCGCGCCCGCCGGATTGCCGGTTGCAAAGCCCCCTTCGCCCGGCTGCCAAAGGGGGATGTTCGCAAAGGTAACACGCCCCTTTGGCCGGATGCAATGTATAGGGTTACCGCATTATTCTACCCTTGCGCGCTGATCATGGTAAAGCGGTTTTCGGCAATCCGCAACCGTTTGCCCGGCCCGCCATTGCCGCCTGCGCGGCAATGGCGGGCCGGGGAGGCGGCATTTTCCAAGTTGCGGCAACCTTTCCCAACAACTCAACCGCCTAAATACAAGCCTTGCGGCTTGTTGCCCTCTCTCCAGCCCTCTCCCACAGGGAGAGAGGACGGGGAGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTATTTTTCAGACGACCTGAAACAACAGCTGCAAATCTAAGTTGCCTTTCAAATCGCCTGCAACCGAAAAACCTGCCGAAACCCACTCCCTCCCCCGTGGGGGAGGGCCGGGGAGAGGGCATTCTCCGAATGGTGGCAATCTTTCCTAATACCTTCGCCGCCCAAATACAAGCCTTGCGGCTTGTTGCCCTCTCTCTAGCCCTCTCCCACGGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTATTTTTCAGACGACCTGAAATCAACGGTTGTAAATCCAATCTGTTTTTCAAACCGCCTGCAACCGAAAAATCTGCCGCAATCCGCTCCCTCCCCCGTGGGGGAGGGCCGGGGAGAGGGCATTCTCCAAGTTGCGGCAACCTTTCCCAACAACTCAACCGCCTAAATACAAGCCTTGCGGCTTGTTGCCCTCTCTCCAGCCCTCTCCCACAGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGCTGCTTTTTGCTTTTCAGACGACCTGCATCAACGGTTGTAAATCCAATCTGTTTTTCAAACCGCCTGCAACCGCAAAACCTGCCGAAACCCACTCCCTCCCCTGTGGGGGAGGGCCGGGGAGAGGGCATTCTCCGAATGGTGGCAATCTTTCCTAATACCTTCGCCGCCCAAATACAAGCCTTGCGGCTTGTTGCCCTCTCTCTAGCCCTCTCCCACGGGGAGAGAGGACGGGTCGGCTGTTGGGGTTGAGGTTTGCTGCAAGGAAAACAGGTTGTGCAGGTTGCTTTTTATTTTTCAGACGACCTGAAATCAACGGTTGTAAATCCAATCTGTTTTTCAAACCGCCTGCAACCGAAAAATCTGCCGCAATCCGCTCCCTCCCCCGTGGGGGAGGGCCGGGGAGGCGGCATTCTCCAAGTTGCGGCAACCTTTCCCAACAACTTAACCGCCCAAATACAAGCCTTGCGGCTTGCTGCCCTCTCTCCAGCCCTCTCCCACGGGAGAGAGGACTATGAAGCCCGTCGGCAGGCGCGGGGCTTGGGACGGCATTGCTGTTGCGGTTTCGGGCGCGGCTTTATTCGACGACAATTTTAGGGAACCGGCTGCTGAAGTCTTTGCCTTTGTCGGCAATGCCCAGGGCGATTTGGAATGCGGCATCGGTGTAGATTCGGGCGATGGCGGGGTGTTCGTCGAACAGTCGCGCCGGTGTGCCGCCGTCCATGGCTTCGCGCACGGGCAGGCTTAGGGGAAGCTGTCCGAGCAGGGGGACGTTGAGGCGGGCCGCCAAATCTTTGCCGCCGTCCGTGCCGAACAGTGCTTCGCTATGCCCGCAGTTGGAGCAGATGTGGACGGACATGTTTTCCAATACGCCTAAAATGGGAATGTTGACCTTGCGGAACATATCCACAGCCTTGCGCGCGTCTATCAGCGCGATGTCCTGCGGCGTGGTTACGATGACGGACCCGGTTACGGGGATGCGTTGGGACAGCGTGAGTTGGATGTCGCCCGTGCCGGGGGGCAGGTCGATGAAAAGATAGTCCACTTCGTCCCACTCGCTTTGGAACATCAGCTGCTGCAAGGCTTGGCTGACCATCGGCCCGCGCCAGACGACGGCTTGGCCGGTATCGACTAGAAAGCCGATGGACATAACCTGTATGCCGTCTGAAGATTCGACGGGAATCAGTTTTTGGTTTTTCTGATCGGGTTTGCGGTCGTGTACGCCCAGCATCGTGGGCTGGCTCGGACCGTAAAGGTCGGCATCGAGCACGCCGACGCGTGCGCCCATGCGCGCCATTGCGGCGGCAAGGTTGGCAGTGGTGGTTGATTTGCCCACGCCGCCTTTTCCCGATGCGACGGCAATGATGTTTTTCACGCCTTTGATGGTGGCGACGCCGGGCCGGACTTTGTGTGTGCCGATTTCGGTGTCTATGGACAGATGGATGTGCGCGCCGCCTGTTTCGGGCATCAGGGTTTCTTGTACGGCATCGGCGAGGGCGGCGGCGATGTGCGCGACAGGGAAGCCGAAATGCAGGGCGATGTGGATGCCGTCTGAACGCTGTCCGACCGAACGGACGGCCTTTTCGCCGCCGAGCGTGCGTGCCGTATTCGGAACGGCGACGGTGTCGAGGAGGGTGCGGATGTTTTGTATATTCATGATGTGTGCCTCTGTTCGCAAGTCGTGTGAGGGGAAGATAGACGGAAAGTGTACATGATTTTGGGCAGTTTGCTTTTTTCTTGTGCGAACTTTTACACGGTATGCGGCGGATTGTGAAAATCCGTTGCCAAAATATCCCGTGCAAACAGCAGTCTGCAATTAAGCCTGTAAAATTTGCTTGACGGCGGGGAACGGGGCTGTATAATGCACGGCTTATCGGGTCGTTAGCTCAGCCGGTAGAGCAGCGGACTTTTAATCCGTTGGTCGAGCGTTCGAATCGCTCACGACCCACCAGATAACCGGAAGCCAAGTTTCGAGACTTGGCTTTTTTGTTTGCCTGCCGGGGCGTACCGTTTGCGGGGGTGTATGAAAAAGAAACTGCTTTCGGGCATCAAATTTGCCGTTCGGACGGCATTGGTGTTTTTGCTGGTGTCGCTGTTTTTGGATTGGGTACGCAAGCCCGACGAACCTGCCGGGGCGGCAGGGCGGCCTTTGACCCTGCTGTCGGGGCAGCGGCTGACTTTGGGACAGTTTAGCCGGGATAGGACGGTGCTGGTGTATTTTTGGGGAAGCTGGTGCGGCGTGTGCCGTTATCAGTCGCCGATAATCGATGATTTGGCGGCGGACGGCGTGCCGGTCGTCGGCGTGGCGGTACGTTCCGGCAGCGCGTCCGAAGTGGCGGCATATATGGCAAAACGGGGCTTGGGCTTTCCGACTGTCAGCGATGAGGACGGGGGTTTGGCAAGGTCTTGGCGGATTGCCGCAACGCCTGCCGTCGTTTTGGTCAAAAATGGGAAAATGGTCCGCTATACGACGGGAATCAGCAGTTATTGGGGCTTGCGCGCACGAATTTTTCAGGCGGATTTTTTCGGTTAACTTTTGTTTTTGTCAAACTTTCCGCTATGTAGAGAATCAAACGGCATATGCCTTGCGCGGCGGATGCGGCGGCTTTTGTTTTTTGGGAAAGAGCCGGCGCGCCTGCCGATGTAATCCCTTGTTGTGATTGTGGGAAAAATAGATTAAAATATAACTATTAAAATATTTTCAGATAGGATTATCGGAATTAAAGTCTTTTATACCCGGTCGTCCGATGAGGTTTATAGCGTATTGTTGCTATATGTTCGTTTTGTTATATAACGGTTGCATCAAAAATTACGCCCACAGGCTTTCCCGACGGTTTGAAAGTTTGATTTTCGATAACTTGGAGACTTAAACAATGCCTACCCAATCAAAACATGCGTCTATCAATATCGGTCTGATACAGGCAAGGGAAGCCCTGATGACCCAATTCAGGCCTATTCTGAATCAGGCGAATATTACCGATCAGCAATGGCGGATTATCCGTCTTTTGGCGGAAAACGGCACATTGGATTTTCAGGATTTGGCGAATCAGGCGTGCATTTTGCGCCCCAGCCTGACCGGTATCCTGACCCGCCTTGAAAAAGCGGGGTTGGTCGTCCGCCTGAAACCTTCCAACGACCAACGGCGCGTTTATCTGAAGCTGACTTCCGAGGGCGAGAAGCTGTATGAGGAAATCGGCGAAGAAGTGGACGAGCGTTACGACGCTATCGAGGAAGTGCTGGGCCGCGAGAAAATGCTGCTGCTTAAAGACCTGTTGGCAGAACTTGCCAAAATCGAGGATGCGTTGAACTCGTAATACGCCGTAATGCGCGGAAACGTCCGACCGACGGCTTTTTGAATCAGAACTGCTGCACATGGGGGATGCCTTGTGTGCAGCATTCTTATATAGGGGACGGTTTAAAGGGGAAAAATGGCGGATTTGCAGAAAACTTTTCAAACTTCGTTCCGTGATGCGATGGCATCCTGTGCGGCAGGCGTTCATGTCATCACGACAGACGGTGCGGCAGGGCGTTACGGCATTACAATGACGGCGGTTGCGCCGGTTACCGACGAGCCGCCGACCGTGATGCTGTGCATAAACCGGAGTGCGCGAATCATTCCGATCCTGTCGGAAAACGGCAGCCTCTGCATCAATATGCTGGCGGACGAACATCAGGATGTTGCCGAACATTTTGCCGGGCTGACCGGCCTGTCGCCCGAAGAGCGGTTTGCCTACCATATTTGGCATCGCGGCAAAACGGGACAACTTGAAATAGAAGGCGCGTTGGCGCACCTGCACGGGCATATTGTCGGCAAACATGAAATCGGCACGCATTTTGTGTTTTACGTCAGGCTCGACGAAATCAAAAACTGCGGGTGCAAACGCCCCGCGCTGCTGTATTTCAGACGGCAGTTTAGGCCTTTAGACTGATATTCGGACAGATATATGAAAGCGATGATACTGGCGGCAGGACGCGGCGAGCGTATGCGCCCTTTGACCGACACCACTCCGAAGCCGCTGCTCGATGTGGCGGGTAAGCCTCTAATCGGTTGGCACTTGTGCCGTCTGAAGCAGGCGGGGTTTACCGAAATCGTCATCAACCACGCTTGGCTGGGTCGGCAGATAGAAAATGCTTTGGGCGACGGCTCGGCTTATGGCGTGAACATCGCCTATTCGCCCGAACCCGCAGGCGGTTTGGAAACGGCAGGCGGCATCGCGCAGGCATTGCCGCTGTTGGGTGGGCAGCCGTTTTTGGTGGCCAACGGCGACGTGCTGACCGACATCGATTTTACCGCCGCGTTTCAGACGGCATCGTCCCTGCCCGGGCACATTTCCGCACATTTGTGGCTGGTGGGAAATCCCCCGCACAACCCCGACGGCGATTTTTCCCTGCTGCCCGACGGCAGCGTGCGGCCGGAAGTATCCGGCGGCAACGGACTGACATTCAGCGGCGTGGGTATTTACCGTCCTGAAATGTTTGACGGAATCGAAGCGGGCAGTGTGGCAAAACTCGCGCCCGTATTGCTGAACGAAATGCGGCAAAACCGCGTGAGCGGTCAGAAGCATACGGGCCTGTGGCTGGATGTCGGCACGGTATGCCGTCTGAAGGAAGCGCAAGCCCTTGCAGCGGCTTGGAAGTGAAAACTCGGTTTCAGGCGGTATGGCGGATTCGGTTTAACGTTTCAGTGCCAACGTCAACACGCCGCCGTAACCAGCCCCAAGTCTATCCATTCCTGCGTGTTCGGGCGTTCGTCTAAGAAAATCACCGCCATCAGCGCGACCAAGACCAGGCTGAATTTGTCGACGGGCGCGACTTGCGGGGCGTTGCCCAGTTGCAGGGCTTTGAAGTAGGCGAGCCAAGATGCGCCGGTGGCGAGTCCGGACAAAACCAGAAACGTCCGGTTGCGCCCCGTGAAGCCGTTTACGCCCTGCCATTTGCCGGTGTAGGTCAAAAACAATACCAAGGCGGCGAGGATGACCAAGGTGCGGATAAAGGCGGCGAAATCCGAATCTATGCCCTGCAAGCCCATTTTGGCGAAAACGGCGGTCAATGAGGCGAAGCCTGCCGATGCCAATGCCCAAAACAGCCATGCGTTGCTGCCCATGTTTTCTCCTTTGATTGTGAACAATATGAACGGTATTTTTGTTGCTGCGTCAAAAATTTCACTGCGGGTTTGGTGCGGATAACGTTATAATATGCCTGATATTATTTTCAATCCACCTGTTTGTCGCCTGATGCTTTCAGACGGCATGTCCCTCCTCATTTCTAAAGGAAAATCATGAGCTTCAAAACCGATGCCGAAACCGCCCAATCCTCCACCATGCGCCCGATTGGCGAAATTGCCGCCAAGCTGGGTTTGAACGTTGACAACATTGAGCCTTACGGTCATTACAAAGCCAAAATCAATCCTGCCGAAGCGTTCAAGCTGCCGCAAAAACAAGGCAGGCTGATTTTGGTTACCGCCATCAACCCGACTCCGGCGGGCGAAGGCAAAACCACCGTAACCATCGGTTTGGCGGACGCATTGCGCCATATCGGCAAAGACTCTGTGATTGCTTTGCGCGAGCCTTCTTTGGGTCCGGTGTTCGGCGTGAAAGGCGGCGCGGCAGGCGGCGGCTACGCGCAAGTTTTGCCGATGGAAGACATCAACCTGCACTTCACCGGCGACTTCCACGCCATCGGTGCGGCGAATAACCTCCTCGCCGCCATGCTCGACAACCATATCTACCAAGGTAACGAGTTGAACATCGACCCCAAACGCGTGCTGTGGCGGCGCGTGGTCGATATGAACGACCGCCAGTTGCGCAACATCATCGACGGTATGGGCAAGCCTGTTGACGGCGTGATGCGTCCCGACGGCTTCGACATCACCGTCGCCTCCGAAGTGATGGCGGTATTCTGCCTTGCCAAAGACATCAGCGATTTGAAAGAGCGTTTTGGCAATATTCTCGTCGCCTACGCCAAAGACGGCAGCCCCGTTTACGCCAAAGATTTGAAGGCACACGGCGCGATGGCGGCATTGCTAAAAGATGCGATTAAGCCCAATTTGGTGCAAACCATCGAAGGCACTCCGGTCTTTGTACACGGCGGCCCGTTCGCCAACATCGCCCACGGCTGCAACTCCGTTACCGCAACCCGTCTGGCGAAACACCTTGCCGATTACGCCGTAACCGAAGCAGGCTTCGGCGCGGACTTGGGTGCGGAAAAATTCTGCGACATCAAATGCCGCCTTGCCGGTTTGAAACCTGATGCGGCAGTCGTCGTGGCGACTGTCCGCGCCCTGAAATACAACGGCGGCGTGGAACGCGCCAACCTTGGTGAAGAAAACCTCGAAGCCTTGGCAAAAGGTTTGCCCAACCTGTTGAAACACATTTCCAACCTGAAAAACGTATTCGGACTGCCCGTCGTCGTTGCGCTCAACCGCTTCGTGTCCGACTCCGATGCCGAGTTGGCGATGATTGAAAAAGCCTGTGCCGAACACGGCGTTGAAGTTTCCCTGACCGAAGTGTGGGGCAAAGGCGGCGCGGGCGGCGCGGATTTGGCGCGCAAAGTCGTCAATGCCATCGACAACCAACCTAATAACTTCGGTTTCGCCTACGATGTCGAGTTGGGCATCAAAGACAAAATCCGTGCGATTGCCCAAAAAGTGTACGGCGCGGAAGATGTCGATTTCAGCGCGGAAGCGTCTGCCGAAATCGCCTCGCTGGAAAAACTGGGCTTGGACAAAATGCCGATCTGCATGGCGAAAACCCAATATTCATTGAGCGACAACGCCAAACTCTTGGGCTGCCCCGAAGGCTTCCGCATCACCGTACGCGGTATCACTGTTTCCGCCGGCGCGGGCTTCATCGTTGCGTTGTGCGGCAATATGATGAAAATGCCGGGCCTGCCGAAAGTTCCGGCTGCCGAGAAAATCGATGTGGACGAACACGGCGTGATTCACGGCTTGTTCTGAACGGTTTTTGAAACCGGATGCCGTCTGAAGCCGTTTCAGACGGCATTTTTTCGGAACGCGGGCGGCGGTATGCTATAATCCGCCGTTAAATTTCTCTATTTTCAGGAAAAACCATGAGTTTGAAATGCGGCATCGTCGGTTTGCCCAACGTCGGCAAATCCACCCTTTTTAACGCGCTGACCCAATCGGGCATCGAAGCGGCAAACTATCCCTTCTGCACCATCGAACCCAACGTCGGCATCGTCGAAGTGCCCGACCCGCGTATGGCGGAGCTGGCGAAAATCGTCAATCCGCAAAAAATGCAGCCCGCCATCGTCGAGTTTGTCGATATTGCCGGCTTGGTTGCGGGCGCGAGCAAAGGCGAAGGCTTGGGCAACCGGTTCCTTGCCAACATCCGTGAAACCGATGCCATCGTCAACGTCGTGCGCTGCTTTGACGACGACAACATCGTCCACGTTTCCGGCAAAGTCGATCCGATTGCCGACATCGAAACCATCGGCACCGAATTGGCGCTTGCCGACTTGGCAAGTGTGGAAAAAGCCATCGTCCGCGAAGAAAAACGCGCCCGATCAGGCGACAAAGACGCGCAAAAACTAGTCGATTTGTGCAAAAAACTGCTGCCGCATCTGGACGAAGGCAAACCCGTGCGTTCCTTCGGTTTGGACGCGGAAGAACGCGCGCTGCTGAAGCCGCTGTTCCTGCTGACCGCCAAACCTGCGATGTATGTGGGAAACGTTGCCGAAGACGGTTTTGAAAACAACCCGCACCTCGACCGCCTGAAAGAATTGGCGGCAAAAGAAAACGCCCCCGTCGTTGCCGTCTGCGCCGCGATGGAGAGCGAAATCGCCGAATTGGAAGACGGTGAAAAAGCCGAATTTCTCGCCGAAATGGGCTTGGAAGAACCGGGCTTGAACCGCCTCATCCGCGCGGGTTACGACCTTTTGGGACTGCAAACCTACTTCACCGCCGGCGTGAAAGAAGTCCGCGCGTGGACGATACACAAAGGCGACACCGCGCCGCAAGCCGCCGGCGTGATCCATACGGATTTTGAACGCGGCTTCATCCGCGCCCAAGTGATTGCCTACGATGATTTTGTCTCGCTCGGCGGCGAAGCCAAAGCCAAAGAAGCCGGCAAAATGCGCGTGGAAGGCAAGGAATACGTCGTGCAGGACGGCGACGTGATGCACTTTTTGTTTAACGTGTAACCCAAATGCGGCAGGTTTTCAGACGGCTTTGCCGGAAATGCCGTCTGAAGCCGGTTTTGGTGGTTTTCGACGTTCCCATACCGCCGGAATGCAGCCGCATCAAAATAAAATCCCGCCCGCATTTCCGATTTGCCCTCCCCGATTCCTGCAAAACAAACCGCCTGCCCTGCCGTTACGGGAAGCCGTCCGGTATTCCGAATATCCCGAACCCCGATACAAAATGACCTTTCAGACGGCATTTGCACAGCCCGCCGCGTTTCAAGTAAAAACATTATGAGCCAAGCCTTACCCTACCGCCCGGACATCGACACATTGCGCGCCGCCGCCGTCTTGTCCGTCATCGTGTTCCATATCGAAAAGGATTGGCTGCCGGGCGGGTTTCTCGGTGTCGATATATTCTTTGTGATTTCAGGCTTTTTGATGACGGCGATCCTCCTTCGCGAAATGTCCGGGGGGCGTTTCTTCCTCAAGACATTTTATATCCGCCGCATCAAACGGATTTTGCCCGCATTTTTCGCCGTATTGGCGGCAACGCTGGCAGGCGGCTTCTTTTTATTCACCAAAGATGATTTCTTTCTTTTGTGGAAATCCGCGCTGACCGCCTTGGGTTTCGCCTCCAACCTGTATTTTGCAAGGGGGAAGGATTATTTCGATCCCGCGCAGGAAGAAAAGCCCCTGCTGCACATCTGGTCTTTGTCGGTCGAAGAACAATTTTACTTTGTCTTTCCGATATTGCTGTTGCTTGTCGCCCGCAAAAGCCTGCGCGTACAGTTCGGCTTCCTCGCCGCATTGTGCGCCTTAAGCCTTGCCGCTTCCTTTATGCCTTCCGCGCTCGATAAATATTACCTGCCCCACCTGCGCGCCTGCGAAATGCTGGTCGGATCGCTGACCGCCGTGCGGATGCGGTACCGGCAACAGCGGAATCCCGCCGTCGGGAAACGGTATGCCGCCGTCGGCGCATTGTTTTCCGCGTGCATACTGTCCGCCTGCCTGTTTGCCTATTCGGAACAAACCGCCTATTTCCCGGGCTCCGCCGCCCTGATTCCCTGTCTGGCTGTTGCCGCGCTGATTTATTTCAACCATTACGAACACCCGCTTAAAAAATTTTTCCAATGGAAAATCACCGTTGCCGCCGGTTTGATTTCCTATTCGCTTTATCTGTGGCATTGGCCGATATTGGCCTTTATGCGCTATATCGGCCCGGACAACCTGCCGCCTTATTCGCCGGCGGCAGCGATCGTCCTGACCCTGGCGTTTTCCCTGATTTCTTATCACTGCATCGAAAAGCCGTTTAAAAAATGGAAAGGCTCGTTCGCACAATCCGTTTTATGGATTTATGCCTTGCCTATGCTCGTTTTGGGCGCGGGCTCGTTTTTCGCGATGAGGCTGCCGTTTATGGCGCAATACGACCGCTTGGGGCTGACGCGTTCCAACACCTCCTGCCACAACAATACCGGCAAACAATGCCTGTGGGGGGATACGGAAAAACAGCCGGAACTGCTGGTTTTGGGCGACTCCCACGCCGACCATTACAAAACATTCTTCGATGCCGTGGGCAAAAAAGAAAAATGGTCCGCCACTATGGTTTCCGCCGACGCCTGCGCCTATGTGGAAGGCTACGCGTCCCGTGTGTTCCAAAACTGGGCCGCCTGCCGCGCCGTTTACCGCTATGCCGAAGAACACCTGCCCCGGTATCCGAAAGTGGTTTTGGCGATGCGCTGGGGCAGCCAGATGCCCGAAAACAGCCGCTCCCTTGCCTACGATGCCGGTTTTTTCCAAAAATTCGACCGTATGCTGCACAAACTCTCATCCGAAAAACAAGCCGTTTACCTGATGGCGGACAACTTGGCTTCGTCTTACAACGTCCAGCGCGCCTATATCTTGTCTTCACGCATACCGGGTTGCCGCCAAACACTGCGCCCGGACGACGAAAGCACCCTGAAAGCCAATGCCCGCATCAGGGAATTGGCAGCCAAATACCCCAACGTCTATATTATTGATGCCGCCGCCTATATCCCCGCAGATTTCCAAATCGGCGGATTGCCGGTTTACTCGGACAAAGACCACATCAACCCTTACGGCGGCACAGAATTGGCGAAGCGTTTTTCCGAAAAACAAAGGTTTCTCGATACGCGCCATAACCATTGATTCGCTTAAATTTGTTACAATCGGCGGTTTGCAAAACCGCTAATTTTTTTGAAAGAGACCGATGAGCGTCATCCAAGACCTGCAATCGCGCGGCCTTATCGCGCAAACCACCGACATCGAAGCCTTAGACGCTTTGCTGAACGAACAAAAAATCGCCCTTTACTGCGGTTTCGACCCGACAGCCGACAGCCTGCACATCGGACACCTGCTGCCCGTATTGGCATTGCGCCGCTTCCAACAGGCGGGGCATACGCCGATTGCACTGGTGGGCGGCGCGACCGGTATGATCGGCGACCCCAGCTTCAAAGCCGCCGAACGCAGCTTGAATTCCGCCGAAACCGTTGCCGGCTGGGTAGGAAGCATACGCAGCCAATTAACCCCTTTCTTGAGCTTTGAAGGCGGAAACGCCGCCATTATGGCGAACAATGCCGACTGGTTCGGCAGCATGAACTGCCTCGACTTCCTGCGCGACATCGGCAAGCATTTCTCCGTCAACGCCATGCTGAACAAAGAATCCGTCAAACAGCGCATCGACCGCGACGGCGCAGGCATTTCCTTCACCGAGTTCGCCTATTCCCTGCTGCAAGGCTACGACTTCGCCGAGTTGAACAAACGCCACGGCGCGGTTTTGGAAATCGGCGGTTCCGACCAGTGGGGCAACATCACCGCCGGTATCGACCTGACCCGCCGCCTGAACCAAAAACAAGTGTTCGGTCTGACCCTGCCTTTGGTTACCAAATCCGACGGTACCAAATTCGGCAAAACCGAAGGCGGCGCGGTGTGGCTGAACGCGAAAAAAACCTCGCCGTACCAGTTCTACCAGTTCTGGCTGAAAGTCGCCGATGCCGATGTGTATAAATTCCTGAAATACTTTACCTTCCTGTCCATCGAAGAAATCGGTGTCGTCGAAGCCAAAGACAAGGCAAGCGGCAGCAAGCCCGAAGCGCAACGCATCCTCGCCGAAGAAATGACCCGCCTGATTCACGGCGAAGAAGCCCTTGCCGCCGCGCAACGCATTTCCGAAAGCCTGTTTGCCGAAGACCAAAGCCGGCTTACCGAAAGCGACTTCGAGCAGCTCGCCCTCGACGGCCTGCCTGCATTTGAAGTTTCAGACGGCATCAACGCCGTCGAAGCCTTGGTCAAAACCGGCTTGGCAGCGTCCAACAAAGAAGCGCGCGGCTTTGTCAATGCCAAAGCGGTTCTGCTCAACGGCAAACCGGCTGAAGCCAACAACCCCAACCACGCCGCCGAACGCCCCGACGATGCCTATCTGTTGATAGGCGAATACAAACGTTTCGGCAAATACACCATCCTCCGGCGCGGCAAACGCAACCACGCGCTTTTGGTTTGGAAATAATCCGATTGCCGCAGAAATGCCGTCTGAAGCTTTCAGACGGCATTTTTATCAAATGCAAAACACCCTGCGCCTGCCGATATGTCGTCATTTCCATGCAGGCGGGAATTCAAACTTGTCCGCACGGAAACTTATCGGGCAAAACGGTTTCTTCAGTTCTACGTTCTAGATGCCCGCTTTCGTGGGAATGACGGTTCAGTTGCTACGGTTACTGTCAGGTTTCGGTTATGTTGGAATTTCGGGAAACTTATGAATTGTCATTCCCGCGAAAGTGGGAATCCAGGACTCAAAATCTCAAGAAACCGTTTTGCCCGATAAGTTCCTGCACTGACAGATCTAGATTCCCGCCTGCGCGGGAATGACGGGTTTCGAGATTGCGGTGTTGTCGGGAATGACGGGTTTTAAGATTGCGGTGTTGTCGGAACGCAACCGAACCGTCATTCCCACGGAAGTGGGAATCTAGGACGCGGGGTTTCAGTCATTTCCGATAGATTCCCGCCGCGTCGGGGGTCCGGATTCCCGCCTGCGCGGGAATGACGGTTCGGGTATTTTACTGTGCCCGCCCCGCGCCTGTAAACGGCGGGCGATTAAAAATGCCGTCTGAAGGTTCAGACGGCATCGGTATCGGGGAATCAGAAGCGGTAGCGCACGCCCAACGAGGCTTCGTGGGTTTTGAAGCGGGTGTTTTCCAAGCGTCCCCAGTTGTGGTAACGGTATCCGGTGTCCAAGGTCAGCTTGGGCGTGATGTCGAAACCGACACCGGCGATGACACCAAGACCCACGCTGCTGATGCTGTGGCTTTCGTGATAGGCAGGTTTGCTGGTCGGACCTTCTACGATTTTGCCTGGCTTTGTAGCACCTGCCCCTGGTTTACTGAAAGTAGTCTTGGTTTCTTTTCTCACTGAATGAACCTGATGTTTAACGTGTCCGTAGGCGACGCGCGCACCGATATAGGGTTTGAATTTATCGAATTTATCGTTGAGTTTGAAATCGTAAATGGCGGATAAGCCGAGAGAAGAGACGGCGTGGAAGCTGCCGTTTTCCTGATTTTCCGTCTTCAGTTCTTGCCAGTTGCCAGCGTTATTGTTTCTTAGCACCTCTTTTGTGTTGACGGAATATTTATTGTTGTTCCATTTTCTGTAACTGGCATAATCTGCCGCTATCCTCCAGTCGCCGAAGTCGTAGCCGACCGACACCCGGGGGTGGATGGAATGCGCACGGATGTTTCTGAAATAATCGCTTACTGTGCTTGTGTTGTTTGCACCGGTTGCTTGCGGATAATCGTGGGTAATGCGTTCGGCGGCATAGGCTAAATCCGCCTGCACATACGGGCCGCGGCCATTGCCTTCACTTGCCGCCTGCGCTGCGGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGGTTTTTTGCGGGCTGGATTCATTTTCGGCTCCTTATTCGGTTTGACCGGTTAAAAAAAAAGATTTTCACTGATGTTGAAGGGCGGATTATATCGGGTTCCGGGCGGTGTTTCAATACATAGCACCGCGCCTGCTGCGCGTTTTATGCGTTTGGCGCGTTCGGCGGCGGGAAATTTGCCTACTTTTCCCGCGTCGGGCGGGCGGAACGGGCGGCACACTGTCTATAAACCGCAATACCGTTTACAATGACCGCCTGTTTCACCACATACCCGAACGCAACAATGTTTCAACACACGGGACGGCACATCAAGCACCGCCCTATGTGTCGTCCTGATTTGGAAGGGGTTGCACCCCTCCCGAATAAAGTCTGATCCTGCCGCCCCGAAGGACGGATGTCCGAGTGGCGGGGTTTCAACCGAAAAGGAAATACAATGAAAATCAGGCCGGGGCGGCACAACGCGCCCGACTTTCCGCACGGGGCCGCCGTAACCATAGGCAATTTCGACGGCGTGCACCTCGGACACAAACACATCCTCCAAAAACTCCGCCTCGAAGCCGATACGCGCGGATTGCCCGTCGTGGCCGTCGTTTTCGAACCCCAACCCAAAGAATTTTTCGCACTCCGTACCGGCAAAACCCCGCCGTGCCGTATCAGCCCCCTGCGTACCAAACTCGGGCTGCTCGAAAAAACCGGTTGCGTCGATGCCGCCTGGGTTTTGCGTTTCGATCGGAATTTTTCCGAAATATCCGCGCAAGCATTTATCGACCGCCTGCTGCGTCAAACCTTGAATACGCGCTATTTGCTCGTCGGCGATGATTTCCGTTTCGGTGCGGGGCGGGAAGGCTGTTTTGAACTTTTGGCACAACAGCCCGATATGCAAACCGAGCGCACGCCTTCCGTCATCGTCGAAGACATCCGCACCAGCAGTACCGCCGTCCGCCAAGCCCTTTCAGACGGCAACCTTGCCTATGCGAAGAAACTTTTGGGGCACGACTACGTTTTGGGGGGCAGGGTGGTGCACGGCAGAAAACTCGGACGCACCTTAAACGCCCCGACCGCCAATATCCGCCTGCCCGGCCACCGTTATGCACTCGGCGGCGTGTTCGTCGTCGAGGCGGACGGCGCATTCGGCACGCGGCGCGGCGTGGCGAGCTTCGGCTTCAATCCCACCGTTGATGGCGGCTGTTCTCAAAAGCTTGAAGTCCACCTGTTCGACTTTCAAGGCGATTTGTACGGACAACGGTTGAACGTCCGCTTCCTGCACAAACTGCGCGACGAGGAAAAGTTTGACGGTATGGAAGAACTGAAAAGGCGGATTGAAGCCGATATGGAAGCCGCAAAGTGTTGGTAGAAAAACCTTATACAAACCATCCGATTGGGCTACAATCAGCCTTTTAACTGTTCGGACGGCACAGGGGTTTCCCGTTGTGAAATACTGTTTGAGGCGCAATGCCGTCTGAAACCGAAATATTGTAACAATAGAGATTAAAAAATGACCGATTACAGTAAAACCGTCAACCTGCTCGAAAGCCCGTTTCCGATGCGCGGCAATCTTGCCAAGCGCGAGCCTGCGTGGCTGAAAAGCTGGTACGAGCAAAAACGTTACCAAAAACTGCGCGAAATCGCCAAAGGCCGTCCGAAATTCATCCTGCACGACGGCCCGCCGTATGCCAACGGCGACATCCATATCGGTCATGCCGTCAATAAAATTCTTAAAGACATTATTATCCGCAGCAAAACCCAAGCCGGTTTTGACGCGCCTTATGTGCCGGGTTGGGACTGCCACGGCCTGCCCATCGAAGTGATGGTGGAAAAACTGCACGGCAAAGATATGCCTAAAGCCCGTTTCCGCGAATTGTGCCGCGAATATGCCGCCGAACAGATTGCCCGTCAGAAAAAAGACTTTATCCGCTTGGGCGTGTTGGGCGACTGGGACAATCCTTACTTGACCATGGATTTCAAAACCGAAGCCGATACCGTGCGTATGCTCGGCGAAATCTACAAATCCGGCTATCTCTACCGTGGTGCGAAACCGGTTCAGTTTTGCTTGGATTGCGGATCTTCGCTGGCGGAAGCGGAAGTGGAATACAAAGACAAAGTATCGCCTGCGATTGACGTTGCCTATCCGTTTAAAAACACCGTCGCGCTTGCCGCCGCATTCGGCTTGGCAGGTATCGAAGGCAAAGCGTTTGCCGTCATTTGGACGACCACGCCTTGGACTCTGCCTGCGAGCCAGGCCGTGTCTGCCGGCGCGGACGTGGTGTATCAATTAATCGATACGCCCAAAGGCAAATTGGTGCTGGCGAAAGATTTGGCGGAAGGCGCTTTGAAACGCTACGGCTTTTCAGACGGCATCGCCATCCTTGCCGAAACCACCGGCGACAAGCTGGAAAACCTGCACATGAATCATCCGTTCCTCGAACGCGATATTCCCATGCTCAACGGCGAACACGTTACCACCGATGCCGGTACCGGCTTGGTGCATACTGCGCCTGCGCACGGTTTGGAAGACTACGCCGTCTGCAATAAATACGGCATCGAGCTTTACAACCCTGTCAACGCCGAAGGCAAATACATAAGCGAAACGCCTCGTGTCGCAGGCATGAGCGTTTGGGAGGCGAATCCCGTCATCCTGCAATGGCCGGAAGAAACCGGCAACCTCTTGGCAAGCAGCAAAATCGAACACAGCTACGCCCACTGCTGGCGCCACAAAACCCCGCTGATTTACCGAGCGACAGGTCAGTGGTTTGTCGGCATGGACAAAGCCGGCAGCGACGGTAAAACCCTGCGCGACAAAGCCATCAAAGCCGTGGACGACACCGAATTCTTCCCGCCATGGGGTCGTGCGCGTTTGGAATCCATGATTGAAGGCCGTCCTGACTGGGTGGTTTCACGCCAACGCTATTGGGGCACGCCGATGACTTTCTTTGTTCACAAAGAAACCGGTGAATTGCATCCGAACTCTGCCGAACTTTTGGAAAAAGTCGCGCAACGCATCGAAGAAAAAGGCATCGAGGCTTGGTTCTCCCTCGATAAAAGCGAATTATTAAGCGCGGAAGATTGCGAACATTACGACAAACTCCCCGATACCATGGACGTATGGTTCGACTCAGGCTCGACGCATTATTCCGTTGTAAAACAACGCGAAGAATTGGAATGGCCGGCTGACTTGTACCTCGAAGGCAGCGACCAACACCGCGGCTGGTTCCAATCTTCTATGCTGACCGGTTGCGCCTCATCCATGGGACGCGCACCGTATAAACAGCTGCTGACCCACGGTTTCGTTGTGGACGGCGAAGGCAAAAAAATGTCGAAATCCATCGGCAACGTCGTCGCGCCGCAGGAAGTGTATAACGAGTTCGGCGCGGACATCCTGCGTCTGTGGGCGGCATCCACCGATTACAGCGGCGAATTGGCGATTTCCAAAGAAATCCTCAAACGCGTAACCGAAAGCTACCGCCGTATCCGCAATACCTTGAGCTTCCTGTTTGCCAATTTGAGCGACTTTAATCCGATTGAAGATGCTGTTCCACAAGCAGAAATGGTGGAAATCGACCGCTACGCCCTGGTGTTGGCGCGTCAACTTCAAGAACGCGTTGCCGGCGATTTTTATCCGCGTTACGCCTTCCATTTTGCCGTAAAAGAAATGGTTTCTTTCTGCTCGGAAGACTTGGGCGCGTTCTACCTCGACATCCTGAAAGACCGCCTCTACACCACCAAAGCCGACAGCCGCGCCCGCCGCAGCGCGCAAACCGCCCTGTACCACATCACGCGCAGCCTGGTTCTCTTGATTGCACCGATTTTGTGCTTCACCGGCGAAGAAGCGTGGGACATCATCGGCGGCGGCGAAGAAGACAGCGTCCTCTTCCATACTTGGCACGAGTTCCCGGCCATCAACGAAAAAGCCGAAGCCGAACTGGTGAAAAAATGGACGGCAATCCGCGAAGCGCGCGAAGCAGTAACCGCCGCCATCGAGCCTTTGCGCGCCGACAAAACCGTCGGTTCGTCCTTGCAGGCGGAAGCCGAAATCACCGCGCCGGAAGAAATGGCCGGCTATCTGAATGCTTTGGGCGAAGAATTGCGCTTTGCCCTGCTGGTGTCTAAAGCAGAAGTGAAAGTCGGTGATGAACTTGCCGTTGCCGCCAAAGCCAGCGACGGCGAAAAATGCGAACGCTGCTGGCATTACACCCGCGATGTGGGCGCGGTTGCAGGTTATGAAACCGTCTGCAAACGCTGTGCGGAGAATGTCGGCGGAGAAGGCGAAACGCGCCATTACGCCTGATAAAGTTTGAGCAAATGCCGTCTGAAACCGCCAAACAGTATTTCAGACGGCATTTTTTGTGCCGCGATTTGTCTTCATAATGGCGGAGGGGTTTCGAGATTGCGGTGTTGTCGGGAATGACGGTTCAGTTGCTACGGTTACTGTCAGGTTTCGGTTATGTTGGAATTTCGGGAAACTTATGAATTGTCATTCCCGCGAAAGTGGGAATCCAGGACTCAAAATCTCAAGAAACCGTTTTGCCCGATAAGTTCCTGCACTGACAGATCTAGATTTCCGCCTGCGCGGGAATGACGGGTTTCGAGATTACGGTGTTGTCGGGAATGACGGTTCGGGTATTTTACTGCGCCCGCCCCGCGCCTGTAAACGGCAAGTGCATCAAAAATGCCGTCTGAAGGTTCAGACGGCATCGGTATCGGGGAATCAGAAGCGGTAGCGCACGCCCAATGAGGCTTCGTGGGTTTTGAAGCGGGTGTTTTCCAAGCGTCCCCAGTTGTGGTAACGGTAGCCAGCATCTAAAGTCAGATTGGACGTGATGTCGAAACCGACACCGGCGATGACACCAAGACCCAAGCGGCGGATGCTGTGGCTTTCGTGATAGGCAGGTTTGCTGGTCGACCCTGTTATAACAGGGCCGCCACTCGCCACAGGAGTAACAGTAATAGTTTCTTTGTTGACCGAATTAACTTGATGCCTAACGTGTCCGTAGGCGACGCGCGCGCCGATATAGGGTTTGAATTTATCGCTTATTTGGAAATCGTAAATGGCTGATAAGCCGAGAGAAGAAGCGGCGTGGAAGCTGCCGTTTTCCTGATGTTCTGTTTTGGTTTCTTTGTTGTTGTCGTTTATACGTTCAGTAACTTTTTTAGTAGAAGAATTGCTTTCATTCCACTTTCTGTAGCGCGTGTAATCTGCGGCGATGCGCCAGTTGCCGAAATCGTAGCCAAGAGAAAGTCGAGGTTGAACAGAGTGGGTACGGATGTTTTTGAAATAATCGCTTACTGTGCTTATTTTGCCTTTGTCTGCACCGGTTGCTTCCGGATAATTGTGGGTAATGCGTTCGGCGGCGTAGGCTAAATCTGCCTGCACATACGGGCCGCGGCCATTGTCTTCATTTGCCGCCTGCGCTGCGGAAGAGAAGAGAAGAGAAGAGAAGAGAAGAGAAGGTTTTTTGGGGCTGGATTCATTTTCGACTCCTTATATCGGTTTGACCGGTTAAAAAAAGATTTTCACTGATGTTGAAGGGCGGATTATATCGGGTTCCGGGCGGTGTTTCAACACAATATGGCGGATGAACAAAAACCGGTACGGGTTGCCCCGCCCCGGCTCAAAGGGAACGGTTCCCTAAGGTGCTGAAGCACCGGGCGGATCGGTTCCGTACCATTCGTACTGCCTGCGGCCCGCCGCCTTGTCCTGATTTTTGTTAATCCGCTATAAAGACCGTCGGGCATCTGCAGCCGTCATTCCCGCGCGGGCGGGAATCTAGGCCGGTCGGTGCGGAAACTTATCGGGAAAAAAGGTTTCTTGAGATTTTACGTCCTGGATTCCCACTTTTGTGGGAATGACGTGGTGCAGGTTTCCGTACGGATGGATTCGTCATTCCCGCGCAGGCGGGAATCCGGACCTTAGAACAACAGCAATATTCAAAGATTATCTGAAAGTCCGGGATTCTGGATTCCCGCTTTCGCGGGAATGACGGTTCGGTTGCTACGGTTACTGTCAGGTTTCGGTTATGTTGGAATTTCGGGAAACTTATGAATCGTCATTCCCATGCAGGCGGGAATCTGGAATTTCAATGCCTCAAGAATTTATCGGAAAAAACCAAAACCCTTCCGCCGTCATTCCCACTTTCGTGGGAATGACGGGATGTAGGTTCGTAGGAATGACGTGGTGCAGGTTTCCGTGCGGATGGATTCGTCATTCCCGCGCAGGCGGGAATCCGGTCCGTTCGGTTTCAGTTATTTCCGATAAATTCCTGCTGCTTTTTATTTCTAGATTCCCACTTCCGTGGGAATGACGGCGGAGGGGATAAGTTCTTGCAATCTAAAATTTCGTCATTTCTATAAAATAGCAAACCGAAACAGAAACTTAAAAACAGAAACCTGAAACAGCAACCTGAAACCCCGTCATTCCCGCGCAGGCGGAAATCCGGCGGGCCGTAGGGTGTGCTTCGGCCCGCCATTTCCATCAATCCAACATGTCTACCGTTTTCATCGAATCCATCGAATCCGCCTTTTCGACCACCCGGCCCTACGCAACCGAACCGTCATTCCCGCGAAAGTGGGAATCTAGGACGCGGGGTTTGGGCAACCGTTTTATCCGATAAGTTTCCGTGCGGACAGGTCCGGATTCCCGCCTGCGCGGGAATGACGGGTTTCAAGATTACGGCATTTGCCGTTTCGGGTACAGGAAAGGGGGTTTTCGGGTAGAATGGCACTCTTTTATCCGGCTGTTGAAAAATATGTCTTCATCTGTTTCAAGTAAAACGCGCTATTGGGTATTGGCACTTGCCGCCATCGTGCTGGACCAGTGGTCGAAGTGGGCGGTGCTGTCGTCGTTTCAGTATCGGGAACGCGTCAACGTCATCCCTTCGTTTTTCGATCTGACGCTGGTGTACAACCCGGGCGCGGCATTCAGCTTCCTTGCCGATCAGGGCGGCTGGCAGAAATACTTTTTTTTGGTGCTGGCGGTGGCGGTGAGCGCGTATTTGGTACGCGCCATCTTGCGCGACGAGTTTGCAGCCCTCGGCAAAATCGGGGCGGCAATGATTATCGGCGGTGCGTCGGGCAATGTCATCGATCGCCTGATACACGGTCATGTCGTCGATTTCTTATTGTTTTATTGGCAAAATTGGTTTTATCCCGCCTTTAATATTGCCGACAGCTTTATCTGCGTCGGTGCGGTGTTGGCGGTGCTTGACAATATCGTCCATCGCAAAGATAGCAAAAAAACGTGAATGCCGTCTGAACACGGAATGCAAAACTTATGAACGGAAAAACCATCATCCTTGCCAATCCGCGCGGCTTCTGCGCCGGTGTGGATCGGGCAATCAGTATTGTCGAACGTGCTTTGGAAGAATTCGGCGCGCCGGTTTATGTGCGCCACGAAGTCGTCCACAACAAATTCGTCGTGGACAACCTGCGCGAAAAAGGCGCGGTGTTTATCGAAGACTTGGCGGAAGTGCCGCCGGGCGCGACACTGGTTTATTCGGCACACGGCGTATCGAAGGCGGTGCAGCAGGAAGCGGCGGAGCGCGGTTTCCGGGTATTTGATGCGACTTGCCCGCTGGTAACGAAAGTGCATAAGGAAGTCGCCCGACTGGATGCCCAAAACTGTGAAATCATCATGATCGGGCATAAGGGGCACGCCGAGGTCGAAGGCACGATGGGGCAGCTTGCACCGGGCAAAATGCTTTTGGTCGAAACGGTCGGAGATGTGGCAAAACTCGAAGTCAGAAACCCCGACAAACTCGCCTATGTCAGCCAAACCACGCTCTCGGTCGATGAAACCAAAGACATCATCGCCGCGCTGAACGCGCGTTTCCCCAATATCCGCAATCCGCACAAGGAAGACATCTGCTATGCGACGACCAACCGGCAAACCGCCGTCAAAGAGCTGGCGGAACAGTGCGACATCGTGATTGTGGTCGGTTCGCCCAATTCGTCCAACAGCAACCGCCTGCGCGAAGTGGCGGCATCGCGCGGAATCGATGCGTATATGGTGGACAACGCGTCCTACCTGCAACGCACGTGGTTTGAAGGCAAAAGCAAAGTCGGCGTAACGGCAGGCGCGTCCGCGCCCGAAGTGTTGGTGCGGGAAGTATTGGCAGCCATACGCGGATGGGGGCATGAAACCGTGCGCGAAGGGGGGGGCGCGGAAGAAAGCATCGTGTTCGTCCTGCCCAAGGAGCTGCGCCGCGAGGGCGAAACCAAACCCGATTTGTGCAAACGTTGACGCAGGCGTTAACGCAGGCATCGGATGTTTGGGCAATACAAATGCCGAGACCTTTGCAAAAATCCCCAAAATCCCCTAAATTCCCACCAAGGCATTTAGGGGATTTCCCATGAGCACCTTCTTCCGGCAAACCGCACAAGCCATGACTGCCAAACACATCGGCCGCTTCCCGCTATCGGAGTTGGACCAGGTGATTGATTGGCAGCCGATCGAACAATACCTGAACCGTCAAAAAACCCGTTACCTCAGAGACCGCCGCGGCCGCCCCGCCCATCCCCTGTCGTCCATGTTCAAAGCCGTCCTGCCCGGACAATGGCACAGCCTCTCCGATCCCGAACTCGAACACAGCCTCATCACCCGCATCGGTTTCAACCTGTTTTGCCGTTTTGACGAACCGGGCATCCCCGGTTGCAGCACCTTATGCCGCTACCGTAAATTCCGCTATGCGCGGGCAGCCTATTTCGGGCTGCTCAAAGTGGGTGCGCAAAGCCACCTGAAGGCGATGTGTTTGAACCTGTTGAAAGCCGCCAACAGGCTAAGTGCGCCCGCTGCCGCCTAAAAGGCGGCCCGGATGCCTGATTATCGGGTATCCGGGGGGGATTAAGGGGATATTCGGGTAAAATTAGGAGGTATTTGGGGCGAAAACAGCCGAAAACCTGTGTTTGGGTTTCGGATGTCGAAGGAAGGGCTTTTTTGCAAAGGCCTCATGCCGTCTGAACAGGCTTCAGACGGCATTTTTGCCGCGTGCCGGATGCGGAAACCAATCAGGCGTAATGTCGTGCAAGAAAACCGGGCAGTTCGGACAAACCGTCCAATACGGCGAGATGCGGTGCGCCAAGGAGCTGTTCGCGCGAATGTGCGCCGGTGGCAACGCCGACTGCCGCCGCGCCTGCGTTTGCCGCCATATGCAGGTCGTGCGCCGTATCGCCGACAACCAATGCCTCTTTCGGGTCGAGTCCCAGTTCGCCGCAGAGTCCGAATACCATTTCGGGCGAGGGTTTGGAGGGGTATTCCCCCGCGCAGGCGGTGGCGAGCCAATAGCCGCCGGTGGCGGTTTGGCTGATGGCGTTGTCCAAACCCGCCCGCCCTTTGCCCGTGGCGACGGCAAGCCGGAAGCCTTGCGCTTTGAGCTTGTCCAGACAGGGCGGGGCATCGGGAAAGAGTGTCATATTGCGGTTGTTGGGATTGAGGTAATGCGCGGAATAAGTGCGCGCGATGTCGGCAACGGCAGCTTCAGAAGGCATTTCGAGCAGGGCGCGGATGATTTCGGGCAGGCTGTATCCGATCAGGCTGCGGACGCGCTCCGCTTCGGGCGGCGGAAAACCGCATTCGGCGAAGCTGCGGCGCATGGTGTCGATGATGGGTTGGGTCGTATCGGCAAGCGTGCCGTCCCAGTCGAAGATGATGAGTTTGGGCGGGGTCATGGCAGGTTGGTTGCAGTAAAAAAGCAGATTTTATGCGGAAAACGCAGACGTGTCGCATTTTCGACAAAATTTGTCGGCTGAGCGATATGTTTTTCCGAACAAGCCGCGTTGTGCTTTATTAAAATAGAACCATTATCATTTATACAGATGGGACAGTTTATGTCAGTTTTCCGCATCAATATGACCGCCGCCACGGTTTTGGCAGCACTCTCGTCTCCGGTTTTTGCCGCACAAACGGCGGATTTGGAAACCGTCCATATCAAAGGGCAGCGTTCGTACAACGCGATTGCCACCGAGAAAAACGGCGATTACAGCTCGTTAAAGGCAGCTATATGGATGACCGCCTCAATACCCGCGTCTCCCCCTGCCGCCTGAAAGACAAAAACGCCGCCGAACCCGAACAACCGCAACACCCGTTACGCCGCATTGGGCAAACGCGTGATGGAAGGCGTTGAGACCGAAATCAGCGGTGCGATTACACCGAAATGGCAAATCCATGCAGGTTACAGCTATCTGCACAGCCAAATCAAAACCGCCGCCAATCCACGCGACGACGGCATCTTCCTGCTGGTGCCCAAACACAGCGCAAACCTGTGGACGACTTACCAAGTTACGCCCGGGCTGACCGTCGGCGGCGGCGTGAACGCGATGAGCGGCATTACTTCATCTGCAGGGATGCATGCAGGCGGTTATGCCACGTTCGATGCGATGGCGGCATACCGCTTCACGCCCAAGCTGAAGCTGCAAATCAATGCCGACAACATCTTCAACCGCCATTACTACGCCCGCGTCGGCGGCACGAACACCTTTAACATTCCCGGTTCGGAGCGCAGCCTGACGGCAAACCTGCGTTACAGTTTTTAAAGACCAATATGCCGTCTGAAACGGCAGCCGCAGCATAATCAAACCACAACAAGCTGCGCGGCATACCCTATGCGCTCACAACCGGAGTATGGCATTGCGAAGGAAAACAGACCGAACCGGCAGGCAGACCGCTTTGCCGGTTCGGTTTTACCGCTTGCCGCCAGTCTGACCCACAAGCCGAACATCATGAAACCCATACCGACCGACACATTCCAACCTGCCATACTGCCCCAAGCCTTTGAAACCGAAATCAAATCCACCTGCACGGGGCGAATCTATCGGATTCAGACGGCAACACTCGGCGAAATGCAGTCTGAAGGCTATCCCGTCCTCTTTGTCCTCGACGGCGAAGCCTTTTTCCCGCGCTGTACAACATCATGCAGTCGCTGATGAACAACCCCGTTACCCGAAGCAACGCCCCCTGCCTGATTGTCGGTATCGGCTACACGACAGGCAGTGTGCGCGACCTGGCGCAGCGTGCCGCCGACTACACGCCGCCGCTTGGAGACAACGCCACAGCAGACGAACGGCGGCAGTTCGGACAGGCAGACCGCTTCGCCGACTTTATCGACAGCGAACTGACCGCCTTTTTAGAAAGCCGCTACACCCTTAACCGTAATGAAACCGCCGTATTCGGACACTCGTTCGGCGCACTGTTCGGACTGTATTCCCTGCTTTCCCACCGCTGTTTCAGACGGCATTGGCTCGTATCCCCTCGATTTGGTGGCACAACAGGCGGATACTCGACTTTATGCCGTCTGAAAACCGGCTGGACGGCATCGATGCCTGCCTCAACATCGGCGCACTCGAGCGGAGCAGCGGTTGCAAACGCAGGGAAGAACGCGACATGGCAGGGCAGGCCGAACAAATGGCGGCAGAGTTGGACAGGCGCGGGACCGCCGTATTTTTCCGGGAATATCCGAATGCCGACCACGGCAATGTCCCGTTTTACTCGCTGACCGACTGCGTCGAATATTTGAGGGAAGCGTGGCAACGGTAGGGGGAATCAAATATATGACTGCTTTGTTTTGCATCGGAAAATATAGCGGATTAACAAAAACCGGTACGGCGTTGCCCCGCCTTAGCTCAAAGAGAACGATTCTCTAAGGTGCTGAAGCACCAAGTGAATCGGTTCCGTACTATTTGTACTGTCTGCGGCTTCGTCGCCTTGTCCTGATTTTCGTTAATCCGCTATAACAAGAGCTACCTAAGGGTTATTGCTCCCGTTCTCATTTCGCAGTGCTACAATTTTTGATAGTTCGCGCCGACTTTGCCCGTGGTTGTCGCTCCCGTTCTCATTTTATCTTGATATAAAAATCCCTGTTTCAGGCCGCCTGAAACAGGGATAGATTAATTTAACGGACGGGCGGGCGTTTTTTCAGGCGGCACGGTCTGATTTCTTTGCCCGGTTCGTCGATTTGGTATTTTTGGAATGAAAGGGCGGTTTTGACACCGATACTTTTGAAAATGCCGTTTTTCCCTTTGGCGCTGTCTGTGTCATGTACACGGATATCAATCGCCCCGGTTGATTTATTTAGGCTGGCGAAATAACCAAAAAATACGTTTTTCTTGGCAGTTACTTTTATTCAATCATTCGAATAAAGTACGAATGAAACCGGTTTTGGGCTTCAGACGGCATTTGTATTTTTGGTTACCAATTCACGCGCACCGACCGGCTGCCGAGCAATGTTTCCAGTTCGCCGAACAATGCGGAACTCGGTGTAACCGTCCATTTCGGAGGCACTTGAAGCCTGCCCGACGCTTTTTCGTTGGCATACGACAATTGAAGCGGGATGCGCGGCGTGTCGGGCAGTTGGTGGGCGGCGAGCAGCCGTACCAGTCCGCCGATGTCGTGATGCGGGGCAAGGGCGAGGCTGAGGCTGCGGGCGTAGCGTTCGCGCGCCGTTTGCAGGGTCATGACTTGGTTTGCCATGATGCGCAGCCCGTCGCCGCCGCCGTAATCGTCGCGGCTGACTTTGGATTCGATAATCAGCACTTGGTCGGCTTTGAGGCAGTCGGCGCAGTTTTCCAGCGTTTGTCCGCCGACCATGATTTCAGCCTGCCCGCTCGAATCTTCGAGGCTGACGAAGGCGATTTTGCCGCGTTTGCCCATCATGGTGCGCACGGCGGTAACGAATCCGGCGAGGCGCACGCTGTCTTGCGGTTTCAGACGGCCTAATTTGGTCGGGGCGATTTGGCGGACTTCTTGGGCATACGGGCCGAACGGGTGGCCGGACAGGTAAAAGCCGATGACGGTTTTTTCTTCGGCGAGTTTTTCCGATTCGCTCCACATGGGTGCGTCGATGAGCCGCACCGGTTCGATGGCGTCTTCCATCATGTCAAACAGCCCGCCCTGATTGGCGTTGGCGGCTTTTTGGTCGGCGTTGTCCATGGCAAGGTCGATGTTCGCCAAGAGCATGGCGCGGTTGGGTTCGATGCTGTCGAACGCGCCGCCGCGTATCAGGGCTTCGAGGGTGCGGCGGTTCATGTGTTCTTTGCCGACGCGCTCGCAGAAGTCCAACAGGCCGGTAAATTTGCCGCCGCTTTGCCGCGCGGCGATGATGGATTCGACGGCGGCTTCGCCCGTGCCTTTAATCGCGCCGAGTGCGTAGCGGATTTTCATGTTCGGATACGGCGTGAAGCGGTAGTCGGATTCGTTAATGTCGGGCGGCAGGAACTCGATGCCGTTGGCGCGGCAGTCGTCGTAGAAATGTTTGAGCTGGTCGGTGTTGTCCAATTCGGACGACATCGTCGCCGCCATAAATTCGGCGGGATAGTGGGCTTTGAGCCATGCGGTCTGGTAGGAAATCAGGGCGTAGGCGGCGGCGTGGGATTTGTTGAAACCGTAGCCGGCGAATTTTTCCATGTAGTTGAAGATTTCGTCGGATTTTTCGCGCGAAATGCCTTGTTTTGCCGCACCTTCGGCGAAGATTTCGCGGTGTTTCACCATCTCTTCGGGCTTTTTCTTACCCATGGCGCGGCGCAGCAGGTCCGCGCCGCCGAGCGAGTAGCCGCCGATAATCTGCGCCGCCTGCATCACTTGTTCCTGATACACCATAATGCCGTAGGTCGGCGCGAGGATGCCTTCCAGCAGCGGGTGGATGTATTGGAATTCCTGTCCCTTCATGCGTGCGACGAAGTCGGGAATGTTGTCCATCGGGCCGGGTCGGTAGAGCGATACGAAGGCGATGAGTTCTTCAAACTTGGTCGTATGCGCCGTTTTCAGCATTTTTTTCATGCCGGTCGACTCGAACTGGAAGACGGCGGTGGTGTTCGCATCGCGGAAGATTTGGTAGGCAGTCTGGTCGTCAAGCGGAATCTTGCCGACATCGACGATATCGCCGGCGGTGTTTTTGATGTTGTTCTGCGCCATTTCGATAATGGTCAGGTTGCGCAGGCCCAAAAAGTCGAACTTCACCAAACCCACGTCTTCCACGTCGCCCTTGTCGTACATGGATACGGGCGAGGCGGATTCGTCCGCCTGATACACGGGGCTGTAATCGGAAATCTTGCCCGGCGCAATCAACACGCCGCCTGCGTGCATACCCAAACCGCGCGTCAGGTCTTCCAGTTTTTTCGCCAGCGTAATCAGTTCGTCCGCTTCTTCCGCTTCAAGCAATTCCTGAATCTGCGGCTGCGCCTTCATCGCGTCGTCCAAACTCAGGGGTTTGTTGGCTTCCAACGGAATCAGCTTGGACAGTTTGTCGCACAGCATAAACGGCAGTTCCAGCACACGCCCCACGTCGCGGATGACCGCTTTGGACGACATCGTGCCGAAAGTCACAATCTGGCTGACCGCCTGAGCGCCGTATTTTTCGCGCACGTATTCAATCACGCGGCCGCGGTTTGCCTGACAGAAGTCCACGTCAAAGTCGGGCATGGAAACGCGTTCGGGGTTTAGGAAACGCTCGAACAGCAGCGCGTATTTCAGCGGGTCGAGGTCGGTAATCTTCAGCGAATACGCCACCAGCGAACCCGCGCCCGAACCGCGTCCCGGCCCGACCGGACAGCCGTGCGTTTTCGCCCAGTTGATAAAGTCTTGTACGATAAGGAAATAGCCGGGGAATTTCATTTGGATGATGATGTTCAGCTCAAAGTCCAGCCGCTCCTGATATTCCGGCATTTTTGCCGCCCGTTCCGCCTCGTCGGGATAAAGCTGAACCATGCGTTCCTGCAAACCCTCGTTGGAAAGTTTGATGAGACAGTCATCGAGTGATAAACCGTCGGGCGTGGGGAAAAGGGGTAGGAAGTTTTTGCCCAATGTGATGTGCAAGTTGCAGCGTTTGGCGATTTCCACCGTGTTTTCCAAGGCTTCGGGCAAGTCGGCGAAACGCTCCAGCATCGTTTCCGGCGGAATGAAAAACTGGCTCGGCGTGAAATCGCGCGGACGTTTCTTGTCCGTCAGCACCCAGCCGCCCGCGATGCACACCCGCGCCTCGTGCGCGTTGAAATCGTCGCGGTTCATAAACTGTGTCGGATGCGTTGCTACCACCGGCAAACCCAGTTCCTCCGCCAGCTTCACGCTGCCGGAAACGCAAGCCTCCCATTCGGGGCGTTCGGGCAGGCGTTGCAGCTCTAAATAAAACGTATCGGGAAACCATGCCGCATATTTCAACGCCGCCGCACGCGCCGCGTCTTCATTGCCGTTCAACAGATTCACGCCCACTTCGCCGTAATGCGCGCCGCTCAAACAAATCAAGCCGCTGTTGTCGCCGTTTTCCAGCCATTCGGGATTGAGTTCCGCATGATGGATATTGCGGTCTTGGCCGACATAAGCCTCCGTCAAAAGCTCGCTCAAGCGCAGATAACCCGCATCGTTGCGGATAACCAGCATGGCGCGGAACGGCTTGTCGGGCGCATTCGGATTGCCTATCCACACGTCCGCCGCGCCGACGGGCTTAATCCCTGCGCCGCGGCAGGCTTTATAGAATTTCACCAAACCGAATTCGTTCATCAAATCGCTGATGCCCAAAGCAGGCAAACCGTATTCTTGCGCTTTGGCAATCAGTTTTTTAATCCGCACCATACCGTCGGTAATGGAGAATTCGGTATGCAGGCGCAGGGGGATGTAGGTCGGCTCGGTCATGGCAAAATCGGCGTGGACAATAAAAGGCGTATTGTAGCAGGGTTGTCTTTAGATGGCGGTGCAGGTAATGCCGTTTCGGATTCAGACGGCATGACCTGCAAATGTTTTTTGAGCTTTTACGACGGCAAAAAAATGCCTCCTGCCGTGTGGCGGAGGCTTCCCAAGGAGTATTGATAGATATAAAGGACTATCAAACTAGTTATAAGGAACTATATACCTTATTCGGACGGACGGCAAGCAGTTAAATAGATTTTACGTTCAAACAGGTTTTTGATTTCGTTTTGATGCCGATTGCCGGTGTATCGGGCAGTCCGCGTTTGAGGATGTGCATCAGCGTCAATGCGGATTCGTCGGGGAACAGGATTTGCAGCCTGCCGTTGGGCAGGATTTCTTTGGACGGATGGCGGCATACGGGGTTTCAGACGGCATTTTTACGGAACAGGCAGTGCGGACACATCGCCGGTTTTGCGGCAATTTTGGGTGCGGCGGCGGCAGGTGCTACAATAACGCCCTCTTTCTAAAAGGGGACATTATGGAAGCCACCGTCTATCTCGAAGACAACGAATACATCGCTTTGTGCGACCTCTTGAAATTGGCCGGACTTGCCGAAAGCGGCGGACAGGCAAAAGCATTTATCGCCGAAGGGCTGGTGTTGCGCAACGGCGGAACCGAAATCCGCAAAACGGCCAAAATACGCGGCGGAGAAGTCATCGAGTTTGACGGCGCGCGCTTGGAAATCGCCGATGGATACGACCCTGAAGCATAAAGCCGAAGCCCTTTTGGGCGAGCCGCTTTTGGACGAACCCGTCCGCCCCGAGTCGTGGGAATGCTGCGGCAGCGACTGCGGCGAGGCGTGCATTCAGACGATTTACTGGGCGGACAAGGCACGCTACGATGCGCAACGGAAAAAACTGAAGGAAGCGGGTTGGCCGGACGATGCCGTCTGAAAACGGTTGGGCTTGATAAAACCACGTTTTCAGACGGTCTTTTATAGTAGATTAAAATTGAAAACGTTCATATCGCCATTCCCTCGAAAGCAGGAATCCGGAAGTTTGAAATAGCGGTTAACCTTAAACATTTCCAATAAATCAAAGTCTGGATTCTCGCCTGCGCGGGAATGACGGCATAGCGGCTTTTCCTTTGCATTTGCCATACACCTGTTTTTTAAAATGACCGCCGCCGCCACACTGTCCGACAACATTGAAACATCCCGTCCTTCATTCACCACCACATAACACCCCATGATAGACCTGCACTGCCATTCCACCGTTTCCGACGGTATGCTCCCCCCCGCCGAAGTCGTCCGCCTCGCACATCAAAACGGCTGCACGCTGCTGGCGTTGACCGACCACGACCACACGGGCGGCATCTCCGAAGCGCGTGCCGAAGCCGACAGGCTCGGTTTGCGCCTGATTAACGGCGTGGAAATTTCGGTAACGTGGCGCGGGCGTACCATACACGTTGTCGGTTTGGATTTCGACGAGCAGGACGAAAACCTGCAAAACCTGTTGGCAGATGTCCGCAAAGGCCGTCTGAAACGTCTTGAAGCCATCGCCGCCAAGCTCGAAAAGAAAGGCATCGGCGGCGCATACGACGGCGCGCTGGCGCTGGCGGCAAACAAAGAAATGGTCAGCCGCACCCACGTCGCCGAGTTCCTCATCAAAAACGGACACGTCAAAAACAAGCAGCAGGCGTTCACCAAATACTTGGGCGACGGCAAATCCTGCGCGGTACGCCACGAATGGGCGACGCTGGCAGACTGCGTCTCCGCCGTCAACGGCGCGGGCGGCATGGCGGTGATTGCCCATCCGATGCGTTATGATTTGTCGGCAACCGCCAAGCGCAACCTGTTTGAAGAATTTAAAAACCTCGGCGGCGCGGGCATCGAAGTCCACAGCGGCAACTGCTGCAAAAACGACCGCCTCAACTACGCGCTTTTGGCAGACCGCTTCGGATTGTTGGCAAGCGCGGGCAGCGACTTCCACCGTTTAGACGACTTCAGCGGCGGCATCCTCGGCGCGTGTCCCGATCTTCCGGAAAACTGCAAACCGGTGCGGGCGCATTTTTCCCGACATTGAATGCGGATGAAAATGCCGTCTGAAAGGTCTTCAGACGGCATTTTTTGCGTTTTAAACGTTGTCGTACGGTTTTCGGACGGTTTTGCCGATGGCGGCGATGCCTTTTTCCAGCGTTTGAGCGTCCTGTGCGATACTCATACGGATGCACTCGCCCGCGTGCGGGTAGTCTTGCGTGTCGATGCCGACGAAGAAATGTTCGCCCGGAATAATCAGCGTACCTTCGGCTTTGAGCATTTCGTACAGGGTTTGCGACGAAACGGGCAGGTTTTCAAACCAGAGCCACAGGAAAATCGCGCCTTCGGGTTTGTGGATTTTCATCGGGTACGCGCCCAGCTCGCGCTTGAGCAGCGAAACGGCGGTTTGCGCCTGATTGCGGTAAAACGGCCGGATGACTTGGTCGGCAAGCCGTTTCATCTCGCCGCTTTCCAGCAGCGGGGCGGCGATGGCCGCGCCGAAGCGCGTGGGGGCAAGGTTCACAATCGCGTTCAGGCTGCTGACGGCTTTGACGGCTTCGGGCGCGGCGACGATGATGCCGGTGCGAACGCCCGGCAGGCCGACTTTGGAAAGGCTGAAGCAGAGGATGATGTTTTCGTGCCAATTCAGCGTTACGCCGCTGTCAATAATGTTGGGGAACGGCATTCCGTAGGCGTTGTCGATAATCGGCGGAATGCCGTGTTCACGCGCCAAAGCGTCCAAACGCGCCATTTCGCCGTCGGTCAACACGTTGCCGGTCGGGTTGGTCGGGCGCGAACAGCAAATCGCGCCGATTTTGCCCGCTTTGAGTTCGGGCAGGTTTTCCAGTGCGTCAAAGTCCACGCGGTATTTGAAGAAGCCTGCTTCGCCTTCGTGTTCGACGTTTTCGATTTTGGGTTTGACGGAAACGAAGTGCCGCCCTTCGACATGCACGTCGGCATAGCCGATGTATTCGGGCGCGAGCGGCAACAAAATGGCTTTTTCTGCGGATGTGCCGTCTGAAAGCTTGAATTTGCCGCCGAAGAGGTTGAATAAATAGAAAAACGCGTTTTGCGAACCGTTGGTCAGCGCGATATTGCCGACGGTCAGGTTCCAGCCGTATTCGCGGTTGGGGAAGGCGGTCAGCGCGTCAATCAGCGCGGCATCGCCTTGGGGATTGGAGTAGTTGCCGATGTTCTCGACGGCGTGTTCCGCCGCCAGCTTGGAAAATATGTCGGCGAACGCCCGATCGATTTCGGGAATGCGCGCCGGGTTGCCGCCGCCGAGCATATTGACGGGCTTGTCGCTTTTGAGCGCGTCGCCGAGGTCGTCCATCAGTTGCAGGATGCCGCTGTGTTGCGTGAATTTTTCGCCGAATGCCGAGAACTGCATGTCAAACTCAGTGTGTGTAAGGCAGATTGGTTTGTACGGTATGCCGTCTGAAGGTTCAGACGGCATTTTTTCTGTGTGTTTCGCATACCCAAAGCAGGTCGCAGATGCCGCCGGTCGGGGTAAAGCCGGTCGGGGCGTTGACGAGCAGGTCGCGGATTGCCTGCTGGTCGTAACGGTCGCAGGCGGTGCGGATGCGGTCGAGCAGGGCGGAGAGTTCGTGCCACGGCAGCATGGTCTCGTCGGCGGTCATGATGCGCGGATGGCCGGTTTTGCGGACGTTGTCGCCGATGAGCAACTCTTCGTAGAGTTTTTCGCCGGGGCGCAGCCCGGTAATGAGGATTTCGATGTCGCCGTCGGGCTGTTCGGGCGTTTTGGGTTTGAGTCCGCTTAAGGTAATCATTTGGCGGGCAAGGTCGGTGATTCTGACGGATTCGCCCATATCGAGGACGAACACGTCGCCGCCTCTGCCCATCGCGCCGGCTTGGATAACCAGTTGCGCCGCTTCGGGTATGGTCATGAAATAGCGCGTGATGTCGGGGTGGGTCAGGGTGATGGGGCCGCCTTCGGCAATCTGTTTTTCAAACAGCGGGACGACGGAGCCGGACGAGCCTAAAACATTGCCGAAACGTACCATGCTGAAGCGGGTTTTTTGTCCGGGTTCGGCGGCGAGTGCCTGAAGGCAGAGTTCCGCCATGCGTTTGCCCGCACCCATCGTGTTGGCGGGGCGGACGGCTTTGTCGGTGGAGATGAGGACGAAGGTTTCCACGCCCGAAGCCGTGGCGGCAAGCGCGCATTCGAGTGTGCCGAAGATGTTGTTGCGTATGCCCTCGACGGTGTTGAACTCGACCATAGGGACGTGTTTGTAGGCGGCGGCGTGATAGACGGTCGCAACGGAAAAGGCGGTCATAATGTGCGTGAGCAGCGTGCGGTTTTGCACCGAACCCAAAAAGGGAAGGATTTCGGCGGCGATGCCGTTTCGGGCGCAGTATTCGCACAATTCTTTTTCAACGGTGTACAGGGCGAATTCGGACAGCTCGAACAGCAGCAGCCTTTCGGGGCGGCGGCGGATAATCTGGCGGCAGAGTTCCGAACCGATGGAGCCGCCCGCGCCGGTTACCATGACGGTTTTGCCTTCGGTGTCGGCATTCATGAGGCGGTCGTCGGGTGCGACGGAATCGCGCCCGAGCAGGTCGGACACAGAGATTTTTTTGAGCGTGCCGATGCTGATTTTCCCGTCCATCAGGTCTTTCATTCCGGGAATGGTCAACACTTCGCACGGATAGGCTTTCAGTTTGCTGATGATTCGGCGGCGTTGTTCCTGAGTCGCGCTGGGAATGGCGAGCAGGATTTTTTCCACGCCGTAGCGTTCGATGAGGAAGGCGATGGCATCGGGCTGGTAAACGGCAAGGTCGTAGATGACGGTGTGCCAAAGCTTGGGGTTGTCGTCCACAAAGGCGGCGGCGGAATATTCGCGCATCTGTTTGACGGCTTCAAGGAGCTGCCGACCCGAACGCCCCGCGCCGTAAATGATGACGGGGTCATGTGTTTTTTTCTGGTGGTCGGACAGGAGTCCGCGCAAAACCATACGCGAGCCGGTCACGGAAACAAACAGCAGTAAGAAATAGACAATCGGCAGGGCGAGGCGCAGCCTTTCTTCAAAAATCAATGTGTTGAGGAAGAACAATACGGCGGAGGCGAGGCTGCCGGCAAAGGCGGTGGTCAGGACGTGGAAACTGACAAAGCGTGTAACGGCGCGGTAAAGCCCCATTCGGATAAATAATGTGATGGTCAGCAAGGCAGTCAGCAAAAAAGACTGCCAGTTGGCAAAATCGAACCATTCGTCCGAGTAGTCGGCCTTCAGGCTTTGGGTGAACCAAAAGGCAATGAAAATCATCAGAAAATCGTGTATGAGGAAACAGATTTTCTTGATGTTGCGCGGCAGGGCGATCAGGGTTTCCAGATTCATATCGTGGGGCGGTATGTGCTTTCAGGCGGCATATGCCGTCTGAAGGGTTATCGTGCGGCTTCGGTCAGGACGGCTTCGATGTGTTTTTTGCAGAACGCGATTTCGTCGTCGGTCAGCGTCGGGTGCACCAAGAACGTCAGGGCGGTGCCGCCCAGTTCGACGGCGTTTTTCAGCCGCTCTTTGGGCCGCCACGGCGTGTTGTCGAAGGCTTTTTCCAAATACACTTCGGAGCAGCCGCCTTGATAGCAGGGGACGTTGCGCGCGTTCAGTTCGCTGACGATGCGGTCGCGCGTCCAGTCGTCTTTCAGGTGTTCGGGTTTGACGAAGGCGTAGAACTTGTATTGCGCGTGTCCGATGTAGCCGGCGACTTCAATCAGGCGGATGCTTTTGAATTTGCGCAAACTTTCTGCCAGCTTGGCGGCGTTTTCTTGGCGGCGCGCCGTCCATTCGGGCAGGTGTTTGAGCTGGATGCGGCCGATGACAGCCTGCATTTCCATCATGCGCCAGTTGGTGCCGAAACTTTCGTGCAGCCAGCGGAAACCGGGCGCGTGTTCGCGGTGGTACACGGCATCGTAGCTTTTGCCGTGGTCTTTGTACGCCCACATTTTTTCCCACAGGGTTTTGTCGTTGGTCGTAACCATACCGCCCTCGCCGCCGGTGGTGATGATTTTGTCTTGACAGAACGACCACGCGCCGACGTGCCCGATAGAGCCGACGGATTTGCCTTTGTAGGTCGCGCCGTGCGCTTGGGCGCAGTCTTCAATCACCCACAAATCATGTTCTTTTGCCAAAGCCATGATGCCGTCCATTTCGGCAGGCATACCGGCAAGGTGGACGACAATGACGGCTTTGGTATTCGGGGTCAGCACGGCTTTGACGGTTTCCGCGCTGATGTTTTGGCTGTTCAAATCCACGTCGGCAAACACGGGGTTTGCGCCCGCGTTCACAATGCAGGAGGCGGAGGCGAGGAAGGTGCGCGAGGTAACAATCACATCGTCGCCCGCGCCTATGCCGATTGCTTTGAGTGCGGCATCGAGCGCAAGCGTGCCGTTGGAAAGGGCGACGGCGTACCGCGTGCCGGCAAAGGCGGCAAATTCTTTTTCAAATTCGCGGCATTCGCTGCCCGTCCAGTAGTTGACTTTGTTGGACAGCAGGACTTTGGAAACGGCATCGGCTTCTTCTCGGGTGAAGCTCGGCCATGGGGAAAGGGCGGTGTTCAGCATGGTGTTTGGTCCGTCGGGTTCGGACGGCATTTCCGACCCTATGCCGTCTGAAGGGGGCGTGTTCCGAAGAATCGGGCGCGCGCCGCAGGTGTTGTCAAAATCGGTTTGTACGGAAGTTTATTTTAATCGCTTATGCCGTCCCGGTCTTGGGGTTTTTGCCCGTAAGGGGCTTTGCCGGGTTGCCCGCGACGGTCATGCCGTCCGGGATGTCGCATACGATAACCGCCCCTGCACCGGCGGTAACCCCGCTGCCGACGGTTGTCTGCTGGCGGCTGCACGCGCCCGTGCCTATCCGGCTTTCTTCGCCGATACGCGTGTTGCCTGACAGGTGCGCGCCCGGGCTGATGTGGACGAAAGCGTCAAGCAGGCAGTCGTGATCGACGGTGGCGGCAGTGTTCACAATCACGCCGTCTTTCAATACGCTGCCGGCCTGTACGACGGCTTTCGCCATTACGACGCTGCCTTGTCCGATTATTGCAGAAGGCGAGACGGTCGCGTCGGGATGAATCAGAACGGGCAGTTTGAAGCCGAGCGCGGCGGCTTTTTCGGTGATTTGGCGGCGGATGCGGTTGTTGCCGACGGCGACGGTGATGTCGAATTGTTCGGGCGATAAACTGTTTTCAAGCAGCAGCGTCGTGCCGATGACGGGGAAGCCGTTGACGCTGCCTTGGGTGCGGTCGTCCAGAAAAACGATTTCGCCGTATGTGCCGAGTGCGGCGGCAAGCTCGGCAACGACTTTGCCGTGTCCGCCCGCGCCGATAACGGCGAGTTTGCGATTCCCCGCGAAAGGGGGCATGGTGGCTTCCCCTTGCGCCGAAATGCCTTCTTTAATCAAGACTTTTTTGACTGTCAGAAACAGGATTTTCATATCCAGCCAAAAGCTGAAATTGTCGGTGTACCAAACATCGCAGGAGAACTTTTCGTCCCACGAAAGCGCGTTGCGCCCGTTGACCTGCGCCCAGCCGGTAATGCCCGGTTTCATTTCGTGGCGGCGGTTTTGAAATTTGTTGTAAAGCGGCAGATACTGCATCAAAAGCGGGCGGGGGCCGACCAGGCTCATCTCGCCTTTGAGGACGTTCCACAGTTCAGGCAGTTCGTCCAAACTGGCGGTGCGCAGTTTTTTGCCGAAGGGCGTGAGCCGCTCGCTGTCGGGCAGCGGAATGCCGTCTGAATCAAGCGCGTCGCGCATGGAACGGAATTTGACCATTTTAAAAGGTTTTCCGTCCTTTCCGGGGCGTTCCCGAATGAAGAAGACGGGCGAACCTAAGTTTTTGCGGATGAGGTATATTAAAACCAAAAACACGGGCGACAGGGCAATCAGCCCCGATGCGGAGGCGACAATGTCGATGAGGCGTTTGAAAAATTTATTCATCAGCTAATCTTTCAATCAGGTTGACGATTTTCCGATAGGAAATGTCGCGCCTGAAGCGGCGGACGATTTCTTCGGACTGAACAGGATCGTTTTTGCGCTTCAAAATATCTTTGGCGGCTCGAACGAAACCGTCCACATCGCCGGAACGGTAGTTCGCATGCGGCAGCAGGGTAAGGACTTCGGCAACTTCGTCGTGGACCTGGCTGTTCAGAATCGGTTTTTGCAAAGCCATATAGTCGGAGAGTTTGTTGGTAATCGATGCCATTGAATAGGACCGGATGGCGTTGACGGCAATGTCGCAGCCCTTGGCGACCGACATCATTTCGGCGTAAGGAATGTAGCCGTAAAACTTGATGCCGTCGCAGGCATATTGTTTGAGCCTGTCCAAATCGGGGCCGCCGCCCATGATGTGCAGCTCTACATTTTCGCCGTCGTCCAAAAGTTTCCGAACGCCTTTGCACACGGTTTCCACGTCATAGCTGTAACTGAGCGTGCCCAAGTAGAAAAAGCGGGTTTTGTCGTCGCCAAAATCTTTGGCAGGTGCGGCATCGAGTTTGGGAAAGTCAGCACCAATATAGATGACTTCGCCGGGTACGTTCGGATTGGTTTCTTTGGCGCGGTCGAGATAAGTCTGCGATACGGCAACCAGCGCGTCGGCGTAGCGGTAGGCCCGGTTGGCGCGTGAAGCAAAGGGCAGCAGCTTGTGCGGTACTTTTTTCAAAAACGGTACGACCGAGGAGAAAGACTCCGGCCATACGTCCTGCACATCGACAATCAGTTTGTAACCCAAACGCGCTTTGTGTTTGCCCAACAGCAGGTTGGTGGCAATCAGCGGATAGGCGGAATAGACGACGTCTTGTTCGCCCGGACGGCAGTTTTCCAACCATTTTTCAAAATGTTTGACGAAGCGGTGATGGCTGGTCACGCGTCCCAAAGATACGTTTTTGCTGTATCCGCTTTCTTCCAACAGTATGACTTTCAGACGGCCTTGTGAGGCGGCCTCGGCATCTTCGGGCCGTCTGAAAGATTTGTCGTAGTGCTTGAAGTTGCTGGTAATCAGCAACACGTCGTGCGATTGCGACAATAGTTCTGCCAGATACCAAAAGCGGTTGAAATGCGGTTCGGACGGCAGCGAGCAGTAGGGGGCGGCTATGGTAATGTTCATGTTTCAGACGGCCTTACATTTCGTACGCAGCCATGGTGGTGCGGTAGATTTCGTCGTCGGAGCATAAGGTTTCGACATGTTTGTGCAGGGCTTTGCCCATTTGGCTGCGCAACTCTGGATGCTTGATGAGTGTATCGACGGCTTCGATAAACGCTTCGTCATCGCCGAAAGGAATGCAGTAGCCGGTTTGGCCGGTAATGACCATTTCGGAAATGCCCGCCATGTTGTAGGTCACGACAGGCGTGTCGTAAAGGCCGGCTTCCAAAATATTGTTGCCGACACCTGCGCCGTGGTCACCTACGCAATGCGGCGTGTTCACTAAAATATCGACTTCTTTGAAGTAGCCGGTCAAATCGCGGACGCCGCCGAGGAAGGTCACTTTGTCTTCAATACCCAAACGTTTGGCTTGGGCTTTGAGGTTGTCCATTTCTTCTCCTATGCCCGCCATGTTCAGGCGTACGGGTATATTGCGGCCAACCATTTTCTTCAAAATATCCAACATCAGATGCACGGCGCGGACGGTGTCCAAACGGGAAAGTGTGCCGAGTACGGCGCATTCTTTTTCGGTTTTCCGGAAATGAAATTCCGGGGGGGGGGTGTTGTAGGCGTAGGCAATCCGGCCGGCGGGGAAGCCGTGGCGGATGAGCTTTTCGCGTTCGTGTTTGCAGTTGCCGATGATGTACGCGCCCAGCTTGTCGAAGAGTTTGGCGGTTTTGGGGTAGGTTGCCGCGTCCAAACCGTGCGAGTGGCAGATGATTTTGGTTTTCGGTGAAACGATTTTGGCGGCAAGGGCGCAGGCCGGGACGACGCGCGCCATTTGGCAGTCGATGATGTCGGGTTGTTCGCGGCGCAGCATCCGGGCGTAGGCAAAGGTGCTTTTAAGGTAGCCGGCAAGCCCGCCCCGGTAAAAATCAACCGGCTGCCAACGGATGCCCGATGCTTGCGCCTCTCCGACAAAAGGGCCGTCCGAGGAGGCGAGGATGATGTCGTGCCCGTGCCGTTTGAGCAGCCGCCCGAGGCGGACGGTGGCGGTTTCTGTGCCGCCCAGACCCGACATAGAAGTAGTCAGGATGATTTTCATAATGGGAAACCTTGTTTTTTCAAATAATGAAACAGTTTGTGCAAATTTTTCCGGTGGCGCAGGATGCAGCCTGCCAGATATGCCGCCCATACGCCGGCAAACAGGGGGTAGTTTGCCGGCGTGCCGAAGCAGGTGTAAGCCGCCGAGGAGGCCAGGCAGAACAATGTGTGCATATAAAGCGGCAGGCGTTTGAGCGGCTGCCACAGGCGGCAGGAGCTTTCGGTCTTGAAAACAAAAAACAGCCAGAATGAAGCGGCACAGGCAACCGCCGCGCCCCGCGCCCCGCCGGCCGGTACGGAAAGCCCCAGCAGCAGCAGGTTTGCCGCCAGCGCGCCCAAGGTGGCGAATGCAATCGGACGCGTTTTGCGGACGACGTTCAAACCGATGCCGCTGATTTCTGCCAGCGTGCAAAACAGCGGCGGCAGCATACACGATACGACGGTAAACCGGACGGCGGCGTAGTTTTCCGGCAGTAGGAGGGAGGTGAGGGGCGAGAAAATGCCGGTCAGGCAGAGGGCGGCGGCAAGCAGGGCGGCGACAGATTCTGCCGTTGCCGAGAGGCGGGTGGGCGGGGCGTTTTTTTCGATTGCGCGGAAAATATACGGTGTCCAAACCGTTGAAAAGATGCTTTGGAACAATAATGCCGCCCCGCCGAACGAAATACCCATCGAATAAATGCCGAGCTGTTCCAGGCCGGCATATTTTTTCAGGAACAAACGGTCGGCGGATGTCAGTCCCCAATAGGCAAGGCTGTCCAGTGCGAGCGGTATGCCGTAGCGCAGCCCGCGATGCAGGACGGCGGGCGAAAACGGTGCGCGCCGGACGGCCTTCAGACGGCATCGGTTTTGAAACAGCAAAAAGGCGGCGGCGGCAAGGTTTGCCAGCGCGTAAACGGAGGTCAGGACGGCGGTGCGCGCCGGAAAGTGCAGCAGCCAGACCGTCAGCAGCAACAGCAGCAGGGCGGACTTGGGTACGAGTTGCGCGGACGAAAAGGCAAGGGCGCGCCCTTCCATACGCAAAACCAGTAAGAGAAAGCGGATGGGCAGCAAGCTCAGTCCAAACAGCACCAGCCCGATGCCGGCGGCGGCATCGTCGAGCGAAAACAGGATTTCAGACGGCAGGGCCGGGTGGGAAAGCAGGAAGGCGGCTATCGCGGCGGCAGACAGCAGCGGCGGCAGGAACAGGGCTTTGAACAAAATGTCTTTGTCGGCGGCGGCATTGTATTCGCGGATATATGCCTGATCCAGCCCGAGGCACAACACCGACATCGCCAGTCCCGCCGCCGTCTGCATCAACACGATGCGCCCGATGTCGTCGGCGGGGAAATACCACGACAGCAGCGGCAGGATGATGACGGCTAAAATCGCGCAGCCAATCGATCCTGCCGCGTAGCCGAGGATTTCTTTTGTGTCCATTTTTGATGTCCGGTCGGCGGCGGGATGCTGCCTGTGCCGTCTGAAGCCTTTCTTGATCGGAATTTGACGGCTTTCAGGCCGTCGCGGCTGCCGGCGGGGTGCGGCAGCCCGGGTTGCGCTTTTCCGGGCGGGCGGCGGTCTGAACGGGCCGTTTTTTATCGGCGTTATTATATAGTGAAACGGCGGCAAACCCTTTAAAAGGCGTTGCCGTTTTTCCGGAACACGGTTTTGATGTCGTGTCCGAGGATTTCGGTGGAAACGGGTGTCCATAATGGCGGCGCGGAAAGGGCGGCGCGGTTTTCGGGCAGGGAAAACAGGTCTTTGCCGCCGCCGAGGATTTTGGGCGAACGGTACAGCACGATTTCGTCCGCCAAATTTTCCGCCAAAAATGCGGATGTGAGTTCGGAGCCTGCTTCGACCATGATTTCGCCGAAACCTTCGTCGGCAAGGAGGCGCATCAGATGGTGCAGGTCGATTTTGCCGTCTGCCGTTTCAGACGGCATCAGGATGCGGATGTGTGCGTGTTCCCGATAGGGGCGGAGTTTGTCTTCATCGCGTTCCAAGGTGGCGATGTAGGTCGGAGATTGTCCGTCGGTAACCAAATGGCTGTTCGGGGGCAGGCGCAGGCGGCTGTCTAAAACGATGCGTGCGGGTTGGCGCAAAGTTGGAAAAGCGCGGACGTTGAGCCGGGGATTGTCTGCCAACACCGTGCCGATGCCGGTCAGCACCGCGCAGCTTTCGGCACGCAAAACCTGTACGTCGGCACGCGCTTCCTCGCCGGTAATCCAAAAGCTGCTGCCGTCTGAAAGGGCGGTTTTGCCGTCCAGCGAAACGGCGCATTTGAGGCGGACAAAGGGGCGGCGGCGTTCGATGCGCGATAAAAATCCCCGGTTGAGTTCGCGTGCTTTGTTTTCAAGTAGTCCGCATTCCGTCTTGATGCCCGCTGCTTTGAGCAGGACAAGCCCTTTGCCTGCAACCGGCGGGTTGGGGTCGCGCATGGCGGCGACGACGCGTGTTACGCCGGAACGGAGCAGGGCTTCGGCGCAGGGCGGTGTGCGTCCGTAATGGCTGCACGGTTCGAGGGTAACAAAGGCGGTCGCGCCTTTTGCCATTTCCCCCGCCTGACGCAGGGCGTGGACTTCGGCATGGGGTTCGCCCGCTTTGACGTGGAAGCCCTGTCCGACAATTTGTCTGCCGTGTGCGATAACGCAGCCGACGCGCGGGTTGGGTGAAGTGGAAAAACGCCCCAAAGCGGCAAGTCGGAGGGCGTTTTCCATCATGGATATATTTGTGTCCGAAAACATAGGGATACCGTATCAGTATGGGTTGGGGGAATCAGGTTTTGCCGCCTGTTTTGACGGCTTGCGCCAGCCACGAGGCGAAATGTTCCGGGCTGTCGAAGCGTTTGTGCAGGGCGGCGAAACGGACGGCGGCTTCCGTGTTTTGCCCGAACAGCTCCTCCAGCACGATTTCGACAAGTTCGGATGAGGATATGTCGCGCTGACCCGAAGTGTAGAGCCTGTGTTCCGTCAGGCGGACGGTTTCGTCAATCTGTTCGGGTGTCAGGGCGGATTTTCGGGCGGCGGCGGTCAGGTCGTTGCGGAGGCGTTGTGCATTGAAGGGCGAACGTTTCTTGTCCGGACCGATGACGGCGGGCATTTTGAGTTCGACGGTTTCGAGCGTGCCGAAGCGTTTGCCGCAGCCGGGGCAGTGGCGGCGGCGGCGGACGGTATTGCGCTCTTCCATCAGGCGGGAATCGGCAACTCGGGTGTCTGGGTGGCTGCAAAACGGGCATTTCATGGTGTTTCTTCCTGATGCCGTCTGAACGTCAAACCGATACGCCGGCGGCGCGGGCGATTTCCAGGCCTTCTTCGGCACTCATATAGACGGGATTTTCGGGACGGTCGTGCCGGACGATGTTGCCTTCGCGGAACATGACCAGTTCGTTCACGGCAAGTTGGGACCACGATTCATCGCGAGTCAGCGGCAGGGTGGAGATAACGGCGACGCGGTCGTCCGGCGTGGTTACTTCGGCAAAATCGACCATTACATCGTCGTCGAGCAGGCGCGCTTTGCCGAACGGGGCTTGGCGGACGATGTAGTGCAGCAGCGTGCTGGCGTGGGCAAACAGGGAAATGCCGTCTGAAAGCATGAAGTTAAACAGCCCGAACTTGCGGATTTCGTGCGTCAGCCCCGCAATCGCGTCAAACAGCGTGTCGTCGTCGGGACGGGCGGCAAAGCGGGTGCGCAGGCGGTTGAGGATGTGGCAGAACGCGCGTTCGGAATCGGTTGTGCCGACGGGGTGGAAAAATTCTCCTTGTTCGGGGAAAAAATCGACCAAATGCCCGTTGTGGGCAAACAGCCAGTAGCCGCCCCACATTTCGCGCATAAAGGGATGGGTGTTCGCCAGCGAGGTTTGACCTTGCGAGGCTTTGCGGATGTGGGCGACGACGTTTTCCGATTTAATCTGGTAGGCGCGCACGAGGTCGGCGACGGGGGAATTTGCACTCGGCTTGTCGTCATGGAACAGGCGCACGCCTTTGCCTTCGAAAAAGCCGATGCCGAAACCGTCGGCGTGATGGTCGGTAATGCCGCCCCTGCGGCGGAAGCCTTCAAAGGAAAACATAATATCGGTCGGCGTATTGCAGTTCATGCCCAGCAGTTGACACATAGTTTGTCCAAATGATTCAGATGGTCGCAAGTATTCGGATTATACCCCGAACTGAAAATGCCGTCTGAAATACGGCTTGTTCCCCATTATTCCCGCGAAAACAGAAAACAAAGACGGAAACTTAAGATTCCGTCATTCCCGCGCAGGCGGGAATCCGACTTGTCCGGTTTCGGTTGTTTTTCGTTCCGTAACTTTTGAGCCGTCATTCCCGCGCAGGCGGGAATCTAGAATTT diff --git a/tests/data/genomics/sarscov2/genome/bed/baits.bed b/tests/data/genomics/sarscov2/genome/bed/baits.bed deleted file mode 100755 index 1a3a5a25..00000000 --- a/tests/data/genomics/sarscov2/genome/bed/baits.bed +++ /dev/null @@ -1,5 +0,0 @@ -MT192765.1 1098 1127 -MT192765.1 4190 4255 -MT192765.1 5697 5716 -MT192765.1 5798 5807 -MT192765.1 11217 11253 diff --git a/tests/data/genomics/sarscov2/genome/bed/test.bed b/tests/data/genomics/sarscov2/genome/bed/test.bed deleted file mode 100644 index 4a635cec..00000000 --- a/tests/data/genomics/sarscov2/genome/bed/test.bed +++ /dev/null @@ -1,4 +0,0 @@ -MT192765.1 1242 1264 nCoV-2019_5_LEFT 1 + -MT192765.1 1573 1595 nCoV-2019_6_LEFT 2 + -MT192765.1 1623 1651 nCoV-2019_5_RIGHT 1 - -MT192765.1 1942 1964 nCoV-2019_6_RIGHT 2 - diff --git a/tests/data/genomics/sarscov2/genome/bed/test.bed.gz b/tests/data/genomics/sarscov2/genome/bed/test.bed.gz deleted file mode 100644 index ea794b0d..00000000 Binary files a/tests/data/genomics/sarscov2/genome/bed/test.bed.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/bed/test.bed12 b/tests/data/genomics/sarscov2/genome/bed/test.bed12 deleted file mode 100644 index 33a46951..00000000 --- a/tests/data/genomics/sarscov2/genome/bed/test.bed12 +++ /dev/null @@ -1,4 +0,0 @@ -MT192765.1 1242 1264 nCoV-2019_5_LEFT 1 + 1242 1264 0 2 10,12, 0,10, -MT192765.1 1573 1595 nCoV-2019_6_LEFT 2 + 1573 1595 0 2 7,15, 0,7, -MT192765.1 1623 1651 nCoV-2019_5_RIGHT 1 - 1623 1651 0 2 14,14, 0,14, -MT192765.1 1942 1964 nCoV-2019_6_RIGHT 2 - 1942 1964 0 2 11,11 0,11, diff --git a/tests/data/genomics/sarscov2/genome/bed/test2.bed b/tests/data/genomics/sarscov2/genome/bed/test2.bed deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/data/genomics/sarscov2/genome/db/kraken2.tar.gz b/tests/data/genomics/sarscov2/genome/db/kraken2.tar.gz deleted file mode 100644 index d37e69c1..00000000 Binary files a/tests/data/genomics/sarscov2/genome/db/kraken2.tar.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/db/kraken2/hash.k2d b/tests/data/genomics/sarscov2/genome/db/kraken2/hash.k2d deleted file mode 100644 index b1c0a186..00000000 Binary files a/tests/data/genomics/sarscov2/genome/db/kraken2/hash.k2d and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/db/kraken2/opts.k2d b/tests/data/genomics/sarscov2/genome/db/kraken2/opts.k2d deleted file mode 100644 index 7c206caa..00000000 Binary files a/tests/data/genomics/sarscov2/genome/db/kraken2/opts.k2d and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/db/kraken2/taxo.k2d b/tests/data/genomics/sarscov2/genome/db/kraken2/taxo.k2d deleted file mode 100644 index bf85d9c8..00000000 Binary files a/tests/data/genomics/sarscov2/genome/db/kraken2/taxo.k2d and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/gcwiggle/test.wig.gz b/tests/data/genomics/sarscov2/genome/gcwiggle/test.wig.gz deleted file mode 100644 index e0f08ca4..00000000 Binary files a/tests/data/genomics/sarscov2/genome/gcwiggle/test.wig.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/genome.dict b/tests/data/genomics/sarscov2/genome/genome.dict deleted file mode 100644 index bb6a4ae8..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.dict +++ /dev/null @@ -1,2 +0,0 @@ -@HD VN:1.6 -@SQ SN:MT192765.1 LN:29829 M5:c95f3e5592d0ad9974e41e7f0ea14eb0 UR:file:/Users/kevin/Documents/nfcore/modules/tests/data/fasta/sarscov2/GCA_011545545.1_ASM1154554v1_genomic.fna diff --git a/tests/data/genomics/sarscov2/genome/genome.fasta b/tests/data/genomics/sarscov2/genome/genome.fasta deleted file mode 100644 index e8d0f8e1..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.fasta +++ /dev/null @@ -1,374 +0,0 @@ ->MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome -GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT -GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG -TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG -GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT -ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG -ATGGCACTTGTGGCTTAGTAGAAGTTGAAAAAGGCGTTTTGCCTCAACTTGAACAGCCCTATGTGTTCATCAAACGTTCG -GATGCTCGAACTGCACCTCATGGTCATGTTATGGTTGAGCTGGTAGCAGAACTCGAAGGCATTCAGTACGGTCGTAGTGG -TGAGACACTTGGTGTCCTTGTCCCTCATGTGGGCGAAATACCAGTGGCTTACCGCAAGGTTCTTCTTCGTAAGAACGGTA -ATAAAGGAGCTGGTGGCCATAGTTACGGCGCCGATCTAAAGTCATTTGACTTAGGCGACGAGCTTGGCACTGATCCTTAT -GAAGATTTTCAAGAAAACTGGAACACTAAACATAGCAGTGGTGTTACCCGTGAACTCATGCGTGAGCTTAACGGAGGGGC -ATACACTCGCTATGTCGATAACAACTTCTGTGGCCCTGATGGCTACCCTCTTGAGTGCATTAAAGACCTTCTAGCACGTG -CTGGTAAAGCTTCATGCACTTTGTCCGAACAACTGGACTTTATTGACACTAAGAGGGGTGTATACTGCTGCCGTGAACAT -GAGCATGAAATTGCTTGGTACACGGAACGTTCTGAAAAGAGCTATGAATTGCAGACACCTTTTGAAATTAAATTGGCAAA -GAAATTTGACACCTTCAATGGGGAATGTCCAAATTTTGTATTTCCCTTAAATTCCATAATCAAGACTATTCAACCAAGGG -TTGAAAAGAAAAAGCTTGATGGCTTTATGGGTAGAATTCGATCTGTCTATCCAGTTGCGTCACCAAATGAATGCAACCAA -ATGTGCCTTTCAACTCTCATGAAGTGTGATCATTGTGGTGAAACTTCATGGCAGACGGGCGATTTTGTTAAAGCCACTTG -CGAATTTTGTGGCACTGAGAATTTGACTAAAGAAGGTGCCACTACTTGTGGTTACTTACCCCAAAATGCTGTTGTTAAAA -TTTATTGTCCAGCATGTCACAATTCAGAAGTAGGACCTGAGCATAGTCTTGCCGAATACCATAATGAATCTGGCTTGAAA -ACCATTCTTCGTAAGGGTGGTCGCACTATTGCCTTTGGAGGCTGTGTGTTCTCTTATGTTGGTTGCCATAACAAGTGTGC -CTATTGGGTTCCACGTGCTAGCGCTAACATAGGTTGTAACCATACAGGTGTTGTTGGAGAAGGTTCCGAAGGTCTTAATG -ACAACCTTCTTGAAATACTCCAAAAAGAGAAAGTCAACATCAATATTGTTGGTGACTTTAAACTTAATGAAGAGATCGCC -ATTATTTTGGCATCTTTTTCTGCTTCCACAAGTGCTTTTGTGGAAACTGTGAAAGGTTTGGATTATAAAGCATTCAAACA -AATTGTTGAATCCTGTGGTAATTTTAAAGTTACAAAAGGAAAAGCTAAAAAAGGTGCCTGGAATATTGGTGAACAGAAAT -CAATACTGAGTCCTCTTTATGCATTTGCATCAGAGGCTGCTCGTGTTGTACGATCAATTTTCTCCCGCACTCTTGAAACT -GCTCAAAATTCTGTGCGTGTTTTACAGAAGGCCGCTATAACAATACTAGATGGAATTTCACAGTATTCACTGAGACTCAT -TGATGCTATGATGTTCACATCTGATTTGGCTACTAACAATCTAGTTGTAATGGCCTACATTACAGGTGGTGTTGTTCAGT -TGACTTCGCAGTGGCTAACTAACATCTTTGGCACTGTTTATGAAAAACTCAAACCCGTCCTTGATTGGCTTGAAGAGAAG -TTTAAGGAAGGTGTAGAGTTTCTTAGAGACGGTTGGGAAATTGTTAAATTTATCTCAACCTGTGCTTGTGAAATTGTCGG -TGGACAAATTGTCACCTGTGCAAAGGAAATTAAGGAGAGTGTTCAGACATTCTTTAAGCTTGTAAATAAATTTTTGGCTT -TGTGTGCTGACTCTATCATTATTGGTGGAGCTAAACTTAAAGCCTTGAATTTAGGTGAAACATTTGTCACGCACTCAAAG -GGATTGTACAGAAAGTGTGTTAAATCCAGAGAAGAAACTGGCCTACTCATGCCTCTAAAAGCCCCAAAAGAAATTATCTT -CTTAGAGGGAGAAACACTTCCCACAGAAGTGTTAACAGAGGAAGTTGTCTTGAAAACTGGTGATTTACAACCATTAGAAC -AACCTACTAGTGAAGCTGTTGAAGCTCCATTGGTTGGTACACCAGTTTGTATTAACGGGCTTATGTTGCTCGAAATCAAA -GACACAGAAAAGTACTGTGCCCTTGCACCTAATATGATGGTAACAAACAATACCTTCACACTCAAAGGCGGTGCACCAAC -AAAGGTTACTTTTGGTGATGACACTGTGATAGAAGTGCAAGGTTACAAGAGTGTGAATATCACTTTTGAACTTGATGAAA -GGATTGATAAAGTACTTAATGAGAAGTGCTCTGCCTATACAGTTGAACTCGGTACAGAAGTAAATGAGTTCGCCTGTGTT -GTGGCAGATGCTGTCATAAAAACTTTGCAACCAGTATCTGAATTACTTACACCACTGGGCATTGATTTAGATGAGTGGAG -TATGGCTACATACTACTTATTTGATGAGTCTGGTGAGTTTAAATTGGCTTCACATATGTATTGTTCTTTTTACCCTCCAG -ATGAGGATGAAGAAGAAGGTGATTGTGAAGAAGAAGAGTTTGAGCCATCAACTCAATATGAGTATGGTACTGAAGATGAT -TACCAAGGTAAACCTTTGGAATTTGGTGCCACTTCTGCTGCTCTTCAACCTGAAGAAGAGCAAGAAGAAGATTGGTTAGA -TGATGATAGTCAACAAACTGTTGGTCAACAAGACGGCAGTGAGGACAATCAGACAACTACTATTCAAACAATTGTTGAGG -TTCAACCTCAATTAGAGATGGAACTTACACCAGTTGTTCAGACTATTGAAGTGAATAGTTTTAGTGGTTATTTAAAACTT -ACTGACAATGTATACATTAAAAATGCAGACATTGTGGAAGAAGCTAAAAAGGTAAAACCAACAGTGGTTGTTAATGCAGC -CAATGTTTACCTTAAACATGGAGGAGGTGTTGCAGGAGCCTTAAATAAGGCTACTAACAATGCCATGCAAGTTGAATCTG -ATGATTACATAGCTACTAATGGACCACTTAAAGTGGGTGGTAGTTGTGTTTTAAGCGGACACAATCTTGCTAAACACTGT -CTTCATGTTGTCGGCCCAAATGTTAACAAAGGTGAAGACATTCAACTTCTTAAGAGTGCTTATGAAAATTTTAATCAGCA -CGAAGTTCTACTTGCACCATTATTATCAGCTGGTATTTTTGGTGCTGACCCTATACATTCTTTAAGAGTTTGTGTAGATA -CTGTTCGCACAAATGTCTACTTAGCTGTCTTTGATAAAAATCTCTATGACAAACTTGTTTCAAGCTTTTTGGAAATGAAG -AGTGAAAAGCAAGTTGAACAAAAGATCGCTGAGATTCCTAAAGAGGAAGTTAAGCCATTTATAACTGAAAGTAAACCTTC -AGTTGAACAGAGAAAACAAGATGATAAGAAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGT -TCCTCACAGAAAACTTGTTACTTTATATTGACATTAATGGCAATCTTCATCCAGATTCTGCCACTCTTGTTAGTGACATT -GACATCACTTTCTTAAAGAAAGATGCTCCATATATAGTGGGTGATGTTGTTCAAGAGGGTGTTTTAACTGCTGTGGTTAT -ACCTACTAAAAAGGCTGGTGGCACTACTGAAATGCTAGCGAAAGCTTTGAGAAAAGTGCCAACAGACAATTATATAACCA -CTTACCCGGGTCAGGGTTTAAATGGTTACACTGTAGAGGAGGCAAAGACAGTGCTTAAAAAGTGTAAAAGTGCCTTTTAC -ATTCTACCATCTATTATCTCTAATGAGAAGCAAGAAATTCTTGGAACTGTTTCTTGGAATTTGCGAGAAATGCTTGCACA -TGCAGAAGAAACACGCAAATTAATGCCTGTCTGTGTGGAAACTAAAGCCATAGTTTCAACTATACAGCGTAAATATAAGG -GTATTAAAATACAAGAGGGTGTGGTTGATTATGGTGCTAGATTTTACTTTTACACCAGTAAAACAACTGTAGCGTCACTT -ATCAACACACTTAACGATCTAAATGAAACTCTTGTTACAATGCCACTTGGCTATGTAACACATGGCTTAAATTTGGAAGA -AGCTGCTCGGTATATGAGATCTCTCAAAGTGCCAGCTACAGTTTCTGTTTCTTCACCTGATGCTGTTACAGCGTATAATG -GTTATCTTACTTCTTCTTCTAAAACACCTGAAGAACATTTTATTGAAACCATCTCACTTGCTGGTTCCTATAAAGATTGG -TCCTATTCTGGACAATCTACACAACTAGGTATAGAATTTCTTAAGAGAGGTGATAAAAGTGTATATTACACTAGTAATCC -TACCACATTCCACCTAGATGGTGAAGTTATCACCTTTGACAATCTTAAGACACTTCTTTCTTTGAGAGAAGTGAGGACTA -TTAAGGTGTTTACAACAGTAGACAACATTAACCTCCACACGCAAGTTGTGGACATGTCAATGACATATGGACAACAGTTT -GGTCCAACTTATTTGGATGGAGCTGATGTTACTAAAATAAAACCTCATAATTCACATGAAGGTAAAACATTTTATGTTTT -ACCTAATGATGACACTCTACGTGTTGAGGCTTTTGAGTACTACCACACAACTGATCCTAGTTTTCTGGGTAGGTACATGT -CAGCATTAAATCACACTAAAAAGTGGAAATACCCACAAGTTAATGGTTTAACTTCTATTAAATGGGCAGATAACAACTGT -TATCTTGCCACTGCATTGTTAACACTCCAACAAATAGAGTTGAAGTTTAATCCACCTGCTCTACAAGATGCTTATTACAG -AGCAAGGGCTGGTGAAGCTGCTAACTTTTGTGCACTTATCTTAGCCTACTGTAATAAGACAGTAGGTGAGTTAGGTGATG -TTAGAGAAACAATGAGTTACTTGTTTCAACATGCCAATTTAGATTCTTGCAAAAGAGTCTTGAACGTGGTGTGTAAAACT -TGTGGACAACAGCAGACAACCCTTAAGGGTGTAGAAGCTGTTATGTACATGGGCACACTTTCTTATGAACAATTTAAGAA -AGGTGTTCAGATACCTTGTACGTGTGGTAAACAAGCTACAAAATATCTAGTACAACAGGAGTCACCTTTTGTTATGATGT -CAGCACCACCTGCTCAGTATGAACTTAAGCATGGTACATTTACTTGTGCTAGTGAGTACACTGGTAATTACCAGTGTGGT -CACTATAAACATATAACTTCTAAAGAAACTTTGTATTGCATAGACGGTGCTTTACTTACAAAGTCCTCAGAATACAAAGG -TCCTATTACGGATGTTTTCTACAAAGAAAACAGTTACACAACAACCATAAAACCAGTTACTTATAAATTGGATGGTGTTG -TTTGTACAGAAATTGACCCTAAGTTGGACAATTATTATAAGAAAGACAATTCTTATTTCACAGAGCAACCAATTGATCTT -GTACCAAACCAACCATATCCAAACGCAAGCTTCGATAATTTTAAGTTTGTATGTGATAATATCAAATTTGCTGATGATTT -AAACCAGTTAACTGGTTATAAGAAACCTGCTTCAAGAGAGCTTAAAGTTACATTTTTCCCTGACTTAAATGGTGATGTGG -TGGCTATTGATTATAAACACTACACACCCTCTTTTAAGAAAGGAGCTAAATTGTTACATAAACCTATTGTTTGGCATGTT -AACAATGCAACTAATAAAGCCACGTATAAACCAAATACCTGGTGTATACGTTGTCTTTGGAGCACAAAACCAGTTGAAAC -ATCAAATTCGTTTGATGTACTGAAGTCAGAGGACGCGCAGGGAATGGATAATCTTGCCTGCGAAGATCTAAAACCAGTCT -CTGAAGAAGTAGTGGAAAATCCTACCATACAGAAAGACGTTCTTGAGTGTAATGTGAAAACTACCGAAGTTGTAGGAGAC -ATTATACTTAAACCAGCAAATAATAGTTTAAAAATTACAGAAGAGGTTGGCCACACAGATCTAATGGCTGCTTATGTAGA -CAATTCTAGTCTTACTATTAAGAAACCTAATGAATTATCTAGAGTATTAGGTTTGAAAACCCTTGCTACTCATGGTTTAG -CTGCTGTTAATAGTGTCCCTTGGGATACTATAGCTAATTATGCTAAGCCTTTTCTTAACAAAGTTGTTAGTACAACTACT -AACATAGTTACACGGTGTTTAAACCGTGTTTGTACTAATTATATGCCTTATTTCTTTACTTTATTGCTACAATTGTGTAC -TTTTACTAGAAGTACAAATTCTAGAATTAAAGCATCTATGCCGACTACTATAGCAAAGAATACTGTTAAGAGTGTCGGTA -AATTTTGTCTAGAGGCTTCATTTAATTATTTGAAGTCACCTAATTTTTCTAAACTGATAAATATTATAATTTGGTTTTTA -CTATTAAGTGTTTGCCTAGGTTCTTTAATCTACTCAACCGCTGCTTTAGGTGTTTTAATGTCTAATTTAGGCATGCCTTC -TTACTGTACTGGTTACAGAGAAGGCTATTTGAACTCTACTAATGTCACTATTGCAACCTACTGTACTGGTTCTATACCTT -GTAGTGTTTGTCTTAGTGGTTTAGATTCTTTAGACACCTATCCTTCTTTAGAAACTATACAAATTACCATTTCATCTTTT -AAATGGGATTTAACTGCTTTTGGCTTAGTTGCAGAGTGGTTTTTGGCATATATTCTTTTCACTAGGTTTTTCTATGTACT -TGGATTGGCTGCAATCATGCAATTGTTTTTCAGCTATTTTGCAGTACATTTTATTAGTAATTCTTGGCTTATGTGGTTAA -TAATTAATCTTGTACAAATGGCCCCGATTTCAGCTATGGTTAGAATGTACATCTTCTTTGCATCATTTTATTATGTATGG -AAAAGTTATGTGCATGTTGTAGACGGTTGTAATTCATCAACTTGTATGATGTGTTACAAACGTAATAGAGCAACAAGAGT -CGAATGTACAACTATTGTTAATGGTGTTAGAAGGTCCTTTTATGTCTATGCTAATGGAGGTAAAGGCTTTTGCAAACTAC -ACAATTGGAATTGTGTTAATTGTGATACATTCTGTGCTGGTAGTACATTTATTAGTGATGAAGTTGCGAGAGACTTGTCA -CTACAGTTTAAAAGACCAATAAATCCTACTGACCAGTCTTCTTACATCGTTGATAGTGTTACAGTGAAGAATGGTTCCAT -CCATCTTTACTTTGATAAAGCTGGTCAAAAGACTTATGAAAGACATTCTCTCTCTCATTTTGTTAACTTAGACAACCTGA -GAGCTAATAACACTAAAGGTTCATTGCCTATTAATGTTATAGTTTTTGATGGTAAATCAAAATGTGAAGAATCATCTGCA -AAATCAGCGTCTGTTTACTACAGTCAGCTTATGTGTCAACCTATACTGTTACTAGATCAGGCATTAGTGTCTGATGTTGG -TGATAGTGCGGAAGTTGCAGTTAAAATGTTTGATGCTTACGTTAATACGTTTTCATCAACTTTTAACGTACCAATGGAAA -AACTCAAAACACTAGTTGCAACTGCAGAAGCTGAACTTGCAAAGAATGTGTCCTTAGACAATGTCTTATCTACTTTTATT -TCAGCAGCTCGGCAAGGGTTTGTTGATTCAGATGTAGAAACTAAAGATGTTGTTGAATGTCTTAAATTGTCACATCAATC -TGACATAGAAGTTACTGGCGATAGTTGTAATAACTATATGCTCACCTATAACAAAGTTGAAAACATGACACCCCGTGACC -TTGGTGCTTGTATTGACTGTAGTGCGCGTCATATTAATGCGCAGGTAGCAAAAAGTCACAACATTGCTTTGATATGGAAC -GTTAAAGATTTCATGTCATTGTCTGAACAACTACGAAAACAAATACGTAGTGCTGCTAAAAAGAATAACTTACCTTTTAA -GTTGACATGTGCAACTACTAGACAAGTTGTTAATGTTGTAACAACAAAGATAGCACTTAAGGGTGGTAAAATTGTTAATA -ATTGGTTGAAGCAGTTAATTAAAGTTACACTTGTGTTCCTTTTTGTTGCTGCTATTTTCTATTTAATAACACCTGTTCAT -GTCATGTCTAAACATACTGACTTTTCAAGTGAAATCATAGGATACAAGGCTATTGATGGTGGTGTCACTCGTGACATAGC -ATCTACAGATACTTGTTTTGCTAACAAACATGCTGATTTTGACACATGGTTTAGCCAGCGTGGTGGTAGTTATACTAATG -ACAAAGCTTGCCCATTGATTGCTGCAGTCATAACAAGAGAAGTGGGTTTTGTCGTGCCTGGTTTGCCTGGCACGATATTA -CGCACAACTAATGGTGACTTTTTGCATTTCTTACCTAGAGTTTTTAGTGCAGTTGGTAACATCTGTTACACACCATCAAA -ACTTATAGAGTACACTGACTTTGCAACATCAGCTTGTGTTTTGGCTGCTGAATGTACAATTTTTAAAGATGCTTCTGGTA -AGCCAGTACCATATTGTTATGATACCAATGTACTAGAAGGTTCTGTTGCTTATGAAAGTTTACGCCCTGACACACGTTAT -GTGCTCATGGATGGCTCTATTATTCAATTTCCTAACACCTACCTTGAAGGTTCTGTTAGAGTGGTAACAACTTTTGATTC -TGAGTACTGTAGGCACGGCACTTGTGAAAGATCAGAAGCTGGTGTTTGTGTATCTACTAGTGGTAGATGGGTACTTAACA -ATGATTATTACAGATCTTTACCAGGAGTTTTCTGTGGTGTAGATGCTGTAAATTTACTTACTAATATGTTTACACCACTA -ATTCAACCTATTGGTGCTTTGGACATATCAGCATCTATAGTAGCTGGTGGTATTGTAGCTATCGTAGTAACATGCCTTGC -CTACTATTTTATGAGGTTTAGAAGAGCTTTTGGTGAATACAGTCATGTAGTTGCCTTTAATACTTTACTATTCCTTATGT -CATTCACTGTACTCTGTTTAACACCAGTTTACTCATTCTTACCTGGTGTTTATTCTGTTATTTACTTGTACTTGACATTT -TATCTTACTAATGATGTTTCTTTTTTAGCACATATTCAGTGGATGGTTATGTTCACACCTTTAGTACCTTTCTGGATAAC -AATTGCTTATATCATTTGTATTTCCACAAAGCATTTCTATTGGTTCTTTAGTAATTACCTAAAGAGACGTGTAGTCTTTA -ATGGTGTTTCCTTTAGTACTTTTGAAGAAGCTGCGCTGTGCACCTTTTTGTTAAATAAAGAAATGTATCTAAAGTTGCGT -AGTGATGTGCTATTACCTCTTACGCAATATAATAGATACTTAGCTCTTTATAATAAGTACAAGTATTTTAGTGGAGCAAT -GGATACAACTAGCTACAGAGAAGCTGCTTGTTGTCATCTCGCAAAGGCTCTCAATGACTTCAGTAACTCAGGTTCTGATG -TTCTTTACCAACCACCACAAACCTCTATCACCTCAGCTGTTTTGCAGAGTGGTTTTAGAAAAATGGCATTCCCATCTGGT -AAAGTTGAGGGTTGTATGGTACAAGTAACTTGTGGTACAACTACACTTAACGGTCTTTGGCTTGATGACGTAGTTTACTG -TCCAAGACATGTGATCTGCACCTCTGAAGACATGCTTAACCCTAATTATGAAGATTTACTCATTCGTAAGTCTAATCATA -ATTTCTTGGTACAGGCTGGTAATGTTCAACTCAGGGTTATTGGACATTCTATGCAAAATTGTGTACTTAAGCTTAAGGTT -GATACAGCCAATCCTAAGACACCTAAGTATAAGTTTGTTCGCATTCAACCAGGACAGACTTTTTCAGTGTTAGCTTGTTA -CAATGGTTCACCATCTGGTGTTTACCAATGTGCTATGAGGCCCAATTTCACTATTAAGGGTTCATTCCTTAATGGTTCAT -GTGGTAGTGTTGGTTTTAACATAGATTATGACTGTGTCTCTTTTTGTTACATGCACCATATGGAATTACCAACTGGAGTT -CATGCTGGCACAGACTTAGAAGGTAACTTTTATGGACCTTTTGTTGACAGGCAAACAGCACAAGCAGCTGGTACGGACAC -AACTATTACAGTTAATGTTTTAGCTTGGTTGTACGCTGCTGTTATAAATGGAGACAGGTGGTTTCTCAATCGATTTACCA -CAACTCTTAATGACTTTAACCTTGTGGCTATGAAGTACAATTATGAACCTCTAACACAAGACCATGTTGACATACTAGGA -CCTCTTTCTGCTCAAACTGGAATTGCCGTTTTAGATATGTGTGCTTCATTAAAAGAATTACTGCAAAATGGTATGAATGG -ACGTACCATATTGGGTAGTGCTTTATTAGAAGATGAATTTACACCTTTTGATGTTGTTAGACAATGCTCAGGTGTTACTT -TCCAAAGTGCAGTGAAAAGAACAATCAAGGGTACACACCACTGGTTGTTACTCACAATTTTGACTTCACTTTTAGTTTTA -GTCCAGAGTACTCAATGGTCTTTGTTCTTTTTTTTGTATGAAAATGCCTTTTTACCTTTTGCTATGGGTATTATTGCTAT -GTCTGCTTTTGCAATGATGTTTGTCAAACATAAGCATGCATTTCTCTGTTTGTTTTTGTTACCTTCTCTTGCCACTGTAG -CTTATTTTAATATGGTCTATATGCCTGCTAGTTGGGTGATGCGTATTATGACATGGTTGGATATGGTTGATACTAGTTTG -TCTGGTTTTAAGCTAAAAGACTGTGTTATGTATGCATCAGCTGTAGTGTTACTAATCCTTATGACAGCAAGAACTGTGTA -TGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAG -ATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTCTAACTACTCAGGTGTAGTTACAACTGTCATGTTTTTG -GCCAGAGGTATTGTTTTTATGTGTGTTGAGTATTGCCCTATTTTCTTCATAACTGGTAATACACTTCAGTGTATAATGCT -AGTTTATTGTTTCTTAGGCTATTTTTGTACTTGTTACTTTGGCCTCTTTTGTTTACTCAACCGCTACTTTAGACTGACTC -TTGGTGTTTATGATTACTTAGTTTCTACACAGGAGTTTAGATATATGAATTCACAGGGACTACTCCCACCCAAGAATAGC -ATAGATGCCTTCAAACTCAACATTAAATTGTTGGGTGTTGGTGGCAAACCTTGTATCAAAGTAGCCACTGTACAGTCTAA -AATGTCAGATGTAAAGTGCACATCAGTAGTCTTACTCTCAGTTTTGCAACAACTCAGAGTAGAATCATCATCTAAATTGT -GGGCTCAATGTGTCCAGTTACACAATGACATTCTCTTAGCTAAAGATACTACTGAAGCCTTTGAAAAAATGGTTTCACTA -CTTTCTGTTTTGCTTTCCATGCAGGGTGCTGTAGACATAAACAAGCTTTGTGAAGAAATGCTGGACAACAGGGCAACCTT -ACAAGCTATAGCCTCAGAGTTTAGTTCCCTTCCATCATATGCAGCTTTTGCTACTGCTCAAGAAGCTTATGAGCAGGCTG -TTGCTAATGGTGATTCTGAAGTTGTTCTTAAAAAGTTGAAGAAGTCTTTGAATGTGGCTAAATCTGAATTTGACCGTGAT -GCAGCCATGCAACGTAAGTTGGAAAAGATGGCTGATCAAGCTATGACCCAAATGTATAAACAGGCTAGATCTGAGGACAA -GAGGGCAAAAGTTACTAGTGCTATGCAGACAATGCTTTTCACTATGCTTAGAAAGTTGGATAATGATGCACTCAACAACA -TTATCAACAATGCAAGAGATGGTTGTGTTCCCTTGAACATAATACCTCTTACAACAGCAGCCAAACTAATGGTTGTCATA -CCAGACTATAACACATATAAAAATACGTGTGATGGTACAACATTTACTTATGCATCAGCATTGTGGGAAATCCAACAGGT -TGTAGATGCAGATAGTAAAATTGTTCAACTTAGTGAAATTAGTATGGACAATTCACCTAATTTAGCATGGCCTCTTATTG -TAACAGCTTTAAGGGCCAATTCTGCTGTCAAATTACAGAATAATGAGCTTAGTCCTGTTGCACTACGACAGATGTCTTGT -GCTGCCGGTACTACACAAACTGCTTGCACTGATGACAATGCGTTAGCTTACTACAACACAACAAAGGGAGGTAGGTTTGT -ACTTGCACTGTTATCCGATTTACAGGATTTGAAATGGGCTAGATTCCCTAAGAGTGATGGAACTGGTACTATCTATACAG -AACTGGAACCACCTTGTAGGTTTGTTACAGACACACCTAAAGGTCCTAAAGTGAAGTATTTATACTTTATTAAAGGATTA -AACAACCTAAATAGAGGTATGGTACTTGGTAGTTTAGCTGCCACAGTACGTCTACAAGCTGGTAATGCAACAGAAGTGCC -TGCCAATTCAACTGTATTATCTTTCTGTGCTTTTGCTGTAGATGCTGCTAAAGCTTACAAAGATTATCTAGCTAGTGGGG -GACAACCAATCACTAATTGTGTTAAGATGTTGTGTACACACACTGGTACTGGTCAGGCAATAACAGTTACACCGGAAGCC -AATATGGATCAAGAATCCTTTGGTGGTGCATCGTGTTGTCTGTACTGCCGTTGCCACATAGATCATCCAAATCCTAAAGG -ATTTTGTGACTTAAAAGGTAAGTATGTACAAATACCTACAACTTGTGCTAATGACCCTGTGGGTTTTACACTTAAAAACA -CAGTCTGTACCGTCTGCGGTATGTGGAAAGGTTATGGCTGTAGTTGTGATCAACTCCGCGAACCCATGCTTCAGTCAGCT -GATGCACAATCGTTTTTAAACGGGTTTGCGGTGTAAGTGCAGCCCGTCTTACACCGTGCGGCACAGGCACTAGTACTGAT -GTCGTATACAGGGCTTTTGACATCTACAATGATAAAGTAGCTGGTTTTGCTAAATTCCTAAAAACTAATTGTTGTCGCTT -CCAAGAAAAGGACGAAGATGACAATTTAATTGATTCTTACTTTGTAGTTAAGAGACACACTTTCTCTAACTACCAACATG -AAGAAACAATTTATAATTTACTTAAGGATTGTCCAGCTGTTGCTAAACATGACTTCTTTAAGTTTAGAATAGACGGTGAC -ATGGTACCACATATATCACGTCAACGTCTTACTAAATACACAATGGCAGACCTCGTCTATGCTTTAAGGCATTTTGATGA -AGGTAATTGTGACACATTAAAAGAAATACTTGTCACATACAATTGTTGTGATGATGATTATTTCAATAAAAAGGACTGGT -ATGATTTTGTAGAAAACCCAGATATATTACGCGTATACGCCAACTTAGGTGAACGTGTACGCCAAGCTTTGTTAAAAACA -GTACAATTCTGTGATGCCATGCGAAATGCTGGTATTGTTGGTGTACTGACATTAGATAATCAAGATCTCAATGGTAACTG -GTATGATTTCGGTGATTTCATACAAACCACGCCAGGTAGTGGAGTTCCTGTTGTAGATTCTTATTATTCATTGTTAATGC -CTATATTAACCTTGACCAGGGCTTTAACTGCAGAGTCACATGTTGACACTGACTTAACAAAGCCTTACATTAAGTGGGAT -TTGTTAAAATATGACTTCACGGAAGAGAGGTTAAAACTCTTTGACCGTTATTTTAAATATTGGGATCAGACATACCACCC -AAATTGTGTTAACTGTTTGGATGACAGATGCATTCTGCATTGTGCAAACTTTAATGTTTTATTCTCTACAGTGTTCCCAC -TTACAAGTTTTGGACCACTAGTGAGAAAAATATTTGTTGATGGTGTTCCATTTGTAGTTTCAACTGGATACCACTTCAGA -GAGCTAGGTGTTGTACATAATCAGGATGTAAACTTACATAGCTCTAGACTTAGTTTTAAGGAATTACTTGTGTATGCTGC -TGACCCTGCTATGCACGCTGCTTCTGGTAATCTATTACTAGATAAACGCACTACGTGCTTTTCAGTAGCTGCACTTACTA -ACAATGTTGCTTTTCAAACTGTCAAACCCGGTAATTTTAACAAAGACTTCTATGACTTTGCTGTGTCTAAGGGTTTCTTT -AAGGAAGGAAGTTCTGTTGAATTAAAACACTTCTTCTTTGCTCAGGATGGTAATGCTGCTATCAGCGATTATGACTACTA -TCGTTATAATCTACCAACAATGTGTGATATCAGACAACTACTATTTGTAGTTGAAGTTGTTGATAAGTACTTTGATTGTT -ACGATGGTGGCTGTATTAATGCTAACCAAGTCATCGTCAACAACCTAGACAAATCAGCTGGTTTTCCATTTAATAAATGG -GGTAAGGCTAGACTTTATTATGATTCAATGAGTTATGAGGATCAAGATGCACTTTTCGCATATACAAAACGTAATGTCAT -CCCTACTATAACTCAAATGAATCTTAAGTATGCCATTAGTGCAAAGAATAGAGCTCGCACCGTAGCTGGTGTCTCTATCT -GTAGTACTATGACCAATAGACAGTTTCATCAAAAATTATTGAAATCAATAGCCGCCACTAGAGGAGCTACTGTAGTAATT -GGAACAAGCAAATTCTATGGTGGTTGGCACAACATGTTAAAAACTGTTTATAGTGATGTAGAAAACCCTCACCTTATGGG -TTGGGATTATCCTAAATGTGATAGAGCCATGCCTAACATGCTTAGAATTATGGCCTCACTTGTTCTTGCTCGCAAACATA -CAACGTGTTGTAGCTTGTCACACCGTTTCTATAGATTAGCTAATGAGTGTGCTCAAGTATTGAGTGAAATGGTCATGTGT -GGCGGTTCACTATATGTTAAACCAGGTGGAACCTCATCAGGAGATGCCACAACTGCTTATGCTAATAGTGTTTTTAACAT -TTGTCAAGCTGTCACGGCCAATGTTAATGCACTTTTATCTACTGATGGTAACAAAATTGCCGATAAGTATGTCCGCAATT -TACAACACAGACTTTATGAGTGTCTCTATAGAAATAGAGATGTTGACACAGACTTTGTGAATGAGTTTTACGCATATTTG -CGTAAACATTTCTCAATGATGATACTCTCTGACGATGCTGTTGTGTGTTTCAATAGCACTTATGCATCTCAAGGTCTAGT -GGCTAGCATAAAGAACTTTAAGTCAGTTCTTTATTATCAAAACAATGTTTTTATGTCTGAAGCAAAATGTTGGACTGAGA -CTGACCTTACTAAAGGACCTCATGAATTTTGCTCTCAACATACAATGCTAGTTAAACAGGGTGATGATTATGTGTACCTT -CCTTACCCAGATCCATCAAGAATCCTAGGGGCCGGCTGTTTTGTAGATGATATCGTAAAAACAGATGGTACACTTATGAT -TGAACGGTTCGTGTCTTTAGCTATAGATGCTTACCCACTTACTAAACATCCTAATCAGGAGTATGCTGATGTCTTTCATT -TGTACTTACAATACATAAGAAAGCTACATGATGAGTTAACAGGACACATGTTAGACATGTATTCTGTTATGCTTACTAAT -GATAACACTTCAAGGTATTGGGAACCTGAGTTTTATGAGGCTATGTACACACCGCATACAGTCTTACAGGCTGTTGGGGC -TTGTGTTCTTTGCAATTCACAGACTTCATTAAGATGTGGTGCTTGCATACGTAGACCATTCTTATGTTGTAAATGCTGTT -ACGACCATGTCATATCAACATCACATAAATTAGTCTTGTCTGTTAATCCGTATGTTTGCAATGCTCCAGGTTGTGATGTC -ACAGATGTGACTCAACTTTACTTAGGAGGTATGAGCTATTATTGTAAATCACATAAACCACCCATTAGTTTTCCATTGTG -TGCTAATGGACAAGTTTTTGGTTTATATAAAAATACATGTGTTGGTAGCGATAATGTTACTGACTTTAATGCAATTGCAA -CATGTGACTGGACAAATGCTGGTGATTACATTTTAGCTAACACCTGTACTGAAAGACTCAAGCTTTTTGCAGCAGAAACG -CTCAAAGCTACTGAGGAGACATTTAAACTGTCTTATGGTATTGCTACTGTACGTGAAGTGCTGTCTGACAGAGAATTACA -TCTTTCATGGGAAGTTGGTAAACCTAGACCACCACTTAACCGAAATTATGTCTTTACTGGTTATCGTGTAACTAAAAACA -GTAAAGTACAAATAGGAGAGTACACCTTTGAAAAAGGTGACTATGGTGATGCTGTTGTTTACCGAGGTACAACAACTTAC -AAATTAAATGTTGGTGATTATTTTGTGCTGACATCACATACAGTAATGCCATTAAGTGCACCTACACTAGTGCCACAAGA -GCACTATGTTAGAATTACTGGCTTATACCCAACACTCAATATCTCAGATGAGTTTTCTAGCAATGTTGCAAATTATCAAA -AGGTTGGTATGCAAAAGTATTCTACACTCCAGGGACCACCTGGTACTGGTAAGAGTCATTTTGCTATTGGCCTAGCTCTC -TACTACCCTTCTGCTCGCATAGTGTATACAGCTTGCTCTCATGCCGCTGTTGATGCACTATGTGAGAAGGCATTAAAATA -TTTGCCTATAGATAAATGTAGTAGAATTATACCTGCACGTGCTCGTGTAGAGTGTTTTGATAAATTCAAAGTGAATTCAA -CATTAGAACAGTATGTCTTTTGTACTGTAAATGCATTGCCTGAGACGACAGCAGATATAGTTGTCTTTGATGAAATTTCA -ATGGCCACAAATTATGATTTGAGTGTTGTCAATGCCAGATTACGTGCTAAGCACTATGTGTACATTGGCGACCCTGCTCA -ATTACCTGCACCACGCACATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAA -CTATAGGTCCAGACATGTTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTAT -GATAATAAGCTTAAAGCACATAAAGACAAATCAGCTCAATGCTTTAAAATGTTTTATAAGGGTGTTATCACGCATGATGT -TTCATCTGCAATTAACAGGCCACAAATAGGCGTGGTAAGAGAATTCCTTACACGTAACCCTGCTTGGAGAAAAGCTGTCT -TTATTTCACCTTATAATTCACAGAATGCTGTAGCCTCAAAGATTTTGGGACTACCAACTCAAACTGTTGATTCATCACAG -GGCTCAGAATATGACTATGTCATATTCACTCAAACCACTGAAACAGCTCACTCTTGTAATGTAAACAGATTTAATGTTGC -TATTACCAGAGCAAAAGTAGGCATACTTTGCATAATGTCTGATAGAGACCTTTATGACAAGTTGCAATTTACAAGTCTTG -AAATTCCACGTAGGAATGTGGCAACTTTACAAGCTGAAAATGTAACAGGACTCTTTAAAGATTGTAGTAAGGTAATCACT -GGGTTACATCCTACACAGGCACCTACACACCTCAGTGTTGACACTAAATTCAAAACTGAAGGTTTATGTGTTGACATACC -TGGCATACCTAAGGACATGACCTATAGAAGACTCATCTCTATGATGGGTTTTAAAATGAATTATCAAGTTAATGGTTACC -CTAACATGTTTATCACCCGCGAAGAAGCTATAAGACATGTACGTGCATGGATTGGCTTCGATGTCGAGGGGTGTCATGCT -ACTAGAGAAGCTGTTGGTACCAATTTACCTTTACAGCTAGGTTTTTCTACAGGTGTTAACCTAGTTGCTGTACCTACAGG -TTATGTTGATACACCTAATAATACAGATTTTTCCAGAGTTAGTGCTAAACCACCGCCTGGAGATCAATTTAAACACCTCA -TACCACTTATGTACAAAGGACTTCCTTGGAATGTAGTGCGTATAAAGATTGTACAAATGTTAAGTGACACACTTAAAAAT -CTCTCTGACAGAGTCGTATTTGTCTTATGGGCACATGGCTTTGAGTTGACATCTATGAAGTATTTTGTGAAAATAGGACC -TGAGCGCACCTGTTGTCTATGTGATAGACGTGCCACATGCTTTTCCACTGCTTCAGACACTTATGCCTGTTGGCATCATT -CTATTGGATTTGATTACGTCTATAATCCGTTTATGATTGATGTTCAACAATGGGGTTTTACAGGTAACCTACAAAGCAAC -CATGATTTGTATTGTCAAGTCCATGGTAATGCACATGTAGCTAGTTGTGATGCAATCATGACTAGGTGTCTAGCTGTCCA -CGAGTGCTTTGTTAAGCGTGTTGACTGGACTATTGAATATCCTATAATTGGTGATGAACTGAAGATTAATGCGGCTTGTA -GAAAGGTTCAACACATGGTTGTTAAAGCTGCATTATTAGCAGACAAATTCCCAGTTCTTCACGACATTGGTAACCCTAAA -GCTATTAAGTGTGTACCTCAAGCTGATGTAGAATGGAAGTTCTATGATGCACAGCCTTGTAGTGACAAAGCTTATAAAAT -AGAAGAATTATTCTATTCTTATGCCACACATTCTGACAAATTCACAGATGGTGTATGCCTATTTTGGAATTGCAATGTCG -ATAGATATCCTGCTAATTCCATTGTTTGTAGATTTGACACTAGAGTGCTATCTAACCTTAACTTGCCTGGTTGTGATGGT -GGCAGTTTGTATGTAAATAAACATGCATTCCACACACCAGCTTTTGATAAAAGTGCTTTTGTTAATTTAAAACAATTACC -ATTTTTCTATTACTCTGACAGTCCATGTGAGTCTCATGGAAAACAAGTAGTGTCAGATATAGATTATGTACCACTAAAGT -CTGCTACGTGTATAACACGTTGCAATTTAGGTGGTGCTGTCTGTAGACATCATGCTAATGAGTACAGATTGTATCTCGAT -GCTTATAACATGATGATCTCAGCTGGCTTTAGCTTGTGGGTTTACAAACAATTTGATACTTATAACCTCTGGAACACTTT -TACAAGACTTCAGAGTTTAGAAAATGTGGCTTTTAATGTTGTAAATAAGGGACACTTTGATGGACAACAGGGTGAAGTAC -CAGTTTCTATCATTAATAACACTGTTTACACAAAAGTTGATGGTGTTGATGTAGAATTGTTTGAAAATAAAACAACATTA -CCTGTTAATGTAGCATTTGAGCTTTGGGCTAAGCGCAACATTAAACCAGTACCAGAGGTGAAAATACTCAATAATTTGGG -TGTGGACATTGCTGCTAATACTGTGATCTGGGACTACAAAAGAGATGCTCCAGCACATATATCTACTATTGGTGTTTGTT -CTATGACTGACATAGCCAAGAAACCAACTGAAACGATTTGTGCACCACTCACTGTCTTTTTTGATGGTAGAGTTGATGGT -CAAGTAGACTTATTTAGAAATGCCCGTAATGGTGTTCTTATTACAGAAGGTAGTGTTAAAGGTTTACAACCATCTGTAGG -TCCCAAACAAGCTAGTCTTAATGGAGTCACATTAATTGGAGAAGCCGTAAAAACACAGTTCAATTATTATAAGAAAGTTG -ATGGTGTTGTCCAACAATTACCTGAAACTTACTTTACTCAGAGTAGAAATTTACAAGAATTTAAACCCAGGAGTCAAATG -GAAATTGATTTCTTAGAATTAGCTATGGATGAATTCATTGAACGGTATAAATTAGAAGGCTATGCCTTCGAACATATCGT -TTATGGAGATTTTAGTCATAGTCAGTTAGGTGGTTTACATCTACTGATTGGACTAGCTAAACGTTTTAAGGAATCACCTT -TTGAATTAGAAGATTTTATTCCTATGGACAGTACAGTTAAAAACTATTTCATAACAGATGCGCAAACAGGTTCATCTAAG -TGTGTGTGTTCTGTTATTGATTTATTACTTGATGATTTTGTTGAAATAATAAAATCCCAAGATTTATCTGTAGTTTCTAA -GGTTGTCAAAGTGACTATTGACTATACAGAAATTTCATTTATGCTTTGGTGTAAAGATGGCCATGTAGAAACATTTTACC -CAAAATTACAATCTAGTCAAGCGTGGCAACCGGGTGTTGCTATGCCTAATCTTTACAAAATGCAAAGAATGCTATTAGAA -AAGTGTGACCTTCAAAATTATGGTGATAGTGCAACATTACCTAAAGGCATAATGATGAATGTCGCAAAATATACTCAACT -GTGTCAATATTTAAACACATTAACATTAGCTGTACCCTATAATATGAGAGTTATACATTTTGGTGCTGGTTCTGATAAAG -GAGTTGCACCAGGTACAGCTGTTTTAAGACAGTGGTTGCCTACGGGTACGCTGCTTGTCGATTCAGATCTTAATGACTTT -GTCTCTGATGCAGATTCAACTTTGATTGGTGATTGTGCAACTGTACATACAGCTAATAAATGGGATCTCATTATTAGTGA -TATGTACGACCCTAAGACTAAAAATGTTACAAAAGAAAATGACTCTAAAGAGGGTTTTTTCACTTACATTTGTGGGTTTA -TACAACAAAAGCTAGCTCTTGGAGGTTCCGTGGCTATAAAGATAACAGAACATTCTTGGAATGCTGATCTTTATAAGCTC -ATGGGACACTTCGCATGGTGGACAGCCTTTGTTACTAATGTGAATGCGTCATCATCTGAAGCATTTTTAATTGGATGTAA -TTATCTTGGCAAACCACGCGAACAAATAGATGGTTATGTCATGCATGCAAATTACATATTTTGGAGGAATACAAATCCAA -TTCAGTTGTCTTCCTATTCTTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAAA -GAAGGTCAAATCAATGATATGATTTTATCTCTTCTTAGTAAAGGTAGACTTATAATTAGAGAAAACAACAGAGTTGTTAT -TTCTAGTGATGTTCTTGTTAACAACTAAACGAACAATGTTTGTTTTTCTTGTTTTATTGCCACTAGTCTCTAGTCAGTGT -GTTAATCTTACAACCAGAACTCAATTACCCCCTGCATACACTAATTCTTTCACACGTGGTGTTTATTACCCTGACAAAGT -TTTCAGATCCTCAGTTTTACATTCAACTCAGGACTTGTTCTTACCTTTCTTTTCCAATGTTACTTGGTTCCATGCTATAC -ATGTCTCTGGGACCAATGGTACTAAGAGGTTTGATAACCCTGTCCTACCATTTAATGATGGTGTTTATTTTGCTTCCACT -GAGAAGTCTAACATAATAAGAGGCTGGATTTTTGGTACTACTTTAGATTCGAAGACCCAGTCCCTACTTATTGTTAATAA -CGCTACTAATGTTGTTATTAAAGTCTGTGAATTTCAATTTTGTAATGATCCATTTTTGGGTGTTTATTACCACAAAAACA -ACAAAAGTTGGATGGAAAGTGAGTTCAGAGTTTATTCTAGTGCGAATAATTGCACTTTTGAATATGTCTCTCAGCCTTTT -CTTATGGACCTTGAAGGAAAACAGGGTAATTTCAAAAATCTTAGGGAATTTGTGTTTAAGAATATTGATGGTTATTTTAA -AATATATTCTAAGCACACGCCTATTAATTTAGTGCGTGATCTCCCTCAGGGTTTTTCGGCTTTAGAACCATTGGTAGATT -TGCCAATAGGTATTAACATCACTAGGTTTCAAACTTTACTTGCTTTACATAGAAGTTATTTGACTCCTGGTGATTCTTCT -TCAGGTTGGACAGCTGGTGCTGCAGCTTATTATGTGGGTTATCTTCAACCTAGGACTTTTCTATTAAAATATAATGAAAA -TGGAACCATTACAGATGCTGTAGACTGTGCACTTGACCCTCTCTCAGAAACAAAGTGTACGTTGAAATCCTTCACTGTAG -AAAAAGGAATCTATCAAACTTCTAACTTTAGAGTCCAACCAACAGAATCTATTGTTAGATTTCCTAATATTACAAACTTG -TGCCCTTTTGGTGAAGTTTTTAACGCCACCAGATTTGCATCTGTTTATGCTTGGAACAGGAAGAGAATCAGCAACTGTGT -TGCTGATTATTCTGTCCTATATAATTCCGCATCATTTTCCACTTTTAAGTGTTATGGAGTGTCTCCTACTAAATTAAATG -ATCTCTGCTTTACTAATGTCTATGCAGATTCATTTGTAATTAGAGGTGATGAAGTCAGACAAATCGCTCCAGGGCAAACT -GGAAAGATTGCTGATTATAATTATAAATTACCAGATGATTTTACAGGCTGCGTTATAGCTTGGAATTCTAACAATCTTGA -TTCTAAGGTTGGTGGTAATTATAATTACCTGTATAGATTGTTTAGGAAGTCTAATCTCAAACCTTTTGAGAGAGATATTT -CAACTGAAATCTATCAGGCCGGTAGCACACCTTGTAATGGTGTTGAAGGTTTTAATTGTTACTTTCCTTTACAATCATAT -GGTTTCCAACCCACTAATGGTGTTGGTTACCAACCATACAGAGTAGTAGTACTTTCTTTTGAACTTCTACATGCACCAGC -AACTGTTTGTGGACCTAAAAAGTCTACTAATTTGGTTAAAAACAAATGTGTCAATTTCAACTTCAATGGTTTAACAGGCA -CAGGTGTTCTTACTGAGTCTAACAAAAAGTTTCTGCCTTTCCAACAATTTGGCAGAGACATTGCTGACACTACTGATGCT -GTCCGTGATCCACAGACACTTGAGATTCTTGACATTACACCATGTTCTTTTGGTGGTGTCAGTGTTATAACACCAGGAAC -AAATACTTCTAACCAGGTTGCTGTTCTTTATCAGGGTGTTAACTGCACAGAAGTCCCTGTTGCTATTCATGCAGATCAAC -TTACTCCTACTTGGCGTGTTTATTCTACAGGTTCTAATGTTTTTCAAACACGTGCAGGCTGTTTAATAGGGGCTGAACAT -GTCAACAACTCATATGAGTGTGACATACCCATTGGTGCAGGTATATGCGCTAGTTATCAGACTCAGACTAATTCTCCTCG -GCGGGCACGTAGTGTAGCTAGTCAATCCATCATTGCCTACACTATGTCACTTGGTGCAGAAAATTCAGTTGCTTACTCTA -ATAACTCTATTGCCATACCCACAAATTTTACTATTAGTGTTACCACAGAAATTCTACCAGTGTCTATGACCAAGACATCA -GTAGATTGTACAATGTACATTTGTGGTGATTCAACTGAATGCAGCAATCTTTTGTTGCAATATGGCAGTTTTTGTACACA -ATTAAACCGTGCTTTAACTGGAATAGCTGTTGAACAAGACAAAAACACCCAAGAAGTTTTTGCACAAGTCAAACAAATTT -ACAAAACACCACCAATTAAAGATTTTGGTGGTTTTAATTTTTCACAAATATTACCAGATCCATCAAAACCAAGCAAGAGG -TCATTTATTGAAGATCTACTTTTCAACAAAGTGACACTTGCAGATGCTGGCTTCATCAAACAATATGGTGATTGCCTTGG -TGATATTGCTGCTAGAGACCTCATTTGTGCACAAAAGTTTAACGGCCTTACTGTTTTGCCACCTTTGCTCACAGATGAAA -TGATTGCTCAATACACTTCTGCACTGTTAGCGGGTACAATCACTTCTGGTTGGACCTTTGGTGCAGGTGCTGCATTACAA -ATACCATTTGCTATGCAAATGGCTTATAGGTTTAATGGTATTGGAGTTACACAGAATGTTCTCTATGAGAACCAAAAATT -GATTGCCAACCAATTTAATAGTGCTATTGGCAAAATTCAAGACTCACTTTCTTCCACAGCAAGTGCACTTGGAAAACTTC -AAGATGTGGTCAACCAAAATGCACAAGCTTTAAACACGCTTGTTAAACAACTTAGCTCCAATTTTGGTGCAATTTCAAGT -GTTTTAAATGATATCCTTTCACGTCTTGACAAAGTTGAGGCTGAAGTGCAAATTGATAGGTTGATCACAGGCAGACTTCA -AAGTTTGCAGACATATGTGACTCAACAATTAATTAGAGCTGCAGAAATCAGAGCTTCTGCTAATCTTGCTGCTACTAAAA -TGTCAGAGTGTGTACTTGGACAATCAAAAAGAGTTGATTTTTGTGGAAAGGGCTATCATCTTATGTCCTTCCCTCAGTCA -GCACCTCATGGTGTAGTCTTCTTGCATGTGACTTATGTCCCTGCACAAGAAAAGAACTTCACAACTGCTCCTGCCATTTG -TCATGATGGAAAAGCACACTTTCCTCGTGAAGGTGTCTTTGTTTCAAATGGCACACACTGGTTTGTAACACAAAGGAATT -TTTATGAACCACAAATCATTACTACAGACAACACATTTGTGTCTGGTAACTGTGATGTTGTAATAGGAATTGTCAACAAC -ACAGTTTATGATCCTTTGCAACCTGAATTAGACTCATTCAAGGAGGAGTTAGATAAATATTTTAAGAATCATACATCACC -AGATGTTGATTTAGGTGACATCTCTGGCATTAATGCTTCAGTTGTAAACATTCAAAAAGAAATTGACCGCCTCAATGAGG -TTGCCAAGAATTTAAATGAATCTCTCATCGATCTCCAAGAACTTGGAAAGTATGAGCAGTATATAAAATGGCCATGGTAC -ATTTGGCTAGGTTTTATAGCTGGCTTGATTGCCATAGTAATGGTGACAATTATGCTTTGCTGTATGACCAGTTGCTGTAG -TTGTCTCAAGGGCTGTTGTTCTTGTGGATCCTGCTGCAAATTTGATGAAGACGACTCTGAGCCAGTGCTCAAAGGAGTCA -AATTACATTACACATAAACGAACTTATGGATTTGTTTATGAGAATCTTCACAATTGGAACTGTAACTTTGAAGCAAGGTG -AAATCAAGGATGCTACTCCTTCAGATTTTGTTCGCGCTACTGCAACGATACCGATACAAGCCTCACTCCCTTTCGGATGG -CTTATTGTTGGCGTTGCACTTCTTGCTGTTTTTCAGAGCGCTTCCAAAATCATAACCCTCAAAAAGAGATGGCAACTAGC -ACTCTCCAAGGGTGTTCACTTTGTTTGCAACTTGCTGTTGTTGTTTGTAACAGTTTACTCACACCTTTTGCTCGTTGCTG -CTGGCCTTGAAGCCCCTTTTCTCTATCTTTATGCTTTAGTCTACTTCTTGCAGAGTATAAACTTTGTAAGAATAATAATG -AGGCTTTGGCTTTGCTGGAAATGCCGTTCCAAAAACCCATTACTTTATGATGCCAACTATTTTCTTTGCTGGCATACTAA -TTGTTACGACTATTGTATACCTTACAATAGTGTAACTTCTTCAATTGTCATTACTTCAGGTGATGGCACAACAAGTCCTA -TTTCTGAACATGACTACCAGATTGGTGGTTATACTGAAAAATGGGAATCTGGAGTAAAAGACTGTGTTGTATTACACAGT -TACTTCACTTCAGACTATTACCAGCTGTACTCAACTCAATTGAGTACAGACACTGGTGTTGAACATGTTACCTTCTTCAT -CTACAATAAAATTGTTGATGAGCCTGAAGAACATGTCCAAATTCACACAATCGACGGTTCATCCGGAGTTGTTAATCCAG -TAATGGAACCAATTTATGATGAACCGACGACGACTACTAGCGTGCCTTTGTAAGCACAAGCTGATGAGTACGAACTTATG -TACTCATTCGTTTCGGAAGAGACAGGTACGTTAATAGTTAATAGCGTACTTCTTTTTCTTGCTTTCGTGGTATTCTTGCT -AGTTACACTAGCCATCCTTACTGCGCTTCGATTGTGTGCGTACTGCTGCAATATTGTTAACGTGAGTCTTGTAAAACCTT -CTTTTTACGTTTACTCTCGTGTTAAAAATCTGAATTCTTCTAGAGTTCCTGATCTTCTGGTCTAAACGAACTAAATATTA -TATTAGTTTTTCTGTTTGGAACTTTAATTTTAGCCATGGCAGATTCCAACGGTACTATTACCGTTGAAGAGCTTAAAAAG -CTCCTTGAACAATGGAACCTAGTAATAGGTTTCCTATTCCTTACATGGATTTGTCTTCTACAATTTGCCTATGCCAACAG -GAATAGGTTTTTGTATATAATTAAGTTAATTTTCCTCTGGCTGTTATGGCCAGTAACTTTAGCTTGTTTTGTGCTTGCTG -CTGTTTACAGAATAAATTGGATCACCGGTGGAATTGCTATCGCAATGGCTTGTCTTGTAGGCTTGATGTGGCTCAGCTAC -TTCATTGCTTCTTTCAGACTGTTTGCGCGTACGCGTTCCATGTGGTCATTCAATCCAGAAACTAACATTCTTCTCAACGT -GCCACTCCATGGCACTATTCTGACCAGACCGCTTCTAGAAAGTGAACTCGTAATCGGAGCTGTGATCCTTCGTGGACATC -TTCGTATTGCTGGACACCATCTAGGACGCTGTGACATCAAGGACCTGCCTAAAGAAATCACTGTTGCTACATCACGAACG -CTTTCTTATTACAAATTGGGAGCTTCGCAGCGTGTAGCAGGTGACTCAGGTTTTGCTGCATACAGTCGCTACAGGATTGG -CAACTATAAATTAAACACAGACCATTCCAGTAGCAGTGACAATATTGCTTTGCTTGTACAGTAAGTGACAACAGATGTTT -CATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAGTTTCCATTTGGAATCT -TGATTACATCATAAACCTCATAATTAAAAATTTATCTAAGTCACTAACTGAGAATAAATATTCTCAATTAGATGAAGAGC -AACCAATGGAGATTGATTAAACGAACATGAAAATTATTCTTTTCTTGGCACTGATAACACTCGCTACTTGTGAGCTTTAT -CACTACCAAGAGTGTGTTAGAGGTACAACAGTACTTTTAAAAGAACCTTGCTCTTCTGGAACATACGAGGGCAATTCACC -ATTTCATCCTCTAGCTGATAACAAATTTGCACTGACTTGCTTTAGCACTCAATTTGCTTTTGCTTGTCCTGACGGCGTAA -AACACGTCTATCAGTTACGTGCCAGATCAGTTTCACCTAAACTGTTCATCAGACAAGAGGAAGTTCAAGAACTTTACTCT -CCAATTTTTCTTATTGTTGCGGCAATAGTGTTTATAACACTTTGCTTCACACTCAAAAGAAAGACAGAATGATTGAACTT -TCATTAATTGACTTCTATTTGTGCTTTTTAGCCTTTCTGCTATTCCTTGTTTTAATTATGCTTATTATCTTTTGGTTCTC -ACTTGAACTGCAAGATCATAATGAAACTTGTCACGCCTAAACGAACATGAAATTTCTTGTTTTCTTAGGAATCATCACAA -CTGTAGCTGCATTTCACCAAGAATGTAGTTTACAGTCATGTACTCAACATCAACCATATGTAGTTGATGACCCGTGTCCT -ATTCACTTCTATTCTAAATGGTATATTAGAGTAGGAGCTAGAAAATCAGCACCTTTAATTGAATTGTGCGTGGATGAGGC -TGGTTCTAAATCACCCATTCAGTACATCGATATCGGTAATTATACAGTTTCCTGTTTACCTTTTACAATTAATTGCCAGG -AACCTAAATTGGGTAGTCTTGTAGTGCGTTGTTCGTTCTATGAAGACTTTTTAGAGTATCATGACGTTCGTGTTGTTTTA -GATTTCATCTAAACGAACAAACTAAAATGTCTGATAATGGACCCCAAAATCAGCGAAATGCACCCCGCATTACGTTTGGT -GGACCCTCAGATTCAACTGGCAGTAACCAGAATGGAGAACGCAGTGGGGCGCGATCAAAACAACGTCGGCCCCAAGGTTT -ACCCAATAATACTGCGTCTTGGTTCACCGCTCTCACTCAACATGGCAAGGAAGACCTTAAATTCCCTCGAGGACAAGGCG -TTCCAATTAACACCAATAGCAGTCCAGATGACCAAATTGGCTACTACCGAAGAGCTACCAGACGAATTCGTGGTGGTGAC -GGTAAAATGAAAGATCTCAGTCCAAGATGGTATTTCTACTACCTAGGAACTGGGCCAGAAGCTGGACTTCCCTATGGTGC -TAACAAAGACGGCATCATATGGGTTGCAACTGAGGGAGCCTTGAATACACCAAAAGATCACATTGGCACCCGCAATCCTG -CTAACAATGCTGCAATCGTGCTACAACTTCCTCAAGGAACAACATTGCCAAAAGGCTTCTACGCAGAAGGGAGCAGAGGC -GGCAGTCAAGCCTCTTCTCGTTCCTCATCACGTAGTCGCAACAGTTCAAGAAATTCAACTCCAGGCAGCAGTAGGGGAAC -TTCTCCTGCTAGAATGGCTGGCAATGGCGGTGATGCTGCTCTTGCTTTGCTGCTGCTTGACAGATTGAACCAGCTTGAGA -GCAAAATGTCTGGTAAAGGCCAACAACAACAAGGCCAAACTGTCACTAAGAAATCTGCTGCTGAGGCTTCTAAGAAGCCT -CGGCAAAAACGTACTGCCACTAAAGCATACAATGTAACACAAGCTTTCGGCAGACGTGGTCCAGAACAAACCCAAGGAAA -TTTTGGGGACCAGGAACTAATCAGACAAGGAACTGATTACAAACATTGGCCGCAAATTGCACAATTTGCCCCCAGCGCTT -CAGCGTTCTTCGGAATGTCGCGCATTGGCATGGAAGTCACACCTTCGGGAACGTGGTTGACCTACACAGGTGCCATCAAA -TTGGATGACAAAGATCCAAATTTCAAAGATCAAGTCATTTTGCTGAATAAGCATATTGACGCATACAAAACATTCCCACC -AACAGAGCCTAAAAAGGACAAAAAGAAGAAGGCTGATGAAACTCAAGCCTTACCGCAGAGACAGAAGAAACAGCAAACTG -TGACTCTTCTTCCTGCTGCAGATTTGGATGATTTCTCCAAACAATTGCAACAATCCATGAGCAGTGCTGACTCAACTCAG -GCCTAAACTCATGCAGACCACACAAGGCAGATGGGCTATATAAACGTTTTCGCTTTTCCGTTTACGATATATAGTCTACT -CTTGTGCAGAATGAATTCTCGTAACTACATAGCACAAGTAGATGTAGTTAACTTTAATCTCACATAGCAATCTTTAATCA -GTGTGTAACATTAGGGAGGACTTGAAAGAGCCACCACATTTTCACCGAGGCCACGCGGAGTACGATCGAGTGTACAGTGA -ACAATGCTAGGGAGAGCTGCCTATATGGAAGAGCCCTAATGTGTAAAATTAATTTTAGTAGTGCTATCC diff --git a/tests/data/genomics/sarscov2/genome/genome.fasta.fai b/tests/data/genomics/sarscov2/genome/genome.fasta.fai deleted file mode 100644 index f683583d..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.fasta.fai +++ /dev/null @@ -1 +0,0 @@ -MT192765.1 29829 120 80 81 diff --git a/tests/data/genomics/sarscov2/genome/genome.gff3 b/tests/data/genomics/sarscov2/genome/genome.gff3 deleted file mode 100644 index f05b7909..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.gff3 +++ /dev/null @@ -1,23 +0,0 @@ -MT192765.1 Genbank transcript 259 29667 . + . ID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab -MT192765.1 Genbank gene 259 21548 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 259 13461 . + 0 Parent=unknown_transcript_1;exception="ribosomal slippage";gbkey=CDS;gene=orf1ab;note="pp1ab;translated=by -1 ribosomal frameshift";product="orf1ab polyprotein";protein_id=QIK50426.1 -MT192765.1 Genbank CDS 13461 21548 . + 0 Parent=unknown_transcript_1;exception="ribosomal slippage";gbkey=CDS;gene=orf1ab;note="pp1ab;translated=by -1 ribosomal frameshift";product="orf1ab polyprotein";protein_id=QIK50426.1 -MT192765.1 Genbank CDS 21556 25377 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=S;note="structural protein";product="surface glycoprotein";protein_id=QIK50427.1 -MT192765.1 Genbank gene 21556 25377 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank gene 25386 26213 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 25386 26213 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF3a;product="ORF3a protein";protein_id=QIK50428.1 -MT192765.1 Genbank CDS 26238 26465 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=E;note="structural protein;E=protein";product="envelope protein";protein_id=QIK50429.1 -MT192765.1 Genbank gene 26238 26465 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 26516 27184 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=M;note="structural protein";product="membrane glycoprotein";protein_id=QIK50430.1 -MT192765.1 Genbank gene 26516 27184 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 27195 27380 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF6;product="ORF6 protein";protein_id=QIK50431.1 -MT192765.1 Genbank gene 27195 27380 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank gene 27387 27880 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 27387 27752 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF7b;product="ORF7b protein";protein_id=QIK50433.1 -MT192765.1 Genbank CDS 27749 27880 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF7b;product="ORF7b protein";protein_id=QIK50433.1 -MT192765.1 Genbank gene 27887 28252 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 27887 28252 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF8;product="ORF8 protein";protein_id=QIK50434.1 -MT192765.1 Genbank gene 28267 29526 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 28267 29526 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=N;note="structural protein";product="nucleocapsid phosphoprotein";protein_id=QIK50435.1 -MT192765.1 Genbank gene 29551 29667 . + . Parent=unknown_transcript_1 -MT192765.1 Genbank CDS 29551 29667 . + 0 Parent=unknown_transcript_1;gbkey=CDS;gene=ORF10;product="ORF10 protein";protein_id=QIK50436.1 diff --git a/tests/data/genomics/sarscov2/genome/genome.gff3.gz b/tests/data/genomics/sarscov2/genome/genome.gff3.gz deleted file mode 100644 index cf77e8b1..00000000 Binary files a/tests/data/genomics/sarscov2/genome/genome.gff3.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/genome/genome.gtf b/tests/data/genomics/sarscov2/genome/genome.gtf deleted file mode 100644 index 57fe1823..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.gtf +++ /dev/null @@ -1,49 +0,0 @@ -#gtf-version 2.2 -#!genome-build ASM1154554v1 -#!genome-build-accession NCBI_Assembly:GCA_011545545.1 -MT192765.1 Genbank gene 259 21548 . + . gene_id "orf1ab"; gbkey "Gene"; gene "orf1ab"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 259 13461 . + 0 gene_id "orf1ab"; transcript_id "unknown_transcript_1"; exception "ribosomal slippage"; gbkey "CDS"; gene "orf1ab"; note "pp1ab; translated by -1 ribosomal frameshift"; product "orf1ab polyprotein"; protein_id "QIK50426.1"; -MT192765.1 Genbank CDS 13461 21545 . + 0 gene_id "orf1ab"; transcript_id "unknown_transcript_1"; exception "ribosomal slippage"; gbkey "CDS"; gene "orf1ab"; note "pp1ab; translated by -1 ribosomal frameshift"; product "orf1ab polyprotein"; protein_id "QIK50426.1"; -MT192765.1 Genbank start_codon 259 261 . + 0 gene_id "orf1ab"; transcript_id "unknown_transcript_1"; exception "ribosomal slippage"; gbkey "CDS"; gene "orf1ab"; note "pp1ab; translated by -1 ribosomal frameshift"; product "orf1ab polyprotein"; protein_id "QIK50426.1"; -MT192765.1 Genbank stop_codon 21546 21548 . + 0 gene_id "orf1ab"; transcript_id "unknown_transcript_1"; exception "ribosomal slippage"; gbkey "CDS"; gene "orf1ab"; note "pp1ab; translated by -1 ribosomal frameshift"; product "orf1ab polyprotein"; protein_id "QIK50426.1"; -MT192765.1 Genbank gene 21556 25377 . + . gene_id "S"; gbkey "Gene"; gene "S"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 21556 25374 . + 0 gene_id "S"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "S"; note "structural protein"; product "surface glycoprotein"; protein_id "QIK50427.1"; -MT192765.1 Genbank start_codon 21556 21558 . + 0 gene_id "S"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "S"; note "structural protein"; product "surface glycoprotein"; protein_id "QIK50427.1"; -MT192765.1 Genbank stop_codon 25375 25377 . + 0 gene_id "S"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "S"; note "structural protein"; product "surface glycoprotein"; protein_id "QIK50427.1"; -MT192765.1 Genbank gene 25386 26213 . + . gene_id "ORF3a"; gbkey "Gene"; gene "ORF3a"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 25386 26210 . + 0 gene_id "ORF3a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF3a"; product "ORF3a protein"; protein_id "QIK50428.1"; -MT192765.1 Genbank start_codon 25386 25388 . + 0 gene_id "ORF3a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF3a"; product "ORF3a protein"; protein_id "QIK50428.1"; -MT192765.1 Genbank stop_codon 26211 26213 . + 0 gene_id "ORF3a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF3a"; product "ORF3a protein"; protein_id "QIK50428.1"; -MT192765.1 Genbank gene 26238 26465 . + . gene_id "E"; gbkey "Gene"; gene "E"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 26238 26462 . + 0 gene_id "E"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "E"; note "structural protein; E protein"; product "envelope protein"; protein_id "QIK50429.1"; -MT192765.1 Genbank start_codon 26238 26240 . + 0 gene_id "E"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "E"; note "structural protein; E protein"; product "envelope protein"; protein_id "QIK50429.1"; -MT192765.1 Genbank stop_codon 26463 26465 . + 0 gene_id "E"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "E"; note "structural protein; E protein"; product "envelope protein"; protein_id "QIK50429.1"; -MT192765.1 Genbank gene 26516 27184 . + . gene_id "M"; gbkey "Gene"; gene "M"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 26516 27181 . + 0 gene_id "M"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "M"; note "structural protein"; product "membrane glycoprotein"; protein_id "QIK50430.1"; -MT192765.1 Genbank start_codon 26516 26518 . + 0 gene_id "M"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "M"; note "structural protein"; product "membrane glycoprotein"; protein_id "QIK50430.1"; -MT192765.1 Genbank stop_codon 27182 27184 . + 0 gene_id "M"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "M"; note "structural protein"; product "membrane glycoprotein"; protein_id "QIK50430.1"; -MT192765.1 Genbank gene 27195 27380 . + . gene_id "ORF6"; gbkey "Gene"; gene "ORF6"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 27195 27377 . + 0 gene_id "ORF6"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF6"; product "ORF6 protein"; protein_id "QIK50431.1"; -MT192765.1 Genbank start_codon 27195 27197 . + 0 gene_id "ORF6"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF6"; product "ORF6 protein"; protein_id "QIK50431.1"; -MT192765.1 Genbank stop_codon 27378 27380 . + 0 gene_id "ORF6"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF6"; product "ORF6 protein"; protein_id "QIK50431.1"; -MT192765.1 Genbank gene 27387 27752 . + . gene_id "ORF7a"; gbkey "Gene"; gene "ORF7a"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 27387 27749 . + 0 gene_id "ORF7a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7a"; product "ORF7a protein"; protein_id "QIK50432.1"; -MT192765.1 Genbank start_codon 27387 27389 . + 0 gene_id "ORF7a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7a"; product "ORF7a protein"; protein_id "QIK50432.1"; -MT192765.1 Genbank stop_codon 27750 27752 . + 0 gene_id "ORF7a"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7a"; product "ORF7a protein"; protein_id "QIK50432.1"; -MT192765.1 Genbank gene 27749 27880 . + . gene_id "ORF7b"; gbkey "Gene"; gene "ORF7b"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 27749 27877 . + 0 gene_id "ORF7b"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7b"; product "ORF7b protein"; protein_id "QIK50433.1"; -MT192765.1 Genbank start_codon 27749 27751 . + 0 gene_id "ORF7b"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7b"; product "ORF7b protein"; protein_id "QIK50433.1"; -MT192765.1 Genbank stop_codon 27878 27880 . + 0 gene_id "ORF7b"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF7b"; product "ORF7b protein"; protein_id "QIK50433.1"; -MT192765.1 Genbank gene 27887 28252 . + . gene_id "ORF8"; gbkey "Gene"; gene "ORF8"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 27887 28249 . + 0 gene_id "ORF8"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF8"; product "ORF8 protein"; protein_id "QIK50434.1"; -MT192765.1 Genbank start_codon 27887 27889 . + 0 gene_id "ORF8"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF8"; product "ORF8 protein"; protein_id "QIK50434.1"; -MT192765.1 Genbank stop_codon 28250 28252 . + 0 gene_id "ORF8"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF8"; product "ORF8 protein"; protein_id "QIK50434.1"; -MT192765.1 Genbank gene 28267 29526 . + . gene_id "N"; gbkey "Gene"; gene "N"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 28267 29523 . + 0 gene_id "N"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "N"; note "structural protein"; product "nucleocapsid phosphoprotein"; protein_id "QIK50435.1"; -MT192765.1 Genbank start_codon 28267 28269 . + 0 gene_id "N"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "N"; note "structural protein"; product "nucleocapsid phosphoprotein"; protein_id "QIK50435.1"; -MT192765.1 Genbank stop_codon 29524 29526 . + 0 gene_id "N"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "N"; note "structural protein"; product "nucleocapsid phosphoprotein"; protein_id "QIK50435.1"; -MT192765.1 Genbank gene 29551 29667 . + . gene_id "ORF10"; gbkey "Gene"; gene "ORF10"; gene_biotype "protein_coding"; -MT192765.1 Genbank CDS 29551 29664 . + 0 gene_id "ORF10"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF10"; product "ORF10 protein"; protein_id "QIK50436.1"; -MT192765.1 Genbank start_codon 29551 29553 . + 0 gene_id "ORF10"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF10"; product "ORF10 protein"; protein_id "QIK50436.1"; -MT192765.1 Genbank stop_codon 29665 29667 . + 0 gene_id "ORF10"; transcript_id "unknown_transcript_1"; gbkey "CDS"; gene "ORF10"; product "ORF10 protein"; protein_id "QIK50436.1"; -### diff --git a/tests/data/genomics/sarscov2/genome/genome.sizes b/tests/data/genomics/sarscov2/genome/genome.sizes deleted file mode 100644 index eafa177f..00000000 --- a/tests/data/genomics/sarscov2/genome/genome.sizes +++ /dev/null @@ -1 +0,0 @@ -MT192765.1 29829 diff --git a/tests/data/genomics/sarscov2/genome/transcriptome.fasta b/tests/data/genomics/sarscov2/genome/transcriptome.fasta deleted file mode 100644 index 2c0632fd..00000000 --- a/tests/data/genomics/sarscov2/genome/transcriptome.fasta +++ /dev/null @@ -1,382 +0,0 @@ ->lcl|MT192765.1_cds_QIK50426.1_1 [gene=orf1ab] [protein=orf1ab polyprotein] [exception=ribosomal slippage] [protein_id=QIK50426.1] [location=join(259..13461,13461..21548)] [gbkey=CDS] -ATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTTACAGGTTCGCGACGTGCT -CGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAGATGGCACTTGTGGCTTAG -TAGAAGTTGAAAAAGGCGTTTTGCCTCAACTTGAACAGCCCTATGTGTTCATCAAACGTTCGGATGCTCGAACTGCACCT -CATGGTCATGTTATGGTTGAGCTGGTAGCAGAACTCGAAGGCATTCAGTACGGTCGTAGTGGTGAGACACTTGGTGTCCT -TGTCCCTCATGTGGGCGAAATACCAGTGGCTTACCGCAAGGTTCTTCTTCGTAAGAACGGTAATAAAGGAGCTGGTGGCC -ATAGTTACGGCGCCGATCTAAAGTCATTTGACTTAGGCGACGAGCTTGGCACTGATCCTTATGAAGATTTTCAAGAAAAC -TGGAACACTAAACATAGCAGTGGTGTTACCCGTGAACTCATGCGTGAGCTTAACGGAGGGGCATACACTCGCTATGTCGA -TAACAACTTCTGTGGCCCTGATGGCTACCCTCTTGAGTGCATTAAAGACCTTCTAGCACGTGCTGGTAAAGCTTCATGCA -CTTTGTCCGAACAACTGGACTTTATTGACACTAAGAGGGGTGTATACTGCTGCCGTGAACATGAGCATGAAATTGCTTGG -TACACGGAACGTTCTGAAAAGAGCTATGAATTGCAGACACCTTTTGAAATTAAATTGGCAAAGAAATTTGACACCTTCAA -TGGGGAATGTCCAAATTTTGTATTTCCCTTAAATTCCATAATCAAGACTATTCAACCAAGGGTTGAAAAGAAAAAGCTTG -ATGGCTTTATGGGTAGAATTCGATCTGTCTATCCAGTTGCGTCACCAAATGAATGCAACCAAATGTGCCTTTCAACTCTC -ATGAAGTGTGATCATTGTGGTGAAACTTCATGGCAGACGGGCGATTTTGTTAAAGCCACTTGCGAATTTTGTGGCACTGA -GAATTTGACTAAAGAAGGTGCCACTACTTGTGGTTACTTACCCCAAAATGCTGTTGTTAAAATTTATTGTCCAGCATGTC -ACAATTCAGAAGTAGGACCTGAGCATAGTCTTGCCGAATACCATAATGAATCTGGCTTGAAAACCATTCTTCGTAAGGGT -GGTCGCACTATTGCCTTTGGAGGCTGTGTGTTCTCTTATGTTGGTTGCCATAACAAGTGTGCCTATTGGGTTCCACGTGC -TAGCGCTAACATAGGTTGTAACCATACAGGTGTTGTTGGAGAAGGTTCCGAAGGTCTTAATGACAACCTTCTTGAAATAC -TCCAAAAAGAGAAAGTCAACATCAATATTGTTGGTGACTTTAAACTTAATGAAGAGATCGCCATTATTTTGGCATCTTTT -TCTGCTTCCACAAGTGCTTTTGTGGAAACTGTGAAAGGTTTGGATTATAAAGCATTCAAACAAATTGTTGAATCCTGTGG -TAATTTTAAAGTTACAAAAGGAAAAGCTAAAAAAGGTGCCTGGAATATTGGTGAACAGAAATCAATACTGAGTCCTCTTT -ATGCATTTGCATCAGAGGCTGCTCGTGTTGTACGATCAATTTTCTCCCGCACTCTTGAAACTGCTCAAAATTCTGTGCGT -GTTTTACAGAAGGCCGCTATAACAATACTAGATGGAATTTCACAGTATTCACTGAGACTCATTGATGCTATGATGTTCAC -ATCTGATTTGGCTACTAACAATCTAGTTGTAATGGCCTACATTACAGGTGGTGTTGTTCAGTTGACTTCGCAGTGGCTAA -CTAACATCTTTGGCACTGTTTATGAAAAACTCAAACCCGTCCTTGATTGGCTTGAAGAGAAGTTTAAGGAAGGTGTAGAG -TTTCTTAGAGACGGTTGGGAAATTGTTAAATTTATCTCAACCTGTGCTTGTGAAATTGTCGGTGGACAAATTGTCACCTG -TGCAAAGGAAATTAAGGAGAGTGTTCAGACATTCTTTAAGCTTGTAAATAAATTTTTGGCTTTGTGTGCTGACTCTATCA -TTATTGGTGGAGCTAAACTTAAAGCCTTGAATTTAGGTGAAACATTTGTCACGCACTCAAAGGGATTGTACAGAAAGTGT -GTTAAATCCAGAGAAGAAACTGGCCTACTCATGCCTCTAAAAGCCCCAAAAGAAATTATCTTCTTAGAGGGAGAAACACT -TCCCACAGAAGTGTTAACAGAGGAAGTTGTCTTGAAAACTGGTGATTTACAACCATTAGAACAACCTACTAGTGAAGCTG -TTGAAGCTCCATTGGTTGGTACACCAGTTTGTATTAACGGGCTTATGTTGCTCGAAATCAAAGACACAGAAAAGTACTGT -GCCCTTGCACCTAATATGATGGTAACAAACAATACCTTCACACTCAAAGGCGGTGCACCAACAAAGGTTACTTTTGGTGA -TGACACTGTGATAGAAGTGCAAGGTTACAAGAGTGTGAATATCACTTTTGAACTTGATGAAAGGATTGATAAAGTACTTA -ATGAGAAGTGCTCTGCCTATACAGTTGAACTCGGTACAGAAGTAAATGAGTTCGCCTGTGTTGTGGCAGATGCTGTCATA -AAAACTTTGCAACCAGTATCTGAATTACTTACACCACTGGGCATTGATTTAGATGAGTGGAGTATGGCTACATACTACTT -ATTTGATGAGTCTGGTGAGTTTAAATTGGCTTCACATATGTATTGTTCTTTTTACCCTCCAGATGAGGATGAAGAAGAAG -GTGATTGTGAAGAAGAAGAGTTTGAGCCATCAACTCAATATGAGTATGGTACTGAAGATGATTACCAAGGTAAACCTTTG -GAATTTGGTGCCACTTCTGCTGCTCTTCAACCTGAAGAAGAGCAAGAAGAAGATTGGTTAGATGATGATAGTCAACAAAC -TGTTGGTCAACAAGACGGCAGTGAGGACAATCAGACAACTACTATTCAAACAATTGTTGAGGTTCAACCTCAATTAGAGA -TGGAACTTACACCAGTTGTTCAGACTATTGAAGTGAATAGTTTTAGTGGTTATTTAAAACTTACTGACAATGTATACATT -AAAAATGCAGACATTGTGGAAGAAGCTAAAAAGGTAAAACCAACAGTGGTTGTTAATGCAGCCAATGTTTACCTTAAACA -TGGAGGAGGTGTTGCAGGAGCCTTAAATAAGGCTACTAACAATGCCATGCAAGTTGAATCTGATGATTACATAGCTACTA -ATGGACCACTTAAAGTGGGTGGTAGTTGTGTTTTAAGCGGACACAATCTTGCTAAACACTGTCTTCATGTTGTCGGCCCA -AATGTTAACAAAGGTGAAGACATTCAACTTCTTAAGAGTGCTTATGAAAATTTTAATCAGCACGAAGTTCTACTTGCACC -ATTATTATCAGCTGGTATTTTTGGTGCTGACCCTATACATTCTTTAAGAGTTTGTGTAGATACTGTTCGCACAAATGTCT -ACTTAGCTGTCTTTGATAAAAATCTCTATGACAAACTTGTTTCAAGCTTTTTGGAAATGAAGAGTGAAAAGCAAGTTGAA -CAAAAGATCGCTGAGATTCCTAAAGAGGAAGTTAAGCCATTTATAACTGAAAGTAAACCTTCAGTTGAACAGAGAAAACA -AGATGATAAGAAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGTTCCTCACAGAAAACTTGT -TACTTTATATTGACATTAATGGCAATCTTCATCCAGATTCTGCCACTCTTGTTAGTGACATTGACATCACTTTCTTAAAG -AAAGATGCTCCATATATAGTGGGTGATGTTGTTCAAGAGGGTGTTTTAACTGCTGTGGTTATACCTACTAAAAAGGCTGG -TGGCACTACTGAAATGCTAGCGAAAGCTTTGAGAAAAGTGCCAACAGACAATTATATAACCACTTACCCGGGTCAGGGTT -TAAATGGTTACACTGTAGAGGAGGCAAAGACAGTGCTTAAAAAGTGTAAAAGTGCCTTTTACATTCTACCATCTATTATC -TCTAATGAGAAGCAAGAAATTCTTGGAACTGTTTCTTGGAATTTGCGAGAAATGCTTGCACATGCAGAAGAAACACGCAA -ATTAATGCCTGTCTGTGTGGAAACTAAAGCCATAGTTTCAACTATACAGCGTAAATATAAGGGTATTAAAATACAAGAGG -GTGTGGTTGATTATGGTGCTAGATTTTACTTTTACACCAGTAAAACAACTGTAGCGTCACTTATCAACACACTTAACGAT -CTAAATGAAACTCTTGTTACAATGCCACTTGGCTATGTAACACATGGCTTAAATTTGGAAGAAGCTGCTCGGTATATGAG -ATCTCTCAAAGTGCCAGCTACAGTTTCTGTTTCTTCACCTGATGCTGTTACAGCGTATAATGGTTATCTTACTTCTTCTT -CTAAAACACCTGAAGAACATTTTATTGAAACCATCTCACTTGCTGGTTCCTATAAAGATTGGTCCTATTCTGGACAATCT -ACACAACTAGGTATAGAATTTCTTAAGAGAGGTGATAAAAGTGTATATTACACTAGTAATCCTACCACATTCCACCTAGA -TGGTGAAGTTATCACCTTTGACAATCTTAAGACACTTCTTTCTTTGAGAGAAGTGAGGACTATTAAGGTGTTTACAACAG -TAGACAACATTAACCTCCACACGCAAGTTGTGGACATGTCAATGACATATGGACAACAGTTTGGTCCAACTTATTTGGAT -GGAGCTGATGTTACTAAAATAAAACCTCATAATTCACATGAAGGTAAAACATTTTATGTTTTACCTAATGATGACACTCT -ACGTGTTGAGGCTTTTGAGTACTACCACACAACTGATCCTAGTTTTCTGGGTAGGTACATGTCAGCATTAAATCACACTA -AAAAGTGGAAATACCCACAAGTTAATGGTTTAACTTCTATTAAATGGGCAGATAACAACTGTTATCTTGCCACTGCATTG -TTAACACTCCAACAAATAGAGTTGAAGTTTAATCCACCTGCTCTACAAGATGCTTATTACAGAGCAAGGGCTGGTGAAGC -TGCTAACTTTTGTGCACTTATCTTAGCCTACTGTAATAAGACAGTAGGTGAGTTAGGTGATGTTAGAGAAACAATGAGTT -ACTTGTTTCAACATGCCAATTTAGATTCTTGCAAAAGAGTCTTGAACGTGGTGTGTAAAACTTGTGGACAACAGCAGACA -ACCCTTAAGGGTGTAGAAGCTGTTATGTACATGGGCACACTTTCTTATGAACAATTTAAGAAAGGTGTTCAGATACCTTG -TACGTGTGGTAAACAAGCTACAAAATATCTAGTACAACAGGAGTCACCTTTTGTTATGATGTCAGCACCACCTGCTCAGT -ATGAACTTAAGCATGGTACATTTACTTGTGCTAGTGAGTACACTGGTAATTACCAGTGTGGTCACTATAAACATATAACT -TCTAAAGAAACTTTGTATTGCATAGACGGTGCTTTACTTACAAAGTCCTCAGAATACAAAGGTCCTATTACGGATGTTTT -CTACAAAGAAAACAGTTACACAACAACCATAAAACCAGTTACTTATAAATTGGATGGTGTTGTTTGTACAGAAATTGACC -CTAAGTTGGACAATTATTATAAGAAAGACAATTCTTATTTCACAGAGCAACCAATTGATCTTGTACCAAACCAACCATAT -CCAAACGCAAGCTTCGATAATTTTAAGTTTGTATGTGATAATATCAAATTTGCTGATGATTTAAACCAGTTAACTGGTTA -TAAGAAACCTGCTTCAAGAGAGCTTAAAGTTACATTTTTCCCTGACTTAAATGGTGATGTGGTGGCTATTGATTATAAAC -ACTACACACCCTCTTTTAAGAAAGGAGCTAAATTGTTACATAAACCTATTGTTTGGCATGTTAACAATGCAACTAATAAA -GCCACGTATAAACCAAATACCTGGTGTATACGTTGTCTTTGGAGCACAAAACCAGTTGAAACATCAAATTCGTTTGATGT -ACTGAAGTCAGAGGACGCGCAGGGAATGGATAATCTTGCCTGCGAAGATCTAAAACCAGTCTCTGAAGAAGTAGTGGAAA -ATCCTACCATACAGAAAGACGTTCTTGAGTGTAATGTGAAAACTACCGAAGTTGTAGGAGACATTATACTTAAACCAGCA -AATAATAGTTTAAAAATTACAGAAGAGGTTGGCCACACAGATCTAATGGCTGCTTATGTAGACAATTCTAGTCTTACTAT -TAAGAAACCTAATGAATTATCTAGAGTATTAGGTTTGAAAACCCTTGCTACTCATGGTTTAGCTGCTGTTAATAGTGTCC -CTTGGGATACTATAGCTAATTATGCTAAGCCTTTTCTTAACAAAGTTGTTAGTACAACTACTAACATAGTTACACGGTGT -TTAAACCGTGTTTGTACTAATTATATGCCTTATTTCTTTACTTTATTGCTACAATTGTGTACTTTTACTAGAAGTACAAA -TTCTAGAATTAAAGCATCTATGCCGACTACTATAGCAAAGAATACTGTTAAGAGTGTCGGTAAATTTTGTCTAGAGGCTT -CATTTAATTATTTGAAGTCACCTAATTTTTCTAAACTGATAAATATTATAATTTGGTTTTTACTATTAAGTGTTTGCCTA -GGTTCTTTAATCTACTCAACCGCTGCTTTAGGTGTTTTAATGTCTAATTTAGGCATGCCTTCTTACTGTACTGGTTACAG -AGAAGGCTATTTGAACTCTACTAATGTCACTATTGCAACCTACTGTACTGGTTCTATACCTTGTAGTGTTTGTCTTAGTG -GTTTAGATTCTTTAGACACCTATCCTTCTTTAGAAACTATACAAATTACCATTTCATCTTTTAAATGGGATTTAACTGCT -TTTGGCTTAGTTGCAGAGTGGTTTTTGGCATATATTCTTTTCACTAGGTTTTTCTATGTACTTGGATTGGCTGCAATCAT -GCAATTGTTTTTCAGCTATTTTGCAGTACATTTTATTAGTAATTCTTGGCTTATGTGGTTAATAATTAATCTTGTACAAA -TGGCCCCGATTTCAGCTATGGTTAGAATGTACATCTTCTTTGCATCATTTTATTATGTATGGAAAAGTTATGTGCATGTT -GTAGACGGTTGTAATTCATCAACTTGTATGATGTGTTACAAACGTAATAGAGCAACAAGAGTCGAATGTACAACTATTGT -TAATGGTGTTAGAAGGTCCTTTTATGTCTATGCTAATGGAGGTAAAGGCTTTTGCAAACTACACAATTGGAATTGTGTTA -ATTGTGATACATTCTGTGCTGGTAGTACATTTATTAGTGATGAAGTTGCGAGAGACTTGTCACTACAGTTTAAAAGACCA -ATAAATCCTACTGACCAGTCTTCTTACATCGTTGATAGTGTTACAGTGAAGAATGGTTCCATCCATCTTTACTTTGATAA -AGCTGGTCAAAAGACTTATGAAAGACATTCTCTCTCTCATTTTGTTAACTTAGACAACCTGAGAGCTAATAACACTAAAG -GTTCATTGCCTATTAATGTTATAGTTTTTGATGGTAAATCAAAATGTGAAGAATCATCTGCAAAATCAGCGTCTGTTTAC -TACAGTCAGCTTATGTGTCAACCTATACTGTTACTAGATCAGGCATTAGTGTCTGATGTTGGTGATAGTGCGGAAGTTGC -AGTTAAAATGTTTGATGCTTACGTTAATACGTTTTCATCAACTTTTAACGTACCAATGGAAAAACTCAAAACACTAGTTG -CAACTGCAGAAGCTGAACTTGCAAAGAATGTGTCCTTAGACAATGTCTTATCTACTTTTATTTCAGCAGCTCGGCAAGGG -TTTGTTGATTCAGATGTAGAAACTAAAGATGTTGTTGAATGTCTTAAATTGTCACATCAATCTGACATAGAAGTTACTGG -CGATAGTTGTAATAACTATATGCTCACCTATAACAAAGTTGAAAACATGACACCCCGTGACCTTGGTGCTTGTATTGACT -GTAGTGCGCGTCATATTAATGCGCAGGTAGCAAAAAGTCACAACATTGCTTTGATATGGAACGTTAAAGATTTCATGTCA -TTGTCTGAACAACTACGAAAACAAATACGTAGTGCTGCTAAAAAGAATAACTTACCTTTTAAGTTGACATGTGCAACTAC -TAGACAAGTTGTTAATGTTGTAACAACAAAGATAGCACTTAAGGGTGGTAAAATTGTTAATAATTGGTTGAAGCAGTTAA -TTAAAGTTACACTTGTGTTCCTTTTTGTTGCTGCTATTTTCTATTTAATAACACCTGTTCATGTCATGTCTAAACATACT -GACTTTTCAAGTGAAATCATAGGATACAAGGCTATTGATGGTGGTGTCACTCGTGACATAGCATCTACAGATACTTGTTT -TGCTAACAAACATGCTGATTTTGACACATGGTTTAGCCAGCGTGGTGGTAGTTATACTAATGACAAAGCTTGCCCATTGA -TTGCTGCAGTCATAACAAGAGAAGTGGGTTTTGTCGTGCCTGGTTTGCCTGGCACGATATTACGCACAACTAATGGTGAC -TTTTTGCATTTCTTACCTAGAGTTTTTAGTGCAGTTGGTAACATCTGTTACACACCATCAAAACTTATAGAGTACACTGA -CTTTGCAACATCAGCTTGTGTTTTGGCTGCTGAATGTACAATTTTTAAAGATGCTTCTGGTAAGCCAGTACCATATTGTT -ATGATACCAATGTACTAGAAGGTTCTGTTGCTTATGAAAGTTTACGCCCTGACACACGTTATGTGCTCATGGATGGCTCT -ATTATTCAATTTCCTAACACCTACCTTGAAGGTTCTGTTAGAGTGGTAACAACTTTTGATTCTGAGTACTGTAGGCACGG -CACTTGTGAAAGATCAGAAGCTGGTGTTTGTGTATCTACTAGTGGTAGATGGGTACTTAACAATGATTATTACAGATCTT -TACCAGGAGTTTTCTGTGGTGTAGATGCTGTAAATTTACTTACTAATATGTTTACACCACTAATTCAACCTATTGGTGCT -TTGGACATATCAGCATCTATAGTAGCTGGTGGTATTGTAGCTATCGTAGTAACATGCCTTGCCTACTATTTTATGAGGTT -TAGAAGAGCTTTTGGTGAATACAGTCATGTAGTTGCCTTTAATACTTTACTATTCCTTATGTCATTCACTGTACTCTGTT -TAACACCAGTTTACTCATTCTTACCTGGTGTTTATTCTGTTATTTACTTGTACTTGACATTTTATCTTACTAATGATGTT -TCTTTTTTAGCACATATTCAGTGGATGGTTATGTTCACACCTTTAGTACCTTTCTGGATAACAATTGCTTATATCATTTG -TATTTCCACAAAGCATTTCTATTGGTTCTTTAGTAATTACCTAAAGAGACGTGTAGTCTTTAATGGTGTTTCCTTTAGTA -CTTTTGAAGAAGCTGCGCTGTGCACCTTTTTGTTAAATAAAGAAATGTATCTAAAGTTGCGTAGTGATGTGCTATTACCT -CTTACGCAATATAATAGATACTTAGCTCTTTATAATAAGTACAAGTATTTTAGTGGAGCAATGGATACAACTAGCTACAG -AGAAGCTGCTTGTTGTCATCTCGCAAAGGCTCTCAATGACTTCAGTAACTCAGGTTCTGATGTTCTTTACCAACCACCAC -AAACCTCTATCACCTCAGCTGTTTTGCAGAGTGGTTTTAGAAAAATGGCATTCCCATCTGGTAAAGTTGAGGGTTGTATG -GTACAAGTAACTTGTGGTACAACTACACTTAACGGTCTTTGGCTTGATGACGTAGTTTACTGTCCAAGACATGTGATCTG -CACCTCTGAAGACATGCTTAACCCTAATTATGAAGATTTACTCATTCGTAAGTCTAATCATAATTTCTTGGTACAGGCTG -GTAATGTTCAACTCAGGGTTATTGGACATTCTATGCAAAATTGTGTACTTAAGCTTAAGGTTGATACAGCCAATCCTAAG -ACACCTAAGTATAAGTTTGTTCGCATTCAACCAGGACAGACTTTTTCAGTGTTAGCTTGTTACAATGGTTCACCATCTGG -TGTTTACCAATGTGCTATGAGGCCCAATTTCACTATTAAGGGTTCATTCCTTAATGGTTCATGTGGTAGTGTTGGTTTTA -ACATAGATTATGACTGTGTCTCTTTTTGTTACATGCACCATATGGAATTACCAACTGGAGTTCATGCTGGCACAGACTTA -GAAGGTAACTTTTATGGACCTTTTGTTGACAGGCAAACAGCACAAGCAGCTGGTACGGACACAACTATTACAGTTAATGT -TTTAGCTTGGTTGTACGCTGCTGTTATAAATGGAGACAGGTGGTTTCTCAATCGATTTACCACAACTCTTAATGACTTTA -ACCTTGTGGCTATGAAGTACAATTATGAACCTCTAACACAAGACCATGTTGACATACTAGGACCTCTTTCTGCTCAAACT -GGAATTGCCGTTTTAGATATGTGTGCTTCATTAAAAGAATTACTGCAAAATGGTATGAATGGACGTACCATATTGGGTAG -TGCTTTATTAGAAGATGAATTTACACCTTTTGATGTTGTTAGACAATGCTCAGGTGTTACTTTCCAAAGTGCAGTGAAAA -GAACAATCAAGGGTACACACCACTGGTTGTTACTCACAATTTTGACTTCACTTTTAGTTTTAGTCCAGAGTACTCAATGG -TCTTTGTTCTTTTTTTTGTATGAAAATGCCTTTTTACCTTTTGCTATGGGTATTATTGCTATGTCTGCTTTTGCAATGAT -GTTTGTCAAACATAAGCATGCATTTCTCTGTTTGTTTTTGTTACCTTCTCTTGCCACTGTAGCTTATTTTAATATGGTCT -ATATGCCTGCTAGTTGGGTGATGCGTATTATGACATGGTTGGATATGGTTGATACTAGTTTGTCTGGTTTTAAGCTAAAA -GACTGTGTTATGTATGCATCAGCTGTAGTGTTACTAATCCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAG -AGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGT -GGGCTCTTATAATCTCTGTTACTTCTAACTACTCAGGTGTAGTTACAACTGTCATGTTTTTGGCCAGAGGTATTGTTTTT -ATGTGTGTTGAGTATTGCCCTATTTTCTTCATAACTGGTAATACACTTCAGTGTATAATGCTAGTTTATTGTTTCTTAGG -CTATTTTTGTACTTGTTACTTTGGCCTCTTTTGTTTACTCAACCGCTACTTTAGACTGACTCTTGGTGTTTATGATTACT -TAGTTTCTACACAGGAGTTTAGATATATGAATTCACAGGGACTACTCCCACCCAAGAATAGCATAGATGCCTTCAAACTC -AACATTAAATTGTTGGGTGTTGGTGGCAAACCTTGTATCAAAGTAGCCACTGTACAGTCTAAAATGTCAGATGTAAAGTG -CACATCAGTAGTCTTACTCTCAGTTTTGCAACAACTCAGAGTAGAATCATCATCTAAATTGTGGGCTCAATGTGTCCAGT -TACACAATGACATTCTCTTAGCTAAAGATACTACTGAAGCCTTTGAAAAAATGGTTTCACTACTTTCTGTTTTGCTTTCC -ATGCAGGGTGCTGTAGACATAAACAAGCTTTGTGAAGAAATGCTGGACAACAGGGCAACCTTACAAGCTATAGCCTCAGA -GTTTAGTTCCCTTCCATCATATGCAGCTTTTGCTACTGCTCAAGAAGCTTATGAGCAGGCTGTTGCTAATGGTGATTCTG -AAGTTGTTCTTAAAAAGTTGAAGAAGTCTTTGAATGTGGCTAAATCTGAATTTGACCGTGATGCAGCCATGCAACGTAAG -TTGGAAAAGATGGCTGATCAAGCTATGACCCAAATGTATAAACAGGCTAGATCTGAGGACAAGAGGGCAAAAGTTACTAG -TGCTATGCAGACAATGCTTTTCACTATGCTTAGAAAGTTGGATAATGATGCACTCAACAACATTATCAACAATGCAAGAG -ATGGTTGTGTTCCCTTGAACATAATACCTCTTACAACAGCAGCCAAACTAATGGTTGTCATACCAGACTATAACACATAT -AAAAATACGTGTGATGGTACAACATTTACTTATGCATCAGCATTGTGGGAAATCCAACAGGTTGTAGATGCAGATAGTAA -AATTGTTCAACTTAGTGAAATTAGTATGGACAATTCACCTAATTTAGCATGGCCTCTTATTGTAACAGCTTTAAGGGCCA -ATTCTGCTGTCAAATTACAGAATAATGAGCTTAGTCCTGTTGCACTACGACAGATGTCTTGTGCTGCCGGTACTACACAA -ACTGCTTGCACTGATGACAATGCGTTAGCTTACTACAACACAACAAAGGGAGGTAGGTTTGTACTTGCACTGTTATCCGA -TTTACAGGATTTGAAATGGGCTAGATTCCCTAAGAGTGATGGAACTGGTACTATCTATACAGAACTGGAACCACCTTGTA -GGTTTGTTACAGACACACCTAAAGGTCCTAAAGTGAAGTATTTATACTTTATTAAAGGATTAAACAACCTAAATAGAGGT -ATGGTACTTGGTAGTTTAGCTGCCACAGTACGTCTACAAGCTGGTAATGCAACAGAAGTGCCTGCCAATTCAACTGTATT -ATCTTTCTGTGCTTTTGCTGTAGATGCTGCTAAAGCTTACAAAGATTATCTAGCTAGTGGGGGACAACCAATCACTAATT -GTGTTAAGATGTTGTGTACACACACTGGTACTGGTCAGGCAATAACAGTTACACCGGAAGCCAATATGGATCAAGAATCC -TTTGGTGGTGCATCGTGTTGTCTGTACTGCCGTTGCCACATAGATCATCCAAATCCTAAAGGATTTTGTGACTTAAAAGG -TAAGTATGTACAAATACCTACAACTTGTGCTAATGACCCTGTGGGTTTTACACTTAAAAACACAGTCTGTACCGTCTGCG -GTATGTGGAAAGGTTATGGCTGTAGTTGTGATCAACTCCGCGAACCCATGCTTCAGTCAGCTGATGCACAATCGTTTTTA -AACCGGGTTTGCGGTGTAAGTGCAGCCCGTCTTACACCGTGCGGCACAGGCACTAGTACTGATGTCGTATACAGGGCTTT -TGACATCTACAATGATAAAGTAGCTGGTTTTGCTAAATTCCTAAAAACTAATTGTTGTCGCTTCCAAGAAAAGGACGAAG -ATGACAATTTAATTGATTCTTACTTTGTAGTTAAGAGACACACTTTCTCTAACTACCAACATGAAGAAACAATTTATAAT -TTACTTAAGGATTGTCCAGCTGTTGCTAAACATGACTTCTTTAAGTTTAGAATAGACGGTGACATGGTACCACATATATC -ACGTCAACGTCTTACTAAATACACAATGGCAGACCTCGTCTATGCTTTAAGGCATTTTGATGAAGGTAATTGTGACACAT -TAAAAGAAATACTTGTCACATACAATTGTTGTGATGATGATTATTTCAATAAAAAGGACTGGTATGATTTTGTAGAAAAC -CCAGATATATTACGCGTATACGCCAACTTAGGTGAACGTGTACGCCAAGCTTTGTTAAAAACAGTACAATTCTGTGATGC -CATGCGAAATGCTGGTATTGTTGGTGTACTGACATTAGATAATCAAGATCTCAATGGTAACTGGTATGATTTCGGTGATT -TCATACAAACCACGCCAGGTAGTGGAGTTCCTGTTGTAGATTCTTATTATTCATTGTTAATGCCTATATTAACCTTGACC -AGGGCTTTAACTGCAGAGTCACATGTTGACACTGACTTAACAAAGCCTTACATTAAGTGGGATTTGTTAAAATATGACTT -CACGGAAGAGAGGTTAAAACTCTTTGACCGTTATTTTAAATATTGGGATCAGACATACCACCCAAATTGTGTTAACTGTT -TGGATGACAGATGCATTCTGCATTGTGCAAACTTTAATGTTTTATTCTCTACAGTGTTCCCACTTACAAGTTTTGGACCA -CTAGTGAGAAAAATATTTGTTGATGGTGTTCCATTTGTAGTTTCAACTGGATACCACTTCAGAGAGCTAGGTGTTGTACA -TAATCAGGATGTAAACTTACATAGCTCTAGACTTAGTTTTAAGGAATTACTTGTGTATGCTGCTGACCCTGCTATGCACG -CTGCTTCTGGTAATCTATTACTAGATAAACGCACTACGTGCTTTTCAGTAGCTGCACTTACTAACAATGTTGCTTTTCAA -ACTGTCAAACCCGGTAATTTTAACAAAGACTTCTATGACTTTGCTGTGTCTAAGGGTTTCTTTAAGGAAGGAAGTTCTGT -TGAATTAAAACACTTCTTCTTTGCTCAGGATGGTAATGCTGCTATCAGCGATTATGACTACTATCGTTATAATCTACCAA -CAATGTGTGATATCAGACAACTACTATTTGTAGTTGAAGTTGTTGATAAGTACTTTGATTGTTACGATGGTGGCTGTATT -AATGCTAACCAAGTCATCGTCAACAACCTAGACAAATCAGCTGGTTTTCCATTTAATAAATGGGGTAAGGCTAGACTTTA -TTATGATTCAATGAGTTATGAGGATCAAGATGCACTTTTCGCATATACAAAACGTAATGTCATCCCTACTATAACTCAAA -TGAATCTTAAGTATGCCATTAGTGCAAAGAATAGAGCTCGCACCGTAGCTGGTGTCTCTATCTGTAGTACTATGACCAAT -AGACAGTTTCATCAAAAATTATTGAAATCAATAGCCGCCACTAGAGGAGCTACTGTAGTAATTGGAACAAGCAAATTCTA -TGGTGGTTGGCACAACATGTTAAAAACTGTTTATAGTGATGTAGAAAACCCTCACCTTATGGGTTGGGATTATCCTAAAT -GTGATAGAGCCATGCCTAACATGCTTAGAATTATGGCCTCACTTGTTCTTGCTCGCAAACATACAACGTGTTGTAGCTTG -TCACACCGTTTCTATAGATTAGCTAATGAGTGTGCTCAAGTATTGAGTGAAATGGTCATGTGTGGCGGTTCACTATATGT -TAAACCAGGTGGAACCTCATCAGGAGATGCCACAACTGCTTATGCTAATAGTGTTTTTAACATTTGTCAAGCTGTCACGG -CCAATGTTAATGCACTTTTATCTACTGATGGTAACAAAATTGCCGATAAGTATGTCCGCAATTTACAACACAGACTTTAT -GAGTGTCTCTATAGAAATAGAGATGTTGACACAGACTTTGTGAATGAGTTTTACGCATATTTGCGTAAACATTTCTCAAT -GATGATACTCTCTGACGATGCTGTTGTGTGTTTCAATAGCACTTATGCATCTCAAGGTCTAGTGGCTAGCATAAAGAACT -TTAAGTCAGTTCTTTATTATCAAAACAATGTTTTTATGTCTGAAGCAAAATGTTGGACTGAGACTGACCTTACTAAAGGA -CCTCATGAATTTTGCTCTCAACATACAATGCTAGTTAAACAGGGTGATGATTATGTGTACCTTCCTTACCCAGATCCATC -AAGAATCCTAGGGGCCGGCTGTTTTGTAGATGATATCGTAAAAACAGATGGTACACTTATGATTGAACGGTTCGTGTCTT -TAGCTATAGATGCTTACCCACTTACTAAACATCCTAATCAGGAGTATGCTGATGTCTTTCATTTGTACTTACAATACATA -AGAAAGCTACATGATGAGTTAACAGGACACATGTTAGACATGTATTCTGTTATGCTTACTAATGATAACACTTCAAGGTA -TTGGGAACCTGAGTTTTATGAGGCTATGTACACACCGCATACAGTCTTACAGGCTGTTGGGGCTTGTGTTCTTTGCAATT -CACAGACTTCATTAAGATGTGGTGCTTGCATACGTAGACCATTCTTATGTTGTAAATGCTGTTACGACCATGTCATATCA -ACATCACATAAATTAGTCTTGTCTGTTAATCCGTATGTTTGCAATGCTCCAGGTTGTGATGTCACAGATGTGACTCAACT -TTACTTAGGAGGTATGAGCTATTATTGTAAATCACATAAACCACCCATTAGTTTTCCATTGTGTGCTAATGGACAAGTTT -TTGGTTTATATAAAAATACATGTGTTGGTAGCGATAATGTTACTGACTTTAATGCAATTGCAACATGTGACTGGACAAAT -GCTGGTGATTACATTTTAGCTAACACCTGTACTGAAAGACTCAAGCTTTTTGCAGCAGAAACGCTCAAAGCTACTGAGGA -GACATTTAAACTGTCTTATGGTATTGCTACTGTACGTGAAGTGCTGTCTGACAGAGAATTACATCTTTCATGGGAAGTTG -GTAAACCTAGACCACCACTTAACCGAAATTATGTCTTTACTGGTTATCGTGTAACTAAAAACAGTAAAGTACAAATAGGA -GAGTACACCTTTGAAAAAGGTGACTATGGTGATGCTGTTGTTTACCGAGGTACAACAACTTACAAATTAAATGTTGGTGA -TTATTTTGTGCTGACATCACATACAGTAATGCCATTAAGTGCACCTACACTAGTGCCACAAGAGCACTATGTTAGAATTA -CTGGCTTATACCCAACACTCAATATCTCAGATGAGTTTTCTAGCAATGTTGCAAATTATCAAAAGGTTGGTATGCAAAAG -TATTCTACACTCCAGGGACCACCTGGTACTGGTAAGAGTCATTTTGCTATTGGCCTAGCTCTCTACTACCCTTCTGCTCG -CATAGTGTATACAGCTTGCTCTCATGCCGCTGTTGATGCACTATGTGAGAAGGCATTAAAATATTTGCCTATAGATAAAT -GTAGTAGAATTATACCTGCACGTGCTCGTGTAGAGTGTTTTGATAAATTCAAAGTGAATTCAACATTAGAACAGTATGTC -TTTTGTACTGTAAATGCATTGCCTGAGACGACAGCAGATATAGTTGTCTTTGATGAAATTTCAATGGCCACAAATTATGA -TTTGAGTGTTGTCAATGCCAGATTACGTGCTAAGCACTATGTGTACATTGGCGACCCTGCTCAATTACCTGCACCACGCA -CATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAACTATAGGTCCAGACATG -TTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTATGATAATAAGCTTAAAGC -ACATAAAGACAAATCAGCTCAATGCTTTAAAATGTTTTATAAGGGTGTTATCACGCATGATGTTTCATCTGCAATTAACA -GGCCACAAATAGGCGTGGTAAGAGAATTCCTTACACGTAACCCTGCTTGGAGAAAAGCTGTCTTTATTTCACCTTATAAT -TCACAGAATGCTGTAGCCTCAAAGATTTTGGGACTACCAACTCAAACTGTTGATTCATCACAGGGCTCAGAATATGACTA -TGTCATATTCACTCAAACCACTGAAACAGCTCACTCTTGTAATGTAAACAGATTTAATGTTGCTATTACCAGAGCAAAAG -TAGGCATACTTTGCATAATGTCTGATAGAGACCTTTATGACAAGTTGCAATTTACAAGTCTTGAAATTCCACGTAGGAAT -GTGGCAACTTTACAAGCTGAAAATGTAACAGGACTCTTTAAAGATTGTAGTAAGGTAATCACTGGGTTACATCCTACACA -GGCACCTACACACCTCAGTGTTGACACTAAATTCAAAACTGAAGGTTTATGTGTTGACATACCTGGCATACCTAAGGACA -TGACCTATAGAAGACTCATCTCTATGATGGGTTTTAAAATGAATTATCAAGTTAATGGTTACCCTAACATGTTTATCACC -CGCGAAGAAGCTATAAGACATGTACGTGCATGGATTGGCTTCGATGTCGAGGGGTGTCATGCTACTAGAGAAGCTGTTGG -TACCAATTTACCTTTACAGCTAGGTTTTTCTACAGGTGTTAACCTAGTTGCTGTACCTACAGGTTATGTTGATACACCTA -ATAATACAGATTTTTCCAGAGTTAGTGCTAAACCACCGCCTGGAGATCAATTTAAACACCTCATACCACTTATGTACAAA -GGACTTCCTTGGAATGTAGTGCGTATAAAGATTGTACAAATGTTAAGTGACACACTTAAAAATCTCTCTGACAGAGTCGT -ATTTGTCTTATGGGCACATGGCTTTGAGTTGACATCTATGAAGTATTTTGTGAAAATAGGACCTGAGCGCACCTGTTGTC -TATGTGATAGACGTGCCACATGCTTTTCCACTGCTTCAGACACTTATGCCTGTTGGCATCATTCTATTGGATTTGATTAC -GTCTATAATCCGTTTATGATTGATGTTCAACAATGGGGTTTTACAGGTAACCTACAAAGCAACCATGATTTGTATTGTCA -AGTCCATGGTAATGCACATGTAGCTAGTTGTGATGCAATCATGACTAGGTGTCTAGCTGTCCACGAGTGCTTTGTTAAGC -GTGTTGACTGGACTATTGAATATCCTATAATTGGTGATGAACTGAAGATTAATGCGGCTTGTAGAAAGGTTCAACACATG -GTTGTTAAAGCTGCATTATTAGCAGACAAATTCCCAGTTCTTCACGACATTGGTAACCCTAAAGCTATTAAGTGTGTACC -TCAAGCTGATGTAGAATGGAAGTTCTATGATGCACAGCCTTGTAGTGACAAAGCTTATAAAATAGAAGAATTATTCTATT -CTTATGCCACACATTCTGACAAATTCACAGATGGTGTATGCCTATTTTGGAATTGCAATGTCGATAGATATCCTGCTAAT -TCCATTGTTTGTAGATTTGACACTAGAGTGCTATCTAACCTTAACTTGCCTGGTTGTGATGGTGGCAGTTTGTATGTAAA -TAAACATGCATTCCACACACCAGCTTTTGATAAAAGTGCTTTTGTTAATTTAAAACAATTACCATTTTTCTATTACTCTG -ACAGTCCATGTGAGTCTCATGGAAAACAAGTAGTGTCAGATATAGATTATGTACCACTAAAGTCTGCTACGTGTATAACA -CGTTGCAATTTAGGTGGTGCTGTCTGTAGACATCATGCTAATGAGTACAGATTGTATCTCGATGCTTATAACATGATGAT -CTCAGCTGGCTTTAGCTTGTGGGTTTACAAACAATTTGATACTTATAACCTCTGGAACACTTTTACAAGACTTCAGAGTT -TAGAAAATGTGGCTTTTAATGTTGTAAATAAGGGACACTTTGATGGACAACAGGGTGAAGTACCAGTTTCTATCATTAAT -AACACTGTTTACACAAAAGTTGATGGTGTTGATGTAGAATTGTTTGAAAATAAAACAACATTACCTGTTAATGTAGCATT -TGAGCTTTGGGCTAAGCGCAACATTAAACCAGTACCAGAGGTGAAAATACTCAATAATTTGGGTGTGGACATTGCTGCTA -ATACTGTGATCTGGGACTACAAAAGAGATGCTCCAGCACATATATCTACTATTGGTGTTTGTTCTATGACTGACATAGCC -AAGAAACCAACTGAAACGATTTGTGCACCACTCACTGTCTTTTTTGATGGTAGAGTTGATGGTCAAGTAGACTTATTTAG -AAATGCCCGTAATGGTGTTCTTATTACAGAAGGTAGTGTTAAAGGTTTACAACCATCTGTAGGTCCCAAACAAGCTAGTC -TTAATGGAGTCACATTAATTGGAGAAGCCGTAAAAACACAGTTCAATTATTATAAGAAAGTTGATGGTGTTGTCCAACAA -TTACCTGAAACTTACTTTACTCAGAGTAGAAATTTACAAGAATTTAAACCCAGGAGTCAAATGGAAATTGATTTCTTAGA -ATTAGCTATGGATGAATTCATTGAACGGTATAAATTAGAAGGCTATGCCTTCGAACATATCGTTTATGGAGATTTTAGTC -ATAGTCAGTTAGGTGGTTTACATCTACTGATTGGACTAGCTAAACGTTTTAAGGAATCACCTTTTGAATTAGAAGATTTT -ATTCCTATGGACAGTACAGTTAAAAACTATTTCATAACAGATGCGCAAACAGGTTCATCTAAGTGTGTGTGTTCTGTTAT -TGATTTATTACTTGATGATTTTGTTGAAATAATAAAATCCCAAGATTTATCTGTAGTTTCTAAGGTTGTCAAAGTGACTA -TTGACTATACAGAAATTTCATTTATGCTTTGGTGTAAAGATGGCCATGTAGAAACATTTTACCCAAAATTACAATCTAGT -CAAGCGTGGCAACCGGGTGTTGCTATGCCTAATCTTTACAAAATGCAAAGAATGCTATTAGAAAAGTGTGACCTTCAAAA -TTATGGTGATAGTGCAACATTACCTAAAGGCATAATGATGAATGTCGCAAAATATACTCAACTGTGTCAATATTTAAACA -CATTAACATTAGCTGTACCCTATAATATGAGAGTTATACATTTTGGTGCTGGTTCTGATAAAGGAGTTGCACCAGGTACA -GCTGTTTTAAGACAGTGGTTGCCTACGGGTACGCTGCTTGTCGATTCAGATCTTAATGACTTTGTCTCTGATGCAGATTC -AACTTTGATTGGTGATTGTGCAACTGTACATACAGCTAATAAATGGGATCTCATTATTAGTGATATGTACGACCCTAAGA -CTAAAAATGTTACAAAAGAAAATGACTCTAAAGAGGGTTTTTTCACTTACATTTGTGGGTTTATACAACAAAAGCTAGCT -CTTGGAGGTTCCGTGGCTATAAAGATAACAGAACATTCTTGGAATGCTGATCTTTATAAGCTCATGGGACACTTCGCATG -GTGGACAGCCTTTGTTACTAATGTGAATGCGTCATCATCTGAAGCATTTTTAATTGGATGTAATTATCTTGGCAAACCAC -GCGAACAAATAGATGGTTATGTCATGCATGCAAATTACATATTTTGGAGGAATACAAATCCAATTCAGTTGTCTTCCTAT -TCTTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAAAGAAGGTCAAATCAATGA -TATGATTTTATCTCTTCTTAGTAAAGGTAGACTTATAATTAGAGAAAACAACAGAGTTGTTATTTCTAGTGATGTTCTTG -TTAACAACTAA ->lcl|MT192765.1_cds_QIK50427.1_2 [gene=S] [protein=surface glycoprotein] [protein_id=QIK50427.1] [location=21556..25377] [gbkey=CDS] -ATGTTTGTTTTTCTTGTTTTATTGCCACTAGTCTCTAGTCAGTGTGTTAATCTTACAACCAGAACTCAATTACCCCCTGC -ATACACTAATTCTTTCACACGTGGTGTTTATTACCCTGACAAAGTTTTCAGATCCTCAGTTTTACATTCAACTCAGGACT -TGTTCTTACCTTTCTTTTCCAATGTTACTTGGTTCCATGCTATACATGTCTCTGGGACCAATGGTACTAAGAGGTTTGAT -AACCCTGTCCTACCATTTAATGATGGTGTTTATTTTGCTTCCACTGAGAAGTCTAACATAATAAGAGGCTGGATTTTTGG -TACTACTTTAGATTCGAAGACCCAGTCCCTACTTATTGTTAATAACGCTACTAATGTTGTTATTAAAGTCTGTGAATTTC -AATTTTGTAATGATCCATTTTTGGGTGTTTATTACCACAAAAACAACAAAAGTTGGATGGAAAGTGAGTTCAGAGTTTAT -TCTAGTGCGAATAATTGCACTTTTGAATATGTCTCTCAGCCTTTTCTTATGGACCTTGAAGGAAAACAGGGTAATTTCAA -AAATCTTAGGGAATTTGTGTTTAAGAATATTGATGGTTATTTTAAAATATATTCTAAGCACACGCCTATTAATTTAGTGC -GTGATCTCCCTCAGGGTTTTTCGGCTTTAGAACCATTGGTAGATTTGCCAATAGGTATTAACATCACTAGGTTTCAAACT -TTACTTGCTTTACATAGAAGTTATTTGACTCCTGGTGATTCTTCTTCAGGTTGGACAGCTGGTGCTGCAGCTTATTATGT -GGGTTATCTTCAACCTAGGACTTTTCTATTAAAATATAATGAAAATGGAACCATTACAGATGCTGTAGACTGTGCACTTG -ACCCTCTCTCAGAAACAAAGTGTACGTTGAAATCCTTCACTGTAGAAAAAGGAATCTATCAAACTTCTAACTTTAGAGTC -CAACCAACAGAATCTATTGTTAGATTTCCTAATATTACAAACTTGTGCCCTTTTGGTGAAGTTTTTAACGCCACCAGATT -TGCATCTGTTTATGCTTGGAACAGGAAGAGAATCAGCAACTGTGTTGCTGATTATTCTGTCCTATATAATTCCGCATCAT -TTTCCACTTTTAAGTGTTATGGAGTGTCTCCTACTAAATTAAATGATCTCTGCTTTACTAATGTCTATGCAGATTCATTT -GTAATTAGAGGTGATGAAGTCAGACAAATCGCTCCAGGGCAAACTGGAAAGATTGCTGATTATAATTATAAATTACCAGA -TGATTTTACAGGCTGCGTTATAGCTTGGAATTCTAACAATCTTGATTCTAAGGTTGGTGGTAATTATAATTACCTGTATA -GATTGTTTAGGAAGTCTAATCTCAAACCTTTTGAGAGAGATATTTCAACTGAAATCTATCAGGCCGGTAGCACACCTTGT -AATGGTGTTGAAGGTTTTAATTGTTACTTTCCTTTACAATCATATGGTTTCCAACCCACTAATGGTGTTGGTTACCAACC -ATACAGAGTAGTAGTACTTTCTTTTGAACTTCTACATGCACCAGCAACTGTTTGTGGACCTAAAAAGTCTACTAATTTGG -TTAAAAACAAATGTGTCAATTTCAACTTCAATGGTTTAACAGGCACAGGTGTTCTTACTGAGTCTAACAAAAAGTTTCTG -CCTTTCCAACAATTTGGCAGAGACATTGCTGACACTACTGATGCTGTCCGTGATCCACAGACACTTGAGATTCTTGACAT -TACACCATGTTCTTTTGGTGGTGTCAGTGTTATAACACCAGGAACAAATACTTCTAACCAGGTTGCTGTTCTTTATCAGG -GTGTTAACTGCACAGAAGTCCCTGTTGCTATTCATGCAGATCAACTTACTCCTACTTGGCGTGTTTATTCTACAGGTTCT -AATGTTTTTCAAACACGTGCAGGCTGTTTAATAGGGGCTGAACATGTCAACAACTCATATGAGTGTGACATACCCATTGG -TGCAGGTATATGCGCTAGTTATCAGACTCAGACTAATTCTCCTCGGCGGGCACGTAGTGTAGCTAGTCAATCCATCATTG -CCTACACTATGTCACTTGGTGCAGAAAATTCAGTTGCTTACTCTAATAACTCTATTGCCATACCCACAAATTTTACTATT -AGTGTTACCACAGAAATTCTACCAGTGTCTATGACCAAGACATCAGTAGATTGTACAATGTACATTTGTGGTGATTCAAC -TGAATGCAGCAATCTTTTGTTGCAATATGGCAGTTTTTGTACACAATTAAACCGTGCTTTAACTGGAATAGCTGTTGAAC -AAGACAAAAACACCCAAGAAGTTTTTGCACAAGTCAAACAAATTTACAAAACACCACCAATTAAAGATTTTGGTGGTTTT -AATTTTTCACAAATATTACCAGATCCATCAAAACCAAGCAAGAGGTCATTTATTGAAGATCTACTTTTCAACAAAGTGAC -ACTTGCAGATGCTGGCTTCATCAAACAATATGGTGATTGCCTTGGTGATATTGCTGCTAGAGACCTCATTTGTGCACAAA -AGTTTAACGGCCTTACTGTTTTGCCACCTTTGCTCACAGATGAAATGATTGCTCAATACACTTCTGCACTGTTAGCGGGT -ACAATCACTTCTGGTTGGACCTTTGGTGCAGGTGCTGCATTACAAATACCATTTGCTATGCAAATGGCTTATAGGTTTAA -TGGTATTGGAGTTACACAGAATGTTCTCTATGAGAACCAAAAATTGATTGCCAACCAATTTAATAGTGCTATTGGCAAAA -TTCAAGACTCACTTTCTTCCACAGCAAGTGCACTTGGAAAACTTCAAGATGTGGTCAACCAAAATGCACAAGCTTTAAAC -ACGCTTGTTAAACAACTTAGCTCCAATTTTGGTGCAATTTCAAGTGTTTTAAATGATATCCTTTCACGTCTTGACAAAGT -TGAGGCTGAAGTGCAAATTGATAGGTTGATCACAGGCAGACTTCAAAGTTTGCAGACATATGTGACTCAACAATTAATTA -GAGCTGCAGAAATCAGAGCTTCTGCTAATCTTGCTGCTACTAAAATGTCAGAGTGTGTACTTGGACAATCAAAAAGAGTT -GATTTTTGTGGAAAGGGCTATCATCTTATGTCCTTCCCTCAGTCAGCACCTCATGGTGTAGTCTTCTTGCATGTGACTTA -TGTCCCTGCACAAGAAAAGAACTTCACAACTGCTCCTGCCATTTGTCATGATGGAAAAGCACACTTTCCTCGTGAAGGTG -TCTTTGTTTCAAATGGCACACACTGGTTTGTAACACAAAGGAATTTTTATGAACCACAAATCATTACTACAGACAACACA -TTTGTGTCTGGTAACTGTGATGTTGTAATAGGAATTGTCAACAACACAGTTTATGATCCTTTGCAACCTGAATTAGACTC -ATTCAAGGAGGAGTTAGATAAATATTTTAAGAATCATACATCACCAGATGTTGATTTAGGTGACATCTCTGGCATTAATG -CTTCAGTTGTAAACATTCAAAAAGAAATTGACCGCCTCAATGAGGTTGCCAAGAATTTAAATGAATCTCTCATCGATCTC -CAAGAACTTGGAAAGTATGAGCAGTATATAAAATGGCCATGGTACATTTGGCTAGGTTTTATAGCTGGCTTGATTGCCAT -AGTAATGGTGACAATTATGCTTTGCTGTATGACCAGTTGCTGTAGTTGTCTCAAGGGCTGTTGTTCTTGTGGATCCTGCT -GCAAATTTGATGAAGACGACTCTGAGCCAGTGCTCAAAGGAGTCAAATTACATTACACATAA ->lcl|MT192765.1_cds_QIK50428.1_3 [gene=ORF3a] [protein=ORF3a protein] [protein_id=QIK50428.1] [location=25386..26213] [gbkey=CDS] -ATGGATTTGTTTATGAGAATCTTCACAATTGGAACTGTAACTTTGAAGCAAGGTGAAATCAAGGATGCTACTCCTTCAGA -TTTTGTTCGCGCTACTGCAACGATACCGATACAAGCCTCACTCCCTTTCGGATGGCTTATTGTTGGCGTTGCACTTCTTG -CTGTTTTTCAGAGCGCTTCCAAAATCATAACCCTCAAAAAGAGATGGCAACTAGCACTCTCCAAGGGTGTTCACTTTGTT -TGCAACTTGCTGTTGTTGTTTGTAACAGTTTACTCACACCTTTTGCTCGTTGCTGCTGGCCTTGAAGCCCCTTTTCTCTA -TCTTTATGCTTTAGTCTACTTCTTGCAGAGTATAAACTTTGTAAGAATAATAATGAGGCTTTGGCTTTGCTGGAAATGCC -GTTCCAAAAACCCATTACTTTATGATGCCAACTATTTTCTTTGCTGGCATACTAATTGTTACGACTATTGTATACCTTAC -AATAGTGTAACTTCTTCAATTGTCATTACTTCAGGTGATGGCACAACAAGTCCTATTTCTGAACATGACTACCAGATTGG -TGGTTATACTGAAAAATGGGAATCTGGAGTAAAAGACTGTGTTGTATTACACAGTTACTTCACTTCAGACTATTACCAGC -TGTACTCAACTCAATTGAGTACAGACACTGGTGTTGAACATGTTACCTTCTTCATCTACAATAAAATTGTTGATGAGCCT -GAAGAACATGTCCAAATTCACACAATCGACGGTTCATCCGGAGTTGTTAATCCAGTAATGGAACCAATTTATGATGAACC -GACGACGACTACTAGCGTGCCTTTGTAA ->lcl|MT192765.1_cds_QIK50429.1_4 [gene=E] [protein=envelope protein] [protein_id=QIK50429.1] [location=26238..26465] [gbkey=CDS] -ATGTACTCATTCGTTTCGGAAGAGACAGGTACGTTAATAGTTAATAGCGTACTTCTTTTTCTTGCTTTCGTGGTATTCTT -GCTAGTTACACTAGCCATCCTTACTGCGCTTCGATTGTGTGCGTACTGCTGCAATATTGTTAACGTGAGTCTTGTAAAAC -CTTCTTTTTACGTTTACTCTCGTGTTAAAAATCTGAATTCTTCTAGAGTTCCTGATCTTCTGGTCTAA ->lcl|MT192765.1_cds_QIK50430.1_5 [gene=M] [protein=membrane glycoprotein] [protein_id=QIK50430.1] [location=26516..27184] [gbkey=CDS] -ATGGCAGATTCCAACGGTACTATTACCGTTGAAGAGCTTAAAAAGCTCCTTGAACAATGGAACCTAGTAATAGGTTTCCT -ATTCCTTACATGGATTTGTCTTCTACAATTTGCCTATGCCAACAGGAATAGGTTTTTGTATATAATTAAGTTAATTTTCC -TCTGGCTGTTATGGCCAGTAACTTTAGCTTGTTTTGTGCTTGCTGCTGTTTACAGAATAAATTGGATCACCGGTGGAATT -GCTATCGCAATGGCTTGTCTTGTAGGCTTGATGTGGCTCAGCTACTTCATTGCTTCTTTCAGACTGTTTGCGCGTACGCG -TTCCATGTGGTCATTCAATCCAGAAACTAACATTCTTCTCAACGTGCCACTCCATGGCACTATTCTGACCAGACCGCTTC -TAGAAAGTGAACTCGTAATCGGAGCTGTGATCCTTCGTGGACATCTTCGTATTGCTGGACACCATCTAGGACGCTGTGAC -ATCAAGGACCTGCCTAAAGAAATCACTGTTGCTACATCACGAACGCTTTCTTATTACAAATTGGGAGCTTCGCAGCGTGT -AGCAGGTGACTCAGGTTTTGCTGCATACAGTCGCTACAGGATTGGCAACTATAAATTAAACACAGACCATTCCAGTAGCA -GTGACAATATTGCTTTGCTTGTACAGTAA ->lcl|MT192765.1_cds_QIK50431.1_6 [gene=ORF6] [protein=ORF6 protein] [protein_id=QIK50431.1] [location=27195..27380] [gbkey=CDS] -ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAGTTTCCATTTG -GAATCTTGATTACATCATAAACCTCATAATTAAAAATTTATCTAAGTCACTAACTGAGAATAAATATTCTCAATTAGATG -AAGAGCAACCAATGGAGATTGATTAA ->lcl|MT192765.1_cds_QIK50432.1_7 [gene=ORF7a] [protein=ORF7a protein] [protein_id=QIK50432.1] [location=27387..27752] [gbkey=CDS] -ATGAAAATTATTCTTTTCTTGGCACTGATAACACTCGCTACTTGTGAGCTTTATCACTACCAAGAGTGTGTTAGAGGTAC -AACAGTACTTTTAAAAGAACCTTGCTCTTCTGGAACATACGAGGGCAATTCACCATTTCATCCTCTAGCTGATAACAAAT -TTGCACTGACTTGCTTTAGCACTCAATTTGCTTTTGCTTGTCCTGACGGCGTAAAACACGTCTATCAGTTACGTGCCAGA -TCAGTTTCACCTAAACTGTTCATCAGACAAGAGGAAGTTCAAGAACTTTACTCTCCAATTTTTCTTATTGTTGCGGCAAT -AGTGTTTATAACACTTTGCTTCACACTCAAAAGAAAGACAGAATGA ->lcl|MT192765.1_cds_QIK50433.1_8 [gene=ORF7b] [protein=ORF7b protein] [protein_id=QIK50433.1] [location=27749..27880] [gbkey=CDS] -ATGATTGAACTTTCATTAATTGACTTCTATTTGTGCTTTTTAGCCTTTCTGCTATTCCTTGTTTTAATTATGCTTATTAT -CTTTTGGTTCTCACTTGAACTGCAAGATCATAATGAAACTTGTCACGCCTAA ->lcl|MT192765.1_cds_QIK50434.1_9 [gene=ORF8] [protein=ORF8 protein] [protein_id=QIK50434.1] [location=27887..28252] [gbkey=CDS] -ATGAAATTTCTTGTTTTCTTAGGAATCATCACAACTGTAGCTGCATTTCACCAAGAATGTAGTTTACAGTCATGTACTCA -ACATCAACCATATGTAGTTGATGACCCGTGTCCTATTCACTTCTATTCTAAATGGTATATTAGAGTAGGAGCTAGAAAAT -CAGCACCTTTAATTGAATTGTGCGTGGATGAGGCTGGTTCTAAATCACCCATTCAGTACATCGATATCGGTAATTATACA -GTTTCCTGTTTACCTTTTACAATTAATTGCCAGGAACCTAAATTGGGTAGTCTTGTAGTGCGTTGTTCGTTCTATGAAGA -CTTTTTAGAGTATCATGACGTTCGTGTTGTTTTAGATTTCATCTAA ->lcl|MT192765.1_cds_QIK50435.1_10 [gene=N] [protein=nucleocapsid phosphoprotein] [protein_id=QIK50435.1] [location=28267..29526] [gbkey=CDS] -ATGTCTGATAATGGACCCCAAAATCAGCGAAATGCACCCCGCATTACGTTTGGTGGACCCTCAGATTCAACTGGCAGTAA -CCAGAATGGAGAACGCAGTGGGGCGCGATCAAAACAACGTCGGCCCCAAGGTTTACCCAATAATACTGCGTCTTGGTTCA -CCGCTCTCACTCAACATGGCAAGGAAGACCTTAAATTCCCTCGAGGACAAGGCGTTCCAATTAACACCAATAGCAGTCCA -GATGACCAAATTGGCTACTACCGAAGAGCTACCAGACGAATTCGTGGTGGTGACGGTAAAATGAAAGATCTCAGTCCAAG -ATGGTATTTCTACTACCTAGGAACTGGGCCAGAAGCTGGACTTCCCTATGGTGCTAACAAAGACGGCATCATATGGGTTG -CAACTGAGGGAGCCTTGAATACACCAAAAGATCACATTGGCACCCGCAATCCTGCTAACAATGCTGCAATCGTGCTACAA -CTTCCTCAAGGAACAACATTGCCAAAAGGCTTCTACGCAGAAGGGAGCAGAGGCGGCAGTCAAGCCTCTTCTCGTTCCTC -ATCACGTAGTCGCAACAGTTCAAGAAATTCAACTCCAGGCAGCAGTAGGGGAACTTCTCCTGCTAGAATGGCTGGCAATG -GCGGTGATGCTGCTCTTGCTTTGCTGCTGCTTGACAGATTGAACCAGCTTGAGAGCAAAATGTCTGGTAAAGGCCAACAA -CAACAAGGCCAAACTGTCACTAAGAAATCTGCTGCTGAGGCTTCTAAGAAGCCTCGGCAAAAACGTACTGCCACTAAAGC -ATACAATGTAACACAAGCTTTCGGCAGACGTGGTCCAGAACAAACCCAAGGAAATTTTGGGGACCAGGAACTAATCAGAC -AAGGAACTGATTACAAACATTGGCCGCAAATTGCACAATTTGCCCCCAGCGCTTCAGCGTTCTTCGGAATGTCGCGCATT -GGCATGGAAGTCACACCTTCGGGAACGTGGTTGACCTACACAGGTGCCATCAAATTGGATGACAAAGATCCAAATTTCAA -AGATCAAGTCATTTTGCTGAATAAGCATATTGACGCATACAAAACATTCCCACCAACAGAGCCTAAAAAGGACAAAAAGA -AGAAGGCTGATGAAACTCAAGCCTTACCGCAGAGACAGAAGAAACAGCAAACTGTGACTCTTCTTCCTGCTGCAGATTTG -GATGATTTCTCCAAACAATTGCAACAATCCATGAGCAGTGCTGACTCAACTCAGGCCTAA ->lcl|MT192765.1_cds_QIK50436.1_11 [gene=ORF10] [protein=ORF10 protein] [protein_id=QIK50436.1] [location=29551..29667] [gbkey=CDS] -ATGGGCTATATAAACGTTTTCGCTTTTCCGTTTACGATATATAGTCTACTCTTGTGCAGAATGAATTCTCGTAACTACAT -AGCACAAGTAGATGTAGTTAACTTTAATCTCACATAG diff --git a/tests/data/genomics/sarscov2/genome/transcriptome.paf b/tests/data/genomics/sarscov2/genome/transcriptome.paf deleted file mode 100644 index ead0b0d9..00000000 --- a/tests/data/genomics/sarscov2/genome/transcriptome.paf +++ /dev/null @@ -1,11 +0,0 @@ -lcl|MT192765.1_cds_QIK50426.1_1 21291 1 21289 + lcl|MT192765.1_cds_QIK50426.1_1 21291 1 21289 21288 21288 60 tp:A:P cm:i:3984 s1:i:21288 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50427.1_2 3822 8 3821 + lcl|MT192765.1_cds_QIK50427.1_2 3822 8 3821 3813 3813 60 tp:A:P cm:i:722 s1:i:3813 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50428.1_3 828 4 819 + lcl|MT192765.1_cds_QIK50428.1_3 828 4 819 815 815 60 tp:A:P cm:i:148 s1:i:815 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50429.1_4 228 6 226 + lcl|MT192765.1_cds_QIK50429.1_4 228 6 226 220 220 60 tp:A:P cm:i:42 s1:i:220 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50430.1_5 669 6 663 + lcl|MT192765.1_cds_QIK50430.1_5 669 6 663 657 657 60 tp:A:P cm:i:115 s1:i:657 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50431.1_6 186 0 185 + lcl|MT192765.1_cds_QIK50431.1_6 186 0 185 185 185 60 tp:A:P cm:i:33 s1:i:185 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50432.1_7 366 1 358 + lcl|MT192765.1_cds_QIK50432.1_7 366 1 358 357 357 60 tp:A:P cm:i:64 s1:i:357 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50433.1_8 132 6 124 + lcl|MT192765.1_cds_QIK50433.1_8 132 6 124 118 118 60 tp:A:P cm:i:20 s1:i:118 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50434.1_9 366 6 357 + lcl|MT192765.1_cds_QIK50434.1_9 366 6 357 351 351 60 tp:A:P cm:i:68 s1:i:351 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50435.1_10 1260 4 1255 + lcl|MT192765.1_cds_QIK50435.1_10 1260 4 1255 1251 1251 60 tp:A:P cm:i:231 s1:i:1251 s2:i:0 dv:f:0 rl:i:0 -lcl|MT192765.1_cds_QIK50436.1_11 117 0 116 + lcl|MT192765.1_cds_QIK50436.1_11 117 0 116 116 116 60 tp:A:P cm:i:19 s1:i:116 s2:i:0 dv:f:0 rl:i:0 diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.bam b/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.bam deleted file mode 100644 index c07b88dd..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam b/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam deleted file mode 100644 index 9a6f9aa9..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam.bai b/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam.bai deleted file mode 100644 index 74b4d069..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_methylated_paired_end.sorted.bam.bai and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.bam b/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.bam deleted file mode 100644 index 2afb6618..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam b/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam deleted file mode 100644 index 85cccf14..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai b/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai deleted file mode 100644 index 0c6d5a96..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.bam b/tests/data/genomics/sarscov2/illumina/bam/test_single_end.bam deleted file mode 100644 index 71818067..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam b/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam deleted file mode 100644 index 4a2a37b5..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam.bai b/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam.bai deleted file mode 100644 index 4c62eab5..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_single_end.sorted.bam.bai and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/bam/test_unaligned.bam b/tests/data/genomics/sarscov2/illumina/bam/test_unaligned.bam deleted file mode 100644 index e1dbf733..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/bam/test_unaligned.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz deleted file mode 100644 index 18978cb2..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test2_1.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz deleted file mode 100644 index 645cba87..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test2_2.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz deleted file mode 100644 index b4bdd21c..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz deleted file mode 100644 index 5eb2dc85..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_1.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_1.fastq.gz deleted file mode 100644 index ff8416e1..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_1.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_2.fastq.gz b/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_2.fastq.gz deleted file mode 100644 index 0eba8145..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_2.fastq.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/gatk/test.baserecalibrator.table b/tests/data/genomics/sarscov2/illumina/gatk/test.baserecalibrator.table deleted file mode 100644 index fd94701d..00000000 --- a/tests/data/genomics/sarscov2/illumina/gatk/test.baserecalibrator.table +++ /dev/null @@ -1,1522 +0,0 @@ -#:GATKReport.v1.1:5 -#:GATKTable:2:17:%s:%s:; -#:GATKTable:Arguments:Recalibration argument collection values used in this run -Argument Value -binary_tag_name null -covariate ReadGroupCovariate,QualityScoreCovariate,ContextCovariate,CycleCovariate -default_platform null -deletions_default_quality 45 -force_platform null -indels_context_size 3 -insertions_default_quality 45 -low_quality_tail 2 -maximum_cycle_value 500 -mismatches_context_size 2 -mismatches_default_quality -1 -no_standard_covs false -quantizing_levels 16 -recalibration_report null -run_without_dbsnp false -solid_nocall_strategy THROW_EXCEPTION -solid_recal_mode SET_Q_ZERO - -#:GATKTable:3:94:%d:%d:%d:; -#:GATKTable:Quantized:Quality quantization map -QualityScore Count QuantizedScore - 0 0 93 - 1 0 93 - 2 0 93 - 3 0 93 - 4 0 93 - 5 0 93 - 6 0 93 - 7 0 93 - 8 0 93 - 9 0 93 - 10 0 93 - 11 0 93 - 12 0 93 - 13 0 93 - 14 1858 14 - 15 0 93 - 16 0 93 - 17 0 93 - 18 0 93 - 19 0 93 - 20 0 93 - 21 283 21 - 22 0 93 - 23 0 93 - 24 0 93 - 25 0 93 - 26 0 93 - 27 1056 27 - 28 0 93 - 29 0 93 - 30 0 93 - 31 0 93 - 32 4530 32 - 33 0 93 - 34 0 93 - 35 0 93 - 36 19579 36 - 37 0 93 - 38 0 93 - 39 0 93 - 40 0 93 - 41 0 93 - 42 0 93 - 43 0 93 - 44 0 93 - 45 0 93 - 46 0 93 - 47 0 93 - 48 0 93 - 49 0 93 - 50 0 93 - 51 0 93 - 52 0 93 - 53 0 93 - 54 0 93 - 55 0 93 - 56 0 93 - 57 0 93 - 58 0 93 - 59 0 93 - 60 0 93 - 61 0 93 - 62 0 93 - 63 0 93 - 64 0 93 - 65 0 93 - 66 0 93 - 67 0 93 - 68 0 93 - 69 0 93 - 70 0 93 - 71 0 93 - 72 0 93 - 73 0 93 - 74 0 93 - 75 0 93 - 76 0 93 - 77 0 93 - 78 0 93 - 79 0 93 - 80 0 93 - 81 0 93 - 82 0 93 - 83 0 93 - 84 0 93 - 85 0 93 - 86 0 93 - 87 0 93 - 88 0 93 - 89 0 89 - 90 0 90 - 91 0 91 - 92 0 92 - 93 0 93 - -#:GATKTable:6:1:%s:%s:%.4f:%.4f:%d:%.2f:; -#:GATKTable:RecalTable0: -ReadGroup EventType EmpiricalQuality EstimatedQReported Observations Errors -barcode1 M 25.0000 25.0126 27306 83.00 - -#:GATKTable:6:5:%s:%d:%s:%.4f:%d:%.2f:; -#:GATKTable:RecalTable1: -ReadGroup QualityScore EventType EmpiricalQuality Observations Errors -barcode1 14 M 14.0000 1858 78.00 -barcode1 21 M 21.0000 283 1.00 -barcode1 27 M 27.0000 1056 0.00 -barcode1 32 M 32.0000 4530 3.00 -barcode1 36 M 36.0000 19579 1.00 - -#:GATKTable:8:1384:%s:%d:%s:%s:%s:%.4f:%d:%.2f:; -#:GATKTable:RecalTable2: -ReadGroup QualityScore CovariateValue CovariateName EventType EmpiricalQuality Observations Errors -barcode1 14 -10 Cycle M 14.0000 4 1.00 -barcode1 14 -100 Cycle M 14.0000 12 0.00 -barcode1 14 -101 Cycle M 14.0000 9 0.00 -barcode1 14 -102 Cycle M 14.0000 7 0.00 -barcode1 14 -103 Cycle M 14.0000 6 0.00 -barcode1 14 -104 Cycle M 14.0000 6 1.00 -barcode1 14 -105 Cycle M 14.0000 7 0.00 -barcode1 14 -106 Cycle M 14.0000 4 0.00 -barcode1 14 -107 Cycle M 14.0000 3 0.00 -barcode1 14 -108 Cycle M 14.0000 10 1.00 -barcode1 14 -109 Cycle M 14.0000 5 0.00 -barcode1 14 -11 Cycle M 14.0000 1 0.00 -barcode1 14 -110 Cycle M 14.0000 12 1.00 -barcode1 14 -111 Cycle M 14.0000 8 0.00 -barcode1 14 -112 Cycle M 14.0000 11 1.00 -barcode1 14 -113 Cycle M 14.0000 9 0.00 -barcode1 14 -114 Cycle M 14.0000 11 0.00 -barcode1 14 -115 Cycle M 14.0000 8 0.00 -barcode1 14 -116 Cycle M 14.0000 9 0.00 -barcode1 14 -117 Cycle M 14.0000 9 0.00 -barcode1 14 -118 Cycle M 14.0000 4 0.00 -barcode1 14 -119 Cycle M 14.0000 9 1.00 -barcode1 14 -12 Cycle M 14.0000 7 0.00 -barcode1 14 -120 Cycle M 14.0000 7 0.00 -barcode1 14 -121 Cycle M 14.0000 9 0.00 -barcode1 14 -122 Cycle M 14.0000 12 0.00 -barcode1 14 -123 Cycle M 14.0000 5 0.00 -barcode1 14 -124 Cycle M 14.0000 5 0.00 -barcode1 14 -125 Cycle M 14.0000 9 0.00 -barcode1 14 -126 Cycle M 14.0000 4 0.00 -barcode1 14 -127 Cycle M 14.0000 4 0.00 -barcode1 14 -128 Cycle M 14.0000 6 0.00 -barcode1 14 -129 Cycle M 14.0000 6 0.00 -barcode1 14 -13 Cycle M 14.0000 3 0.00 -barcode1 14 -130 Cycle M 14.0000 2 0.00 -barcode1 14 -131 Cycle M 14.0000 10 0.00 -barcode1 14 -132 Cycle M 14.0000 9 0.00 -barcode1 14 -133 Cycle M 14.0000 5 0.00 -barcode1 14 -134 Cycle M 14.0000 6 0.00 -barcode1 14 -135 Cycle M 14.0000 8 0.00 -barcode1 14 -136 Cycle M 14.0000 7 0.00 -barcode1 14 -137 Cycle M 14.0000 2 0.00 -barcode1 14 -138 Cycle M 14.0000 8 0.00 -barcode1 14 -139 Cycle M 14.0000 4 0.00 -barcode1 14 -14 Cycle M 14.0000 1 0.00 -barcode1 14 -140 Cycle M 14.0000 8 1.00 -barcode1 14 -141 Cycle M 14.0000 4 0.00 -barcode1 14 -142 Cycle M 14.0000 8 0.00 -barcode1 14 -143 Cycle M 14.0000 8 0.00 -barcode1 14 -144 Cycle M 14.0000 6 0.00 -barcode1 14 -145 Cycle M 14.0000 8 1.00 -barcode1 14 -146 Cycle M 14.0000 3 0.00 -barcode1 14 -147 Cycle M 14.0000 3 0.00 -barcode1 14 -148 Cycle M 14.0000 7 0.00 -barcode1 14 -149 Cycle M 14.0000 13 2.00 -barcode1 14 -15 Cycle M 14.0000 5 0.00 -barcode1 14 -150 Cycle M 14.0000 3 0.00 -barcode1 14 -16 Cycle M 14.0000 4 0.00 -barcode1 14 -17 Cycle M 14.0000 4 0.00 -barcode1 14 -18 Cycle M 14.0000 3 0.00 -barcode1 14 -19 Cycle M 14.0000 7 0.00 -barcode1 14 -2 Cycle M 14.0000 4 0.00 -barcode1 14 -20 Cycle M 14.0000 3 0.00 -barcode1 14 -21 Cycle M 14.0000 4 0.00 -barcode1 14 -22 Cycle M 14.0000 3 0.00 -barcode1 14 -23 Cycle M 14.0000 3 0.00 -barcode1 14 -24 Cycle M 14.0000 7 1.00 -barcode1 14 -25 Cycle M 14.0000 6 0.00 -barcode1 14 -26 Cycle M 14.0000 5 0.00 -barcode1 14 -27 Cycle M 14.0000 2 0.00 -barcode1 14 -28 Cycle M 14.0000 6 0.00 -barcode1 14 -29 Cycle M 14.0000 3 0.00 -barcode1 14 -3 Cycle M 14.0000 4 0.00 -barcode1 14 -30 Cycle M 14.0000 4 0.00 -barcode1 14 -31 Cycle M 14.0000 5 0.00 -barcode1 14 -32 Cycle M 14.0000 6 0.00 -barcode1 14 -33 Cycle M 14.0000 6 1.00 -barcode1 14 -34 Cycle M 14.0000 5 0.00 -barcode1 14 -35 Cycle M 14.0000 4 0.00 -barcode1 14 -36 Cycle M 14.0000 6 1.00 -barcode1 14 -37 Cycle M 14.0000 7 0.00 -barcode1 14 -38 Cycle M 14.0000 3 0.00 -barcode1 14 -39 Cycle M 14.0000 4 0.00 -barcode1 14 -4 Cycle M 14.0000 6 0.00 -barcode1 14 -40 Cycle M 14.0000 4 0.00 -barcode1 14 -41 Cycle M 14.0000 7 0.00 -barcode1 14 -42 Cycle M 14.0000 4 0.00 -barcode1 14 -43 Cycle M 14.0000 9 0.00 -barcode1 14 -44 Cycle M 14.0000 4 0.00 -barcode1 14 -45 Cycle M 14.0000 5 1.00 -barcode1 14 -46 Cycle M 14.0000 8 1.00 -barcode1 14 -47 Cycle M 14.0000 4 0.00 -barcode1 14 -48 Cycle M 14.0000 5 0.00 -barcode1 14 -49 Cycle M 14.0000 6 0.00 -barcode1 14 -5 Cycle M 14.0000 2 0.00 -barcode1 14 -50 Cycle M 14.0000 4 0.00 -barcode1 14 -51 Cycle M 14.0000 5 0.00 -barcode1 14 -52 Cycle M 14.0000 7 1.00 -barcode1 14 -53 Cycle M 14.0000 8 0.00 -barcode1 14 -54 Cycle M 14.0000 2 0.00 -barcode1 14 -55 Cycle M 14.0000 3 0.00 -barcode1 14 -56 Cycle M 14.0000 7 0.00 -barcode1 14 -57 Cycle M 14.0000 6 0.00 -barcode1 14 -58 Cycle M 14.0000 5 0.00 -barcode1 14 -59 Cycle M 14.0000 6 0.00 -barcode1 14 -6 Cycle M 14.0000 3 0.00 -barcode1 14 -60 Cycle M 14.0000 8 0.00 -barcode1 14 -61 Cycle M 14.0000 6 0.00 -barcode1 14 -62 Cycle M 14.0000 7 0.00 -barcode1 14 -63 Cycle M 14.0000 4 1.00 -barcode1 14 -64 Cycle M 14.0000 7 1.00 -barcode1 14 -65 Cycle M 14.0000 13 0.00 -barcode1 14 -66 Cycle M 14.0000 5 0.00 -barcode1 14 -67 Cycle M 14.0000 5 0.00 -barcode1 14 -68 Cycle M 14.0000 6 1.00 -barcode1 14 -69 Cycle M 14.0000 7 0.00 -barcode1 14 -7 Cycle M 14.0000 4 0.00 -barcode1 14 -70 Cycle M 14.0000 6 0.00 -barcode1 14 -71 Cycle M 14.0000 9 0.00 -barcode1 14 -72 Cycle M 14.0000 12 1.00 -barcode1 14 -73 Cycle M 14.0000 6 1.00 -barcode1 14 -74 Cycle M 14.0000 7 0.00 -barcode1 14 -75 Cycle M 14.0000 2 0.00 -barcode1 14 -76 Cycle M 14.0000 6 2.00 -barcode1 14 -77 Cycle M 14.0000 7 0.00 -barcode1 14 -78 Cycle M 14.0000 8 0.00 -barcode1 14 -79 Cycle M 14.0000 7 1.00 -barcode1 14 -8 Cycle M 14.0000 2 0.00 -barcode1 14 -80 Cycle M 14.0000 6 0.00 -barcode1 14 -81 Cycle M 14.0000 4 0.00 -barcode1 14 -82 Cycle M 14.0000 6 0.00 -barcode1 14 -83 Cycle M 14.0000 5 0.00 -barcode1 14 -84 Cycle M 14.0000 6 0.00 -barcode1 14 -85 Cycle M 14.0000 9 0.00 -barcode1 14 -86 Cycle M 14.0000 5 0.00 -barcode1 14 -87 Cycle M 14.0000 7 0.00 -barcode1 14 -88 Cycle M 14.0000 10 2.00 -barcode1 14 -89 Cycle M 14.0000 9 0.00 -barcode1 14 -9 Cycle M 14.0000 3 0.00 -barcode1 14 -90 Cycle M 14.0000 7 0.00 -barcode1 14 -91 Cycle M 14.0000 3 0.00 -barcode1 14 -92 Cycle M 14.0000 7 0.00 -barcode1 14 -93 Cycle M 14.0000 8 0.00 -barcode1 14 -94 Cycle M 14.0000 5 0.00 -barcode1 14 -95 Cycle M 14.0000 4 0.00 -barcode1 14 -96 Cycle M 14.0000 6 0.00 -barcode1 14 -97 Cycle M 14.0000 3 0.00 -barcode1 14 -98 Cycle M 14.0000 6 1.00 -barcode1 14 -99 Cycle M 14.0000 7 0.00 -barcode1 14 10 Cycle M 14.0000 5 0.00 -barcode1 14 100 Cycle M 14.0000 9 0.00 -barcode1 14 101 Cycle M 14.0000 10 0.00 -barcode1 14 102 Cycle M 14.0000 8 0.00 -barcode1 14 103 Cycle M 14.0000 8 1.00 -barcode1 14 104 Cycle M 14.0000 5 0.00 -barcode1 14 105 Cycle M 14.0000 5 1.00 -barcode1 14 106 Cycle M 14.0000 9 0.00 -barcode1 14 107 Cycle M 14.0000 5 0.00 -barcode1 14 108 Cycle M 14.0000 9 1.00 -barcode1 14 109 Cycle M 14.0000 6 0.00 -barcode1 14 11 Cycle M 14.0000 5 1.00 -barcode1 14 110 Cycle M 14.0000 7 0.00 -barcode1 14 111 Cycle M 14.0000 6 0.00 -barcode1 14 112 Cycle M 14.0000 10 0.00 -barcode1 14 113 Cycle M 14.0000 8 0.00 -barcode1 14 114 Cycle M 14.0000 7 1.00 -barcode1 14 115 Cycle M 14.0000 6 0.00 -barcode1 14 116 Cycle M 14.0000 4 0.00 -barcode1 14 117 Cycle M 14.0000 11 0.00 -barcode1 14 118 Cycle M 14.0000 5 0.00 -barcode1 14 119 Cycle M 14.0000 10 0.00 -barcode1 14 12 Cycle M 14.0000 4 0.00 -barcode1 14 120 Cycle M 14.0000 3 0.00 -barcode1 14 121 Cycle M 14.0000 11 0.00 -barcode1 14 122 Cycle M 14.0000 5 0.00 -barcode1 14 123 Cycle M 14.0000 5 1.00 -barcode1 14 124 Cycle M 14.0000 5 1.00 -barcode1 14 125 Cycle M 14.0000 8 0.00 -barcode1 14 126 Cycle M 14.0000 11 0.00 -barcode1 14 127 Cycle M 14.0000 8 1.00 -barcode1 14 128 Cycle M 14.0000 9 2.00 -barcode1 14 129 Cycle M 14.0000 7 0.00 -barcode1 14 13 Cycle M 14.0000 5 0.00 -barcode1 14 130 Cycle M 14.0000 8 0.00 -barcode1 14 131 Cycle M 14.0000 4 0.00 -barcode1 14 132 Cycle M 14.0000 7 0.00 -barcode1 14 133 Cycle M 14.0000 8 0.00 -barcode1 14 134 Cycle M 14.0000 6 0.00 -barcode1 14 135 Cycle M 14.0000 5 0.00 -barcode1 14 136 Cycle M 14.0000 7 0.00 -barcode1 14 137 Cycle M 14.0000 9 3.00 -barcode1 14 138 Cycle M 14.0000 5 0.00 -barcode1 14 139 Cycle M 14.0000 15 0.00 -barcode1 14 14 Cycle M 14.0000 7 1.00 -barcode1 14 140 Cycle M 14.0000 7 1.00 -barcode1 14 141 Cycle M 14.0000 8 0.00 -barcode1 14 142 Cycle M 14.0000 7 0.00 -barcode1 14 143 Cycle M 14.0000 13 3.00 -barcode1 14 144 Cycle M 14.0000 10 1.00 -barcode1 14 145 Cycle M 14.0000 4 0.00 -barcode1 14 146 Cycle M 14.0000 6 0.00 -barcode1 14 147 Cycle M 14.0000 7 0.00 -barcode1 14 148 Cycle M 14.0000 3 0.00 -barcode1 14 149 Cycle M 14.0000 4 0.00 -barcode1 14 15 Cycle M 14.0000 2 0.00 -barcode1 14 150 Cycle M 14.0000 1 1.00 -barcode1 14 16 Cycle M 14.0000 6 0.00 -barcode1 14 17 Cycle M 14.0000 6 0.00 -barcode1 14 18 Cycle M 14.0000 3 0.00 -barcode1 14 19 Cycle M 14.0000 9 0.00 -barcode1 14 2 Cycle M 14.0000 3 0.00 -barcode1 14 20 Cycle M 14.0000 7 1.00 -barcode1 14 21 Cycle M 14.0000 2 0.00 -barcode1 14 22 Cycle M 14.0000 4 0.00 -barcode1 14 23 Cycle M 14.0000 5 0.00 -barcode1 14 24 Cycle M 14.0000 6 0.00 -barcode1 14 25 Cycle M 14.0000 7 0.00 -barcode1 14 26 Cycle M 14.0000 5 0.00 -barcode1 14 27 Cycle M 14.0000 6 1.00 -barcode1 14 28 Cycle M 14.0000 7 1.00 -barcode1 14 29 Cycle M 14.0000 5 0.00 -barcode1 14 3 Cycle M 14.0000 3 0.00 -barcode1 14 30 Cycle M 14.0000 4 0.00 -barcode1 14 31 Cycle M 14.0000 6 0.00 -barcode1 14 32 Cycle M 14.0000 3 0.00 -barcode1 14 33 Cycle M 14.0000 6 1.00 -barcode1 14 34 Cycle M 14.0000 2 0.00 -barcode1 14 35 Cycle M 14.0000 6 0.00 -barcode1 14 36 Cycle M 14.0000 5 0.00 -barcode1 14 37 Cycle M 14.0000 5 1.00 -barcode1 14 38 Cycle M 14.0000 3 0.00 -barcode1 14 39 Cycle M 14.0000 5 0.00 -barcode1 14 4 Cycle M 14.0000 4 0.00 -barcode1 14 40 Cycle M 14.0000 4 1.00 -barcode1 14 41 Cycle M 14.0000 4 0.00 -barcode1 14 42 Cycle M 14.0000 6 0.00 -barcode1 14 43 Cycle M 14.0000 10 1.00 -barcode1 14 44 Cycle M 14.0000 6 0.00 -barcode1 14 45 Cycle M 14.0000 5 0.00 -barcode1 14 46 Cycle M 14.0000 3 0.00 -barcode1 14 47 Cycle M 14.0000 9 1.00 -barcode1 14 48 Cycle M 14.0000 7 1.00 -barcode1 14 49 Cycle M 14.0000 10 1.00 -barcode1 14 5 Cycle M 14.0000 4 0.00 -barcode1 14 50 Cycle M 14.0000 7 1.00 -barcode1 14 51 Cycle M 14.0000 3 0.00 -barcode1 14 52 Cycle M 14.0000 7 0.00 -barcode1 14 53 Cycle M 14.0000 5 1.00 -barcode1 14 54 Cycle M 14.0000 7 1.00 -barcode1 14 55 Cycle M 14.0000 5 0.00 -barcode1 14 56 Cycle M 14.0000 9 0.00 -barcode1 14 57 Cycle M 14.0000 7 0.00 -barcode1 14 58 Cycle M 14.0000 7 1.00 -barcode1 14 59 Cycle M 14.0000 6 0.00 -barcode1 14 6 Cycle M 14.0000 6 0.00 -barcode1 14 60 Cycle M 14.0000 5 0.00 -barcode1 14 61 Cycle M 14.0000 6 1.00 -barcode1 14 62 Cycle M 14.0000 11 1.00 -barcode1 14 63 Cycle M 14.0000 4 0.00 -barcode1 14 64 Cycle M 14.0000 13 1.00 -barcode1 14 65 Cycle M 14.0000 9 1.00 -barcode1 14 66 Cycle M 14.0000 11 0.00 -barcode1 14 67 Cycle M 14.0000 7 0.00 -barcode1 14 68 Cycle M 14.0000 5 0.00 -barcode1 14 69 Cycle M 14.0000 7 1.00 -barcode1 14 7 Cycle M 14.0000 7 0.00 -barcode1 14 70 Cycle M 14.0000 8 1.00 -barcode1 14 71 Cycle M 14.0000 8 0.00 -barcode1 14 72 Cycle M 14.0000 5 1.00 -barcode1 14 73 Cycle M 14.0000 8 1.00 -barcode1 14 74 Cycle M 14.0000 7 1.00 -barcode1 14 75 Cycle M 14.0000 7 1.00 -barcode1 14 76 Cycle M 14.0000 7 0.00 -barcode1 14 77 Cycle M 14.0000 10 0.00 -barcode1 14 78 Cycle M 14.0000 9 1.00 -barcode1 14 79 Cycle M 14.0000 8 0.00 -barcode1 14 8 Cycle M 14.0000 2 0.00 -barcode1 14 80 Cycle M 14.0000 7 1.00 -barcode1 14 81 Cycle M 14.0000 11 0.00 -barcode1 14 82 Cycle M 14.0000 9 1.00 -barcode1 14 83 Cycle M 14.0000 11 0.00 -barcode1 14 84 Cycle M 14.0000 5 1.00 -barcode1 14 85 Cycle M 14.0000 11 0.00 -barcode1 14 86 Cycle M 14.0000 9 0.00 -barcode1 14 87 Cycle M 14.0000 10 1.00 -barcode1 14 88 Cycle M 14.0000 6 1.00 -barcode1 14 89 Cycle M 14.0000 5 0.00 -barcode1 14 9 Cycle M 14.0000 4 0.00 -barcode1 14 90 Cycle M 14.0000 5 0.00 -barcode1 14 91 Cycle M 14.0000 4 0.00 -barcode1 14 92 Cycle M 14.0000 4 0.00 -barcode1 14 93 Cycle M 14.0000 7 0.00 -barcode1 14 94 Cycle M 14.0000 3 0.00 -barcode1 14 95 Cycle M 14.0000 7 0.00 -barcode1 14 96 Cycle M 14.0000 4 0.00 -barcode1 14 97 Cycle M 14.0000 4 0.00 -barcode1 14 98 Cycle M 14.0000 11 0.00 -barcode1 14 99 Cycle M 14.0000 8 1.00 -barcode1 14 AA Context M 14.0000 219 9.00 -barcode1 14 AC Context M 14.0000 73 0.00 -barcode1 14 AG Context M 14.0000 103 0.00 -barcode1 14 AT Context M 14.0000 129 8.00 -barcode1 14 CA Context M 14.0000 189 9.00 -barcode1 14 CC Context M 14.0000 72 9.00 -barcode1 14 CG Context M 14.0000 46 6.00 -barcode1 14 CT Context M 14.0000 110 2.00 -barcode1 14 GA Context M 14.0000 141 7.00 -barcode1 14 GC Context M 14.0000 57 1.00 -barcode1 14 GG Context M 14.0000 72 4.00 -barcode1 14 GT Context M 14.0000 119 3.00 -barcode1 14 TA Context M 14.0000 156 12.00 -barcode1 14 TC Context M 14.0000 93 3.00 -barcode1 14 TG Context M 14.0000 143 1.00 -barcode1 14 TT Context M 14.0000 136 4.00 -barcode1 21 -10 Cycle M 21.0000 1 0.00 -barcode1 21 -105 Cycle M 21.0000 1 0.00 -barcode1 21 -107 Cycle M 21.0000 1 0.00 -barcode1 21 -108 Cycle M 21.0000 1 0.00 -barcode1 21 -11 Cycle M 21.0000 3 0.00 -barcode1 21 -112 Cycle M 21.0000 1 0.00 -barcode1 21 -113 Cycle M 21.0000 1 0.00 -barcode1 21 -114 Cycle M 21.0000 4 0.00 -barcode1 21 -115 Cycle M 21.0000 1 0.00 -barcode1 21 -116 Cycle M 21.0000 1 0.00 -barcode1 21 -117 Cycle M 21.0000 1 0.00 -barcode1 21 -118 Cycle M 21.0000 2 0.00 -barcode1 21 -119 Cycle M 21.0000 1 0.00 -barcode1 21 -12 Cycle M 21.0000 2 0.00 -barcode1 21 -120 Cycle M 21.0000 1 0.00 -barcode1 21 -121 Cycle M 21.0000 1 0.00 -barcode1 21 -122 Cycle M 21.0000 1 0.00 -barcode1 21 -123 Cycle M 21.0000 2 0.00 -barcode1 21 -124 Cycle M 21.0000 2 0.00 -barcode1 21 -125 Cycle M 21.0000 1 0.00 -barcode1 21 -126 Cycle M 21.0000 3 0.00 -barcode1 21 -127 Cycle M 21.0000 1 0.00 -barcode1 21 -129 Cycle M 21.0000 3 0.00 -barcode1 21 -13 Cycle M 21.0000 2 0.00 -barcode1 21 -130 Cycle M 21.0000 4 0.00 -barcode1 21 -132 Cycle M 21.0000 3 0.00 -barcode1 21 -134 Cycle M 21.0000 4 0.00 -barcode1 21 -135 Cycle M 21.0000 1 0.00 -barcode1 21 -137 Cycle M 21.0000 4 0.00 -barcode1 21 -139 Cycle M 21.0000 1 0.00 -barcode1 21 -14 Cycle M 21.0000 1 0.00 -barcode1 21 -140 Cycle M 21.0000 3 0.00 -barcode1 21 -141 Cycle M 21.0000 3 0.00 -barcode1 21 -142 Cycle M 21.0000 1 0.00 -barcode1 21 -143 Cycle M 21.0000 3 0.00 -barcode1 21 -144 Cycle M 21.0000 1 0.00 -barcode1 21 -145 Cycle M 21.0000 1 0.00 -barcode1 21 -146 Cycle M 21.0000 3 0.00 -barcode1 21 -147 Cycle M 21.0000 1 0.00 -barcode1 21 -148 Cycle M 21.0000 1 0.00 -barcode1 21 -149 Cycle M 21.0000 1 0.00 -barcode1 21 -15 Cycle M 21.0000 2 0.00 -barcode1 21 -16 Cycle M 21.0000 1 0.00 -barcode1 21 -17 Cycle M 21.0000 2 0.00 -barcode1 21 -20 Cycle M 21.0000 2 0.00 -barcode1 21 -22 Cycle M 21.0000 3 1.00 -barcode1 21 -25 Cycle M 21.0000 1 0.00 -barcode1 21 -26 Cycle M 21.0000 1 0.00 -barcode1 21 -27 Cycle M 21.0000 2 0.00 -barcode1 21 -29 Cycle M 21.0000 5 0.00 -barcode1 21 -3 Cycle M 21.0000 3 0.00 -barcode1 21 -30 Cycle M 21.0000 1 0.00 -barcode1 21 -32 Cycle M 21.0000 1 0.00 -barcode1 21 -35 Cycle M 21.0000 1 0.00 -barcode1 21 -36 Cycle M 21.0000 1 0.00 -barcode1 21 -38 Cycle M 21.0000 3 0.00 -barcode1 21 -39 Cycle M 21.0000 2 0.00 -barcode1 21 -40 Cycle M 21.0000 1 0.00 -barcode1 21 -41 Cycle M 21.0000 1 0.00 -barcode1 21 -43 Cycle M 21.0000 1 0.00 -barcode1 21 -47 Cycle M 21.0000 1 0.00 -barcode1 21 -48 Cycle M 21.0000 1 0.00 -barcode1 21 -5 Cycle M 21.0000 2 0.00 -barcode1 21 -50 Cycle M 21.0000 2 0.00 -barcode1 21 -51 Cycle M 21.0000 1 0.00 -barcode1 21 -54 Cycle M 21.0000 1 0.00 -barcode1 21 -56 Cycle M 21.0000 1 0.00 -barcode1 21 -58 Cycle M 21.0000 2 0.00 -barcode1 21 -59 Cycle M 21.0000 1 0.00 -barcode1 21 -6 Cycle M 21.0000 4 0.00 -barcode1 21 -66 Cycle M 21.0000 1 0.00 -barcode1 21 -69 Cycle M 21.0000 1 0.00 -barcode1 21 -71 Cycle M 21.0000 2 0.00 -barcode1 21 -73 Cycle M 21.0000 1 0.00 -barcode1 21 -74 Cycle M 21.0000 1 0.00 -barcode1 21 -75 Cycle M 21.0000 1 0.00 -barcode1 21 -77 Cycle M 21.0000 1 0.00 -barcode1 21 -8 Cycle M 21.0000 4 0.00 -barcode1 21 -80 Cycle M 21.0000 2 0.00 -barcode1 21 -81 Cycle M 21.0000 1 0.00 -barcode1 21 -83 Cycle M 21.0000 1 0.00 -barcode1 21 -84 Cycle M 21.0000 1 0.00 -barcode1 21 -85 Cycle M 21.0000 1 0.00 -barcode1 21 -91 Cycle M 21.0000 1 0.00 -barcode1 21 -98 Cycle M 21.0000 2 0.00 -barcode1 21 -99 Cycle M 21.0000 1 0.00 -barcode1 21 10 Cycle M 21.0000 2 0.00 -barcode1 21 103 Cycle M 21.0000 1 0.00 -barcode1 21 107 Cycle M 21.0000 1 0.00 -barcode1 21 111 Cycle M 21.0000 1 0.00 -barcode1 21 112 Cycle M 21.0000 3 0.00 -barcode1 21 113 Cycle M 21.0000 2 0.00 -barcode1 21 114 Cycle M 21.0000 2 0.00 -barcode1 21 116 Cycle M 21.0000 3 0.00 -barcode1 21 117 Cycle M 21.0000 1 0.00 -barcode1 21 118 Cycle M 21.0000 1 0.00 -barcode1 21 119 Cycle M 21.0000 1 0.00 -barcode1 21 12 Cycle M 21.0000 1 0.00 -barcode1 21 120 Cycle M 21.0000 1 0.00 -barcode1 21 122 Cycle M 21.0000 2 0.00 -barcode1 21 124 Cycle M 21.0000 4 0.00 -barcode1 21 126 Cycle M 21.0000 2 0.00 -barcode1 21 127 Cycle M 21.0000 5 0.00 -barcode1 21 128 Cycle M 21.0000 2 0.00 -barcode1 21 13 Cycle M 21.0000 3 0.00 -barcode1 21 130 Cycle M 21.0000 2 0.00 -barcode1 21 131 Cycle M 21.0000 1 0.00 -barcode1 21 132 Cycle M 21.0000 2 0.00 -barcode1 21 133 Cycle M 21.0000 1 0.00 -barcode1 21 134 Cycle M 21.0000 3 0.00 -barcode1 21 135 Cycle M 21.0000 2 0.00 -barcode1 21 136 Cycle M 21.0000 1 0.00 -barcode1 21 137 Cycle M 21.0000 1 0.00 -barcode1 21 138 Cycle M 21.0000 1 0.00 -barcode1 21 14 Cycle M 21.0000 1 0.00 -barcode1 21 140 Cycle M 21.0000 1 0.00 -barcode1 21 141 Cycle M 21.0000 4 0.00 -barcode1 21 142 Cycle M 21.0000 1 0.00 -barcode1 21 145 Cycle M 21.0000 1 0.00 -barcode1 21 146 Cycle M 21.0000 3 0.00 -barcode1 21 147 Cycle M 21.0000 2 0.00 -barcode1 21 16 Cycle M 21.0000 2 0.00 -barcode1 21 17 Cycle M 21.0000 1 0.00 -barcode1 21 2 Cycle M 21.0000 1 0.00 -barcode1 21 20 Cycle M 21.0000 3 0.00 -barcode1 21 24 Cycle M 21.0000 3 0.00 -barcode1 21 26 Cycle M 21.0000 1 0.00 -barcode1 21 29 Cycle M 21.0000 1 0.00 -barcode1 21 31 Cycle M 21.0000 4 0.00 -barcode1 21 33 Cycle M 21.0000 3 0.00 -barcode1 21 36 Cycle M 21.0000 1 0.00 -barcode1 21 37 Cycle M 21.0000 2 0.00 -barcode1 21 38 Cycle M 21.0000 1 0.00 -barcode1 21 39 Cycle M 21.0000 1 0.00 -barcode1 21 4 Cycle M 21.0000 1 0.00 -barcode1 21 40 Cycle M 21.0000 3 0.00 -barcode1 21 41 Cycle M 21.0000 2 0.00 -barcode1 21 42 Cycle M 21.0000 1 0.00 -barcode1 21 43 Cycle M 21.0000 2 0.00 -barcode1 21 44 Cycle M 21.0000 1 0.00 -barcode1 21 45 Cycle M 21.0000 1 0.00 -barcode1 21 46 Cycle M 21.0000 1 0.00 -barcode1 21 47 Cycle M 21.0000 2 0.00 -barcode1 21 5 Cycle M 21.0000 3 0.00 -barcode1 21 52 Cycle M 21.0000 1 0.00 -barcode1 21 54 Cycle M 21.0000 2 0.00 -barcode1 21 57 Cycle M 21.0000 1 0.00 -barcode1 21 58 Cycle M 21.0000 3 0.00 -barcode1 21 6 Cycle M 21.0000 1 0.00 -barcode1 21 60 Cycle M 21.0000 1 0.00 -barcode1 21 65 Cycle M 21.0000 1 0.00 -barcode1 21 66 Cycle M 21.0000 1 0.00 -barcode1 21 69 Cycle M 21.0000 2 0.00 -barcode1 21 7 Cycle M 21.0000 2 0.00 -barcode1 21 70 Cycle M 21.0000 3 0.00 -barcode1 21 72 Cycle M 21.0000 1 0.00 -barcode1 21 73 Cycle M 21.0000 1 0.00 -barcode1 21 76 Cycle M 21.0000 1 0.00 -barcode1 21 8 Cycle M 21.0000 2 0.00 -barcode1 21 84 Cycle M 21.0000 1 0.00 -barcode1 21 85 Cycle M 21.0000 1 0.00 -barcode1 21 87 Cycle M 21.0000 1 0.00 -barcode1 21 88 Cycle M 21.0000 1 0.00 -barcode1 21 89 Cycle M 21.0000 2 0.00 -barcode1 21 90 Cycle M 21.0000 1 0.00 -barcode1 21 91 Cycle M 21.0000 1 0.00 -barcode1 21 AA Context M 21.0000 39 0.00 -barcode1 21 AC Context M 21.0000 15 0.00 -barcode1 21 AG Context M 21.0000 20 1.00 -barcode1 21 AT Context M 21.0000 17 0.00 -barcode1 21 CA Context M 21.0000 24 0.00 -barcode1 21 CC Context M 21.0000 9 0.00 -barcode1 21 CG Context M 21.0000 2 0.00 -barcode1 21 CT Context M 21.0000 12 0.00 -barcode1 21 GA Context M 21.0000 18 0.00 -barcode1 21 GC Context M 21.0000 19 0.00 -barcode1 21 GG Context M 21.0000 8 0.00 -barcode1 21 GT Context M 21.0000 12 0.00 -barcode1 21 TA Context M 21.0000 8 0.00 -barcode1 21 TC Context M 21.0000 18 0.00 -barcode1 21 TG Context M 21.0000 23 0.00 -barcode1 21 TT Context M 21.0000 39 0.00 -barcode1 27 -100 Cycle M 27.0000 4 0.00 -barcode1 27 -101 Cycle M 27.0000 7 0.00 -barcode1 27 -102 Cycle M 27.0000 6 0.00 -barcode1 27 -103 Cycle M 27.0000 4 0.00 -barcode1 27 -104 Cycle M 27.0000 4 0.00 -barcode1 27 -105 Cycle M 27.0000 6 0.00 -barcode1 27 -106 Cycle M 27.0000 9 0.00 -barcode1 27 -107 Cycle M 27.0000 3 0.00 -barcode1 27 -108 Cycle M 27.0000 2 0.00 -barcode1 27 -109 Cycle M 27.0000 5 0.00 -barcode1 27 -110 Cycle M 27.0000 8 0.00 -barcode1 27 -111 Cycle M 27.0000 7 0.00 -barcode1 27 -112 Cycle M 27.0000 7 0.00 -barcode1 27 -113 Cycle M 27.0000 8 0.00 -barcode1 27 -114 Cycle M 27.0000 5 0.00 -barcode1 27 -115 Cycle M 27.0000 11 0.00 -barcode1 27 -116 Cycle M 27.0000 6 0.00 -barcode1 27 -117 Cycle M 27.0000 8 0.00 -barcode1 27 -118 Cycle M 27.0000 8 0.00 -barcode1 27 -119 Cycle M 27.0000 5 0.00 -barcode1 27 -120 Cycle M 27.0000 6 0.00 -barcode1 27 -121 Cycle M 27.0000 8 0.00 -barcode1 27 -122 Cycle M 27.0000 7 0.00 -barcode1 27 -123 Cycle M 27.0000 12 0.00 -barcode1 27 -124 Cycle M 27.0000 15 0.00 -barcode1 27 -125 Cycle M 27.0000 8 0.00 -barcode1 27 -126 Cycle M 27.0000 4 0.00 -barcode1 27 -127 Cycle M 27.0000 6 0.00 -barcode1 27 -128 Cycle M 27.0000 10 0.00 -barcode1 27 -129 Cycle M 27.0000 8 0.00 -barcode1 27 -13 Cycle M 27.0000 1 0.00 -barcode1 27 -130 Cycle M 27.0000 10 0.00 -barcode1 27 -131 Cycle M 27.0000 8 0.00 -barcode1 27 -132 Cycle M 27.0000 9 0.00 -barcode1 27 -133 Cycle M 27.0000 9 0.00 -barcode1 27 -134 Cycle M 27.0000 3 0.00 -barcode1 27 -135 Cycle M 27.0000 9 0.00 -barcode1 27 -136 Cycle M 27.0000 2 0.00 -barcode1 27 -137 Cycle M 27.0000 7 0.00 -barcode1 27 -138 Cycle M 27.0000 11 0.00 -barcode1 27 -139 Cycle M 27.0000 7 0.00 -barcode1 27 -14 Cycle M 27.0000 1 0.00 -barcode1 27 -140 Cycle M 27.0000 8 0.00 -barcode1 27 -141 Cycle M 27.0000 6 0.00 -barcode1 27 -142 Cycle M 27.0000 9 0.00 -barcode1 27 -143 Cycle M 27.0000 9 0.00 -barcode1 27 -144 Cycle M 27.0000 5 0.00 -barcode1 27 -145 Cycle M 27.0000 5 0.00 -barcode1 27 -146 Cycle M 27.0000 7 0.00 -barcode1 27 -147 Cycle M 27.0000 8 0.00 -barcode1 27 -148 Cycle M 27.0000 9 0.00 -barcode1 27 -149 Cycle M 27.0000 1 0.00 -barcode1 27 -18 Cycle M 27.0000 1 0.00 -barcode1 27 -20 Cycle M 27.0000 1 0.00 -barcode1 27 -26 Cycle M 27.0000 1 0.00 -barcode1 27 -27 Cycle M 27.0000 1 0.00 -barcode1 27 -28 Cycle M 27.0000 1 0.00 -barcode1 27 -30 Cycle M 27.0000 1 0.00 -barcode1 27 -32 Cycle M 27.0000 2 0.00 -barcode1 27 -33 Cycle M 27.0000 3 0.00 -barcode1 27 -34 Cycle M 27.0000 2 0.00 -barcode1 27 -35 Cycle M 27.0000 3 0.00 -barcode1 27 -39 Cycle M 27.0000 1 0.00 -barcode1 27 -40 Cycle M 27.0000 1 0.00 -barcode1 27 -41 Cycle M 27.0000 2 0.00 -barcode1 27 -44 Cycle M 27.0000 2 0.00 -barcode1 27 -46 Cycle M 27.0000 2 0.00 -barcode1 27 -47 Cycle M 27.0000 2 0.00 -barcode1 27 -48 Cycle M 27.0000 1 0.00 -barcode1 27 -49 Cycle M 27.0000 1 0.00 -barcode1 27 -50 Cycle M 27.0000 2 0.00 -barcode1 27 -51 Cycle M 27.0000 4 0.00 -barcode1 27 -52 Cycle M 27.0000 4 0.00 -barcode1 27 -53 Cycle M 27.0000 2 0.00 -barcode1 27 -54 Cycle M 27.0000 1 0.00 -barcode1 27 -55 Cycle M 27.0000 3 0.00 -barcode1 27 -56 Cycle M 27.0000 2 0.00 -barcode1 27 -57 Cycle M 27.0000 2 0.00 -barcode1 27 -58 Cycle M 27.0000 1 0.00 -barcode1 27 -59 Cycle M 27.0000 1 0.00 -barcode1 27 -60 Cycle M 27.0000 7 0.00 -barcode1 27 -61 Cycle M 27.0000 1 0.00 -barcode1 27 -62 Cycle M 27.0000 5 0.00 -barcode1 27 -63 Cycle M 27.0000 3 0.00 -barcode1 27 -64 Cycle M 27.0000 1 0.00 -barcode1 27 -65 Cycle M 27.0000 5 0.00 -barcode1 27 -66 Cycle M 27.0000 6 0.00 -barcode1 27 -67 Cycle M 27.0000 3 0.00 -barcode1 27 -68 Cycle M 27.0000 2 0.00 -barcode1 27 -69 Cycle M 27.0000 4 0.00 -barcode1 27 -70 Cycle M 27.0000 2 0.00 -barcode1 27 -71 Cycle M 27.0000 4 0.00 -barcode1 27 -72 Cycle M 27.0000 2 0.00 -barcode1 27 -73 Cycle M 27.0000 2 0.00 -barcode1 27 -74 Cycle M 27.0000 4 0.00 -barcode1 27 -75 Cycle M 27.0000 2 0.00 -barcode1 27 -76 Cycle M 27.0000 1 0.00 -barcode1 27 -77 Cycle M 27.0000 5 0.00 -barcode1 27 -78 Cycle M 27.0000 5 0.00 -barcode1 27 -80 Cycle M 27.0000 3 0.00 -barcode1 27 -81 Cycle M 27.0000 1 0.00 -barcode1 27 -82 Cycle M 27.0000 1 0.00 -barcode1 27 -83 Cycle M 27.0000 5 0.00 -barcode1 27 -84 Cycle M 27.0000 3 0.00 -barcode1 27 -85 Cycle M 27.0000 3 0.00 -barcode1 27 -86 Cycle M 27.0000 4 0.00 -barcode1 27 -87 Cycle M 27.0000 5 0.00 -barcode1 27 -88 Cycle M 27.0000 6 0.00 -barcode1 27 -89 Cycle M 27.0000 2 0.00 -barcode1 27 -9 Cycle M 27.0000 1 0.00 -barcode1 27 -90 Cycle M 27.0000 3 0.00 -barcode1 27 -91 Cycle M 27.0000 6 0.00 -barcode1 27 -92 Cycle M 27.0000 5 0.00 -barcode1 27 -93 Cycle M 27.0000 7 0.00 -barcode1 27 -94 Cycle M 27.0000 5 0.00 -barcode1 27 -95 Cycle M 27.0000 6 0.00 -barcode1 27 -96 Cycle M 27.0000 6 0.00 -barcode1 27 -97 Cycle M 27.0000 6 0.00 -barcode1 27 -98 Cycle M 27.0000 3 0.00 -barcode1 27 -99 Cycle M 27.0000 7 0.00 -barcode1 27 10 Cycle M 27.0000 1 0.00 -barcode1 27 100 Cycle M 27.0000 3 0.00 -barcode1 27 101 Cycle M 27.0000 6 0.00 -barcode1 27 102 Cycle M 27.0000 3 0.00 -barcode1 27 103 Cycle M 27.0000 4 0.00 -barcode1 27 104 Cycle M 27.0000 7 0.00 -barcode1 27 105 Cycle M 27.0000 8 0.00 -barcode1 27 106 Cycle M 27.0000 6 0.00 -barcode1 27 107 Cycle M 27.0000 5 0.00 -barcode1 27 108 Cycle M 27.0000 5 0.00 -barcode1 27 109 Cycle M 27.0000 12 0.00 -barcode1 27 110 Cycle M 27.0000 9 0.00 -barcode1 27 111 Cycle M 27.0000 7 0.00 -barcode1 27 112 Cycle M 27.0000 1 0.00 -barcode1 27 113 Cycle M 27.0000 8 0.00 -barcode1 27 114 Cycle M 27.0000 9 0.00 -barcode1 27 115 Cycle M 27.0000 14 0.00 -barcode1 27 116 Cycle M 27.0000 8 0.00 -barcode1 27 117 Cycle M 27.0000 3 0.00 -barcode1 27 118 Cycle M 27.0000 11 0.00 -barcode1 27 119 Cycle M 27.0000 8 0.00 -barcode1 27 12 Cycle M 27.0000 1 0.00 -barcode1 27 120 Cycle M 27.0000 4 0.00 -barcode1 27 121 Cycle M 27.0000 7 0.00 -barcode1 27 122 Cycle M 27.0000 6 0.00 -barcode1 27 123 Cycle M 27.0000 6 0.00 -barcode1 27 124 Cycle M 27.0000 5 0.00 -barcode1 27 125 Cycle M 27.0000 4 0.00 -barcode1 27 126 Cycle M 27.0000 5 0.00 -barcode1 27 127 Cycle M 27.0000 7 0.00 -barcode1 27 128 Cycle M 27.0000 8 0.00 -barcode1 27 129 Cycle M 27.0000 6 0.00 -barcode1 27 130 Cycle M 27.0000 4 0.00 -barcode1 27 131 Cycle M 27.0000 6 0.00 -barcode1 27 132 Cycle M 27.0000 5 0.00 -barcode1 27 133 Cycle M 27.0000 4 0.00 -barcode1 27 134 Cycle M 27.0000 6 0.00 -barcode1 27 135 Cycle M 27.0000 9 0.00 -barcode1 27 136 Cycle M 27.0000 11 0.00 -barcode1 27 137 Cycle M 27.0000 4 0.00 -barcode1 27 138 Cycle M 27.0000 11 0.00 -barcode1 27 139 Cycle M 27.0000 6 0.00 -barcode1 27 140 Cycle M 27.0000 3 0.00 -barcode1 27 141 Cycle M 27.0000 6 0.00 -barcode1 27 142 Cycle M 27.0000 7 0.00 -barcode1 27 143 Cycle M 27.0000 8 0.00 -barcode1 27 144 Cycle M 27.0000 13 0.00 -barcode1 27 145 Cycle M 27.0000 1 0.00 -barcode1 27 146 Cycle M 27.0000 7 0.00 -barcode1 27 147 Cycle M 27.0000 4 0.00 -barcode1 27 148 Cycle M 27.0000 8 0.00 -barcode1 27 149 Cycle M 27.0000 3 0.00 -barcode1 27 17 Cycle M 27.0000 1 0.00 -barcode1 27 19 Cycle M 27.0000 3 0.00 -barcode1 27 20 Cycle M 27.0000 1 0.00 -barcode1 27 26 Cycle M 27.0000 1 0.00 -barcode1 27 27 Cycle M 27.0000 2 0.00 -barcode1 27 30 Cycle M 27.0000 2 0.00 -barcode1 27 31 Cycle M 27.0000 2 0.00 -barcode1 27 32 Cycle M 27.0000 2 0.00 -barcode1 27 34 Cycle M 27.0000 1 0.00 -barcode1 27 36 Cycle M 27.0000 1 0.00 -barcode1 27 37 Cycle M 27.0000 2 0.00 -barcode1 27 38 Cycle M 27.0000 1 0.00 -barcode1 27 39 Cycle M 27.0000 2 0.00 -barcode1 27 43 Cycle M 27.0000 1 0.00 -barcode1 27 44 Cycle M 27.0000 2 0.00 -barcode1 27 45 Cycle M 27.0000 2 0.00 -barcode1 27 46 Cycle M 27.0000 2 0.00 -barcode1 27 47 Cycle M 27.0000 2 0.00 -barcode1 27 48 Cycle M 27.0000 1 0.00 -barcode1 27 49 Cycle M 27.0000 3 0.00 -barcode1 27 50 Cycle M 27.0000 2 0.00 -barcode1 27 51 Cycle M 27.0000 2 0.00 -barcode1 27 53 Cycle M 27.0000 3 0.00 -barcode1 27 54 Cycle M 27.0000 7 0.00 -barcode1 27 55 Cycle M 27.0000 5 0.00 -barcode1 27 56 Cycle M 27.0000 2 0.00 -barcode1 27 57 Cycle M 27.0000 2 0.00 -barcode1 27 58 Cycle M 27.0000 3 0.00 -barcode1 27 59 Cycle M 27.0000 2 0.00 -barcode1 27 60 Cycle M 27.0000 6 0.00 -barcode1 27 61 Cycle M 27.0000 5 0.00 -barcode1 27 62 Cycle M 27.0000 2 0.00 -barcode1 27 63 Cycle M 27.0000 2 0.00 -barcode1 27 64 Cycle M 27.0000 3 0.00 -barcode1 27 65 Cycle M 27.0000 3 0.00 -barcode1 27 66 Cycle M 27.0000 2 0.00 -barcode1 27 67 Cycle M 27.0000 1 0.00 -barcode1 27 68 Cycle M 27.0000 4 0.00 -barcode1 27 69 Cycle M 27.0000 5 0.00 -barcode1 27 70 Cycle M 27.0000 4 0.00 -barcode1 27 71 Cycle M 27.0000 4 0.00 -barcode1 27 72 Cycle M 27.0000 1 0.00 -barcode1 27 73 Cycle M 27.0000 3 0.00 -barcode1 27 74 Cycle M 27.0000 2 0.00 -barcode1 27 75 Cycle M 27.0000 2 0.00 -barcode1 27 76 Cycle M 27.0000 5 0.00 -barcode1 27 77 Cycle M 27.0000 2 0.00 -barcode1 27 78 Cycle M 27.0000 2 0.00 -barcode1 27 79 Cycle M 27.0000 2 0.00 -barcode1 27 8 Cycle M 27.0000 1 0.00 -barcode1 27 80 Cycle M 27.0000 1 0.00 -barcode1 27 81 Cycle M 27.0000 1 0.00 -barcode1 27 82 Cycle M 27.0000 1 0.00 -barcode1 27 83 Cycle M 27.0000 2 0.00 -barcode1 27 84 Cycle M 27.0000 3 0.00 -barcode1 27 85 Cycle M 27.0000 2 0.00 -barcode1 27 87 Cycle M 27.0000 4 0.00 -barcode1 27 88 Cycle M 27.0000 3 0.00 -barcode1 27 90 Cycle M 27.0000 4 0.00 -barcode1 27 91 Cycle M 27.0000 4 0.00 -barcode1 27 92 Cycle M 27.0000 7 0.00 -barcode1 27 93 Cycle M 27.0000 5 0.00 -barcode1 27 94 Cycle M 27.0000 2 0.00 -barcode1 27 95 Cycle M 27.0000 4 0.00 -barcode1 27 96 Cycle M 27.0000 4 0.00 -barcode1 27 97 Cycle M 27.0000 4 0.00 -barcode1 27 98 Cycle M 27.0000 4 0.00 -barcode1 27 99 Cycle M 27.0000 2 0.00 -barcode1 27 AA Context M 27.0000 50 0.00 -barcode1 27 AC Context M 27.0000 77 0.00 -barcode1 27 AG Context M 27.0000 36 0.00 -barcode1 27 AT Context M 27.0000 89 0.00 -barcode1 27 CA Context M 27.0000 87 0.00 -barcode1 27 CC Context M 27.0000 47 0.00 -barcode1 27 CG Context M 27.0000 19 0.00 -barcode1 27 CT Context M 27.0000 74 0.00 -barcode1 27 GA Context M 27.0000 49 0.00 -barcode1 27 GC Context M 27.0000 69 0.00 -barcode1 27 GG Context M 27.0000 29 0.00 -barcode1 27 GT Context M 27.0000 87 0.00 -barcode1 27 TA Context M 27.0000 77 0.00 -barcode1 27 TC Context M 27.0000 58 0.00 -barcode1 27 TG Context M 27.0000 80 0.00 -barcode1 27 TT Context M 27.0000 128 0.00 -barcode1 32 -1 Cycle M 32.0000 96 0.00 -barcode1 32 -10 Cycle M 32.0000 3 0.00 -barcode1 32 -100 Cycle M 32.0000 15 0.00 -barcode1 32 -101 Cycle M 32.0000 11 0.00 -barcode1 32 -102 Cycle M 32.0000 15 0.00 -barcode1 32 -103 Cycle M 32.0000 14 0.00 -barcode1 32 -104 Cycle M 32.0000 21 0.00 -barcode1 32 -105 Cycle M 32.0000 19 0.00 -barcode1 32 -106 Cycle M 32.0000 19 0.00 -barcode1 32 -107 Cycle M 32.0000 17 0.00 -barcode1 32 -108 Cycle M 32.0000 13 0.00 -barcode1 32 -109 Cycle M 32.0000 19 0.00 -barcode1 32 -11 Cycle M 32.0000 4 0.00 -barcode1 32 -110 Cycle M 32.0000 16 0.00 -barcode1 32 -111 Cycle M 32.0000 14 0.00 -barcode1 32 -112 Cycle M 32.0000 22 0.00 -barcode1 32 -113 Cycle M 32.0000 18 0.00 -barcode1 32 -114 Cycle M 32.0000 13 0.00 -barcode1 32 -115 Cycle M 32.0000 19 0.00 -barcode1 32 -116 Cycle M 32.0000 18 0.00 -barcode1 32 -117 Cycle M 32.0000 25 0.00 -barcode1 32 -118 Cycle M 32.0000 32 0.00 -barcode1 32 -119 Cycle M 32.0000 25 0.00 -barcode1 32 -12 Cycle M 32.0000 6 0.00 -barcode1 32 -120 Cycle M 32.0000 21 0.00 -barcode1 32 -121 Cycle M 32.0000 28 0.00 -barcode1 32 -122 Cycle M 32.0000 21 0.00 -barcode1 32 -123 Cycle M 32.0000 19 0.00 -barcode1 32 -124 Cycle M 32.0000 23 0.00 -barcode1 32 -125 Cycle M 32.0000 30 0.00 -barcode1 32 -126 Cycle M 32.0000 27 0.00 -barcode1 32 -127 Cycle M 32.0000 26 0.00 -barcode1 32 -128 Cycle M 32.0000 24 0.00 -barcode1 32 -129 Cycle M 32.0000 20 0.00 -barcode1 32 -13 Cycle M 32.0000 1 0.00 -barcode1 32 -130 Cycle M 32.0000 31 0.00 -barcode1 32 -131 Cycle M 32.0000 23 0.00 -barcode1 32 -132 Cycle M 32.0000 21 0.00 -barcode1 32 -133 Cycle M 32.0000 26 0.00 -barcode1 32 -134 Cycle M 32.0000 28 0.00 -barcode1 32 -135 Cycle M 32.0000 23 0.00 -barcode1 32 -136 Cycle M 32.0000 26 0.00 -barcode1 32 -137 Cycle M 32.0000 24 0.00 -barcode1 32 -138 Cycle M 32.0000 20 0.00 -barcode1 32 -139 Cycle M 32.0000 25 0.00 -barcode1 32 -14 Cycle M 32.0000 10 0.00 -barcode1 32 -140 Cycle M 32.0000 19 0.00 -barcode1 32 -141 Cycle M 32.0000 22 0.00 -barcode1 32 -142 Cycle M 32.0000 20 0.00 -barcode1 32 -143 Cycle M 32.0000 17 0.00 -barcode1 32 -144 Cycle M 32.0000 22 0.00 -barcode1 32 -145 Cycle M 32.0000 20 0.00 -barcode1 32 -146 Cycle M 32.0000 23 0.00 -barcode1 32 -147 Cycle M 32.0000 31 0.00 -barcode1 32 -148 Cycle M 32.0000 23 0.00 -barcode1 32 -149 Cycle M 32.0000 19 0.00 -barcode1 32 -15 Cycle M 32.0000 6 0.00 -barcode1 32 -150 Cycle M 32.0000 23 0.00 -barcode1 32 -151 Cycle M 32.0000 16 0.00 -barcode1 32 -16 Cycle M 32.0000 9 0.00 -barcode1 32 -17 Cycle M 32.0000 2 0.00 -barcode1 32 -18 Cycle M 32.0000 4 0.00 -barcode1 32 -19 Cycle M 32.0000 1 0.00 -barcode1 32 -2 Cycle M 32.0000 92 0.00 -barcode1 32 -20 Cycle M 32.0000 3 0.00 -barcode1 32 -21 Cycle M 32.0000 5 0.00 -barcode1 32 -22 Cycle M 32.0000 3 0.00 -barcode1 32 -23 Cycle M 32.0000 7 0.00 -barcode1 32 -24 Cycle M 32.0000 5 0.00 -barcode1 32 -25 Cycle M 32.0000 9 0.00 -barcode1 32 -26 Cycle M 32.0000 3 0.00 -barcode1 32 -27 Cycle M 32.0000 7 0.00 -barcode1 32 -28 Cycle M 32.0000 2 0.00 -barcode1 32 -29 Cycle M 32.0000 5 0.00 -barcode1 32 -3 Cycle M 32.0000 89 0.00 -barcode1 32 -30 Cycle M 32.0000 4 0.00 -barcode1 32 -31 Cycle M 32.0000 2 0.00 -barcode1 32 -32 Cycle M 32.0000 3 0.00 -barcode1 32 -33 Cycle M 32.0000 1 0.00 -barcode1 32 -34 Cycle M 32.0000 7 0.00 -barcode1 32 -35 Cycle M 32.0000 3 0.00 -barcode1 32 -36 Cycle M 32.0000 7 0.00 -barcode1 32 -37 Cycle M 32.0000 8 0.00 -barcode1 32 -38 Cycle M 32.0000 7 0.00 -barcode1 32 -39 Cycle M 32.0000 6 0.00 -barcode1 32 -4 Cycle M 32.0000 90 1.00 -barcode1 32 -40 Cycle M 32.0000 6 0.00 -barcode1 32 -41 Cycle M 32.0000 11 0.00 -barcode1 32 -42 Cycle M 32.0000 7 0.00 -barcode1 32 -43 Cycle M 32.0000 7 0.00 -barcode1 32 -44 Cycle M 32.0000 6 0.00 -barcode1 32 -45 Cycle M 32.0000 8 0.00 -barcode1 32 -46 Cycle M 32.0000 7 0.00 -barcode1 32 -47 Cycle M 32.0000 4 0.00 -barcode1 32 -48 Cycle M 32.0000 7 0.00 -barcode1 32 -49 Cycle M 32.0000 10 0.00 -barcode1 32 -5 Cycle M 32.0000 90 0.00 -barcode1 32 -50 Cycle M 32.0000 10 0.00 -barcode1 32 -51 Cycle M 32.0000 7 0.00 -barcode1 32 -52 Cycle M 32.0000 8 0.00 -barcode1 32 -53 Cycle M 32.0000 7 0.00 -barcode1 32 -54 Cycle M 32.0000 14 0.00 -barcode1 32 -55 Cycle M 32.0000 7 0.00 -barcode1 32 -56 Cycle M 32.0000 8 0.00 -barcode1 32 -57 Cycle M 32.0000 6 0.00 -barcode1 32 -58 Cycle M 32.0000 9 0.00 -barcode1 32 -59 Cycle M 32.0000 8 0.00 -barcode1 32 -6 Cycle M 32.0000 8 0.00 -barcode1 32 -60 Cycle M 32.0000 6 0.00 -barcode1 32 -61 Cycle M 32.0000 9 0.00 -barcode1 32 -62 Cycle M 32.0000 6 0.00 -barcode1 32 -63 Cycle M 32.0000 8 0.00 -barcode1 32 -64 Cycle M 32.0000 9 0.00 -barcode1 32 -65 Cycle M 32.0000 5 0.00 -barcode1 32 -66 Cycle M 32.0000 7 0.00 -barcode1 32 -67 Cycle M 32.0000 8 0.00 -barcode1 32 -68 Cycle M 32.0000 6 0.00 -barcode1 32 -69 Cycle M 32.0000 9 0.00 -barcode1 32 -7 Cycle M 32.0000 2 0.00 -barcode1 32 -70 Cycle M 32.0000 11 0.00 -barcode1 32 -71 Cycle M 32.0000 7 0.00 -barcode1 32 -72 Cycle M 32.0000 10 0.00 -barcode1 32 -73 Cycle M 32.0000 6 0.00 -barcode1 32 -74 Cycle M 32.0000 8 0.00 -barcode1 32 -75 Cycle M 32.0000 10 0.00 -barcode1 32 -76 Cycle M 32.0000 8 0.00 -barcode1 32 -77 Cycle M 32.0000 6 0.00 -barcode1 32 -78 Cycle M 32.0000 12 0.00 -barcode1 32 -79 Cycle M 32.0000 13 0.00 -barcode1 32 -8 Cycle M 32.0000 2 0.00 -barcode1 32 -80 Cycle M 32.0000 11 1.00 -barcode1 32 -81 Cycle M 32.0000 10 0.00 -barcode1 32 -82 Cycle M 32.0000 9 0.00 -barcode1 32 -83 Cycle M 32.0000 8 0.00 -barcode1 32 -84 Cycle M 32.0000 11 0.00 -barcode1 32 -85 Cycle M 32.0000 14 0.00 -barcode1 32 -86 Cycle M 32.0000 12 0.00 -barcode1 32 -87 Cycle M 32.0000 3 0.00 -barcode1 32 -88 Cycle M 32.0000 8 0.00 -barcode1 32 -89 Cycle M 32.0000 10 0.00 -barcode1 32 -9 Cycle M 32.0000 8 0.00 -barcode1 32 -90 Cycle M 32.0000 11 0.00 -barcode1 32 -91 Cycle M 32.0000 11 0.00 -barcode1 32 -92 Cycle M 32.0000 13 0.00 -barcode1 32 -93 Cycle M 32.0000 9 0.00 -barcode1 32 -94 Cycle M 32.0000 14 0.00 -barcode1 32 -95 Cycle M 32.0000 19 0.00 -barcode1 32 -96 Cycle M 32.0000 13 0.00 -barcode1 32 -97 Cycle M 32.0000 12 0.00 -barcode1 32 -98 Cycle M 32.0000 13 0.00 -barcode1 32 -99 Cycle M 32.0000 12 0.00 -barcode1 32 1 Cycle M 32.0000 100 0.00 -barcode1 32 10 Cycle M 32.0000 5 0.00 -barcode1 32 100 Cycle M 32.0000 12 0.00 -barcode1 32 101 Cycle M 32.0000 5 0.00 -barcode1 32 102 Cycle M 32.0000 9 0.00 -barcode1 32 103 Cycle M 32.0000 14 0.00 -barcode1 32 104 Cycle M 32.0000 17 0.00 -barcode1 32 105 Cycle M 32.0000 19 0.00 -barcode1 32 106 Cycle M 32.0000 16 0.00 -barcode1 32 107 Cycle M 32.0000 17 0.00 -barcode1 32 108 Cycle M 32.0000 15 0.00 -barcode1 32 109 Cycle M 32.0000 15 0.00 -barcode1 32 11 Cycle M 32.0000 5 0.00 -barcode1 32 110 Cycle M 32.0000 18 0.00 -barcode1 32 111 Cycle M 32.0000 19 0.00 -barcode1 32 112 Cycle M 32.0000 16 0.00 -barcode1 32 113 Cycle M 32.0000 22 0.00 -barcode1 32 114 Cycle M 32.0000 21 0.00 -barcode1 32 115 Cycle M 32.0000 16 0.00 -barcode1 32 116 Cycle M 32.0000 27 0.00 -barcode1 32 117 Cycle M 32.0000 20 0.00 -barcode1 32 118 Cycle M 32.0000 23 0.00 -barcode1 32 119 Cycle M 32.0000 22 0.00 -barcode1 32 12 Cycle M 32.0000 6 0.00 -barcode1 32 120 Cycle M 32.0000 27 0.00 -barcode1 32 121 Cycle M 32.0000 18 0.00 -barcode1 32 122 Cycle M 32.0000 17 0.00 -barcode1 32 123 Cycle M 32.0000 19 0.00 -barcode1 32 124 Cycle M 32.0000 20 0.00 -barcode1 32 125 Cycle M 32.0000 29 0.00 -barcode1 32 126 Cycle M 32.0000 22 0.00 -barcode1 32 127 Cycle M 32.0000 20 0.00 -barcode1 32 128 Cycle M 32.0000 20 0.00 -barcode1 32 129 Cycle M 32.0000 20 0.00 -barcode1 32 13 Cycle M 32.0000 8 0.00 -barcode1 32 130 Cycle M 32.0000 21 0.00 -barcode1 32 131 Cycle M 32.0000 20 0.00 -barcode1 32 132 Cycle M 32.0000 24 0.00 -barcode1 32 133 Cycle M 32.0000 18 0.00 -barcode1 32 134 Cycle M 32.0000 20 0.00 -barcode1 32 135 Cycle M 32.0000 25 0.00 -barcode1 32 136 Cycle M 32.0000 15 0.00 -barcode1 32 137 Cycle M 32.0000 19 0.00 -barcode1 32 138 Cycle M 32.0000 27 0.00 -barcode1 32 139 Cycle M 32.0000 22 0.00 -barcode1 32 14 Cycle M 32.0000 6 0.00 -barcode1 32 140 Cycle M 32.0000 18 0.00 -barcode1 32 141 Cycle M 32.0000 18 0.00 -barcode1 32 142 Cycle M 32.0000 22 0.00 -barcode1 32 143 Cycle M 32.0000 18 0.00 -barcode1 32 144 Cycle M 32.0000 16 0.00 -barcode1 32 145 Cycle M 32.0000 34 0.00 -barcode1 32 146 Cycle M 32.0000 21 0.00 -barcode1 32 147 Cycle M 32.0000 16 0.00 -barcode1 32 148 Cycle M 32.0000 23 0.00 -barcode1 32 149 Cycle M 32.0000 21 0.00 -barcode1 32 15 Cycle M 32.0000 15 0.00 -barcode1 32 150 Cycle M 32.0000 18 0.00 -barcode1 32 151 Cycle M 32.0000 18 0.00 -barcode1 32 16 Cycle M 32.0000 2 0.00 -barcode1 32 17 Cycle M 32.0000 6 0.00 -barcode1 32 18 Cycle M 32.0000 4 0.00 -barcode1 32 19 Cycle M 32.0000 2 0.00 -barcode1 32 2 Cycle M 32.0000 96 0.00 -barcode1 32 20 Cycle M 32.0000 4 0.00 -barcode1 32 21 Cycle M 32.0000 3 0.00 -barcode1 32 22 Cycle M 32.0000 5 0.00 -barcode1 32 23 Cycle M 32.0000 5 0.00 -barcode1 32 24 Cycle M 32.0000 1 0.00 -barcode1 32 25 Cycle M 32.0000 8 0.00 -barcode1 32 26 Cycle M 32.0000 6 0.00 -barcode1 32 27 Cycle M 32.0000 5 0.00 -barcode1 32 28 Cycle M 32.0000 5 0.00 -barcode1 32 29 Cycle M 32.0000 4 0.00 -barcode1 32 3 Cycle M 32.0000 97 0.00 -barcode1 32 30 Cycle M 32.0000 7 0.00 -barcode1 32 31 Cycle M 32.0000 3 0.00 -barcode1 32 32 Cycle M 32.0000 6 0.00 -barcode1 32 33 Cycle M 32.0000 7 0.00 -barcode1 32 34 Cycle M 32.0000 8 0.00 -barcode1 32 35 Cycle M 32.0000 6 0.00 -barcode1 32 36 Cycle M 32.0000 8 0.00 -barcode1 32 37 Cycle M 32.0000 4 0.00 -barcode1 32 38 Cycle M 32.0000 4 0.00 -barcode1 32 39 Cycle M 32.0000 6 0.00 -barcode1 32 4 Cycle M 32.0000 94 1.00 -barcode1 32 40 Cycle M 32.0000 3 0.00 -barcode1 32 41 Cycle M 32.0000 9 0.00 -barcode1 32 42 Cycle M 32.0000 5 0.00 -barcode1 32 43 Cycle M 32.0000 4 0.00 -barcode1 32 44 Cycle M 32.0000 8 0.00 -barcode1 32 45 Cycle M 32.0000 6 0.00 -barcode1 32 46 Cycle M 32.0000 9 0.00 -barcode1 32 47 Cycle M 32.0000 10 0.00 -barcode1 32 48 Cycle M 32.0000 12 0.00 -barcode1 32 49 Cycle M 32.0000 8 0.00 -barcode1 32 5 Cycle M 32.0000 93 0.00 -barcode1 32 50 Cycle M 32.0000 10 0.00 -barcode1 32 51 Cycle M 32.0000 12 0.00 -barcode1 32 52 Cycle M 32.0000 12 0.00 -barcode1 32 53 Cycle M 32.0000 15 0.00 -barcode1 32 54 Cycle M 32.0000 12 0.00 -barcode1 32 55 Cycle M 32.0000 8 0.00 -barcode1 32 56 Cycle M 32.0000 9 0.00 -barcode1 32 57 Cycle M 32.0000 13 0.00 -barcode1 32 58 Cycle M 32.0000 11 0.00 -barcode1 32 59 Cycle M 32.0000 11 0.00 -barcode1 32 6 Cycle M 32.0000 7 0.00 -barcode1 32 60 Cycle M 32.0000 5 0.00 -barcode1 32 61 Cycle M 32.0000 8 0.00 -barcode1 32 62 Cycle M 32.0000 6 0.00 -barcode1 32 63 Cycle M 32.0000 10 0.00 -barcode1 32 64 Cycle M 32.0000 7 0.00 -barcode1 32 65 Cycle M 32.0000 10 0.00 -barcode1 32 66 Cycle M 32.0000 10 0.00 -barcode1 32 67 Cycle M 32.0000 15 0.00 -barcode1 32 68 Cycle M 32.0000 10 0.00 -barcode1 32 69 Cycle M 32.0000 4 0.00 -barcode1 32 7 Cycle M 32.0000 7 0.00 -barcode1 32 70 Cycle M 32.0000 7 0.00 -barcode1 32 71 Cycle M 32.0000 9 0.00 -barcode1 32 72 Cycle M 32.0000 12 0.00 -barcode1 32 73 Cycle M 32.0000 9 0.00 -barcode1 32 74 Cycle M 32.0000 8 0.00 -barcode1 32 75 Cycle M 32.0000 12 0.00 -barcode1 32 76 Cycle M 32.0000 6 0.00 -barcode1 32 77 Cycle M 32.0000 8 0.00 -barcode1 32 78 Cycle M 32.0000 13 0.00 -barcode1 32 79 Cycle M 32.0000 15 0.00 -barcode1 32 8 Cycle M 32.0000 12 0.00 -barcode1 32 80 Cycle M 32.0000 15 0.00 -barcode1 32 81 Cycle M 32.0000 8 0.00 -barcode1 32 82 Cycle M 32.0000 12 0.00 -barcode1 32 83 Cycle M 32.0000 7 0.00 -barcode1 32 84 Cycle M 32.0000 5 0.00 -barcode1 32 85 Cycle M 32.0000 10 0.00 -barcode1 32 86 Cycle M 32.0000 17 0.00 -barcode1 32 87 Cycle M 32.0000 7 0.00 -barcode1 32 88 Cycle M 32.0000 7 0.00 -barcode1 32 89 Cycle M 32.0000 9 0.00 -barcode1 32 9 Cycle M 32.0000 11 0.00 -barcode1 32 90 Cycle M 32.0000 11 0.00 -barcode1 32 91 Cycle M 32.0000 10 0.00 -barcode1 32 92 Cycle M 32.0000 7 0.00 -barcode1 32 93 Cycle M 32.0000 12 0.00 -barcode1 32 94 Cycle M 32.0000 9 0.00 -barcode1 32 95 Cycle M 32.0000 10 0.00 -barcode1 32 96 Cycle M 32.0000 7 0.00 -barcode1 32 97 Cycle M 32.0000 11 0.00 -barcode1 32 98 Cycle M 32.0000 14 0.00 -barcode1 32 99 Cycle M 32.0000 11 0.00 -barcode1 32 AA Context M 32.0000 278 0.00 -barcode1 32 AC Context M 32.0000 262 1.00 -barcode1 32 AG Context M 32.0000 234 0.00 -barcode1 32 AT Context M 32.0000 332 0.00 -barcode1 32 CA Context M 32.0000 341 1.00 -barcode1 32 CC Context M 32.0000 201 0.00 -barcode1 32 CG Context M 32.0000 91 1.00 -barcode1 32 CT Context M 32.0000 281 0.00 -barcode1 32 GA Context M 32.0000 216 0.00 -barcode1 32 GC Context M 32.0000 230 0.00 -barcode1 32 GG Context M 32.0000 148 0.00 -barcode1 32 GT Context M 32.0000 316 0.00 -barcode1 32 TA Context M 32.0000 393 0.00 -barcode1 32 TC Context M 32.0000 220 0.00 -barcode1 32 TG Context M 32.0000 360 0.00 -barcode1 32 TT Context M 32.0000 431 0.00 -barcode1 36 -1 Cycle M 36.0000 1 0.00 -barcode1 36 -10 Cycle M 36.0000 89 0.00 -barcode1 36 -100 Cycle M 36.0000 58 0.00 -barcode1 36 -101 Cycle M 36.0000 62 0.00 -barcode1 36 -102 Cycle M 36.0000 60 0.00 -barcode1 36 -103 Cycle M 36.0000 64 0.00 -barcode1 36 -104 Cycle M 36.0000 57 0.00 -barcode1 36 -105 Cycle M 36.0000 55 0.00 -barcode1 36 -106 Cycle M 36.0000 55 0.00 -barcode1 36 -107 Cycle M 36.0000 60 0.00 -barcode1 36 -108 Cycle M 36.0000 58 0.00 -barcode1 36 -109 Cycle M 36.0000 53 0.00 -barcode1 36 -11 Cycle M 36.0000 89 0.00 -barcode1 36 -110 Cycle M 36.0000 48 0.00 -barcode1 36 -111 Cycle M 36.0000 55 0.00 -barcode1 36 -112 Cycle M 36.0000 43 0.00 -barcode1 36 -113 Cycle M 36.0000 47 0.00 -barcode1 36 -114 Cycle M 36.0000 50 0.00 -barcode1 36 -115 Cycle M 36.0000 44 0.00 -barcode1 36 -116 Cycle M 36.0000 49 0.00 -barcode1 36 -117 Cycle M 36.0000 39 0.00 -barcode1 36 -118 Cycle M 36.0000 35 0.00 -barcode1 36 -119 Cycle M 36.0000 41 0.00 -barcode1 36 -12 Cycle M 36.0000 82 0.00 -barcode1 36 -120 Cycle M 36.0000 46 0.00 -barcode1 36 -121 Cycle M 36.0000 34 0.00 -barcode1 36 -122 Cycle M 36.0000 40 0.00 -barcode1 36 -123 Cycle M 36.0000 42 0.00 -barcode1 36 -124 Cycle M 36.0000 34 0.00 -barcode1 36 -125 Cycle M 36.0000 32 0.00 -barcode1 36 -126 Cycle M 36.0000 41 0.00 -barcode1 36 -127 Cycle M 36.0000 41 0.00 -barcode1 36 -128 Cycle M 36.0000 38 0.00 -barcode1 36 -129 Cycle M 36.0000 41 0.00 -barcode1 36 -13 Cycle M 36.0000 90 0.00 -barcode1 36 -130 Cycle M 36.0000 30 0.00 -barcode1 36 -131 Cycle M 36.0000 36 0.00 -barcode1 36 -132 Cycle M 36.0000 35 0.00 -barcode1 36 -133 Cycle M 36.0000 36 0.00 -barcode1 36 -134 Cycle M 36.0000 35 0.00 -barcode1 36 -135 Cycle M 36.0000 35 0.00 -barcode1 36 -136 Cycle M 36.0000 41 0.00 -barcode1 36 -137 Cycle M 36.0000 38 0.00 -barcode1 36 -138 Cycle M 36.0000 36 0.00 -barcode1 36 -139 Cycle M 36.0000 38 0.00 -barcode1 36 -14 Cycle M 36.0000 84 0.00 -barcode1 36 -140 Cycle M 36.0000 36 0.00 -barcode1 36 -141 Cycle M 36.0000 38 0.00 -barcode1 36 -142 Cycle M 36.0000 35 0.00 -barcode1 36 -143 Cycle M 36.0000 35 0.00 -barcode1 36 -144 Cycle M 36.0000 38 0.00 -barcode1 36 -145 Cycle M 36.0000 38 0.00 -barcode1 36 -146 Cycle M 36.0000 35 0.00 -barcode1 36 -147 Cycle M 36.0000 28 0.00 -barcode1 36 -148 Cycle M 36.0000 28 0.00 -barcode1 36 -149 Cycle M 36.0000 29 0.00 -barcode1 36 -15 Cycle M 36.0000 84 0.00 -barcode1 36 -150 Cycle M 36.0000 30 0.00 -barcode1 36 -151 Cycle M 36.0000 4 0.00 -barcode1 36 -16 Cycle M 36.0000 83 0.00 -barcode1 36 -17 Cycle M 36.0000 89 0.00 -barcode1 36 -18 Cycle M 36.0000 89 0.00 -barcode1 36 -19 Cycle M 36.0000 89 0.00 -barcode1 36 -2 Cycle M 36.0000 1 0.00 -barcode1 36 -20 Cycle M 36.0000 88 0.00 -barcode1 36 -21 Cycle M 36.0000 88 0.00 -barcode1 36 -22 Cycle M 36.0000 88 0.00 -barcode1 36 -23 Cycle M 36.0000 87 0.00 -barcode1 36 -24 Cycle M 36.0000 85 0.00 -barcode1 36 -25 Cycle M 36.0000 81 0.00 -barcode1 36 -26 Cycle M 36.0000 87 0.00 -barcode1 36 -27 Cycle M 36.0000 85 0.00 -barcode1 36 -28 Cycle M 36.0000 87 0.00 -barcode1 36 -29 Cycle M 36.0000 84 0.00 -barcode1 36 -3 Cycle M 36.0000 1 0.00 -barcode1 36 -30 Cycle M 36.0000 87 0.00 -barcode1 36 -31 Cycle M 36.0000 90 0.00 -barcode1 36 -32 Cycle M 36.0000 85 0.00 -barcode1 36 -33 Cycle M 36.0000 87 0.00 -barcode1 36 -34 Cycle M 36.0000 83 0.00 -barcode1 36 -35 Cycle M 36.0000 86 0.00 -barcode1 36 -36 Cycle M 36.0000 82 0.00 -barcode1 36 -37 Cycle M 36.0000 82 0.00 -barcode1 36 -38 Cycle M 36.0000 84 0.00 -barcode1 36 -39 Cycle M 36.0000 84 0.00 -barcode1 36 -4 Cycle M 36.0000 1 0.00 -barcode1 36 -40 Cycle M 36.0000 84 0.00 -barcode1 36 -41 Cycle M 36.0000 75 0.00 -barcode1 36 -42 Cycle M 36.0000 85 0.00 -barcode1 36 -43 Cycle M 36.0000 79 0.00 -barcode1 36 -44 Cycle M 36.0000 84 0.00 -barcode1 36 -45 Cycle M 36.0000 83 0.00 -barcode1 36 -46 Cycle M 36.0000 79 0.00 -barcode1 36 -47 Cycle M 36.0000 85 0.00 -barcode1 36 -48 Cycle M 36.0000 82 0.00 -barcode1 36 -49 Cycle M 36.0000 79 0.00 -barcode1 36 -5 Cycle M 36.0000 2 0.00 -barcode1 36 -50 Cycle M 36.0000 78 0.00 -barcode1 36 -51 Cycle M 36.0000 79 0.00 -barcode1 36 -52 Cycle M 36.0000 77 0.00 -barcode1 36 -53 Cycle M 36.0000 79 0.00 -barcode1 36 -54 Cycle M 36.0000 78 0.00 -barcode1 36 -55 Cycle M 36.0000 83 0.00 -barcode1 36 -56 Cycle M 36.0000 78 0.00 -barcode1 36 -57 Cycle M 36.0000 82 0.00 -barcode1 36 -58 Cycle M 36.0000 79 0.00 -barcode1 36 -59 Cycle M 36.0000 80 0.00 -barcode1 36 -6 Cycle M 36.0000 82 0.00 -barcode1 36 -60 Cycle M 36.0000 75 0.00 -barcode1 36 -61 Cycle M 36.0000 80 0.00 -barcode1 36 -62 Cycle M 36.0000 78 0.00 -barcode1 36 -63 Cycle M 36.0000 81 0.00 -barcode1 36 -64 Cycle M 36.0000 79 0.00 -barcode1 36 -65 Cycle M 36.0000 73 0.00 -barcode1 36 -66 Cycle M 36.0000 77 0.00 -barcode1 36 -67 Cycle M 36.0000 79 0.00 -barcode1 36 -68 Cycle M 36.0000 81 0.00 -barcode1 36 -69 Cycle M 36.0000 74 0.00 -barcode1 36 -7 Cycle M 36.0000 91 0.00 -barcode1 36 -70 Cycle M 36.0000 75 0.00 -barcode1 36 -71 Cycle M 36.0000 72 0.00 -barcode1 36 -72 Cycle M 36.0000 70 0.00 -barcode1 36 -73 Cycle M 36.0000 79 0.00 -barcode1 36 -74 Cycle M 36.0000 74 0.00 -barcode1 36 -75 Cycle M 36.0000 79 0.00 -barcode1 36 -76 Cycle M 36.0000 79 0.00 -barcode1 36 -77 Cycle M 36.0000 75 0.00 -barcode1 36 -78 Cycle M 36.0000 69 0.00 -barcode1 36 -79 Cycle M 36.0000 74 0.00 -barcode1 36 -8 Cycle M 36.0000 89 0.00 -barcode1 36 -80 Cycle M 36.0000 72 0.00 -barcode1 36 -81 Cycle M 36.0000 78 0.00 -barcode1 36 -82 Cycle M 36.0000 78 0.00 -barcode1 36 -83 Cycle M 36.0000 74 0.00 -barcode1 36 -84 Cycle M 36.0000 72 0.00 -barcode1 36 -85 Cycle M 36.0000 66 0.00 -barcode1 36 -86 Cycle M 36.0000 72 0.00 -barcode1 36 -87 Cycle M 36.0000 77 0.00 -barcode1 36 -88 Cycle M 36.0000 68 0.00 -barcode1 36 -89 Cycle M 36.0000 71 0.00 -barcode1 36 -9 Cycle M 36.0000 85 0.00 -barcode1 36 -90 Cycle M 36.0000 71 0.00 -barcode1 36 -91 Cycle M 36.0000 70 0.00 -barcode1 36 -92 Cycle M 36.0000 67 0.00 -barcode1 36 -93 Cycle M 36.0000 67 0.00 -barcode1 36 -94 Cycle M 36.0000 67 0.00 -barcode1 36 -95 Cycle M 36.0000 62 0.00 -barcode1 36 -96 Cycle M 36.0000 66 0.00 -barcode1 36 -97 Cycle M 36.0000 70 0.00 -barcode1 36 -98 Cycle M 36.0000 67 0.00 -barcode1 36 -99 Cycle M 36.0000 62 0.00 -barcode1 36 10 Cycle M 36.0000 87 0.00 -barcode1 36 100 Cycle M 36.0000 64 0.00 -barcode1 36 101 Cycle M 36.0000 67 0.00 -barcode1 36 102 Cycle M 36.0000 68 0.00 -barcode1 36 103 Cycle M 36.0000 61 0.00 -barcode1 36 104 Cycle M 36.0000 59 0.00 -barcode1 36 105 Cycle M 36.0000 56 0.00 -barcode1 36 106 Cycle M 36.0000 57 0.00 -barcode1 36 107 Cycle M 36.0000 58 0.00 -barcode1 36 108 Cycle M 36.0000 56 0.00 -barcode1 36 109 Cycle M 36.0000 52 0.00 -barcode1 36 11 Cycle M 36.0000 89 1.00 -barcode1 36 110 Cycle M 36.0000 50 0.00 -barcode1 36 111 Cycle M 36.0000 51 0.00 -barcode1 36 112 Cycle M 36.0000 54 0.00 -barcode1 36 113 Cycle M 36.0000 44 0.00 -barcode1 36 114 Cycle M 36.0000 45 0.00 -barcode1 36 115 Cycle M 36.0000 48 0.00 -barcode1 36 116 Cycle M 36.0000 42 0.00 -barcode1 36 117 Cycle M 36.0000 49 0.00 -barcode1 36 118 Cycle M 36.0000 44 0.00 -barcode1 36 119 Cycle M 36.0000 43 0.00 -barcode1 36 12 Cycle M 36.0000 88 0.00 -barcode1 36 120 Cycle M 36.0000 48 0.00 -barcode1 36 121 Cycle M 36.0000 47 0.00 -barcode1 36 122 Cycle M 36.0000 53 0.00 -barcode1 36 123 Cycle M 36.0000 52 0.00 -barcode1 36 124 Cycle M 36.0000 48 0.00 -barcode1 36 125 Cycle M 36.0000 41 0.00 -barcode1 36 126 Cycle M 36.0000 41 0.00 -barcode1 36 127 Cycle M 36.0000 41 0.00 -barcode1 36 128 Cycle M 36.0000 41 0.00 -barcode1 36 129 Cycle M 36.0000 47 0.00 -barcode1 36 13 Cycle M 36.0000 84 0.00 -barcode1 36 130 Cycle M 36.0000 44 0.00 -barcode1 36 131 Cycle M 36.0000 48 0.00 -barcode1 36 132 Cycle M 36.0000 41 0.00 -barcode1 36 133 Cycle M 36.0000 47 0.00 -barcode1 36 134 Cycle M 36.0000 43 0.00 -barcode1 36 135 Cycle M 36.0000 37 0.00 -barcode1 36 136 Cycle M 36.0000 44 0.00 -barcode1 36 137 Cycle M 36.0000 45 0.00 -barcode1 36 138 Cycle M 36.0000 34 0.00 -barcode1 36 139 Cycle M 36.0000 34 0.00 -barcode1 36 14 Cycle M 36.0000 86 0.00 -barcode1 36 140 Cycle M 36.0000 46 0.00 -barcode1 36 141 Cycle M 36.0000 39 0.00 -barcode1 36 142 Cycle M 36.0000 37 0.00 -barcode1 36 143 Cycle M 36.0000 34 0.00 -barcode1 36 144 Cycle M 36.0000 34 0.00 -barcode1 36 145 Cycle M 36.0000 33 0.00 -barcode1 36 146 Cycle M 36.0000 36 0.00 -barcode1 36 147 Cycle M 36.0000 43 0.00 -barcode1 36 148 Cycle M 36.0000 33 0.00 -barcode1 36 149 Cycle M 36.0000 35 0.00 -barcode1 36 15 Cycle M 36.0000 83 0.00 -barcode1 36 150 Cycle M 36.0000 36 0.00 -barcode1 36 151 Cycle M 36.0000 11 0.00 -barcode1 36 16 Cycle M 36.0000 89 0.00 -barcode1 36 17 Cycle M 36.0000 86 0.00 -barcode1 36 18 Cycle M 36.0000 93 0.00 -barcode1 36 19 Cycle M 36.0000 86 0.00 -barcode1 36 20 Cycle M 36.0000 85 0.00 -barcode1 36 21 Cycle M 36.0000 95 0.00 -barcode1 36 22 Cycle M 36.0000 91 0.00 -barcode1 36 23 Cycle M 36.0000 90 0.00 -barcode1 36 24 Cycle M 36.0000 90 0.00 -barcode1 36 25 Cycle M 36.0000 85 0.00 -barcode1 36 26 Cycle M 36.0000 87 0.00 -barcode1 36 27 Cycle M 36.0000 87 0.00 -barcode1 36 28 Cycle M 36.0000 88 0.00 -barcode1 36 29 Cycle M 36.0000 90 0.00 -barcode1 36 30 Cycle M 36.0000 87 0.00 -barcode1 36 31 Cycle M 36.0000 84 0.00 -barcode1 36 32 Cycle M 36.0000 89 0.00 -barcode1 36 33 Cycle M 36.0000 84 0.00 -barcode1 36 34 Cycle M 36.0000 89 0.00 -barcode1 36 35 Cycle M 36.0000 88 0.00 -barcode1 36 36 Cycle M 36.0000 85 0.00 -barcode1 36 37 Cycle M 36.0000 87 0.00 -barcode1 36 38 Cycle M 36.0000 91 0.00 -barcode1 36 39 Cycle M 36.0000 86 0.00 -barcode1 36 4 Cycle M 36.0000 1 0.00 -barcode1 36 40 Cycle M 36.0000 90 0.00 -barcode1 36 41 Cycle M 36.0000 85 0.00 -barcode1 36 42 Cycle M 36.0000 88 0.00 -barcode1 36 43 Cycle M 36.0000 83 0.00 -barcode1 36 44 Cycle M 36.0000 83 0.00 -barcode1 36 45 Cycle M 36.0000 86 0.00 -barcode1 36 46 Cycle M 36.0000 85 0.00 -barcode1 36 47 Cycle M 36.0000 77 0.00 -barcode1 36 48 Cycle M 36.0000 80 0.00 -barcode1 36 49 Cycle M 36.0000 79 0.00 -barcode1 36 50 Cycle M 36.0000 81 0.00 -barcode1 36 51 Cycle M 36.0000 83 0.00 -barcode1 36 52 Cycle M 36.0000 80 0.00 -barcode1 36 53 Cycle M 36.0000 77 0.00 -barcode1 36 54 Cycle M 36.0000 72 0.00 -barcode1 36 55 Cycle M 36.0000 82 0.00 -barcode1 36 56 Cycle M 36.0000 80 0.00 -barcode1 36 57 Cycle M 36.0000 77 0.00 -barcode1 36 58 Cycle M 36.0000 76 0.00 -barcode1 36 59 Cycle M 36.0000 80 0.00 -barcode1 36 6 Cycle M 36.0000 85 0.00 -barcode1 36 60 Cycle M 36.0000 83 0.00 -barcode1 36 61 Cycle M 36.0000 81 0.00 -barcode1 36 62 Cycle M 36.0000 81 0.00 -barcode1 36 63 Cycle M 36.0000 84 0.00 -barcode1 36 64 Cycle M 36.0000 77 0.00 -barcode1 36 65 Cycle M 36.0000 77 0.00 -barcode1 36 66 Cycle M 36.0000 76 0.00 -barcode1 36 67 Cycle M 36.0000 77 0.00 -barcode1 36 68 Cycle M 36.0000 81 0.00 -barcode1 36 69 Cycle M 36.0000 82 0.00 -barcode1 36 7 Cycle M 36.0000 84 0.00 -barcode1 36 70 Cycle M 36.0000 78 0.00 -barcode1 36 71 Cycle M 36.0000 79 0.00 -barcode1 36 72 Cycle M 36.0000 81 0.00 -barcode1 36 73 Cycle M 36.0000 78 0.00 -barcode1 36 74 Cycle M 36.0000 82 0.00 -barcode1 36 75 Cycle M 36.0000 78 0.00 -barcode1 36 76 Cycle M 36.0000 80 0.00 -barcode1 36 77 Cycle M 36.0000 79 0.00 -barcode1 36 78 Cycle M 36.0000 73 0.00 -barcode1 36 79 Cycle M 36.0000 72 0.00 -barcode1 36 8 Cycle M 36.0000 83 0.00 -barcode1 36 80 Cycle M 36.0000 72 0.00 -barcode1 36 81 Cycle M 36.0000 74 0.00 -barcode1 36 82 Cycle M 36.0000 72 0.00 -barcode1 36 83 Cycle M 36.0000 74 0.00 -barcode1 36 84 Cycle M 36.0000 80 0.00 -barcode1 36 85 Cycle M 36.0000 69 0.00 -barcode1 36 86 Cycle M 36.0000 67 0.00 -barcode1 36 87 Cycle M 36.0000 70 0.00 -barcode1 36 88 Cycle M 36.0000 75 0.00 -barcode1 36 89 Cycle M 36.0000 76 0.00 -barcode1 36 9 Cycle M 36.0000 85 0.00 -barcode1 36 90 Cycle M 36.0000 71 0.00 -barcode1 36 91 Cycle M 36.0000 73 0.00 -barcode1 36 92 Cycle M 36.0000 74 0.00 -barcode1 36 93 Cycle M 36.0000 67 0.00 -barcode1 36 94 Cycle M 36.0000 76 0.00 -barcode1 36 95 Cycle M 36.0000 69 0.00 -barcode1 36 96 Cycle M 36.0000 75 0.00 -barcode1 36 97 Cycle M 36.0000 71 0.00 -barcode1 36 98 Cycle M 36.0000 61 0.00 -barcode1 36 99 Cycle M 36.0000 67 0.00 -barcode1 36 AA Context M 36.0000 1977 0.00 -barcode1 36 AC Context M 36.0000 1462 0.00 -barcode1 36 AG Context M 36.0000 1322 0.00 -barcode1 36 AT Context M 36.0000 1526 0.00 -barcode1 36 CA Context M 36.0000 1561 0.00 -barcode1 36 CC Context M 36.0000 606 0.00 -barcode1 36 CG Context M 36.0000 295 0.00 -barcode1 36 CT Context M 36.0000 1269 0.00 -barcode1 36 GA Context M 36.0000 891 0.00 -barcode1 36 GC Context M 36.0000 789 0.00 -barcode1 36 GG Context M 36.0000 667 0.00 -barcode1 36 GT Context M 36.0000 1346 0.00 -barcode1 36 TA Context M 36.0000 1557 1.00 -barcode1 36 TC Context M 36.0000 933 0.00 -barcode1 36 TG Context M 36.0000 1564 0.00 -barcode1 36 TT Context M 36.0000 1813 0.00 - diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf b/tests/data/genomics/sarscov2/illumina/vcf/test.vcf deleted file mode 100644 index 02a8a1f6..00000000 --- a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf +++ /dev/null @@ -1,41 +0,0 @@ -##fileformat=VCFv4.2 -##FILTER= -##bcftoolsVersion=1.11+htslib-1.11 -##bcftoolsCommand=mpileup -Ou -f data/genomics/sarscov2/fasta/test_genome.fasta data/genomics/sarscov2/bam/test_paired_end.sorted.bam -##reference=file://data/genomics/sarscov2/fasta/test_genome.fasta -##contig= -##ALT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##FORMAT= -##FORMAT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##bcftools_callVersion=1.11+htslib-1.11 -##bcftools_callCommand=call -Ou -mv; Date=Mon Mar 8 10:55:13 2021 -##FILTER=0"> -##bcftools_filterVersion=1.11+htslib-1.11 -##bcftools_filterCommand=filter -s LowQual -e '%QUAL<1 || DP>0'; Date=Mon Mar 8 10:55:13 2021 -#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT data/genomics/sarscov2/bam/test_paired_end.sorted.bam -MT192765.1 197 . G T 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 4788 . C T 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 8236 . C A 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 10506 . TTATGACTGTGTCTCTTTTTGTTACATGCACCATATG TTATG 18.4617 LowQual INDEL;IDV=1;IMF=0.333333;DP=3;VDB=0.5;SGB=-0.379885;MQSB=1;MQ0F=0;ICB=1;HOB=0.5;AC=1;AN=2;DP4=1,1,1,0;MQ=60 GT:PL 0/1:51,0,54 -MT192765.1 11037 . T C 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 15009 . G A 30.4183 LowQual DP=2;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:60,3,0 -MT192765.1 18807 . T C 136 LowQual DP=6;VDB=0.618918;SGB=-0.590765;MQSB=1;MQ0F=0;AC=2;AN=2;DP4=0,0,1,4;MQ=60 GT:PL 1/1:166,15,0 -MT192765.1 23813 . T C 4.38466 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:32,3,0 -MT192765.1 24103 . A G 30.4183 LowQual DP=2;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:60,3,0 diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz b/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz deleted file mode 100644 index 96257004..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi b/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi deleted file mode 100644 index f6e862ed..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf b/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf deleted file mode 100644 index 02a8a1f6..00000000 --- a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf +++ /dev/null @@ -1,41 +0,0 @@ -##fileformat=VCFv4.2 -##FILTER= -##bcftoolsVersion=1.11+htslib-1.11 -##bcftoolsCommand=mpileup -Ou -f data/genomics/sarscov2/fasta/test_genome.fasta data/genomics/sarscov2/bam/test_paired_end.sorted.bam -##reference=file://data/genomics/sarscov2/fasta/test_genome.fasta -##contig= -##ALT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##FORMAT= -##FORMAT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##bcftools_callVersion=1.11+htslib-1.11 -##bcftools_callCommand=call -Ou -mv; Date=Mon Mar 8 10:55:13 2021 -##FILTER=0"> -##bcftools_filterVersion=1.11+htslib-1.11 -##bcftools_filterCommand=filter -s LowQual -e '%QUAL<1 || DP>0'; Date=Mon Mar 8 10:55:13 2021 -#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT data/genomics/sarscov2/bam/test_paired_end.sorted.bam -MT192765.1 197 . G T 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 4788 . C T 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 8236 . C A 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 10506 . TTATGACTGTGTCTCTTTTTGTTACATGCACCATATG TTATG 18.4617 LowQual INDEL;IDV=1;IMF=0.333333;DP=3;VDB=0.5;SGB=-0.379885;MQSB=1;MQ0F=0;ICB=1;HOB=0.5;AC=1;AN=2;DP4=1,1,1,0;MQ=60 GT:PL 0/1:51,0,54 -MT192765.1 11037 . T C 7.30814 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 15009 . G A 30.4183 LowQual DP=2;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:60,3,0 -MT192765.1 18807 . T C 136 LowQual DP=6;VDB=0.618918;SGB=-0.590765;MQSB=1;MQ0F=0;AC=2;AN=2;DP4=0,0,1,4;MQ=60 GT:PL 1/1:166,15,0 -MT192765.1 23813 . T C 4.38466 LowQual DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:32,3,0 -MT192765.1 24103 . A G 30.4183 LowQual DP=2;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:60,3,0 diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz b/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz deleted file mode 100644 index 96257004..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi b/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi deleted file mode 100644 index f6e862ed..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf b/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf deleted file mode 100644 index a62ed968..00000000 --- a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf +++ /dev/null @@ -1,42 +0,0 @@ -##fileformat=VCFv4.2 -##FILTER= -##bcftoolsVersion=1.11+htslib-1.11 -##bcftoolsCommand=mpileup -Ou -f ../fasta/test_genome.fasta ../bam/test_single_end.sorted.bam -##reference=file://../fasta/test_genome.fasta -##contig= -##ALT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##FORMAT= -##FORMAT= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##INFO= -##bcftools_callVersion=1.11+htslib-1.11 -##bcftools_callCommand=call -Ou -mv; Date=Mon Mar 8 13:13:34 2021 -##FILTER=1"> -##bcftools_filterVersion=1.11+htslib-1.11 -##bcftools_filterCommand=filter -s LowQual -e '%QUAL<1 || DP>1'; Date=Mon Mar 8 13:13:34 2021 -#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT ../bam/test_single_end.sorted.bam -MT192765.1 3744 . A T 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=36 GT:PL 1/1:36,3,0 -MT192765.1 4788 . C T 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 8236 . C A 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 10506 . TTATGACTGTGTCTCTTTTTGTTACATGCACCATATG TTATG 21.4353 LowQual INDEL;IDV=1;IMF=0.5;DP=2;VDB=0.78;SGB=-0.379885;MQSB=1;MQ0F=0;ICB=1;HOB=0.5;AC=1;AN=2;DP4=0,1,1,0;MQ=60 GT:PL 0/1:54,0,54 -MT192765.1 11037 . T C 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 15009 . G A 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 15636 . AG A 8.99861 PASS INDEL;IDV=1;IMF=1;DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,0,1;MQ=60 GT:PL 1/1:38,3,0 -MT192765.1 18807 . T C 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 -MT192765.1 18820 . TCC TC 6.51141 PASS INDEL;IDV=1;IMF=1;DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:35,3,0 -MT192765.1 24103 . A G 7.30814 PASS DP=1;SGB=-0.379885;MQ0F=0;AC=2;AN=2;DP4=0,0,1,0;MQ=60 GT:PL 1/1:36,3,0 diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz b/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz deleted file mode 100644 index 21e819de..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz and /dev/null differ diff --git a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi b/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi deleted file mode 100644 index d793eb1b..00000000 Binary files a/tests/data/genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam b/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam deleted file mode 100644 index 7d42749a..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam.bai b/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam.bai deleted file mode 100644 index e557ea29..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/bam/test.sorted.bam.bai and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00068f7a-51b3-4933-8fc6-7d6e29181ff9.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00068f7a-51b3-4933-8fc6-7d6e29181ff9.fast5 deleted file mode 100644 index ad3f3635..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00068f7a-51b3-4933-8fc6-7d6e29181ff9.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/001ed67f-906f-4f37-9770-85d40f5ffee6.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/001ed67f-906f-4f37-9770-85d40f5ffee6.fast5 deleted file mode 100644 index ccc711ed..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/001ed67f-906f-4f37-9770-85d40f5ffee6.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0043238c-3a78-48f1-a8ec-d492280da6e4.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0043238c-3a78-48f1-a8ec-d492280da6e4.fast5 deleted file mode 100644 index f2568be1..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0043238c-3a78-48f1-a8ec-d492280da6e4.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/004a65aa-6700-4ad7-9550-dc59f8708908.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/004a65aa-6700-4ad7-9550-dc59f8708908.fast5 deleted file mode 100644 index 02a3f9d7..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/004a65aa-6700-4ad7-9550-dc59f8708908.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00c6481f-9022-4173-9b74-f375c34b9a9b.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00c6481f-9022-4173-9b74-f375c34b9a9b.fast5 deleted file mode 100644 index c9a26c23..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00c6481f-9022-4173-9b74-f375c34b9a9b.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00da3999-12fd-449d-bd07-32a879667a3d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00da3999-12fd-449d-bd07-32a879667a3d.fast5 deleted file mode 100644 index f16b22b9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/00da3999-12fd-449d-bd07-32a879667a3d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/018c4b52-48fa-4cc8-a7b4-500f41420279.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/018c4b52-48fa-4cc8-a7b4-500f41420279.fast5 deleted file mode 100644 index 1a6bb17c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/018c4b52-48fa-4cc8-a7b4-500f41420279.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/01faaaa1-eca2-4bcd-8666-b4d69497107e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/01faaaa1-eca2-4bcd-8666-b4d69497107e.fast5 deleted file mode 100644 index 44819c26..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/01faaaa1-eca2-4bcd-8666-b4d69497107e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02085a68-dc6e-4275-bd1e-f112fed3bd83.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02085a68-dc6e-4275-bd1e-f112fed3bd83.fast5 deleted file mode 100644 index 394e6347..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02085a68-dc6e-4275-bd1e-f112fed3bd83.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022647b9-0e16-4318-a794-c5749705b67d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022647b9-0e16-4318-a794-c5749705b67d.fast5 deleted file mode 100644 index e92b3c35..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022647b9-0e16-4318-a794-c5749705b67d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022fc908-aa6e-4d29-a5ad-6a30a9da7e3b.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022fc908-aa6e-4d29-a5ad-6a30a9da7e3b.fast5 deleted file mode 100644 index ea641ccb..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/022fc908-aa6e-4d29-a5ad-6a30a9da7e3b.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02445dc2-39ee-49f1-8a42-51ebfea52c33.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02445dc2-39ee-49f1-8a42-51ebfea52c33.fast5 deleted file mode 100644 index 001a5bd7..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/02445dc2-39ee-49f1-8a42-51ebfea52c33.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/031ff99b-b11f-40dc-9258-273ec97683f8.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/031ff99b-b11f-40dc-9258-273ec97683f8.fast5 deleted file mode 100644 index 75ae51c3..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/031ff99b-b11f-40dc-9258-273ec97683f8.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/03e0e732-cb7a-4084-8fc9-303180c83786.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/03e0e732-cb7a-4084-8fc9-303180c83786.fast5 deleted file mode 100644 index 54dfc5a9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/03e0e732-cb7a-4084-8fc9-303180c83786.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0457184e-6e09-4883-baf3-824d11101c43.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0457184e-6e09-4883-baf3-824d11101c43.fast5 deleted file mode 100644 index 9cb2e5ca..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0457184e-6e09-4883-baf3-824d11101c43.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/045f1e6a-9b5d-4840-bad9-c4b738b61267.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/045f1e6a-9b5d-4840-bad9-c4b738b61267.fast5 deleted file mode 100644 index db7db9c3..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/045f1e6a-9b5d-4840-bad9-c4b738b61267.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/046258fa-b951-43a1-bbed-66cdbeac8e71.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/046258fa-b951-43a1-bbed-66cdbeac8e71.fast5 deleted file mode 100644 index a90f7cbb..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/046258fa-b951-43a1-bbed-66cdbeac8e71.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/048d5d3a-16ed-4f36-aeb9-3311dd9dc593.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/048d5d3a-16ed-4f36-aeb9-3311dd9dc593.fast5 deleted file mode 100644 index 581ea228..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/048d5d3a-16ed-4f36-aeb9-3311dd9dc593.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04a0ee1e-0406-4394-87ba-a67344318a5d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04a0ee1e-0406-4394-87ba-a67344318a5d.fast5 deleted file mode 100644 index 914dcd22..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04a0ee1e-0406-4394-87ba-a67344318a5d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04c07133-cd56-48b9-9f16-86e12cacaf92.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04c07133-cd56-48b9-9f16-86e12cacaf92.fast5 deleted file mode 100644 index a8baccd5..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/04c07133-cd56-48b9-9f16-86e12cacaf92.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/052036a3-6af0-4650-9f96-e97e34c52bbc.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/052036a3-6af0-4650-9f96-e97e34c52bbc.fast5 deleted file mode 100644 index 07b67885..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/052036a3-6af0-4650-9f96-e97e34c52bbc.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0562aebd-b55b-4752-83eb-12323938c242.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0562aebd-b55b-4752-83eb-12323938c242.fast5 deleted file mode 100644 index 62403584..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0562aebd-b55b-4752-83eb-12323938c242.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0565fd27-4849-4d14-83ff-2864dc3e109e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0565fd27-4849-4d14-83ff-2864dc3e109e.fast5 deleted file mode 100644 index 80f37c10..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0565fd27-4849-4d14-83ff-2864dc3e109e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/05f48799-d4ca-4f54-90e2-de208c0c1711.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/05f48799-d4ca-4f54-90e2-de208c0c1711.fast5 deleted file mode 100644 index ca72fc87..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/05f48799-d4ca-4f54-90e2-de208c0c1711.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064b4a28-a036-46cb-b466-62b8486de288.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064b4a28-a036-46cb-b466-62b8486de288.fast5 deleted file mode 100644 index 394b23c7..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064b4a28-a036-46cb-b466-62b8486de288.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064ef037-67eb-49a4-9a72-e2b2e34cfe5c.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064ef037-67eb-49a4-9a72-e2b2e34cfe5c.fast5 deleted file mode 100644 index 1673509c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/064ef037-67eb-49a4-9a72-e2b2e34cfe5c.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/066c72de-139a-4514-aef9-36cc3927a2c6.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/066c72de-139a-4514-aef9-36cc3927a2c6.fast5 deleted file mode 100644 index 0606863e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/066c72de-139a-4514-aef9-36cc3927a2c6.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/069ce6e7-41b9-41b2-a6d8-8d39c16dbaa2.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/069ce6e7-41b9-41b2-a6d8-8d39c16dbaa2.fast5 deleted file mode 100644 index 6949297a..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/069ce6e7-41b9-41b2-a6d8-8d39c16dbaa2.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/06f0339b-75b5-4926-b1a7-878818b5fe67.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/06f0339b-75b5-4926-b1a7-878818b5fe67.fast5 deleted file mode 100644 index 23bc4879..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/06f0339b-75b5-4926-b1a7-878818b5fe67.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/074ebef4-edbd-4d2a-af6c-46512693a990.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/074ebef4-edbd-4d2a-af6c-46512693a990.fast5 deleted file mode 100644 index 7a4412ea..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/074ebef4-edbd-4d2a-af6c-46512693a990.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08239d1b-1710-4187-b96e-da861a0e4624.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08239d1b-1710-4187-b96e-da861a0e4624.fast5 deleted file mode 100644 index fbf1b2a1..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08239d1b-1710-4187-b96e-da861a0e4624.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/084af0ac-0334-4840-a3a5-3ff62464ae71.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/084af0ac-0334-4840-a3a5-3ff62464ae71.fast5 deleted file mode 100644 index eb88e842..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/084af0ac-0334-4840-a3a5-3ff62464ae71.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08db75dc-49a9-459d-afc8-5ed1d8e47901.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08db75dc-49a9-459d-afc8-5ed1d8e47901.fast5 deleted file mode 100644 index 3b5f900e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/08db75dc-49a9-459d-afc8-5ed1d8e47901.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/091fba78-028e-4ed2-a799-35e9ba64541c.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/091fba78-028e-4ed2-a799-35e9ba64541c.fast5 deleted file mode 100644 index 45760a9c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/091fba78-028e-4ed2-a799-35e9ba64541c.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/094a4c34-c97b-4b83-bd02-1f69e6ccadc0.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/094a4c34-c97b-4b83-bd02-1f69e6ccadc0.fast5 deleted file mode 100644 index 657bdd9c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/094a4c34-c97b-4b83-bd02-1f69e6ccadc0.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/09b7f97c-fb32-4a4a-84d9-c45dfc2b46d0.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/09b7f97c-fb32-4a4a-84d9-c45dfc2b46d0.fast5 deleted file mode 100644 index a231f366..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/09b7f97c-fb32-4a4a-84d9-c45dfc2b46d0.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a30e10c-26b5-4c23-a7ee-493e7b3ebffb.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a30e10c-26b5-4c23-a7ee-493e7b3ebffb.fast5 deleted file mode 100644 index fa60f26e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a30e10c-26b5-4c23-a7ee-493e7b3ebffb.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a86654b-30ec-4271-9882-b490de473b5e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a86654b-30ec-4271-9882-b490de473b5e.fast5 deleted file mode 100644 index d894d026..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a86654b-30ec-4271-9882-b490de473b5e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a92fbf4-99b4-40cd-98e7-93cfbddeb35e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a92fbf4-99b4-40cd-98e7-93cfbddeb35e.fast5 deleted file mode 100644 index 5e2f796f..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0a92fbf4-99b4-40cd-98e7-93cfbddeb35e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0af92aee-911c-4402-ba14-ecaabdb73548.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0af92aee-911c-4402-ba14-ecaabdb73548.fast5 deleted file mode 100644 index fa3cf776..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0af92aee-911c-4402-ba14-ecaabdb73548.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b168ee0-74c4-494d-a593-a4b4b538a9cb.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b168ee0-74c4-494d-a593-a4b4b538a9cb.fast5 deleted file mode 100644 index c2875493..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b168ee0-74c4-494d-a593-a4b4b538a9cb.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b8b3929-730d-42a6-84e0-5689b7439c71.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b8b3929-730d-42a6-84e0-5689b7439c71.fast5 deleted file mode 100644 index 16f67886..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0b8b3929-730d-42a6-84e0-5689b7439c71.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0bb9f17c-3b8f-486d-ac03-6550199a0a49.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0bb9f17c-3b8f-486d-ac03-6550199a0a49.fast5 deleted file mode 100644 index dabd9f3a..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0bb9f17c-3b8f-486d-ac03-6550199a0a49.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0c5e39bf-e1c5-4208-b110-9a00b55132e4.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0c5e39bf-e1c5-4208-b110-9a00b55132e4.fast5 deleted file mode 100644 index ded881b1..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0c5e39bf-e1c5-4208-b110-9a00b55132e4.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc2613c-9ade-4ec9-96c7-07ab2820bbd7.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc2613c-9ade-4ec9-96c7-07ab2820bbd7.fast5 deleted file mode 100644 index 918d9ffb..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc2613c-9ade-4ec9-96c7-07ab2820bbd7.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc85c6c-ed86-422e-a093-d2b81089cc6b.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc85c6c-ed86-422e-a093-d2b81089cc6b.fast5 deleted file mode 100644 index fd12d339..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0cc85c6c-ed86-422e-a093-d2b81089cc6b.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0d448640-aa67-4e58-9ce8-004ca23b0412.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0d448640-aa67-4e58-9ce8-004ca23b0412.fast5 deleted file mode 100644 index 6f277725..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0d448640-aa67-4e58-9ce8-004ca23b0412.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dad8e5f-77e3-4fd1-b569-b06f5b87d8c3.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dad8e5f-77e3-4fd1-b569-b06f5b87d8c3.fast5 deleted file mode 100644 index f5d2a2bd..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dad8e5f-77e3-4fd1-b569-b06f5b87d8c3.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dd4696c-a7dd-4e3a-9ce5-37a258b45373.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dd4696c-a7dd-4e3a-9ce5-37a258b45373.fast5 deleted file mode 100644 index 8bf46e75..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0dd4696c-a7dd-4e3a-9ce5-37a258b45373.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5018bc-45fc-40d4-8806-e22e07a915d0.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5018bc-45fc-40d4-8806-e22e07a915d0.fast5 deleted file mode 100644 index dde28d38..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5018bc-45fc-40d4-8806-e22e07a915d0.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e51c070-d577-4293-8389-bd34fdda9eac.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e51c070-d577-4293-8389-bd34fdda9eac.fast5 deleted file mode 100644 index 2f98326a..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e51c070-d577-4293-8389-bd34fdda9eac.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5ff4de-814b-4ee2-bf8f-3291b8bbdaae.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5ff4de-814b-4ee2-bf8f-3291b8bbdaae.fast5 deleted file mode 100644 index 671d9b60..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0e5ff4de-814b-4ee2-bf8f-3291b8bbdaae.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f06cd06-1136-4b10-b248-cd4324f6de22.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f06cd06-1136-4b10-b248-cd4324f6de22.fast5 deleted file mode 100644 index 3e6d8d9e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f06cd06-1136-4b10-b248-cd4324f6de22.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f3ca011-bb96-4fe2-92e2-31b0bac90d97.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f3ca011-bb96-4fe2-92e2-31b0bac90d97.fast5 deleted file mode 100644 index 6cc43a6b..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f3ca011-bb96-4fe2-92e2-31b0bac90d97.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f7db51f-ff49-45ea-b58a-9fb58daf249d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f7db51f-ff49-45ea-b58a-9fb58daf249d.fast5 deleted file mode 100644 index 474408a0..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0f7db51f-ff49-45ea-b58a-9fb58daf249d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0fd3ec80-6fb4-4378-bdb6-df4f84951049.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0fd3ec80-6fb4-4378-bdb6-df4f84951049.fast5 deleted file mode 100644 index 92cb2c71..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/0fd3ec80-6fb4-4378-bdb6-df4f84951049.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10361e9b-159a-447d-8cf0-1976515f00f4.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10361e9b-159a-447d-8cf0-1976515f00f4.fast5 deleted file mode 100644 index 8063d47e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10361e9b-159a-447d-8cf0-1976515f00f4.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10508138-2f5e-4405-99f4-46af4452893c.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10508138-2f5e-4405-99f4-46af4452893c.fast5 deleted file mode 100644 index 5973f9fb..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10508138-2f5e-4405-99f4-46af4452893c.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10ac42d4-2818-48f6-9d67-1c3019fde890.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10ac42d4-2818-48f6-9d67-1c3019fde890.fast5 deleted file mode 100644 index 7354cb08..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10ac42d4-2818-48f6-9d67-1c3019fde890.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10f98781-e47e-43c3-9006-6d73963ee710.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10f98781-e47e-43c3-9006-6d73963ee710.fast5 deleted file mode 100644 index b9cbcca6..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/10f98781-e47e-43c3-9006-6d73963ee710.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1147d9c6-c190-47e6-8007-2e0f18d88f2b.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1147d9c6-c190-47e6-8007-2e0f18d88f2b.fast5 deleted file mode 100644 index 1305c424..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1147d9c6-c190-47e6-8007-2e0f18d88f2b.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e4024c-1997-4372-b1d7-4c884cf58047.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e4024c-1997-4372-b1d7-4c884cf58047.fast5 deleted file mode 100644 index 6e4b39b9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e4024c-1997-4372-b1d7-4c884cf58047.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e944d1-a2c9-409c-ac72-9c1563443df7.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e944d1-a2c9-409c-ac72-9c1563443df7.fast5 deleted file mode 100644 index 701ff08b..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/11e944d1-a2c9-409c-ac72-9c1563443df7.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/123114b2-247c-4abc-be0c-3a94f02043a2.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/123114b2-247c-4abc-be0c-3a94f02043a2.fast5 deleted file mode 100644 index 151c589f..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/123114b2-247c-4abc-be0c-3a94f02043a2.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1294c94b-1dac-4c4c-9c36-e8e8996e7f09.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1294c94b-1dac-4c4c-9c36-e8e8996e7f09.fast5 deleted file mode 100644 index bb49e86f..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1294c94b-1dac-4c4c-9c36-e8e8996e7f09.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/12ac7997-50bc-4183-95c4-e953ad4eaad1.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/12ac7997-50bc-4183-95c4-e953ad4eaad1.fast5 deleted file mode 100644 index bb502c50..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/12ac7997-50bc-4183-95c4-e953ad4eaad1.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13265c3e-bbb3-4ebe-b4db-9fbb4bdaff01.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13265c3e-bbb3-4ebe-b4db-9fbb4bdaff01.fast5 deleted file mode 100644 index 3940a3f1..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13265c3e-bbb3-4ebe-b4db-9fbb4bdaff01.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1377f442-7e38-4c3f-aacb-e8049ad884fe.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1377f442-7e38-4c3f-aacb-e8049ad884fe.fast5 deleted file mode 100644 index 7576a1b9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1377f442-7e38-4c3f-aacb-e8049ad884fe.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/137cae6b-0009-4ee2-8a0e-7a2e88179c16.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/137cae6b-0009-4ee2-8a0e-7a2e88179c16.fast5 deleted file mode 100644 index 35e96ca3..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/137cae6b-0009-4ee2-8a0e-7a2e88179c16.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/139c8fcc-8dcb-4cf7-aa52-632718587fe7.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/139c8fcc-8dcb-4cf7-aa52-632718587fe7.fast5 deleted file mode 100644 index 788a1c1b..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/139c8fcc-8dcb-4cf7-aa52-632718587fe7.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13bc3b77-a88e-44b9-b119-cd56aa972f61.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13bc3b77-a88e-44b9-b119-cd56aa972f61.fast5 deleted file mode 100644 index 9ccdb578..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13bc3b77-a88e-44b9-b119-cd56aa972f61.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13dbd26f-978f-49ad-9ae6-ca909083b6ce.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13dbd26f-978f-49ad-9ae6-ca909083b6ce.fast5 deleted file mode 100644 index 55a158d9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/13dbd26f-978f-49ad-9ae6-ca909083b6ce.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/151bd13c-c12f-41a6-be02-e97e70a57814.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/151bd13c-c12f-41a6-be02-e97e70a57814.fast5 deleted file mode 100644 index d0d6d93e..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/151bd13c-c12f-41a6-be02-e97e70a57814.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16325928-3440-4a49-94c5-a93b4f6da961.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16325928-3440-4a49-94c5-a93b4f6da961.fast5 deleted file mode 100644 index 18b0a365..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16325928-3440-4a49-94c5-a93b4f6da961.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16d9892d-bead-4a6f-b6c5-736c6f602fc1.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16d9892d-bead-4a6f-b6c5-736c6f602fc1.fast5 deleted file mode 100644 index cff07dc9..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/16d9892d-bead-4a6f-b6c5-736c6f602fc1.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1721053e-98f4-47a1-ab93-f75bc1c03c79.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1721053e-98f4-47a1-ab93-f75bc1c03c79.fast5 deleted file mode 100644 index de9158fa..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1721053e-98f4-47a1-ab93-f75bc1c03c79.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1730fabf-f1ac-4a02-aa2e-21dcd14fed00.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1730fabf-f1ac-4a02-aa2e-21dcd14fed00.fast5 deleted file mode 100644 index a6ba5f39..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1730fabf-f1ac-4a02-aa2e-21dcd14fed00.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1783d96c-3955-4405-b765-472c6286be46.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1783d96c-3955-4405-b765-472c6286be46.fast5 deleted file mode 100644 index 62e40688..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1783d96c-3955-4405-b765-472c6286be46.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/180da5c9-4574-48ab-8e6a-8f8a73767e30.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/180da5c9-4574-48ab-8e6a-8f8a73767e30.fast5 deleted file mode 100644 index 2b1b28d1..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/180da5c9-4574-48ab-8e6a-8f8a73767e30.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1870a88c-439f-4125-a06c-38b1bf4416e4.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1870a88c-439f-4125-a06c-38b1bf4416e4.fast5 deleted file mode 100644 index c2fe6409..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1870a88c-439f-4125-a06c-38b1bf4416e4.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/188b5eae-fce2-439c-b490-aff6c4327499.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/188b5eae-fce2-439c-b490-aff6c4327499.fast5 deleted file mode 100644 index 75666dfd..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/188b5eae-fce2-439c-b490-aff6c4327499.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18cef30b-9fe5-40b4-9094-0389bb5aeb8e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18cef30b-9fe5-40b4-9094-0389bb5aeb8e.fast5 deleted file mode 100644 index 1159b028..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18cef30b-9fe5-40b4-9094-0389bb5aeb8e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18ee103f-1cf8-4694-b2e7-ac228fe70ccd.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18ee103f-1cf8-4694-b2e7-ac228fe70ccd.fast5 deleted file mode 100644 index 0169c007..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/18ee103f-1cf8-4694-b2e7-ac228fe70ccd.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190a9ebe-4d5f-43c0-a495-82ff58944d07.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190a9ebe-4d5f-43c0-a495-82ff58944d07.fast5 deleted file mode 100644 index 7214ef1c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190a9ebe-4d5f-43c0-a495-82ff58944d07.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190c4417-c4cf-40fe-a0df-db4b495a3f77.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190c4417-c4cf-40fe-a0df-db4b495a3f77.fast5 deleted file mode 100644 index 6482dd0d..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/190c4417-c4cf-40fe-a0df-db4b495a3f77.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a0c9927-e355-49c3-877a-e6b95bc1a402.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a0c9927-e355-49c3-877a-e6b95bc1a402.fast5 deleted file mode 100644 index 4b5a0927..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a0c9927-e355-49c3-877a-e6b95bc1a402.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a276f1c-5a5b-4ed2-b071-87f59f7c5233.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a276f1c-5a5b-4ed2-b071-87f59f7c5233.fast5 deleted file mode 100644 index 180405a0..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a276f1c-5a5b-4ed2-b071-87f59f7c5233.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a5c9192-aded-4e94-8dcb-9c04a402978e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a5c9192-aded-4e94-8dcb-9c04a402978e.fast5 deleted file mode 100644 index bbca83ff..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1a5c9192-aded-4e94-8dcb-9c04a402978e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1af84d7e-8fc6-4dba-8750-a0d701f36d1d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1af84d7e-8fc6-4dba-8750-a0d701f36d1d.fast5 deleted file mode 100644 index 1584697f..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1af84d7e-8fc6-4dba-8750-a0d701f36d1d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b753736-87b1-4753-ab1d-bfd7e2d94e9e.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b753736-87b1-4753-ab1d-bfd7e2d94e9e.fast5 deleted file mode 100644 index 7fe17b9c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b753736-87b1-4753-ab1d-bfd7e2d94e9e.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b760e8d-7b17-47e0-ba96-5755fc4ddd63.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b760e8d-7b17-47e0-ba96-5755fc4ddd63.fast5 deleted file mode 100644 index 9be34c30..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b760e8d-7b17-47e0-ba96-5755fc4ddd63.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b86544f-8075-46a2-91f4-baac36216ac2.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b86544f-8075-46a2-91f4-baac36216ac2.fast5 deleted file mode 100644 index b8f6e8b0..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1b86544f-8075-46a2-91f4-baac36216ac2.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1bd0dad7-1600-44a2-90b8-d5cd7b7caa6d.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1bd0dad7-1600-44a2-90b8-d5cd7b7caa6d.fast5 deleted file mode 100644 index d831bc3c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1bd0dad7-1600-44a2-90b8-d5cd7b7caa6d.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d568051-bdd6-4204-ac34-97b5a3f7375c.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d568051-bdd6-4204-ac34-97b5a3f7375c.fast5 deleted file mode 100644 index 8601ad23..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d568051-bdd6-4204-ac34-97b5a3f7375c.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d650a9e-4e67-456a-9abe-bd34b238abe4.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d650a9e-4e67-456a-9abe-bd34b238abe4.fast5 deleted file mode 100644 index f9acbd8c..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d650a9e-4e67-456a-9abe-bd34b238abe4.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d86c2b3-c2c6-43a1-97ed-8c1f0cbf6476.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d86c2b3-c2c6-43a1-97ed-8c1f0cbf6476.fast5 deleted file mode 100644 index 1d388f51..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/1d86c2b3-c2c6-43a1-97ed-8c1f0cbf6476.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/20586d1a-2cd0-45aa-abc2-04ac66d8ea46.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/20586d1a-2cd0-45aa-abc2-04ac66d8ea46.fast5 deleted file mode 100644 index d3e2b140..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/20586d1a-2cd0-45aa-abc2-04ac66d8ea46.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/206626c5-ccf2-4927-9987-164f627bdede.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/206626c5-ccf2-4927-9987-164f627bdede.fast5 deleted file mode 100644 index f06c0ea4..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/206626c5-ccf2-4927-9987-164f627bdede.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2109d790-67ec-4fd1-8931-6c7e61908ff3.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2109d790-67ec-4fd1-8931-6c7e61908ff3.fast5 deleted file mode 100644 index 17bf5a6b..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2109d790-67ec-4fd1-8931-6c7e61908ff3.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2166cca5-c0ab-49eb-aec1-fec09bdfbd83.fast5 b/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2166cca5-c0ab-49eb-aec1-fec09bdfbd83.fast5 deleted file mode 100644 index 6cd7efe3..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fast5/100read_fast5/2166cca5-c0ab-49eb-aec1-fec09bdfbd83.fast5 and /dev/null differ diff --git a/tests/data/genomics/sarscov2/nanopore/fastq/test.fastq.gz b/tests/data/genomics/sarscov2/nanopore/fastq/test.fastq.gz deleted file mode 100644 index 36cf71dd..00000000 Binary files a/tests/data/genomics/sarscov2/nanopore/fastq/test.fastq.gz and /dev/null differ diff --git a/tests/software/abacas/main.nf b/tests/software/abacas/main.nf new file mode 100644 index 00000000..00020039 --- /dev/null +++ b/tests/software/abacas/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { ABACAS } from '../../../software/abacas/main.nf' addParams ( options: ['args' : '-m -p nucmer'] ) + +workflow test_abacas { + + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['scaffolds_fasta'], checkIfExists: true) + ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + ABACAS ( input, fasta ) +} diff --git a/tests/software/abacas/test.yml b/tests/software/abacas/test.yml new file mode 100644 index 00000000..ec0e906b --- /dev/null +++ b/tests/software/abacas/test.yml @@ -0,0 +1,24 @@ +- name: abacas + command: nextflow run ./tests/software/abacas -entry test_abacas -c tests/config/nextflow.config + tags: + - abacas + files: + - path: output/abacas/test.abacas.bin + - path: output/abacas/test.abacas.crunch + md5sum: 9a95358a9bd8ee97d1f2253d95623a17 + - path: output/abacas/test.abacas.fasta + md5sum: 5e6c403d3850d52f6bde956fa2403b13 + - path: output/abacas/test.abacas.gaps + md5sum: 5361af445b8d18a85c3af6527a97c89a + - path: output/abacas/test.abacas.gaps.tab + md5sum: 193024ec9e5a553573519b218eb06e29 + - path: output/abacas/test.abacas.nucmer.delta + - path: output/abacas/test.abacas.nucmer.filtered.delta + - path: output/abacas/test.abacas.nucmer.tiling + md5sum: 0adaa0ce800d92c149a523d447148d95 + - path: output/abacas/test.abacas.tab + md5sum: a5b9b452516f519a4201ff809655ef69 + - path: output/abacas/test.abacas.unused.contigs.out + md5sum: d41d8cd98f00b204e9800998ecf8427e + - path: output/abacas/test.abacas.MULTIFASTA.fa + md5sum: 46c899ad70dcef8d14b5829fd8fbab82 diff --git a/tests/software/adapterremoval/test.yml b/tests/software/adapterremoval/test.yml index 7666bc6d..4900a803 100644 --- a/tests/software/adapterremoval/test.yml +++ b/tests/software/adapterremoval/test.yml @@ -1,7 +1,6 @@ - name: adapterremoval test_adapterremoval_single_end command: nextflow run tests/software/adapterremoval -entry test_adapterremoval_single_end -c tests/config/nextflow.config tags: - - adapterremoval_single_end - adapterremoval files: - path: output/adapterremoval/test.log @@ -12,7 +11,6 @@ - name: adapterremoval test_adapterremoval_paired_end command: nextflow run tests/software/adapterremoval -entry test_adapterremoval_paired_end -c tests/config/nextflow.config tags: - - adapterremoval_paired_end - adapterremoval files: - path: output/adapterremoval/test.pair2.trimmed.fastq.gz @@ -25,7 +23,6 @@ - name: adapterremoval test_adapterremoval_paired_end_collapse command: nextflow run tests/software/adapterremoval -entry test_adapterremoval_paired_end_collapse -c tests/config/nextflow.config tags: - - adapterremoval_paired_end_collapse - adapterremoval files: - path: output/adapterremoval/test.log diff --git a/tests/software/artic/guppyplex/main.nf b/tests/software/artic/guppyplex/main.nf new file mode 100644 index 00000000..7be57f2c --- /dev/null +++ b/tests/software/artic/guppyplex/main.nf @@ -0,0 +1,29 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { ARTIC_GUPPYPLEX } from '../../../../software/artic/guppyplex/main.nf' addParams( options: [:] ) + +process STAGE_FASTQ_DIR { + input: + tuple val(meta), path(fastq_file) + + output: + tuple val(meta), path('fastq'), emit: fastq_dir + + script: + """ + mkdir fastq + mv ${fastq_file} fastq + """ +} + +workflow test_artic_guppyplex { + + input = [ [ id:'test' ], + file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true) ] + + STAGE_FASTQ_DIR ( input ) + + ARTIC_GUPPYPLEX ( STAGE_FASTQ_DIR.out.fastq_dir ) +} diff --git a/tests/software/artic/guppyplex/test.yml b/tests/software/artic/guppyplex/test.yml new file mode 100644 index 00000000..c783957b --- /dev/null +++ b/tests/software/artic/guppyplex/test.yml @@ -0,0 +1,7 @@ +- name: artic guppyplex + command: nextflow run tests/software/artic/guppyplex -entry test_artic_guppyplex -c tests/config/nextflow.config + tags: + - artic + - artic/guppyplex + files: + - path: output/artic/test.fastq.gz diff --git a/tests/software/artic/minion/main.nf b/tests/software/artic/minion/main.nf new file mode 100644 index 00000000..3883fb44 --- /dev/null +++ b/tests/software/artic/minion/main.nf @@ -0,0 +1,21 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UNTAR } from '../../../../software/untar/main.nf' +include { ARTIC_MINION } from '../../../../software/artic/minion/main.nf' addParams( fast5_dir: true, sequencing_summary: true, artic_minion_medaka_model:false ) + +workflow test_artic_minion { + + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true) ] + fast5_tar = [ file(params.test_data['sarscov2']['nanopore']['fast5_tar_gz'], checkIfExists: true) ] + sequencing_summary = [ file(params.test_data['sarscov2']['nanopore']['test_sequencing_summary'], checkIfExists: true) ] + fasta = [ file('https://github.com/artic-network/primer-schemes/raw/master/nCoV-2019/V3/nCoV-2019.reference.fasta', checkIfExists: true) ] + bed = [ file('https://github.com/artic-network/primer-schemes/raw/master/nCoV-2019/V3/nCoV-2019.primer.bed', checkIfExists: true) ] + dummy_file = [ ] + + fast5_dir = UNTAR ( fast5_tar ).untar + + ARTIC_MINION ( input, fast5_dir, sequencing_summary, fasta, bed, dummy_file, 'nCoV-2019', '3') +} diff --git a/tests/software/artic/minion/test.yml b/tests/software/artic/minion/test.yml new file mode 100644 index 00000000..4d1c3bd4 --- /dev/null +++ b/tests/software/artic/minion/test.yml @@ -0,0 +1,261 @@ +- name: artic minion + command: nextflow run tests/software/artic/minion -entry test_artic_minion -c tests/config/nextflow.config + tags: + - artic + - artic/minion + files: + - path: output/artic/test.1.vcf + md5sum: f0278719cbb853addcad74b73d810a24 + - path: output/artic/test.2.vcf + md5sum: f0278719cbb853addcad74b73d810a24 + - path: output/artic/test.alignreport.er + md5sum: ddfff35c7ebc9837530c78f7a213cea0 + - path: output/artic/test.alignreport.txt + md5sum: 0fcadf1467ac253476b2d43bbfa36616 + - path: output/artic/test.consensus.fasta + md5sum: 60ace9fea33aca4c13f3502e330bff85 + - path: output/artic/test.coverage_mask.txt + md5sum: 7abd414756c444c86766123a60687ed1 + - path: output/artic/test.coverage_mask.txt.1.depths + md5sum: d4170a48491e12f34b0a15a336bdf5e6 + - path: output/artic/test.coverage_mask.txt.2.depths + md5sum: 130f85d80c22fccc3e0bbd9de12d310d + - path: output/artic/test.fail.vcf + md5sum: e6e184f1fa153868e3acea0eab42e484 + - path: output/artic/test.fastq.gz.index + md5sum: eaa2b34db5a53fb2d410c5b3bf857fd9 + - path: output/artic/test.fastq.gz.index.fai + md5sum: 81d718eeaaaae68cb33003f56194e956 + - path: output/artic/test.fastq.gz.index.gzi + md5sum: 7dea362b3fac8e00956a4952a3d4f474 + - path: output/artic/test.fastq.gz.index.readdb + md5sum: 3c6296842e91578db93688b4021c8947 + - path: output/artic/test.merged.vcf + md5sum: e6e184f1fa153868e3acea0eab42e484 + - path: output/artic/test.minion.log.txt + contains: + - 'artic_vcf_merge' + - path: output/artic/test.muscle.in.fasta + md5sum: 40ae4c89de797d1548c642f0da7a86cc + - path: output/artic/test.muscle.out.fasta + md5sum: 40ae4c89de797d1548c642f0da7a86cc + - path: output/artic/test.pass.vcf.gz + md5sum: baeafcfc2f738cce771ba895d66e9e01 + - path: output/artic/test.pass.vcf.gz.tbi + md5sum: 4cb176febbc8c26d717a6c6e67b9c905 + - path: output/artic/test.preconsensus.fasta + md5sum: 12b16397bae7c68d38150571a6ac6185 + - path: output/artic/test.primers.vcf + md5sum: e6e184f1fa153868e3acea0eab42e484 + - path: output/artic/test.primersitereport.txt + md5sum: d41d8cd98f00b204e9800998ecf8427e + - path: output/artic/test.primertrimmed.rg.sorted.bam + - path: output/artic/test.primertrimmed.rg.sorted.bam.bai + md5sum: 0d76977b2e36046cc176112776c5fa4e + - path: output/artic/test.sorted.bam + md5sum: 292611ae9885df12575b80853cb5508b + - path: output/artic/test.sorted.bam.bai + md5sum: 0d76977b2e36046cc176112776c5fa4e + - path: output/artic/test.trimmed.rg.sorted.bam + - path: output/artic/test.trimmed.rg.sorted.bam.bai + md5sum: 0d76977b2e36046cc176112776c5fa4e + - path: output/untar/fast5/100read_fast5/00068f7a-51b3-4933-8fc6-7d6e29181ff9.fast5 + md5sum: b7aeb3cc877d858f97144d45551264bc + - path: output/untar/fast5/100read_fast5/001ed67f-906f-4f37-9770-85d40f5ffee6.fast5 + md5sum: add9b8658095173f7cef6fc23236d913 + - path: output/untar/fast5/100read_fast5/0043238c-3a78-48f1-a8ec-d492280da6e4.fast5 + md5sum: 11d83db48d3b284017b919d476e44294 + - path: output/untar/fast5/100read_fast5/004a65aa-6700-4ad7-9550-dc59f8708908.fast5 + md5sum: fb9f124a05af59ea3ede371cd48e404c + - path: output/untar/fast5/100read_fast5/00c6481f-9022-4173-9b74-f375c34b9a9b.fast5 + md5sum: c186053a4fee2d509e1d108be8e131e1 + - path: output/untar/fast5/100read_fast5/00da3999-12fd-449d-bd07-32a879667a3d.fast5 + md5sum: ec051e5ce357d632ff740a88087a08fd + - path: output/untar/fast5/100read_fast5/018c4b52-48fa-4cc8-a7b4-500f41420279.fast5 + md5sum: 9d5bae9c9df0105b3b329777977d6f34 + - path: output/untar/fast5/100read_fast5/01faaaa1-eca2-4bcd-8666-b4d69497107e.fast5 + md5sum: 5855c80a192a242f03a93b74f12dfa46 + - path: output/untar/fast5/100read_fast5/02085a68-dc6e-4275-bd1e-f112fed3bd83.fast5 + md5sum: 6b30e06080aab94b6fa8f476e537f3d2 + - path: output/untar/fast5/100read_fast5/022647b9-0e16-4318-a794-c5749705b67d.fast5 + md5sum: 6606f2661a5463772f4ee30a3dba520e + - path: output/untar/fast5/100read_fast5/022fc908-aa6e-4d29-a5ad-6a30a9da7e3b.fast5 + md5sum: 53d611cf6465ef914392c11b88339ba0 + - path: output/untar/fast5/100read_fast5/02445dc2-39ee-49f1-8a42-51ebfea52c33.fast5 + md5sum: f7c5844165cbc0566ce1569184fc4213 + - path: output/untar/fast5/100read_fast5/031ff99b-b11f-40dc-9258-273ec97683f8.fast5 + md5sum: e78faae6230537a20497d3114cffcafd + - path: output/untar/fast5/100read_fast5/03e0e732-cb7a-4084-8fc9-303180c83786.fast5 + md5sum: 27c8ce19a0955d045053a6925e249ae4 + - path: output/untar/fast5/100read_fast5/0457184e-6e09-4883-baf3-824d11101c43.fast5 + md5sum: 7a89c45ae6b360bc585c8b14196ab3f7 + - path: output/untar/fast5/100read_fast5/045f1e6a-9b5d-4840-bad9-c4b738b61267.fast5 + md5sum: ee0c3e5fa1f6820968482594f45e8948 + - path: output/untar/fast5/100read_fast5/046258fa-b951-43a1-bbed-66cdbeac8e71.fast5 + md5sum: 262d3ee396bab6014505b25ba88cea90 + - path: output/untar/fast5/100read_fast5/048d5d3a-16ed-4f36-aeb9-3311dd9dc593.fast5 + md5sum: deea9c03b10aa287f873779baea2a649 + - path: output/untar/fast5/100read_fast5/04a0ee1e-0406-4394-87ba-a67344318a5d.fast5 + md5sum: 7f43a0e0de0053a63a28e36374ec20b4 + - path: output/untar/fast5/100read_fast5/04c07133-cd56-48b9-9f16-86e12cacaf92.fast5 + md5sum: d607992919072ddb025d766d8ba1a465 + - path: output/untar/fast5/100read_fast5/052036a3-6af0-4650-9f96-e97e34c52bbc.fast5 + md5sum: 22ccc03bee288edfc589d5f4b11cb70d + - path: output/untar/fast5/100read_fast5/0562aebd-b55b-4752-83eb-12323938c242.fast5 + md5sum: 1668668f2d0658a6e3417b08ea093c43 + - path: output/untar/fast5/100read_fast5/0565fd27-4849-4d14-83ff-2864dc3e109e.fast5 + md5sum: 649ff949e10052b877d9ddb7d6a19009 + - path: output/untar/fast5/100read_fast5/05f48799-d4ca-4f54-90e2-de208c0c1711.fast5 + md5sum: 5bddb9c020ddd233adc399c806186af6 + - path: output/untar/fast5/100read_fast5/064b4a28-a036-46cb-b466-62b8486de288.fast5 + md5sum: 4f0d1d5400caa14c376c5c2ba5cf4e90 + - path: output/untar/fast5/100read_fast5/064ef037-67eb-49a4-9a72-e2b2e34cfe5c.fast5 + md5sum: e8420b20501c06a31223204611aacd44 + - path: output/untar/fast5/100read_fast5/066c72de-139a-4514-aef9-36cc3927a2c6.fast5 + md5sum: f703f4942aaa470e2d00706687cea430 + - path: output/untar/fast5/100read_fast5/069ce6e7-41b9-41b2-a6d8-8d39c16dbaa2.fast5 + md5sum: 4ef4d47bf346c9cca805e991a6f5400b + - path: output/untar/fast5/100read_fast5/06f0339b-75b5-4926-b1a7-878818b5fe67.fast5 + md5sum: 163a97396e5cf91c40fab7432f52d101 + - path: output/untar/fast5/100read_fast5/074ebef4-edbd-4d2a-af6c-46512693a990.fast5 + md5sum: da9798ae314dca12f69ef45c10c8a5a7 + - path: output/untar/fast5/100read_fast5/08239d1b-1710-4187-b96e-da861a0e4624.fast5 + md5sum: 8ff2a720e61c52a29e2863d68f84c917 + - path: output/untar/fast5/100read_fast5/084af0ac-0334-4840-a3a5-3ff62464ae71.fast5 + md5sum: 3c2f27f6c21eefa53eafaa70252f9f49 + - path: output/untar/fast5/100read_fast5/08db75dc-49a9-459d-afc8-5ed1d8e47901.fast5 + md5sum: 6f25bb694f859d53b9dfd4047610d97f + - path: output/untar/fast5/100read_fast5/091fba78-028e-4ed2-a799-35e9ba64541c.fast5 + md5sum: 58da6a195dad9cb15fb5ebb76f9ecd19 + - path: output/untar/fast5/100read_fast5/094a4c34-c97b-4b83-bd02-1f69e6ccadc0.fast5 + md5sum: adfb65496a10bae743e3f0e144220b43 + - path: output/untar/fast5/100read_fast5/09b7f97c-fb32-4a4a-84d9-c45dfc2b46d0.fast5 + md5sum: fcce7b510edcf012eae95662370d663c + - path: output/untar/fast5/100read_fast5/0a30e10c-26b5-4c23-a7ee-493e7b3ebffb.fast5 + md5sum: fd730b0b9e01a9ce3a0a4f7b39ee838e + - path: output/untar/fast5/100read_fast5/0a86654b-30ec-4271-9882-b490de473b5e.fast5 + md5sum: 9114d618e2713681e7db42932d4b5e92 + - path: output/untar/fast5/100read_fast5/0a92fbf4-99b4-40cd-98e7-93cfbddeb35e.fast5 + md5sum: 516a3d935f9cef2abf4eb0a781ba8d19 + - path: output/untar/fast5/100read_fast5/0af92aee-911c-4402-ba14-ecaabdb73548.fast5 + md5sum: ccbcd71ecb9a46bd2b657f2e2c11354a + - path: output/untar/fast5/100read_fast5/0b168ee0-74c4-494d-a593-a4b4b538a9cb.fast5 + md5sum: 9f8abf45b60ac800d4195e79bad26ea1 + - path: output/untar/fast5/100read_fast5/0b8b3929-730d-42a6-84e0-5689b7439c71.fast5 + md5sum: 1d03a26a58ec0668a1c54cc38fb65c3a + - path: output/untar/fast5/100read_fast5/0bb9f17c-3b8f-486d-ac03-6550199a0a49.fast5 + md5sum: b713ea7f1cd45b5f5041a3a97e87106d + - path: output/untar/fast5/100read_fast5/0c5e39bf-e1c5-4208-b110-9a00b55132e4.fast5 + md5sum: 31e32600bbf9b3523233260868468b00 + - path: output/untar/fast5/100read_fast5/0cc2613c-9ade-4ec9-96c7-07ab2820bbd7.fast5 + md5sum: f84eb9bf15a0af603b9f656fb469f305 + - path: output/untar/fast5/100read_fast5/0cc85c6c-ed86-422e-a093-d2b81089cc6b.fast5 + md5sum: 536ad1a1c1f8e5c17d8183c7950034a0 + - path: output/untar/fast5/100read_fast5/0d448640-aa67-4e58-9ce8-004ca23b0412.fast5 + md5sum: c97a3ae4fcb9123ea4ca89e8a6e391af + - path: output/untar/fast5/100read_fast5/0dad8e5f-77e3-4fd1-b569-b06f5b87d8c3.fast5 + md5sum: 1225db8f9879447708aa85f8a096aafb + - path: output/untar/fast5/100read_fast5/0dd4696c-a7dd-4e3a-9ce5-37a258b45373.fast5 + md5sum: 361426f4430ad8edadae17ab4ddfd7cf + - path: output/untar/fast5/100read_fast5/0e5018bc-45fc-40d4-8806-e22e07a915d0.fast5 + md5sum: f21cba587246cf4c9e0db4f4914db634 + - path: output/untar/fast5/100read_fast5/0e51c070-d577-4293-8389-bd34fdda9eac.fast5 + md5sum: e426287a64d0fe356878673c7990e457 + - path: output/untar/fast5/100read_fast5/0e5ff4de-814b-4ee2-bf8f-3291b8bbdaae.fast5 + md5sum: a2429274097a3762eb8fd9290208e35d + - path: output/untar/fast5/100read_fast5/0f06cd06-1136-4b10-b248-cd4324f6de22.fast5 + md5sum: 4ddea20115ae9875bff711cb0f2cbcd3 + - path: output/untar/fast5/100read_fast5/0f3ca011-bb96-4fe2-92e2-31b0bac90d97.fast5 + md5sum: df29e75d7a273d3b6a75e807a814993a + - path: output/untar/fast5/100read_fast5/0f7db51f-ff49-45ea-b58a-9fb58daf249d.fast5 + md5sum: 671423af2189b08850eaab29b42566ca + - path: output/untar/fast5/100read_fast5/0fd3ec80-6fb4-4378-bdb6-df4f84951049.fast5 + md5sum: 7376ee3f340c041afda6bbd2c3df353f + - path: output/untar/fast5/100read_fast5/10361e9b-159a-447d-8cf0-1976515f00f4.fast5 + md5sum: f73c994cb9b6ec891ea936c54aa2f7a2 + - path: output/untar/fast5/100read_fast5/10508138-2f5e-4405-99f4-46af4452893c.fast5 + md5sum: c6a0b38fcd5a4be72793b43149ba04be + - path: output/untar/fast5/100read_fast5/10ac42d4-2818-48f6-9d67-1c3019fde890.fast5 + md5sum: 5e5ae354e0aa8f985f5e5e8bd811eb73 + - path: output/untar/fast5/100read_fast5/10f98781-e47e-43c3-9006-6d73963ee710.fast5 + md5sum: 93f6e790fc41c1e266b1c4b18f2ab0ee + - path: output/untar/fast5/100read_fast5/1147d9c6-c190-47e6-8007-2e0f18d88f2b.fast5 + md5sum: 15fbf533ac4a98124cb043abef23d0ba + - path: output/untar/fast5/100read_fast5/11e4024c-1997-4372-b1d7-4c884cf58047.fast5 + md5sum: 788bb232b0b3b059a7f39a72c1f8d1e5 + - path: output/untar/fast5/100read_fast5/11e944d1-a2c9-409c-ac72-9c1563443df7.fast5 + md5sum: 31975cf5048b6af550f14b1e217a8f5d + - path: output/untar/fast5/100read_fast5/123114b2-247c-4abc-be0c-3a94f02043a2.fast5 + md5sum: 633689761b59db120dcc5d560587416c + - path: output/untar/fast5/100read_fast5/1294c94b-1dac-4c4c-9c36-e8e8996e7f09.fast5 + md5sum: 161fc1cb25ce05775f81e778f5bb8e93 + - path: output/untar/fast5/100read_fast5/12ac7997-50bc-4183-95c4-e953ad4eaad1.fast5 + md5sum: 4a3a4966ede5f0251a65c93c99a66eeb + - path: output/untar/fast5/100read_fast5/13265c3e-bbb3-4ebe-b4db-9fbb4bdaff01.fast5 + md5sum: ad799b6a66cb2d8c08acbf232c23bf49 + - path: output/untar/fast5/100read_fast5/1377f442-7e38-4c3f-aacb-e8049ad884fe.fast5 + md5sum: f202ebf7b46bf289b9b1d9e82d8e96db + - path: output/untar/fast5/100read_fast5/137cae6b-0009-4ee2-8a0e-7a2e88179c16.fast5 + md5sum: 6afbc7da1554e1d5328f6e47cc086772 + - path: output/untar/fast5/100read_fast5/139c8fcc-8dcb-4cf7-aa52-632718587fe7.fast5 + md5sum: 6aade40bab37e9a4fe008d21732c6790 + - path: output/untar/fast5/100read_fast5/13bc3b77-a88e-44b9-b119-cd56aa972f61.fast5 + md5sum: 1d668e59bc724ce47d17f2a4850a9b43 + - path: output/untar/fast5/100read_fast5/13dbd26f-978f-49ad-9ae6-ca909083b6ce.fast5 + md5sum: 2106344b03e8b834c20fef4406cf2aa6 + - path: output/untar/fast5/100read_fast5/151bd13c-c12f-41a6-be02-e97e70a57814.fast5 + md5sum: 8718a5b883496cde586dbbb256f13bb2 + - path: output/untar/fast5/100read_fast5/16325928-3440-4a49-94c5-a93b4f6da961.fast5 + md5sum: da871b8be0d502e05ba6b105f9bd4673 + - path: output/untar/fast5/100read_fast5/16d9892d-bead-4a6f-b6c5-736c6f602fc1.fast5 + md5sum: b7844e2a38c120fad74dec350dfd8adf + - path: output/untar/fast5/100read_fast5/1721053e-98f4-47a1-ab93-f75bc1c03c79.fast5 + md5sum: 839e7a9335d54c6dd185a1a9486d9b9e + - path: output/untar/fast5/100read_fast5/1730fabf-f1ac-4a02-aa2e-21dcd14fed00.fast5 + md5sum: ee53b732d0c4dd87dd8742cf4346b311 + - path: output/untar/fast5/100read_fast5/1783d96c-3955-4405-b765-472c6286be46.fast5 + md5sum: 6bcbda04b219c8bf971253cc2423a527 + - path: output/untar/fast5/100read_fast5/180da5c9-4574-48ab-8e6a-8f8a73767e30.fast5 + md5sum: 8ef4d3255d87a6fb0fa24b621b72e75a + - path: output/untar/fast5/100read_fast5/1870a88c-439f-4125-a06c-38b1bf4416e4.fast5 + md5sum: 62db261bbc152a16b0d910680202ba8a + - path: output/untar/fast5/100read_fast5/188b5eae-fce2-439c-b490-aff6c4327499.fast5 + md5sum: c3157f03f56d03820726ff8ff981b8c9 + - path: output/untar/fast5/100read_fast5/18cef30b-9fe5-40b4-9094-0389bb5aeb8e.fast5 + md5sum: 9fc63db9ca59ac6ff6fa15cfe55b3106 + - path: output/untar/fast5/100read_fast5/18ee103f-1cf8-4694-b2e7-ac228fe70ccd.fast5 + md5sum: 24dc02b54e6712c583f5977bce1d3cd3 + - path: output/untar/fast5/100read_fast5/190a9ebe-4d5f-43c0-a495-82ff58944d07.fast5 + md5sum: 489aa874a1c7c0603076f7ef359d6ace + - path: output/untar/fast5/100read_fast5/190c4417-c4cf-40fe-a0df-db4b495a3f77.fast5 + md5sum: 997a74664ddab756907435890465d554 + - path: output/untar/fast5/100read_fast5/1a0c9927-e355-49c3-877a-e6b95bc1a402.fast5 + md5sum: fdc9f5f461d0e30ad29cf84e03b6c18d + - path: output/untar/fast5/100read_fast5/1a276f1c-5a5b-4ed2-b071-87f59f7c5233.fast5 + md5sum: 6269d04009267b7e0df724d7ce355346 + - path: output/untar/fast5/100read_fast5/1a5c9192-aded-4e94-8dcb-9c04a402978e.fast5 + md5sum: 78ce5c5d770d7905bc1986203d69ed49 + - path: output/untar/fast5/100read_fast5/1af84d7e-8fc6-4dba-8750-a0d701f36d1d.fast5 + md5sum: ed5970f92ecdcce95f84dbb1bd275b8e + - path: output/untar/fast5/100read_fast5/1b753736-87b1-4753-ab1d-bfd7e2d94e9e.fast5 + md5sum: 6b5a2fd8b445d4e43eef6d8597932d88 + - path: output/untar/fast5/100read_fast5/1b760e8d-7b17-47e0-ba96-5755fc4ddd63.fast5 + md5sum: 43eb9e8276e9d0870a4c74882d42e5a0 + - path: output/untar/fast5/100read_fast5/1b86544f-8075-46a2-91f4-baac36216ac2.fast5 + md5sum: d6266147405391c00aa4dc0ad6797532 + - path: output/untar/fast5/100read_fast5/1bd0dad7-1600-44a2-90b8-d5cd7b7caa6d.fast5 + md5sum: 863226172b856834a779eb2013c3a765 + - path: output/untar/fast5/100read_fast5/1d568051-bdd6-4204-ac34-97b5a3f7375c.fast5 + md5sum: 7d4cdf29110898e5f6a3288a0a2b9342 + - path: output/untar/fast5/100read_fast5/1d650a9e-4e67-456a-9abe-bd34b238abe4.fast5 + md5sum: 3fac1d13ed49703e33e92b8aaab3dac6 + - path: output/untar/fast5/100read_fast5/1d86c2b3-c2c6-43a1-97ed-8c1f0cbf6476.fast5 + md5sum: 2eed32c760d94aac2dce49c2364f6cd9 + - path: output/untar/fast5/100read_fast5/20586d1a-2cd0-45aa-abc2-04ac66d8ea46.fast5 + md5sum: d89ef1d32a52fc5d45a17d7682e4de22 + - path: output/untar/fast5/100read_fast5/206626c5-ccf2-4927-9987-164f627bdede.fast5 + md5sum: 045d9fdb48f0b58456c7012b735c8101 + - path: output/untar/fast5/100read_fast5/2109d790-67ec-4fd1-8931-6c7e61908ff3.fast5 + md5sum: 623d2e3213f0423e33b7993d803e4ae5 + - path: output/untar/fast5/100read_fast5/2166cca5-c0ab-49eb-aec1-fec09bdfbd83.fast5 + md5sum: 54ac4ec12232104381d2dcd619c9b4be diff --git a/tests/software/bandage/image/test.yml b/tests/software/bandage/image/test.yml index 8c695af3..404edf62 100644 --- a/tests/software/bandage/image/test.yml +++ b/tests/software/bandage/image/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bandage/image -entry test_bandage_image -c tests/config/nextflow.config tags: - bandage - - bandage_image + - bandage/image files: - path: output/bandage/B-3106.png - path: output/bandage/B-3106.svg diff --git a/tests/software/bbmap/bbduk/main.nf b/tests/software/bbmap/bbduk/main.nf new file mode 100644 index 00000000..dffd6ee4 --- /dev/null +++ b/tests/software/bbmap/bbduk/main.nf @@ -0,0 +1,45 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { BBMAP_BBDUK } from '../../../../software/bbmap/bbduk/main.nf' addParams( options: [ 'args' : 'trimq=10 qtrim=r', 'suffix' : '.trim' ] ) + +workflow test_bbmap_bbduk_single_end { + + input = [ [ id:'test', single_end:true ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + ] + + BBMAP_BBDUK ( input, [] ) +} + +workflow test_bbmap_bbduk_paired_end { + + input = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + + BBMAP_BBDUK ( input, [] ) +} + +workflow test_bbmap_bbduk_se_ref { + + input = [ [ id:'test', single_end:true ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + ] + contaminants = [file(params.test_data['sarscov2']['genome']['transcriptome_fasta'], checkIfExists: true) ] // transciptome file - remove contaminants (*trim.fastq files empty) + + BBMAP_BBDUK ( input, contaminants ) +} + +workflow test_bbmap_bbduk_pe_ref { + + input = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + contaminants = [file(params.test_data['sarscov2']['genome']['transcriptome_fasta'], checkIfExists: true) ] + + BBMAP_BBDUK ( input, contaminants ) +} diff --git a/tests/software/bbmap/bbduk/test.yml b/tests/software/bbmap/bbduk/test.yml new file mode 100644 index 00000000..ddb6216b --- /dev/null +++ b/tests/software/bbmap/bbduk/test.yml @@ -0,0 +1,47 @@ +- name: bbmap bbduk test_bbmap_bbduk_single_end + command: nextflow run tests/software/bbmap/bbduk -entry test_bbmap_bbduk_single_end -c tests/config/nextflow.config + tags: + - bbmap/bbduk + files: + - path: output/bbmap/test.trim.bbduk.log + contains: + - "Input is being processed as unpaired" + - path: output/bbmap/test.trim.fastq.gz + md5sum: a87d0cbd5ced7df8bf1751e4cb407482 + +- name: bbmap bbduk test_bbmap_bbduk_paired_end + command: nextflow run tests/software/bbmap/bbduk -entry test_bbmap_bbduk_paired_end -c tests/config/nextflow.config + tags: + - bbmap/bbduk + files: + - path: output/bbmap/test.trim.bbduk.log + contains: + - "Input is being processed as paired" + - path: output/bbmap/test.trim_1.fastq.gz + md5sum: a87d0cbd5ced7df8bf1751e4cb407482 + - path: output/bbmap/test.trim_2.fastq.gz + md5sum: 406e068fbe198f02b48e7e210cc0c69f + +- name: bbmap bbduk test_bbmap_bbduk_se_ref + command: nextflow run tests/software/bbmap/bbduk -entry test_bbmap_bbduk_se_ref -c tests/config/nextflow.config + tags: + - bbmap/bbduk + files: + - path: output/bbmap/test.trim.bbduk.log + contains: + - "Input is being processed as unpaired" + - path: output/bbmap/test.trim.fastq.gz + md5sum: 3970e82605c7d109bb348fc94e9eecc0 + +- name: bbmap bbduk test_bbmap_bbduk_pe_ref + command: nextflow run tests/software/bbmap/bbduk -entry test_bbmap_bbduk_pe_ref -c tests/config/nextflow.config + tags: + - bbmap/bbduk + files: + - path: output/bbmap/test.trim.bbduk.log + contains: + - "Input is being processed as paired" + - path: output/bbmap/test.trim_1.fastq.gz + md5sum: 3970e82605c7d109bb348fc94e9eecc0 + - path: output/bbmap/test.trim_2.fastq.gz + md5sum: 3970e82605c7d109bb348fc94e9eecc0 diff --git a/tests/software/bcftools/consensus/test.yml b/tests/software/bcftools/consensus/test.yml index 32c159ed..f36802a6 100644 --- a/tests/software/bcftools/consensus/test.yml +++ b/tests/software/bcftools/consensus/test.yml @@ -1,7 +1,7 @@ - name: bcftools consensus test_bcftools_consensus command: nextflow run tests/software/bcftools/consensus -entry test_bcftools_consensus -c tests/config/nextflow.config tags: - - bcftools_consensus + - bcftools/consensus - bcftools files: - path: output/bcftools/test.fa diff --git a/tests/software/bcftools/filter/test.yml b/tests/software/bcftools/filter/test.yml index 3b4d736a..f8bff320 100644 --- a/tests/software/bcftools/filter/test.yml +++ b/tests/software/bcftools/filter/test.yml @@ -1,7 +1,7 @@ - name: bcftools filter test_bcftools_filter command: nextflow run tests/software/bcftools/filter -entry test_bcftools_filter -c tests/config/nextflow.config tags: - - bcftools_filter + - bcftools/filter - bcftools files: - path: output/bcftools/test.vcf.gz diff --git a/tests/software/bcftools/isec/test.yml b/tests/software/bcftools/isec/test.yml index 97520d8a..7aa1ffa0 100644 --- a/tests/software/bcftools/isec/test.yml +++ b/tests/software/bcftools/isec/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/bcftools/isec -entry test_bcftools_isec -c tests/config/nextflow.config tags: - bcftools - - bcftools_isec + - bcftools/isec files: - path: output/bcftools/test/0000.vcf.gz md5sum: fc178eb342a91dc0d1d568601ad8f8e2 diff --git a/tests/software/bcftools/merge/test.yml b/tests/software/bcftools/merge/test.yml index 9686df01..88b826a7 100644 --- a/tests/software/bcftools/merge/test.yml +++ b/tests/software/bcftools/merge/test.yml @@ -1,7 +1,7 @@ - name: bcftools merge test_bcftools_merge command: nextflow run tests/software/bcftools/merge -entry test_bcftools_merge -c tests/config/nextflow.config tags: - - bcftools_merge + - bcftools/merge - bcftools files: - path: output/bcftools/test.vcf.gz diff --git a/tests/software/bcftools/mpileup/test.yml b/tests/software/bcftools/mpileup/test.yml index 51711dd2..994acf64 100644 --- a/tests/software/bcftools/mpileup/test.yml +++ b/tests/software/bcftools/mpileup/test.yml @@ -1,7 +1,7 @@ - name: bcftools mpileup test_bcftools_mpileup command: nextflow run tests/software/bcftools/mpileup -entry test_bcftools_mpileup -c tests/config/nextflow.config tags: - - bcftools_mpileup + - bcftools/mpileup - bcftools files: - path: output/bcftools/test.bcftools_stats.txt diff --git a/tests/software/bcftools/stats/test.yml b/tests/software/bcftools/stats/test.yml index 8a5d0c66..02c2e073 100644 --- a/tests/software/bcftools/stats/test.yml +++ b/tests/software/bcftools/stats/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/bcftools/stats -entry test_bcftools_stats -c tests/config/nextflow.config tags: - bcftools - - bcftools_stats + - bcftools/stats files: - path: output/bcftools/test.bcftools_stats.txt md5sum: c4c5938add12a20050eec3782c8ad623 diff --git a/tests/software/bedtools/bamtobed/main.nf b/tests/software/bedtools/bamtobed/main.nf new file mode 100644 index 00000000..5909e014 --- /dev/null +++ b/tests/software/bedtools/bamtobed/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { BEDTOOLS_BAMTOBED } from '../../../../software/bedtools/bamtobed/main.nf' addParams( options: [:] ) + +workflow test_bedtools_bamtobed { + input = [ [ id:'test'], //meta map + file(params.test_data['sarscov2']['illumina']['test_single_end_bam'], checkIfExists: true) + ] + + BEDTOOLS_BAMTOBED ( input ) +} diff --git a/tests/software/bedtools/bamtobed/test.yml b/tests/software/bedtools/bamtobed/test.yml new file mode 100644 index 00000000..1e98aee7 --- /dev/null +++ b/tests/software/bedtools/bamtobed/test.yml @@ -0,0 +1,8 @@ +- name: bedtools bamtobed + command: nextflow run ./tests/software/bedtools/bamtobed -entry test_bedtools_bamtobed -c tests/config/nextflow.config + tags: + - bedtools + - bedtools/bamtobed + files: + - path: ./output/bedtools/test.bed + md5sum: 3c6b88e414debd889c10eb972180b687 diff --git a/tests/software/bedtools/complement/test.yml b/tests/software/bedtools/complement/test.yml index 433a0477..4fa55c13 100644 --- a/tests/software/bedtools/complement/test.yml +++ b/tests/software/bedtools/complement/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/complement -entry test_bedtools_complement -c tests/config/nextflow.config tags: - bedtools - - bedtools_complement + - bedtools/complement files: - path: ./output/bedtools/test_out.bed md5sum: d71df7e47aec0661c27b71e483e727f9 diff --git a/tests/software/bedtools/genomecov/test.yml b/tests/software/bedtools/genomecov/test.yml index 5460a8c8..a5faf5eb 100644 --- a/tests/software/bedtools/genomecov/test.yml +++ b/tests/software/bedtools/genomecov/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/genomecov -entry test_bedtools_genomecov -c tests/config/nextflow.config tags: - bedtools - - bedtools_genomecov + - bedtools/genomecov files: - path: ./output/bedtools/test_out.bed md5sum: 66083198daca6c001d328ba9616e9b53 diff --git a/tests/software/bedtools/getfasta/test.yml b/tests/software/bedtools/getfasta/test.yml index a38a9cdf..1db28aa0 100644 --- a/tests/software/bedtools/getfasta/test.yml +++ b/tests/software/bedtools/getfasta/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/getfasta -entry test_bedtools_getfasta -c tests/config/nextflow.config tags: - bedtools - - bedtools_getfasta + - bedtools/getfasta files: - path: ./output/bedtools/test.fa md5sum: 41c3a45a57a16c04f828d8f8bb52df70 diff --git a/tests/software/bedtools/intersect/test.yml b/tests/software/bedtools/intersect/test.yml index 717a1048..ddc91321 100644 --- a/tests/software/bedtools/intersect/test.yml +++ b/tests/software/bedtools/intersect/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/intersect -entry test_bedtools_intersect -c tests/config/nextflow.config tags: - bedtools - - bedtools_intersect + - bedtools/intersect files: - path: ./output/bedtools/test_out.bed md5sum: d41d8cd98f00b204e9800998ecf8427e diff --git a/tests/software/bedtools/maskfasta/test.yml b/tests/software/bedtools/maskfasta/test.yml index 7ef998cc..24cd79b2 100644 --- a/tests/software/bedtools/maskfasta/test.yml +++ b/tests/software/bedtools/maskfasta/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/maskfasta -entry test_bedtools_maskfasta -c tests/config/nextflow.config tags: - bedtools - - bedtools_maskfasta + - bedtools/maskfasta files: - path: ./output/bedtools/test.fa md5sum: f4f6749698f11074228d2c79338e3b9c diff --git a/tests/software/bedtools/merge/test.yml b/tests/software/bedtools/merge/test.yml index 8f709ab0..83915d6e 100644 --- a/tests/software/bedtools/merge/test.yml +++ b/tests/software/bedtools/merge/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/merge -entry test_bedtools_merge -c tests/config/nextflow.config tags: - bedtools - - bedtools_merge + - bedtools/merge files: - path: ./output/bedtools/test_out.bed md5sum: 0cf6ed2b6f470cd44a247da74ca4fe4e diff --git a/tests/software/bedtools/slop/test.yml b/tests/software/bedtools/slop/test.yml index adb8eb4a..5368c4e2 100644 --- a/tests/software/bedtools/slop/test.yml +++ b/tests/software/bedtools/slop/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/slop -entry test_bedtools_slop -c tests/config/nextflow.config tags: - bedtools - - bedtools_slop + - bedtools/slop files: - path: ./output/bedtools/test_out.bed md5sum: 4f1d8924925fe5d205c9e1981fe290a4 diff --git a/tests/software/bedtools/sort/test.yml b/tests/software/bedtools/sort/test.yml index a4552158..7d45dca0 100644 --- a/tests/software/bedtools/sort/test.yml +++ b/tests/software/bedtools/sort/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bedtools/sort -entry test_bedtools_sort -c tests/config/nextflow.config tags: - bedtools - - bedtools_sort + - bedtools/sort files: - path: ./output/bedtools/test_out.bed md5sum: fe4053cf4de3aebbdfc3be2efb125a74 diff --git a/tests/software/bismark/align/main.nf b/tests/software/bismark/align/main.nf index 980b4433..330da607 100644 --- a/tests/software/bismark/align/main.nf +++ b/tests/software/bismark/align/main.nf @@ -6,9 +6,9 @@ include { BISMARK_GENOMEPREPARATION } from '../../../../software/bismark include { BISMARK_ALIGN as BISMARK_ALIGN_SE } from '../../../../software/bismark/align/main.nf' addParams( options: [ publish_dir:'test_single_end' ] ) include { BISMARK_ALIGN as BISMARK_ALIGN_PE } from '../../../../software/bismark/align/main.nf' addParams( options: [ publish_dir:'test_paired_end' ] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_bismark_align_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_methylated_1_fastq_gz'], checkIfExists: true) ] @@ -19,9 +19,9 @@ workflow test_bismark_align_single_end { BISMARK_ALIGN_SE ( input, BISMARK_GENOMEPREPARATION.out.index ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_bismark_align_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_methylated_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/bismark/align/test.yml b/tests/software/bismark/align/test.yml index b79e5d0f..b7c20fe5 100644 --- a/tests/software/bismark/align/test.yml +++ b/tests/software/bismark/align/test.yml @@ -2,18 +2,18 @@ command: nextflow run ./tests/software/bismark/align -entry test_bismark_align_single_end -c tests/config/nextflow.config tags: - bismark - - bismark_align + - bismark/align files: - - path: output/test_single_end/test_methylated_1_bismark_bt2.bam - md5sum: 7f9744cec5aa7908675e5fae79af36fc - - path: output/test_single_end/test_methylated_1_bismark_bt2_SE_report.txt + - path: output/test_single_end/test.methylated_1_bismark_bt2.bam + md5sum: dca4ba9ff705b70446f812e59bdb1a32 + - path: output/test_single_end/test.methylated_1_bismark_bt2_SE_report.txt - name: Run bismark align paired-end test workflow command: nextflow run ./tests/software/bismark/align -entry test_bismark_align_paired_end -c tests/config/nextflow.config tags: - bismark - - bismark_align + - bismark/align files: - - path: output/test_paired_end/test_methylated_1_bismark_bt2_pe.bam - md5sum: b13d0d40dffd336375f80fc94acc295f - - path: output/test_paired_end/test_methylated_1_bismark_bt2_PE_report.txt + - path: output/test_paired_end/test.methylated_1_bismark_bt2_pe.bam + md5sum: 43943b1f30d056fcbd9ed26061ea0583 + - path: output/test_paired_end/test.methylated_1_bismark_bt2_PE_report.txt diff --git a/tests/software/bismark/deduplicate/main.nf b/tests/software/bismark/deduplicate/main.nf index 5828d597..acb6e261 100644 --- a/tests/software/bismark/deduplicate/main.nf +++ b/tests/software/bismark/deduplicate/main.nf @@ -6,7 +6,7 @@ include { BISMARK_DEDUPLICATE } from '../../../../software/bismark/deduplicate/m workflow test_bismark_deduplicate { input = [ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_bam'], checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_bam'], checkIfExists: true) ] ] BISMARK_DEDUPLICATE ( input ) diff --git a/tests/software/bismark/deduplicate/test.yml b/tests/software/bismark/deduplicate/test.yml index ed6f7440..0e9c4bc7 100644 --- a/tests/software/bismark/deduplicate/test.yml +++ b/tests/software/bismark/deduplicate/test.yml @@ -2,8 +2,9 @@ command: nextflow run ./tests/software/bismark/deduplicate -entry test_bismark_deduplicate -c tests/config/nextflow.config tags: - bismark - - bismark_deduplicate + - bismark/deduplicate files: - - path: output/bismark/test_methylated_paired_end.deduplicated.bam - - path: output/bismark/test_methylated_paired_end.deduplication_report.txt - md5sum: 3876d694f10c58f47e380ba8476a356b + - path: output/bismark/test.paired_end.methylated.deduplicated.bam + md5sum: 82213a207048bcb5d8cc1cee92703a29 + - path: output/bismark/test.paired_end.methylated.deduplication_report.txt + md5sum: 86aaf87bac9ccdc3cc83628f20b902dc diff --git a/tests/software/bismark/genomepreparation/test.yml b/tests/software/bismark/genomepreparation/test.yml index 10e94f56..592b0887 100644 --- a/tests/software/bismark/genomepreparation/test.yml +++ b/tests/software/bismark/genomepreparation/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bismark/genomepreparation -entry test_bismark_genomepreparation -c tests/config/nextflow.config tags: - bismark - - bismark_genomepreparation + - bismark/genomepreparation files: - path: ./output/bismark/BismarkIndex/genome.fasta md5sum: 6e9fe4042a72f2345f644f239272b7e6 diff --git a/tests/software/bismark/methylationextractor/main.nf b/tests/software/bismark/methylationextractor/main.nf index 8b348f0e..e6eb270d 100644 --- a/tests/software/bismark/methylationextractor/main.nf +++ b/tests/software/bismark/methylationextractor/main.nf @@ -7,7 +7,7 @@ include { BISMARK_METHYLATIONEXTRACTOR } from '../../../../software/bismark/meth workflow test_bismark_methylationextractor { input = [ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_bam'], checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_bam'], checkIfExists: true) ] ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) diff --git a/tests/software/bismark/methylationextractor/test.yml b/tests/software/bismark/methylationextractor/test.yml index 8a0d218b..fe7566f2 100644 --- a/tests/software/bismark/methylationextractor/test.yml +++ b/tests/software/bismark/methylationextractor/test.yml @@ -2,17 +2,15 @@ command: nextflow run ./tests/software/bismark/methylationextractor -entry test_bismark_methylationextractor -c tests/config/nextflow.config tags: - bismark - - bismark_methylationextractor + - bismark/methylationextractor files: - - path: output/bismark/CHG_OB_test_methylated_paired_end.txt.gz - - path: output/bismark/CHG_OT_test_methylated_paired_end.txt.gz - - path: output/bismark/CHH_OB_test_methylated_paired_end.txt.gz - - path: output/bismark/CHH_OT_test_methylated_paired_end.txt.gz - - path: output/bismark/CpG_OB_test_methylated_paired_end.txt.gz - - path: output/bismark/CpG_OT_test_methylated_paired_end.txt.gz - - path: output/bismark/test_methylated_paired_end.bedGraph.gz - - path: output/bismark/test_methylated_paired_end.bismark.cov.gz - - path: output/bismark/test_methylated_paired_end.M-bias.txt + - path: output/bismark/CHG_OB_test.paired_end.methylated.txt.gz + - path: output/bismark/CHG_OT_test.paired_end.methylated.txt.gz + - path: output/bismark/CHH_OB_test.paired_end.methylated.txt.gz + - path: output/bismark/CHH_OT_test.paired_end.methylated.txt.gz + - path: output/bismark/CpG_OB_test.paired_end.methylated.txt.gz + - path: output/bismark/CpG_OT_test.paired_end.methylated.txt.gz + - path: output/bismark/test.paired_end.methylated.M-bias.txt md5sum: 0b100924d46b3c35115f1206f34c4a59 - - path: output/bismark/test_methylated_paired_end_splitting_report.txt - md5sum: 288d6f0110127e3a8c10391802118202 + - path: output/bismark/test.paired_end.methylated_splitting_report.txt + md5sum: f28a9dd8de8c42b8900b190b8f79647a diff --git a/tests/software/bismark/report/test.yml b/tests/software/bismark/report/test.yml index af4397d3..73b7d68c 100644 --- a/tests/software/bismark/report/test.yml +++ b/tests/software/bismark/report/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bismark/report -entry test_bismark_report -c tests/config/nextflow.config tags: - bismark - - bismark_report + - bismark/report files: - - path: output/bismark/test_methylated_1_bismark_bt2_PE_report.txt - - path: output/bismark/test_methylated_1_bismark_bt2_PE_report.html + - path: output/bismark/test.methylated_1_bismark_bt2_PE_report.html + - path: output/bismark/test.methylated_1_bismark_bt2_PE_report.txt diff --git a/tests/software/bismark/summary/main.nf b/tests/software/bismark/summary/main.nf index 7c52a57d..7d4cee37 100644 --- a/tests/software/bismark/summary/main.nf +++ b/tests/software/bismark/summary/main.nf @@ -10,10 +10,10 @@ include { BISMARK_SUMMARY } from '../../../../software/bismark/summ workflow test_bismark_summary { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_methylated_2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_methylated_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_methylated_2_fastq_gz'], checkIfExists: true) ] ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) BISMARK_GENOMEPREPARATION ( fasta ) BISMARK_ALIGN ( input, BISMARK_GENOMEPREPARATION.out.index ) diff --git a/tests/software/bismark/summary/test.yml b/tests/software/bismark/summary/test.yml index 0489dbff..255c355a 100644 --- a/tests/software/bismark/summary/test.yml +++ b/tests/software/bismark/summary/test.yml @@ -2,8 +2,8 @@ command: nextflow run ./tests/software/bismark/summary -entry test_bismark_summary -c tests/config/nextflow.config tags: - bismark - - bismark_summary + - bismark/summary files: - path: output/bismark/bismark_summary_report.html - path: output/bismark/bismark_summary_report.txt - md5sum: 06fc717e81b3f8f0d6e279d572f407f6 + md5sum: fdfadd5399c4e7b2108da100e72036eb diff --git a/tests/software/blast/blastn/test.yml b/tests/software/blast/blastn/test.yml index ac0cda0e..c45ee76d 100644 --- a/tests/software/blast/blastn/test.yml +++ b/tests/software/blast/blastn/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/blast/blastn -entry test_blast_blastn -c tests/config/nextflow.config tags: - blast - - blast_blastn + - blast/blastn files: - path: ./output/blast/test.blastn.txt - path: ./output/blast/blast_db/genome.fasta.nsq diff --git a/tests/software/blast/makeblastdb/test.yml b/tests/software/blast/makeblastdb/test.yml index b393b1e6..81b06be0 100644 --- a/tests/software/blast/makeblastdb/test.yml +++ b/tests/software/blast/makeblastdb/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/blast/makeblastdb -entry test_blast_makeblastdb -c tests/config/nextflow.config tags: - blast - - blast_makeblastdb + - blast/makeblastdb files: - path: ./output/blast/blast_db/genome.fasta.nsq md5sum: 982cbc7d9e38743b9b1037588862b9da diff --git a/tests/software/bowtie/align/main.nf b/tests/software/bowtie/align/main.nf index 3a299862..5c76f8e9 100644 --- a/tests/software/bowtie/align/main.nf +++ b/tests/software/bowtie/align/main.nf @@ -7,9 +7,9 @@ include { BOWTIE_ALIGN } from '../../../../software/bowtie/align/main.nf' addPar workflow test_bowtie_align_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) BOWTIE_BUILD ( fasta ) BOWTIE_ALIGN ( input, BOWTIE_BUILD.out.index ) @@ -17,10 +17,10 @@ workflow test_bowtie_align_single_end { workflow test_bowtie_align_paired_end { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) BOWTIE_BUILD ( fasta ) BOWTIE_ALIGN ( input, BOWTIE_BUILD.out.index ) diff --git a/tests/software/bowtie/align/test.yml b/tests/software/bowtie/align/test.yml index 503eda09..86b390c6 100644 --- a/tests/software/bowtie/align/test.yml +++ b/tests/software/bowtie/align/test.yml @@ -2,43 +2,41 @@ command: nextflow run ./tests/software/bowtie/align -entry test_bowtie_align_single_end -c tests/config/nextflow.config tags: - bowtie - - bowtie_align - - bowtie_align_single_end + - bowtie/align files: - path: ./output/bowtie/test.bam - path: ./output/bowtie/test.out md5sum: 4b9140ceadb8a18ae9330885370f8a0b - - path: ./output/index/bowtie/test_genome.3.ebwt + - path: ./output/index/bowtie/genome.3.ebwt md5sum: 4ed93abba181d8dfab2e303e33114777 - - path: ./output/index/bowtie/test_genome.2.ebwt + - path: ./output/index/bowtie/genome.2.ebwt md5sum: 02b44af9f94c62ecd3c583048e25d4cf - - path: ./output/index/bowtie/test_genome.rev.2.ebwt + - path: ./output/index/bowtie/genome.rev.2.ebwt md5sum: 9e6b0c4c1ddb99ae71ff8a4fe5ec6459 - - path: ./output/index/bowtie/test_genome.4.ebwt + - path: ./output/index/bowtie/genome.4.ebwt md5sum: c25be5f8b0378abf7a58c8a880b87626 - - path: ./output/index/bowtie/test_genome.rev.1.ebwt + - path: ./output/index/bowtie/genome.rev.1.ebwt md5sum: b37aaf11853e65a3b13561f27a912b06 - - path: ./output/index/bowtie/test_genome.1.ebwt + - path: ./output/index/bowtie/genome.1.ebwt md5sum: d9b76ecf9fd0413240173273b38d8199 - name: bowtie align paired-end command: nextflow run ./tests/software/bowtie/align -entry test_bowtie_align_single_end -c tests/config/nextflow.config tags: - bowtie - - bowtie_align - - bowtie_align_paired_end + - bowtie/align files: - path: ./output/bowtie/test.bam - path: ./output/bowtie/test.out - - path: ./output/index/bowtie/test_genome.3.ebwt + - path: ./output/index/bowtie/genome.3.ebwt md5sum: 4ed93abba181d8dfab2e303e33114777 - - path: ./output/index/bowtie/test_genome.2.ebwt + - path: ./output/index/bowtie/genome.2.ebwt md5sum: 02b44af9f94c62ecd3c583048e25d4cf - - path: ./output/index/bowtie/test_genome.rev.2.ebwt + - path: ./output/index/bowtie/genome.rev.2.ebwt md5sum: 9e6b0c4c1ddb99ae71ff8a4fe5ec6459 - - path: ./output/index/bowtie/test_genome.4.ebwt + - path: ./output/index/bowtie/genome.4.ebwt md5sum: c25be5f8b0378abf7a58c8a880b87626 - - path: ./output/index/bowtie/test_genome.rev.1.ebwt + - path: ./output/index/bowtie/genome.rev.1.ebwt md5sum: b37aaf11853e65a3b13561f27a912b06 - - path: ./output/index/bowtie/test_genome.1.ebwt + - path: ./output/index/bowtie/genome.1.ebwt md5sum: d9b76ecf9fd0413240173273b38d8199 diff --git a/tests/software/bowtie/build b/tests/software/bowtie/build new file mode 120000 index 00000000..942cadb7 --- /dev/null +++ b/tests/software/bowtie/build @@ -0,0 +1 @@ +build_test/ \ No newline at end of file diff --git a/tests/software/bowtie/build_test/main.nf b/tests/software/bowtie/build_test/main.nf index 0aec86a1..beff9e1f 100644 --- a/tests/software/bowtie/build_test/main.nf +++ b/tests/software/bowtie/build_test/main.nf @@ -5,7 +5,7 @@ nextflow.enable.dsl = 2 include { BOWTIE_BUILD } from '../../../../software/bowtie/build/main.nf' addParams( options: [:] ) workflow test_bowtie_build { - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) BOWTIE_BUILD ( fasta ) } diff --git a/tests/software/bowtie/build_test/test.yml b/tests/software/bowtie/build_test/test.yml index 67262eb8..2bd73b13 100644 --- a/tests/software/bowtie/build_test/test.yml +++ b/tests/software/bowtie/build_test/test.yml @@ -2,17 +2,17 @@ command: nextflow run ./tests/software/bowtie/build_test -entry test_bowtie_build -c tests/config/nextflow.config tags: - bowtie - - bowtie_build + - bowtie/build files: - - path: ./output/index/bowtie/test_genome.3.ebwt + - path: ./output/index/bowtie/genome.3.ebwt md5sum: 4ed93abba181d8dfab2e303e33114777 - - path: ./output/index/bowtie/test_genome.2.ebwt + - path: ./output/index/bowtie/genome.2.ebwt md5sum: 02b44af9f94c62ecd3c583048e25d4cf - - path: ./output/index/bowtie/test_genome.rev.2.ebwt + - path: ./output/index/bowtie/genome.rev.2.ebwt md5sum: 9e6b0c4c1ddb99ae71ff8a4fe5ec6459 - - path: ./output/index/bowtie/test_genome.4.ebwt + - path: ./output/index/bowtie/genome.4.ebwt md5sum: c25be5f8b0378abf7a58c8a880b87626 - - path: ./output/index/bowtie/test_genome.rev.1.ebwt + - path: ./output/index/bowtie/genome.rev.1.ebwt md5sum: b37aaf11853e65a3b13561f27a912b06 - - path: ./output/index/bowtie/test_genome.1.ebwt + - path: ./output/index/bowtie/genome.1.ebwt md5sum: d9b76ecf9fd0413240173273b38d8199 diff --git a/tests/software/bowtie2/align/test.yml b/tests/software/bowtie2/align/test.yml index 1cb3d98b..c0e94b5d 100644 --- a/tests/software/bowtie2/align/test.yml +++ b/tests/software/bowtie2/align/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/bowtie2/align -entry test_bowtie2_align_single_end -c tests/config/nextflow.config tags: - bowtie2 - - bowtie2_align - - bowtie2_align_single_end + - bowtie2/align files: - path: ./output/bowtie2/test.bam - path: ./output/bowtie2/test.bowtie2.log @@ -24,8 +23,7 @@ command: nextflow run ./tests/software/bowtie2/align -entry test_bowtie2_align_paired_end -c tests/config/nextflow.config tags: - bowtie2 - - bowtie2_align - - bowtie2_align_paired_end + - bowtie2/align files: - path: ./output/bowtie2/test.bam - path: ./output/bowtie2/test.bowtie2.log diff --git a/tests/software/bowtie2/build b/tests/software/bowtie2/build new file mode 120000 index 00000000..942cadb7 --- /dev/null +++ b/tests/software/bowtie2/build @@ -0,0 +1 @@ +build_test/ \ No newline at end of file diff --git a/tests/software/bowtie2/build_test/test.yml b/tests/software/bowtie2/build_test/test.yml index 96385860..35e0f0c3 100644 --- a/tests/software/bowtie2/build_test/test.yml +++ b/tests/software/bowtie2/build_test/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bowtie2/build_test -entry test_bowtie2_build -c tests/config/nextflow.config tags: - bowtie2 - - bowtie2_build + - bowtie2/build files: - path: ./output/index/bowtie2/genome.3.bt2 md5sum: 4ed93abba181d8dfab2e303e33114777 diff --git a/tests/software/bwa/index/test.yml b/tests/software/bwa/index/test.yml index 413fa74e..553110e6 100644 --- a/tests/software/bwa/index/test.yml +++ b/tests/software/bwa/index/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bwa/index -entry test_bwa_index -c tests/config/nextflow.config tags: - bwa - - bwa_index + - bwa/index files: - path: ./output/index/bwa/genome.bwt md5sum: 0469c30a1e239dd08f68afe66fde99da diff --git a/tests/software/bwa/mem/main.nf b/tests/software/bwa/mem/main.nf index 9b65d437..d85fab44 100644 --- a/tests/software/bwa/mem/main.nf +++ b/tests/software/bwa/mem/main.nf @@ -5,9 +5,9 @@ nextflow.enable.dsl = 2 include { BWA_INDEX } from '../../../../software/bwa/index/main.nf' addParams( options: [:] ) include { BWA_MEM } from '../../../../software/bwa/mem/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_bwa_mem_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] @@ -18,9 +18,9 @@ workflow test_bwa_mem_single_end { BWA_MEM ( input, BWA_INDEX.out.index ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_bwa_mem_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/bwa/mem/test.yml b/tests/software/bwa/mem/test.yml index aa1f9fbf..5be352ba 100644 --- a/tests/software/bwa/mem/test.yml +++ b/tests/software/bwa/mem/test.yml @@ -2,11 +2,9 @@ command: nextflow run ./tests/software/bwa/mem -entry test_bwa_mem_single_end -c tests/config/nextflow.config tags: - bwa - - bwa_mem - - bwa_mem_single_end + - bwa/mem files: - path: ./output/bwa/test.bam - md5sum: 9165508bf914baee0e6347711aa7b23a - path: ./output/index/bwa/genome.bwt md5sum: 0469c30a1e239dd08f68afe66fde99da - path: ./output/index/bwa/genome.amb @@ -22,11 +20,9 @@ command: nextflow run ./tests/software/bwa/mem -entry test_bwa_mem_paired_end -c tests/config/nextflow.config tags: - bwa - - bwa_mem - - bwa_mem_paired_end + - bwa/mem files: - path: ./output/bwa/test.bam - md5sum: 670a53bddee62d6bd14ed7adaf103e7c - path: ./output/index/bwa/genome.bwt md5sum: 0469c30a1e239dd08f68afe66fde99da - path: ./output/index/bwa/genome.amb diff --git a/tests/software/bwamem2/index/test.yml b/tests/software/bwamem2/index/test.yml index 7ec9435f..b4cc95f1 100644 --- a/tests/software/bwamem2/index/test.yml +++ b/tests/software/bwamem2/index/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bwamem2/index -entry test_bwamem2_index -c tests/config/nextflow.config tags: - bwamem2 - - bwamem2_index + - bwamem2/index files: - path: ./output/index/bwamem2/genome.fasta.amb md5sum: 3a68b8b2287e07dd3f5f95f4344ba76e diff --git a/tests/software/bwamem2/mem/main.nf b/tests/software/bwamem2/mem/main.nf index 312178fb..3ae0fa1f 100644 --- a/tests/software/bwamem2/mem/main.nf +++ b/tests/software/bwamem2/mem/main.nf @@ -5,9 +5,9 @@ nextflow.enable.dsl = 2 include { BWAMEM2_INDEX } from '../../../../software/bwamem2/index/main.nf' addParams( options: [:] ) include { BWAMEM2_MEM } from '../../../../software/bwamem2/mem/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_bwamem2_mem_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] @@ -18,9 +18,9 @@ workflow test_bwamem2_mem_single_end { BWAMEM2_MEM ( input, BWAMEM2_INDEX.out.index ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_bwamem2_mem_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/bwamem2/mem/test.yml b/tests/software/bwamem2/mem/test.yml index f5acaf83..d624ca0d 100644 --- a/tests/software/bwamem2/mem/test.yml +++ b/tests/software/bwamem2/mem/test.yml @@ -2,11 +2,9 @@ command: nextflow run ./tests/software/bwamem2/mem -entry test_bwamem2_mem_single_end -c tests/config/nextflow.config tags: - bwamem2 - - bwamem2_mem - - bwamem2_mem_single_end + - bwamem2/mem files: - path: ./output/bwamem2/test.bam - md5sum: 2133c011119ea11f06f0a9b1621ba05b - path: ./output/index/bwamem2/genome.fasta.amb md5sum: 3a68b8b2287e07dd3f5f95f4344ba76e - path: ./output/index/bwamem2/genome.fasta.pac @@ -22,11 +20,9 @@ command: nextflow run ./tests/software/bwamem2/mem -entry test_bwamem2_mem_paired_end -c tests/config/nextflow.config tags: - bwamem2 - - bwamem2_mem - - bwamem2_mem_paired_end + - bwamem2/mem files: - path: ./output/bwamem2/test.bam - md5sum: d8fadab5cef04faff1851a8162fc30b5 - path: ./output/index/bwamem2/genome.fasta.amb md5sum: 3a68b8b2287e07dd3f5f95f4344ba76e - path: ./output/index/bwamem2/genome.fasta.pac diff --git a/tests/software/bwameth/align/main.nf b/tests/software/bwameth/align/main.nf index 83f43a57..c9bcbbd0 100644 --- a/tests/software/bwameth/align/main.nf +++ b/tests/software/bwameth/align/main.nf @@ -6,9 +6,9 @@ include { BWAMETH_INDEX } from '../../../../software/bwameth include { BWAMETH_ALIGN as BWAMETH_ALIGN_SE } from '../../../../software/bwameth/align/main.nf' addParams( options: [ publish_dir:'test_single_end' ] ) include { BWAMETH_ALIGN as BWAMETH_ALIGN_PE } from '../../../../software/bwameth/align/main.nf' addParams( options: [ publish_dir:'test_paired_end' ] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_bwameth_align_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_methylated_1_fastq_gz'], checkIfExists: true) ] @@ -19,9 +19,9 @@ workflow test_bwameth_align_single_end { BWAMETH_ALIGN_SE ( input, BWAMETH_INDEX.out.index ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_bwameth_align_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_methylated_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/bwameth/align/test.yml b/tests/software/bwameth/align/test.yml index ceb1bcf0..4b8779aa 100644 --- a/tests/software/bwameth/align/test.yml +++ b/tests/software/bwameth/align/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bwameth/align -entry test_bwameth_align_single_end -c tests/config/nextflow.config tags: - bwameth - - bwameth_align + - bwameth/align files: - path: output/test_single_end/test.bam @@ -10,7 +10,7 @@ command: nextflow run ./tests/software/bwameth/align -entry test_bwameth_align_paired_end -c tests/config/nextflow.config tags: - bwameth - - bwameth_align + - bwameth/align files: - path: output/test_paired_end/test.bam diff --git a/tests/software/bwameth/index/test.yml b/tests/software/bwameth/index/test.yml index 79a53e50..d81de332 100644 --- a/tests/software/bwameth/index/test.yml +++ b/tests/software/bwameth/index/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/bwameth/index -entry test_bwameth_index -c tests/config/nextflow.config tags: - bwameth - - bwameth_index + - bwameth/index files: - path: ./output/index/bwameth/genome.fasta.bwameth.c2t md5sum: 98039984526a41d04d6bd92fcc040c62 diff --git a/tests/software/cat/fastq/test.yml b/tests/software/cat/fastq/test.yml index cbaaafa7..56648fad 100644 --- a/tests/software/cat/fastq/test.yml +++ b/tests/software/cat/fastq/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/cat/fastq -entry test_cat_fastq_single_end -c tests/config/nextflow.config tags: - cat - - cat_fastq - - cat_fastqc_single_end + - cat/fastq files: - path: ./output/merged_fastq/test.merged.fastq.gz md5sum: 59f6dbe193741bb40f498f254aeb2e99 @@ -12,8 +11,7 @@ command: nextflow run ./tests/software/cat/fastq -entry test_cat_fastq_paired_end -c tests/config/nextflow.config tags: - cat - - cat_fastq - - cat_fastqc_paired_end + - cat/fastq files: - path: ./output/merged_fastq/test_2.merged.fastq.gz md5sum: d2b1a836eef1058738ecab36c907c5ba diff --git a/tests/software/cnvkit/test.yml b/tests/software/cnvkit/test.yml index dbfbee33..5bc7bd57 100755 --- a/tests/software/cnvkit/test.yml +++ b/tests/software/cnvkit/test.yml @@ -4,24 +4,24 @@ - cnvkit files: - path: output/cnvkit/baits.target.bed - md5sum: 26d25ff2d6c45b6d92169b3559c6acdb + md5sum: 26d25ff2d6c45b6d92169b3559c6acdb - path: output/cnvkit/baits.antitarget.bed md5sum: d41d8cd98f00b204e9800998ecf8427e - path: output/cnvkit/reference.cnn md5sum: ac99c1ad8b917b96ae15119146c91ab9 - - path: output/cnvkit/test_paired_end.sorted.targetcoverage.cnn + - path: output/cnvkit/test.paired_end.sorted.targetcoverage.cnn md5sum: 3fe80b6013ffc3e9968345e810158215 - - path: output/cnvkit/test_paired_end.sorted.antitargetcoverage.cnn + - path: output/cnvkit/test.paired_end.sorted.antitargetcoverage.cnn md5sum: 203caf8cef6935bb50b4138097955cb8 - - path: output/cnvkit/test_single_end.sorted.targetcoverage.cnn + - path: output/cnvkit/test.single_end.sorted.targetcoverage.cnn md5sum: aa8a018b1d4d1e688c9f9f6ae01bf4d7 - - path: output/cnvkit/test_single_end.sorted.antitargetcoverage.cnn + - path: output/cnvkit/test.single_end.sorted.antitargetcoverage.cnn md5sum: 203caf8cef6935bb50b4138097955cb8 - - path: output/cnvkit/test_paired_end.sorted.cnr + - path: output/cnvkit/test.paired_end.sorted.cnr md5sum: 7e37d73ab604dbc3fe4ebb56aca9bdc3 - - path: output/cnvkit/test_paired_end.sorted.cns - md5sum: 060af1aa637ed51812af19bcce24fcfe - - path: output/cnvkit/test_paired_end.sorted.bintest.cns + - path: output/cnvkit/test.paired_end.sorted.cns + md5sum: 060af1aa637ed51812af19bcce24fcfe + - path: output/cnvkit/test.paired_end.sorted.bintest.cns md5sum: 6544d979475def8a9f69ba42a985668d - - path: output/cnvkit/test_paired_end.sorted.call.cns + - path: output/cnvkit/test.paired_end.sorted.call.cns md5sum: f2ca59b4d50b0c317adc526c1b99b622 diff --git a/tests/software/cooler/digest/main.nf b/tests/software/cooler/digest/main.nf new file mode 100644 index 00000000..7b033cc0 --- /dev/null +++ b/tests/software/cooler/digest/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { COOLER_DIGEST } from '../../../../software/cooler/digest/main.nf' addParams( options: [:] ) + +workflow test_cooler_digest { + + input = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + sizes = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + enzyme = "CviQI" + + COOLER_DIGEST ( input, sizes, enzyme ) +} diff --git a/tests/software/cooler/digest/test.yml b/tests/software/cooler/digest/test.yml new file mode 100644 index 00000000..8476400c --- /dev/null +++ b/tests/software/cooler/digest/test.yml @@ -0,0 +1,8 @@ +- name: cooler digest test_cooler_digest + command: nextflow run tests/software/cooler/digest -entry test_cooler_digest -c tests/config/nextflow.config + tags: + - cooler/digest + - cooler + files: + - path: output/cooler/genome_CviQI.bed + md5sum: f02d3cfaf642b27d4cc197209845e096 diff --git a/tests/software/cooler/dump/main.nf b/tests/software/cooler/dump/main.nf new file mode 100644 index 00000000..e9db67b2 --- /dev/null +++ b/tests/software/cooler/dump/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { COOLER_DUMP } from '../../../../software/cooler/dump/main.nf' addParams( options: [:] ) + +workflow test_cooler_dump { + + input = [ [ id:'test' ], // meta map + file("https://raw.githubusercontent.com/open2c/cooler/master/tests/data/toy.asymm.16.cool", checkIfExists: true) ] + + COOLER_DUMP ( input ) +} diff --git a/tests/software/cooler/dump/test.yml b/tests/software/cooler/dump/test.yml new file mode 100644 index 00000000..154a1d98 --- /dev/null +++ b/tests/software/cooler/dump/test.yml @@ -0,0 +1,8 @@ +- name: cooler dump test_cooler_dump + command: nextflow run tests/software/cooler/dump -entry test_cooler_dump -c tests/config/nextflow.config + tags: + - cooler/dump + - cooler + files: + - path: output/cooler/test.bedpe + md5sum: 38e9b0b8cc74f55a15e8ab01023048bd diff --git a/tests/software/cutadapt/main.nf b/tests/software/cutadapt/main.nf index 4e44300d..6ae6b215 100644 --- a/tests/software/cutadapt/main.nf +++ b/tests/software/cutadapt/main.nf @@ -4,25 +4,24 @@ nextflow.enable.dsl = 2 include { CUTADAPT } from '../../../software/cutadapt/main.nf' addParams( options: [ args:'-q 25' ] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_cutadapt_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] ] CUTADAPT ( input ) } -/* - * Test with paired-end data - */ - +// +// Test with paired-end data +// workflow test_cutadapt_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] CUTADAPT ( input ) diff --git a/tests/software/cutadapt/test.yml b/tests/software/cutadapt/test.yml index 9cadf0fb..f843fe2c 100644 --- a/tests/software/cutadapt/test.yml +++ b/tests/software/cutadapt/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/cutadapt -entry test_cutadapt_single_end -c tests/config/nextflow.config tags: - cutadapt - - cutadapt_single_end files: - path: ./output/cutadapt/test.cutadapt.log - path: ./output/cutadapt/test.trim.fastq.gz @@ -11,7 +10,6 @@ command: nextflow run ./tests/software/cutadapt -entry test_cutadapt_paired_end -c tests/config/nextflow.config tags: - cutadapt - - cutadapt_paired_end files: - path: ./output/cutadapt/test.cutadapt.log - path: ./output/cutadapt/test_1.trim.fastq.gz diff --git a/tests/software/damageprofiler/main.nf b/tests/software/damageprofiler/main.nf new file mode 100644 index 00000000..494a35cf --- /dev/null +++ b/tests/software/damageprofiler/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DAMAGEPROFILER } from '../../../software/damageprofiler/main.nf' addParams( options: [:] ) + +workflow test_damageprofiler { + + input = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] ] + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + fai = file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + + DAMAGEPROFILER ( input, fasta, fai ) +} diff --git a/tests/software/damageprofiler/test.yml b/tests/software/damageprofiler/test.yml new file mode 100644 index 00000000..c6d348ff --- /dev/null +++ b/tests/software/damageprofiler/test.yml @@ -0,0 +1,36 @@ +- name: damageprofiler + command: nextflow run ./tests/software/damageprofiler -entry test_damageprofiler -c tests/config/nextflow.config -dump-channels + tags: + - damageprofiler + files: + - path: output/damageprofiler/test/3p_freq_misincorporations.txt + md5sum: da4cac90c78899a7cb6d72d415392b49 + - path: output/damageprofiler/test/3pGtoA_freq.txt + md5sum: 8dab75d51a4b943b501d0995169c767f + - path: output/damageprofiler/test/5pCtoT_freq.txt + md5sum: fcc48ee5f72edff930d627c8bfdd8a5b + - path: output/damageprofiler/test/5p_freq_misincorporations.txt + md5sum: 54665474f5ef17dcc268567e5eaa7d86 + - path: output/damageprofiler/test/DamagePlot_five_prime.svg + - path: output/damageprofiler/test/DamagePlot.pdf + - path: output/damageprofiler/test/DamagePlot_three_prime.svg + - path: output/damageprofiler/test/DamageProfiler.log + contains: + - "FINISHED SUCCESSFULLY" + - path: output/damageprofiler/test/dmgprof.json + md5sum: 98499024c7e937896e481f2d3cfbdd3e + - path: output/damageprofiler/test/DNA_comp_genome.txt + md5sum: f91e70760d91a1193a27e360aaddf2fd + - path: output/damageprofiler/test/DNA_composition_sample.txt + md5sum: 1257eb3eb42484647bfba2151f9ef04f + - path: output/damageprofiler/test/edit_distance.pdf + - path: output/damageprofiler/test/edit_distance.svg + - path: output/damageprofiler/test/editDistance.txt + md5sum: af2d2f4a99058ec56eae88ec27779e38 + - path: output/damageprofiler/test/Length_plot_combined_data.svg + - path: output/damageprofiler/test/Length_plot_forward_reverse_separated.svg + - path: output/damageprofiler/test/Length_plot.pdf + - path: output/damageprofiler/test/lgdistribution.txt + md5sum: c5d029bf3a92b613310ee23f47d94981 + - path: output/damageprofiler/test/misincorporation.txt + md5sum: 3aa6dd749010a492d92a815a83c196a8 diff --git a/tests/software/deeptools/computematrix/main.nf b/tests/software/deeptools/computematrix/main.nf new file mode 100644 index 00000000..61a2e6d3 --- /dev/null +++ b/tests/software/deeptools/computematrix/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DEEPTOOLS_COMPUTEMATRIX } from '../../../../software/deeptools/computematrix/main.nf' addParams( options: ['args' : 'scale-regions -b 1000'] ) + +workflow test_deeptools_computematrix { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_bigwig'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + + DEEPTOOLS_COMPUTEMATRIX ( input, bed ) +} diff --git a/tests/software/deeptools/computematrix/test.yml b/tests/software/deeptools/computematrix/test.yml new file mode 100644 index 00000000..910bd336 --- /dev/null +++ b/tests/software/deeptools/computematrix/test.yml @@ -0,0 +1,9 @@ +- name: deeptools computematrix + command: nextflow run tests/software/deeptools/computematrix -entry test_deeptools_computematrix -c tests/config/nextflow.config + tags: + - deeptools + - deeptools/computematrix + files: + - path: output/deeptools/test.computeMatrix.mat.gz + - path: output/deeptools/test.computeMatrix.vals.mat.tab + md5sum: 19e22051cc44edb7db3e0f8345330d90 diff --git a/tests/software/deeptools/plotfingerprint/main.nf b/tests/software/deeptools/plotfingerprint/main.nf new file mode 100644 index 00000000..31e2e536 --- /dev/null +++ b/tests/software/deeptools/plotfingerprint/main.nf @@ -0,0 +1,17 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +params.fragment_size = 1000 + +include { DEEPTOOLS_PLOTFINGERPRINT } from '../../../../software/deeptools/plotfingerprint/main.nf' addParams( options: [:] ) + +workflow test_deeptools_plotfingerprint { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + + DEEPTOOLS_PLOTFINGERPRINT ( input ) +} diff --git a/tests/software/deeptools/plotfingerprint/test.yml b/tests/software/deeptools/plotfingerprint/test.yml new file mode 100644 index 00000000..f01e349f --- /dev/null +++ b/tests/software/deeptools/plotfingerprint/test.yml @@ -0,0 +1,13 @@ +- name: deeptools plotfingerprint + command: nextflow run tests/software/deeptools/plotfingerprint -entry test_deeptools_plotfingerprint -c tests/config/nextflow.config + tags: + - deeptools + - deeptools/plotfingerprint + files: + - path: output/deeptools/test.plotFingerprint.pdf + - path: output/deeptools/test.plotFingerprint.qcmetrics.txt + contains: + - "AUC" + - "0.24184576629880325" + - path: output/deeptools/test.plotFingerprint.raw.txt + md5sum: e2a9ff341a315f49e7c8387a3323bdfb diff --git a/tests/software/deeptools/plotheatmap/main.nf b/tests/software/deeptools/plotheatmap/main.nf new file mode 100644 index 00000000..9cd0e497 --- /dev/null +++ b/tests/software/deeptools/plotheatmap/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DEEPTOOLS_PLOTHEATMAP } from '../../../../software/deeptools/plotheatmap/main.nf' addParams( options: [:] ) + +workflow test_deeptools_plotheatmap { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_computematrix_mat_gz'], checkIfExists: true) + ] + + DEEPTOOLS_PLOTHEATMAP ( input ) +} diff --git a/tests/software/deeptools/plotheatmap/test.yml b/tests/software/deeptools/plotheatmap/test.yml new file mode 100644 index 00000000..4d852c10 --- /dev/null +++ b/tests/software/deeptools/plotheatmap/test.yml @@ -0,0 +1,9 @@ +- name: deeptools plotheatmap + command: nextflow run tests/software/deeptools/plotheatmap -entry test_deeptools_plotheatmap -c tests/config/nextflow.config + tags: + - deeptools + - deeptools/plotheatmap + files: + - path: output/deeptools/test.plotHeatmap.mat.tab + - path: output/deeptools/test.plotHeatmap.pdf + diff --git a/tests/software/deeptools/plotprofile/main.nf b/tests/software/deeptools/plotprofile/main.nf new file mode 100644 index 00000000..aa888d52 --- /dev/null +++ b/tests/software/deeptools/plotprofile/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DEEPTOOLS_PLOTPROFILE } from '../../../../software/deeptools/plotprofile/main.nf' addParams( options: [:] ) + +workflow test_deeptools_plotprofile { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_computematrix_mat_gz'], checkIfExists: true) + ] + + DEEPTOOLS_PLOTPROFILE ( input ) +} diff --git a/tests/software/deeptools/plotprofile/test.yml b/tests/software/deeptools/plotprofile/test.yml new file mode 100644 index 00000000..413fe5b6 --- /dev/null +++ b/tests/software/deeptools/plotprofile/test.yml @@ -0,0 +1,9 @@ +- name: deeptools plotprofile + command: nextflow run tests/software/deeptools/plotprofile -entry test_deeptools_plotprofile -c tests/config/nextflow.config + tags: + - deeptools + - deeptools/plotprofile + files: + - path: output/deeptools/test.plotProfile.pdf + - path: output/deeptools/test.plotProfile.tab + md5sum: d561cb659a292cef973ea631c7d440cb diff --git a/tests/software/delly/call/main.nf b/tests/software/delly/call/main.nf new file mode 100644 index 00000000..96dc4b03 --- /dev/null +++ b/tests/software/delly/call/main.nf @@ -0,0 +1,17 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DELLY_CALL } from '../../../../software/delly/call/main.nf' addParams( options: [:] ) + +workflow test_delly_call { + input = [ [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), + ] + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + fai = file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + + DELLY_CALL ( input, fasta, fai ) +} diff --git a/tests/software/delly/call/test.yml b/tests/software/delly/call/test.yml new file mode 100644 index 00000000..e7149855 --- /dev/null +++ b/tests/software/delly/call/test.yml @@ -0,0 +1,10 @@ +- name: delly call test_delly_call + command: nextflow run tests/software/delly/call -entry test_delly_call -c tests/config/nextflow.config + tags: + - delly + - delly/call + files: + - path: output/delly/test.bcf + md5sum: b20df3b9086faccd6bfd2641d97712c8 + - path: output/delly/test.bcf.csi + md5sum: 19e0cdf06c415f4942f6d4dbd5fb7271 diff --git a/tests/software/dsh/filterbed/main.nf b/tests/software/dsh/filterbed/main.nf deleted file mode 100644 index c3b9cadb..00000000 --- a/tests/software/dsh/filterbed/main.nf +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { DSH_FILTERBED } from '../../../../software/dsh/filterbed/main.nf' addParams( options: [suffix: '.filtered', args: '--range chr1:0-1000'] ) - -workflow test_dsh_filterbed { - input = [ [ id:'test' ], // meta map - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] - ] - - DSH_FILTERBED ( input ) -} diff --git a/tests/software/dsh/filterbed/test.yml b/tests/software/dsh/filterbed/test.yml deleted file mode 100644 index 58b30b15..00000000 --- a/tests/software/dsh/filterbed/test.yml +++ /dev/null @@ -1,8 +0,0 @@ -- name: dsh filterbed - command: nextflow run ./tests/software/dsh/filterbed -entry test_dsh_filterbed -c tests/config/nextflow.config - tags: - - dsh - - dsh_filterbed - files: - - path: ./output/dsh/test.filtered.bed.gz - md5sum: 163be0a88c70ca629fd516dbaadad96a diff --git a/tests/software/dsh/splitbed/test.yml b/tests/software/dsh/splitbed/test.yml deleted file mode 100644 index 63403813..00000000 --- a/tests/software/dsh/splitbed/test.yml +++ /dev/null @@ -1,10 +0,0 @@ -- name: dsh splitbed - command: nextflow run ./tests/software/dsh/splitbed -entry test_dsh_splitbed -c tests/config/nextflow.config - tags: - - dsh - - dsh_splitbed - files: - - path: ./output/dsh/test.1.bed.gz - md5sum: 967ba338f361740eb015304003ababe7 - - path: ./output/dsh/test.0.bed.gz - md5sum: 8b884d8cf5c57955f218f1c6dbf02d54 diff --git a/tests/software/dshbio/filterbed/main.nf b/tests/software/dshbio/filterbed/main.nf new file mode 100644 index 00000000..ea100007 --- /dev/null +++ b/tests/software/dshbio/filterbed/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DSHBIO_FILTERBED } from '../../../../software/dshbio/filterbed/main.nf' addParams( options: [suffix: '.filtered', args: '--range chr1:0-1000'] ) + +workflow test_dshbio_filterbed { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + ] + + DSHBIO_FILTERBED ( input ) +} diff --git a/tests/software/dshbio/filterbed/test.yml b/tests/software/dshbio/filterbed/test.yml new file mode 100644 index 00000000..0395ba42 --- /dev/null +++ b/tests/software/dshbio/filterbed/test.yml @@ -0,0 +1,8 @@ +- name: dshbio filterbed + command: nextflow run ./tests/software/dshbio/filterbed -entry test_dshbio_filterbed -c tests/config/nextflow.config + tags: + - dshbio + - dshbio/filterbed + files: + - path: ./output/dshbio/test.filtered.bed.gz + md5sum: 163be0a88c70ca629fd516dbaadad96a diff --git a/tests/software/dshbio/filtergff3/main.nf b/tests/software/dshbio/filtergff3/main.nf new file mode 100644 index 00000000..e3afb561 --- /dev/null +++ b/tests/software/dshbio/filtergff3/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DSHBIO_FILTERGFF3 } from '../../../../software/dshbio/filtergff3/main.nf' addParams( options: [suffix: '.filtered', args: '--range MT192765.1:0-1000'] ) + +workflow test_dshbio_filtergff3 { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true) ] + ] + + DSHBIO_FILTERGFF3 ( input ) +} diff --git a/tests/software/dshbio/filtergff3/test.yml b/tests/software/dshbio/filtergff3/test.yml new file mode 100644 index 00000000..591afb60 --- /dev/null +++ b/tests/software/dshbio/filtergff3/test.yml @@ -0,0 +1,8 @@ +- name: dshbio filtergff3 + command: nextflow run ./tests/software/dshbio/filtergff3 -entry test_dshbio_filtergff3 -c tests/config/nextflow.config + tags: + - dshbio + - dshbio/filtergff3 + files: + - path: ./output/dshbio/test.filtered.gff3.gz + md5sum: 89d320cf91c0ca8fd200cfa9688954e3 diff --git a/tests/software/dsh/splitbed/main.nf b/tests/software/dshbio/splitbed/main.nf similarity index 50% rename from tests/software/dsh/splitbed/main.nf rename to tests/software/dshbio/splitbed/main.nf index 11d0861e..dbc78ab2 100644 --- a/tests/software/dsh/splitbed/main.nf +++ b/tests/software/dshbio/splitbed/main.nf @@ -2,12 +2,12 @@ nextflow.enable.dsl = 2 -include { DSH_SPLITBED } from '../../../../software/dsh/splitbed/main.nf' addParams( options: [suffix: '.', args: '--records 2'] ) +include { DSHBIO_SPLITBED } from '../../../../software/dshbio/splitbed/main.nf' addParams( options: [suffix: '.', args: '--records 2'] ) -workflow test_dsh_splitbed { +workflow test_dshbio_splitbed { input = [ [ id:'test' ], // meta map [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] ] - DSH_SPLITBED ( input ) + DSHBIO_SPLITBED ( input ) } diff --git a/tests/software/dshbio/splitbed/test.yml b/tests/software/dshbio/splitbed/test.yml new file mode 100644 index 00000000..8f97b407 --- /dev/null +++ b/tests/software/dshbio/splitbed/test.yml @@ -0,0 +1,10 @@ +- name: dshbio splitbed + command: nextflow run ./tests/software/dshbio/splitbed -entry test_dshbio_splitbed -c tests/config/nextflow.config + tags: + - dshbio + - dshbio/splitbed + files: + - path: ./output/dshbio/test.1.bed.gz + md5sum: 967ba338f361740eb015304003ababe7 + - path: ./output/dshbio/test.0.bed.gz + md5sum: 8b884d8cf5c57955f218f1c6dbf02d54 diff --git a/tests/software/dshbio/splitgff3/main.nf b/tests/software/dshbio/splitgff3/main.nf new file mode 100644 index 00000000..a4afd856 --- /dev/null +++ b/tests/software/dshbio/splitgff3/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { DSHBIO_SPLITGFF3 } from '../../../../software/dshbio/splitgff3/main.nf' addParams( options: [suffix: '.', args: '--records 15'] ) + +workflow test_dshbio_splitgff3 { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true) ] + ] + + DSHBIO_SPLITGFF3 ( input ) +} diff --git a/tests/software/dshbio/splitgff3/test.yml b/tests/software/dshbio/splitgff3/test.yml new file mode 100644 index 00000000..e8fb8066 --- /dev/null +++ b/tests/software/dshbio/splitgff3/test.yml @@ -0,0 +1,10 @@ +- name: dshbio splitgff3 + command: nextflow run ./tests/software/dshbio/splitgff3 -entry test_dshbio_splitgff3 -c tests/config/nextflow.config + tags: + - dshbio + - dshbio/splitgff3 + files: + - path: ./output/dshbio/test.1.gff3.gz + md5sum: 0742895e81fe080c01f43f9dd616baae + - path: ./output/dshbio/test.0.gff3.gz + md5sum: 9aed611b89093f5e0db4e63cb56d8416 diff --git a/tests/software/ensemblvep/main.nf b/tests/software/ensemblvep/main.nf new file mode 100644 index 00000000..5681e5e1 --- /dev/null +++ b/tests/software/ensemblvep/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { ENSEMBLVEP } from '../../../software/ensemblvep/main.nf' addParams( vep_tag: '104.3.WBcel235', use_cache: false ) + +workflow test_ensemblvep { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + ENSEMBLVEP ( input, "WBcel235", "caenorhabditis_elegans", "104", [] ) +} diff --git a/tests/software/ensemblvep/test.yml b/tests/software/ensemblvep/test.yml new file mode 100644 index 00000000..67c90a83 --- /dev/null +++ b/tests/software/ensemblvep/test.yml @@ -0,0 +1,7 @@ +- name: ensemblvep test_ensemblvep + command: nextflow run tests/software/ensemblvep -entry test_ensemblvep -c tests/config/nextflow.config + tags: + - ensemblvep + files: + - path: output/ensemblvep/test.ann.vcf + - path: output/ensemblvep/test.summary.html diff --git a/tests/software/fastp/main.nf b/tests/software/fastp/main.nf index 492cb668..dad720e4 100644 --- a/tests/software/fastp/main.nf +++ b/tests/software/fastp/main.nf @@ -4,9 +4,9 @@ nextflow.enable.dsl = 2 include { FASTP } from '../../../software/fastp/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_fastp_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] @@ -15,15 +15,15 @@ workflow test_fastp_single_end { FASTP ( input ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_fastp_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] - + FASTP ( input ) } diff --git a/tests/software/fastp/test.yml b/tests/software/fastp/test.yml index a2d14b19..f7f92ec8 100644 --- a/tests/software/fastp/test.yml +++ b/tests/software/fastp/test.yml @@ -1,7 +1,6 @@ - name: fastp test_fastp_single_end command: nextflow run tests/software/fastp -entry test_fastp_single_end -c tests/config/nextflow.config tags: - - fastp_single_end - fastp files: - path: output/fastp/test.fastp.html @@ -20,7 +19,6 @@ - name: fastp test_fastp_paired_end command: nextflow run tests/software/fastp -entry test_fastp_paired_end -c tests/config/nextflow.config tags: - - fastp_paired_end - fastp files: - path: output/fastp/test.fastp.html diff --git a/tests/software/fastqc/main.nf b/tests/software/fastqc/main.nf index 5766f9b4..d361f525 100644 --- a/tests/software/fastqc/main.nf +++ b/tests/software/fastqc/main.nf @@ -4,20 +4,20 @@ nextflow.enable.dsl = 2 include { FASTQC } from '../../../software/fastqc/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_fastqc_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] ] FASTQC ( input ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_fastqc_paired_end { input = [ [id: 'test', single_end: false], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/fastqc/test.yml b/tests/software/fastqc/test.yml index 0fe0ebe0..0e0d0ee7 100644 --- a/tests/software/fastqc/test.yml +++ b/tests/software/fastqc/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/fastqc/ -entry test_fastqc_single_end -c tests/config/nextflow.config tags: - fastqc - - fastqc_single_end files: - path: ./output/fastqc/test_fastqc.html - path: ./output/fastqc/test_fastqc.zip @@ -11,7 +10,6 @@ command: nextflow run ./tests/software/fastqc/ -entry test_fastqc_paired_end -c tests/config/nextflow.config tags: - fastqc - - fastqc_paired_end files: - path: ./output/fastqc/test_1_fastqc.html - path: ./output/fastqc/test_2_fastqc.html diff --git a/tests/software/fasttree/main.nf b/tests/software/fasttree/main.nf new file mode 100644 index 00000000..f490f4ac --- /dev/null +++ b/tests/software/fasttree/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { FASTTREE } from '../../../software/fasttree/main.nf' addParams( options: [:] ) + +workflow test_fasttree { + + input = [ file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + FASTTREE ( input ) +} diff --git a/tests/software/fasttree/test.yml b/tests/software/fasttree/test.yml new file mode 100644 index 00000000..408a0f4c --- /dev/null +++ b/tests/software/fasttree/test.yml @@ -0,0 +1,7 @@ +- name: fasttree + command: nextflow run ./tests/software/fasttree -entry test_fasttree -c tests/config/nextflow.config + tags: + - fasttree + files: + - path: output/fasttree/fasttree_phylogeny.tre + md5sum: 63a886117535847c1e66fa4487f3b7d2 diff --git a/tests/software/fgbio/callmolecularconsensusreads/test.yml b/tests/software/fgbio/callmolecularconsensusreads/test.yml index ed2f80eb..325ab7fb 100644 --- a/tests/software/fgbio/callmolecularconsensusreads/test.yml +++ b/tests/software/fgbio/callmolecularconsensusreads/test.yml @@ -1,8 +1,8 @@ - name: fgbio callmolecularconsensusreads command: nextflow run tests/software/fgbio/callmolecularconsensusreads -entry test_fgbio_callmolecularconsensusreads -c tests/config/nextflow.config tags: - - fgbio_callmolecularconsensusreads - fgbio + - fgbio/callmolecularconsensusreads files: - path: output/fgbio/test_molreads.bam md5sum: 7010bcdc037c36af13dbc370c06c76d3 diff --git a/tests/software/fgbio/sortbam/test.yml b/tests/software/fgbio/sortbam/test.yml index 7e70189f..9407f180 100644 --- a/tests/software/fgbio/sortbam/test.yml +++ b/tests/software/fgbio/sortbam/test.yml @@ -1,8 +1,8 @@ - name: fgbio sortbam command: nextflow run tests/software/fgbio/sortbam -entry test_fgbio_sortbam -c tests/config/nextflow.config tags: - - fgbio_sortbam - fgbio + - fgbio/sortbam files: - path: output/fgbio/test.bam md5sum: 56987f74214cdc72ae840e0007ff4935 diff --git a/tests/software/gatk4/applybqsr/main.nf b/tests/software/gatk4/applybqsr/main.nf index 2d3e532c..a33542b5 100644 --- a/tests/software/gatk4/applybqsr/main.nf +++ b/tests/software/gatk4/applybqsr/main.nf @@ -7,6 +7,7 @@ include { GATK4_APPLYBQSR } from '../../../../software/gatk4/applybqsr/main.nf' workflow test_gatk4_applybqsr { input = [ [ id:'test' ], // meta map file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_baserecalibrator_table'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) @@ -19,6 +20,7 @@ workflow test_gatk4_applybqsr { workflow test_gatk4_applybqsr_intervals { input = [ [ id:'test' ], // meta map file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_baserecalibrator_table'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) diff --git a/tests/software/gatk4/applybqsr/test.yml b/tests/software/gatk4/applybqsr/test.yml index b17ffbe2..e1f1dcdc 100644 --- a/tests/software/gatk4/applybqsr/test.yml +++ b/tests/software/gatk4/applybqsr/test.yml @@ -1,18 +1,17 @@ - name: gatk4 applybqsr test_gatk4_applybqsr command: nextflow run tests/software/gatk4/applybqsr -entry test_gatk4_applybqsr -c tests/config/nextflow.config tags: - - gatk4_applybqsr - gatk4 + - gatk4/applybqsr files: - path: output/gatk4/test.bam - md5sum: 139a5ffc7601ce3cfa7a896cd381542a + md5sum: dac716c394db5e83c12b44355c098ca7 - name: gatk4 applybqsr test_gatk4_applybqsr_intervals command: nextflow run tests/software/gatk4/applybqsr -entry test_gatk4_applybqsr_intervals -c tests/config/nextflow.config tags: - - gatk4_applybqsr - - gatk4_applybqsr_intervals - gatk4 + - gatk4/applybqsr files: - path: output/gatk4/test.bam - md5sum: 5b1f6fa2525124c281f71e5a76d28482 + md5sum: 400441dbe5344658580ba0a24ba57069 diff --git a/tests/software/gatk4/baserecalibrator/main.nf b/tests/software/gatk4/baserecalibrator/main.nf index 302ddb1f..72198c8a 100644 --- a/tests/software/gatk4/baserecalibrator/main.nf +++ b/tests/software/gatk4/baserecalibrator/main.nf @@ -6,7 +6,8 @@ include { GATK4_BASERECALIBRATOR } from '../../../../software/gatk4/baserecalibr workflow test_gatk4_baserecalibrator { input = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) @@ -19,7 +20,8 @@ workflow test_gatk4_baserecalibrator { workflow test_gatk4_baserecalibrator_intervals { input = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) @@ -33,7 +35,8 @@ workflow test_gatk4_baserecalibrator_intervals { workflow test_gatk4_baserecalibrator_multiple_sites { input = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) diff --git a/tests/software/gatk4/baserecalibrator/test.yml b/tests/software/gatk4/baserecalibrator/test.yml index c0011152..0185ec60 100644 --- a/tests/software/gatk4/baserecalibrator/test.yml +++ b/tests/software/gatk4/baserecalibrator/test.yml @@ -1,7 +1,7 @@ - name: gatk4 baserecalibrator test_gatk4_baserecalibrator command: nextflow run tests/software/gatk4/baserecalibrator -entry test_gatk4_baserecalibrator -c tests/config/nextflow.config tags: - - gatk4_baserecalibrator + - gatk4/baserecalibrator - gatk4 files: - path: output/gatk4/test.table @@ -10,8 +10,7 @@ - name: gatk4 baserecalibrator test_gatk4_baserecalibrator_intervals command: nextflow run tests/software/gatk4/baserecalibrator -entry test_gatk4_baserecalibrator_intervals -c tests/config/nextflow.config tags: - - gatk4_baserecalibrator_intervals - - gatk4_baserecalibrator + - gatk4/baserecalibrator - gatk4 files: - path: output/gatk4/test.table @@ -20,8 +19,7 @@ - name: gatk4 baserecalibrator test_gatk4_baserecalibrator_multiple_sites command: nextflow run tests/software/gatk4/baserecalibrator -entry test_gatk4_baserecalibrator_multiple_sites -c tests/config/nextflow.config tags: - - gatk4_baserecalibrator_multiple_sites - - gatk4_baserecalibrator + - gatk4/baserecalibrator - gatk4 files: - path: output/gatk4/test.table diff --git a/tests/software/gatk4/bedtointervallist/test.yml b/tests/software/gatk4/bedtointervallist/test.yml index a8bb7bf0..7b4a5a62 100644 --- a/tests/software/gatk4/bedtointervallist/test.yml +++ b/tests/software/gatk4/bedtointervallist/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/bedtointervallist -entry test_gatk4_bedtointervallist -c tests/config/nextflow.config tags: - gatk4 - - gatk4_bedtointervallist + - gatk4/bedtointervallist files: - path: output/gatk4/test.interval_list md5sum: e51101c9357fb2d59fd30e370eefa39c diff --git a/tests/software/gatk4/createsequencedictionary/test.yml b/tests/software/gatk4/createsequencedictionary/test.yml index 4b849d5a..99e73e8e 100644 --- a/tests/software/gatk4/createsequencedictionary/test.yml +++ b/tests/software/gatk4/createsequencedictionary/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/createsequencedictionary -entry test_gatk4_createsequencedictionary -c tests/config/nextflow.config tags: - gatk4 - - gatk4_createsequencedictionary + - gatk4/createsequencedictionary files: - path: output/gatk4/genome.dict md5sum: 7362679f176e0f52add03c08f457f646 diff --git a/tests/software/gatk4/fastqtosam/test.yml b/tests/software/gatk4/fastqtosam/test.yml index 2674ab59..a3df1a6f 100644 --- a/tests/software/gatk4/fastqtosam/test.yml +++ b/tests/software/gatk4/fastqtosam/test.yml @@ -1,9 +1,8 @@ - name: gatk4 fastqtosam test_gatk4_fastqtosam_single_end command: nextflow run tests/software/gatk4/fastqtosam -entry test_gatk4_fastqtosam_single_end -c tests/config/nextflow.config tags: - - gatk4_fastqtosam_single_end + - gatk4/fastqtosam - gatk4 - - gatk4_fastqtosam files: - path: output/gatk4/test.bam md5sum: 4967100b2e4912c0e4ce0976d946bafb @@ -11,9 +10,8 @@ - name: gatk4 fastqtosam test_gatk4_fastqtosam_paired_end command: nextflow run tests/software/gatk4/fastqtosam -entry test_gatk4_fastqtosam_paired_end -c tests/config/nextflow.config tags: - - gatk4_fastqtosam_paired_end - gatk4 - - gatk4_fastqtosam + - gatk4/fastqtosam files: - path: output/gatk4/test.bam md5sum: 4967100b2e4912c0e4ce0976d946bafb diff --git a/tests/software/gatk4/haplotypecaller/test.yml b/tests/software/gatk4/haplotypecaller/test.yml index 42fd9e18..3418e360 100644 --- a/tests/software/gatk4/haplotypecaller/test.yml +++ b/tests/software/gatk4/haplotypecaller/test.yml @@ -1,8 +1,8 @@ - name: gatk4 haplotypecaller test_gatk4_haplotypecaller command: nextflow run tests/software/gatk4/haplotypecaller -entry test_gatk4_haplotypecaller -c tests/config/nextflow.config tags: - - gatk4_haplotypecaller - gatk4 + - gatk4/haplotypecaller files: - path: output/gatk4/test.vcf.gz should_exist: true diff --git a/tests/software/gatk4/intervallisttools/main.nf b/tests/software/gatk4/intervallisttools/main.nf new file mode 100644 index 00000000..93797cdc --- /dev/null +++ b/tests/software/gatk4/intervallisttools/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +test_options = ['args': '--SCATTER_COUNT 6 --SUBDIVISION_MODE BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW --UNIQUE true --SORT true'] +include { GATK4_BEDTOINTERVALLIST } from '../../../../software/gatk4/bedtointervallist/main.nf' addParams( options: [:] ) +include { GATK4_INTERVALLISTTOOLS as INTERVALLISTTOOLS } from '../../../../software/gatk4/intervallisttools/main.nf' addParams( options: test_options ) + +workflow test_gatk4_intervallisttools { + + input = [ [ id:'test' ], [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ]] + dict = file(params.test_data['sarscov2']['genome']['genome_dict'], checkIfExists: true) + + GATK4_BEDTOINTERVALLIST ( input, dict ) + INTERVALLISTTOOLS ( GATK4_BEDTOINTERVALLIST.out.interval_list ) +} diff --git a/tests/software/gatk4/intervallisttools/test.yml b/tests/software/gatk4/intervallisttools/test.yml new file mode 100644 index 00000000..62cecfb6 --- /dev/null +++ b/tests/software/gatk4/intervallisttools/test.yml @@ -0,0 +1,16 @@ +- name: gatk4 intervallisttools test_gatk4_intervallisttools + command: nextflow run tests/software/gatk4/intervallisttools -entry test_gatk4_intervallisttools -c tests/config/nextflow.config + tags: + - gatk4 + - gatk4/intervallisttools + files: + - path: output/gatk4/test.interval_list + md5sum: e51101c9357fb2d59fd30e370eefa39c + - path: output/intervallisttools/test_split/temp_0001_of_6/1scattered.interval_list + md5sum: b8ba8a387200df76a0d1c577626dc265 + - path: output/intervallisttools/test_split/temp_0002_of_6/2scattered.interval_list + md5sum: 0728d164666d9264ef442a493e008dee + - path: output/intervallisttools/test_split/temp_0003_of_6/3scattered.interval_list + md5sum: 55da0f3c69504148f4e7002a0e072cfe + - path: output/intervallisttools/test_split/temp_0004_of_6/4scattered.interval_list + md5sum: d29ca4447f32547f2936567fa902796a diff --git a/tests/software/gatk4/markduplicates/test.yml b/tests/software/gatk4/markduplicates/test.yml index 669598c5..76f9ccb1 100644 --- a/tests/software/gatk4/markduplicates/test.yml +++ b/tests/software/gatk4/markduplicates/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/markduplicates -entry test_gatk4_markduplicates -c tests/config/nextflow.config tags: - gatk4 - - gatk4_markduplicates + - gatk4/markduplicates files: - path: output/gatk4/test.bam - md5sum: b58d47345e3ce5825c0641c9d6e6cb7a + md5sum: 3b6facab3afbacfa08a7a975efbd2c6b diff --git a/tests/software/gatk4/mergebamalignment/test.yml b/tests/software/gatk4/mergebamalignment/test.yml index 2fb1be5f..7b1305b7 100644 --- a/tests/software/gatk4/mergebamalignment/test.yml +++ b/tests/software/gatk4/mergebamalignment/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/mergebamalignment -entry test_gatk4_mergebamalignment -c tests/config/nextflow.config tags: - gatk4 - - gatk4_mergebamalignment + - gatk4/mergebamalignment files: - - path: output/gatk4/test.merged.bam + - path: output/gatk4/test.bam md5sum: bd4a5e2ea916826aadebb5878333e26f diff --git a/tests/software/gatk4/mergevcfs/test.yml b/tests/software/gatk4/mergevcfs/test.yml index c461710b..5ffbb89c 100644 --- a/tests/software/gatk4/mergevcfs/test.yml +++ b/tests/software/gatk4/mergevcfs/test.yml @@ -1,18 +1,17 @@ - name: gatk4 mergevcfs test_gatk4_mergevcfs command: nextflow run tests/software/gatk4/mergevcfs -entry test_gatk4_mergevcfs -c tests/config/nextflow.config tags: - - gatk4_mergevcfs + - gatk4/mergevcfs - gatk4 files: - - path: output/gatk4/test.merged.vcf.gz + - path: output/gatk4/test.vcf.gz md5sum: ff48f175e26db2d4b2957762f6d1c715 - name: gatk4 mergevcfs test_gatk4_mergevcfs_refdict command: nextflow run tests/software/gatk4/mergevcfs -entry test_gatk4_mergevcfs_refdict -c tests/config/nextflow.config tags: - - gatk4_mergevcfs + - gatk4/mergevcfs - gatk4 - - gatk4_mergevcfs_refdict files: - - path: output/gatk4/test.merged.vcf.gz + - path: output/gatk4/test.vcf.gz md5sum: ff48f175e26db2d4b2957762f6d1c715 diff --git a/tests/software/gatk4/revertsam/test.yml b/tests/software/gatk4/revertsam/test.yml index 221975bf..d5a31664 100644 --- a/tests/software/gatk4/revertsam/test.yml +++ b/tests/software/gatk4/revertsam/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/revertsam -entry test_gatk4_revertsam -c tests/config/nextflow.config tags: - gatk4 - - gatk4_revertsam + - gatk4/revertsam files: - path: output/gatk4/test.reverted.bam md5sum: f778310b18b83b49929eb648594f96dc diff --git a/tests/software/gatk4/samtofastq/test.yml b/tests/software/gatk4/samtofastq/test.yml index a2a900a1..d70da6dc 100644 --- a/tests/software/gatk4/samtofastq/test.yml +++ b/tests/software/gatk4/samtofastq/test.yml @@ -2,8 +2,7 @@ command: nextflow run tests/software/gatk4/samtofastq -entry test_gatk4_samtofastq_single_end -c tests/config/nextflow.config tags: - gatk4 - - gatk4_samtofastq - - gatk4_samtofastq_single_end + - gatk4/samtofastq files: - path: output/gatk4/test.fastq.gz md5sum: 50ace41d4c24467f24f8b929540a7797 @@ -12,8 +11,7 @@ command: nextflow run tests/software/gatk4/samtofastq -entry test_gatk4_samtofastq_paired_end -c tests/config/nextflow.config tags: - gatk4 - - gatk4_samtofastq - - gatk4_samtofastq_paired_end + - gatk4/samtofastq files: - path: output/gatk4/test_1.fastq.gz md5sum: cfea607c9d75fd9ea9704780ad3a499c diff --git a/tests/software/gatk4/splitncigarreads/test.yml b/tests/software/gatk4/splitncigarreads/test.yml index 8f08899d..9169a51c 100644 --- a/tests/software/gatk4/splitncigarreads/test.yml +++ b/tests/software/gatk4/splitncigarreads/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/gatk4/splitncigarreads -entry test_gatk4_splitncigarreads -c tests/config/nextflow.config tags: - gatk4 - - gatk4_splitncigarreads + - gatk4/splitncigarreads files: - - path: output/gatk4/test.split_cigar.bam - md5sum: a8473bd4abc7b13751fc51b92531da4c + - path: output/gatk4/test.bam + md5sum: 900af0f67749d5ffac961354178ecb29 diff --git a/tests/software/gatk4/variantfiltration/test.yml b/tests/software/gatk4/variantfiltration/test.yml index 9b9ac948..daa68b58 100644 --- a/tests/software/gatk4/variantfiltration/test.yml +++ b/tests/software/gatk4/variantfiltration/test.yml @@ -1,7 +1,7 @@ - name: gatk4 variantfiltration test_gatk4_variantfiltration command: nextflow run tests/software/gatk4/variantfiltration -entry test_gatk4_variantfiltration -c tests/config/nextflow.config tags: - - gatk4_variantfiltration + - gatk4/variantfiltration - gatk4 files: - path: output/gatk4/test.filtered.vcf diff --git a/tests/software/genmap/index/main.nf b/tests/software/genmap/index/main.nf new file mode 100644 index 00000000..9a900833 --- /dev/null +++ b/tests/software/genmap/index/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { GENMAP_INDEX } from '../../../../software/genmap/index/main.nf' addParams( options: [:] ) + +workflow test_genmap_index { + + input = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + GENMAP_INDEX ( input ) +} diff --git a/tests/software/genmap/index/test.yml b/tests/software/genmap/index/test.yml new file mode 100644 index 00000000..ba92d91c --- /dev/null +++ b/tests/software/genmap/index/test.yml @@ -0,0 +1,48 @@ +- name: genmap index test_genmap_index + command: nextflow run tests/software/genmap/index -entry test_genmap_index -c tests/config/nextflow.config + tags: + - genmap + - genmap/index + files: + - path: output/index/genmap/index.ids.concat + md5sum: da6caa25f62c5407ccdfbcce1fa92408 + - path: output/index/genmap/index.ids.limits + md5sum: f82636c5da188aec131d3a809473eff1 + - path: output/index/genmap/index.info.concat + md5sum: 8ba5273aa9e58722bf45b9cc39fc6bfe + - path: output/index/genmap/index.info.limits + md5sum: 3522f2811f4ddf04598809fc84a1459e + - path: output/index/genmap/index.lf.drp + md5sum: dd85d6a23af2c7adf2695658e3056c08 + - path: output/index/genmap/index.lf.drp.sbl + md5sum: f1d3ff8443297732862df21dc4e57262 + - path: output/index/genmap/index.lf.drs + md5sum: 93b885adfe0da089cdf634904fd59f71 + - path: output/index/genmap/index.lf.drv + md5sum: e06b605496bd91b32afa3c4f56d934ac + - path: output/index/genmap/index.lf.drv.sbl + md5sum: 8dd6bb7329a71449b0a1b292b5999164 + - path: output/index/genmap/index.lf.pst + md5sum: e8daba34298e99e42942435286f9b3f0 + - path: output/index/genmap/index.rev.lf.drp + md5sum: 5d9107e3aeec0721553dd661d4365fef + - path: output/index/genmap/index.rev.lf.drp.sbl + md5sum: f1d3ff8443297732862df21dc4e57262 + - path: output/index/genmap/index.rev.lf.drs + md5sum: 93b885adfe0da089cdf634904fd59f71 + - path: output/index/genmap/index.rev.lf.drv + md5sum: df7e795edc0a034577a9d2599fe8cfeb + - path: output/index/genmap/index.rev.lf.drv.sbl + md5sum: 8dd6bb7329a71449b0a1b292b5999164 + - path: output/index/genmap/index.rev.lf.pst + md5sum: e8daba34298e99e42942435286f9b3f0 + - path: output/index/genmap/index.sa.ind + md5sum: e21e5c7ce887cc8e3d0fa44ab1019cab + - path: output/index/genmap/index.sa.len + md5sum: 5dfc20cfe8ed9892451461a8d402f51c + - path: output/index/genmap/index.sa.val + md5sum: 400ee7f2fe93b2000ae3a5da5e509730 + - path: output/index/genmap/index.txt.concat + md5sum: b4303962e0c176107945f3405370e6ae + - path: output/index/genmap/index.txt.limits + md5sum: 4480a068db603e4c9a27bc4fa9ceaf14 diff --git a/tests/software/genmap/mappability/main.nf b/tests/software/genmap/mappability/main.nf new file mode 100644 index 00000000..fc6febad --- /dev/null +++ b/tests/software/genmap/mappability/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { GENMAP_INDEX } from '../../../../software/genmap/index/main.nf' addParams( options: [:] ) +include { GENMAP_MAPPABILITY } from '../../../../software/genmap/mappability/main.nf' addParams( options: [args : '-K 50 -E 2 -w -t -bg'] ) + +workflow test_genmap_map { + + input = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + GENMAP_INDEX ( input ) + GENMAP_MAPPABILITY ( GENMAP_INDEX.out.index ) +} diff --git a/tests/software/genmap/mappability/test.yml b/tests/software/genmap/mappability/test.yml new file mode 100644 index 00000000..f544cd68 --- /dev/null +++ b/tests/software/genmap/mappability/test.yml @@ -0,0 +1,12 @@ +- name: genmap mappability test_genmap_map + command: nextflow run tests/software/genmap/mappability -entry test_genmap_map -c tests/config/nextflow.config + tags: + - genmap + - genmap/mappability + files: + - path: output/genmap/mappability.bedgraph + md5sum: c4203b84a84331282ef8660279f80b26 + - path: output/genmap/mappability.txt + md5sum: 602d409493457f92b2e5f075f62ebe30 + - path: output/genmap/mappability.wig + md5sum: fd2afb6512ab9e86f9a3b62f8b9d9088 diff --git a/tests/software/graphmap2/align/main.nf b/tests/software/graphmap2/align/main.nf new file mode 100644 index 00000000..7026c915 --- /dev/null +++ b/tests/software/graphmap2/align/main.nf @@ -0,0 +1,17 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { GRAPHMAP2_INDEX } from '../../../../software/graphmap2/index/main.nf' addParams( options: [:] ) +include { GRAPHMAP2_ALIGN } from '../../../../software/graphmap2/align/main.nf' addParams( options: [:] ) + +workflow test_graphmap2_align { + + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true) ] + ] + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + GRAPHMAP2_INDEX ( fasta ) + GRAPHMAP2_ALIGN ( input, fasta, GRAPHMAP2_INDEX.out.index ) +} diff --git a/tests/software/graphmap2/align/test.yml b/tests/software/graphmap2/align/test.yml new file mode 100644 index 00000000..698f6f50 --- /dev/null +++ b/tests/software/graphmap2/align/test.yml @@ -0,0 +1,7 @@ +- name: graphmap2 align + command: nextflow run ./tests/software/graphmap2/align -entry test_graphmap2_align -c tests/config/nextflow.config + tags: + - graphmap2 + - graphmap2/align + files: + - path: ./output/graphmap2/test.sam diff --git a/tests/software/graphmap2/index/main.nf b/tests/software/graphmap2/index/main.nf new file mode 100644 index 00000000..d1873678 --- /dev/null +++ b/tests/software/graphmap2/index/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { GRAPHMAP2_INDEX } from '../../../../software/graphmap2/index/main.nf' addParams( options: [:] ) + +workflow test_graphmap2_index { + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + GRAPHMAP2_INDEX ( fasta ) +} diff --git a/tests/software/graphmap2/index/test.yml b/tests/software/graphmap2/index/test.yml new file mode 100644 index 00000000..d6a8d166 --- /dev/null +++ b/tests/software/graphmap2/index/test.yml @@ -0,0 +1,8 @@ +- name: graphmap2 index + command: nextflow run ./tests/software/graphmap2/index -entry test_graphmap2_index -c tests/config/nextflow.config + tags: + - graphmap2 + - graphmap2/index + files: + - path: ./output/graphmap2/genome.fasta.gmidx + md5sum: 2973f9b7fa52c78899c73908f8afc6be diff --git a/tests/software/gubbins/main.nf b/tests/software/gubbins/main.nf index cafaa174..78c5d2c1 100644 --- a/tests/software/gubbins/main.nf +++ b/tests/software/gubbins/main.nf @@ -5,7 +5,7 @@ nextflow.enable.dsl = 2 include { GUBBINS } from '../../../software/gubbins/main.nf' addParams( options: [:] ) workflow test_gubbins { - input = file(params.test_data['sarscov2']['genome']['test_fas'], checkIfExists: true) + input = file(params.test_data['sarscov2']['genome']['all_sites_fas'], checkIfExists: true) GUBBINS ( input ) } diff --git a/tests/software/gubbins/test.yml b/tests/software/gubbins/test.yml index 4376dc92..15b720c9 100644 --- a/tests/software/gubbins/test.yml +++ b/tests/software/gubbins/test.yml @@ -3,21 +3,21 @@ tags: - gubbins files: - - path: output/gubbins/test.filtered_polymorphic_sites.fasta - md5sum: c9dff2294307eb2200a6e19efce47796 - - path: output/gubbins/test.recombination_predictions.embl + - path: output/gubbins/all_sites.filtered_polymorphic_sites.fasta + md5sum: 4cbfd93868d8ed7d4d8b099eba137134 + - path: output/gubbins/all_sites.recombination_predictions.embl md5sum: d41d8cd98f00b204e9800998ecf8427e - - path: output/gubbins/test.recombination_predictions.gff - md5sum: a2ca9c119674f4d121a8f78e4078fe05 - - path: output/gubbins/test.branch_base_reconstruction.embl - md5sum: d41d8cd98f00b204e9800998ecf8427e - - path: output/gubbins/test.summary_of_snp_distribution.vcf - md5sum: afee50e92fb919a5df487fbda0b9dbb5 - - path: output/gubbins/test.per_branch_statistics.csv - md5sum: 0f364b5e0b01a6be9b6a4407658ab25f - - path: output/gubbins/test.filtered_polymorphic_sites.phylip - md5sum: 85db9d0896cfec34a73641496b7498bb - - path: output/gubbins/test.final_tree.tre - md5sum: dce7164a0c69bb3d642a419907364aa3 - - path: output/gubbins/test.node_labelled.final_tree.tre - md5sum: beef5ce05aca4598bb3f42caf126e045 + - path: output/gubbins/all_sites.recombination_predictions.gff + md5sum: f95871e79968340cb82532e2c9b0c92b + - path: output/gubbins/all_sites.branch_base_reconstruction.embl + md5sum: 02e6fb268f7422bfe34b27ecd3b2c245 + - path: output/gubbins/all_sites.summary_of_snp_distribution.vcf + md5sum: 276e62e888ea811577c8ffb2da0b3aff + - path: output/gubbins/all_sites.per_branch_statistics.csv + md5sum: 94b09b25d10504b56aa0307beae98a98 + - path: output/gubbins/all_sites.filtered_polymorphic_sites.phylip + md5sum: 0a77f397a7797c5c3386832745b0c97a + - path: output/gubbins/all_sites.final_tree.tre + md5sum: e3c7ea18e2c5c49774c0e2ff78bd1818 + - path: output/gubbins/all_sites.node_labelled.final_tree.tre + md5sum: 7727b4c4111ebf49cc8a4f1fdd25092c diff --git a/tests/software/hisat2/align/test.yml b/tests/software/hisat2/align/test.yml index 5017c628..e9a89de6 100644 --- a/tests/software/hisat2/align/test.yml +++ b/tests/software/hisat2/align/test.yml @@ -1,9 +1,8 @@ - name: hisat2 align test_hisat2_align_single_end command: nextflow run tests/software/hisat2/align -entry test_hisat2_align_single_end -c tests/config/nextflow.config tags: - - hisat2_align_single_end - - hisat2_align - hisat2 + - hisat2/align files: - path: output/hisat2/test.hisat2.summary.log md5sum: 7b8a9e61b7646da1089b041333c41a87 @@ -30,9 +29,8 @@ - name: hisat2 align test_hisat2_align_paired_end command: nextflow run tests/software/hisat2/align -entry test_hisat2_align_paired_end -c tests/config/nextflow.config tags: - - hisat2_align_paired_end - - hisat2_align - hisat2 + - hisat2/align files: - path: output/hisat2/test.hisat2.summary.log md5sum: 9839b31db795958cc4b70711a3414e9c diff --git a/tests/software/hisat2/build b/tests/software/hisat2/build new file mode 120000 index 00000000..942cadb7 --- /dev/null +++ b/tests/software/hisat2/build @@ -0,0 +1 @@ +build_test/ \ No newline at end of file diff --git a/tests/software/hisat2/build_test/test.yml b/tests/software/hisat2/build_test/test.yml index 8b805dd3..28223354 100644 --- a/tests/software/hisat2/build_test/test.yml +++ b/tests/software/hisat2/build_test/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/hisat2/build_test -entry test_hisat2_build -c tests/config/nextflow.config tags: - hisat2 - - hisat2_build + - hisat2/build files: - path: output/hisat2/genome.splice_sites.txt md5sum: d41d8cd98f00b204e9800998ecf8427e diff --git a/tests/software/hisat2/extractsplicesites/test.yml b/tests/software/hisat2/extractsplicesites/test.yml index 71375a96..8cb8157e 100644 --- a/tests/software/hisat2/extractsplicesites/test.yml +++ b/tests/software/hisat2/extractsplicesites/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/hisat2/extractsplicesites -entry test_hisat2_extractsplicesites -c tests/config/nextflow.config tags: - hisat2 - - hisat2_extractsplicesites + - hisat2/extractsplicesites files: - path: output/hisat2/genome.splice_sites.txt md5sum: d41d8cd98f00b204e9800998ecf8427e diff --git a/tests/software/hmmer/hmmalign/main.nf b/tests/software/hmmer/hmmalign/main.nf new file mode 100644 index 00000000..7e0241ed --- /dev/null +++ b/tests/software/hmmer/hmmalign/main.nf @@ -0,0 +1,17 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { HMMER_HMMALIGN } from '../../../../software/hmmer/hmmalign/main.nf' addParams( options: [:] ) + +workflow test_hmmer_hmmalign { + + input = [ + [ id:'test' ], // meta map + file('https://raw.githubusercontent.com/erikrikarddaniel/test-datasets/modules/data/delete_me/e_coli_k12_16s.fna') // Change to params.test_data syntax after the data is included in tests/config/test_data.config + ] + + hmm = file('https://raw.githubusercontent.com/erikrikarddaniel/test-datasets/modules/data/delete_me/bac.16S_rRNA.hmm') + + HMMER_HMMALIGN ( input, hmm ) +} diff --git a/tests/software/hmmer/hmmalign/test.yml b/tests/software/hmmer/hmmalign/test.yml new file mode 100644 index 00000000..70a46170 --- /dev/null +++ b/tests/software/hmmer/hmmalign/test.yml @@ -0,0 +1,8 @@ +- name: hmmer hmmalign test_hmmer_hmmalign + command: nextflow run tests/software/hmmer/hmmalign -entry test_hmmer_hmmalign -c tests/config/nextflow.config + tags: + - hmmer + - hmmer/hmmalign + files: + - path: output/hmmer/test.sthlm.gz + md5sum: ddaa8b96291edf4e1a929a224329161b diff --git a/tests/software/homer/annotatepeaks/test.yml b/tests/software/homer/annotatepeaks/test.yml index bbf964c9..f0ccd92f 100644 --- a/tests/software/homer/annotatepeaks/test.yml +++ b/tests/software/homer/annotatepeaks/test.yml @@ -2,6 +2,6 @@ command: nextflow run tests/software/homer/annotatepeaks -entry test_homer_annotatepeaks -c tests/config/nextflow.config tags: - homer - - homer_annotatepeaks + - homer/annotatepeaks files: - path: output/homer/test.annotatePeaks.txt diff --git a/tests/software/iqtree/main.nf b/tests/software/iqtree/main.nf new file mode 100644 index 00000000..8191ea6a --- /dev/null +++ b/tests/software/iqtree/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { IQTREE } from '../../../software/iqtree/main.nf' addParams( options: [:] ) + +workflow test_iqtree { + + input = [ file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + IQTREE ( input, '' ) +} diff --git a/tests/software/iqtree/test.yml b/tests/software/iqtree/test.yml new file mode 100644 index 00000000..6c3fb407 --- /dev/null +++ b/tests/software/iqtree/test.yml @@ -0,0 +1,11 @@ +- name: iqtree + command: nextflow run ./tests/software/iqtree -entry test_iqtree -c tests/config/nextflow.config + tags: + - iqtree + files: + - path: output/iqtree/informative_sites.fas.treefile + contains: + - '(sample1:0.002' + - '(sample2:0.005' + - 'sample3:0.0005' + - 'sample4:0.001' diff --git a/tests/software/ivar/consensus/test.yml b/tests/software/ivar/consensus/test.yml index 02eaa20b..0c5db3f2 100644 --- a/tests/software/ivar/consensus/test.yml +++ b/tests/software/ivar/consensus/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/ivar/consensus -entry test_ivar_consensus -c tests/config/nextflow.config tags: - ivar - - ivar_consensus + - ivar/consensus files: - path: output/ivar/test.fa md5sum: 9e21a64818f4302b4dece5480fa5e8b8 diff --git a/tests/software/ivar/trim/test.yml b/tests/software/ivar/trim/test.yml index 6879ce6f..b0e94858 100644 --- a/tests/software/ivar/trim/test.yml +++ b/tests/software/ivar/trim/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/ivar/trim -entry test_ivar_trim -c tests/config/nextflow.config tags: - ivar - - ivar_trim + - ivar/trim files: - path: output/ivar/test.bam md5sum: 8705d032b28a1c3dbfe78fa762a2132f diff --git a/tests/software/ivar/variants/test.yml b/tests/software/ivar/variants/test.yml index 2eb665a7..642a501d 100644 --- a/tests/software/ivar/variants/test.yml +++ b/tests/software/ivar/variants/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/ivar/variants -entry test_ivar_variants_no_gff_no_mpileup -c tests/config/nextflow.config tags: - ivar - - ivar_variants + - ivar/variants files: - path: output/ivar/test.tsv md5sum: 728f1430f2402861396d9953465ac706 @@ -11,7 +11,7 @@ command: nextflow run ./tests/software/ivar/variants -entry test_ivar_variants_no_gff_with_mpileup -c tests/config/nextflow.config --save_mpileup tags: - ivar - - ivar_variants + - ivar/variants files: - path: output/ivar/test.tsv md5sum: 728f1430f2402861396d9953465ac706 @@ -22,7 +22,7 @@ command: nextflow run ./tests/software/ivar/variants -entry test_ivar_variants_with_gff_with_mpileup -c tests/config/nextflow.config --gff tests/data/gff/sarscov2/MN908947.3.gff3 --save_mpileup tags: - ivar - - ivar_variants + - ivar/variants files: - path: output/ivar/test.tsv md5sum: 7b59146132a60da58444bebffc3c2577 diff --git a/tests/software/kallisto/index/test.yml b/tests/software/kallisto/index/test.yml index afbe1d7d..77db7bbd 100644 --- a/tests/software/kallisto/index/test.yml +++ b/tests/software/kallisto/index/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/kallisto/index -entry test_kallisto_index -c tests/config/nextflow.config tags: - kallisto - - kallisto_index + - kallisto/index files: - path: output/kallisto/kallisto md5sum: bf8a58d329dddc96f0c32f7823bc0310 diff --git a/tests/software/kallistobustools/count/main.nf b/tests/software/kallistobustools/count/main.nf new file mode 100644 index 00000000..1fe6b649 --- /dev/null +++ b/tests/software/kallistobustools/count/main.nf @@ -0,0 +1,24 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { KALLISTOBUSTOOLS_COUNT } from '../../../../software/kallistobustools/count/main.nf' addParams( options: [args:"--cellranger"] ) + +workflow test_kallistobustools_count { + + input = [ [id:'test_standard'], // meta map + [file("https://github.com/nf-core/test-datasets/blob/modules/data/genomics/homo_sapiens/illumina/10xgenomics/test_1.fastq.gz?raw=true", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/blob/modules/data/genomics/homo_sapiens/illumina/10xgenomics/test_2.fastq.gz?raw=true", checkIfExists: true)] + ] + + index = file("https://github.com/FloWuenne/test-datasets/blob/scrnaseq/reference/kallistobustools/kb_ref.idx?raw=true", checkIfExists: true) + t2g = file("https://raw.githubusercontent.com/FloWuenne/test-datasets/scrnaseq/reference/kallistobustools/t2g.txt", checkIfExists: true) + t1c = file('t1c_dummy') + t2c = file('t2c_dummy') + use_t1c = false + use_t2c = false + workflow = "standard" + technology = "10XV3" + + KALLISTOBUSTOOLS_COUNT (input,index,t2g,t1c,t2c,use_t1c,use_t2c,workflow,technology) +} diff --git a/tests/software/kallistobustools/count/test.yml b/tests/software/kallistobustools/count/test.yml new file mode 100644 index 00000000..2a620dd4 --- /dev/null +++ b/tests/software/kallistobustools/count/test.yml @@ -0,0 +1,36 @@ +- name: kallistobustools count test_kallistobustools_count + command: nextflow run tests/software/kallistobustools/count -entry test_kallistobustools_count -c tests/config/nextflow.config + tags: + - kallistobustools/count + - kallistobustools + files: + - path: output/kallistobustools/test_standard_kallistobustools_count/10xv3_whitelist.txt + md5sum: 3d36d0a4021fd292b265e2b5e72aaaf3 + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cellranger/barcodes.tsv + md5sum: 8f734732c46f52c4d1c025bfe4134bd2 + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cellranger/genes.tsv + md5sum: fbebf995a3de568db8ac028cd0c5d993 + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cellranger/matrix.mtx + md5sum: 4847bae27c41961496d504bcfe9890ba + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cells_x_genes.barcodes.txt + md5sum: cafdf96423987e3d9e807cdc16139541 + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cells_x_genes.genes.txt + md5sum: 52d0627aaf0418bebe3ef75ad77da53f + - path: output/kallistobustools/test_standard_kallistobustools_count/counts_unfiltered/cells_x_genes.mtx + md5sum: d05e1582385ba5f215fa73c470343c06 + - path: output/kallistobustools/test_standard_kallistobustools_count/inspect.json + md5sum: d3d23063f3fc07f7fbd24748aa4271a9 + - path: output/kallistobustools/test_standard_kallistobustools_count/kb_info.json + contains: + - 'kallisto' + - path: output/kallistobustools/test_standard_kallistobustools_count/matrix.ec + md5sum: cd8340e3fb78d74ad85fabdbe0a778f0 + - path: output/kallistobustools/test_standard_kallistobustools_count/output.bus + md5sum: f4702922bd0c142e34b3680c2251426a + - path: output/kallistobustools/test_standard_kallistobustools_count/output.unfiltered.bus + md5sum: e38f99748e598e33fe035b89e7c89fb5 + - path: output/kallistobustools/test_standard_kallistobustools_count/run_info.json + contains: + - 'n_targets' + - path: output/kallistobustools/test_standard_kallistobustools_count/transcripts.txt + md5sum: 6d583083eaf6ca81e409332a40d2e74c diff --git a/tests/software/kallistobustools/ref/main.nf b/tests/software/kallistobustools/ref/main.nf new file mode 100644 index 00000000..efa1e7ee --- /dev/null +++ b/tests/software/kallistobustools/ref/main.nf @@ -0,0 +1,32 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { KALLISTOBUSTOOLS_REF } from '../../../../software/kallistobustools/ref/main.nf' addParams( options: [:] ) + +workflow test_kallistobustools_ref_standard { + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + workflow = "standard" + + KALLISTOBUSTOOLS_REF(fasta, gtf, workflow) +} + +workflow test_kallistobustools_ref_lamanno { + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + workflow = "lamanno" + + KALLISTOBUSTOOLS_REF( fasta, gtf, workflow) +} + +workflow test_kallistobustools_ref_nucleus { + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + workflow = "nucleus" + + KALLISTOBUSTOOLS_REF( fasta, gtf, workflow) +} diff --git a/tests/software/kallistobustools/ref/test.yml b/tests/software/kallistobustools/ref/test.yml new file mode 100644 index 00000000..b0d8fecd --- /dev/null +++ b/tests/software/kallistobustools/ref/test.yml @@ -0,0 +1,50 @@ +- name: kallistobustools ref test_kallistobustools_ref_standard + command: nextflow run tests/software/kallistobustools/ref -entry test_kallistobustools_ref_standard -c tests/config/nextflow.config + tags: + - kallistobustools/ref + - kallistobustools + files: + - path: output/kallistobustools/cdna.fa + md5sum: 0de7fdac9e7418576987ed93640927c7 + - path: output/kallistobustools/kb_ref_out.idx + md5sum: 7d5cd0731e7c467e5521d761f7d79895 + - path: output/kallistobustools/t2g.txt + md5sum: d5bcfd61ff078aa92e576abf8cc4fc08 + +- name: kallistobustools ref test_kallistobustools_ref_lamanno + command: nextflow run tests/software/kallistobustools/ref -entry test_kallistobustools_ref_lamanno -c tests/config/nextflow.config + tags: + - kallistobustools/ref + - kallistobustools + files: + - path: output/kallistobustools/cdna.fa + md5sum: 0de7fdac9e7418576987ed93640927c7 + - path: output/kallistobustools/cdna_t2c.txt + md5sum: 6d583083eaf6ca81e409332a40d2e74c + - path: output/kallistobustools/intron.fa + md5sum: ca5ca147afa0a25f6a730edfb39a6098 + - path: output/kallistobustools/intron_t2c.txt + md5sum: 728480007abfdbdb248f7ba9de6026ef + - path: output/kallistobustools/kb_ref_out.idx + md5sum: 48ca8323aadd30b1762d4e8f5a7d7aee + - path: output/kallistobustools/t2g.txt + md5sum: 7cae93dfb9a26f70adf4a57fe2a83027 + +- name: kallistobustools ref test_kallistobustools_ref_nucleus + command: nextflow run tests/software/kallistobustools/ref -entry test_kallistobustools_ref_nucleus -c tests/config/nextflow.config + tags: + - kallistobustools/ref + - kallistobustools + files: + - path: output/kallistobustools/cdna.fa + md5sum: 0de7fdac9e7418576987ed93640927c7 + - path: output/kallistobustools/cdna_t2c.txt + md5sum: 6d583083eaf6ca81e409332a40d2e74c + - path: output/kallistobustools/intron.fa + md5sum: ca5ca147afa0a25f6a730edfb39a6098 + - path: output/kallistobustools/intron_t2c.txt + md5sum: 728480007abfdbdb248f7ba9de6026ef + - path: output/kallistobustools/kb_ref_out.idx + md5sum: 48ca8323aadd30b1762d4e8f5a7d7aee + - path: output/kallistobustools/t2g.txt + md5sum: 7cae93dfb9a26f70adf4a57fe2a83027 diff --git a/tests/software/kraken2/run/main.nf b/tests/software/kraken2/kraken2/main.nf similarity index 56% rename from tests/software/kraken2/run/main.nf rename to tests/software/kraken2/kraken2/main.nf index 1896f670..ba331b46 100644 --- a/tests/software/kraken2/run/main.nf +++ b/tests/software/kraken2/kraken2/main.nf @@ -2,23 +2,26 @@ nextflow.enable.dsl = 2 -include { KRAKEN2_RUN } from '../../../../software/kraken2/run/main.nf' addParams( options: [:] ) +include { UNTAR } from '../../../../software/untar/main.nf' addParams( options: [:] ) +include { KRAKEN2_KRAKEN2 } from '../../../../software/kraken2/kraken2/main.nf' addParams( options: [:] ) -workflow test_kraken2_run_single_end { +workflow test_kraken2_kraken2_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] ] - db = file(params.test_data['sarscov2']['genome']['kraken2'], checkIfExists: true) + db = file(params.test_data['sarscov2']['genome']['kraken2_tar_gz'], checkIfExists: true) - KRAKEN2_RUN ( input, db ) + UNTAR ( db ) + KRAKEN2_KRAKEN2 ( input, UNTAR.out.untar ) } -workflow test_kraken2_run_paired_end { +workflow test_kraken2_kraken2_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] - db = file(params.test_data['sarscov2']['genome']['kraken2'], checkIfExists: true) - - KRAKEN2_RUN ( input, db ) + db = file(params.test_data['sarscov2']['genome']['kraken2_tar_gz'], checkIfExists: true) + + UNTAR ( db ) + KRAKEN2_KRAKEN2 ( input, UNTAR.out.untar ) } diff --git a/tests/software/kraken2/run/test.yml b/tests/software/kraken2/kraken2/test.yml similarity index 64% rename from tests/software/kraken2/run/test.yml rename to tests/software/kraken2/kraken2/test.yml index 22fd4cdd..8a3c6bf4 100644 --- a/tests/software/kraken2/run/test.yml +++ b/tests/software/kraken2/kraken2/test.yml @@ -1,9 +1,8 @@ -- name: kraken2 run single-end - command: nextflow run ./tests/software/kraken2/run -entry test_kraken2_run_single_end -c tests/config/nextflow.config +- name: kraken2 kraken2 single-end + command: nextflow run ./tests/software/kraken2/kraken2 -entry test_kraken2_kraken2_single_end -c tests/config/nextflow.config tags: - kraken2 - - kraken2_run - - kraken2_run_single_end + - kraken2/kraken2 files: - path: output/kraken2/test.classified.fastq.gz should_exist: true @@ -12,12 +11,11 @@ - path: output/kraken2/test.kraken2.report.txt md5sum: 4227755fe40478b8d7dc8634b489761e -- name: kraken2 run paired-end - command: nextflow run ./tests/software/kraken2/run -entry test_kraken2_run_paired_end -c tests/config/nextflow.config +- name: kraken2 kraken2 paired-end + command: nextflow run ./tests/software/kraken2/kraken2 -entry test_kraken2_kraken2_paired_end -c tests/config/nextflow.config tags: - kraken2 - - kraken2_run - - kraken2_run_paired_end + - kraken2/kraken2 files: - path: output/kraken2/test.classified_1.fastq.gz should_exist: true diff --git a/tests/software/last/dotplot/main.nf b/tests/software/last/dotplot/main.nf new file mode 100644 index 00000000..14181a78 --- /dev/null +++ b/tests/software/last/dotplot/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_DOTPLOT } from '../../../../software/last/dotplot/main.nf' addParams( options: [:] ) + +workflow test_last_dotplot { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) ] + + LAST_DOTPLOT ( input, "png" ) +} diff --git a/tests/software/last/dotplot/test.yml b/tests/software/last/dotplot/test.yml new file mode 100644 index 00000000..4b210ec4 --- /dev/null +++ b/tests/software/last/dotplot/test.yml @@ -0,0 +1,8 @@ +- name: last dotplot test_last_dotplot + command: nextflow run tests/software/last/dotplot -entry test_last_dotplot -c tests/config/nextflow.config + tags: + - last/dotplot + - last + files: + - path: output/last/test.png + md5sum: 6189aaf96f522cdb664869724997bbcd diff --git a/tests/software/last/lastal/main.nf b/tests/software/last/lastal/main.nf new file mode 100644 index 00000000..a3639529 --- /dev/null +++ b/tests/software/last/lastal/main.nf @@ -0,0 +1,28 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UNTAR } from '../../../../software/untar/main.nf' addParams( options: [:] ) +include { LAST_LASTAL } from '../../../../software/last/lastal/main.nf' addParams( options: [:] ) + +workflow test_last_lastal_with_dummy_param_file { + + input = [ [ id:'contigs', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true), + [] ] + db = [ file(params.test_data['sarscov2']['genome']['lastdb_tar_gz'], checkIfExists: true) ] + + UNTAR ( db ) + LAST_LASTAL ( input, UNTAR.out.untar) +} + +workflow test_last_lastal_with_real_param_file { + + input = [ [ id:'contigs', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['contigs_genome_par'], checkIfExists: true) ] + db = [ file(params.test_data['sarscov2']['genome']['lastdb_tar_gz'], checkIfExists: true) ] + + UNTAR ( db ) + LAST_LASTAL ( input, UNTAR.out.untar) +} diff --git a/tests/software/last/lastal/test.yml b/tests/software/last/lastal/test.yml new file mode 100644 index 00000000..13d243af --- /dev/null +++ b/tests/software/last/lastal/test.yml @@ -0,0 +1,45 @@ +- name: last lastal test_last_lastal_with_dummy_param_file + command: nextflow run tests/software/last/lastal -entry test_last_lastal_with_dummy_param_file -c tests/config/nextflow.config + tags: + - last + - last/lastal + files: + - path: output/last/contigs.genome.maf.gz + md5sum: 2fc56553282d0826310bdef16a55e587 + - path: output/untar/lastdb/genome.bck + md5sum: 5519879b9b6c4d1fc508da7f17f88f2e + - path: output/untar/lastdb/genome.des + md5sum: 3a9ea6d336e113a74d7fdca5e7b623fc + - path: output/untar/lastdb/genome.prj + md5sum: 489715f14b0fea6273822696e72357f9 + - path: output/untar/lastdb/genome.sds + md5sum: 2cd381f4f8a9c52cfcd323a2863eccb2 + - path: output/untar/lastdb/genome.ssp + md5sum: 4137fb6fe9df2b3d78d5b960390aac7b + - path: output/untar/lastdb/genome.suf + md5sum: 1895efa8653e8e9bd3605cff0408ed33 + - path: output/untar/lastdb/genome.tis + md5sum: b7c40f06b1309dc6f37849eeb86dfd22 + +- name: last lastal test_last_lastal_with_real_param_file + command: nextflow run tests/software/last/lastal -entry test_last_lastal_with_real_param_file -c tests/config/nextflow.config + tags: + - last + - last/lastal + files: + - path: output/last/contigs.genome.maf.gz + md5sum: f50557bed5430b42de7b0d5d61075cf0 + - path: output/untar/lastdb/genome.bck + md5sum: 5519879b9b6c4d1fc508da7f17f88f2e + - path: output/untar/lastdb/genome.des + md5sum: 3a9ea6d336e113a74d7fdca5e7b623fc + - path: output/untar/lastdb/genome.prj + md5sum: 489715f14b0fea6273822696e72357f9 + - path: output/untar/lastdb/genome.sds + md5sum: 2cd381f4f8a9c52cfcd323a2863eccb2 + - path: output/untar/lastdb/genome.ssp + md5sum: 4137fb6fe9df2b3d78d5b960390aac7b + - path: output/untar/lastdb/genome.suf + md5sum: 1895efa8653e8e9bd3605cff0408ed33 + - path: output/untar/lastdb/genome.tis + md5sum: b7c40f06b1309dc6f37849eeb86dfd22 diff --git a/tests/software/last/lastdb/main.nf b/tests/software/last/lastdb/main.nf new file mode 100644 index 00000000..4a5a2021 --- /dev/null +++ b/tests/software/last/lastdb/main.nf @@ -0,0 +1,23 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_LASTDB } from '../../../../software/last/lastdb/main.nf' addParams( options: ['args': '-Q0'] ) + +workflow test_last_lastdb { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + + LAST_LASTDB ( input ) +} + +workflow test_last_lastdb_gzipped_input { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + + LAST_LASTDB ( input ) +} diff --git a/tests/software/last/lastdb/test.yml b/tests/software/last/lastdb/test.yml new file mode 100644 index 00000000..5dbc976b --- /dev/null +++ b/tests/software/last/lastdb/test.yml @@ -0,0 +1,41 @@ +- name: last lastdb test_last_lastdb + command: nextflow run tests/software/last/lastdb -entry test_last_lastdb -c tests/config/nextflow.config + tags: + - last/lastdb + - last + files: + - path: output/last/lastdb/test.bck + md5sum: 5519879b9b6c4d1fc508da7f17f88f2e + - path: output/last/lastdb/test.des + md5sum: 3a9ea6d336e113a74d7fdca5e7b623fc + - path: output/last/lastdb/test.prj + md5sum: 2c981eb9b9d2012d8413946a5b378f20 + - path: output/last/lastdb/test.sds + md5sum: 2cd381f4f8a9c52cfcd323a2863eccb2 + - path: output/last/lastdb/test.ssp + md5sum: 4137fb6fe9df2b3d78d5b960390aac7b + - path: output/last/lastdb/test.suf + md5sum: 1895efa8653e8e9bd3605cff0408ed33 + - path: output/last/lastdb/test.tis + md5sum: b7c40f06b1309dc6f37849eeb86dfd22 + +- name: last lastdb test_last_lastdb_gzipped_input + command: nextflow run tests/software/last/lastdb -entry test_last_lastdb_gzipped_input -c tests/config/nextflow.config + tags: + - last/lastdb + - last + files: + - path: output/last/lastdb/test.bck + md5sum: 8692b1229b1fff1c2d39c4c610ff842b + - path: output/last/lastdb/test.des + md5sum: 26ab49015cc572172b9efa50fc5190bc + - path: output/last/lastdb/test.prj + md5sum: aec51a18da1c2361aaca70dd16eb7b7b + - path: output/last/lastdb/test.sds + md5sum: cad9927d4bd161257e98165ad755d8e4 + - path: output/last/lastdb/test.ssp + md5sum: 574c8a080247c2af9b5c46ff70936186 + - path: output/last/lastdb/test.suf + md5sum: 8c406111b398631e51ca79d99b0ee897 + - path: output/last/lastdb/test.tis + md5sum: d57a3a5f7e3e036807356c15bd3aad97 diff --git a/tests/software/last/mafconvert/main.nf b/tests/software/last/mafconvert/main.nf new file mode 100644 index 00000000..4b62d652 --- /dev/null +++ b/tests/software/last/mafconvert/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_MAFCONVERT } from '../../../../software/last/mafconvert/main.nf' addParams( options: [:] ) + +workflow test_last_mafconvert { + + input = [ [ id:'contigs.genome' ], // meta map + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) ] + + LAST_MAFCONVERT ( input, "psl" ) +} diff --git a/tests/software/last/mafconvert/test.yml b/tests/software/last/mafconvert/test.yml new file mode 100644 index 00000000..0b508dfe --- /dev/null +++ b/tests/software/last/mafconvert/test.yml @@ -0,0 +1,8 @@ +- name: last mafconvert test_last_mafconvert + command: nextflow run tests/software/last/mafconvert -entry test_last_mafconvert -c tests/config/nextflow.config + tags: + - last/mafconvert + - last + files: + - path: output/last/contigs.genome.psl.gz + md5sum: 807889fbc4129884ae74c4ecf8804dde diff --git a/tests/software/last/mafswap/main.nf b/tests/software/last/mafswap/main.nf new file mode 100644 index 00000000..f531ab60 --- /dev/null +++ b/tests/software/last/mafswap/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_MAFSWAP } from '../../../../software/last/mafswap/main.nf' addParams( options: [:] ) + +workflow test_last_mafswap { + + input = [ [ id:'contigs.genome' ], // meta map + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) ] + + LAST_MAFSWAP ( input ) +} diff --git a/tests/software/last/mafswap/test.yml b/tests/software/last/mafswap/test.yml new file mode 100644 index 00000000..1e6b2f4d --- /dev/null +++ b/tests/software/last/mafswap/test.yml @@ -0,0 +1,8 @@ +- name: last mafswap test_last_mafswap + command: nextflow run tests/software/last/mafswap -entry test_last_mafswap -c tests/config/nextflow.config + tags: + - last + - last/mafswap + files: + - path: output/last/contigs.genome.swapped.maf.gz + md5sum: b98c5ff297878a19f1ab4f1a5e354678 diff --git a/tests/software/last/postmask/main.nf b/tests/software/last/postmask/main.nf new file mode 100644 index 00000000..aafd3bfc --- /dev/null +++ b/tests/software/last/postmask/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_POSTMASK } from '../../../../software/last/postmask/main.nf' addParams( options: [suffix:'.postmask'] ) + +workflow test_last_postmask { + + input = [ [ id:'contigs.genome' ], // meta map + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) ] + + LAST_POSTMASK ( input ) +} diff --git a/tests/software/last/postmask/test.yml b/tests/software/last/postmask/test.yml new file mode 100644 index 00000000..1ca73c9a --- /dev/null +++ b/tests/software/last/postmask/test.yml @@ -0,0 +1,8 @@ +- name: last postmask test_last_postmask + command: nextflow run tests/software/last/postmask -entry test_last_postmask -c tests/config/nextflow.config + tags: + - last + - last/postmask + files: + - path: output/last/contigs.genome.postmask.maf.gz + md5sum: 3a0f42e76da9549748983ac4d7ff7473 diff --git a/tests/software/last/split/main.nf b/tests/software/last/split/main.nf new file mode 100644 index 00000000..03bfd11c --- /dev/null +++ b/tests/software/last/split/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LAST_SPLIT } from '../../../../software/last/split/main.nf' addParams( options: ['suffix':'.split'] ) + +workflow test_last_split { + + input = [ [ id:'contigs.genome' ], // meta map + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) ] + + LAST_SPLIT ( input ) +} diff --git a/tests/software/last/split/test.yml b/tests/software/last/split/test.yml new file mode 100644 index 00000000..01ac8348 --- /dev/null +++ b/tests/software/last/split/test.yml @@ -0,0 +1,8 @@ +- name: last split test_last_split + command: nextflow run tests/software/last/split -entry test_last_split -c tests/config/nextflow.config + tags: + - last + - last/split + files: + - path: output/last/contigs.genome.split.maf.gz + md5sum: 2a177444f63c9294767a67a0247f0f05 diff --git a/tests/software/last/train/main.nf b/tests/software/last/train/main.nf new file mode 100644 index 00000000..8449f878 --- /dev/null +++ b/tests/software/last/train/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UNTAR } from '../../../../software/untar/main.nf' addParams( options: [:] ) +include { LAST_TRAIN } from '../../../../software/last/train/main.nf' addParams( options: [:] ) + +workflow test_last_train { + + db = [ file(params.test_data['sarscov2']['genome']['lastdb_tar_gz'], checkIfExists: true) ] + input = [ [ id:'contigs' ], // meta map + file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true) ] + UNTAR ( db ) + LAST_TRAIN ( input, UNTAR.out.untar ) +} diff --git a/tests/software/last/train/test.yml b/tests/software/last/train/test.yml new file mode 100644 index 00000000..2f356c3f --- /dev/null +++ b/tests/software/last/train/test.yml @@ -0,0 +1,23 @@ +- name: last train test_last_train + command: nextflow run tests/software/last/train -entry test_last_train -c tests/config/nextflow.config + tags: + - last/train + - last + files: + - path: output/last/contigs.genome.par + contains: + - "score matrix" + - path: output/untar/lastdb/genome.bck + md5sum: 5519879b9b6c4d1fc508da7f17f88f2e + - path: output/untar/lastdb/genome.des + md5sum: 3a9ea6d336e113a74d7fdca5e7b623fc + - path: output/untar/lastdb/genome.prj + md5sum: 489715f14b0fea6273822696e72357f9 + - path: output/untar/lastdb/genome.sds + md5sum: 2cd381f4f8a9c52cfcd323a2863eccb2 + - path: output/untar/lastdb/genome.ssp + md5sum: 4137fb6fe9df2b3d78d5b960390aac7b + - path: output/untar/lastdb/genome.suf + md5sum: 1895efa8653e8e9bd3605cff0408ed33 + - path: output/untar/lastdb/genome.tis + md5sum: b7c40f06b1309dc6f37849eeb86dfd22 diff --git a/tests/software/lofreq/call/main.nf b/tests/software/lofreq/call/main.nf new file mode 100644 index 00000000..235e54aa --- /dev/null +++ b/tests/software/lofreq/call/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LOFREQ_CALL } from '../../../../software/lofreq/call/main.nf' addParams( options: [:] ) + +workflow test_lofreq_call { + + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) ] + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + LOFREQ_CALL ( input, fasta ) +} diff --git a/tests/software/lofreq/call/test.yml b/tests/software/lofreq/call/test.yml new file mode 100644 index 00000000..518c4ea1 --- /dev/null +++ b/tests/software/lofreq/call/test.yml @@ -0,0 +1,8 @@ +- name: lofreq call test_lofreq_call + command: nextflow run tests/software/lofreq/call -entry test_lofreq_call -c tests/config/nextflow.config + tags: + - lofreq + - lofreq/call + files: + - path: output/lofreq/test.vcf.gz + md5sum: 421b407a172191e54d054018c8868cf7 diff --git a/tests/software/lofreq/callparallel/main.nf b/tests/software/lofreq/callparallel/main.nf new file mode 100644 index 00000000..7ed3ac59 --- /dev/null +++ b/tests/software/lofreq/callparallel/main.nf @@ -0,0 +1,18 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LOFREQ_CALLPARALLEL } from '../../../../software/lofreq/callparallel/main.nf' addParams( options: [:] ) + +workflow test_lofreq_callparallel { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + + LOFREQ_CALLPARALLEL ( input, fasta, fai ) +} diff --git a/tests/software/lofreq/callparallel/test.yml b/tests/software/lofreq/callparallel/test.yml new file mode 100644 index 00000000..39261d41 --- /dev/null +++ b/tests/software/lofreq/callparallel/test.yml @@ -0,0 +1,7 @@ +- name: lofreq callparallel + command: nextflow run ./tests/software/lofreq/callparallel -entry test_lofreq_callparallel -c tests/config/nextflow.config + tags: + - lofreq + - lofreq/callparallel + files: + - path: output/lofreq/test.vcf diff --git a/tests/software/lofreq/filter/main.nf b/tests/software/lofreq/filter/main.nf new file mode 100644 index 00000000..172b1743 --- /dev/null +++ b/tests/software/lofreq/filter/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { LOFREQ_FILTER } from '../../../../software/lofreq/filter/main.nf' addParams( options: [:] ) + +workflow test_lofreq_filter { + + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + + LOFREQ_FILTER ( input ) +} diff --git a/tests/software/lofreq/filter/test.yml b/tests/software/lofreq/filter/test.yml new file mode 100644 index 00000000..56274b87 --- /dev/null +++ b/tests/software/lofreq/filter/test.yml @@ -0,0 +1,8 @@ +- name: lofreq filter test_lofreq_filter + command: nextflow run tests/software/lofreq/filter -entry test_lofreq_filter -c tests/config/nextflow.config + tags: + - lofreq + - lofreq/filter + files: + - path: output/lofreq/test.vcf.gz + md5sum: 1914d9bc5d855ff11fe89da7d795e57a diff --git a/tests/software/lofreq/indelqual/main.nf b/tests/software/lofreq/indelqual/main.nf new file mode 100644 index 00000000..8dd76029 --- /dev/null +++ b/tests/software/lofreq/indelqual/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + + +include { LOFREQ_INDELQUAL } from '../../../../software/lofreq/indelqual/main.nf' addParams( options: [ 'args': '--dindel', 'suffix':'.indelqual'] ) + +workflow test_lofreq_indelqual { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + LOFREQ_INDELQUAL ( input, fasta ) +} diff --git a/tests/software/lofreq/indelqual/test.yml b/tests/software/lofreq/indelqual/test.yml new file mode 100644 index 00000000..769e4b04 --- /dev/null +++ b/tests/software/lofreq/indelqual/test.yml @@ -0,0 +1,8 @@ +- name: lofreq indelqual + command: nextflow run ./tests/software/lofreq/indelqual -entry test_lofreq_indelqual -c tests/config/nextflow.config + tags: + - lofreq + - lofreq/indelqual + files: + - path: output/lofreq/test.indelqual.bam + md5sum: 18de975638c2633069bfe1a41ebc5ff7 diff --git a/tests/software/mash/sketch/main.nf b/tests/software/mash/sketch/main.nf new file mode 100644 index 00000000..45b57444 --- /dev/null +++ b/tests/software/mash/sketch/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { MASH_SKETCH } from '../../../../software/mash/sketch/main.nf' addParams( options: [:] ) + +workflow test_mash_sketch { + + input = [ [ id:'test', single_end:false], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + + MASH_SKETCH ( input ) +} diff --git a/tests/software/mash/sketch/test.yml b/tests/software/mash/sketch/test.yml new file mode 100644 index 00000000..11d2d86f --- /dev/null +++ b/tests/software/mash/sketch/test.yml @@ -0,0 +1,9 @@ +- name: mash sketch + command: nextflow run ./tests/software/mash/sketch -entry test_mash_sketch -c tests/config/nextflow.config + tags: + - mash/sketch + files: + - path: output/mash/test.msh + md5sum: d747145a43dad5f82342036f8f5d9133 + - path: output/mash/test.mash_stats + md5sum: 2a6f297d8e69a5e4160243bc6c89129c diff --git a/tests/software/metaphlan3/main.nf b/tests/software/metaphlan3/main.nf new file mode 100644 index 00000000..4ca176bf --- /dev/null +++ b/tests/software/metaphlan3/main.nf @@ -0,0 +1,59 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UNTAR } from '../../../software/untar/main.nf' addParams( options: [:] ) +include { SAMTOOLS_VIEW } from '../../../software/samtools/view/main.nf' addParams( options: ['suffix': '.sam'] ) +include { METAPHLAN3 } from '../../../software/metaphlan3/main.nf' addParams( options: [ 'args':'--index mpa_v30_CHOCOPhlAn_201901 --add_viruses --bt2_ps very-sensitive-local' ] ) + +workflow test_metaphlan3_single_end { + + input = [ [ id:'test', single_end:true ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + ] + + db = channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/metaphlan_database.tar.gz', type: 'dir', checkIfExists: true) + + UNTAR ( db ) + METAPHLAN3 ( input, UNTAR.out.untar ) +} + +workflow test_metaphlan3_paired_end { + + input = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + + db = channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/metaphlan_database.tar.gz', type: 'dir', checkIfExists: true) + + + UNTAR ( db ) + METAPHLAN3 ( input, UNTAR.out.untar ) +} + +workflow test_metaphlan3_sam { + + input = [ [ id:'test'], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_single_end_bam'], checkIfExists: true) ] + ] + + db = channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/metaphlan_database.tar.gz', type: 'dir', checkIfExists: true) + + + UNTAR ( db ) + SAMTOOLS_VIEW ( input ) + METAPHLAN3 ( SAMTOOLS_VIEW.out.bam, UNTAR.out.untar ) +} + +workflow test_metaphlan3_fasta { + + input = [ [ id:'test', single_end:true], // meta map + [ file(params.test_data['sarscov2']['genome']['transcriptome_fasta'], checkIfExists: true) ] + ] + + db = channel.fromPath('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/metaphlan_database.tar.gz', type: 'dir', checkIfExists: true) + + UNTAR ( db ) + METAPHLAN3 ( input, UNTAR.out.untar ) +} diff --git a/tests/software/metaphlan3/test.yml b/tests/software/metaphlan3/test.yml new file mode 100644 index 00000000..b01b24ad --- /dev/null +++ b/tests/software/metaphlan3/test.yml @@ -0,0 +1,123 @@ +- name: metaphlan3 test_metaphlan3_single_end + command: nextflow run tests/software/metaphlan3 -entry test_metaphlan3_single_end -c tests/config/nextflow.config + tags: + - metaphlan3 + files: + - path: output/metaphlan3/test.biom + contains: + - '"format": "Biological Observation Matrix 1.0.0","format_url": "http://biom-format.org","generated_by"' + - path: output/metaphlan3/test.bowtie2out.txt + md5sum: ef46a9c6a8ce9cae26fbfd5527116fd5 + - path: output/metaphlan3/test_profile.txt + md5sum: 72d40ee2304c162f3c165e1e578ed152 + - path: output/untar/metaphlan_database/mpa_latest + md5sum: b1337362f607000384563a56a6ff4790 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.1.bt2 + md5sum: d52a98fe273742ade7c744b819a7c5c1 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.2.bt2 + md5sum: b14cc7faf3a4fae792160c917aebfe03 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.3.bt2 + md5sum: 1bca5df879f2c6fad0c54984d0651bfb + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.4.bt2 + md5sum: 249ee1c672d52d50cee41cb94b6adc42 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.fasta + md5sum: d3efe201c9eb449e877ead36656abf5f + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.pkl + md5sum: b208bb15eaef50d91cc7d5e35a1518ee + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.1.bt2 + md5sum: ed05be063280e8629193e52903b07591 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.2.bt2 + md5sum: 1ca16b905abf657b88ca2bc12e7ad404 + +- name: metaphlan3 test_metaphlan3_paired_end + command: nextflow run tests/software/metaphlan3 -entry test_metaphlan3_paired_end -c tests/config/nextflow.config + tags: + - metaphlan3 + files: + - path: output/metaphlan3/test.biom + contains: + - '"format": "Biological Observation Matrix 1.0.0","format_url": "http://biom-format.org","generated_by"' + - path: output/metaphlan3/test.bowtie2out.txt + md5sum: ce11486fcc0e68fe7152867a3634e09a + - path: output/metaphlan3/test_profile.txt + md5sum: fcf99fec08ee00db6ef2c12fb93bc14b + - path: output/untar/metaphlan_database/mpa_latest + md5sum: b1337362f607000384563a56a6ff4790 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.1.bt2 + md5sum: d52a98fe273742ade7c744b819a7c5c1 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.2.bt2 + md5sum: b14cc7faf3a4fae792160c917aebfe03 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.3.bt2 + md5sum: 1bca5df879f2c6fad0c54984d0651bfb + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.4.bt2 + md5sum: 249ee1c672d52d50cee41cb94b6adc42 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.fasta + md5sum: d3efe201c9eb449e877ead36656abf5f + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.pkl + md5sum: b208bb15eaef50d91cc7d5e35a1518ee + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.1.bt2 + md5sum: ed05be063280e8629193e52903b07591 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.2.bt2 + md5sum: 1ca16b905abf657b88ca2bc12e7ad404 + +- name: metaphlan3 test_metaphlan3_sam + command: nextflow run tests/software/metaphlan3 -entry test_metaphlan3_sam -c tests/config/nextflow.config + tags: + - metaphlan3 + files: + - path: output/metaphlan3/test.biom + contains: + - '"format": "Biological Observation Matrix 1.0.0","format_url": "http://biom-format.org","generated_by"' + - path: output/metaphlan3/test_profile.txt + md5sum: e050d49f7df8a23617880ef9ed7745a0 + - path: output/samtools/test.sam.bam + md5sum: 1d5be3c91979ead358e3980e3e7c9acf + - path: output/untar/metaphlan_database/mpa_latest + md5sum: b1337362f607000384563a56a6ff4790 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.1.bt2 + md5sum: d52a98fe273742ade7c744b819a7c5c1 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.2.bt2 + md5sum: b14cc7faf3a4fae792160c917aebfe03 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.3.bt2 + md5sum: 1bca5df879f2c6fad0c54984d0651bfb + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.4.bt2 + md5sum: 249ee1c672d52d50cee41cb94b6adc42 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.fasta + md5sum: d3efe201c9eb449e877ead36656abf5f + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.pkl + md5sum: b208bb15eaef50d91cc7d5e35a1518ee + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.1.bt2 + md5sum: ed05be063280e8629193e52903b07591 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.2.bt2 + md5sum: 1ca16b905abf657b88ca2bc12e7ad404 + +- name: metaphlan3 test_metaphlan3_fasta + command: nextflow run tests/software/metaphlan3 -entry test_metaphlan3_fasta -c tests/config/nextflow.config + tags: + - metaphlan3 + files: + - path: output/metaphlan3/test.biom + contains: + - '"format": "Biological Observation Matrix 1.0.0","format_url": "http://biom-format.org","generated_by"' + - path: output/metaphlan3/test.bowtie2out.txt + md5sum: fece494a410b8328608a11de10af6396 + - path: output/metaphlan3/test_profile.txt + md5sum: d148c4203e5a9d59f5eea57207e40769 + - path: output/untar/metaphlan_database/mpa_latest + md5sum: b1337362f607000384563a56a6ff4790 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.1.bt2 + md5sum: d52a98fe273742ade7c744b819a7c5c1 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.2.bt2 + md5sum: b14cc7faf3a4fae792160c917aebfe03 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.3.bt2 + md5sum: 1bca5df879f2c6fad0c54984d0651bfb + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.4.bt2 + md5sum: 249ee1c672d52d50cee41cb94b6adc42 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.fasta + md5sum: d3efe201c9eb449e877ead36656abf5f + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.pkl + md5sum: b208bb15eaef50d91cc7d5e35a1518ee + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.1.bt2 + md5sum: ed05be063280e8629193e52903b07591 + - path: output/untar/metaphlan_database/mpa_v30_CHOCOPhlAn_201901.rev.2.bt2 + md5sum: 1ca16b905abf657b88ca2bc12e7ad404 diff --git a/tests/software/methyldackel/extract/main.nf b/tests/software/methyldackel/extract/main.nf index 67619625..b1ba8327 100644 --- a/tests/software/methyldackel/extract/main.nf +++ b/tests/software/methyldackel/extract/main.nf @@ -6,8 +6,8 @@ include { METHYLDACKEL_EXTRACT } from '../../../../software/methyldackel/extract workflow test_methyldackel_extract { input = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam_bai'], checkIfExists: true) ] + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam_bai'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) diff --git a/tests/software/methyldackel/extract/test.yml b/tests/software/methyldackel/extract/test.yml index 631aaf7a..6f80e8b0 100644 --- a/tests/software/methyldackel/extract/test.yml +++ b/tests/software/methyldackel/extract/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/methyldackel/extract -entry test_methyldackel_extract -c tests/config/nextflow.config tags: - methyldackel - - methyldackel_extract + - methyldackel/extract files: - - path: output/methyldackel/test_methylated_paired_end.sorted_CpG.bedGraph - md5sum: d7c637e2ef20de401fc610206f6bf6b7 + - path: output/methyldackel/test.paired_end.methylated.sorted_CpG.bedGraph + md5sum: abcc9d1db6e48d5aced567c337b563d4 diff --git a/tests/software/methyldackel/mbias/main.nf b/tests/software/methyldackel/mbias/main.nf index 3f33c8d1..96fa95f4 100644 --- a/tests/software/methyldackel/mbias/main.nf +++ b/tests/software/methyldackel/mbias/main.nf @@ -6,8 +6,8 @@ include { METHYLDACKEL_MBIAS } from '../../../../software/methyldackel/mbias/mai workflow test_methyldackel_mbias { input = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam_bai'], checkIfExists: true) ] + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam_bai'], checkIfExists: true) ] fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) diff --git a/tests/software/methyldackel/mbias/test.yml b/tests/software/methyldackel/mbias/test.yml index 9d63f2fe..73cc4fbe 100644 --- a/tests/software/methyldackel/mbias/test.yml +++ b/tests/software/methyldackel/mbias/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/methyldackel/mbias -entry test_methyldackel_mbias -c tests/config/nextflow.config tags: - methyldackel - - methyldackel_mbias + - methyldackel/mbias files: - path: output/methyldackel/test.mbias.txt md5sum: 357bb944dc2cdffcc47fa0d34376e016 diff --git a/tests/software/minimap2/align/main.nf b/tests/software/minimap2/align/main.nf index 522431e1..aabb372e 100644 --- a/tests/software/minimap2/align/main.nf +++ b/tests/software/minimap2/align/main.nf @@ -6,19 +6,19 @@ include { MINIMAP2_ALIGN } from '../../../../software/minimap2/align/main.nf' ad workflow test_minimap2_align_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)] ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) MINIMAP2_ALIGN ( input, fasta ) } workflow test_minimap2_align_paired_end { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) MINIMAP2_ALIGN ( input, fasta ) } diff --git a/tests/software/minimap2/align/test.yml b/tests/software/minimap2/align/test.yml index 9fdf1753..30b6bf90 100644 --- a/tests/software/minimap2/align/test.yml +++ b/tests/software/minimap2/align/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/minimap2/align -entry test_minimap2_align_single_end -c tests/config/nextflow.config tags: - minimap2 - - minimap2_align - - minimap2_align_single_end + - minimap2/align files: - path: ./output/minimap2/test.paf md5sum: 5a9648fc67c30a2c83b0ef094171faa0 @@ -12,8 +11,7 @@ command: nextflow run ./tests/software/minimap2/align -entry test_minimap2_align_paired_end -c tests/config/nextflow.config tags: - minimap2 - - minimap2_align - - minimap2_align_paired_end + - minimap2/align files: - path: ./output/minimap2/test.paf md5sum: e7b952be872bdbef16bf99d512690df7 diff --git a/tests/software/minimap2/index/main.nf b/tests/software/minimap2/index/main.nf new file mode 100644 index 00000000..6949f587 --- /dev/null +++ b/tests/software/minimap2/index/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { MINIMAP2_INDEX } from '../../../../software/minimap2/index/main.nf' addParams( options: [:] ) + +workflow test_minimap2_index { + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + MINIMAP2_INDEX ( fasta ) +} diff --git a/tests/software/minimap2/index/test.yml b/tests/software/minimap2/index/test.yml new file mode 100644 index 00000000..8d4ccae8 --- /dev/null +++ b/tests/software/minimap2/index/test.yml @@ -0,0 +1,8 @@ +- name: minimap2 index + command: nextflow run ./tests/software/minimap2/index -entry test_minimap2_index -c tests/config/nextflow.config + tags: + - minimap2 + - minimap2/index + files: + - path: ./output/minimap2/genome.mmi + md5sum: 72e450f12dc691e763c697463bdb1571 diff --git a/tests/software/msisensor/msi/main.nf b/tests/software/msisensor/msi/main.nf index af61fcf9..a5c9d12d 100644 --- a/tests/software/msisensor/msi/main.nf +++ b/tests/software/msisensor/msi/main.nf @@ -20,8 +20,8 @@ workflow test_msisensor_msi { def input = [] input = Channel.from([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam_bai'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) ]) //scan.txt.view() diff --git a/tests/software/msisensor/msi/test.yml b/tests/software/msisensor/msi/test.yml index 152bf60a..e3cbefb9 100644 --- a/tests/software/msisensor/msi/test.yml +++ b/tests/software/msisensor/msi/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/msisensor/msi -entry test_msisensor_msi -c tests/config/nextflow.config tags: - msisensor - - msisensor_msi + - msisensor/msi files: - path: output/msisensor/test md5sum: a3290f7539dbbf83777e8590156c0e28 diff --git a/tests/software/msisensor/scan/test.yml b/tests/software/msisensor/scan/test.yml index 7d8f6e5c..aa567e37 100644 --- a/tests/software/msisensor/scan/test.yml +++ b/tests/software/msisensor/scan/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/msisensor/scan -entry test_msisensor_scan -c tests/config/nextflow.config tags: - msisensor - - msisensor_scan + - msisensor/scan files: - path: output/msisensor/test.msisensor_scan.tab md5sum: b7ae85acdcfc1a51e867ab3446d6fb59 diff --git a/tests/software/muscle/main.nf b/tests/software/muscle/main.nf new file mode 100644 index 00000000..2119b0fa --- /dev/null +++ b/tests/software/muscle/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { MUSCLE } from '../../../software/muscle/main.nf' addParams( options: ['args': '-fasta -verbose -phys -phyi -maxiters 2']) +include { MUSCLE as MUSCLE_TREE } from '../../../software/muscle/main.nf' addParams( options: ['args': '-maketree']) + +workflow test_muscle { + + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + MUSCLE ( input ) + MUSCLE_TREE ( MUSCLE.out.aligned_fasta ) +} diff --git a/tests/software/muscle/test.yml b/tests/software/muscle/test.yml new file mode 100644 index 00000000..8f7db089 --- /dev/null +++ b/tests/software/muscle/test.yml @@ -0,0 +1,14 @@ +- name: muscle test_muscle + command: nextflow run tests/software/muscle -entry test_muscle -c tests/config/nextflow.config + tags: + - muscle + files: + - path: output/muscle/muscle_msa.log + - path: output/muscle/test_muscle_msa.afa + md5sum: 93732f6876054d82b0cd252d702c143f + - path: output/muscle/test_muscle_msa.phyi + md5sum: 1f2a246dcca53125456149770763d5d1 + - path: output/muscle/test_muscle_msa.phys + md5sum: 12f9dd45672a3d92ba1205fcc8010490 + - path: output/muscle/test_muscle_msa.tree + md5sum: 6bf1080bca2440f08ffa2675f74f732a diff --git a/tests/software/nanolyse/main.nf b/tests/software/nanolyse/main.nf new file mode 100644 index 00000000..8a1676ce --- /dev/null +++ b/tests/software/nanolyse/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { NANOLYSE } from '../../../software/nanolyse/main.nf' addParams( options: [suffix: '.clean'] ) + +workflow test_nanolyse { + input = [ + [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true)] + ] + + fasta = file("https://github.com/wdecoster/nanolyse/raw/master/reference/lambda.fasta.gz", checkIfExists: true) + + NANOLYSE ( input, fasta ) +} diff --git a/tests/software/nanolyse/test.yml b/tests/software/nanolyse/test.yml new file mode 100644 index 00000000..54f34422 --- /dev/null +++ b/tests/software/nanolyse/test.yml @@ -0,0 +1,6 @@ +- name: nanolyse + command: nextflow run ./tests/software/nanolyse -entry test_nanolyse -c tests/config/nextflow.config + tags: + - nanolyse + files: + - path: ./output/nanolyse/test.clean.fastq.gz diff --git a/tests/software/nanoplot/main.nf b/tests/software/nanoplot/main.nf new file mode 100644 index 00000000..0000cb31 --- /dev/null +++ b/tests/software/nanoplot/main.nf @@ -0,0 +1,21 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { NANOPLOT } from '../../../software/nanoplot/main.nf' addParams( options: [:] ) + +workflow test_nanoplot_summary { + def input = [] + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['nanopore']['test_sequencing_summary'], checkIfExists: true) ] ] + + NANOPLOT ( input ) +} + +workflow test_nanoplot_fastq { + def input = [] + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true) ] ] + + NANOPLOT ( input ) +} diff --git a/tests/software/nanoplot/test.yml b/tests/software/nanoplot/test.yml new file mode 100644 index 00000000..0ad55a5a --- /dev/null +++ b/tests/software/nanoplot/test.yml @@ -0,0 +1,17 @@ + +- name: nanoplot_summary + command: nextflow run ./tests/software/nanoplot -entry test_nanoplot_summary -c tests/config/nextflow.config + tags: + - nanoplot + files: + - path: ./output/nanoplot/NanoPlot-report.html + contains: + - "report" +- name: nanoplot_fastq + command: nextflow run ./tests/software/nanoplot -entry test_nanoplot_fastq -c tests/config/nextflow.config + tags: + - nanoplot + files: + - path: ./output/nanoplot/NanoPlot-report.html + contains: + - "report" diff --git a/tests/software/nextclade/main.nf b/tests/software/nextclade/main.nf new file mode 100755 index 00000000..c86c9ce7 --- /dev/null +++ b/tests/software/nextclade/main.nf @@ -0,0 +1,33 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { NEXTCLADE } from '../../../software/nextclade/main.nf' addParams( options: [:] ) + +workflow test_nextclade_json { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + NEXTCLADE ( input, 'json' ) +} + +workflow test_nextclade_csv { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + NEXTCLADE ( input, 'csv' ) +} + +workflow test_nextclade_tsv { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + NEXTCLADE ( input, 'tsv' ) +} + +workflow test_nextclade_tree { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + NEXTCLADE ( input, 'tree' ) +} diff --git a/tests/software/nextclade/test.yml b/tests/software/nextclade/test.yml new file mode 100755 index 00000000..eaa6a3c8 --- /dev/null +++ b/tests/software/nextclade/test.yml @@ -0,0 +1,31 @@ +- name: nextclade test_nextclade_json + command: nextflow run tests/software/nextclade -entry test_nextclade_json -c tests/config/nextflow.config + tags: + - nextclade + files: + - path: output/nextclade/test.json + md5sum: cab92830c5cb66076e7d6c054ea98362 + +- name: nextclade test_nextclade_csv + command: nextflow run tests/software/nextclade -entry test_nextclade_csv -c tests/config/nextflow.config + tags: + - nextclade + files: + - path: output/nextclade/test.csv + md5sum: 4f7096df9be51f99a0d62a38653b29cf + +- name: nextclade test_nextclade_tsv + command: nextflow run tests/software/nextclade -entry test_nextclade_tsv -c tests/config/nextflow.config + tags: + - nextclade + files: + - path: output/nextclade/test.tsv + md5sum: fe07dc4ffcd81742ca9bef93f88e8836 + +- name: nextclade test_nextclade_tree + command: nextflow run tests/software/nextclade -entry test_nextclade_tree -c tests/config/nextflow.config + tags: + - nextclade + files: + - path: output/nextclade/test.tree.json + md5sum: 5c57dd724bc2b5cfde8f42a17ff2865a diff --git a/tests/software/pairix/main.nf b/tests/software/pairix/main.nf new file mode 100644 index 00000000..bba56ea2 --- /dev/null +++ b/tests/software/pairix/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRIX } from '../../../software/pairix/main.nf' addParams( options: [:] ) + +workflow test_pairix { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/4dn-dcic/pairix/master/samples/4dn.bsorted.chr21_22_only.nontriangle.pairs.gz", checkIfExists: true) ] + + PAIRIX ( input ) +} diff --git a/tests/software/pairix/test.yml b/tests/software/pairix/test.yml new file mode 100644 index 00000000..89e596d1 --- /dev/null +++ b/tests/software/pairix/test.yml @@ -0,0 +1,9 @@ +- name: pairix test_pairix + command: nextflow run tests/software/pairix -entry test_pairix -c tests/config/nextflow.config + tags: + - pairix + files: + - path: output/pairix/4dn.bsorted.chr21_22_only.nontriangle.pairs.gz + md5sum: a0165859d0151f45fe6fb206f2f4814b + - path: output/pairix/4dn.bsorted.chr21_22_only.nontriangle.pairs.gz.px2 + md5sum: a6e41cc7cff16fd15b5ee505549ec99a diff --git a/tests/software/pairtools/dedup/main.nf b/tests/software/pairtools/dedup/main.nf new file mode 100644 index 00000000..44e3dc15 --- /dev/null +++ b/tests/software/pairtools/dedup/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_DEDUP } from '../../../../software/pairtools/dedup/main.nf' addParams( options: ['suffix':'.dedup'] ) + +workflow test_pairtools_dedup { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.4dedup.pairsam", checkIfExists: true) ] + + PAIRTOOLS_DEDUP ( input ) +} diff --git a/tests/software/pairtools/dedup/test.yml b/tests/software/pairtools/dedup/test.yml new file mode 100644 index 00000000..b3988ecc --- /dev/null +++ b/tests/software/pairtools/dedup/test.yml @@ -0,0 +1,10 @@ +- name: pairtools dedup test_pairtools_dedup + command: nextflow run tests/software/pairtools/dedup -entry test_pairtools_dedup -c tests/config/nextflow.config + tags: + - pairtools/dedup + - pairtools + files: + - path: output/pairtools/test.dedup.pairs.gz + md5sum: 785ffc9495731fd3d0f6f679a0a0e988 + - path: output/pairtools/test.dedup.pairs.stat + md5sum: a554a846567cbcda66f070c76a9173bc diff --git a/tests/software/pairtools/flip/main.nf b/tests/software/pairtools/flip/main.nf new file mode 100644 index 00000000..84b5a1ba --- /dev/null +++ b/tests/software/pairtools/flip/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_FLIP } from '../../../../software/pairtools/flip/main.nf' addParams( options: [:] ) + +workflow test_pairtools_flip { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.4flip.pairs", checkIfExists: true) ] + sizes = file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.chrom.sizes", checkIfExists:true) + + PAIRTOOLS_FLIP ( input, sizes ) +} diff --git a/tests/software/pairtools/flip/test.yml b/tests/software/pairtools/flip/test.yml new file mode 100644 index 00000000..e4fb8d31 --- /dev/null +++ b/tests/software/pairtools/flip/test.yml @@ -0,0 +1,7 @@ +- name: pairtools flip test_pairtools_flip + command: nextflow run tests/software/pairtools/flip -entry test_pairtools_flip -c tests/config/nextflow.config + tags: + - pairtools/flip + - pairtools + files: + - path: output/pairtools/test.flip.gz diff --git a/tests/software/pairtools/parse/main.nf b/tests/software/pairtools/parse/main.nf new file mode 100644 index 00000000..32a2db56 --- /dev/null +++ b/tests/software/pairtools/parse/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_PARSE } from '../../../../software/pairtools/parse/main.nf' addParams( options: ['suffix':'.raw'] ) + +workflow test_pairtools_parse { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.sam", checkIfExists: true) ] + sizes = file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.chrom.sizes", checkIfExists:true) + + PAIRTOOLS_PARSE ( input, sizes ) +} diff --git a/tests/software/pairtools/parse/test.yml b/tests/software/pairtools/parse/test.yml new file mode 100644 index 00000000..91e1ab68 --- /dev/null +++ b/tests/software/pairtools/parse/test.yml @@ -0,0 +1,9 @@ +- name: pairtools parse test_pairtools_parse + command: nextflow run tests/software/pairtools/parse -entry test_pairtools_parse -c tests/config/nextflow.config + tags: + - pairtools + - pairtools/parse + files: + - path: output/pairtools/test.raw.pairsam.gz + - path: output/pairtools/test.raw.pairsam.stat + md5sum: 11e90f346f855ffd750c7c348ac1d456 diff --git a/tests/software/pairtools/restrict/main.nf b/tests/software/pairtools/restrict/main.nf new file mode 100644 index 00000000..406227ce --- /dev/null +++ b/tests/software/pairtools/restrict/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_RESTRICT } from '../../../../software/pairtools/restrict/main.nf' addParams( options: ['suffix':'.restrict'] ) + +workflow test_pairtools_restrict { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.4flip.pairs", checkIfExists: true) ] + File dig = new File("${workflow.workDir}/frag.bed") + dig.write("chr1\t0\t50\r\nchr1\t50\t100\r\nchr2\t0\t50\r\nchr2\t50\t100\r\n!\t0\t1\r\n") + frag = file(dig) + + PAIRTOOLS_RESTRICT ( input, frag ) +} diff --git a/tests/software/pairtools/restrict/test.yml b/tests/software/pairtools/restrict/test.yml new file mode 100644 index 00000000..2d64403b --- /dev/null +++ b/tests/software/pairtools/restrict/test.yml @@ -0,0 +1,7 @@ +- name: pairtools restrict test_pairtools_restrict + command: nextflow run tests/software/pairtools/restrict -entry test_pairtools_restrict -c tests/config/nextflow.config + tags: + - pairtools/restrict + - pairtools + files: + - path: output/pairtools/test.restrict.pairs.gz diff --git a/tests/software/pairtools/select/main.nf b/tests/software/pairtools/select/main.nf new file mode 100644 index 00000000..24d5bcf8 --- /dev/null +++ b/tests/software/pairtools/select/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_SELECT } from '../../../../software/pairtools/select/main.nf' addParams( options: [args:"(pair_type == 'RU') or (pair_type == 'UR') or (pair_type == 'UU')"] ) + +workflow test_pairtools_select { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.pairsam", checkIfExists: true) ] + + PAIRTOOLS_SELECT ( input ) +} diff --git a/tests/software/pairtools/select/test.yml b/tests/software/pairtools/select/test.yml new file mode 100644 index 00000000..1b8cbb84 --- /dev/null +++ b/tests/software/pairtools/select/test.yml @@ -0,0 +1,8 @@ +- name: pairtools select test_pairtools_select + command: nextflow run tests/software/pairtools/select -entry test_pairtools_select -c tests/config/nextflow.config + tags: + - pairtools/select + - pairtools + files: + - path: output/pairtools/test.selected.pairs.gz + - path: output/pairtools/test.unselected.pairs.gz diff --git a/tests/software/pairtools/sort/main.nf b/tests/software/pairtools/sort/main.nf new file mode 100644 index 00000000..622b211a --- /dev/null +++ b/tests/software/pairtools/sort/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PAIRTOOLS_SORT } from '../../../../software/pairtools/sort/main.nf' addParams( options: ['suffix':'.sorted'] ) + +workflow test_pairtools_sort { + + input = [ [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/open2c/pairtools/master/tests/data/mock.pairsam", checkIfExists: true) ] + + PAIRTOOLS_SORT ( input ) +} diff --git a/tests/software/pairtools/sort/test.yml b/tests/software/pairtools/sort/test.yml new file mode 100644 index 00000000..bd3d0e11 --- /dev/null +++ b/tests/software/pairtools/sort/test.yml @@ -0,0 +1,7 @@ +- name: pairtools sort test_pairtools_sort + command: nextflow run tests/software/pairtools/sort -entry test_pairtools_sort -c tests/config/nextflow.config + tags: + - pairtools/sort + - pairtools + files: + - path: output/pairtools/test.sorted.pairs.gz diff --git a/tests/software/pangolin/test.yml b/tests/software/pangolin/test.yml index ea7a0b71..b2555331 100644 --- a/tests/software/pangolin/test.yml +++ b/tests/software/pangolin/test.yml @@ -4,4 +4,4 @@ - pangolin files: - path: ./output/pangolin/test.pangolin.csv - md5sum: c8b1720f98c9e032908f61bbc05a0fe2 + md5sum: 02d916f18095694a7641ebc29fecaeae diff --git a/tests/software/picard/collectmultiplemetrics/test.yml b/tests/software/picard/collectmultiplemetrics/test.yml index 20ca5da3..15eb4b57 100644 --- a/tests/software/picard/collectmultiplemetrics/test.yml +++ b/tests/software/picard/collectmultiplemetrics/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/picard/collectmultiplemetrics -entry test_picard_collectmultiplemetrics -c tests/config/nextflow.config tags: - picard - - picard_collectmultiplemetrics + - picard/collectmultiplemetrics files: # These can't be md5'd consistently - path: ./output/picard/test.CollectMultipleMetrics.alignment_summary_metrics diff --git a/tests/software/picard/collectwgsmetrics/test.yml b/tests/software/picard/collectwgsmetrics/test.yml index 2e9f0f22..ef76fb4c 100644 --- a/tests/software/picard/collectwgsmetrics/test.yml +++ b/tests/software/picard/collectwgsmetrics/test.yml @@ -1,7 +1,7 @@ - name: picard collectwgsmetrics test_picard_collectwgsmetrics command: nextflow run tests/software/picard/collectwgsmetrics -entry test_picard_collectwgsmetrics -c tests/config/nextflow.config tags: - - picard_collectwgsmetrics + - picard/collectwgsmetrics - picard files: - path: output/picard/test.CollectWgsMetrics.coverage_metrics diff --git a/tests/software/picard/markduplicates/test.yml b/tests/software/picard/markduplicates/test.yml index 021c7a22..8516cb28 100644 --- a/tests/software/picard/markduplicates/test.yml +++ b/tests/software/picard/markduplicates/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/picard/markduplicates -entry test_picard_markduplicates_sorted_bam -c tests/config/nextflow.config tags: - picard - - picard_markduplicates + - picard/markduplicates files: - path: ./output/picard/test.MarkDuplicates.metrics.txt - path: ./output/picard/test.bam @@ -12,6 +12,5 @@ command: nextflow run ./tests/software/picard/markduplicates -entry test_picard_markduplicates_unsorted_bam -c tests/config/nextflow.config tags: - picard - - picard_markduplicates - - should fail + - picard/markduplicates exit_code: 1 diff --git a/tests/software/picard/mergesamfiles/test.yml b/tests/software/picard/mergesamfiles/test.yml index 46a790fa..4f060fbe 100644 --- a/tests/software/picard/mergesamfiles/test.yml +++ b/tests/software/picard/mergesamfiles/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/picard/mergesamfiles -entry test_picard_mergesamfiles -c tests/config/nextflow.config tags: - picard - - picard_mergesamfiles + - picard/mergesamfiles files: - path: ./output/picard/test.bam md5sum: b8bd6c22f36c6ebc91bca98bd637a2eb diff --git a/tests/software/plasmidid/main.nf b/tests/software/plasmidid/main.nf new file mode 100644 index 00000000..44a022df --- /dev/null +++ b/tests/software/plasmidid/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PLASMIDID } from '../../../software/plasmidid/main.nf' addParams ( options: ['args' : '-k 0.8'] ) + +workflow test_plasmidid { + + contigs = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true) + ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + PLASMIDID ( contigs, fasta ) +} diff --git a/tests/software/plasmidid/test.yml b/tests/software/plasmidid/test.yml new file mode 100644 index 00000000..f2ac8f0d --- /dev/null +++ b/tests/software/plasmidid/test.yml @@ -0,0 +1,57 @@ +- name: plasmidid + command: nextflow run ./tests/software/plasmidid -entry test_plasmidid -c tests/config/nextflow.config + tags: + - plasmidid + files: + - path: output/plasmidid/test/data/database_reconstruct_test.length + md5sum: a57c401f27ae5133823fb09fb21c8a3c + - path: output/plasmidid/test/data/test.coverage_adapted_clustered_ac + md5sum: 3a9ea6d336e113a74d7fdca5e7b623fc + - path: output/plasmidid/test/data/test.err + md5sum: 011108fd8b0bb4a4c0b5b2cf46452a90 + - path: output/plasmidid/test/data/test.fna + md5sum: 503a5e1d4654bb2df19420e211070db3 + - path: output/plasmidid/test/data/test.gbk + md5sum: c851bba9da6ec72cce591617067df50b + - path: output/plasmidid/test/data/test.gff + md5sum: 3ed8912ee9b0712ca491fa78ff5f4da1 + - path: output/plasmidid/test/data/test.karyotype_individual.txt + md5sum: aaf0f5bfe297fb9846ace761ff018d22 + - path: output/plasmidid/test/data/test.karyotype_summary.txt + md5sum: aaf0f5bfe297fb9846ace761ff018d22 + - path: output/plasmidid/test/data/test.plasmids.blast + md5sum: 241045ea62156c1ca9bc1eb734ac9526 + - path: output/plasmidid/test/data/test.plasmids.blast.links + md5sum: a44d6aa388b582da8ad53c5b49467b8f + - path: output/plasmidid/test/data/test.plasmids.complete + md5sum: fbc7235285dbb963b07561dd6972a883 + - path: output/plasmidid/test/database/test.fna + md5sum: 6b843fe652b4369addb382f61952c3dd + - path: output/plasmidid/test/database/test.gbk + md5sum: 1f7972ecbb868823727157d2c482700d + - path: output/plasmidid/test/database/test.gff + md5sum: 7e65da147d0a413020b0d92b7b03ffcd + - path: output/plasmidid/test/fasta_files/MT192765.1_term.fasta + md5sum: 8a8537dd3b21e6905f9367b51c3b3074 + - path: output/plasmidid/test/images/test_individual.circos.conf + md5sum: f74467ab77232e2b342e2bd408897b12 + - path: output/plasmidid/test/images/test_MT192765.1_individual.circos.conf + md5sum: 548443ba0a68065a69383fe32b226780 + - path: output/plasmidid/test/images/test_summary.circos.conf + md5sum: e59dc3b77ee610a48b79230da705aba0 + - path: output/plasmidid/test/images/test_MT192765.1.png + - path: output/plasmidid/test/images/test_summary.png + - path: output/plasmidid/test/kmer/database.filtered_0.8_term.0.5.clusters.tab + md5sum: cf75e4418631796bb4675129b575915d + - path: output/plasmidid/test/kmer/database.filtered_0.8_term.0.5.representative.fasta + md5sum: 483f4a5dfe60171c86ee9b7e6dff908b + - path: output/plasmidid/test/kmer/database.filtered_0.8_term.0.5.representative.fasta.blast.tmp.ndb + md5sum: f67f8be1e00eb7d3512869071fb4c2c2 + - path: output/plasmidid/test/kmer/database.filtered_0.8_term.fasta + md5sum: c7fe0e9e9a94d98d7f85a7be99c032fd + - path: output/plasmidid/test/kmer/database.filtered_0.8_term.mash.distances.tab + md5sum: fd5408c3c2f8f68dc01e0123bb6a9079 + - path: output/plasmidid/test/logs/draw_circos_images.log + - path: output/plasmidid/test/logs/plasmidID.log + - path: output/plasmidid/test/test_final_results.html + - path: output/plasmidid/test/test_final_results.tab diff --git a/tests/software/preseq/lcextrap/main.nf b/tests/software/preseq/lcextrap/main.nf index f9840e14..5bd28d45 100644 --- a/tests/software/preseq/lcextrap/main.nf +++ b/tests/software/preseq/lcextrap/main.nf @@ -4,22 +4,22 @@ nextflow.enable.dsl = 2 include { PRESEQ_LCEXTRAP } from '../../../../software/preseq/lcextrap/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_preseq_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file('https://github.com/smithlabcode/preseq/raw/master/data/SRR1003759_5M_subset.mr', checkIfExists: true) ] + [ file('https://github.com/smithlabcode/preseq/raw/master/data/SRR1003759_5M_subset.mr', checkIfExists: true) ] ] PRESEQ_LCEXTRAP ( input ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_preseq_paired_end { input = [ [ id:'test', single_end:false ], // meta map - [ file('https://github.com/smithlabcode/preseq/raw/master/data/SRR1003759_5M_subset.mr', checkIfExists: true) ] + [ file('https://github.com/smithlabcode/preseq/raw/master/data/SRR1003759_5M_subset.mr', checkIfExists: true) ] ] PRESEQ_LCEXTRAP ( input ) diff --git a/tests/software/preseq/lcextrap/test.yml b/tests/software/preseq/lcextrap/test.yml index 7e1552f7..d70f1921 100644 --- a/tests/software/preseq/lcextrap/test.yml +++ b/tests/software/preseq/lcextrap/test.yml @@ -2,20 +2,18 @@ command: nextflow run ./tests/software/preseq/lcextrap -entry test_preseq_single_end -c tests/config/nextflow.config tags: - preseq - - preseq_lcextrap - - preseq_lcextrap_single_end + - preseq/lcextrap files: - path: output/preseq/test.ccurve.txt - md5sum: 76ae04c8eaf19c94e3210bb69da38498 + md5sum: 1fa5cdd601079329618f61660bee00de - path: output/preseq/test.command.log - name: preseq lcextrap paired-end command: nextflow run ./tests/software/preseq/lcextrap -entry test_preseq_paired_end -c tests/config/nextflow.config tags: - preseq - - preseq_lcextrap - - preseq_lcextrap_paired_end + - preseq/lcextrap files: - path: output/preseq/test.ccurve.txt - md5sum: 2836d2fabd2213f097fd7063db550276 + md5sum: 10e5ea860e87fb6f5dc10f4f20c62040 - path: output/preseq/test.command.log diff --git a/tests/software/pycoqc/main.nf b/tests/software/pycoqc/main.nf new file mode 100644 index 00000000..56449f65 --- /dev/null +++ b/tests/software/pycoqc/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { PYCOQC } from '../../../software/pycoqc/main.nf' addParams ( options: ['args' : '--min_pass_qual 0'] ) + +workflow test_pycoqc { + + input = [ file(params.test_data['sarscov2']['nanopore']['test_sequencing_summary'], checkIfExists: true) ] + + PYCOQC ( input ) +} diff --git a/tests/software/pycoqc/test.yml b/tests/software/pycoqc/test.yml new file mode 100644 index 00000000..0ef557b7 --- /dev/null +++ b/tests/software/pycoqc/test.yml @@ -0,0 +1,11 @@ +- name: pycoqc + command: nextflow run ./tests/software/pycoqc -entry test_pycoqc -c tests/config/nextflow.config + tags: + - pycoqc + files: + - path: output/pycoqc/pycoqc.json + contains: + - '"reads_number": 100,' + - '"bases_number": 1160,' + - '"N50": 12,' + - path: output/pycoqc/pycoqc.html diff --git a/tests/software/qcat/main.nf b/tests/software/qcat/main.nf new file mode 100644 index 00000000..74040bb2 --- /dev/null +++ b/tests/software/qcat/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { QCAT } from '../../../software/qcat/main.nf' addParams( options: [:] ) + +workflow test_qcat { + input = [ [ id:'test' ], // meta map + [ file("https://github.com/nf-core/test-datasets/raw/nanoseq/fastq/nondemultiplexed/sample_nobc_dx.fastq.gz", checkIfExists: true) ] + ] + barcode_kit = 'NBD103/NBD104' + + QCAT ( input, barcode_kit ) +} diff --git a/tests/software/qcat/test.yml b/tests/software/qcat/test.yml new file mode 100644 index 00000000..f3cb984b --- /dev/null +++ b/tests/software/qcat/test.yml @@ -0,0 +1,8 @@ +- name: qcat + command: nextflow run ./tests/software/qcat -entry test_qcat -c tests/config/nextflow.config + tags: + - qcat + files: + - path: ./output/qcat/fastq/barcode06.fastq.gz + - path: ./output/qcat/fastq/barcode12.fastq.gz + - path: ./output/qcat/fastq/none.fastq.gz \ No newline at end of file diff --git a/tests/software/qualimap/bamqc/test.yml b/tests/software/qualimap/bamqc/test.yml index edc010dd..404b5cf8 100644 --- a/tests/software/qualimap/bamqc/test.yml +++ b/tests/software/qualimap/bamqc/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/qualimap/bamqc -entry test_qualimap_bamqc -c tests/config/nextflow.config tags: - qualimap - - qualimap_bamqc + - qualimap/bamqc files: - path: ./output/qualimap/test/qualimapReport.html - path: ./output/qualimap/test/genome_results.txt diff --git a/tests/software/quast/test.yml b/tests/software/quast/test.yml index 283bf6da..86cc331c 100644 --- a/tests/software/quast/test.yml +++ b/tests/software/quast/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/quast -entry test_quast_ref -c ./tests/config/nextflow.config tags: - quast - - quast_reference files: - path: ./output/quast/report.tsv - path: ./output/quast/quast/transposed_report.txt @@ -86,7 +85,6 @@ command: nextflow run ./tests/software/quast -entry test_quast_noref -c ./tests/config/nextflow.config tags: - quast - - quast_no_reference files: - path: ./output/quast/report.tsv md5sum: 074e239aac0f298cf4cd2a28a9bb5690 diff --git a/tests/software/rapidnj/main.nf b/tests/software/rapidnj/main.nf new file mode 100644 index 00000000..f002ea68 --- /dev/null +++ b/tests/software/rapidnj/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RAPIDNJ } from '../../../software/rapidnj/main.nf' addParams( options: [:] ) + +workflow test_rapidnj { + + input = [ file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + RAPIDNJ ( input ) +} diff --git a/tests/software/rapidnj/test.yml b/tests/software/rapidnj/test.yml new file mode 100644 index 00000000..ad5bd92a --- /dev/null +++ b/tests/software/rapidnj/test.yml @@ -0,0 +1,9 @@ +- name: rapidnj + command: nextflow run ./tests/software/rapidnj -entry test_rapidnj -c tests/config/nextflow.config + tags: + - rapidnj + files: + - path: output/rapidnj/alignment.sth + md5sum: d2e995c5dd3e3a8212a98414ae5b5de7 + - path: output/rapidnj/rapidnj_phylogeny.tre + md5sum: 775909ea40138101976592cfa1814a1d diff --git a/tests/software/rasusa/main.nf b/tests/software/rasusa/main.nf new file mode 100644 index 00000000..a65dc7bd --- /dev/null +++ b/tests/software/rasusa/main.nf @@ -0,0 +1,18 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RASUSA } from '../../../software/rasusa/main.nf' addParams( options: ['suffix':'_100X']) + +workflow test_rasusa { + input = [ [ id:'test', single_end:false], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ], + "1000000b" + ] + + depth_cutoff = 100 + + RASUSA ( input, depth_cutoff ) +} diff --git a/tests/software/rasusa/test.yml b/tests/software/rasusa/test.yml new file mode 100644 index 00000000..8df5bee9 --- /dev/null +++ b/tests/software/rasusa/test.yml @@ -0,0 +1,9 @@ +- name: rasusa test_rasusa + command: nextflow run tests/software/rasusa -entry test_rasusa -c tests/config/nextflow.config + tags: + - rasusa + files: + - path: output/rasusa/test_100X_1.fastq.gz + md5sum: b9d6f0bef1ef0c21576330d882a7edbb + - path: output/rasusa/test_100X_2.fastq.gz + md5sum: 479bc4cdce2511a9af219e6c39db8d30 diff --git a/tests/software/raxmlng/main.nf b/tests/software/raxmlng/main.nf new file mode 100644 index 00000000..25ab7452 --- /dev/null +++ b/tests/software/raxmlng/main.nf @@ -0,0 +1,26 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RAXMLNG as RAXMLNG_NO_BOOTSTRAP } from '../../../software/raxmlng/main.nf' addParams( options: [args:'--model GTR+G'] ) +include { RAXMLNG as RAXMLNG_BOOTSTRAP } from '../../../software/raxmlng/main.nf' addParams( options: [args:'--all --model GTR+G --bs-trees 1000'] ) + +// +// Test without bootstrapping +// +workflow test_raxmlng_no_bootstrap { + + input = [ file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + RAXMLNG_NO_BOOTSTRAP ( input ) +} + +// +// Test with bootstrapping +// +workflow test_raxmlng_bootstrap { + + input = [ file(params.test_data['sarscov2']['genome']['informative_sites_fas'], checkIfExists: true) ] + + RAXMLNG_BOOTSTRAP ( input ) +} diff --git a/tests/software/raxmlng/test.yml b/tests/software/raxmlng/test.yml new file mode 100644 index 00000000..996f3760 --- /dev/null +++ b/tests/software/raxmlng/test.yml @@ -0,0 +1,31 @@ +- name: raxmlng no_bootstrap + command: nextflow run ./tests/software/raxmlng -entry test_raxmlng_no_bootstrap -c tests/config/nextflow.config + tags: + - raxmlng + files: + - path: output/raxmlng/output.raxml.bestTree + contains: + - 'sample1:0.359' + - 'sample2:1.50' + - 'sample3:0.000001' + - 'sample4:0.111' + +- name: raxmlng bootstrap + command: nextflow run ./tests/software/raxmlng -entry test_raxmlng_bootstrap -c tests/config/nextflow.config + tags: + - raxmlng + files: + - path: output/raxmlng/output.raxml.bestTree + contains: + - 'sample1:0.359' + - 'sample2:1.50' + - 'sample3:0.000001' + - 'sample4:0.111' + - path: output/raxmlng/output.raxml.support + contains: + - 'sample1:0.359' + - 'sample2:1.50' + - 'sample3:0.000001' + - 'sample4:0.111' + contains_regex: + - '\)[89]\d:' diff --git a/tests/software/rsem/calculateexpression/main.nf b/tests/software/rsem/calculateexpression/main.nf new file mode 100644 index 00000000..57177596 --- /dev/null +++ b/tests/software/rsem/calculateexpression/main.nf @@ -0,0 +1,21 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEM_PREPAREREFERENCE } from '../../../../software/rsem/preparereference/main.nf' addParams(options: [args: "--star"]) +include { RSEM_CALCULATEEXPRESSION } from '../../../../software/rsem/calculateexpression/main.nf' addParams(options: [args: "--star --star-gzipped-read-file"]) + +workflow test_rsem_calculateexpression { + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + + input = [ [ id:'test', single_end:false, strandedness: 'forward' ], // meta map + [file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_1_fastq_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_rnaseq_2_fastq_gz'], checkIfExists: true)] + ] + + RSEM_PREPAREREFERENCE ( fasta, gtf ) + + RSEM_CALCULATEEXPRESSION( input, RSEM_PREPAREREFERENCE.out.index ) +} diff --git a/tests/software/rsem/calculateexpression/test.yml b/tests/software/rsem/calculateexpression/test.yml new file mode 100644 index 00000000..b4bb2e65 --- /dev/null +++ b/tests/software/rsem/calculateexpression/test.yml @@ -0,0 +1,66 @@ +- name: rsem calculateexpression test_rsem_calculateexpression + command: nextflow run tests/software/rsem/calculateexpression -entry test_rsem_calculateexpression -c tests/config/nextflow.config + tags: + - rsem/calculateexpression + - rsem + files: + - path: output/index/rsem/Genome + md5sum: a654229fbca6071dcb6b01ce7df704da + - path: output/index/rsem/Log.out + - path: output/index/rsem/SA + md5sum: 8c3edc46697b72c9e92440d4cf43506c + - path: output/index/rsem/SAindex + md5sum: fd05c149960e72642a8d7c860528ae81 + - path: output/index/rsem/chrLength.txt + md5sum: c81f40f27e72606d7d07097c1d56a5b5 + - path: output/index/rsem/chrName.txt + md5sum: 5ae68a67b70976ee95342a7451cb5af1 + - path: output/index/rsem/chrNameLength.txt + md5sum: b190587cae0531f3cf25552d8aa674db + - path: output/index/rsem/chrStart.txt + md5sum: 8d3291e6bcdbe9902fbd7c887494173f + - path: output/index/rsem/exonGeTrInfo.tab + md5sum: d04497f69d6ef889efd4d34fe63edcc4 + - path: output/index/rsem/exonInfo.tab + md5sum: 0d560290fab688b7268d88d5494bf9fe + - path: output/index/rsem/geneInfo.tab + md5sum: 8b608537307443ffaee4927d2b428805 + - path: output/index/rsem/genome.chrlist + md5sum: b190587cae0531f3cf25552d8aa674db + - path: output/index/rsem/genome.fasta + md5sum: f315020d899597c1b57e5fe9f60f4c3e + - path: output/index/rsem/genome.grp + md5sum: c2848a8b6d495956c11ec53efc1de67e + - path: output/index/rsem/genome.idx.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 + - path: output/index/rsem/genome.n2g.idx.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 + - path: output/index/rsem/genome.seq + md5sum: 94da0c6b88c33e63c9a052a11f4f57c1 + - path: output/index/rsem/genome.ti + md5sum: c9e4ae8d4d13a504eec2acf1b8589a66 + - path: output/index/rsem/genome.transcripts.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 + - path: output/index/rsem/genomeParameters.txt + md5sum: 2fe3a030e1706c3e8cd4df3818e6dd2f + - path: output/index/rsem/sjdbInfo.txt + md5sum: 5690ea9d9f09f7ff85b7fd47bd234903 + - path: output/index/rsem/sjdbList.fromGTF.out.tab + md5sum: 8760c33e966dad0b39f440301ebbdee4 + - path: output/index/rsem/sjdbList.out.tab + md5sum: 9e4f991abbbfeb3935a2bb21b9e258f1 + - path: output/index/rsem/transcriptInfo.tab + md5sum: 0c3a5adb49d15e5feff81db8e29f2e36 + - path: output/rsem/test.genes.results + md5sum: c7ec226f76736ea805771e73553ae359 + - path: output/rsem/test.isoforms.results + md5sum: 99f7f80aa505b44ca429fdebbd7dd5d8 + - path: output/rsem/test.log + - path: output/rsem/test.stat/test.cnt + md5sum: 76249e6b2f3c104f414aae596ba2c2f4 + - path: output/rsem/test.stat/test.model + md5sum: a7a4bc1734918ef5848604e3362b83e2 + - path: output/rsem/test.stat/test.theta + md5sum: de2e4490c98cc5383a86ae8225fd0a28 + - path: output/rsem/test.transcript.bam + md5sum: 7846491086c478858419667d60f18edd diff --git a/tests/software/rsem/preparereference/main.nf b/tests/software/rsem/preparereference/main.nf new file mode 100644 index 00000000..9e38acdf --- /dev/null +++ b/tests/software/rsem/preparereference/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEM_PREPAREREFERENCE } from '../../../../software/rsem/preparereference/main.nf' addParams(options: [:]) + +workflow test_rsem_preparereference { + + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + + RSEM_PREPAREREFERENCE ( fasta, gtf ) +} diff --git a/tests/software/rsem/preparereference/test.yml b/tests/software/rsem/preparereference/test.yml new file mode 100644 index 00000000..78c5ac67 --- /dev/null +++ b/tests/software/rsem/preparereference/test.yml @@ -0,0 +1,22 @@ +- name: rsem preparereference test_rsem_preparereference + command: nextflow run tests/software/rsem/preparereference -entry test_rsem_preparereference -c tests/config/nextflow.config + tags: + - rsem + - rsem/preparereference + files: + - path: output/index/rsem/genome.chrlist + md5sum: b190587cae0531f3cf25552d8aa674db + - path: output/index/rsem/genome.fasta + md5sum: f315020d899597c1b57e5fe9f60f4c3e + - path: output/index/rsem/genome.grp + md5sum: c2848a8b6d495956c11ec53efc1de67e + - path: output/index/rsem/genome.idx.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 + - path: output/index/rsem/genome.n2g.idx.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 + - path: output/index/rsem/genome.seq + md5sum: 94da0c6b88c33e63c9a052a11f4f57c1 + - path: output/index/rsem/genome.ti + md5sum: c9e4ae8d4d13a504eec2acf1b8589a66 + - path: output/index/rsem/genome.transcripts.fa + md5sum: 050c521a2719c2ae48267c1e65218f29 diff --git a/tests/software/rseqc/bamstat/main.nf b/tests/software/rseqc/bamstat/main.nf new file mode 100644 index 00000000..1b7220e4 --- /dev/null +++ b/tests/software/rseqc/bamstat/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_BAMSTAT } from '../../../../software/rseqc/bamstat/main.nf' addParams(options: [:]) + +workflow test_rseqc_bamstat { + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + RSEQC_BAMSTAT ( input ) +} diff --git a/tests/software/rseqc/bamstat/test.yml b/tests/software/rseqc/bamstat/test.yml new file mode 100644 index 00000000..86e1bd0b --- /dev/null +++ b/tests/software/rseqc/bamstat/test.yml @@ -0,0 +1,8 @@ +- name: rseqc bamstat test_rseqc_bamstat + command: nextflow run tests/software/rseqc/bamstat -entry test_rseqc_bamstat -c tests/config/nextflow.config + tags: + - rseqc + - rseqc/bamstat + files: + - path: output/rseqc/test.bam_stat.txt + md5sum: 2675857864c1d1139b2a19d25dc36b09 diff --git a/tests/software/rseqc/inferexperiment/main.nf b/tests/software/rseqc/inferexperiment/main.nf new file mode 100644 index 00000000..4b1285ad --- /dev/null +++ b/tests/software/rseqc/inferexperiment/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_INFEREXPERIMENT } from '../../../../software/rseqc/inferexperiment/main.nf' addParams(options: [:]) + +workflow test_rseqc_inferexperiment { + input = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + + RSEQC_INFEREXPERIMENT ( input, bed ) +} diff --git a/tests/software/rseqc/inferexperiment/test.yml b/tests/software/rseqc/inferexperiment/test.yml new file mode 100644 index 00000000..af13d471 --- /dev/null +++ b/tests/software/rseqc/inferexperiment/test.yml @@ -0,0 +1,8 @@ +- name: rseqc inferexperiment test_rseqc_inferexperiment + command: nextflow run tests/software/rseqc/inferexperiment -entry test_rseqc_inferexperiment -c tests/config/nextflow.config + tags: + - rseqc + - rseqc/inferexperiment + files: + - path: output/rseqc/test.infer_experiment.txt + md5sum: f9d0bfc239df637cd8aeda40ade3c59a diff --git a/tests/software/rseqc/innerdistance/main.nf b/tests/software/rseqc/innerdistance/main.nf new file mode 100644 index 00000000..41663613 --- /dev/null +++ b/tests/software/rseqc/innerdistance/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_INNERDISTANCE } from '../../../../software/rseqc/innerdistance/main.nf' addParams(options: [:]) + +workflow test_rseqc_innerdistance { + input = [ [ id:'test', single_end: false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed12'], checkIfExists: true) + + RSEQC_INNERDISTANCE ( input, bed ) +} diff --git a/tests/software/rseqc/innerdistance/test.yml b/tests/software/rseqc/innerdistance/test.yml new file mode 100644 index 00000000..a61cf259 --- /dev/null +++ b/tests/software/rseqc/innerdistance/test.yml @@ -0,0 +1,15 @@ +- name: rseqc innerdistance test_rseqc_innerdistance + command: nextflow run tests/software/rseqc/innerdistance -entry test_rseqc_innerdistance -c tests/config/nextflow.config + tags: + - rseqc + - rseqc/innerdistance + files: + - path: output/rseqc/test.inner_distance.txt + md5sum: a1acc9def0f64a5500d4c4cb47cbe32b + - path: output/rseqc/test.inner_distance_freq.txt + md5sum: 3fc037501f5899b5da009c8ce02fc25e + - path: output/rseqc/test.inner_distance_mean.txt + md5sum: 58398b7d5a29a5e564f9e3c50b55996c + - path: output/rseqc/test.inner_distance_plot.pdf + - path: output/rseqc/test.inner_distance_plot.r + md5sum: 5859fbd5b42046d47e8b9aa85077f4ea diff --git a/tests/software/rseqc/junctionannotation/main.nf b/tests/software/rseqc/junctionannotation/main.nf new file mode 100644 index 00000000..5877247d --- /dev/null +++ b/tests/software/rseqc/junctionannotation/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_JUNCTIONANNOTATION } from '../../../../software/rseqc/junctionannotation/main.nf' addParams(options: [:]) + +workflow test_rseqc_junctionannotation { + input = [ + [ id:'test', single_end: false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + + RSEQC_JUNCTIONANNOTATION ( input, bed ) +} diff --git a/tests/software/rseqc/junctionannotation/test.yml b/tests/software/rseqc/junctionannotation/test.yml new file mode 100644 index 00000000..e796ed10 --- /dev/null +++ b/tests/software/rseqc/junctionannotation/test.yml @@ -0,0 +1,9 @@ +- name: rseqc junctionannotation test_rseqc_junctionannotation + command: nextflow run tests/software/rseqc/junctionannotation -entry test_rseqc_junctionannotation -c tests/config/nextflow.config + tags: + - rseqc + - rseqc/junctionannotation + files: + - path: output/rseqc/test.junction_annotation.log + - path: output/rseqc/test.junction.xls + - path: output/rseqc/test.junction_plot.r diff --git a/tests/software/rseqc/junctionsaturation/main.nf b/tests/software/rseqc/junctionsaturation/main.nf new file mode 100644 index 00000000..15532a1f --- /dev/null +++ b/tests/software/rseqc/junctionsaturation/main.nf @@ -0,0 +1,16 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_JUNCTIONSATURATION } from '../../../../software/rseqc/junctionsaturation/main.nf' addParams(options: [:]) + +workflow test_rseqc_junctionsaturation { + input = [ + [ id:'test', single_end: false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) + + RSEQC_JUNCTIONSATURATION ( input, bed ) +} diff --git a/tests/software/rseqc/junctionsaturation/test.yml b/tests/software/rseqc/junctionsaturation/test.yml new file mode 100644 index 00000000..1ed6d719 --- /dev/null +++ b/tests/software/rseqc/junctionsaturation/test.yml @@ -0,0 +1,9 @@ +- name: rseqc junctionsaturation test_rseqc_junctionsaturation + command: nextflow run tests/software/rseqc/junctionsaturation -entry test_rseqc_junctionsaturation -c tests/config/nextflow.config + tags: + - rseqc/junctionsaturation + - rseqc + files: + - path: output/rseqc/test.junctionSaturation_plot.pdf + - path: output/rseqc/test.junctionSaturation_plot.r + md5sum: caa6e63dcb477aabb169882b2f30dadd diff --git a/tests/software/rseqc/readdistribution/main.nf b/tests/software/rseqc/readdistribution/main.nf new file mode 100644 index 00000000..616b1f0d --- /dev/null +++ b/tests/software/rseqc/readdistribution/main.nf @@ -0,0 +1,15 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_READDISTRIBUTION } from '../../../../software/rseqc/readdistribution/main.nf' addParams(options: [:]) + +workflow test_rseqc_readdistribution { + input = [ [ id:'test', single_end: false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + bed = file(params.test_data['sarscov2']['genome']['test_bed12'], checkIfExists: true) + + RSEQC_READDISTRIBUTION ( input, bed ) +} diff --git a/tests/software/rseqc/readdistribution/test.yml b/tests/software/rseqc/readdistribution/test.yml new file mode 100644 index 00000000..5b59a508 --- /dev/null +++ b/tests/software/rseqc/readdistribution/test.yml @@ -0,0 +1,8 @@ +- name: rseqc readdistribution test_rseqc_readdistribution + command: nextflow run tests/software/rseqc/readdistribution -entry test_rseqc_readdistribution -c tests/config/nextflow.config + tags: + - rseqc + - rseqc/readdistribution + files: + - path: output/rseqc/test.read_distribution.txt + md5sum: 56893fdc0809d968629a363551a1655f diff --git a/tests/software/rseqc/readduplication/main.nf b/tests/software/rseqc/readduplication/main.nf new file mode 100644 index 00000000..35a81072 --- /dev/null +++ b/tests/software/rseqc/readduplication/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { RSEQC_READDUPLICATION } from '../../../../software/rseqc/readduplication/main.nf' addParams(options: [:]) + +workflow test_rseqc_readduplication { + input = [ [ id:'test', single_end: false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + RSEQC_READDUPLICATION ( input ) +} diff --git a/tests/software/rseqc/readduplication/test.yml b/tests/software/rseqc/readduplication/test.yml new file mode 100644 index 00000000..73b11f91 --- /dev/null +++ b/tests/software/rseqc/readduplication/test.yml @@ -0,0 +1,13 @@ +- name: rseqc readduplication test_rseqc_readduplication + command: nextflow run tests/software/rseqc/readduplication -entry test_rseqc_readduplication -c tests/config/nextflow.config + tags: + - rseqc/readduplication + - rseqc + files: + - path: output/rseqc/test.DupRate_plot.pdf + - path: output/rseqc/test.DupRate_plot.r + md5sum: 3c0325095cee4835b921e57d61c23dca + - path: output/rseqc/test.pos.DupRate.xls + md5sum: a859bc2031d46bf1cc4336205847caa3 + - path: output/rseqc/test.seq.DupRate.xls + md5sum: ee8783399eec5a18522a6f08bece338b diff --git a/tests/software/salmon/index/test.yml b/tests/software/salmon/index/test.yml index efd3dac1..fee68bd0 100644 --- a/tests/software/salmon/index/test.yml +++ b/tests/software/salmon/index/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/salmon/index -entry test_salmon_index -c tests/config/nextflow.config tags: - salmon - - salmon_index + - salmon/index files: - path: ./output/index/salmon/ref_indexing.log - path: ./output/index/salmon/refseq.bin diff --git a/tests/software/salmon/quant/main.nf b/tests/software/salmon/quant/main.nf index 7b11a5a4..a77b14f0 100644 --- a/tests/software/salmon/quant/main.nf +++ b/tests/software/salmon/quant/main.nf @@ -8,14 +8,14 @@ include { SALMON_QUANT } from '../../../../software/salmon/quant/main.nf' addPar workflow test_salmon_quant_single_end { input = [ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] genome_fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) transcript_fasta = file(params.test_data['sarscov2']['genome']['transcriptome_fasta'], checkIfExists: true) gtf = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) SALMON_INDEX ( genome_fasta, transcript_fasta ) - SALMON_QUANT ( input, SALMON_INDEX.out.index, gtf, transcript_fasta, false ) + SALMON_QUANT ( input, SALMON_INDEX.out.index, gtf, transcript_fasta, false, '' ) } @@ -30,6 +30,21 @@ workflow test_salmon_quant_paired_end { gtf = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) SALMON_INDEX ( genome_fasta, transcript_fasta ) - SALMON_QUANT ( input, SALMON_INDEX.out.index, gtf, transcript_fasta, false ) + SALMON_QUANT ( input, SALMON_INDEX.out.index, gtf, transcript_fasta, false, '' ) } + +workflow test_salmon_quant_single_end_lib_type_A { + + input = [ [ id:'test', single_end:true ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + genome_fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + transcript_fasta = file(params.test_data['sarscov2']['genome']['transcriptome_fasta'], checkIfExists: true) + gtf = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + + SALMON_INDEX ( genome_fasta, transcript_fasta ) + SALMON_QUANT ( input, SALMON_INDEX.out.index, gtf, transcript_fasta, false, 'A' ) + +} + diff --git a/tests/software/salmon/quant/test.yml b/tests/software/salmon/quant/test.yml index 4bd64059..872c18d7 100644 --- a/tests/software/salmon/quant/test.yml +++ b/tests/software/salmon/quant/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/salmon/quant -entry test_salmon_quant_single_end -c tests/config/nextflow.config tags: - salmon - - salmon_quant - - salmon_quant_single_end + - salmon/quant files: - path: ./output/salmon/test/cmd_info.json - path: ./output/salmon/test/quant.sf @@ -54,8 +53,7 @@ command: nextflow run ./tests/software/salmon/quant -entry test_salmon_quant_paired_end -c tests/config/nextflow.config tags: - salmon - - salmon_quant - - salmon_quant_paired_end + - salmon/quant files: - path: ./output/salmon/test/cmd_info.json - path: ./output/salmon/test/quant.sf @@ -97,7 +95,57 @@ md5sum: 8d1970505b2b08ca0eb5ff7722b48cde - path: ./output/index/salmon/ctg_offsets.bin md5sum: 27a76542337df436436e66017f66dd25 + - path: ./output/index/salmon/rank.bin md5sum: 3f34dca1ec26cdf89a6d19b1d1c07e71 - path: ./output/index/salmon/pos.bin - path: ./output/index/salmon/seq.bin + +- name: salmon quant test_salmon_quant_single_end_lib_type_A + command: nextflow run tests/software/salmon/quant -entry test_salmon_quant_single_end_lib_type_A -c tests/config/nextflow.config + tags: + - salmon/quant + - salmon + files: + - path: ./output/salmon/test/cmd_info.json + - path: output/salmon/test/quant.sf + md5sum: 687368b9963874c1797d210310b38516 + - path: ./output/salmon/test/lib_format_counts.json + - path: ./output/salmon/test/quant.genes.sf + md5sum: ad4d31437f06db49b2436abeec29c78e + - path: ./output/salmon/test/logs/salmon_quant.log + - path: output/salmon/test/aux_info/expected_bias.gz + md5sum: 24ee10af39b41ecf4f4e08faaaf537ee + - path: output/salmon/test/aux_info/observed_bias_3p.gz + md5sum: ef13c06a538e9c34ca9f84212c82f44e + - path: ./output/salmon/test/aux_info/meta_info.json + - path: ./output/salmon/test/aux_info/fld.gz + - path: output/salmon/test/aux_info/ambig_info.tsv + md5sum: 2ee3dc3080ad7222e0687481e7a1ee03 + - path: ./output/salmon/test/aux_info/observed_bias.gz + md5sum: ef13c06a538e9c34ca9f84212c82f44e + - path: output/salmon/test/libParams/flenDist.txt + md5sum: 2de170bdc9f6fd237d286429b292bb28 + - path: ./output/index/salmon/ref_indexing.log + - path: output/index/salmon/refseq.bin + md5sum: 79c4ddf34be3a98d5a7b9d153629a6f7 + - path: output/index/salmon/versionInfo.json + md5sum: 204865f645102587c4953fccb256797c + - path: output/index/salmon/complete_ref_lens.bin + md5sum: f57562f1fca3ae7b133f895ae13c3d08 + - path: output/index/salmon/mphf.bin + md5sum: 53669a47610e33e031faafd32703b714 + - path: output/index/salmon/duplicate_clusters.tsv + md5sum: 51b5292e3a874119c0e1aa566e95d70c + - path: output/index/salmon/reflengths.bin + md5sum: f57562f1fca3ae7b133f895ae13c3d08 + - path: output/index/salmon/info.json + md5sum: 61ff4d3471134c280668355ddd39e99f + - path: output/index/salmon/refAccumLengths.bin + md5sum: 8d1970505b2b08ca0eb5ff7722b48cde + - path: output/index/salmon/ctg_offsets.bin + md5sum: 27a76542337df436436e66017f66dd25 + - path: output/index/salmon/rank.bin + md5sum: 3f34dca1ec26cdf89a6d19b1d1c07e71 + - path: ./output/index/salmon/pos.bin + - path: ./output/index/salmon/seq.bin diff --git a/tests/software/samtools/faidx/test.yml b/tests/software/samtools/faidx/test.yml index 912ea8d9..37d59d2c 100644 --- a/tests/software/samtools/faidx/test.yml +++ b/tests/software/samtools/faidx/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/samtools/faidx -entry test_samtools_faidx -c tests/config/nextflow.config tags: - samtools - - samtools_faidx + - samtools/faidx files: - path: output/samtools/genome.fasta.fai md5sum: 9da2a56e2853dc8c0b86a9e7229c9fe5 diff --git a/tests/software/samtools/fastq/test.yml b/tests/software/samtools/fastq/test.yml index ac89b510..f9c736a2 100644 --- a/tests/software/samtools/fastq/test.yml +++ b/tests/software/samtools/fastq/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/samtools/fastq -entry test_samtools_fastq -c tests/config/nextflow.config tags: - samtools - - samtools_fastq + - samtools/fastq files: - path: output/samtools/test_2.fastq.gz md5sum: 229daf1a62d114cae42c65801e8c0114 diff --git a/tests/software/samtools/flagstat/test.yml b/tests/software/samtools/flagstat/test.yml index 7f397083..fe56aafd 100644 --- a/tests/software/samtools/flagstat/test.yml +++ b/tests/software/samtools/flagstat/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/samtools/flagstat -entry test_samtools_flagstat -c tests/config/nextflow.config tags: - samtools - - samtools_flagstat + - samtools/flagstat files: - - path: ./output/samtools/test_paired_end.sorted.bam.flagstat + - path: ./output/samtools/test.paired_end.sorted.bam.flagstat md5sum: 6d7934c303b15ce473f64d502b79984e diff --git a/tests/software/samtools/idxstats/test.yml b/tests/software/samtools/idxstats/test.yml index 34220292..d88b0e8e 100644 --- a/tests/software/samtools/idxstats/test.yml +++ b/tests/software/samtools/idxstats/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/samtools/idxstats -entry test_samtools_idxstats -c tests/config/nextflow.config tags: - samtools - - samtools_idxstats + - samtools/idxstats files: - - path: ./output/samtools/test_paired_end.sorted.bam.idxstats + - path: ./output/samtools/test.paired_end.sorted.bam.idxstats md5sum: df60a8c8d6621100d05178c93fb053a2 diff --git a/tests/software/samtools/index/main.nf b/tests/software/samtools/index/main.nf index 815bd239..d5a29e80 100644 --- a/tests/software/samtools/index/main.nf +++ b/tests/software/samtools/index/main.nf @@ -2,12 +2,21 @@ nextflow.enable.dsl = 2 -include { SAMTOOLS_INDEX } from '../../../../software/samtools/index/main.nf' addParams( options: [:] ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_BAI } from '../../../../software/samtools/index/main.nf' addParams( options: [:] ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_CSI } from '../../../../software/samtools/index/main.nf' addParams( options: [args:'-c'] ) -workflow test_samtools_index { +workflow test_samtools_index_bai { input = [ [ id:'test', single_end:false ], // meta map file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - SAMTOOLS_INDEX ( input ) + SAMTOOLS_INDEX_BAI ( input ) +} + +workflow test_samtools_index_csi { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + SAMTOOLS_INDEX_CSI ( input ) } diff --git a/tests/software/samtools/index/test.yml b/tests/software/samtools/index/test.yml index 87934bfb..e8dc21e7 100644 --- a/tests/software/samtools/index/test.yml +++ b/tests/software/samtools/index/test.yml @@ -1,8 +1,17 @@ -- name: samtools index - command: nextflow run tests/software/samtools/index -entry test_samtools_index -c tests/config/nextflow.config +- name: samtools index bai + command: nextflow run tests/software/samtools/index -entry test_samtools_index_bai -c tests/config/nextflow.config tags: - samtools - - samtools_index + - samtools/index files: - - path: output/samtools/test_paired_end.sorted.bam.bai + - path: output/samtools/test.paired_end.sorted.bam.bai md5sum: 704c10dd1326482448ca3073fdebc2f4 + +- name: samtools index csi + command: nextflow run tests/software/samtools/index -entry test_samtools_index_csi -c tests/config/nextflow.config + tags: + - samtools + - samtools/index + files: + - path: output/samtools/test.paired_end.sorted.bam.csi + md5sum: 3dd9e3ed959fca075b88bb8dc3cf7dbd diff --git a/tests/software/samtools/merge/main.nf b/tests/software/samtools/merge/main.nf index 97e080c3..14973115 100644 --- a/tests/software/samtools/merge/main.nf +++ b/tests/software/samtools/merge/main.nf @@ -6,7 +6,7 @@ include { SAMTOOLS_MERGE } from '../../../../software/samtools/merge/main.nf' ad workflow test_samtools_merge { input = [ [ id: 'test' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_methylated_paired_end_sorted_bam'], checkIfExists: true), + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true)] ] diff --git a/tests/software/samtools/merge/test.yml b/tests/software/samtools/merge/test.yml index 27ec9f31..c9d2c1f6 100644 --- a/tests/software/samtools/merge/test.yml +++ b/tests/software/samtools/merge/test.yml @@ -2,6 +2,6 @@ command: nextflow run ./tests/software/samtools/merge -entry test_samtools_merge -c tests/config/nextflow.config tags: - samtools - - samtools_merge + - samtools/merge files: - path: output/samtools/test_merged.bam diff --git a/tests/software/samtools/mpileup/main.nf b/tests/software/samtools/mpileup/main.nf index df4f4140..334081bb 100644 --- a/tests/software/samtools/mpileup/main.nf +++ b/tests/software/samtools/mpileup/main.nf @@ -8,7 +8,7 @@ workflow test_samtools_mpileup { input = [ [ id:'test', single_end:false ], // meta map file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) SAMTOOLS_MPILEUP ( input, fasta ) } diff --git a/tests/software/samtools/mpileup/test.yml b/tests/software/samtools/mpileup/test.yml index 5830b455..2f1e7010 100644 --- a/tests/software/samtools/mpileup/test.yml +++ b/tests/software/samtools/mpileup/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/samtools/mpileup -entry test_samtools_mpileup -c tests/config/nextflow.config tags: - samtools - - samtools_mpileup + - samtools/mpileup files: - path: ./output/samtools/test.mpileup - md5sum: 56c4cd5a4ecb7d6364878818f46ae256 + md5sum: 3608af83ffe3efbb1337f0ffb205337d diff --git a/tests/software/samtools/sort/test.yml b/tests/software/samtools/sort/test.yml index f9ed2227..fbe43f00 100644 --- a/tests/software/samtools/sort/test.yml +++ b/tests/software/samtools/sort/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/samtools/sort -entry test_samtools_sort -c tests/config/nextflow.config tags: - samtools - - samtools_sort + - samtools/sort files: - path: output/samtools/test.bam - md5sum: 7e32f47768f922a73ccec4dc24db1973 + md5sum: 3997667dee6b45d682865c6bf82d0378 diff --git a/tests/software/samtools/stats/test.yml b/tests/software/samtools/stats/test.yml index 86223dae..70e996ad 100644 --- a/tests/software/samtools/stats/test.yml +++ b/tests/software/samtools/stats/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/samtools/stats -entry test_samtools_stats -c tests/config/nextflow.config tags: - samtools - - samtools_stats + - samtools/stats files: - - path: ./output/samtools/test_paired_end.sorted.bam.stats - md5sum: 5f12c46ae4491b48611194c94093ebfb + - path: ./output/samtools/test.paired_end.sorted.bam.stats + md5sum: 95f7edae5d02c10c4004d9ab1d7d8ef3 diff --git a/tests/software/samtools/view/test.yml b/tests/software/samtools/view/test.yml index 308fde3f..95867c5a 100644 --- a/tests/software/samtools/view/test.yml +++ b/tests/software/samtools/view/test.yml @@ -2,7 +2,7 @@ command: nextflow run tests/software/samtools/view -entry test_samtools_view -c tests/config/nextflow.config tags: - samtools - - samtools_view + - samtools/view files: - path: output/samtools/test.bam md5sum: 8fb1e82f76416e9e30fc6b2357e2cf13 diff --git a/tests/software/seacr/callpeak/test.yml b/tests/software/seacr/callpeak/test.yml index e8e4bef0..d110df9a 100644 --- a/tests/software/seacr/callpeak/test.yml +++ b/tests/software/seacr/callpeak/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/seacr/callpeak -entry test_seacr_callpeak -c tests/config/nextflow.config tags: - seacr - - seacr_callpeak + - seacr/callpeak files: - path: output/seacr/test_1.stringent.bed md5sum: 3ac70475669eb6a7b8ca89e19a08a28e \ No newline at end of file diff --git a/tests/software/seqkit/split2/test.yml b/tests/software/seqkit/split2/test.yml index 269f0ea1..a85da4f1 100644 --- a/tests/software/seqkit/split2/test.yml +++ b/tests/software/seqkit/split2/test.yml @@ -2,23 +2,18 @@ command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_single_end_length -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_single_end - - length + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: 6f7d58ba35c254c0817fe9a7c69862e4 - path: output/seqkit/test.split/test_1.part_002.fastq.gz md5sum: cf38c51506e45380fe25abdd1bd5ccc6 - - name: seqkit split2 single-end size command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_single_end_size -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_single_end - - size + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: bf835e685d597fc1ab5e5ac7dd689619 @@ -29,9 +24,7 @@ command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_single_end_part -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_single_end - - part + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: fa25951435471238d5567fd2cae31f55 @@ -44,9 +37,7 @@ command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_paired_end_length -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_paired_end - - length + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: 6f7d58ba35c254c0817fe9a7c69862e4 @@ -61,9 +52,7 @@ command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_paired_end_size -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_paired_end - - size + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: bf835e685d597fc1ab5e5ac7dd689619 @@ -78,9 +67,7 @@ command: nextflow run ./tests/software/seqkit/split2 -entry test_seqkit_split2_paired_end_part -c tests/config/nextflow.config tags: - seqkit - - seqkit_split2 - - seqkit_split2_paired_end - - part + - seqkit/split2 files: - path: output/seqkit/test.split/test_1.part_001.fastq.gz md5sum: fa25951435471238d5567fd2cae31f55 diff --git a/tests/software/seqtk/sample/main.nf b/tests/software/seqtk/sample/main.nf new file mode 100644 index 00000000..d10228d6 --- /dev/null +++ b/tests/software/seqtk/sample/main.nf @@ -0,0 +1,29 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { SEQTK_SAMPLE } from '../../../../software/seqtk/sample/main.nf' addParams( options: [ 'args': '-s100', 'suffix':'.sampled' ] ) + +// +// Test with single-end data +// +workflow test_seqtk_sample_single_end { + + input = [ [ id:'test', single_end:true ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + + SEQTK_SAMPLE ( input, 50 ) +} + +// +// Test with paired-end data +// +workflow test_seqtk_sample_paired_end { + + input = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + + SEQTK_SAMPLE ( input, 50 ) +} diff --git a/tests/software/seqtk/sample/test.yml b/tests/software/seqtk/sample/test.yml new file mode 100644 index 00000000..bea521a4 --- /dev/null +++ b/tests/software/seqtk/sample/test.yml @@ -0,0 +1,19 @@ +- name: seqtk sample test_seqtk_sample_single_end + command: nextflow run tests/software/seqtk/sample -entry test_seqtk_sample_single_end -c tests/config/nextflow.config + tags: + - seqtk + - seqtk/sample + files: + - path: output/seqtk/test.sampled.fastq.gz + md5sum: 73c3e8f113860244f3ed3866a8b9d555 + +- name: seqtk sample test_seqtk_sample_paired_end + command: nextflow run tests/software/seqtk/sample -entry test_seqtk_sample_paired_end -c tests/config/nextflow.config + tags: + - seqtk + - seqtk/sample + files: + - path: output/seqtk/test.sampled_1.fastq.gz + md5sum: 73c3e8f113860244f3ed3866a8b9d555 + - path: output/seqtk/test.sampled_2.fastq.gz + md5sum: 75457ddceea3a5688d05438cdbffba24 diff --git a/tests/software/seqtk/subseq/main.nf b/tests/software/seqtk/subseq/main.nf new file mode 100644 index 00000000..676ddace --- /dev/null +++ b/tests/software/seqtk/subseq/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { SEQTK_SUBSEQ } from '../../../../software/seqtk/subseq/main.nf' addParams( options: ['suffix':'.filtered'] ) + +workflow test_seqtk_subseq { + + sequences = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + + filter_list = file(params.test_data['sarscov2']['genome']['test_bed_gz'], checkIfExists: true) + + SEQTK_SUBSEQ ( sequences, filter_list ) +} diff --git a/tests/software/seqtk/subseq/test.yml b/tests/software/seqtk/subseq/test.yml new file mode 100644 index 00000000..161cca7b --- /dev/null +++ b/tests/software/seqtk/subseq/test.yml @@ -0,0 +1,8 @@ +- name: seqtk subseq test_seqtk_subseq + command: nextflow run tests/software/seqtk/subseq -entry test_seqtk_subseq -c tests/config/nextflow.config + tags: + - seqtk + - seqtk/subseq + files: + - path: output/seqtk/genome.fasta.filtered.fa.gz + md5sum: 488001c0fbedabf24d3e10fe7f96c78a diff --git a/tests/software/sequenzautils/bam2seqz/main.nf b/tests/software/sequenzautils/bam2seqz/main.nf index 898093a6..4268ca01 100755 --- a/tests/software/sequenzautils/bam2seqz/main.nf +++ b/tests/software/sequenzautils/bam2seqz/main.nf @@ -5,7 +5,7 @@ nextflow.enable.dsl = 2 include { SEQUENZAUTILS_BAM2SEQZ } from '../../../../software/sequenzautils/bam2seqz/main.nf' addParams( options: [:] ) workflow test_sequenzautils_bam2seqz { - + tumourbam = file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) normalbam = file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) @@ -13,8 +13,8 @@ workflow test_sequenzautils_bam2seqz { tumourbam, normalbam ] - fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - wigfile = file(params.test_data['sarscov2']['genome']['test_wig_gz'], checkIfExists: true) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + wig = file(params.test_data['sarscov2']['illumina']['test_wig_gz'], checkIfExists: true) - SEQUENZAUTILS_BAM2SEQZ ( input, fasta, wigfile ) + SEQUENZAUTILS_BAM2SEQZ ( input, fasta, wig ) } diff --git a/tests/software/sequenzautils/bam2seqz/test.yml b/tests/software/sequenzautils/bam2seqz/test.yml index c3f0c058..2bd65d4c 100644 --- a/tests/software/sequenzautils/bam2seqz/test.yml +++ b/tests/software/sequenzautils/bam2seqz/test.yml @@ -2,6 +2,7 @@ command: nextflow run ./tests/software/sequenzautils/bam2seqz -entry test_sequenzautils_bam2seqz -c tests/config/nextflow.config tags: - sequenzautils - - sequenzautils_bam2seqz + - sequenzautils/bam2seqz files: - path: output/sequenzautils/test.seqz.gz + md5sum: 12b41979a498ac10c0aff162b12e6a6e diff --git a/tests/software/sequenzautils/gcwiggle/test.yml b/tests/software/sequenzautils/gcwiggle/test.yml index d8922f3e..db656799 100644 --- a/tests/software/sequenzautils/gcwiggle/test.yml +++ b/tests/software/sequenzautils/gcwiggle/test.yml @@ -4,6 +4,6 @@ command: nextflow run ./tests/software/sequenzautils/gcwiggle -entry test_sequenzautils_gcwiggle -c tests/config/nextflow.config tags: - sequenzautils - - sequenzautils_gcwiggle + - sequenzautils/gcwiggle files: - path: output/sequenzautils/test.wig.gz diff --git a/tests/software/seqwish/induce/test.yml b/tests/software/seqwish/induce/test.yml index 4fb7cba7..ed657a84 100644 --- a/tests/software/seqwish/induce/test.yml +++ b/tests/software/seqwish/induce/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/seqwish/induce -entry test_seqwish_induce -c tests/config/nextflow.config tags: - seqwish - - seqwish_induce + - seqwish/induce files: - path: output/seqwish/test.gfa md5sum: 216a02d3aca322a457c31a62c628548e diff --git a/tests/software/shovill/main.nf b/tests/software/shovill/main.nf index d9c25094..2a1f65b8 100644 --- a/tests/software/shovill/main.nf +++ b/tests/software/shovill/main.nf @@ -10,7 +10,7 @@ include { SHOVILL as SHOVILL_VELVET } from '../../../software/shovill/main.nf' workflow test_shovill { input = [ [ id:'test', single_end:false ], // meta map [ file("https://github.com/nf-core/test-datasets/raw/bacass/ERR044595_1M_1.fastq.gz", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/ERR044595_1M_2.fastq.gz", checkIfExists: true) ] + file("https://github.com/nf-core/test-datasets/raw/bacass/ERR044595_1M_2.fastq.gz", checkIfExists: true) ] ] SHOVILL ( input ) @@ -18,8 +18,8 @@ workflow test_shovill { workflow test_shovill_megahit { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/generic/fastq/test_R1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/generic/fastq/test_R2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] SHOVILL_MEGAHIT ( input ) @@ -27,8 +27,8 @@ workflow test_shovill_megahit { workflow test_shovill_skesa { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/generic/fastq/test_R1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/generic/fastq/test_R2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] SHOVILL_SKESA ( input ) @@ -36,8 +36,8 @@ workflow test_shovill_skesa { workflow test_shovill_velvet { input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/generic/fastq/test_R1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/generic/fastq/test_R2.fastq.gz", checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] SHOVILL_VELVET ( input ) diff --git a/tests/software/shovill/test.yml b/tests/software/shovill/test.yml index a3072b3a..bc3ca318 100644 --- a/tests/software/shovill/test.yml +++ b/tests/software/shovill/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/shovill -entry test_shovill -c tests/config/nextflow.config tags: - shovill - - shovill_spades files: - path: output/shovill/contigs.gfa md5sum: 277af5d8ae8a0d2432db59a316226828 @@ -17,7 +16,6 @@ command: nextflow run ./tests/software/shovill -entry test_shovill_megahit -c tests/config/nextflow.config tags: - shovill - - shovill_megahit files: - path: output/shovill/shovill.corrections md5sum: d41d8cd98f00b204e9800998ecf8427e @@ -26,17 +24,16 @@ - path: output/shovill/contigs.fastg - path: output/shovill/megahit.fasta - path: output/shovill/shovill.log - + - name: shovill with skesa command: nextflow run ./tests/software/shovill -entry test_shovill_skesa -c tests/config/nextflow.config tags: - shovill - - shovill_skesa files: - path: output/shovill/shovill.corrections md5sum: d41d8cd98f00b204e9800998ecf8427e - path: output/shovill/skesa.fasta - md5sum: c0c2d11b633310eb1437345cb599c33c + md5sum: 8157837dbe8315922f588dafa7af5ef8 # MD5sum not reproducible (timestamp) - path: output/shovill/contigs.fa - path: output/shovill/shovill.log @@ -45,7 +42,6 @@ command: nextflow run ./tests/software/shovill -entry test_shovill_velvet -c tests/config/nextflow.config tags: - shovill - - shovill_velvet files: # MD5sum not reproducible (timestamp, contig order) - path: output/shovill/contigs.fa diff --git a/tests/software/snpeff/main.nf b/tests/software/snpeff/main.nf new file mode 100644 index 00000000..9572fe2c --- /dev/null +++ b/tests/software/snpeff/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { SNPEFF } from '../../../software/snpeff/main.nf' addParams( snpeff_tag: '5.0.WBcel235', use_cache: false ) + +workflow test_snpeff { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + SNPEFF ( input, "WBcel235.99", [] ) +} diff --git a/tests/software/snpeff/test.yml b/tests/software/snpeff/test.yml new file mode 100644 index 00000000..bec305d3 --- /dev/null +++ b/tests/software/snpeff/test.yml @@ -0,0 +1,8 @@ +- name: snpeff test_snpeff + command: nextflow run tests/software/snpeff -entry test_snpeff -c tests/config/nextflow.config + tags: + - snpeff + files: + - path: output/snpeff/test.ann.vcf + md5sum: 42db84cb186e33c6992f9306627201ac + - path: output/snpeff/test.csv diff --git a/tests/software/snpsites/main.nf b/tests/software/snpsites/main.nf new file mode 100644 index 00000000..b5f69dcd --- /dev/null +++ b/tests/software/snpsites/main.nf @@ -0,0 +1,12 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { SNPSITES } from '../../../software/snpsites/main.nf' addParams( options: [:] ) + +workflow test_snpsites { + + input = file(params.test_data['sarscov2']['genome']['all_sites_fas'], checkIfExists: true) + + SNPSITES ( input ) +} diff --git a/tests/software/snpsites/test.yml b/tests/software/snpsites/test.yml new file mode 100644 index 00000000..5e212db4 --- /dev/null +++ b/tests/software/snpsites/test.yml @@ -0,0 +1,9 @@ +- name: snpsites + command: nextflow run ./tests/software/snpsites -entry test_snpsites -c tests/config/nextflow.config + tags: + - snpsites + files: + - path: output/snpsites/filtered_alignment.fas + md5sum: f96c7513003e878e16fa9eac9fcda0f4 + - path: output/snpsites/constant.sites.txt + md5sum: 8b9b226e3787f7baaefce07405af22c9 \ No newline at end of file diff --git a/tests/software/spades/test.yml b/tests/software/spades/test.yml index 5b6c800a..e2bccf47 100644 --- a/tests/software/spades/test.yml +++ b/tests/software/spades/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/spades -entry test_spades_single_end -c tests/config/nextflow.config tags: - spades - - spades_single_end files: - path: output/spades/test.assembly.gfa md5sum: b2616d2beba83ab7d361b54778d1e759 @@ -16,10 +15,9 @@ command: nextflow run ./tests/software/spades -entry test_spades_paired_end -c tests/config/nextflow.config tags: - spades - - spades_paired_end files: - - path: output/spades/test.assembly.gfa - md5sum: faf76135ee390606b899c0197dc38e04 - - path: output/spades/test.contigs.fa - md5sum: 6148e25b33890c80f176f90f2dd88989 - - path: output/spades/test.spades.log + - path: output/spades/test.assembly.gfa + md5sum: faf76135ee390606b899c0197dc38e04 + - path: output/spades/test.contigs.fa + md5sum: 6148e25b33890c80f176f90f2dd88989 + - path: output/spades/test.spades.log diff --git a/tests/software/star/align/test.yml b/tests/software/star/align/test.yml index 8e0733a6..7cec005e 100644 --- a/tests/software/star/align/test.yml +++ b/tests/software/star/align/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/star/align -entry test_star_alignment_single_end -c tests/config/nextflow.config tags: - star - - star_align - - star_align_single_end + - star/align files: - path: output/star/star/Genome md5sum: 323c992bac354f93073ce0fc43f222f8 @@ -40,8 +39,7 @@ command: nextflow run ./tests/software/star/align -entry test_star_alignment_paired_end -c tests/config/nextflow.config tags: - star - - star_align - - star_align_paired_end + - star/align files: - path: output/star/star/Genome md5sum: 323c992bac354f93073ce0fc43f222f8 diff --git a/tests/software/star/genomegenerate/main.nf b/tests/software/star/genomegenerate/main.nf index b459a39d..12d352c1 100644 --- a/tests/software/star/genomegenerate/main.nf +++ b/tests/software/star/genomegenerate/main.nf @@ -2,11 +2,11 @@ nextflow.enable.dsl = 2 -include { STAR_GENOMEGENERATE } from '../../../../software/star/genomegenerate/main.nf' addParams( options: [args: '--genomeSAindexNbases 9'] ) +include { STAR_GENOMEGENERATE } from '../../../../software/star/genomegenerate/main.nf' addParams( options: [:] ) workflow test_star_genomegenerate { - fasta = file("${launchDir}/tests/data/generic/fasta/GCF_000019425.1_ASM1942v1_genomic.fna", checkIfExists: true) - gtf = file("${launchDir}/tests/data/generic/gtf/GCF_000019425.1_ASM1942v1_genomic.gtf", checkIfExists: true) + fasta = file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) STAR_GENOMEGENERATE ( fasta, gtf ) } diff --git a/tests/software/star/genomegenerate/test.yml b/tests/software/star/genomegenerate/test.yml index ac7464e2..02b98ee3 100644 --- a/tests/software/star/genomegenerate/test.yml +++ b/tests/software/star/genomegenerate/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/star/genomegenerate -entry test_star_genomegenerate -c tests/config/nextflow.config tags: - star - - star_genomegenerate + - star/genomegenerate files: - path: ./output/index/star/Genome md5sum: 323c992bac354f93073ce0fc43f222f8 diff --git a/tests/software/strelka/germline/main.nf b/tests/software/strelka/germline/main.nf index 2994525e..54a20db7 100644 --- a/tests/software/strelka/germline/main.nf +++ b/tests/software/strelka/germline/main.nf @@ -5,25 +5,29 @@ nextflow.enable.dsl = 2 include { STRELKA_GERMLINE } from '../../../../software/strelka/germline/main.nf' addParams( options: [:] ) workflow test_strelka_germline { - input = [ [ id:'test'], // meta map - file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai", checkIfExists: true) - ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - fai = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta.fai", checkIfExists: true) + input = [ + [ id:'test'], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) targets = [] STRELKA_GERMLINE ( input, fasta, fai, targets ) } workflow test_strelka_germline_target_bed { - input = [ [ id:'test'], // meta map - file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam.bai", checkIfExists: true) - ] - fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - fai = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta.fai", checkIfExists: true) - targets = file("${launchDir}/tests/data/genomics/sarscov2/genome/bed/test.bed", checkIfExists: true) + input = [ + [ id:'test'], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + targets = file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) STRELKA_GERMLINE ( input, fasta, fai, targets ) } diff --git a/tests/software/strelka/germline/test.yml b/tests/software/strelka/germline/test.yml index 1db335a9..e4ad2203 100644 --- a/tests/software/strelka/germline/test.yml +++ b/tests/software/strelka/germline/test.yml @@ -1,22 +1,20 @@ -## TODO nf-core: Please run the following command to build this file: -# nf-core modules create-test-yml strelka/germline - name: strelka germline command: nextflow run ./tests/software/strelka/germline -entry test_strelka_germline -c tests/config/nextflow.config tags: - strelka - - strelka_germline + - strelka/germline files: - - path: output/strelka/strelka_test_variants.vcf.gz - - path: output/strelka/strelka_test_variants.vcf.gz.tbi - - path: output/strelka/strelka_test_genome.vcf.gz - - path: output/strelka/strelka_test_genome.vcf.gz.tbi + - path: output/strelka/test.variants.vcf.gz + - path: output/strelka/test.variants.vcf.gz.tbi + - path: output/strelka/test.genome.vcf.gz + - path: output/strelka/test.genome.vcf.gz.tbi - name: strelka germline target bed command: nextflow run ./tests/software/strelka/germline -entry test_strelka_germline_target_bed -c tests/config/nextflow.config tags: - strelka - - strelka_germline + - strelka/germline files: - - path: output/strelka/strelka_test_variants.vcf.gz - - path: output/strelka/strelka_test_variants.vcf.gz.tbi - - path: output/strelka/strelka_test_genome.vcf.gz - - path: output/strelka/strelka_test_genome.vcf.gz.tbi + - path: output/strelka/test.variants.vcf.gz + - path: output/strelka/test.variants.vcf.gz.tbi + - path: output/strelka/test.genome.vcf.gz + - path: output/strelka/test.genome.vcf.gz.tbi diff --git a/tests/software/stringtie/main.nf b/tests/software/stringtie/main.nf deleted file mode 100644 index 1c9aacc1..00000000 --- a/tests/software/stringtie/main.nf +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { STRINGTIE as STRINGTIE_FORWARD } from '../../../software/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_forward' ] ) -include { STRINGTIE as STRINGTIE_REVERSE } from '../../../software/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_reverse' ] ) - -/* - * Test with forward strandedness - */ -workflow test_stringtie_forward { - input = [ [ id:'test', strandedness:'forward' ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam", checkIfExists: true) ] ] - gtf = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.gtf", checkIfExists: true) - - STRINGTIE_FORWARD ( input, gtf ) -} - -/* - * Test with reverse strandedness - */ -workflow test_stringtie_reverse { - input = [ [ id:'test', strandedness:'reverse' ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/bam/test_paired_end.sorted.bam", checkIfExists: true) ] - ] - gtf = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.gtf", checkIfExists: true) - - STRINGTIE_REVERSE ( input, gtf ) -} diff --git a/tests/software/stringtie/merge/main.nf b/tests/software/stringtie/merge/main.nf new file mode 100644 index 00000000..9205f4ed --- /dev/null +++ b/tests/software/stringtie/merge/main.nf @@ -0,0 +1,38 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { STRINGTIE as STRINGTIE_FORWARD } from '../../../../software/stringtie/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_forward' ] ) +include { STRINGTIE as STRINGTIE_REVERSE } from '../../../../software/stringtie/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_reverse' ] ) +include { STRINGTIE_MERGE as STRINGTIE_FORWARD_MERGE} from '../../../../software/stringtie/merge/main.nf' addParams( options: [ publish_dir:'test_stringtie_forward_merge'] ) +include { STRINGTIE_MERGE as STRINGTIE_REVERSE_MERGE} from '../../../../software/stringtie/merge/main.nf' addParams( options: [ publish_dir:'test_stringtie_reverse_merge'] ) +/* + * Test with forward strandedness + */ +workflow test_stringtie_forward_merge { + input = [ [ id:'test', strandedness:'forward' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] ] + annotation_gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + + STRINGTIE_FORWARD ( input, annotation_gtf ) + STRINGTIE_FORWARD.out.transcript_gtf + .map { it -> it[1] } + .set { stringtie_gtf } + STRINGTIE_FORWARD_MERGE ( stringtie_gtf, annotation_gtf ) +} + +/* + * Test with reverse strandedness + */ +workflow test_stringtie_reverse_merge { + input = [ [ id:'test', strandedness:'reverse' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] + ] + annotation_gtf = file(params.test_data['homo_sapiens']['genome']['genome_gtf'], checkIfExists: true) + + STRINGTIE_REVERSE ( input, annotation_gtf ) + STRINGTIE_REVERSE.out.transcript_gtf + .map { it -> it[1] } + .set { stringtie_gtf } + STRINGTIE_REVERSE_MERGE ( stringtie_gtf, annotation_gtf ) +} diff --git a/tests/software/stringtie/merge/test.yml b/tests/software/stringtie/merge/test.yml new file mode 100644 index 00000000..9e2da033 --- /dev/null +++ b/tests/software/stringtie/merge/test.yml @@ -0,0 +1,17 @@ +- name: stringtie forward-strand merge + command: nextflow run ./tests/software/stringtie/merge/ -entry test_stringtie_forward_merge -c tests/config/nextflow.config + tags: + - stringtie + - stringtie/merge + files: + - path: ./output/test_stringtie_forward_merge/stringtie.merged.gtf + md5sum: 676aa20a2d7a3db18136cdc7ba183099 + +- name: stringtie reverse-strand merge + command: nextflow run ./tests/software/stringtie/merge/ -entry test_stringtie_reverse_merge -c tests/config/nextflow.config + tags: + - stringtie + - stringtie/merge + files: + - path: ./output/test_stringtie_reverse_merge/stringtie.merged.gtf + md5sum: 67e5102722ecaeea1fb44d1ec0953474 diff --git a/tests/software/stringtie/stringtie/main.nf b/tests/software/stringtie/stringtie/main.nf new file mode 100644 index 00000000..c009173d --- /dev/null +++ b/tests/software/stringtie/stringtie/main.nf @@ -0,0 +1,28 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { STRINGTIE as STRINGTIE_FORWARD } from '../../../../software/stringtie/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_forward' ] ) +include { STRINGTIE as STRINGTIE_REVERSE } from '../../../../software/stringtie/stringtie/main.nf' addParams( options: [ publish_dir:'test_stringtie_reverse' ] ) + +// +// Test with forward strandedness +// +workflow test_stringtie_forward { + input = [ [ id:'test', strandedness:'forward' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] ] + annotation_gtf = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + + STRINGTIE_FORWARD ( input, annotation_gtf ) +} + +// +// Test with reverse strandedness +// +workflow test_stringtie_reverse { + input = [ [ id:'test', strandedness:'reverse' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] ] + annotation_gtf = file(params.test_data['sarscov2']['genome']['genome_gtf'], checkIfExists: true) + + STRINGTIE_REVERSE ( input, annotation_gtf ) +} diff --git a/tests/software/stringtie/test.yml b/tests/software/stringtie/stringtie/test.yml similarity index 82% rename from tests/software/stringtie/test.yml rename to tests/software/stringtie/stringtie/test.yml index e690268c..1e3017e2 100644 --- a/tests/software/stringtie/test.yml +++ b/tests/software/stringtie/stringtie/test.yml @@ -1,10 +1,10 @@ -- name: stringtie forward-strand - command: nextflow run ./tests/software/stringtie/ -entry test_stringtie_forward -c tests/config/nextflow.config +- name: test_stringtie_forward + command: nextflow run ./tests/software/stringtie/stringtie/ -entry test_stringtie_forward -c tests/config/nextflow.config tags: - stringtie + - stringtie/stringtie files: - path: ./output/test_stringtie_forward/test.transcripts.gtf - md5sum: cbce87f06598eb756e7670ba3217a42f - path: ./output/test_stringtie_forward/test.gene.abundance.txt md5sum: 7d8bce7f2a922e367cedccae7267c22e - path: ./output/test_stringtie_forward/test.coverage.gtf @@ -20,13 +20,13 @@ - path: ./output/test_stringtie_forward/test.ballgown/e2t.ctab md5sum: e981c0038295ae54b63cedb1083f1540 -- name: stringtie reverse-strand - command: nextflow run ./tests/software/stringtie/ -entry test_stringtie_reverse -c tests/config/nextflow.config +- name: test_stringtie_reverse + command: nextflow run ./tests/software/stringtie/stringtie/ -entry test_stringtie_reverse -c tests/config/nextflow.config tags: - stringtie + - stringtie/stringtie files: - path: ./output/test_stringtie_reverse/test.transcripts.gtf - md5sum: bb992085e42bad19877c847dae496c80 - path: ./output/test_stringtie_reverse/test.gene.abundance.txt md5sum: 7385b870b955dae2c2ab78a70cf05cce - path: ./output/test_stringtie_reverse/test.coverage.gtf diff --git a/tests/software/subread/featurecounts/test.yml b/tests/software/subread/featurecounts/test.yml index 8609aa5d..efefcc10 100644 --- a/tests/software/subread/featurecounts/test.yml +++ b/tests/software/subread/featurecounts/test.yml @@ -2,8 +2,7 @@ command: nextflow run tests/software/subread/featurecounts -entry test_subread_featurecounts_forward -c tests/config/nextflow.config tags: - subread - - subread_featurecounts_forward - - subread_featurecounts + - subread/featurecounts files: - path: output/subread/test.featureCounts.txt.summary md5sum: d78617192451a57f6ef249ddcaf13720 @@ -14,8 +13,7 @@ command: nextflow run tests/software/subread/featurecounts -entry test_subread_featurecounts_reverse -c tests/config/nextflow.config tags: - subread - - subread_featurecounts - - subread_featurecounts_reverse + - subread/featurecounts files: - path: output/subread/test.featureCounts.txt.summary md5sum: 4217004d0b55f870f77092364f59e44d @@ -26,8 +24,7 @@ command: nextflow run tests/software/subread/featurecounts -entry test_subread_featurecounts_unstranded -c tests/config/nextflow.config tags: - subread - - subread_featurecounts - - subread_featurecounts_unstranded + - subread/featurecounts files: - path: output/subread/test.featureCounts.txt.summary md5sum: ee585faeb1edfcd2188a5e486a0e98a9 diff --git a/tests/software/tabix/bgzip/test.yml b/tests/software/tabix/bgzip/test.yml index 7e284124..c3775d47 100644 --- a/tests/software/tabix/bgzip/test.yml +++ b/tests/software/tabix/bgzip/test.yml @@ -2,7 +2,7 @@ command: nextflow run ./tests/software/tabix/bgzip -entry test_tabix_bgzip -c tests/config/nextflow.config tags: - tabix - - tabix_bgzip + - tabix/bgzip files: - path: ./output/tabix/test.vcf.gz md5sum: 0f1c94af3aa3e7e203d9e034ef6f8f4d diff --git a/tests/software/tabix/bgziptabix/main.nf b/tests/software/tabix/bgziptabix/main.nf new file mode 100644 index 00000000..264d5b99 --- /dev/null +++ b/tests/software/tabix/bgziptabix/main.nf @@ -0,0 +1,13 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { TABIX_BGZIPTABIX } from '../../../../software/tabix/bgziptabix/main.nf' addParams( options: ['args2': '-p vcf'] ) + +workflow test_tabix_bgziptabix { + input = [ [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + + TABIX_BGZIPTABIX ( input ) +} diff --git a/tests/software/tabix/bgziptabix/test.yml b/tests/software/tabix/bgziptabix/test.yml new file mode 100644 index 00000000..fe658fd7 --- /dev/null +++ b/tests/software/tabix/bgziptabix/test.yml @@ -0,0 +1,10 @@ +- name: tabix bgziptabix + command: nextflow run ./tests/software/tabix/bgziptabix -entry test_tabix_bgziptabix -c tests/config/nextflow.config + tags: + - tabix + - tabix/bgziptabix + files: + - path: ./output/tabix/test.gz + md5sum: 0f1c94af3aa3e7e203d9e034ef6f8f4d + - path: ./output/tabix/test.gz.tbi + md5sum: bbec39fd53cf2834909d52094980d094 diff --git a/tests/software/tabix/tabix/test.yml b/tests/software/tabix/tabix/test.yml index 65820a34..73c91168 100644 --- a/tests/software/tabix/tabix/test.yml +++ b/tests/software/tabix/tabix/test.yml @@ -2,8 +2,7 @@ command: nextflow run ./tests/software/tabix/tabix -entry test_tabix_tabix_bed -c tests/config/nextflow.config tags: - tabix - - tabix_tabix - - bed + - tabix/tabix files: - path: ./output/tabix/test.bed.gz.tbi md5sum: 115922d881d24879b15d20c3734495ac @@ -11,8 +10,7 @@ command: nextflow run ./tests/software/tabix/tabix -entry test_tabix_tabix_gff -c tests/config/nextflow.config tags: - tabix - - tabix_tabix - - gff + - tabix/tabix files: - path: ./output/tabix/genome.gff3.gz.tbi md5sum: 4059fe4762568194cf293fc6df7b358b @@ -20,8 +18,7 @@ command: nextflow run ./tests/software/tabix/tabix -entry test_tabix_tabix_vcf -c tests/config/nextflow.config tags: - tabix - - tabix_tabix - - vcf + - tabix/tabix files: - path: output/tabix/test.vcf.gz.tbi md5sum: bbec39fd53cf2834909d52094980d094 diff --git a/tests/software/tiddit/sv/main.nf b/tests/software/tiddit/sv/main.nf index a43f9cd2..da1fc6a1 100644 --- a/tests/software/tiddit/sv/main.nf +++ b/tests/software/tiddit/sv/main.nf @@ -5,9 +5,11 @@ nextflow.enable.dsl = 2 include { TIDDIT_SV } from '../../../../software/tiddit/sv/main.nf' addParams( options: [:] ) workflow test_tiddit_sv { - input = [ [ id:'test' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] + input = [ + [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] + ] + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) fai = file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) @@ -15,9 +17,10 @@ workflow test_tiddit_sv { } workflow test_tiddit_sv_no_ref { - input = [ [ id:'test' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] - ] + input = [ + [ id:'test' ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) ] + ] TIDDIT_SV ( input, [], [] ) } diff --git a/tests/software/tiddit/sv/test.yml b/tests/software/tiddit/sv/test.yml index 50b2f0f2..daea004c 100644 --- a/tests/software/tiddit/sv/test.yml +++ b/tests/software/tiddit/sv/test.yml @@ -2,26 +2,22 @@ command: nextflow run ./tests/software/tiddit/sv -entry test_tiddit_sv -c tests/config/nextflow.config tags: - tiddit - - tiddit_sv - - vcf + - tiddit/sv files: - path: output/tiddit/test.ploidy.tab md5sum: 45e050b0e204f0a5a3a99627cc440eaa - path: output/tiddit/test.signals.tab - md5sum: 25408a43dbdd01c08e33a6d670f2bb84 + md5sum: dab4b2fec4ddf8eb1c23005b0770150e - path: output/tiddit/test.vcf - should_exist: true - name: tiddit sv no ref command: nextflow run ./tests/software/tiddit/sv -entry test_tiddit_sv_no_ref -c tests/config/nextflow.config tags: - tiddit - - tiddit_sv - - vcf + - tiddit/sv files: - path: output/tiddit/test.ploidy.tab md5sum: 45e050b0e204f0a5a3a99627cc440eaa - path: output/tiddit/test.signals.tab - md5sum: 25408a43dbdd01c08e33a6d670f2bb84 + md5sum: dab4b2fec4ddf8eb1c23005b0770150e - path: output/tiddit/test.vcf - should_exist: true diff --git a/tests/software/trimgalore/main.nf b/tests/software/trimgalore/main.nf index 7fb8a9b0..e590bb93 100644 --- a/tests/software/trimgalore/main.nf +++ b/tests/software/trimgalore/main.nf @@ -4,9 +4,9 @@ nextflow.enable.dsl = 2 include { TRIMGALORE } from '../../../software/trimgalore/main.nf' addParams( options: [:] ) -/* - * Test with single-end data - */ +// +// Test with single-end data +// workflow test_trimgalore_single_end { input = [ [ id:'test', single_end:true ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] @@ -15,9 +15,9 @@ workflow test_trimgalore_single_end { TRIMGALORE ( input ) } -/* - * Test with paired-end data - */ +// +// Test with paired-end data +// workflow test_trimgalore_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), diff --git a/tests/software/ucsc/bed12tobigbed/main.nf b/tests/software/ucsc/bed12tobigbed/main.nf index 60118346..3adc25bf 100644 --- a/tests/software/ucsc/bed12tobigbed/main.nf +++ b/tests/software/ucsc/bed12tobigbed/main.nf @@ -6,9 +6,9 @@ include { UCSC_BED12TOBIGBED } from '../../../../software/ucsc/bed12tobigbed/mai workflow test_ucsc_bed12tobigbed { input = [ [ id: 'test' ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/genome/bed/test.bed12", checkIfExists: true ) ] + [ file(params.test_data['sarscov2']['genome']['test_bed12'], checkIfExists: true ) ] ] - sizes = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.sizes", checkIfExists: true) + sizes = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) UCSC_BED12TOBIGBED ( input, sizes ) } diff --git a/tests/software/ucsc/bed12tobigbed/test.yml b/tests/software/ucsc/bed12tobigbed/test.yml index 58641edf..9aadf265 100644 --- a/tests/software/ucsc/bed12tobigbed/test.yml +++ b/tests/software/ucsc/bed12tobigbed/test.yml @@ -1,7 +1,7 @@ - name: ucsc bed12tobigbed command: nextflow run ./tests/software/ucsc/bed12tobigbed -entry test_ucsc_bed12tobigbed -c tests/config/nextflow.config tags: - - ucsc_bed12tobigbed + - ucsc/bed12tobigbed files: - path: output/ucsc/test.bigBed md5sum: 98cf0d0baa3ae5a330c80afbb8bc2b18 diff --git a/tests/software/ucsc/bedclip/main.nf b/tests/software/ucsc/bedclip/main.nf new file mode 100755 index 00000000..19fb2004 --- /dev/null +++ b/tests/software/ucsc/bedclip/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UCSC_BEDCLIP } from '../../../../software/ucsc/bedclip/main.nf' addParams( options: [suffix:'.clip'] ) + +workflow test_ucsc_bedclip { + input = [ [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_bedgraph'], checkIfExists: true) + ] + sizes = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + + UCSC_BEDCLIP ( input, sizes ) +} diff --git a/tests/software/ucsc/bedclip/test.yml b/tests/software/ucsc/bedclip/test.yml new file mode 100755 index 00000000..bfab9634 --- /dev/null +++ b/tests/software/ucsc/bedclip/test.yml @@ -0,0 +1,8 @@ +- name: ucsc bedclip + command: nextflow run ./tests/software/ucsc/bedclip -entry test_ucsc_bedclip -c tests/config/nextflow.config + tags: + - ucsc + - ucsc/bedclip + files: + - path: output/ucsc/test.clip.bedGraph + md5sum: e02395e1f7c593b3f79563067159ebc2 diff --git a/tests/software/ucsc/bedgraphtobigwig/main.nf b/tests/software/ucsc/bedgraphtobigwig/main.nf index b533c4b7..099a9ea6 100644 --- a/tests/software/ucsc/bedgraphtobigwig/main.nf +++ b/tests/software/ucsc/bedgraphtobigwig/main.nf @@ -6,9 +6,9 @@ include { UCSC_BEDGRAPHTOBIGWIG } from '../../../../software/ucsc/bedgraphtobig workflow test_ucsc_bedgraphtobigwig { input = [ [ id:'test' ], // meta map - [ file('https://raw.githubusercontent.com/igvteam/igv.js/master/test/data/wig/bedgraph-example-uscs.bedgraph', checkIfExists: true) ] + [ file(params.test_data['sarscov2']['illumina']['test_bedgraph'], checkIfExists: true) ] ] - sizes = file('https://raw.githubusercontent.com/igvteam/igv.js/master/test/data/wig/chrom.sizes', checkIfExists: true) + sizes = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) UCSC_BEDGRAPHTOBIGWIG ( input, sizes ) } diff --git a/tests/software/ucsc/bedgraphtobigwig/test.yml b/tests/software/ucsc/bedgraphtobigwig/test.yml index 43ebc22c..a83b3039 100644 --- a/tests/software/ucsc/bedgraphtobigwig/test.yml +++ b/tests/software/ucsc/bedgraphtobigwig/test.yml @@ -1,7 +1,7 @@ - name: ucsc bedgraphtobigwig command: nextflow run ./tests/software/ucsc/bedgraphtobigwig -entry test_ucsc_bedgraphtobigwig -c tests/config/nextflow.config tags: - - ucsc_bedgraphtobigwig + - ucsc/bedgraphtobigwig files: - path: output/ucsc/test.bigWig - md5sum: 5346de25b01ecbff91b63178b3bfbeec + md5sum: 910ecc7f57e3bbd5fac5a8edba4f615d diff --git a/tests/software/ucsc/bigwigaverageoverbed/main.nf b/tests/software/ucsc/bigwigaverageoverbed/main.nf new file mode 100644 index 00000000..8230d320 --- /dev/null +++ b/tests/software/ucsc/bigwigaverageoverbed/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UCSC_BIGWIGAVERAGEOVERBED } from '../../../../software/ucsc/bigwigaverageoverbed/main.nf' addParams( options: [:] ) + +workflow test_ucsc_bigwigaverageoverbed { + input = [ [ id: 'test' ], // meta map + [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true ) ] + ] + bigwig = file(params.test_data['sarscov2']['illumina']['test_bigwig'], checkIfExists: true) + + UCSC_BIGWIGAVERAGEOVERBED ( input, bigwig ) +} diff --git a/tests/software/ucsc/bigwigaverageoverbed/test.yml b/tests/software/ucsc/bigwigaverageoverbed/test.yml new file mode 100644 index 00000000..9f66eaaa --- /dev/null +++ b/tests/software/ucsc/bigwigaverageoverbed/test.yml @@ -0,0 +1,8 @@ +- name: ucsc bigwigaverageoverbed test_ucsc_bigwigaverageoverbed + command: nextflow run tests/software/ucsc/bigwigaverageoverbed -entry test_ucsc_bigwigaverageoverbed -c tests/config/nextflow.config + tags: + - ucsc + - ucsc/bigwigaverageoverbed + files: + - path: output/ucsc/test.tab + md5sum: d92334d90353577571eaf777933dce9b diff --git a/tests/software/ucsc/wigtobigwig/main.nf b/tests/software/ucsc/wigtobigwig/main.nf new file mode 100644 index 00000000..18616d6d --- /dev/null +++ b/tests/software/ucsc/wigtobigwig/main.nf @@ -0,0 +1,14 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { UCSC_WIGTOBIGWIG } from '../../../../software/ucsc/wigtobigwig/main.nf' addParams( options: [:] ) + +workflow test_ucsc_wigtobigwig { + + input = file(params.test_data['sarscov2']['illumina']['test_wig_gz'], checkIfExists: true) + + sizes = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + + UCSC_WIGTOBIGWIG ( input, sizes ) +} diff --git a/tests/software/ucsc/wigtobigwig/test.yml b/tests/software/ucsc/wigtobigwig/test.yml new file mode 100644 index 00000000..a22c13a0 --- /dev/null +++ b/tests/software/ucsc/wigtobigwig/test.yml @@ -0,0 +1,8 @@ +- name: ucsc wigtobigwig test_ucsc_wigtobigwig + command: nextflow run tests/software/ucsc/wigtobigwig -entry test_ucsc_wigtobigwig -c tests/config/nextflow.config + tags: + - ucsc + - ucsc/wigtobigwig + files: + - path: output/ucsc/test.bw + md5sum: b64af7003665dc51fae958216b06ed95 diff --git a/tests/software/unicycler/main.nf b/tests/software/unicycler/main.nf index 0587df1e..ff854c50 100644 --- a/tests/software/unicycler/main.nf +++ b/tests/software/unicycler/main.nf @@ -6,7 +6,7 @@ include { UNICYCLER } from '../../../software/unicycler/main.nf' addParams( opti workflow test_unicycler_single_end { input = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + [ file(params.test_data['sarscov2']['nanopore']['test_fastq_gz'], checkIfExists: true) ] ] UNICYCLER ( input ) @@ -15,7 +15,7 @@ workflow test_unicycler_single_end { workflow test_unicycler_paired_end { input = [ [ id:'test', single_end:false ], // meta map [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] UNICYCLER ( input ) diff --git a/tests/software/unicycler/test.yml b/tests/software/unicycler/test.yml index 5e6dd790..df7eb0de 100644 --- a/tests/software/unicycler/test.yml +++ b/tests/software/unicycler/test.yml @@ -2,7 +2,6 @@ command: nextflow run ./tests/software/unicycler -entry test_unicycler_single_end -c tests/config/nextflow.config tags: - unicycler - - unicycler_single_end files: - path: output/unicycler/test.scaffolds.fa - path: output/unicycler/test.assembly.gfa @@ -14,7 +13,6 @@ command: nextflow run ./tests/software/unicycler -entry test_unicycler_paired_end -c tests/config/nextflow.config tags: - unicycler - - unicycler_paired_end files: - path: output/unicycler/test.scaffolds.fa - path: output/unicycler/test.assembly.gfa diff --git a/tests/software/vcftools/test.yml b/tests/software/vcftools/test.yml index b7a7f784..24955f2f 100644 --- a/tests/software/vcftools/test.yml +++ b/tests/software/vcftools/test.yml @@ -2,7 +2,6 @@ command: nextflow run tests/software/vcftools -entry test_vcftools_vcf_base -c tests/config/nextflow.config tags: - vcftools - - vcftools_vcf_base files: - path: output/vcftools/test.frq md5sum: 7f126655f17268fd1a338734f62868e9 @@ -10,7 +9,6 @@ - name: vcftools test_vcftools_vcfgz_base command: nextflow run tests/software/vcftools -entry test_vcftools_vcfgz_base -c tests/config/nextflow.config tags: - - vcftools_vcfgz_base - vcftools files: - path: output/vcftools/test.frq @@ -20,7 +18,6 @@ command: nextflow run tests/software/vcftools -entry test_vcftools_vcf_optional -c tests/config/nextflow.config tags: - vcftools - - vcftools_vcf_optional files: - path: output/vcftools/test.frq md5sum: 7f126655f17268fd1a338734f62868e9 @@ -29,7 +26,6 @@ command: nextflow run tests/software/vcftools -entry test_vcftools_vcfgz_optional -c tests/config/nextflow.config tags: - vcftools - - vcftools_vcfgz_optional files: - path: output/vcftools/test.frq md5sum: 7f126655f17268fd1a338734f62868e9 diff --git a/tests/software/yara/index/test.yml b/tests/software/yara/index/test.yml index 8942b27d..3ab1fb1f 100644 --- a/tests/software/yara/index/test.yml +++ b/tests/software/yara/index/test.yml @@ -1,7 +1,7 @@ - name: yara index test_yara_index command: nextflow run tests/software/yara/index -entry test_yara_index -c tests/config/nextflow.config tags: - - yara_index + - yara/index - yara files: - path: output/index/yara/yara.rid.limits diff --git a/tests/software/yara/mapper/main.nf b/tests/software/yara/mapper/main.nf index 41ad173c..d2b3d922 100644 --- a/tests/software/yara/mapper/main.nf +++ b/tests/software/yara/mapper/main.nf @@ -8,25 +8,23 @@ include { YARA_MAPPER } from '../../../../software/yara/mapper/main.nf' addParam workflow test_yara_single_end { - def fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - YARA_INDEX ( fasta ) - - def input = [] + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) input = [ [ id:'test', single_end:true ], // meta map - file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true) ] + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + + YARA_INDEX ( fasta ) YARA_MAPPER ( input, YARA_INDEX.out.index ) } workflow test_yara_paired_end { - def fasta = file("${launchDir}/tests/data/genomics/sarscov2/genome/genome.fasta", checkIfExists: true) - YARA_INDEX ( fasta ) + fasta = file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - def input = [] input = [ [ id:'test', single_end:false ], // meta map - [ file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_1.fastq.gz", checkIfExists: true), - file("${launchDir}/tests/data/genomics/sarscov2/illumina/fastq/test_2.fastq.gz", checkIfExists: true) ] ] + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] ] + YARA_INDEX ( fasta ) YARA_MAPPER ( input, YARA_INDEX.out.index ) } diff --git a/tests/software/yara/mapper/test.yml b/tests/software/yara/mapper/test.yml index cb364d85..59cac33b 100644 --- a/tests/software/yara/mapper/test.yml +++ b/tests/software/yara/mapper/test.yml @@ -1,8 +1,7 @@ - name: yara mapper test_yara_single_end command: nextflow run tests/software/yara/mapper -entry test_yara_single_end -c tests/config/nextflow.config tags: - - yara_single_end - - yara_mapper + - yara/mapper - yara files: - path: output/yara/test.mapped.bam @@ -36,8 +35,7 @@ - name: yara mapper test_yara_paired_end command: nextflow run tests/software/yara/mapper -entry test_yara_paired_end -c tests/config/nextflow.config tags: - - yara_mapper - - yara_paired_end + - yara/mapper - yara files: - path: output/yara/test_2.mapped.bam